diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index da109e5a..bde0e9a4 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -47,16 +47,16 @@ val devRoundIcon = "@mipmap/dev_ic_launcher_round"
plugins {
- alias(libs.plugins.android.application)
- alias(libs.plugins.kotlin.compose)
+ alias(libs.plugins.androidApplication)
+ alias(libs.plugins.composeCompiler)
alias(libs.plugins.ksp)
- alias(libs.plugins.jetbrains.kotlin.serialization)
- alias(libs.plugins.oss.licenses)
+ alias(libs.plugins.kotlinSerialization)
+ alias(libs.plugins.ossLicenses)
}
kotlin {
compilerOptions {
- jvmTarget.set(JvmTarget.JVM_21)
+ jvmTarget = JvmTarget.JVM_21
}
}
@@ -205,6 +205,7 @@ android {
dependencies {
// In project library / feature modules
+ implementation(project(":design_system"))
implementation(project(":core"))
implementation(project(":database"))
implementation(project(":password_manager"))
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 36e185e2..667ba8e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
android:theme="@style/PasscodesTheme.Default"
tools:targetApi="33" >
-
+
.modernMainAppEntriesProvider(navigateTo: (Route) -> Unit) {
+ entry {
+ ModernMainScreen(navigateTo)
+ }
+
+ entry {
+ ModernSettingsScreen()
+ }
+
+ entry {
+ ModernAboutScreen()
+ }
+}
+
+fun EntryProviderScope.classicalMainAppEntriesProvider(navigateTo: (Route) -> Unit) {
+ entry {
+ ClassicalMainScreen(navigateTo = navigateTo)
+ }
+
+ entry {
+ ClassicalSettingsScreen()
+ }
+
+ entry {
+ ClassicalAboutScreen()
+ }
+}
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/navigation/NavigationRoot.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/navigation/NavigationRoot.kt
index 7691086b..50fe1fda 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/navigation/NavigationRoot.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/navigation/NavigationRoot.kt
@@ -14,20 +14,8 @@ import androidx.navigation3.ui.NavDisplay
import com.jeeldobariya.passcodes.core.datastore.AppSettings
import com.jeeldobariya.passcodes.core.datastore.appDatastore
import com.jeeldobariya.passcodes.core.navigation.Route
-import com.jeeldobariya.passcodes.password_manager.presentation.load_password.ClassicalLoadPasswordScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.password_manager.ClassicalPasswordManagerScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.password_manager.ModernPasswordManagerScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.save_password.ClassicalSavePasswordScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.save_password.ModernSavePasswordScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.update_password.ClassicalUpdatePasswordScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.update_password.ModernUpdatePasswordScreen
-import com.jeeldobariya.passcodes.password_manager.presentation.view_password.ClassicalViewPasswordScreen
-import com.jeeldobariya.passcodes.presentation.about_screen.ClassicalAboutScreen
-import com.jeeldobariya.passcodes.presentation.main_screen.ClassicalMainScreen
-import com.jeeldobariya.passcodes.presentation.setting_screen.ClassicalSettingsScreen
-import com.jeeldobariya.passcodes.presentation.about_screen.ModernAboutScreen
-import com.jeeldobariya.passcodes.presentation.main_screen.ModernMainScreen
-import com.jeeldobariya.passcodes.presentation.setting_screen.ModernSettingsScreen
+import com.jeeldobariya.passcodes.password_manager.navigation.classicalPasswordManagerEntriesProvider
+import com.jeeldobariya.passcodes.password_manager.navigation.modernPasswordManagerEntriesProvider
@Composable
@@ -42,37 +30,8 @@ private fun ModernNavigationRoot(backStack: NavBackStack, navigateTo: (R
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = entryProvider {
- entry {
- ModernMainScreen(navigateTo)
- }
-
- entry {
- ModernSettingsScreen()
- }
-
- entry {
- ModernAboutScreen()
- }
-
- entry {
- ModernPasswordManagerScreen(navigateTo)
- }
-
- entry {
- ModernPasswordManagerScreen(navigateTo)
- }
-
- entry {
- ModernSavePasswordScreen()
- }
-
- entry { // Theoretically, Should be treated as `UpdatePassword` Route in Modern Layout...
- ModernUpdatePasswordScreen(it.id)
- }
-
- entry {
- ModernUpdatePasswordScreen(it.id)
- }
+ modernMainAppEntriesProvider(navigateTo = navigateTo)
+ modernPasswordManagerEntriesProvider(navigateTo = navigateTo)
}
)
}
@@ -89,37 +48,8 @@ private fun ClassicalNavigationRoot(backStack: NavBackStack, navigateTo:
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = entryProvider {
- entry {
- ClassicalMainScreen(navigateTo = navigateTo)
- }
-
- entry {
- ClassicalSettingsScreen()
- }
-
- entry {
- ClassicalAboutScreen()
- }
-
- entry {
- ClassicalPasswordManagerScreen(navigateTo = navigateTo)
- }
-
- entry {
- ClassicalLoadPasswordScreen(navigateTo = navigateTo)
- }
-
- entry {
- ClassicalSavePasswordScreen()
- }
-
- entry {
- ClassicalViewPasswordScreen(passwordId = it.id, navigateTo = navigateTo)
- }
-
- entry {
- ClassicalUpdatePasswordScreen(passwordId = it.id)
- }
+ classicalMainAppEntriesProvider(navigateTo = navigateTo)
+ classicalPasswordManagerEntriesProvider(navigateTo = navigateTo)
}
)
}
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt
index e6c2a6dc..b8c3a0b2 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt
@@ -60,7 +60,7 @@ class MainActivity : AppCompatActivity() {
if (featureFlagsDatastore.data.first().isPreviewLayoutEnabled) {
Intent(
this@MainActivity,
- com.jeeldobariya.passcodes.ui.MainActivity::class.java
+ com.jeeldobariya.passcodes.MainActivity::class.java
).also {
startActivity(it)
}
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt
index 89876242..1c6ca6d1 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt
@@ -38,7 +38,7 @@ import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import com.jeeldobariya.passcodes.Constant
import com.jeeldobariya.passcodes.R
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
@Composable
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ModernAboutScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ModernAboutScreen.kt
index d1609492..cc16162c 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ModernAboutScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ModernAboutScreen.kt
@@ -19,7 +19,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.R
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
@Composable
fun ModernAboutScreen() {
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt
index e0f1d87d..b40fe0f9 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt
@@ -31,7 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.core.navigation.Route
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
@Composable
fun ClassicalMainScreen(navigateTo: (Route) -> Unit) {
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ModernMainScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ModernMainScreen.kt
index 60c3bbac..24372fb0 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ModernMainScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ModernMainScreen.kt
@@ -31,7 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.core.navigation.Route
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
@Composable
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt
index b95e6fce..119fc812 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt
@@ -2,11 +2,13 @@ package com.jeeldobariya.passcodes.presentation.setting_screen
import android.content.Intent
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@@ -42,7 +44,7 @@ import com.jeeldobariya.passcodes.core.datastore.AppSettings
import com.jeeldobariya.passcodes.core.datastore.appDatastore
import com.jeeldobariya.passcodes.core.feature_flags.FeatureFlagsSettings
import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
@@ -56,10 +58,6 @@ fun ClassicalSettingsScreen() {
private fun ClassicalSettingsScreenContent() {
// TODO: Language & Theme need to be done.
- val selectedLanguage = "Under Development"
- val languageOptions: List = listOf("English", "Korean")
- val onLanguageSelected: (String) -> Unit = { /* TODO */ }
-
val context = LocalContext.current
val scope = rememberCoroutineScope()
@@ -74,8 +72,6 @@ private fun ClassicalSettingsScreenContent() {
val appDataStore = context.appDatastore
val appDatastoreState by appDataStore.data.collectAsState(initial = AppSettings())
- var expanded by remember { mutableStateOf(false) }
-
Scaffold { padding ->
LazyColumn(
@@ -97,85 +93,32 @@ private fun ClassicalSettingsScreenContent() {
)
}
- // Language Card
- item {
- Card(shape = RoundedCornerShape(16.dp)) {
-
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .padding(16.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.SpaceBetween
- ) {
-
- Text(
- modifier = Modifier.padding(4.dp),
- text = stringResource(R.string.label_language_setting),
- color = MaterialTheme.colorScheme.primary,
- style = MaterialTheme.typography.bodyMedium
- )
-
- ExposedDropdownMenuBox(
- expanded = expanded,
- onExpandedChange = { expanded = !expanded }
+ if (!flagDatastoreState.isPreviewFeaturesEnabled) {
+ item {
+ Card(shape = RoundedCornerShape(16.dp)) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(24.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.SpaceEvenly
) {
- OutlinedTextField(
- value = selectedLanguage,
- onValueChange = {},
- readOnly = true,
- trailingIcon = {
- ExposedDropdownMenuDefaults.TrailingIcon(expanded)
- },
- modifier = Modifier.menuAnchor(
- ExposedDropdownMenuAnchorType.PrimaryNotEditable,
- enabled = true
- )
- )
-
- ExposedDropdownMenu(
- expanded = expanded,
- onDismissRequest = { expanded = false }
- ) {
- languageOptions.forEach { lang ->
- DropdownMenuItem(
- text = { Text(lang) },
- onClick = {
- onLanguageSelected(lang)
- expanded = false
- }
- )
- }
- }
- }
- }
- }
- }
-
- // Theme Card
- item {
- Card(shape = RoundedCornerShape(16.dp)) {
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .padding(16.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.SpaceBetween
- ) {
-
- Text(
- text = stringResource(R.string.label_theme_setting),
- color = MaterialTheme.colorScheme.primary
- )
-
- Button(onClick = { /* TODO */ }) {
+ Text(text = "Coming Soon", style = MaterialTheme.typography.titleLarge)
Text(
- text = stringResource(R.string.toggle_theme_button_text),
- style = MaterialTheme.typography.labelMedium
+ text = "Language & Theme features are currently under development",
+ style = MaterialTheme.typography.labelSmall,
+ textAlign = TextAlign.Center
)
}
}
}
+ } else {
+ // Language Card
+ item {
+ PreviewLanguageFeatures()
+ }
+
+ previewThemeFeatures()
}
// Latest Features Switch
@@ -271,6 +214,97 @@ private fun ClassicalSettingsScreenContent() {
}
}
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+private fun PreviewLanguageFeatures() {
+ val selectedLanguage = "Under Development"
+ val languageOptions: List = listOf("English", "Korean")
+ val onLanguageSelected: (String) -> Unit = { /* TODO */ }
+
+ var expanded by remember { mutableStateOf(false) }
+
+ Card(shape = RoundedCornerShape(16.dp)) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+
+ Text(
+ modifier = Modifier.padding(4.dp),
+ text = stringResource(R.string.label_language_setting),
+ color = MaterialTheme.colorScheme.primary,
+ style = MaterialTheme.typography.bodyMedium
+ )
+
+ ExposedDropdownMenuBox(
+ expanded = expanded,
+ onExpandedChange = { expanded = !expanded }
+ ) {
+ OutlinedTextField(
+ value = selectedLanguage,
+ onValueChange = {},
+ readOnly = true,
+ trailingIcon = {
+ ExposedDropdownMenuDefaults.TrailingIcon(expanded)
+ },
+ modifier = Modifier.menuAnchor(
+ ExposedDropdownMenuAnchorType.PrimaryNotEditable,
+ enabled = true
+ )
+ )
+
+ ExposedDropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false }
+ ) {
+ languageOptions.forEach { lang ->
+ DropdownMenuItem(
+ text = { Text(lang) },
+ onClick = {
+ onLanguageSelected(lang)
+ expanded = false
+ }
+ )
+ }
+ }
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+private fun LazyListScope.previewThemeFeatures() {
+ // Theme Card
+ item {
+ Card(shape = RoundedCornerShape(16.dp)) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+
+ Text(
+ text = stringResource(R.string.label_theme_setting),
+ color = MaterialTheme.colorScheme.primary
+ )
+
+ Button(onClick = { /* TODO */ }) {
+ Text(
+ text = stringResource(R.string.toggle_theme_button_text),
+ style = MaterialTheme.typography.labelMedium
+ )
+ }
+ }
+ }
+ }
+}
+
+
@Composable
private fun SwitchCard(
text: String,
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ModernSettingsScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ModernSettingsScreen.kt
index a651b5f9..61cd3f5f 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ModernSettingsScreen.kt
+++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ModernSettingsScreen.kt
@@ -42,7 +42,7 @@ import com.jeeldobariya.passcodes.core.datastore.AppSettings
import com.jeeldobariya.passcodes.core.datastore.appDatastore
import com.jeeldobariya.passcodes.core.feature_flags.FeatureFlagsSettings
import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore
-import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
@Composable
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Color.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Color.kt
deleted file mode 100644
index 4ed93138..00000000
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Color.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.jeeldobariya.passcodes.ui.ui.theme
-
-import androidx.compose.ui.graphics.Color
-
-val Purple80 = Color(0xFFD0BCFF)
-val PurpleGrey80 = Color(0xFFCCC2DC)
-val Pink80 = Color(0xFFEFB8C8)
-
-val Purple40 = Color(0xFF6650a4)
-val PurpleGrey40 = Color(0xFF625b71)
-val Pink40 = Color(0xFF7D5260)
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Theme.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Theme.kt
deleted file mode 100644
index 047c32fc..00000000
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Theme.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.jeeldobariya.passcodes.ui.ui.theme
-
-import android.os.Build
-import androidx.compose.foundation.isSystemInDarkTheme
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.darkColorScheme
-import androidx.compose.material3.dynamicDarkColorScheme
-import androidx.compose.material3.dynamicLightColorScheme
-import androidx.compose.material3.lightColorScheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.platform.LocalContext
-
-private val DarkColorScheme = darkColorScheme(
- primary = Purple80,
- secondary = PurpleGrey80,
- tertiary = Pink80
-)
-
-private val LightColorScheme = lightColorScheme(
- primary = Purple40,
- secondary = PurpleGrey40,
- tertiary = Pink40
-
- /* Other default colors to override
- background = Color(0xFFFFFBFE),
- surface = Color(0xFFFFFBFE),
- onPrimary = Color.White,
- onSecondary = Color.White,
- onTertiary = Color.White,
- onBackground = Color(0xFF1C1B1F),
- onSurface = Color(0xFF1C1B1F),
- */
-)
-
-@Composable
-fun PasscodesTheme(
- darkTheme: Boolean = isSystemInDarkTheme(),
- // Dynamic color is available on Android 12+
- dynamicColor: Boolean = true,
- content: @Composable () -> Unit
-) {
- val colorScheme = when {
- dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
- val context = LocalContext.current
- if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
- }
-
- darkTheme -> DarkColorScheme
- else -> LightColorScheme
- }
-
- MaterialTheme(
- colorScheme = colorScheme,
- typography = Typography,
- content = content
- )
-}
diff --git a/autofill/build.gradle.kts b/autofill/build.gradle.kts
index ac29b3a4..3a184b45 100644
--- a/autofill/build.gradle.kts
+++ b/autofill/build.gradle.kts
@@ -1,13 +1,13 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
- alias(libs.plugins.android.library)
+ alias(libs.plugins.androidLibrary)
alias(libs.plugins.ksp)
}
kotlin {
compilerOptions {
- jvmTarget.set(JvmTarget.JVM_21)
+ jvmTarget = JvmTarget.JVM_21
}
}
diff --git a/build.gradle.kts b/build.gradle.kts
index 38f2a5a7..e0de4eee 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,11 +1,13 @@
plugins {
- alias(libs.plugins.android.application) apply false
- alias(libs.plugins.kotlin.android) apply false
- alias(libs.plugins.kotlin.compose) apply false
- alias(libs.plugins.jetbrains.kotlin.serialization) apply false
+ alias(libs.plugins.androidApplication) apply false
+ alias(libs.plugins.androidLibrary) apply false
+ alias(libs.plugins.composeMultiplatform) apply false
+ alias(libs.plugins.composeCompiler) apply false
+ alias(libs.plugins.kotlinMultiplatform) apply false
+ alias(libs.plugins.androidKmpLibrary) apply false
+ alias(libs.plugins.kotlinSerialization) apply false
alias(libs.plugins.ksp) apply false
- alias(libs.plugins.oss.licenses) apply false
- alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.ossLicenses) apply false
}
// All projects block is common for setting up common repositories for all subprojects.
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
index a4a07467..e81002e2 100644
--- a/core/build.gradle.kts
+++ b/core/build.gradle.kts
@@ -1,13 +1,13 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
- alias(libs.plugins.android.library)
- alias(libs.plugins.jetbrains.kotlin.serialization)
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinSerialization)
}
kotlin {
compilerOptions {
- jvmTarget.set(JvmTarget.JVM_21)
+ jvmTarget = JvmTarget.JVM_21
}
}
diff --git a/database/build.gradle.kts b/database/build.gradle.kts
index ea4eb49d..053a1d98 100644
--- a/database/build.gradle.kts
+++ b/database/build.gradle.kts
@@ -1,13 +1,13 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
- alias(libs.plugins.android.library)
+ alias(libs.plugins.androidLibrary)
alias(libs.plugins.ksp)
}
kotlin {
compilerOptions {
- jvmTarget.set(JvmTarget.JVM_21)
+ jvmTarget = JvmTarget.JVM_21
}
}
diff --git a/design_system/.gitignore b/design_system/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/design_system/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/design_system/build.gradle.kts b/design_system/build.gradle.kts
new file mode 100644
index 00000000..4a266d94
--- /dev/null
+++ b/design_system/build.gradle.kts
@@ -0,0 +1,51 @@
+plugins {
+ alias(libs.plugins.kotlinMultiplatform)
+ alias(libs.plugins.composeMultiplatform)
+ alias(libs.plugins.composeCompiler)
+ alias(libs.plugins.androidKmpLibrary)
+}
+
+kotlin {
+ androidLibrary {
+ compileSdk = 36
+ minSdk = 26
+ namespace = "com.jeeldobariya.passcodes.design_system"
+ experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true
+ }
+
+// listOf(
+// iosArm64(),
+// iosSimulatorArm64()
+// ).forEach { iosTarget ->
+// iosTarget.binaries.framework {
+// baseName = "ComposeApp"
+// isStatic = true
+// }
+// }
+//
+// jvm("desktop")
+
+ sourceSets {
+// androidMain.dependencies {
+// implementation(compose.preview)
+// implementation(libs.androidx.activity.compose)
+// }
+ commonMain.dependencies {
+ implementation(compose.runtime)
+ implementation(compose.foundation)
+ implementation(compose.material3)
+ implementation(compose.ui)
+ implementation(compose.components.resources)
+ implementation(compose.preview)
+// implementation(libs.androidx.lifecycle.viewmodelCompose)
+// implementation(libs.androidx.lifecycle.runtimeCompose)
+ }
+// commonTest.dependencies {
+// implementation(libs.kotlin.test)
+// }
+// val desktopMain by getting
+// desktopMain.dependencies {
+// implementation(compose.desktop.currentOs)
+// }
+ }
+}
diff --git a/design_system/consumer-rules.pro b/design_system/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/design_system/proguard-rules.pro b/design_system/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/design_system/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Color.kt b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Color.kt
new file mode 100644
index 00000000..451ebc1c
--- /dev/null
+++ b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Color.kt
@@ -0,0 +1,27 @@
+package com.jeeldobariya.passcodes.design_system.theme
+
+import androidx.compose.ui.graphics.Color
+
+// Primary
+val primaryLight = Color(0xFF6750A4)
+val primaryDark = Color(0xFFD0BCFF)
+
+// Secondary
+val secondaryLight = Color(0xFF625B71)
+val secondaryDark = Color(0xFFCCC2DC)
+
+// Tertiary
+val tertiaryLight = Color(0xFF7D5260)
+val tertiaryDark = Color(0xFFEFB8C8)
+
+// Background
+val BackgroundLight = Color(0xFFFFFBFE)
+val BackgroundDark = Color(0xFF1C1B1F)
+
+// Surface
+val SurfaceLight = Color(0xFFFFFBFE)
+val SurfaceDark = Color(0xFF1C1B1F)
+
+// Error
+val ErrorLight = Color(0xFFB3261E)
+val ErrorDark = Color(0xFFF2B8B5)
diff --git a/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/ColorTheme.kt b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/ColorTheme.kt
new file mode 100644
index 00000000..0937a6dd
--- /dev/null
+++ b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/ColorTheme.kt
@@ -0,0 +1,8 @@
+package com.jeeldobariya.passcodes.design_system.theme
+
+import androidx.compose.material3.ColorScheme
+
+data class ColorTheme(
+ val lightColorScheme: ColorScheme,
+ val darkColorScheme: ColorScheme
+)
diff --git a/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Theme.kt b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Theme.kt
new file mode 100644
index 00000000..1e02e883
--- /dev/null
+++ b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Theme.kt
@@ -0,0 +1,51 @@
+package com.jeeldobariya.passcodes.design_system.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+
+private val PasscodesColorScheme = ColorTheme(
+ lightColorScheme = lightColorScheme(
+ primary = primaryLight,
+ secondary = secondaryLight,
+ tertiary = tertiaryLight,
+ background = BackgroundLight,
+ surface = SurfaceLight,
+ error = ErrorLight
+ ),
+ darkColorScheme = darkColorScheme(
+ primary = primaryDark,
+ secondary = secondaryDark,
+ tertiary = tertiaryDark,
+ background = BackgroundDark,
+ surface = SurfaceDark,
+ error = ErrorDark
+ )
+)
+
+@Composable
+fun PasscodesTheme(
+ colorTheme: ColorTheme = PasscodesColorScheme,
+ darkTheme: Boolean = isSystemInDarkTheme(),
+ // Dynamic color is available on Android 12+
+ // dynamicColor: Boolean = true,
+ content: @Composable () -> Unit
+) {
+ val colorScheme = when {
+// dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+// val context = LocalContext.current
+// if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+// }
+
+ darkTheme -> colorTheme.darkColorScheme
+ else -> colorTheme.lightColorScheme
+ }
+
+ MaterialTheme(
+ colorScheme = colorScheme,
+ typography = Typography,
+ content = content
+ )
+}
diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Type.kt b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Type.kt
similarity index 94%
rename from app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Type.kt
rename to design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Type.kt
index f456b139..107d6074 100644
--- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ui/theme/Type.kt
+++ b/design_system/src/commonMain/kotlin/com/jeeldobariya/passcodes/design_system/theme/Type.kt
@@ -1,4 +1,4 @@
-package com.jeeldobariya.passcodes.ui.ui.theme
+package com.jeeldobariya.passcodes.design_system.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index fabf6b0d..3096c139 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -15,6 +15,7 @@ androidx-test-ext-junit = "1.3.0"
coroutines = "1.10.2"
lifecycle = "2.10.0"
koin = "4.1.1"
+composeMultiplatform = "1.10.2"
composeBom = "2026.02.01"
compose-activity = "1.12.4"
compose-viewmodel = "2.10.0"
@@ -22,7 +23,7 @@ datastorePreferences = "1.2.0"
kotlinSerializationJson = "1.10.0"
# Plugin versions
-agp = "9.0.1"
+agp = "9.1.0"
ksp = "2.3.6"
kotlin = "2.3.10"
oss-license-plugin = "0.10.10" # Also update in settings.gradle.kts
@@ -117,10 +118,12 @@ unit-test = ["junit", "truth"]
[plugins]
-android-application = { id = "com.android.application", version.ref = "agp" }
-android-library = { id = "com.android.library", version.ref = "agp" }
-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
-kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
-jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
+androidApplication = { id = "com.android.application", version.ref = "agp" }
+androidLibrary = { id = "com.android.library", version.ref = "agp" }
+composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
+composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
+kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
+androidKmpLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
+kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
-oss-licenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "oss-license-plugin" }
+ossLicenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "oss-license-plugin" }
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 61285a65..d997cfc6 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 37f78a6a..dbc3ce4a 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index adff685a..0262dcbd 100755
--- a/gradlew
+++ b/gradlew
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
diff --git a/password_manager/build.gradle.kts b/password_manager/build.gradle.kts
index 3c90e627..acb9cec9 100644
--- a/password_manager/build.gradle.kts
+++ b/password_manager/build.gradle.kts
@@ -1,14 +1,14 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
- alias(libs.plugins.android.library)
- alias(libs.plugins.kotlin.compose)
- alias(libs.plugins.jetbrains.kotlin.serialization)
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.composeCompiler)
+ alias(libs.plugins.kotlinSerialization)
}
kotlin {
compilerOptions {
- jvmTarget.set(JvmTarget.JVM_21)
+ jvmTarget = JvmTarget.JVM_21
}
}
@@ -51,6 +51,7 @@ android {
}
dependencies {
+ implementation(project(":design_system"))
implementation(project(":core"))
implementation(project(":database"))
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/navigation/EntriesProvider.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/navigation/EntriesProvider.kt
new file mode 100644
index 00000000..a255bfad
--- /dev/null
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/navigation/EntriesProvider.kt
@@ -0,0 +1,57 @@
+package com.jeeldobariya.passcodes.password_manager.navigation
+
+import androidx.navigation3.runtime.EntryProviderScope
+import androidx.navigation3.runtime.NavKey
+import com.jeeldobariya.passcodes.core.navigation.Route
+import com.jeeldobariya.passcodes.password_manager.presentation.load_password.ClassicalLoadPasswordScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.password_manager.ClassicalPasswordManagerScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.password_manager.ModernPasswordManagerScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.save_password.ClassicalSavePasswordScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.save_password.ModernSavePasswordScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.update_password.ClassicalUpdatePasswordScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.update_password.ModernUpdatePasswordScreen
+import com.jeeldobariya.passcodes.password_manager.presentation.view_password.ClassicalViewPasswordScreen
+
+fun EntryProviderScope.modernPasswordManagerEntriesProvider(navigateTo: (Route) -> Unit) {
+ entry {
+ ModernPasswordManagerScreen(navigateTo)
+ }
+
+ entry {
+ ModernPasswordManagerScreen(navigateTo)
+ }
+
+ entry {
+ ModernSavePasswordScreen()
+ }
+
+ entry { // Theoretically, Should be treated as `UpdatePassword` Route in Modern Layout...
+ ModernUpdatePasswordScreen(it.id)
+ }
+
+ entry {
+ ModernUpdatePasswordScreen(it.id)
+ }
+}
+
+fun EntryProviderScope.classicalPasswordManagerEntriesProvider(navigateTo: (Route) -> Unit) {
+ entry {
+ ClassicalPasswordManagerScreen(navigateTo = navigateTo)
+ }
+
+ entry {
+ ClassicalLoadPasswordScreen(navigateTo = navigateTo)
+ }
+
+ entry {
+ ClassicalSavePasswordScreen()
+ }
+
+ entry {
+ ClassicalViewPasswordScreen(passwordId = it.id, navigateTo = navigateTo)
+ }
+
+ entry {
+ ClassicalUpdatePasswordScreen(passwordId = it.id)
+ }
+}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/load_password/ClassicalLoadPasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/load_password/ClassicalLoadPasswordScreen.kt
index a0f5d392..99cc3c91 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/load_password/ClassicalLoadPasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/load_password/ClassicalLoadPasswordScreen.kt
@@ -22,6 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.core.navigation.Route
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import org.koin.compose.viewmodel.koinViewModel
@@ -91,8 +92,10 @@ private fun ClassicalLoadPasswordScreenContent(
@Preview
@Composable
private fun ClassicalLoadPasswordScreenPreview() {
- ClassicalLoadPasswordScreenContent(
- state = LoadPasswordState(),
- navigateTo = {}
- )
+ PasscodesTheme {
+ ClassicalLoadPasswordScreenContent(
+ state = LoadPasswordState(),
+ navigateTo = {}
+ )
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ClassicalPasswordManagerScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ClassicalPasswordManagerScreen.kt
index 1e8bf5ac..bfe040e7 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ClassicalPasswordManagerScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ClassicalPasswordManagerScreen.kt
@@ -17,6 +17,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.jeeldobariya.passcodes.core.navigation.Route
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -61,5 +62,7 @@ private fun ClassicalPasswordManagerScreenContent(
@Preview
@Composable
private fun ClassicalPasswordManagerScreenPreview() {
- ClassicalPasswordManagerScreenContent(navigateTo = {})
+ PasscodesTheme {
+ ClassicalPasswordManagerScreenContent(navigateTo = {})
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ModernPasswordManagerScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ModernPasswordManagerScreen.kt
index c580bd8b..46d06c9f 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ModernPasswordManagerScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/password_manager/ModernPasswordManagerScreen.kt
@@ -32,6 +32,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.core.navigation.Route
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
@@ -113,8 +114,10 @@ private fun ModernPasswordManagerScreenContent(
@Preview
@Composable
private fun ModernPasswordManagerScreenPreview() {
- ModernPasswordManagerScreenContent(
- state = PasswordManagerState(),
- navigateTo = {}
- )
+ PasscodesTheme {
+ ModernPasswordManagerScreenContent(
+ state = PasswordManagerState(),
+ navigateTo = {}
+ )
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ClassicalSavePasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ClassicalSavePasswordScreen.kt
index 5e3a2084..251c17fa 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ClassicalSavePasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ClassicalSavePasswordScreen.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
@@ -120,8 +121,10 @@ private fun ClassicalSavePasswordScreenContent(
@Preview
@Composable
private fun ClassicalSavePasswordScreenPreview() {
- ClassicalSavePasswordScreenContent(
- state = SavePasswordState(),
- onAction = {}
- )
+ PasscodesTheme {
+ ClassicalSavePasswordScreenContent(
+ state = SavePasswordState(),
+ onAction = {}
+ )
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ModernSavePasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ModernSavePasswordScreen.kt
index 99bbc69f..2dd759d6 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ModernSavePasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/save_password/ModernSavePasswordScreen.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
@@ -112,5 +113,7 @@ private fun ModernSavePasswordScreenContent(
@Preview
@Composable
private fun ModernSavePasswordScreenPreview() {
- ModernSavePasswordScreenContent(state = SavePasswordState(), onAction = {})
+ PasscodesTheme {
+ ModernSavePasswordScreenContent(state = SavePasswordState(), onAction = {})
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ClassicalUpdatePasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ClassicalUpdatePasswordScreen.kt
index 99236822..778eba68 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ClassicalUpdatePasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ClassicalUpdatePasswordScreen.kt
@@ -20,6 +20,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
@@ -117,5 +118,7 @@ private fun ClassicalUpdatePasswordScreenContent(
@Preview
@Composable
private fun ClassicalUpdatePasswordScreenPreview() {
- ClassicalUpdatePasswordScreenContent(state = UpdatePasswordState(), onAction = {})
+ PasscodesTheme {
+ ClassicalUpdatePasswordScreenContent(state = UpdatePasswordState(), onAction = {})
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ModernUpdatePasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ModernUpdatePasswordScreen.kt
index 91e0030d..a8dfee64 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ModernUpdatePasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/update_password/ModernUpdatePasswordScreen.kt
@@ -20,6 +20,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
@@ -113,5 +114,7 @@ private fun ModernUpdatePasswordScreenContent(
@Preview
@Composable
private fun ModernUpdatePasswordScreenPreview() {
- ModernUpdatePasswordScreenContent(state = UpdatePasswordState(), onAction = {})
+ PasscodesTheme {
+ ModernUpdatePasswordScreenContent(state = UpdatePasswordState(), onAction = {})
+ }
}
diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/view_password/ClassicalViewPasswordScreen.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/view_password/ClassicalViewPasswordScreen.kt
index caf342ef..c128d6a7 100644
--- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/view_password/ClassicalViewPasswordScreen.kt
+++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/presentation/view_password/ClassicalViewPasswordScreen.kt
@@ -17,6 +17,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.jeeldobariya.passcodes.core.navigation.Route
+import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme
import org.koin.compose.viewmodel.koinViewModel
@@ -95,10 +96,12 @@ private fun ClassicalViewPasswordScreenContent(
@Preview
@Composable
private fun ClassicalViewPasswordScreenPreview() {
- ClassicalViewPasswordScreenContent(
- passwordId = 0,
- state = ViewPasswordState(),
- onAction = {},
- navigateTo = {}
- )
+ PasscodesTheme {
+ ClassicalViewPasswordScreenContent(
+ passwordId = 0,
+ state = ViewPasswordState(),
+ onAction = {},
+ navigateTo = {}
+ )
+ }
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 0ac5b0cf..fedcf1af 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -18,6 +18,7 @@ plugins {
// Defines all modules in your project
include(":app")
+include(":design_system")
include(":core")
include(":autofill")
include(":database")