1+ package  com.lahsuak.apps.jetpackcomposebasic.ui.theme 
2+ 
3+ import  android.app.Activity 
4+ import  android.os.Build 
5+ import  androidx.compose.foundation.isSystemInDarkTheme 
6+ import  androidx.compose.material3.MaterialTheme 
7+ import  androidx.compose.material3.darkColorScheme 
8+ import  androidx.compose.material3.dynamicDarkColorScheme 
9+ import  androidx.compose.material3.dynamicLightColorScheme 
10+ import  androidx.compose.material3.lightColorScheme 
11+ import  androidx.compose.runtime.Composable 
12+ import  androidx.compose.runtime.SideEffect 
13+ import  androidx.compose.ui.graphics.toArgb 
14+ import  androidx.compose.ui.platform.LocalContext 
15+ import  androidx.compose.ui.platform.LocalView 
16+ import  androidx.core.view.ViewCompat 
17+ 
18+ private  val  DarkColorScheme  =  darkColorScheme(
19+     primary =  Purple80 ,
20+     secondary =  PurpleGrey80 ,
21+     tertiary =  Pink80 
22+ )
23+ 
24+ private  val  LightColorScheme  =  lightColorScheme(
25+     primary =  Purple40 ,
26+     secondary =  PurpleGrey40 ,
27+     tertiary =  Pink40 
28+ 
29+     /*  Other default colors to override
30+     background = Color(0xFFFFFBFE), 
31+     surface = Color(0xFFFFFBFE), 
32+     onPrimary = Color.White, 
33+     onSecondary = Color.White, 
34+     onTertiary = Color.White, 
35+     onBackground = Color(0xFF1C1B1F), 
36+     onSurface = Color(0xFF1C1B1F), 
37+     */  
38+ )
39+ 
40+ @Composable
41+ fun  JetPackComposeBasicTheme (
42+     darkTheme :  Boolean  = isSystemInDarkTheme(),
43+     //  Dynamic color is available on Android 12+
44+     dynamicColor :  Boolean  = true,
45+     content :  @Composable () ->  Unit 
46+ ) {
47+     val  colorScheme =  when  {
48+         dynamicColor &&  Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .S  ->  {
49+             val  context =  LocalContext .current
50+             if  (darkTheme) dynamicDarkColorScheme(context) else  dynamicLightColorScheme(context)
51+         }
52+         darkTheme ->  DarkColorScheme 
53+         else  ->  LightColorScheme 
54+     }
55+     val  view =  LocalView .current
56+     if  (! view.isInEditMode) {
57+         SideEffect  {
58+             (view.context as  Activity ).window.statusBarColor =  colorScheme.primary.toArgb()
59+             ViewCompat .getWindowInsetsController(view)?.isAppearanceLightStatusBars =  darkTheme
60+         }
61+     }
62+ 
63+     MaterialTheme (
64+         colorScheme =  colorScheme,
65+         typography =  Typography ,
66+         content =  content
67+     )
68+ }
0 commit comments