feat: add settings to updates

This commit is contained in:
Michael 2026-01-31 21:44:59 +03:00
parent 26ebdf4638
commit ef3f34455b
No known key found for this signature in database
6 changed files with 64 additions and 42 deletions

View file

@ -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 ->

View file

@ -105,6 +105,10 @@ fun SettingsScreen(
SettingsSectionSelect(
title = "Google Play",
value = "com.android.vending"
),
SettingsSectionSelect(
title = "Manual Installed",
value = "com.android.packageinstaller"
)
)
),

View file

@ -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,

View file

@ -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(),

View file

@ -48,4 +48,6 @@
<string name="available_updates">Available updates: %1$d</string>
<string name="check_updates_hint">Tap to check for updates</string>
<string name="exclude_google_play">Exclude Google Play</string>
<string name="updates_change_settings">Open settings</string>
<string name="updates_app_count">Applications checked: %1$d</string>
</resources>

View file

@ -49,4 +49,6 @@
<string name="available_updates">Доступно обновлений: %1$d</string>
<string name="check_updates_hint">Нажмите для проверки обновлений</string>
<string name="exclude_google_play">Исключить Google Play</string>
<string name="updates_change_settings">Открыть настройки</string>
<string name="updates_app_count">Проверяется приложений: %1$d</string>
</resources>