Skip to content

Commit 31be508

Browse files
committed
App: revamp embedded style prefs (#26)
1 parent e87b70a commit 31be508

File tree

6 files changed

+70
-177
lines changed

6 files changed

+70
-177
lines changed

app/proguard-rules.pro

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,6 @@
3131
public <init>();
3232
}
3333

34-
# Page class uses Reflection to create fragment instance
35-
# used with preference fragments, which extends PreferenceFragmentCompat
36-
-keep class * extends androidx.preference.PreferenceFragmentCompat
37-
-keepclassmembers class * extends androidx.preference.PreferenceFragmentCompat {
38-
public <init>();
39-
}
40-
4134
# Keep dynamic feature module classes
4235
# com.madness.collision.unit.Unit extends Fragment
4336
#-keep class * extends com.madness.collision.unit.Unit

app/src/main/kotlin/com/madness/collision/settings/SettingsNavRoutes.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.madness.collision.settings
1919
import androidx.compose.runtime.Composable
2020
import androidx.compose.runtime.NonRestartableComposable
2121
import com.madness.collision.chief.app.ComposePageRoute
22+
import com.madness.collision.ui.settings.StylesPage
2223
import kotlinx.parcelize.Parcelize
2324

2425
@Parcelize
@@ -35,6 +36,7 @@ interface RouteId<R : ComposePageRoute> {
3536

3637
enum class SettingsRouteId : RouteId<SettingsNavRoute> {
3738

39+
Styles,
3840
OssLibraries;
3941

4042
override fun asRoute(): SettingsNavRoute = SettingsNavRoute(this)
@@ -43,6 +45,9 @@ enum class SettingsRouteId : RouteId<SettingsNavRoute> {
4345
@Composable
4446
private fun SettingsRouteId.RouteContent(): Unit =
4547
when (this) {
48+
SettingsRouteId.Styles -> {
49+
StylesPage()
50+
}
4651
SettingsRouteId.OssLibraries -> {
4752
OssLibsPage()
4853
}

app/src/main/kotlin/com/madness/collision/settings/SettingsPage.kt

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import androidx.compose.ui.unit.Dp
3737
import androidx.compose.ui.unit.coerceAtMost
3838
import androidx.compose.ui.unit.dp
3939
import androidx.compose.ui.unit.sp
40-
import androidx.core.os.bundleOf
4140
import androidx.fragment.compose.AndroidFragment
4241
import androidx.window.core.layout.WindowSizeClass.Companion.WIDTH_DP_MEDIUM_LOWER_BOUND
4342
import com.madness.collision.R
@@ -46,9 +45,8 @@ import com.madness.collision.settings.instant.InstantFragment
4645
import com.madness.collision.main.DevOptions
4746
import com.madness.collision.main.MainViewModel
4847
import com.madness.collision.main.showPage
49-
import com.madness.collision.pref.PrefExterior
48+
import com.madness.collision.ui.settings.StylesContent
5049
import com.madness.collision.unit.api_viewing.AccessAV
51-
import com.madness.collision.util.Page
5250
import com.madness.collision.util.dev.DarkPreview
5351
import com.madness.collision.util.dev.LayoutDirectionPreviews
5452
import kotlinx.coroutines.delay
@@ -86,11 +84,7 @@ private fun SinglePaneLayout(
8684
paddingValues = contentPadding,
8785
onSelectDest = { dest ->
8886
when (dest) {
89-
NavDest.Styles ->
90-
context.showPage<Page> {
91-
putString("fragmentClass", PrefExterior::class.qualifiedName)
92-
putInt("titleId", R.string.settings_exterior)
93-
}
87+
NavDest.Styles -> navController?.navigateTo(SettingsRouteId.Styles.asRoute())
9488
NavDest.Languages -> showLanguages()
9589
NavDest.About -> context.showPage<AdviceFragment>()
9690
NavDest.Instant -> context.showPage<InstantFragment>()
@@ -126,11 +120,7 @@ private fun SideBySideLayout(
126120
if (navDest == NavDest.Languages) LaunchedEffect(Unit) { showLanguages() }
127121

128122
when (lastDest) {
129-
NavDest.Styles -> {
130-
val n = PrefExterior::class.qualifiedName
131-
val args = bundleOf("fragmentClass" to n, "titleId" to R.string.settings_exterior)
132-
AndroidFragment<Page>(arguments = args)
133-
}
123+
NavDest.Styles -> StylesContent(contentPadding = contentPadding)
134124
NavDest.Languages -> Unit
135125
NavDest.About -> AndroidFragment<AdviceFragment>()
136126
NavDest.Instant -> AndroidFragment<InstantFragment>()
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright 2025 Clifford Liu
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.madness.collision.ui.settings
18+
19+
import androidx.compose.foundation.layout.Box
20+
import androidx.compose.foundation.layout.PaddingValues
21+
import androidx.compose.foundation.layout.WindowInsetsSides
22+
import androidx.compose.foundation.layout.fillMaxWidth
23+
import androidx.compose.foundation.layout.only
24+
import androidx.compose.foundation.layout.padding
25+
import androidx.compose.material3.Scaffold
26+
import androidx.compose.material3.Text
27+
import androidx.compose.runtime.Composable
28+
import androidx.compose.ui.Modifier
29+
import androidx.compose.ui.res.stringResource
30+
import androidx.compose.ui.unit.dp
31+
import androidx.fragment.compose.AndroidFragment
32+
import com.madness.collision.R
33+
import com.madness.collision.chief.layout.scaffoldWindowInsets
34+
import com.madness.collision.pref.PrefExterior
35+
import com.madness.collision.ui.comp.ClassicTopAppBar
36+
import com.madness.collision.ui.theme.MetaAppTheme
37+
38+
@Composable
39+
fun StylesPage() {
40+
val (topBarInsets, _, contentInsets) =
41+
scaffoldWindowInsets(shareCutout = 12.dp, shareStatusBar = 5.dp, shareWaterfall = 8.dp)
42+
Scaffold(
43+
topBar = {
44+
ClassicTopAppBar(
45+
title = { Text(text = stringResource(R.string.settings_exterior)) },
46+
windowInsets = topBarInsets
47+
.only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top),
48+
)
49+
},
50+
containerColor = MetaAppTheme.colorScheme.surfaceNeutral,
51+
contentWindowInsets = contentInsets,
52+
) { innerPadding ->
53+
StylesContent(contentPadding = innerPadding)
54+
}
55+
}
56+
57+
@Composable
58+
fun StylesContent(contentPadding: PaddingValues = PaddingValues.Zero) {
59+
Box(modifier = Modifier.padding(contentPadding)) {
60+
AndroidFragment<PrefExterior>(modifier = Modifier.fillMaxWidth())
61+
}
62+
}

app/src/main/kotlin/com/madness/collision/util/Page.kt

Lines changed: 0 additions & 128 deletions
This file was deleted.

app/src/main/res/layout/fragment_page.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)