Skip to content

Commit 293e088

Browse files
committed
fix: go back button in settings screen sometimes not working
refactor: hoist navController from AppNavigation to MainActivity
1 parent a04760f commit 293e088

6 files changed

Lines changed: 49 additions & 42 deletions

File tree

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ android {
2121
applicationId = "me.nanova.summaryexpressive"
2222
minSdk = 33
2323
targetSdk = 36
24-
versionCode = 29
25-
versionName = "0.6.1"
24+
versionCode = 30
25+
versionName = "0.6.2"
2626

2727
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2828
}

app/src/main/kotlin/me/nanova/summaryexpressive/InstantSummaryActivity.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.os.Bundle
77
import androidx.activity.ComponentActivity
88
import androidx.activity.compose.setContent
99
import androidx.activity.viewModels
10+
import androidx.compose.foundation.isSystemInDarkTheme
1011
import androidx.compose.foundation.layout.Arrangement
1112
import androidx.compose.foundation.layout.Box
1213
import androidx.compose.foundation.layout.Column
@@ -48,8 +49,8 @@ import androidx.compose.ui.window.DialogProperties
4849
import dagger.hilt.android.AndroidEntryPoint
4950
import kotlinx.coroutines.launch
5051
import me.nanova.summaryexpressive.ui.theme.SummaryExpressiveTheme
51-
import me.nanova.summaryexpressive.vm.SummaryViewModel
5252
import me.nanova.summaryexpressive.vm.AppViewModel
53+
import me.nanova.summaryexpressive.vm.SummaryViewModel
5354

5455
@AndroidEntryPoint
5556
class InstantSummaryActivity : ComponentActivity() {
@@ -87,7 +88,14 @@ class InstantSummaryActivity : ComponentActivity() {
8788
}
8889
}
8990

