Skip to content

Commit

Permalink
Add setting to select theme
Browse files Browse the repository at this point in the history
Fix dropdowns not saving value
Add few string to romanian
  • Loading branch information
rumboalla committed Aug 9, 2023
1 parent 9ff4e59 commit d479873
Show file tree
Hide file tree
Showing 13 changed files with 75 additions and 21 deletions.
4 changes: 2 additions & 2 deletions app/src/main/java/com/apkupdater/di/MainModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,11 @@ val mainModule = module {

viewModel { parameters -> AppsViewModel(parameters.get(), get(), get()) }

viewModel { MainViewModel() }
viewModel { MainViewModel(get()) }

viewModel { parameters -> UpdatesViewModel(parameters.get(), get(), get(), get(), get()) }

viewModel { SettingsViewModel(get(), get(), WorkManager.getInstance(get())) }
viewModel { parameters -> SettingsViewModel(parameters.get(), get(), get(), WorkManager.getInstance(get())) }

viewModel { parameters -> SearchViewModel(parameters.get(), get(), get(), get(), get()) }

Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/com/apkupdater/prefs/Prefs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ class Prefs(
val alarmFrequency = int("alarmFrequency", 0, backed = true)
val androidTvUi = boolean("androidTvUi", defValue = isAndroidTv, backed = true)
val rootInstall = boolean("rootInstall", defValue = false, backed = true)
val theme = int("theme", defValue = 0, backed = true)
}
3 changes: 1 addition & 2 deletions app/src/main/java/com/apkupdater/ui/activity/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import com.apkupdater.ui.screen.MainScreen
import com.apkupdater.ui.theme.AppTheme


class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent { AppTheme { MainScreen() } }
setContent { MainScreen() }
}
}
8 changes: 5 additions & 3 deletions app/src/main/java/com/apkupdater/ui/component/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,9 @@ fun DropDownSetting(
@DrawableRes icon: Int
) = Box(
Modifier
.padding(16.dp)
.fillMaxWidth()) {
.padding(top = 16.dp, start = 16.dp, end = 16.dp, bottom = 8.dp)
.fillMaxWidth()
) {
var expanded by remember { mutableStateOf(false) }
var selectedOptionText by remember { mutableStateOf(options[getValue()]) }

Expand Down Expand Up @@ -155,12 +156,13 @@ fun DropDownSetting(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
options.forEach { option ->
options.forEachIndexed { i, option ->
DropdownMenuItem(
text = { Text(text = option) },
onClick = {
selectedOptionText = option
expanded = false
setValue(i)
}
)
}
Expand Down
27 changes: 17 additions & 10 deletions app/src/main/java/com/apkupdater/ui/screen/MainScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.apkupdater.data.ui.Screen
import com.apkupdater.ui.component.BadgeText
import com.apkupdater.ui.theme.AppTheme
import com.apkupdater.viewmodel.AppsViewModel
import com.apkupdater.viewmodel.MainViewModel
import com.apkupdater.viewmodel.SearchViewModel
Expand All @@ -56,6 +57,7 @@ fun MainScreen(mainViewModel: MainViewModel = koinViewModel()) {
val appsViewModel: AppsViewModel = koinViewModel(parameters = { parametersOf(mainViewModel) })
val updatesViewModel: UpdatesViewModel = koinViewModel(parameters = { parametersOf(mainViewModel) })
val searchViewModel: SearchViewModel = koinViewModel(parameters = { parametersOf(mainViewModel) })
val settingsViewModel: SettingsViewModel = koinViewModel(parameters = { parametersOf(mainViewModel) })

// Navigation
val navController = rememberNavController()
Expand All @@ -80,15 +82,20 @@ fun MainScreen(mainViewModel: MainViewModel = koinViewModel()) {
// Check notification intent when hot starting
intentListener(mainViewModel, updatesViewModel, navController, launcher)

Scaffold(bottomBar = { BottomBar(mainViewModel, navController) }) { padding ->
Box(modifier = Modifier.pullRefresh(pullToRefresh)) {
NavHost(navController, padding, appsViewModel, updatesViewModel, searchViewModel)
PullRefreshIndicator(
refreshing = isRefreshing.value,
state = pullToRefresh,
modifier = Modifier.align(Alignment.TopCenter),
contentColor = MaterialTheme.colorScheme.primary
)
// Theme
val theme = mainViewModel.theme.collectAsStateWithLifecycle().value

AppTheme(theme) {
Scaffold(bottomBar = { BottomBar(mainViewModel, navController) }) { padding ->
Box(modifier = Modifier.pullRefresh(pullToRefresh)) {
NavHost(navController, padding, appsViewModel, updatesViewModel, searchViewModel, settingsViewModel)
PullRefreshIndicator(
refreshing = isRefreshing.value,
state = pullToRefresh,
modifier = Modifier.align(Alignment.TopCenter),
contentColor = MaterialTheme.colorScheme.primary
)
}
}
}
}
Expand Down Expand Up @@ -167,7 +174,7 @@ fun NavHost(
appsViewModel: AppsViewModel,
updatesViewModel: UpdatesViewModel,
searchViewModel: SearchViewModel,
settingsViewModel: SettingsViewModel = koinViewModel()
settingsViewModel: SettingsViewModel
) = NavHost(
navController = navController,
startDestination = Screen.Apps.route,
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/com/apkupdater/ui/screen/SettingsScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,17 @@ fun Settings(viewModel: SettingsViewModel) = LazyColumn {
6,
R.drawable.ic_landscape
)
DropDownSetting(
stringResource(R.string.theme),
listOf(
stringResource(R.string.theme_system),
stringResource(R.string.theme_dark),
stringResource(R.string.theme_light)
),
{ viewModel.getTheme() },
{ viewModel.setTheme(it) },
R.drawable.ic_theme
)
}

item {
Expand Down
11 changes: 9 additions & 2 deletions app/src/main/java/com/apkupdater/ui/theme/Theme.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.apkupdater.ui.theme

import android.app.Activity
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
Expand All @@ -17,10 +16,12 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.dp
import androidx.core.view.WindowCompat
import com.apkupdater.util.isDark


@Composable
fun AppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
darkTheme: Boolean,
dynamicColor: Boolean = true,
content: @Composable () -> Unit
) {
Expand Down Expand Up @@ -60,3 +61,9 @@ fun AppTheme(
}

fun ColorScheme.statusBarColor() = surfaceColorAtElevation(3.dp)

fun isDarkTheme(theme: Int): Boolean {
if (theme == 1) return true
if (theme == 2) return false
return isDark()
}
4 changes: 4 additions & 0 deletions app/src/main/java/com/apkupdater/util/Extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.content.res.Resources
import android.os.Build
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
Expand Down Expand Up @@ -93,3 +95,5 @@ fun PackageManager.isAndroidTv() = hasSystemFeature(PackageManager.FEATURE_LEANB
fun Context.isAndroidTv() = packageManager.isAndroidTv()

fun randomUUID() = UUID.randomUUID().toString()

fun isDark() = Resources.getSystem().configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
8 changes: 7 additions & 1 deletion app/src/main/java/com/apkupdater/viewmodel/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import androidx.navigation.NavController
import androidx.navigation.NavGraph.Companion.findStartDestination
import com.apkupdater.data.ui.AppInstallStatus
import com.apkupdater.data.ui.Screen
import com.apkupdater.prefs.Prefs
import com.apkupdater.ui.theme.isDarkTheme
import com.apkupdater.util.SessionInstaller
import com.apkupdater.util.UpdatesNotification
import com.apkupdater.util.getAppId
Expand All @@ -22,10 +24,12 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch


class MainViewModel : ViewModel() {
class MainViewModel(prefs: Prefs) : ViewModel() {

val screens = listOf(Screen.Apps, Screen.Search, Screen.Updates, Screen.Settings)

val theme = MutableStateFlow(isDarkTheme(prefs.theme.get()))

val badges = MutableStateFlow(mapOf(
Screen.Apps.route to "",
Screen.Search.route to "",
Expand All @@ -48,6 +52,8 @@ class MainViewModel : ViewModel() {
}
}

fun setTheme(theme: Boolean) = this.theme.apply { value = theme }

fun changeSearchBadge(number: String) = changeBadge(Screen.Search.route, number)

fun changeAppsBadge(number: String) = changeBadge(Screen.Apps.route, number)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import androidx.lifecycle.ViewModel
import androidx.work.WorkManager
import com.apkupdater.data.ui.SettingsUiState
import com.apkupdater.prefs.Prefs
import com.apkupdater.ui.theme.isDarkTheme
import com.apkupdater.util.UpdatesNotification
import com.apkupdater.worker.UpdatesWorker
import eu.chainfire.libsuperuser.Shell
import kotlinx.coroutines.flow.MutableStateFlow


class SettingsViewModel(
private val mainViewModel: MainViewModel,
private val prefs: Prefs,
private val notification: UpdatesNotification,
private val workManager: WorkManager
Expand Down Expand Up @@ -41,6 +43,12 @@ class SettingsViewModel(
fun getRootInstall() = prefs.rootInstall.get()
fun getAlarmHour() = prefs.alarmHour.get()
fun getAlarmFrequency() = prefs.alarmFrequency.get()
fun getTheme() = prefs.theme.get()

fun setTheme(theme: Int) {
prefs.theme.put(theme)
mainViewModel.setTheme(isDarkTheme(theme))
}

fun setRootInstall(b: Boolean) {
if (b && Shell.SU.available()) {
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/ic_theme.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7,14c-1.66,0 -3,1.34 -3,3 0,1.31 -1.16,2 -2,2 0.92,1.22 2.49,2 4,2 2.21,0 4,-1.79 4,-4 0,-1.66 -1.34,-3 -3,-3zM20.71,4.63l-1.34,-1.34c-0.39,-0.39 -1.02,-0.39 -1.41,0L9,12.25 11.75,15l8.96,-8.96c0.39,-0.39 0.39,-1.02 0,-1.41z"/>
</vector>
2 changes: 1 addition & 1 deletion app/src/main/res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
<string name="notification_channel_id" translatable="false">updateChannel</string>
<string name="notification_update_title">Actualizări</string>
<plurals name="notification_update_description">
<item quantity="few">TODO</item>
<item quantity="few">Au fost găsite %1$d actualizări.</item>
<item quantity="zero">Nicio actualizare găsită.</item>
<item quantity="one">A fost găsită %1$d actualizare.</item>
<item quantity="other">Au fost găsite %1$d actualizări.</item>
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@
<string name="source_github" translatable="false">GitHub</string>
<string name="about">About</string>
<string name="frequency">Frequency</string>
<string name="theme">Theme</string>
<string name="theme_system">System</string>
<string name="theme_dark">Dark</string>
<string name="theme_light">Light</string>

// Notifications
<string name="notification_channel_name">Updates</string>
Expand Down

0 comments on commit d479873

Please sign in to comment.