diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt index 232ea0d..47f64f5 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt @@ -88,15 +88,15 @@ fun SearchScreen(navController: NavController = rememberNavController()) { topBar = { TopAppBar( title = {Text(stringResource(R.string.app_name))}, actions = { - IconButton({navController.navigate("settings")}) { - Icon(painterResource(R.drawable.ic_settings_24px), "settings") - } IconButton(onClick = { navController.navigate("updates") }) { Icon( painter = painterResource(R.drawable.ic_update_24px), contentDescription = stringResource(R.string.updates_title) ) } + IconButton({navController.navigate("settings")}) { + Icon(painterResource(R.drawable.ic_settings_24px), "settings") + } } ) }, ) { innerPadding -> diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt index b919936..bfe4803 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt @@ -105,6 +105,10 @@ fun SettingsScreen( SettingsSectionSelect( title = "Google Play", value = "com.android.vending" + ), + SettingsSectionSelect( + title = "Manual Installed", + value = "com.android.packageinstaller" ) ) ), diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt index 8200117..9150b6d 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt @@ -1,13 +1,19 @@ package dev.mi6e4ka.openstore.ui.screen.updates +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.provider.Settings import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -15,6 +21,7 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledTonalButton @@ -35,6 +42,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -121,25 +129,9 @@ fun UpdatesScreen(navController: NavController) { horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 32.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Text( - stringResource(R.string.exclude_google_play), - fontSize = 14.sp - ) - Switch( - checked = state.excludeGooglePlay, - onCheckedChange = { viewModel.toggleExcludeGooglePlay(context) } - ) - } - + UpdatesBanner(navController, state.installedApps.size) Spacer(modifier = Modifier.weight(1f)) - + Icon( painter = painterResource(R.drawable.ic_check_circle_24px), contentDescription = null, @@ -163,22 +155,7 @@ fun UpdatesScreen(navController: NavController) { verticalArrangement = Arrangement.spacedBy(8.dp) ) { item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 8.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Text( - stringResource(R.string.exclude_google_play), - fontSize = 14.sp - ) - Switch( - checked = state.excludeGooglePlay, - onCheckedChange = { viewModel.toggleExcludeGooglePlay(context) } - ) - } + UpdatesBanner(navController, state.installedApps.size) } item { @@ -205,6 +182,40 @@ fun UpdatesScreen(navController: NavController) { } } +@Composable +fun UpdatesBanner(navController: NavController, checkAppsCount: Int) { + Card( + modifier = Modifier + .fillMaxWidth() + .padding(0.dp) + .height(80.dp) + .clip(RoundedCornerShape(12.dp)) + .clickable(onClick = { + navController.navigate("settings") + }), + //colors = CardDefaults.cardColors(containerColor = Color(109, 255, 30, 40)) + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth() + .padding(horizontal = 24.dp) + ) { + Icon( + painterResource(R.drawable.ic_settings_24px), + contentDescription = null, + modifier = Modifier.size(32.dp), + ) + Column { + Text(stringResource(R.string.updates_app_count, checkAppsCount)) + Text(stringResource(R.string.updates_change_settings)) + } + } + } +} + @Composable fun UpdateAppCard( app: AppWithUpdates, diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesViewModel.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesViewModel.kt index 4678f05..f089f4c 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesViewModel.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesViewModel.kt @@ -247,11 +247,14 @@ class UpdatesViewModel(private val apkInstaller: ApkInstaller) : ViewModel() { @Suppress("DEPRECATION") pm.getInstalledPackages(0) } - - val excludeGooglePlay = _state.value.excludeGooglePlay - + + val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE) + + val allowedSources = prefs.getString("updates_sources", "")?.split(";") ?: listOf() + val allowAllSources = prefs.getBoolean("updates_check_all", false) + return packages - .filter { !isSystemApp(it) && !(excludeGooglePlay && getInstallSource(pm, it.packageName) == "com.android.vending") } + .filter { !isSystemApp(it) && (allowAllSources || allowedSources.contains(getInstallSource(pm, it.packageName))) } .map { packageInfo -> val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { packageInfo.longVersionCode @@ -259,7 +262,7 @@ class UpdatesViewModel(private val apkInstaller: ApkInstaller) : ViewModel() { @Suppress("DEPRECATION") packageInfo.versionCode.toLong() } - + println("package "+packageInfo.packageName+" from "+getInstallSource(pm, packageInfo.packageName)) AppUpdateRequestEntry( packageName = packageInfo.packageName, appName = pm.getApplicationLabel(packageInfo.applicationInfo!!).toString(), diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index bf1c28f..d3d47af 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -48,4 +48,6 @@ Available updates: %1$d Tap to check for updates Exclude Google Play + Open settings + Applications checked: %1$d \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7faad18..f9b0d4f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,4 +49,6 @@ Доступно обновлений: %1$d Нажмите для проверки обновлений Исключить Google Play + Открыть настройки + Проверяется приложений: %1$d \ No newline at end of file