Skip to content

Commit ce988b2

Browse files
committed
feat: Refactor main navigation structure
This commit introduces a major refactor to the main navigation structure of the app, focusing on clarity and maintainability. - **PagerDestination:** Created a new `PagerDestination` class to encapsulate the different screens in the main pager view, including their titles, icons, and indices. - **MainPager:** Implemented the `MainPager` composable to handle the horizontal pager, replacing the previous `SystemTtsScreen`. It uses `PagerDestination` to manage the different pages (System TTS list, Log, Forwarder, Settings). - **NavRoutes:** Updated `NavRoutes` to use `MainPager` as the main destination, removing individual routes for each pager page. - **SettingsScreen:** Removed `drawerState` param. - **NavTopAppBar:** Removed `drawerState` and other parameters related to drawer navigation. - **Strings:** Renamed "System TTS forwarder" to "TTS forwarder" in all translations. - **MainActivity:** Simplified the `MainActivity` composable by using `MainPager` for the main navigation flow. Removed code for the navigation drawer. - **BasicForwarderScreen**: Use Box to replace HorizontalPager. - Remove `SystemTtsScreen`.
1 parent 4d8fe01 commit ce988b2

File tree

13 files changed

+164
-184
lines changed

13 files changed

+164
-184
lines changed

app/src/main/java/com/github/jing332/tts_server_android/compose/MainActivity.kt