90-
SummaryExpressiveTheme(theme = settings.theme, dynamicColor = settings.dynamicColor) {
91+
SummaryExpressiveTheme(
92+
darkTheme = when (settings.theme) {
93+
1 -> true
94+
2 -> false
95+
else -> isSystemInDarkTheme()
96+
},
97+
dynamicColor = settings.dynamicColor
98+
) {
9199
InstantSummaryDialog(
92100
viewModel = summaryViewModel,
93101
onDismiss = { finish() }

app/src/main/kotlin/me/nanova/summaryexpressive/MainActivity.kt

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,17 @@ import androidx.activity.ComponentActivity
77
import androidx.activity.compose.setContent
88
import androidx.activity.enableEdgeToEdge
99
import androidx.activity.viewModels
10-
import androidx.compose.foundation.layout.fillMaxSize
11-
import androidx.compose.material3.MaterialTheme
12-
import androidx.compose.material3.Surface
10+
import androidx.compose.foundation.isSystemInDarkTheme
1311
import androidx.compose.runtime.collectAsState
1412
import androidx.compose.runtime.getValue
15-
import androidx.compose.ui.Modifier
1613
import androidx.core.view.WindowCompat
14+
import androidx.navigation.compose.rememberNavController
1715
import dagger.hilt.android.AndroidEntryPoint
1816
import me.nanova.summaryexpressive.ui.AppNavigation
1917
import me.nanova.summaryexpressive.ui.theme.SummaryExpressiveTheme
2018
import me.nanova.summaryexpressive.vm.AppStartAction
2119
import me.nanova.summaryexpressive.vm.AppViewModel
2220

23-
2421
@AndroidEntryPoint
2522
class MainActivity : ComponentActivity() {
2623
private val viewModel: AppViewModel by viewModels()
@@ -34,21 +31,23 @@ class MainActivity : ComponentActivity() {
3431
handleIntent(intent)
3532

3633
setContent {
37-
val settings by viewModel.settingsUiState.collectAsState()
38-
val startDest by viewModel.startDestination.collectAsState()
34+
val navController = rememberNavController()
35+
val settingsState by viewModel.settingsUiState.collectAsState()
36+
val startDestination by viewModel.startDestination.collectAsState()
3937

4038
SummaryExpressiveTheme(
41-
theme = settings.theme,
42-
dynamicColor = settings.dynamicColor
39+
darkTheme = when (settingsState.theme) {
40+
1 -> true
41+
2 -> false
42+
else -> isSystemInDarkTheme()
43+
},
44+
dynamicColor = settingsState.dynamicColor
4345
) {
44-
Surface(
45-
modifier = Modifier.fillMaxSize(),
46-
color = MaterialTheme.colorScheme.background
47-
) {
48-
startDest?.let {
49-
AppNavigation(startDestination = it, appViewModel = viewModel)
50-
}
51-
}
46+
AppNavigation(
47+
navController = navController,
48+
startDestination = startDestination,
49+
appViewModel = viewModel
50+
)
5251
}
5352
}
5453
}
@@ -59,20 +58,23 @@ class MainActivity : ComponentActivity() {
5958
handleIntent(intent)
6059
}
6160

62-
private fun handleIntent(intent: Intent?) {
63-
when {
64-
intent?.action == Intent.ACTION_SEND && intent.type == "text/plain" -> {
65-
viewModel.setAppStartAction(AppStartAction(content = intent.getStringExtra(Intent.EXTRA_TEXT)))
61+
private fun handleIntent(intent: Intent) {
62+
when (intent.action) {
63+
Intent.ACTION_SEND -> {
64+
if ("text/plain" == intent.type) {
65+
val content = intent.getStringExtra(Intent.EXTRA_TEXT)
66+
viewModel.onEvent(AppStartAction(content))
67+
}
6668
}
67-
68-
intent?.action == Intent.ACTION_VIEW && intent.data?.host == "clipboard" -> {
69+
Intent.ACTION_VIEW -> {
70+
if (intent.data?.host != "clipboard") return
6971
// To avoid re-triggering on configuration change, we clear the data.
7072
intent.data = null
7173
// Postpone clipboard access until the window has focus.
7274
window.decorView.post {
7375
val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
7476
clipboard.primaryClip?.getItemAt(0)?.text?.let {
75-
viewModel.setAppStartAction(
77+
viewModel.onEvent(
7678
AppStartAction(
7779
content = it.toString(),
7880
autoTrigger = true

app/src/main/kotlin/me/nanova/summaryexpressive/ui/AppNavigation.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@ import androidx.compose.animation.core.EaseOut
99
import androidx.compose.animation.core.tween
1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.ui.Modifier
12-
import androidx.hilt.navigation.compose.hiltViewModel
12+
import androidx.navigation.NavHostController
1313
import androidx.navigation.NavType
1414
import androidx.navigation.compose.NavHost
1515
import androidx.navigation.compose.composable
16-
import androidx.navigation.compose.rememberNavController
1716
import androidx.navigation.navArgument
1817
import me.nanova.summaryexpressive.ui.page.HistoryScreen
1918
import me.nanova.summaryexpressive.ui.page.HomeScreen
2019
import me.nanova.summaryexpressive.ui.page.OnboardingScreen
2120
import me.nanova.summaryexpressive.ui.page.SettingsScreen
22-
import me.nanova.summaryexpressive.vm.HistoryViewModel
2321
import me.nanova.summaryexpressive.vm.AppViewModel
2422

2523
private fun slideIn(dir: SlideDirection): AnimatedContentTransitionScope<*>.() -> EnterTransition = {
@@ -38,12 +36,16 @@ private fun slideOut(dir: SlideDirection): AnimatedContentTransitionScope<*>.()
3836

3937
@Composable
4038
fun AppNavigation(
41-
startDestination: Nav,
39+
navController: NavHostController,
40+
startDestination: Nav?,
4241
appViewModel: AppViewModel,
4342
) {
44-
val navController = rememberNavController()
43+
if (startDestination == null) return
4544

46-
NavHost(navController, startDestination = startDestination.name) {
45+
NavHost(
46+
navController = navController,
47+
startDestination = startDestination.name
48+
) {
4749
composable(Nav.Home.name) {
4850
HomeScreen(
4951
modifier = Modifier,
@@ -95,7 +97,7 @@ fun AppNavigation(
9597
enterTransition = slideIn(SlideDirection.Start),
9698
exitTransition = slideOut(SlideDirection.End)
9799
) {
98-
HistoryScreen(viewModel = hiltViewModel<HistoryViewModel>())
100+
HistoryScreen()
99101
}
100102
}
101103
}

app/src/main/kotlin/me/nanova/summaryexpressive/ui/theme/Theme.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,10 @@ import androidx.core.view.WindowCompat
1616
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
1717
@Composable
1818
fun SummaryExpressiveTheme(
19-
theme: Int = 0,
19+
darkTheme: Boolean = isSystemInDarkTheme(),
2020
dynamicColor: Boolean = true,
2121
content: @Composable () -> Unit,
2222
) {
23-
val darkTheme = when (theme) {
24-
1 -> true
25-
2 -> false
26-
else -> isSystemInDarkTheme()
27-
}
2823

2924
val colorScheme = when {
3025
dynamicColor -> {

app/src/main/kotlin/me/nanova/summaryexpressive/vm/AppViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class AppViewModel @Inject constructor(
101101
private val _appStartAction = MutableStateFlow(AppStartAction())
102102
val appStartAction: StateFlow<AppStartAction> = _appStartAction.asStateFlow()
103103

104-
fun setAppStartAction(action: AppStartAction) {
104+
fun onEvent(action: AppStartAction) {
105105
_appStartAction.value = action
106106
}
107107

0 commit comments

Comments
 (0)