ktlint: Format all compose code
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -7,4 +7,5 @@ root = true
|
|||||||
|
|
||||||
[*.{kt,kts}]
|
[*.{kt,kts}]
|
||||||
ktlint_code_style = android_studio
|
ktlint_code_style = android_studio
|
||||||
ktlint_function_naming_ignore_when_annotated_with=Composable
|
ktlint_function_naming_ignore_when_annotated_with = Composable
|
||||||
|
ktlint_standard_class-signature = disabled
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ fun BlackListItem(
|
|||||||
modifier = Modifier.requiredSize(dimensionResource(R.dimen.icon_size_medium))
|
modifier = Modifier.requiredSize(dimensionResource(R.dimen.icon_size_medium))
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small)),
|
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small))
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = displayName,
|
text = displayName,
|
||||||
|
|||||||
@@ -68,9 +68,9 @@ fun DispenserListItem(
|
|||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Preview(showBackground = true)
|
@Preview(showBackground = true)
|
||||||
@Composable
|
@Composable
|
||||||
private fun DispenserListItemPreview() {
|
private fun DispenserListItemPreview() {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ fun DownloadListItem(
|
|||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(horizontal = dimensionResource(R.dimen.margin_small)),
|
.padding(horizontal = dimensionResource(R.dimen.margin_small))
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = download.displayName,
|
text = download.displayName,
|
||||||
|
|||||||
@@ -102,7 +102,9 @@ fun FavouriteListItem(
|
|||||||
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small))
|
modifier = Modifier.padding(
|
||||||
|
horizontal = dimensionResource(R.dimen.margin_small)
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = favourite.displayName,
|
text = favourite.displayName,
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ fun Header(
|
|||||||
text = title,
|
text = title,
|
||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
if (!subtitle.isNullOrBlank()) {
|
if (!subtitle.isNullOrBlank()) {
|
||||||
Text(
|
Text(
|
||||||
@@ -74,7 +74,7 @@ fun Header(
|
|||||||
if (onClick != null) {
|
if (onClick != null) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = painterResource(R.drawable.ic_arrow_right),
|
painter = painterResource(R.drawable.ic_arrow_right),
|
||||||
contentDescription = null,
|
contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ fun Logo(modifier: Modifier = Modifier) {
|
|||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Preview(showBackground = true)
|
@Preview(showBackground = true)
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ fun MicroG(
|
|||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.onboarding_gms_microg),
|
text = stringResource(R.string.onboarding_gms_microg),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium
|
||||||
)
|
)
|
||||||
|
|
||||||
links.fastForEach { link ->
|
links.fastForEach { link ->
|
||||||
@@ -132,10 +132,11 @@ fun MicroG(
|
|||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = if (uiState.isDownloading)
|
text = if (uiState.isDownloading) {
|
||||||
stringResource(R.string.action_installing)
|
stringResource(R.string.action_installing)
|
||||||
else
|
} else {
|
||||||
stringResource(R.string.action_install_microG)
|
stringResource(R.string.action_install_microG)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (uiState.isDownloading) {
|
if (uiState.isDownloading) {
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ fun AnimatedAppIcon(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ProgressProvider: PreviewParameterProvider<Float> {
|
private class ProgressProvider : PreviewParameterProvider<Float> {
|
||||||
override val values: Sequence<Float>
|
override val values: Sequence<Float>
|
||||||
get() = sequenceOf(0F, 50F)
|
get() = sequenceOf(0F, 50F)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ fun LargeAppListItem(modifier: Modifier = Modifier, app: App, onClick: () -> Uni
|
|||||||
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small)),
|
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small))
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = app.displayName,
|
text = app.displayName,
|
||||||
@@ -90,8 +90,7 @@ fun LargeAppListItemPreview(@PreviewParameter(AppPreviewProvider::class) app: Ap
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun buildExtras(app: App): List<String> {
|
private fun buildExtras(app: App): List<String> = mutableListOf<String>().apply {
|
||||||
return mutableListOf<String>().apply {
|
|
||||||
add(if (app.size > 0) CommonUtil.addSiPrefix(app.size) else app.downloadString)
|
add(if (app.size > 0) CommonUtil.addSiPrefix(app.size) else app.downloadString)
|
||||||
add("${app.labeledRating}★")
|
add("${app.labeledRating}★")
|
||||||
|
|
||||||
@@ -110,5 +109,4 @@ private fun buildExtras(app: App): List<String> {
|
|||||||
if (app.requiresGMS()) {
|
if (app.requiresGMS()) {
|
||||||
add(stringResource(R.string.details_gsf_dependent))
|
add(stringResource(R.string.details_gsf_dependent))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ private fun ExodusListItemPreview() {
|
|||||||
ExodusListItem(
|
ExodusListItem(
|
||||||
tracker = ExodusTracker(
|
tracker = ExodusTracker(
|
||||||
name = "Google Analytics",
|
name = "Google Analytics",
|
||||||
signature = "com.google.android.apps.analytics.|com.google.android.gms.analytics.|com.google.analytics.",
|
signature = "com.google.android.apps.analytics.|com.google.analytics.",
|
||||||
date = "2017-09-24"
|
date = "2017-09-24"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ fun ReviewListItem(modifier: Modifier = Modifier, review: Review) {
|
|||||||
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
.clip(RoundedCornerShape(dimensionResource(R.dimen.radius_medium)))
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small)),
|
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.margin_small))
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = review.userName,
|
text = review.userName,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ sealed class Screen : NavKey, Parcelable {
|
|||||||
data object Blacklist : Screen()
|
data object Blacklist : Screen()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class DevProfile(val developerId: String): Screen()
|
data class DevProfile(val developerId: String) : Screen()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class AppDetails(val packageName: String) : Screen()
|
data class AppDetails(val packageName: String) : Screen()
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class AppPreviewProvider : PreviewParameterProvider<App> {
|
|||||||
developerName = "Rahul Kumar Patel",
|
developerName = "Rahul Kumar Patel",
|
||||||
versionCode = BuildConfig.VERSION_CODE.toLong(),
|
versionCode = BuildConfig.VERSION_CODE.toLong(),
|
||||||
versionName = BuildConfig.VERSION_NAME,
|
versionName = BuildConfig.VERSION_NAME,
|
||||||
shortDescription = "An unofficial FOSS client to Google Play with an elegant design and privacy",
|
shortDescription = "An unofficial FOSS client to Google Play",
|
||||||
changes = CHANGELOG,
|
changes = CHANGELOG,
|
||||||
description = DESCRIPTION,
|
description = DESCRIPTION,
|
||||||
isFree = true,
|
isFree = true,
|
||||||
@@ -82,7 +82,7 @@ class AppPreviewProvider : PreviewParameterProvider<App> {
|
|||||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
),
|
),
|
||||||
privacyPolicyUrl = "https://gitlab.com/AuroraOSS/AuroraStore/-/blob/master/POLICY.md",
|
privacyPolicyUrl = "https://gitlab.com/AuroraOSS/AuroraStore/"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import com.aurora.store.compose.theme.AuroraTheme
|
|||||||
* Template for previewing composable with default theme and remote image handling
|
* Template for previewing composable with default theme and remote image handling
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun PreviewTemplate(content : @Composable () -> Unit) {
|
fun PreviewTemplate(content: @Composable () -> Unit) {
|
||||||
AuroraTheme {
|
AuroraTheme {
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
value = LocalAsyncImagePreviewHandler provides coilPreviewProvider,
|
value = LocalAsyncImagePreviewHandler provides coilPreviewProvider,
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ private fun ScreenContent(onNavigateUp: () -> Unit = {}, onAboutAurora: () -> Un
|
|||||||
R.drawable.ic_ethereum_eth,
|
R.drawable.ic_ethereum_eth,
|
||||||
R.drawable.ic_bhim,
|
R.drawable.ic_bhim,
|
||||||
R.drawable.ic_paypal,
|
R.drawable.ic_paypal,
|
||||||
R.drawable.ic_libera_pay,
|
R.drawable.ic_libera_pay
|
||||||
)
|
)
|
||||||
|
|
||||||
val links = linkURLS.mapIndexed { index, url ->
|
val links = linkURLS.mapIndexed { index, url ->
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ import com.aurora.store.compose.ui.blacklist.menu.BlacklistMenu
|
|||||||
import com.aurora.store.compose.ui.blacklist.menu.MenuItem
|
import com.aurora.store.compose.ui.blacklist.menu.MenuItem
|
||||||
import com.aurora.store.util.PackageUtil
|
import com.aurora.store.util.PackageUtil
|
||||||
import com.aurora.store.viewmodel.blacklist.BlacklistViewModel
|
import com.aurora.store.viewmodel.blacklist.BlacklistViewModel
|
||||||
|
import java.util.Calendar
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.Calendar
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun BlacklistScreen(onNavigateUp: () -> Unit, viewModel: BlacklistViewModel = hiltViewModel()) {
|
fun BlacklistScreen(onNavigateUp: () -> Unit, viewModel: BlacklistViewModel = hiltViewModel()) {
|
||||||
@@ -132,7 +132,9 @@ private fun ScreenContent(
|
|||||||
BlacklistMenu { menuItem ->
|
BlacklistMenu { menuItem ->
|
||||||
when (menuItem) {
|
when (menuItem) {
|
||||||
MenuItem.SELECT_ALL -> onBlacklistAll()
|
MenuItem.SELECT_ALL -> onBlacklistAll()
|
||||||
|
|
||||||
MenuItem.REMOVE_ALL -> onWhitelistAll()
|
MenuItem.REMOVE_ALL -> onWhitelistAll()
|
||||||
|
|
||||||
MenuItem.IMPORT -> {
|
MenuItem.IMPORT -> {
|
||||||
docImportLauncher.launch(arrayOf(Constants.JSON_MIME_TYPE))
|
docImportLauncher.launch(arrayOf(Constants.JSON_MIME_TYPE))
|
||||||
}
|
}
|
||||||
@@ -218,7 +220,9 @@ private fun ScreenContent(
|
|||||||
val isFiltered = isPackageFiltered(pkg)
|
val isFiltered = isPackageFiltered(pkg)
|
||||||
BlackListItem(
|
BlackListItem(
|
||||||
icon = PackageUtil.getIconForPackage(context, pkg.packageName)!!,
|
icon = PackageUtil.getIconForPackage(context, pkg.packageName)!!,
|
||||||
displayName = pkg.applicationInfo!!.loadLabel(context.packageManager).toString(),
|
displayName = pkg.applicationInfo!!.loadLabel(
|
||||||
|
context.packageManager
|
||||||
|
).toString(),
|
||||||
packageName = pkg.packageName,
|
packageName = pkg.packageName,
|
||||||
versionName = pkg.versionName!!,
|
versionName = pkg.versionName!!,
|
||||||
versionCode = PackageInfoCompat.getLongVersionCode(pkg),
|
versionCode = PackageInfoCompat.getLongVersionCode(pkg),
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import com.aurora.extensions.share
|
|||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.gplayapi.data.models.Review
|
import com.aurora.gplayapi.data.models.Review
|
||||||
|
import com.aurora.gplayapi.data.models.datasafety.Report as DataSafetyReport
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.compose.composable.ContainedLoadingIndicator
|
import com.aurora.store.compose.composable.ContainedLoadingIndicator
|
||||||
import com.aurora.store.compose.composable.Error
|
import com.aurora.store.compose.composable.Error
|
||||||
@@ -85,9 +86,8 @@ import com.aurora.store.util.FlavouredUtil
|
|||||||
import com.aurora.store.util.PackageUtil
|
import com.aurora.store.util.PackageUtil
|
||||||
import com.aurora.store.util.ShortcutManagerUtil
|
import com.aurora.store.util.ShortcutManagerUtil
|
||||||
import com.aurora.store.viewmodel.details.AppDetailsViewModel
|
import com.aurora.store.viewmodel.details.AppDetailsViewModel
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
import com.aurora.gplayapi.data.models.datasafety.Report as DataSafetyReport
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AppDetailsScreen(
|
fun AppDetailsScreen(
|
||||||
@@ -112,6 +112,7 @@ fun AppDetailsScreen(
|
|||||||
|
|
||||||
when (state) {
|
when (state) {
|
||||||
is AppState.Loading -> ScreenContentLoading(onNavigateUp = onNavigateUp)
|
is AppState.Loading -> ScreenContentLoading(onNavigateUp = onNavigateUp)
|
||||||
|
|
||||||
is AppState.Error -> {
|
is AppState.Error -> {
|
||||||
ScreenContentError(
|
ScreenContentError(
|
||||||
onNavigateUp = onNavigateUp,
|
onNavigateUp = onNavigateUp,
|
||||||
@@ -238,8 +239,8 @@ private fun ScreenContentApp(
|
|||||||
|
|
||||||
fun onInstall(requestedApp: App = app, ignoreMicroG: Boolean = false) {
|
fun onInstall(requestedApp: App = app, ignoreMicroG: Boolean = false) {
|
||||||
if (isPermittedToInstall(context, app)) {
|
if (isPermittedToInstall(context, app)) {
|
||||||
val shouldPromptMicroGInstall = app.requiresGMS()
|
val shouldPromptMicroGInstall = app.requiresGMS() &&
|
||||||
&& FlavouredUtil.promptMicroGInstall(context)
|
FlavouredUtil.promptMicroGInstall(context)
|
||||||
|
|
||||||
if (shouldPromptMicroGInstall && !ignoreMicroG) {
|
if (shouldPromptMicroGInstall && !ignoreMicroG) {
|
||||||
showExtraPane(ExtraScreen.MicroG)
|
showExtraPane(ExtraScreen.MicroG)
|
||||||
@@ -262,11 +263,15 @@ private fun ScreenContentApp(
|
|||||||
AppDetailsMenu(isFavorite = isFavorite, state = state) { menuItem ->
|
AppDetailsMenu(isFavorite = isFavorite, state = state) { menuItem ->
|
||||||
when (menuItem) {
|
when (menuItem) {
|
||||||
MenuItem.FAVORITE -> onFavorite()
|
MenuItem.FAVORITE -> onFavorite()
|
||||||
|
|
||||||
MenuItem.MANUAL_DOWNLOAD -> {
|
MenuItem.MANUAL_DOWNLOAD -> {
|
||||||
showExtraPane(ExtraScreen.ManualDownload)
|
showExtraPane(ExtraScreen.ManualDownload)
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuItem.SHARE -> context.share(app.displayName, app.packageName)
|
MenuItem.SHARE -> context.share(app.displayName, app.packageName)
|
||||||
|
|
||||||
MenuItem.APP_INFO -> context.appInfo(app.packageName)
|
MenuItem.APP_INFO -> context.appInfo(app.packageName)
|
||||||
|
|
||||||
MenuItem.ADD_TO_HOME -> {
|
MenuItem.ADD_TO_HOME -> {
|
||||||
ShortcutManagerUtil.requestPinShortcut(context, app.packageName)
|
ShortcutManagerUtil.requestPinShortcut(context, app.packageName)
|
||||||
}
|
}
|
||||||
@@ -454,8 +459,7 @@ private fun ScreenContentApp(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ExtraPane(screen: NavKey) {
|
fun ExtraPane(screen: NavKey) = when (screen) {
|
||||||
return when (screen) {
|
|
||||||
is ExtraScreen.Review -> ReviewScreen(
|
is ExtraScreen.Review -> ReviewScreen(
|
||||||
packageName = app.packageName,
|
packageName = app.packageName,
|
||||||
onNavigateUp = ::onNavigateBack
|
onNavigateUp = ::onNavigateBack
|
||||||
@@ -509,7 +513,6 @@ private fun ScreenContentApp(
|
|||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
NavigableSupportingPaneScaffold(
|
NavigableSupportingPaneScaffold(
|
||||||
navigator = scaffoldNavigator,
|
navigator = scaffoldNavigator,
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ private fun ScreenContentError(
|
|||||||
navigationIcon = windowAdaptiveInfo.adaptiveNavigationIcon,
|
navigationIcon = windowAdaptiveInfo.adaptiveNavigationIcon,
|
||||||
onNavigateUp = onNavigateUp
|
onNavigateUp = onNavigateUp
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
) { paddingValues ->
|
) { paddingValues ->
|
||||||
Error(
|
Error(
|
||||||
modifier = Modifier.padding(paddingValues),
|
modifier = Modifier.padding(paddingValues),
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ private fun ScreenContent(
|
|||||||
onRequestInstall: (versionCode: Long) -> Unit = {},
|
onRequestInstall: (versionCode: Long) -> Unit = {},
|
||||||
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val snackBarHostState = remember { SnackbarHostState() }
|
val snackBarHostState = remember { SnackbarHostState() }
|
||||||
val errorMessage = stringResource(R.string.manual_download_version_error)
|
val errorMessage = stringResource(R.string.manual_download_version_error)
|
||||||
@@ -180,7 +179,9 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium))
|
horizontalArrangement = Arrangement.spacedBy(
|
||||||
|
dimensionResource(R.dimen.padding_medium)
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
modifier = Modifier.weight(1F),
|
modifier = Modifier.weight(1F),
|
||||||
|
|||||||
@@ -116,7 +116,9 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium))
|
horizontalArrangement = Arrangement.spacedBy(
|
||||||
|
dimensionResource(R.dimen.padding_medium)
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
modifier = Modifier.weight(1F),
|
modifier = Modifier.weight(1F),
|
||||||
@@ -135,10 +137,11 @@ private fun ScreenContent(
|
|||||||
enabled = !uiState.isDownloading
|
enabled = !uiState.isDownloading
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = if (uiState.isInstalled)
|
text = if (uiState.isInstalled) {
|
||||||
stringResource(R.string.action_install)
|
stringResource(R.string.action_install)
|
||||||
else
|
} else {
|
||||||
stringResource(R.string.action_ignore),
|
stringResource(R.string.action_ignore)
|
||||||
|
},
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ import com.aurora.store.compose.preview.PreviewTemplate
|
|||||||
import com.aurora.store.compose.preview.ReviewPreviewProvider
|
import com.aurora.store.compose.preview.ReviewPreviewProvider
|
||||||
import com.aurora.store.viewmodel.details.AppDetailsViewModel
|
import com.aurora.store.viewmodel.details.AppDetailsViewModel
|
||||||
import com.aurora.store.viewmodel.details.ReviewViewModel
|
import com.aurora.store.viewmodel.details.ReviewViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ReviewScreen(
|
fun ReviewScreen(
|
||||||
@@ -90,7 +90,6 @@ private fun ScreenContent(
|
|||||||
onFilter: (filter: Review.Filter) -> Unit = {},
|
onFilter: (filter: Review.Filter) -> Unit = {},
|
||||||
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
@@ -131,8 +130,6 @@ private fun ScreenContent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +172,7 @@ private fun FilterHeader(onClick: (filter: Review.Filter) -> Unit) {
|
|||||||
contentDescription = stringResource(filters.getValue(filter))
|
contentDescription = stringResource(filters.getValue(filter))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,9 @@ fun Actions(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun ActionsPreview() {
|
private fun ActionsPreview() {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Actions(
|
Actions(
|
||||||
primaryActionDisplayName = stringResource(R.string.action_install),
|
primaryActionDisplayName = stringResource(R.string.action_install),
|
||||||
secondaryActionDisplayName = stringResource(R.string.title_manual_download)
|
secondaryActionDisplayName = stringResource(R.string.title_manual_download)
|
||||||
|
|||||||
@@ -59,7 +59,9 @@ fun Changelog(changelog: String) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun ChangelogPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun ChangelogPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Changelog(changelog = app.changes)
|
Changelog(changelog = app.changes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import com.aurora.store.data.model.Scores
|
|||||||
fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
|
fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
|
||||||
Header(
|
Header(
|
||||||
title = stringResource(R.string.details_compatibility_title),
|
title = stringResource(R.string.details_compatibility_title),
|
||||||
subtitle = stringResource(R.string.plexus_powered),
|
subtitle = stringResource(R.string.plexus_powered)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!needsGms) {
|
if (!needsGms) {
|
||||||
@@ -63,7 +63,7 @@ fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
|
|||||||
|
|
||||||
val scoresStatus = mapOf(
|
val scoresStatus = mapOf(
|
||||||
R.string.details_compatibility_no_gms to plexusScores?.aosp?.status,
|
R.string.details_compatibility_no_gms to plexusScores?.aosp?.status,
|
||||||
R.string.details_compatibility_microg to plexusScores?.microG?.status,
|
R.string.details_compatibility_microg to plexusScores?.microG?.status
|
||||||
)
|
)
|
||||||
scoresStatus.forEach { (title, description) ->
|
scoresStatus.forEach { (title, description) ->
|
||||||
Info(
|
Info(
|
||||||
@@ -80,7 +80,9 @@ fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun CompatibilityPreview() {
|
private fun CompatibilityPreview() {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Compatibility(needsGms = true)
|
Compatibility(needsGms = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ fun DataSafety(report: Report, privacyPolicyUrl: String) {
|
|||||||
.ifBlank {
|
.ifBlank {
|
||||||
stringResource(R.string.details_data_safety_share_none)
|
stringResource(R.string.details_data_safety_share_none)
|
||||||
}
|
}
|
||||||
),
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,9 @@ fun DataSafety(report: Report, privacyPolicyUrl: String) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun DataSafetyPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun DataSafetyPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
DataSafety(
|
DataSafety(
|
||||||
privacyPolicyUrl = app.privacyPolicyUrl,
|
privacyPolicyUrl = app.privacyPolicyUrl,
|
||||||
report = Report(
|
report = Report(
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import com.aurora.store.util.PackageUtil
|
|||||||
fun Details(
|
fun Details(
|
||||||
app: App,
|
app: App,
|
||||||
state: AppState = AppState.Unavailable,
|
state: AppState = AppState.Unavailable,
|
||||||
onNavigateToDetailsDevProfile: (developerName: String) -> Unit = {},
|
onNavigateToDetailsDevProfile: (developerName: String) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val versionName = if (state is AppState.Installed) state.versionName else app.versionName
|
val versionName = if (state is AppState.Installed) state.versionName else app.versionName
|
||||||
@@ -96,6 +96,7 @@ fun Details(
|
|||||||
}
|
}
|
||||||
|
|
||||||
AppState.Queued::class -> stringResource(R.string.status_queued)
|
AppState.Queued::class -> stringResource(R.string.status_queued)
|
||||||
|
|
||||||
AppState.Purchasing::class -> stringResource(R.string.preparing_to_install)
|
AppState.Purchasing::class -> stringResource(R.string.preparing_to_install)
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
@@ -112,7 +113,9 @@ fun Details(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun DetailsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun DetailsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Details(app = app)
|
Details(app = app)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,9 @@ fun DeveloperDetails(address: String, website: String, email: String) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun DeveloperDetailsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun DeveloperDetailsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
DeveloperDetails(
|
DeveloperDetails(
|
||||||
address = app.developerAddress,
|
address = app.developerAddress,
|
||||||
website = app.developerWebsite,
|
website = app.developerWebsite,
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ fun Privacy(report: Report?, onNavigateToDetailsExodus: (() -> Unit)? = null) {
|
|||||||
|
|
||||||
val reportStatus = when {
|
val reportStatus = when {
|
||||||
report == null -> stringResource(R.string.failed_to_fetch_report)
|
report == null -> stringResource(R.string.failed_to_fetch_report)
|
||||||
|
|
||||||
report.id == -1 -> stringResource(R.string.exodus_progress)
|
report.id == -1 -> stringResource(R.string.exodus_progress)
|
||||||
|
|
||||||
else -> if (report.trackers.isEmpty()) {
|
else -> if (report.trackers.isEmpty()) {
|
||||||
stringResource(R.string.exodus_no_tracker)
|
stringResource(R.string.exodus_no_tracker)
|
||||||
} else {
|
} else {
|
||||||
@@ -60,7 +62,9 @@ fun Privacy(report: Report?, onNavigateToDetailsExodus: (() -> Unit)? = null) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun PrivacyPreview() {
|
private fun PrivacyPreview() {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Privacy(report = Report(), onNavigateToDetailsExodus = {})
|
Privacy(report = Report(), onNavigateToDetailsExodus = {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ fun RatingAndReviews(
|
|||||||
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
||||||
) {
|
) {
|
||||||
val stars = listOf(
|
val stars = listOf(
|
||||||
rating.oneStar, rating.twoStar, rating.threeStar, rating.fourStar, rating.fiveStar
|
rating.oneStar,
|
||||||
|
rating.twoStar,
|
||||||
|
rating.threeStar,
|
||||||
|
rating.fourStar,
|
||||||
|
rating.fiveStar
|
||||||
).map { it.toFloat() }.also {
|
).map { it.toFloat() }.also {
|
||||||
// No ratings available, nothing to show
|
// No ratings available, nothing to show
|
||||||
if (it.sum() == 0F) return
|
if (it.sum() == 0F) return
|
||||||
@@ -150,7 +154,9 @@ private fun RatingAndReviewsPreview(@PreviewParameter(AppPreviewProvider::class)
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
RatingAndReviews(rating = app.rating, featuredReviews = reviews)
|
RatingAndReviews(rating = app.rating, featuredReviews = reviews)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,9 @@ fun Screenshots(screenshots: List<Artwork>, onNavigateToScreenshot: (index: Int)
|
|||||||
@Composable
|
@Composable
|
||||||
private fun ScreenshotsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun ScreenshotsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Screenshots(screenshots = app.screenshots)
|
Screenshots(screenshots = app.screenshots)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ fun Tags(app: App) {
|
|||||||
Formatter.formatShortFileSize(context, app.size) to R.drawable.ic_apk_install,
|
Formatter.formatShortFileSize(context, app.size) to R.drawable.ic_apk_install,
|
||||||
app.updatedOn to R.drawable.ic_updates,
|
app.updatedOn to R.drawable.ic_updates,
|
||||||
paidLabel to R.drawable.ic_paid,
|
paidLabel to R.drawable.ic_paid,
|
||||||
adsLabel to R.drawable.ic_campaign,
|
adsLabel to R.drawable.ic_campaign
|
||||||
).filterKeys { it != null }
|
).filterKeys { it != null }
|
||||||
|
|
||||||
LazyRow(
|
LazyRow(
|
||||||
@@ -72,7 +72,9 @@ fun Tags(app: App) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun TagsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun TagsPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Tags(app = app)
|
Tags(app = app)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ fun Testing(isSubscribed: Boolean, onTestingSubscriptionChange: (subscribe: Bool
|
|||||||
@Composable
|
@Composable
|
||||||
private fun TestingPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun TestingPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))) {
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
|
||||||
|
) {
|
||||||
Testing(isSubscribed = app.testingProgram!!.isSubscribed)
|
Testing(isSubscribed = app.testingProgram!!.isSubscribed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ import com.aurora.store.compose.preview.AppPreviewProvider
|
|||||||
import com.aurora.store.compose.preview.PreviewTemplate
|
import com.aurora.store.compose.preview.PreviewTemplate
|
||||||
import com.aurora.store.viewmodel.details.DevProfileViewModel
|
import com.aurora.store.viewmodel.details.DevProfileViewModel
|
||||||
import com.aurora.store.viewmodel.search.SearchViewModel
|
import com.aurora.store.viewmodel.search.SearchViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Screen to display apps from a developer using the developerId
|
* Screen to display apps from a developer using the developerId
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ fun DispenserScreen(onNavigateUp: () -> Unit, viewModel: DispenserViewModel = hi
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var shouldRemoveDispenser : String? by rememberSaveable { mutableStateOf(null) }
|
var shouldRemoveDispenser: String? by rememberSaveable { mutableStateOf(null) }
|
||||||
shouldRemoveDispenser?.let { url ->
|
shouldRemoveDispenser?.let { url ->
|
||||||
RemoveDispenserDialog(
|
RemoveDispenserDialog(
|
||||||
url = url,
|
url = url,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ fun InputDispenserDialog(onAdd: (url: String) -> Unit = {}, onDismiss: () -> Uni
|
|||||||
onValueChange = { url = it },
|
onValueChange = { url = it },
|
||||||
shape = RoundedCornerShape(10.dp),
|
shape = RoundedCornerShape(10.dp),
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() })
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ import com.aurora.store.compose.ui.downloads.menu.MenuItem
|
|||||||
import com.aurora.store.data.model.DownloadStatus
|
import com.aurora.store.data.model.DownloadStatus
|
||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
|
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DownloadsScreen(
|
fun DownloadsScreen(
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ import com.aurora.store.compose.ui.favourite.menu.FavouriteMenu
|
|||||||
import com.aurora.store.compose.ui.favourite.menu.MenuItem
|
import com.aurora.store.compose.ui.favourite.menu.MenuItem
|
||||||
import com.aurora.store.data.room.favourite.Favourite
|
import com.aurora.store.data.room.favourite.Favourite
|
||||||
import com.aurora.store.viewmodel.all.FavouriteViewModel
|
import com.aurora.store.viewmodel.all.FavouriteViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun FavouriteScreen(
|
fun FavouriteScreen(
|
||||||
@@ -179,7 +179,7 @@ private fun ScreenContent(
|
|||||||
@Preview
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
private fun FavouriteScreenPreview(
|
private fun FavouriteScreenPreview(
|
||||||
@PreviewParameter(FavouritePreviewProvider ::class) favourite: Favourite
|
@PreviewParameter(FavouritePreviewProvider::class) favourite: Favourite
|
||||||
) {
|
) {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
val favourites = List(10) {
|
val favourites = List(10) {
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ import com.aurora.store.compose.composable.app.LargeAppListItem
|
|||||||
import com.aurora.store.compose.preview.AppPreviewProvider
|
import com.aurora.store.compose.preview.AppPreviewProvider
|
||||||
import com.aurora.store.compose.preview.PreviewTemplate
|
import com.aurora.store.compose.preview.PreviewTemplate
|
||||||
import com.aurora.store.viewmodel.all.InstalledViewModel
|
import com.aurora.store.viewmodel.all.InstalledViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun InstalledScreen(
|
fun InstalledScreen(
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ import com.aurora.store.viewmodel.onboarding.MicroGViewModel
|
|||||||
@Composable
|
@Composable
|
||||||
fun MicroGPage(
|
fun MicroGPage(
|
||||||
onMicrogTOSChecked: (Boolean) -> Unit = {},
|
onMicrogTOSChecked: (Boolean) -> Unit = {},
|
||||||
viewModel: MicroGViewModel = hiltViewModel(),
|
viewModel: MicroGViewModel = hiltViewModel()
|
||||||
) {
|
) {
|
||||||
ScreenContent(
|
ScreenContent(
|
||||||
uiState = viewModel.uiState,
|
uiState = viewModel.uiState,
|
||||||
onInstall = { viewModel.downloadMicroG() },
|
onInstall = { viewModel.downloadMicroG() },
|
||||||
onMicrogTOSChecked = onMicrogTOSChecked,
|
onMicrogTOSChecked = onMicrogTOSChecked
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +88,6 @@ private fun ScreenContent(
|
|||||||
onTOSChecked = onMicrogTOSChecked
|
onTOSChecked = onMicrogTOSChecked
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Preview(showBackground = true)
|
@Preview(showBackground = true)
|
||||||
@@ -96,7 +95,7 @@ private fun ScreenContent(
|
|||||||
private fun MicroGPagePreview() {
|
private fun MicroGPagePreview() {
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
ScreenContent(
|
ScreenContent(
|
||||||
uiState = MicroGUIState(),
|
uiState = MicroGUIState()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,9 +71,7 @@ private fun ScreenContent(
|
|||||||
val pagerState = rememberPagerState { pages.size }
|
val pagerState = rememberPagerState { pages.size }
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
|
||||||
fun isFinalPage(): Boolean {
|
fun isFinalPage(): Boolean = pagerState.currentPage == (pagerState.pageCount - 1)
|
||||||
return pagerState.currentPage == (pagerState.pageCount - 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SetupActions(uiState: OnboardingUiState) {
|
fun SetupActions(uiState: OnboardingUiState) {
|
||||||
@@ -105,6 +103,7 @@ private fun ScreenContent(
|
|||||||
onClick = {
|
onClick = {
|
||||||
when (pagerState.currentPage) {
|
when (pagerState.currentPage) {
|
||||||
0 -> onFinishOnboarding()
|
0 -> onFinishOnboarding()
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
pagerState.animateScrollToPage(pagerState.currentPage - 1)
|
pagerState.animateScrollToPage(pagerState.currentPage - 1)
|
||||||
@@ -125,10 +124,13 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
Button(
|
Button(
|
||||||
modifier = buttonWidthModifier,
|
modifier = buttonWidthModifier,
|
||||||
enabled = !isFinalPage() || (!uiState.isMicroBundleChecked || uiState.isMicroGBundleInstalled),
|
enabled =
|
||||||
|
!isFinalPage() ||
|
||||||
|
(!uiState.isMicroBundleChecked || uiState.isMicroGBundleInstalled),
|
||||||
onClick = {
|
onClick = {
|
||||||
when {
|
when {
|
||||||
isFinalPage() -> onFinishOnboarding()
|
isFinalPage() -> onFinishOnboarding()
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
pagerState.animateScrollToPage(pagerState.currentPage + 1)
|
pagerState.animateScrollToPage(pagerState.currentPage + 1)
|
||||||
@@ -182,8 +184,12 @@ private fun ScreenContent(
|
|||||||
) { page ->
|
) { page ->
|
||||||
when (pages[page]) {
|
when (pages[page]) {
|
||||||
OnboardingPage.WELCOME -> WelcomePage()
|
OnboardingPage.WELCOME -> WelcomePage()
|
||||||
|
|
||||||
OnboardingPage.PERMISSIONS -> PermissionsPage()
|
OnboardingPage.PERMISSIONS -> PermissionsPage()
|
||||||
OnboardingPage.MICRO_G -> MicroGPage(onMicrogTOSChecked = onMicrogTOSChecked)
|
|
||||||
|
OnboardingPage.MICRO_G -> MicroGPage(
|
||||||
|
onMicrogTOSChecked = onMicrogTOSChecked
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,11 +73,11 @@ import com.aurora.store.compose.preview.PreviewTemplate
|
|||||||
import com.aurora.store.compose.ui.details.AppDetailsScreen
|
import com.aurora.store.compose.ui.details.AppDetailsScreen
|
||||||
import com.aurora.store.data.model.SearchFilter
|
import com.aurora.store.data.model.SearchFilter
|
||||||
import com.aurora.store.viewmodel.search.SearchViewModel
|
import com.aurora.store.viewmodel.search.SearchViewModel
|
||||||
|
import kotlin.random.Random
|
||||||
import kotlinx.coroutines.android.awaitFrame
|
import kotlinx.coroutines.android.awaitFrame
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlin.random.Random
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SearchScreen(onNavigateUp: () -> Unit, viewModel: SearchViewModel = hiltViewModel()) {
|
fun SearchScreen(onNavigateUp: () -> Unit, viewModel: SearchViewModel = hiltViewModel()) {
|
||||||
@@ -103,7 +103,7 @@ private fun ScreenContent(
|
|||||||
onFetchSuggestions: (String) -> Unit = {},
|
onFetchSuggestions: (String) -> Unit = {},
|
||||||
onSearch: (String) -> Unit = {},
|
onSearch: (String) -> Unit = {},
|
||||||
onFilter: (filter: SearchFilter) -> Unit = {},
|
onFilter: (filter: SearchFilter) -> Unit = {},
|
||||||
isAnonymous: Boolean = true,
|
isAnonymous: Boolean = true
|
||||||
) {
|
) {
|
||||||
val textFieldState = rememberTextFieldState()
|
val textFieldState = rememberTextFieldState()
|
||||||
val searchBarState = rememberSearchBarState()
|
val searchBarState = rememberSearchBarState()
|
||||||
@@ -191,8 +191,9 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ListPane() {
|
fun ListPane() {
|
||||||
|
// TODO: https://issuetracker.google.com/issues/445720462
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.focusable(), //TODO: https://issuetracker.google.com/issues/445720462
|
modifier = Modifier.focusable(),
|
||||||
topBar = { SearchBar() }
|
topBar = { SearchBar() }
|
||||||
) { paddingValues ->
|
) { paddingValues ->
|
||||||
Column(
|
Column(
|
||||||
@@ -317,7 +318,7 @@ private fun FilterHeader(
|
|||||||
contentDescription = stringResource(filter)
|
contentDescription = stringResource(filter)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,7 +345,7 @@ private fun FilterHeader(
|
|||||||
painter = painterResource(R.drawable.ic_arrow_drop_down),
|
painter = painterResource(R.drawable.ic_arrow_drop_down),
|
||||||
contentDescription = stringResource(filter)
|
contentDescription = stringResource(filter)
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
DropdownMenu(expanded = isExpanded, onDismissRequest = { isExpanded = false }) {
|
DropdownMenu(expanded = isExpanded, onDismissRequest = { isExpanded = false }) {
|
||||||
|
|||||||
@@ -28,10 +28,7 @@ import java.util.Properties
|
|||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DevicePage(
|
fun DevicePage(onRequestNavigateToSplash: () -> Unit, viewModel: SpoofViewModel = hiltViewModel()) {
|
||||||
onRequestNavigateToSplash: () -> Unit,
|
|
||||||
viewModel: SpoofViewModel = hiltViewModel(),
|
|
||||||
) {
|
|
||||||
val availableDevices by viewModel.availableDevices.collectAsStateWithLifecycle()
|
val availableDevices by viewModel.availableDevices.collectAsStateWithLifecycle()
|
||||||
val currentDevice by viewModel.currentDevice.collectAsStateWithLifecycle()
|
val currentDevice by viewModel.currentDevice.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
@@ -100,15 +97,13 @@ private fun PageContent(
|
|||||||
@Preview(showBackground = true)
|
@Preview(showBackground = true)
|
||||||
@Composable
|
@Composable
|
||||||
private fun DevicePagePreview() {
|
private fun DevicePagePreview() {
|
||||||
fun getDevice(): Properties {
|
fun getDevice(): Properties = Properties().apply {
|
||||||
return Properties().apply {
|
|
||||||
setProperty("UserReadableName", "Google Pixel 9a")
|
setProperty("UserReadableName", "Google Pixel 9a")
|
||||||
setProperty("Build.VERSION.SDK_INT", "35")
|
setProperty("Build.VERSION.SDK_INT", "35")
|
||||||
setProperty("Build.MANUFACTURER", "Google")
|
setProperty("Build.MANUFACTURER", "Google")
|
||||||
setProperty("Platforms", "arm64-v8a")
|
setProperty("Platforms", "arm64-v8a")
|
||||||
setProperty("Build.PRODUCT", Random.nextInt().toString())
|
setProperty("Build.PRODUCT", Random.nextInt().toString())
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PreviewTemplate {
|
PreviewTemplate {
|
||||||
val defaultDevice = getDevice()
|
val defaultDevice = getDevice()
|
||||||
|
|||||||
@@ -27,10 +27,7 @@ import com.aurora.store.viewmodel.spoof.SpoofViewModel
|
|||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LocalePage(
|
fun LocalePage(onRequestNavigateToSplash: () -> Unit, viewModel: SpoofViewModel = hiltViewModel()) {
|
||||||
onRequestNavigateToSplash: () -> Unit,
|
|
||||||
viewModel: SpoofViewModel = hiltViewModel()
|
|
||||||
) {
|
|
||||||
val availableLocales by viewModel.availableLocales.collectAsStateWithLifecycle()
|
val availableLocales by viewModel.availableLocales.collectAsStateWithLifecycle()
|
||||||
val currentLocale by viewModel.currentLocale.collectAsStateWithLifecycle()
|
val currentLocale by viewModel.currentLocale.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
@@ -50,7 +47,7 @@ private fun PageContent(
|
|||||||
defaultLocale: Locale = Locale.getDefault(),
|
defaultLocale: Locale = Locale.getDefault(),
|
||||||
locales: List<Locale> = emptyList(),
|
locales: List<Locale> = emptyList(),
|
||||||
isLocaleSelected: (locale: Locale) -> Boolean = { false },
|
isLocaleSelected: (locale: Locale) -> Boolean = { false },
|
||||||
onLocaleSelected: (locale: Locale) -> Unit = {},
|
onLocaleSelected: (locale: Locale) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ import kotlinx.coroutines.launch
|
|||||||
fun SpoofScreen(
|
fun SpoofScreen(
|
||||||
onNavigateUp: () -> Unit,
|
onNavigateUp: () -> Unit,
|
||||||
onNavigateToSplash: () -> Unit,
|
onNavigateToSplash: () -> Unit,
|
||||||
viewModel: SpoofViewModel = hiltViewModel(),
|
viewModel: SpoofViewModel = hiltViewModel()
|
||||||
) {
|
) {
|
||||||
ScreenContent(
|
ScreenContent(
|
||||||
onNavigateUp = onNavigateUp,
|
onNavigateUp = onNavigateUp,
|
||||||
|
|||||||
Reference in New Issue
Block a user