Skip to content

Commit 683f952

Browse files
authored
0.0.2-alpha (#3)
1 parent b423652 commit 683f952

28 files changed

+1493
-261
lines changed

app/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ android {
1212
minSdk = 21
1313
targetSdk = 34
1414
versionCode = 1
15-
versionName = "0.0.1-alpha"
15+
versionName = "0.0.2-alpha"
1616

1717
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
1818
vectorDrawables {
@@ -54,12 +54,14 @@ dependencies {
5454

5555
implementation(libs.androidx.core.ktx)
5656
implementation(libs.androidx.lifecycle.runtime.ktx)
57+
implementation(libs.androidx.lifecycle.runtime.compose)
5758
implementation(libs.androidx.activity.compose)
5859
implementation(platform(libs.androidx.compose.bom))
5960
implementation(libs.androidx.compose.ui)
6061
implementation(libs.androidx.compose.ui.graphics)
6162
implementation(libs.androidx.compose.ui.tooling.preview)
6263
implementation(libs.androidx.compose.material3)
64+
implementation(libs.androidx.compose.material.icons.extended)
6365

6466
debugImplementation(libs.androidx.compose.ui.tooling)
6567
debugImplementation(libs.androidx.compose.ui.test.manifest)

app/src/main/java/com/shifthackz/catppuccin/app/CatppuccinActivity.kt

Lines changed: 76 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,102 @@
1+
@file:OptIn(ExperimentalMaterial3Api::class)
2+
13
package com.shifthackz.catppuccin.app
24

35
import android.os.Bundle
46
import androidx.activity.ComponentActivity
57
import androidx.activity.compose.setContent
6-
import androidx.compose.foundation.layout.fillMaxSize
8+
import androidx.activity.viewModels
9+
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.material3.CenterAlignedTopAppBar
11+
import androidx.compose.material3.ExperimentalMaterial3Api
12+
import androidx.compose.material3.Icon
13+
import androidx.compose.material3.LocalContentColor
14+
import androidx.compose.material3.NavigationBar
15+
import androidx.compose.material3.NavigationBarItem
16+
import androidx.compose.material3.Scaffold
717
import androidx.compose.material3.Surface
818
import androidx.compose.material3.Text
919
import androidx.compose.runtime.Composable
1020
import androidx.compose.runtime.getValue
11-
import androidx.compose.runtime.mutableStateOf
12-
import androidx.compose.runtime.remember
13-
import androidx.compose.runtime.setValue
1421
import androidx.compose.ui.Modifier
15-
import com.shifthackz.catppuccin.app.ui.ButtonsExample
16-
import com.shifthackz.catppuccin.palette.Catppuccin
22+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
23+
import com.shifthackz.catppuccin.app.about.AboutScreen
24+
import com.shifthackz.catppuccin.app.guideline.GuidelineScreen
25+
import com.shifthackz.catppuccin.app.navigation.NavigationUiItem
26+
import com.shifthackz.catppuccin.app.settings.SettingsScreen
27+
import com.shifthackz.catppuccin.app.typography.TypographyScreen
1728
import com.shifthackz.catppuccin.compose.CatppuccinTheme
18-
import com.shifthackz.catppuccin.palette.CatppuccinPalette
1929

2030
class CatppuccinActivity : ComponentActivity() {
2131

2232
override fun onCreate(savedInstanceState: Bundle?) {
2333
super.onCreate(savedInstanceState)
34+
val viewModel: CatppuccinViewModel by viewModels()
2435
setContent {
25-
var palette by remember {
26-
mutableStateOf<CatppuccinPalette>(Catppuccin.Latte)
36+
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
37+
val uiLabel: @Composable (NavigationUiItem) -> Unit = {
38+
Text(
39+
text = it.label,
40+
color = LocalContentColor.current,
41+
)
2742
}
43+
val uiIcon: @Composable (Modifier, NavigationUiItem) -> Unit =
44+
{ modifier: Modifier, navigationUiItem: NavigationUiItem ->
45+
Icon(
46+
modifier = modifier,
47+
imageVector = navigationUiItem.icon,
48+
contentDescription = uiState.navigationUiItem.label,
49+
tint = LocalContentColor.current,
50+
)
51+
}
2852
CatppuccinTheme.Palette(
29-
palette = palette,
53+
palette = uiState.settingsUiState.palette,
3054
) {
31-
palette = Catppuccin.Mocha
3255
Surface {
33-
ButtonsExample(
34-
palette = palette,
35-
)
56+
Scaffold(
57+
topBar = {
58+
CenterAlignedTopAppBar(
59+
title = { uiLabel(uiState.navigationUiItem) },
60+
)
61+
},
62+
bottomBar = {
63+
NavigationBar {
64+
NavigationUiItem.entries.forEach { item ->
65+
val selected = item.id == uiState.navigationUiItem.id
66+
NavigationBarItem(
67+
selected = selected,
68+
onClick = { if (!selected) viewModel.navigate(item) },
69+
icon = { uiIcon(Modifier, item) },
70+
label = { uiLabel(item) },
71+
)
72+
}
73+
}
74+
},
75+
) { paddingValues ->
76+
val modifier = Modifier.padding(paddingValues)
77+
when (uiState.navigationUiItem) {
78+
NavigationUiItem.STYLEGUIDE -> GuidelineScreen(
79+
modifier = modifier,
80+
settings = uiState.settingsUiState,
81+
)
82+
83+
NavigationUiItem.TYPOGRAPHY -> TypographyScreen(
84+
modifier = modifier,
85+
)
86+
87+
NavigationUiItem.SETTINGS -> SettingsScreen(
88+
modifier = modifier,
89+
settings = uiState.settingsUiState,
90+
onChanged = viewModel::applySettings,
91+
)
92+
93+
NavigationUiItem.ABOUT -> AboutScreen(
94+
modifier = modifier,
95+
)
96+
}
97+
}
3698
}
3799
}
38100
}
39101
}
40102
}
41-
42-
@Composable
43-
fun Greeting(name: String, modifier: Modifier = Modifier) {
44-
Surface(
45-
modifier = Modifier.fillMaxSize(),
46-
) {
47-
Text(
48-
text = "Hello $name!",
49-
modifier = modifier
50-
)
51-
}
52-
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.shifthackz.catppuccin.app
2+
3+
import com.shifthackz.catppuccin.app.navigation.NavigationUiItem
4+
import com.shifthackz.catppuccin.app.settings.SettingsUiState
5+
6+
data class CatppuccinUiState(
7+
val settingsUiState: SettingsUiState = SettingsUiState(),
8+
val navigationUiItem: NavigationUiItem = NavigationUiItem.entries.first(),
9+
)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.shifthackz.catppuccin.app
2+
3+
import androidx.lifecycle.ViewModel
4+
import com.shifthackz.catppuccin.app.navigation.NavigationUiItem
5+
import com.shifthackz.catppuccin.app.settings.SettingsUiState
6+
import kotlinx.coroutines.flow.MutableStateFlow
7+
import kotlinx.coroutines.flow.StateFlow
8+
import kotlinx.coroutines.flow.asStateFlow
9+
import kotlinx.coroutines.flow.update
10+
11+
class CatppuccinViewModel : ViewModel() {
12+
13+
private val _uiState = MutableStateFlow(CatppuccinUiState())
14+
val uiState: StateFlow<CatppuccinUiState> = _uiState.asStateFlow()
15+
16+
fun applySettings(settingsUiState: SettingsUiState) {
17+
_uiState.update {
18+
it.copy(settingsUiState = settingsUiState)
19+
}
20+
}
21+
22+
fun navigate(item: NavigationUiItem) {
23+
_uiState.update {
24+
it.copy(navigationUiItem = item)
25+
}
26+
}
27+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package com.shifthackz.catppuccin.app.about
2+
3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Row
6+
import androidx.compose.foundation.layout.Spacer
7+
import androidx.compose.foundation.layout.fillMaxSize
8+
import androidx.compose.foundation.layout.fillMaxWidth
9+
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.layout.size
12+
import androidx.compose.foundation.layout.width
13+
import androidx.compose.foundation.rememberScrollState
14+
import androidx.compose.foundation.verticalScroll
15+
import androidx.compose.material.icons.Icons
16+
import androidx.compose.material.icons.filled.Code
17+
import androidx.compose.material.icons.filled.Palette
18+
import androidx.compose.material3.Button
19+
import androidx.compose.material3.Icon
20+
import androidx.compose.material3.LocalContentColor
21+
import androidx.compose.material3.MaterialTheme
22+
import androidx.compose.material3.OutlinedButton
23+
import androidx.compose.material3.Text
24+
import androidx.compose.runtime.Composable
25+
import androidx.compose.ui.Alignment
26+
import androidx.compose.ui.Modifier
27+
import androidx.compose.ui.platform.LocalContext
28+
import androidx.compose.ui.res.painterResource
29+
import androidx.compose.ui.tooling.preview.Preview
30+
import androidx.compose.ui.unit.dp
31+
import com.shifthackz.catppuccin.app.R
32+
import com.shifthackz.catppuccin.app.utils.getVersionString
33+
import com.shifthackz.catppuccin.app.utils.openWebPage
34+
35+
const val GITHUB_LIB = "https://github.com/ShiftHackZ/Catppuccin-Android-Library"
36+
const val GITHUB_CATPPUCCIN = "https://github.com/catppuccin/catppuccin"
37+
38+
@Composable
39+
@Preview(showBackground = true)
40+
fun AboutScreen(
41+
modifier: Modifier = Modifier,
42+
) {
43+
val context = LocalContext.current
44+
Column(
45+
modifier = modifier
46+
.fillMaxSize()
47+
.verticalScroll(rememberScrollState()),
48+
horizontalAlignment = Alignment.CenterHorizontally,
49+
) {
50+
Spacer(modifier = Modifier.weight(1f))
51+
52+
Image(
53+
modifier = Modifier.size(200.dp),
54+
painter = painterResource(id = R.drawable.catppuccin),
55+
contentDescription = "Catppuccin",
56+
)
57+
Text(
58+
text = "Catppuccin",
59+
style = MaterialTheme.typography.displaySmall,
60+
)
61+
Text(
62+
text = "Android Library",
63+
style = MaterialTheme.typography.headlineSmall,
64+
)
65+
66+
Spacer(modifier = Modifier.weight(2f))
67+
68+
Text(
69+
text = "Version ${context.getVersionString()}",
70+
style = MaterialTheme.typography.labelLarge,
71+
)
72+
Text(
73+
text = "Made with \uD83D\uDC9C by ShiftHackZ",
74+
style = MaterialTheme.typography.labelLarge,
75+
)
76+
Spacer(modifier = Modifier.height(16.dp))
77+
78+
Row(
79+
modifier = Modifier
80+
.padding(horizontal = 16.dp)
81+
.fillMaxWidth(),
82+
) {
83+
Button(
84+
modifier = Modifier
85+
.weight(1f),
86+
onClick = { context.openWebPage(GITHUB_LIB) },
87+
) {
88+
Icon(
89+
imageVector = Icons.Default.Code,
90+
contentDescription = null,
91+
)
92+
Spacer(modifier = Modifier.width(4.dp))
93+
Text(
94+
text = "GitHub",
95+
color = LocalContentColor.current,
96+
)
97+
}
98+
Spacer(modifier = Modifier.width(16.dp))
99+
OutlinedButton(
100+
modifier = Modifier
101+
102+
.weight(1f),
103+
onClick = { context.openWebPage(GITHUB_CATPPUCCIN) },
104+
) {
105+
Icon(
106+
imageVector = Icons.Default.Palette,
107+
contentDescription = null,
108+
)
109+
Spacer(modifier = Modifier.width(4.dp))
110+
Text(
111+
text = "Palette",
112+
color = LocalContentColor.current,
113+
)
114+
}
115+
}
116+
117+
118+
Spacer(modifier = Modifier.height(16.dp))
119+
}
120+
}

0 commit comments

Comments
 (0)