20 * along with AboutOss. If not, see <http://www.gnu.org/licenses/>. |
20 * along with AboutOss. If not, see <http://www.gnu.org/licenses/>. |
21 */ |
21 */ |
22 package com.geekorum.aboutoss.ui.material3 |
22 package com.geekorum.aboutoss.ui.material3 |
23 |
23 |
24 import android.app.Activity |
24 import android.app.Activity |
25 import android.net.Uri |
|
26 import android.os.Bundle |
25 import android.os.Bundle |
27 import androidx.activity.compose.setContent |
26 import androidx.activity.compose.setContent |
28 import androidx.activity.viewModels |
27 import androidx.activity.viewModels |
29 import androidx.compose.foundation.isSystemInDarkTheme |
28 import androidx.compose.foundation.isSystemInDarkTheme |
30 import androidx.compose.material3.MaterialTheme |
29 import androidx.compose.material3.MaterialTheme |
31 import androidx.compose.runtime.Composable |
30 import androidx.compose.runtime.Composable |
32 import androidx.compose.runtime.SideEffect |
31 import androidx.compose.runtime.SideEffect |
33 import androidx.compose.ui.graphics.toArgb |
32 import androidx.compose.ui.graphics.toArgb |
34 import androidx.compose.ui.platform.LocalView |
33 import androidx.compose.ui.platform.LocalView |
35 import androidx.core.view.WindowCompat |
34 import androidx.core.view.WindowCompat |
36 import androidx.navigation.compose.NavHost |
|
37 import androidx.navigation.compose.composable |
|
38 import androidx.navigation.compose.rememberNavController |
|
39 import com.geekorum.aboutoss.core.gms.GmsLicenseInfoRepository |
35 import com.geekorum.aboutoss.core.gms.GmsLicenseInfoRepository |
40 import com.geekorum.aboutoss.ui.common.BaseOpensourceLicenseActivity |
36 import com.geekorum.aboutoss.ui.common.BaseOpensourceLicenseActivity |
41 import com.geekorum.aboutoss.ui.common.Factory |
37 import com.geekorum.aboutoss.ui.common.Factory |
42 import com.geekorum.aboutoss.ui.common.OpenSourceLicensesViewModel |
38 import com.geekorum.aboutoss.ui.common.OpenSourceLicensesViewModel |
43 import com.geekorum.aboutoss.ui.material3.OpenSourceLicensesActivity.Companion.themeProvider |
39 import com.geekorum.aboutoss.ui.material3.OpenSourceLicensesActivity.Companion.themeProvider |
65 override fun onCreate(savedInstanceState: Bundle?) { |
61 override fun onCreate(savedInstanceState: Bundle?) { |
66 super.onCreate(savedInstanceState) |
62 super.onCreate(savedInstanceState) |
67 WindowCompat.setDecorFitsSystemWindows(window, false) |
63 WindowCompat.setDecorFitsSystemWindows(window, false) |
68 setContent { |
64 setContent { |
69 themeProvider { |
65 themeProvider { |
70 DependencyNavHost( |
66 OpenSourceDependenciesNavHost( |
71 openSourceLicensesViewModel = viewModel, |
67 openSourceLicensesViewModel = viewModel, |
72 navigateUp = { |
68 navigateUp = { |
73 if (!onNavigateUp()) { |
69 if (!onNavigateUp()) { |
74 finish() |
70 finish() |
75 } |
71 } |
98 MaterialTheme(content = content) |
94 MaterialTheme(content = content) |
99 } |
95 } |
100 } |
96 } |
101 } |
97 } |
102 |
98 |
103 @Composable |
|
104 fun DependencyNavHost( |
|
105 openSourceLicensesViewModel: OpenSourceLicensesViewModel, |
|
106 navigateUp: () -> Unit |
|
107 ) { |
|
108 val navController = rememberNavController() |
|
109 NavHost(navController, startDestination = "dependencies") { |
|
110 composable("dependencies") { |
|
111 OpenSourceDependenciesListScreen( |
|
112 viewModel = openSourceLicensesViewModel, |
|
113 onDependencyClick = { |
|
114 navController.navigate("dependency_license/${Uri.encode(it)}") |
|
115 }, |
|
116 onUpClick = navigateUp |
|
117 ) |
|
118 } |
|
119 composable("dependency_license/{dependency}") { |
|
120 val dependency = requireNotNull(it.arguments?.getString("dependency")) |
|
121 OpenSourceLicenseScreen( |
|
122 viewModel = openSourceLicensesViewModel, |
|
123 dependency = dependency, |
|
124 onUpClick = { |
|
125 navController.popBackStack() |
|
126 }, |
|
127 ) |
|
128 } |
|
129 } |
|
130 } |
|