Lines changed: 33 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,17 @@ import androidx.activity.compose.setContent
1515
import androidx.appcompat.app.AppCompatActivity
1616
import androidx.compose.animation.AnimatedVisibility
1717
import androidx.compose.foundation.ExperimentalFoundationApi
18-
import androidx.compose.foundation.background
1918
import androidx.compose.foundation.combinedClickable
2019
import androidx.compose.foundation.interaction.MutableInteractionSource
2120
import androidx.compose.foundation.layout.Column
2221
import androidx.compose.foundation.layout.Row
2322
import androidx.compose.foundation.layout.Spacer
24-
import androidx.compose.foundation.layout.fillMaxHeight
2523
import androidx.compose.foundation.layout.fillMaxSize
2624
import androidx.compose.foundation.layout.fillMaxWidth
2725
import androidx.compose.foundation.layout.height
2826
import androidx.compose.foundation.layout.padding
2927
import androidx.compose.foundation.layout.size
30-
import androidx.compose.foundation.layout.width
3128
import androidx.compose.foundation.rememberScrollState
32-
import androidx.compose.foundation.shape.CornerSize
3329
import androidx.compose.foundation.verticalScroll
3430
import androidx.compose.material.icons.Icons
3531
import androidx.compose.material.icons.filled.ArrowCircleUp
@@ -41,7 +37,6 @@ import androidx.compose.material3.DrawerValue
4137
import androidx.compose.material3.HorizontalDivider
4238
import androidx.compose.material3.Icon
4339
import androidx.compose.material3.MaterialTheme
44-
import androidx.compose.material3.ModalNavigationDrawer
4540
import androidx.compose.material3.NavigationDrawerItem
4641
import androidx.compose.material3.NavigationDrawerItemDefaults
4742
import androidx.compose.material3.Text
@@ -85,10 +80,7 @@ import com.github.jing332.database.entities.systts.SystemTtsV2
8580
import com.github.jing332.tts_server_android.BuildConfig
8681
import com.github.jing332.tts_server_android.R
8782
import com.github.jing332.tts_server_android.ShortCuts
88-
import com.github.jing332.tts_server_android.compose.forwarder.systts.SystemTtsForwarderScreen
8983
import com.github.jing332.tts_server_android.compose.nav.NavRoutes
90-
import com.github.jing332.tts_server_android.compose.settings.SettingsScreen
91-
import com.github.jing332.tts_server_android.compose.systts.SystemTtsScreen
9284
import com.github.jing332.tts_server_android.compose.systts.list.ui.widgets.TtsEditContainerScreen
9385
import com.github.jing332.tts_server_android.compose.theme.AppTheme
9486
import com.github.jing332.tts_server_android.conf.AppConfig
@@ -188,10 +180,6 @@ private fun MainScreen(finish: () -> Unit) {
188180
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
189181
val entryState by navController.currentBackStackEntryAsState()
190182

191-
val gesturesEnabled = remember(entryState) {
192-
NavRoutes.routes.find { it.id == entryState?.destination?.route } != null
193-
}
194-
195183
var lastBackDownTime by remember { mutableLongStateOf(0L) }
196184
BackHandler(enabled = drawerState.isClosed) {
197185
val duration = 2000
@@ -208,68 +196,45 @@ private fun MainScreen(finish: () -> Unit) {
208196
LocalNavController provides navController,
209197
LocalDrawerState provides drawerState,
210198
) {
211-
ModalNavigationDrawer(
212-
drawerState = drawerState,
213-
gesturesEnabled = gesturesEnabled,
214-
drawerContent = {
215-
NavDrawerContent(
216-
Modifier
217-
.fillMaxHeight()
218-
.width(300.dp)
219-
.clip(
220-
MaterialTheme.shapes.large.copy(
221-
topStart = CornerSize(0.dp),
222-
bottomStart = CornerSize(0.dp)
223-
)
224-
)
225-
.background(MaterialTheme.colorScheme.background)
226-
.padding(12.dp),
227-
navController,
228-
drawerState,
229-
)
230-
}) {
231-
232-
val sharedVM: SharedViewModel = viewModel()
233-
NavHost(
234-
navController = navController,
235-
startDestination = NavRoutes.SystemTTS.id
236-
) {
237-
composable(NavRoutes.SystemTTS.id) { SystemTtsScreen(sharedVM) }
238-
composable(NavRoutes.SystemTtsForwarder.id) {
239-
SystemTtsForwarderScreen()
240-
}
241-
composable(NavRoutes.Settings.id) { SettingsScreen(drawerState) }
242-
243-
composable(NavRoutes.TtsEdit.id) {
244-
var stateSystemTts by rememberSaveable {
245-
mutableStateOf(
246-
checkNotNull(sharedVM.getOnce<SystemTtsV2>(NavRoutes.TtsEdit.DATA)) {
247-
"Not found systemTts from sharedVM"
248-
}
249-
)
250-
}
199+
val sharedVM: SharedViewModel = viewModel()
200+
NavHost(
201+
navController = navController,
202+
startDestination = NavRoutes.MainPager.id
203+
) {
204+
composable(NavRoutes.MainPager.id) { MainPager(sharedVM) }
205+
// composable(NavRoutes.SystemTtsForwarder.id) {
206+
// SystemTtsForwarderScreen()
207+
// }
208+
// composable(NavRoutes.Settings.id) { SettingsScreen(drawerState) }
251209

252-
TtsEditContainerScreen(
253-
modifier = Modifier
254-
.fillMaxSize(),
255-
systts = stateSystemTts,
256-
onSysttsChange = {
257-
stateSystemTts = it
258-
println("UpdateSystemTTS: $it")
259-
},
260-
onSave = {
261-
navController.popBackStack()
262-
dbm.systemTtsV2.insert(stateSystemTts)
263-
if (stateSystemTts.isEnabled) SystemTtsService.notifyUpdateConfig()
264-
},
265-
onCancel = {
266-
navController.popBackStack()
210+
composable(NavRoutes.TtsEdit.id) {
211+
var stateSystemTts by rememberSaveable {
212+
mutableStateOf(
213+
checkNotNull(sharedVM.getOnce<SystemTtsV2>(NavRoutes.TtsEdit.DATA)) {
214+
"Not found systemTts from sharedVM"
267215
}
268216
)
269217
}
218+
219+
TtsEditContainerScreen(
220+
modifier = Modifier
221+
.fillMaxSize(),
222+
systts = stateSystemTts,
223+
onSysttsChange = {
224+
stateSystemTts = it
225+
println("UpdateSystemTTS: $it")
226+
},
227+
onSave = {
228+
navController.popBackStack()
229+
dbm.systemTtsV2.insert(stateSystemTts)
230+
if (stateSystemTts.isEnabled) SystemTtsService.notifyUpdateConfig()
231+
},
232+
onCancel = {
233+
navController.popBackStack()
234+
}
235+
)
270236
}
271237
}
272-
273238
}
274239
}
275240

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.github.jing332.tts_server_android.compose
2+
3+
import androidx.annotation.StringRes
4+
import androidx.compose.foundation.layout.size
5+
import androidx.compose.material.icons.Icons
6+
import androidx.compose.material.icons.automirrored.filled.TextSnippet
7+
import androidx.compose.material.icons.filled.ArrowCircleUp
8+
import androidx.compose.material.icons.filled.Settings
9+
import androidx.compose.material3.Icon
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.res.painterResource
13+
import androidx.compose.ui.unit.dp
14+
import com.github.jing332.tts_server_android.R
15+
16+
sealed class PagerDestination(
17+
val index: Int,
18+
@StringRes val strId: Int,
19+
val icon: @Composable () -> Unit = {},
20+
) {
21+
companion object {
22+
val routes by lazy {
23+
listOf(
24+
SystemTts,
25+
SystemTtsLog,
26+
SystemTtsForwarder,
27+
Settings
28+
)
29+
}
30+
}
31+
32+
object SystemTts : PagerDestination(0, R.string.system_tts, {
33+
Icon(
34+
modifier = Modifier.size(24.dp),
35+
painter = painterResource(id = R.drawable.ic_config),
36+
contentDescription = null
37+
)
38+
})
39+
40+
object SystemTtsLog : PagerDestination(1, R.string.log, {
41+
Icon(
42+
Icons.AutoMirrored.Default.TextSnippet,
43+
contentDescription = null
44+
)
45+
})
46+
47+
object SystemTtsForwarder: PagerDestination(2, R.string.forwarder_systts, {
48+
Icon(
49+
Icons.Default.ArrowCircleUp,
50+
contentDescription = null
51+
)
52+
})
53+
54+
object Settings : PagerDestination(3, R.string.settings, {
55+
Icon(Icons.Default.Settings, null)
56+
})
57+
}
Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,16 @@
11
package com.github.jing332.tts_server_android.compose.forwarder
22

3-
import android.content.IntentFilter
43
import androidx.compose.foundation.ExperimentalFoundationApi
5-
import androidx.compose.foundation.layout.fillMaxSize
4+
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.padding
7-
import androidx.compose.foundation.pager.HorizontalPager
86
import androidx.compose.foundation.pager.rememberPagerState
9-
import androidx.compose.material.icons.Icons
10-
import androidx.compose.material.icons.filled.TextSnippet
117
import androidx.compose.material3.ExperimentalMaterial3Api
12-
import androidx.compose.material3.Icon
13-
import androidx.compose.material3.NavigationBar
14-
import androidx.compose.material3.NavigationBarItem
158
import androidx.compose.material3.Scaffold
16-
import androidx.compose.material3.Text
179
import androidx.compose.runtime.Composable
1810
import androidx.compose.runtime.remember
1911
import androidx.compose.runtime.rememberCoroutineScope
2012
import androidx.compose.ui.Modifier
21-
import androidx.compose.ui.res.painterResource
22-
import androidx.compose.ui.res.stringResource
2313
import com.github.jing332.tts_server_android.R
24-
import com.github.jing332.compose.widgets.LocalBroadcastReceiver
25-
import com.github.jing332.tts_server_android.service.forwarder.system.SysTtsForwarderService
26-
import com.google.accompanist.web.rememberWebViewNavigator
27-
import com.google.accompanist.web.rememberWebViewState
28-
import kotlinx.coroutines.launch
2914

3015
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
3116
@Composable
@@ -40,29 +25,36 @@ internal fun BasicForwarderScreen(
4025
Scaffold(
4126
topBar = topBar,
4227
bottomBar = {
43-
NavigationBar {
44-
pages.forEachIndexed { index, strId ->
45-
val selected = state.currentPage == index
46-
NavigationBarItem(
47-
selected = selected,
48-
onClick = {
49-
scope.launch {
50-
state.animateScrollToPage(index)
51-
}
52-
},
53-
icon = {
54-
if (index == 0)
55-
Icon(Icons.Default.TextSnippet, null)
56-
else
57-
Icon(painter = painterResource(R.drawable.ic_web), null)
58-
},
59-
label = { Text(stringResource(id = strId)) }
60-
)
61-
}
62-
}
28+
// NavigationBar {
29+
// pages.forEachIndexed { index, strId ->
30+
// val selected = state.currentPage == index
31+
// NavigationBarItem(
32+
// selected = selected,
33+
// onClick = {
34+
// scope.launch {
35+
// state.animateScrollToPage(index)
36+
// }
37+
// },
38+
// icon = {
39+
// if (index == 0)
40+
// Icon(Icons.Default.TextSnippet, null)
41+
// else
42+
// Icon(painter = painterResource(R.drawable.ic_web), null)
43+
// },
44+
// label = { Text(stringResource(id = strId)) }
45+
// )
46+
// }
47+
// }
6348
}) { paddingValues ->
49+
Box(Modifier.padding(paddingValues)) {
50+
configScreen()
51+
}
52+
53+
/*
6454
HorizontalPager(
65-
modifier = Modifier.padding(paddingValues).fillMaxSize(),
55+
modifier = Modifier
56+
.padding(paddingValues)
57+
.fillMaxSize(),
6658
state = state,
6759
userScrollEnabled = false
6860
) {
@@ -82,7 +74,7 @@ internal fun BasicForwarderScreen(
8274
)
8375
}
8476
}
85-
}
77+
}*/
8678
}
8779

8880
}

0 commit comments

Comments
 (0)