ui/material3/src/androidMain/kotlin/OpenSourceLicensesActivity.kt
changeset 43 b144901856dc
parent 42 d59fc19f19fa
child 60 b6ea11765022
equal deleted inserted replaced
42:d59fc19f19fa 43:b144901856dc
    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 }