Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
61398a7
chore(deps): bump org.json:json from 20250517 to 20251224
dependabot[bot] Dec 28, 2025
111f88c
chore(deps): bump androidx.compose:compose-bom
dependabot[bot] Dec 21, 2025
1beafb2
chore(deps): bump com.google.devtools.ksp from 2.3.3 to 2.3.4
dependabot[bot] Dec 21, 2025
d7e8bf3
chore(deps): bump kotlin from 2.2.21 to 2.3.0
dependabot[bot] Dec 29, 2025
fb93b94
chore(deps): bump androidx.activity:activity-compose
dependabot[bot] Dec 29, 2025
c41761f
chore(deps): add navigation 3 dependency
JeelDobariya38 Jan 6, 2026
2d871f8
refactor: the new jetpack compose main activity.
JeelDobariya38 Jan 8, 2026
27bc8c8
refactor: rename MainActivity -> JetpackPreviewLayoutActivity
JeelDobariya38 Jan 8, 2026
59312b4
feat: almost there to jetpack compose, super excited!!
JeelDobariya38 Jan 8, 2026
c764a3b
feat: finally made the first screen in jetpack compose
JeelDobariya38 Jan 8, 2026
df073ab
chore: add dependabot categories in release.yml
JeelDobariya38 Jan 8, 2026
9874cc3
feat: improve design of new main screen
JeelDobariya38 Jan 9, 2026
47e5615
feat: add app icon on new main screen
JeelDobariya38 Jan 10, 2026
f88d696
refactor: move the mainscreen composeable to a new file
JeelDobariya38 Jan 10, 2026
ffdc646
feat: add navigation 3 in the project
JeelDobariya38 Jan 10, 2026
c8837e6
feat: initial routes setup
JeelDobariya38 Jan 10, 2026
4384ebc
fix: oh, i forget to define the routes in nav display
JeelDobariya38 Jan 10, 2026
0fb08a3
fix: api level compatiablity problem
JeelDobariya38 Jan 11, 2026
b301ae1
chore: edit the app label
JeelDobariya38 Jan 11, 2026
447d70d
feat: improve about, main and setting screen ui
JeelDobariya38 Jan 11, 2026
16a275c
chore(deps): setup compose in password manager module
JeelDobariya38 Jan 11, 2026
2374080
feat: made a new ui for password manager screen
JeelDobariya38 Jan 11, 2026
9595ed2
feat: made password manager new ui functional
JeelDobariya38 Jan 11, 2026
4e4e76d
feat: fix the colors
JeelDobariya38 Jan 11, 2026
a251b05
feat: made the save password screen
JeelDobariya38 Jan 14, 2026
7e3667a
feat: remove clutter from about us screen
JeelDobariya38 Jan 14, 2026
a467b92
refactor: move routes definition to core module so it can be shared
JeelDobariya38 Jan 14, 2026
a239390
chore(feat): add a gemini nano banana generated passcodes banner
JeelDobariya38 Jan 14, 2026
c3f3fbc
refactor: improve the code by getting value
JeelDobariya38 Jan 14, 2026
804a613
feat: made floating password button work
JeelDobariya38 Jan 14, 2026
a472f20
feat: improve deign of the save password screen
JeelDobariya38 Jan 14, 2026
04b803c
feat: try to connect datastore state to settings
JeelDobariya38 Jan 14, 2026
a18842b
feat: made toggle working
JeelDobariya38 Jan 14, 2026
70122c1
chore(deps): bump androidx.compose:compose-bom
dependabot[bot] Jan 18, 2026
1bf3247
chore(deps): bump org.jetbrains.kotlinx:kotlinx-serialization-json
dependabot[bot] Jan 25, 2026
a416d1b
chore(deps): bump agp from 8.13.2 to 9.0.0
dependabot[bot] Jan 18, 2026
8b58696
chore(deps): bump gradle-wrapper from 9.2.0 to 9.3.0
dependabot[bot] Jan 25, 2026
bcf8e67
fix: the issue with gradle build after updating to agp 9.0.0
JeelDobariya38 Jan 26, 2026
e770c5a
chore: remove deperacted unwanted stuff
JeelDobariya38 Jan 26, 2026
238e1a9
feat: improve the save password screen
JeelDobariya38 Jan 26, 2026
e160242
feat: create a update password screen
JeelDobariya38 Jan 26, 2026
fdee37f
chore: remove oss plugin from password manager module as it un necessary
JeelDobariya38 Jan 27, 2026
1cbb5ad
chore: add 'Changed (Re-Write)' section to release.yml
JeelDobariya38 Jan 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions .github/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,32 @@

changelog:
categories:
- title: Highlights 🌟
- title: 🌟 Highlights
labels:
- highlights

- title: New Features 🚀
- title: 🚀 New Features
labels:
- feature
- enhancement

- title: Bug Fixes 🐛
- title: 🐛 Bug Fixes
labels:
- bug

- title: Documentation 📚
- title: ✏️ Changed (Re-Write)
labels:
- refactor

- title: 📚 Documentation
labels:
- documentation

- title: 📦 Dependency Updates
labels:
- dependencies
- dependabot

- title: Other Changes
labels:
- "*"
9 changes: 7 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import java.util.Properties
* Gets the current system time formatted as 'yy-mm-dd : hh-mm-ss'.
*/
fun getCurrentTimeLabel(): String {
val formatter = SimpleDateFormat("yy-MM-dd : HH-mm-ss", Locale.getDefault())
val formatter = SimpleDateFormat("yy-MM-dd - HH:mm:ss", Locale.getDefault())
return formatter.format(Date())
}

Expand Down Expand Up @@ -49,9 +49,9 @@ val devRoundIcon = "@mipmap/dev_ic_launcher_round"

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.ksp)
alias(libs.plugins.jetbrains.kotlin.serialization)
alias(libs.plugins.oss.licenses)
}

Expand Down Expand Up @@ -201,6 +201,7 @@ android {
buildFeatures {
viewBinding = true
buildConfig = true
resValues = true
compose = true
}
}
Expand All @@ -222,6 +223,10 @@ dependencies {
implementation(libs.bundles.compose)
debugImplementation(libs.bundles.compose.debug)

// Navigation 3
implementation(libs.bundles.navigation3)
implementation(libs.kotlinx.serialization.json)

// Google Play License Services
implementation(libs.oss.license)

Expand Down
11 changes: 7 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools" >

<uses-permission android:name="android.permission.INTERNET" />

Expand All @@ -14,11 +14,14 @@
android:roundIcon="${appRoundIcon}"
android:supportsRtl="true"
android:theme="@style/PasscodesTheme.Default"
tools:targetApi="33">
tools:targetApi="33" >

<activity android:name=".ui.MainActivity" />
<activity android:name=".JetpackPreviewLayoutActivity" />

<activity
android:name=".oldui.MainActivity"
android:exported="true">
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand All @@ -32,7 +35,7 @@
<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
android:exported="false" >
<meta-data
android:name="autoStoreLocales"
android:value="true" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.jeeldobariya.passcodes

import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore
import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme
import kotlinx.coroutines.launch
import kotlin.system.exitProcess

class JetpackPreviewLayoutActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
PasscodesTheme {
val composableScope = rememberCoroutineScope()

JetpackComposeNewUIRoot(
navigateToNewUi = ::navigateToJetpackComposeNavigation,
navigateToOldUi = {
composableScope.launch {
featureFlagsDatastore.updateData {
it.copy(isPreviewLayoutEnabled = false)
}

finishAndRemoveTask()
exitProcess(0)
}
}
)
}
}
}

fun navigateToJetpackComposeNavigation() {
Intent(this@JetpackPreviewLayoutActivity, com.jeeldobariya.passcodes.ui.MainActivity::class.java).also {
startActivity(it)
}
}
}

@Composable
fun JetpackComposeNewUIRoot(navigateToNewUi: () -> Unit, navigateToOldUi: () -> Unit) {
Surface(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier.fillMaxSize(),
tonalElevation = 5.dp
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(24.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Passcodes", fontSize = 40.sp)
Text("You are on New Jetpack UI")

Spacer(Modifier.padding(32.dp))

Button(onClick = navigateToOldUi) {
Text("Back To Old UI", fontSize = 20.sp)
}

OutlinedButton(onClick = navigateToNewUi) {
Text("Continue To New UI", fontSize = 20.sp)
}

Spacer(Modifier.padding(12.dp))

Text("This UI is Under Active Development", fontSize = 12.sp)
Text("So, There might be small issues!!", fontSize = 12.sp)
}
}
}

@Preview(showBackground = true)
@Composable
fun BasePreview() {
PasscodesTheme {
JetpackComposeNewUIRoot(navigateToOldUi = { }, navigateToNewUi = { })
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.jeeldobariya.passcodes.navigation

import androidx.compose.runtime.Composable
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
import androidx.navigation3.runtime.entryProvider
import androidx.navigation3.runtime.rememberNavBackStack
import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
import androidx.navigation3.ui.NavDisplay
import com.jeeldobariya.passcodes.core.navigation.Route
import com.jeeldobariya.passcodes.password_manager.ui.PasswordManagerScreen
import com.jeeldobariya.passcodes.password_manager.ui.SavePasswordScreen
import com.jeeldobariya.passcodes.password_manager.ui.UpdatePasswordScreen
import com.jeeldobariya.passcodes.ui.AboutScreen
import com.jeeldobariya.passcodes.ui.MainScreen
import com.jeeldobariya.passcodes.ui.SettingsScreen

@Composable
fun NavigationRoot() {
val backStack = rememberNavBackStack(Route.Home)

fun navigateTo(route: Route): Unit {
backStack.add(route)
}

NavDisplay(
backStack = backStack,
onBack = {
backStack.removeLastOrNull()
},
entryDecorators = mutableListOf(
rememberSaveableStateHolderNavEntryDecorator(),
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = entryProvider {
entry<Route.Home> {
MainScreen(::navigateTo)
}

entry<Route.Settings> {
SettingsScreen()
}

entry<Route.AboutUs> {
AboutScreen()
}

entry<Route.PasswordManager> {
PasswordManagerScreen(::navigateTo)
}

entry<Route.SavePassword> {
SavePasswordScreen()
}

entry<Route.UpdatePassword> {
UpdatePasswordScreen(it.id)
}
}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.jeeldobariya.passcodes.core.domain.usecases.CheckForUpdateUseCase
import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore
import com.jeeldobariya.passcodes.databinding.ActivityMainBinding
import com.jeeldobariya.passcodes.password_manager.oldui.PasswordManagerActivity
import com.jeeldobariya.passcodes.JetpackPreviewLayoutActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -58,11 +59,9 @@ class MainActivity : AppCompatActivity() {

runBlocking {
if (featureFlagsDatastore.data.first().isPreviewLayoutEnabled) {
val jetpackComposeActivity = Intent(
this@MainActivity,
com.jeeldobariya.passcodes.ui.MainActivity::class.java
)
startActivity(jetpackComposeActivity)
Intent(this@MainActivity, JetpackPreviewLayoutActivity::class.java).also {
startActivity(it)
}
}
}
}
Expand Down
82 changes: 82 additions & 0 deletions app/src/main/kotlin/com/jeeldobariya/passcodes/ui/AboutScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.jeeldobariya.passcodes.ui

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.dp
import com.jeeldobariya.passcodes.R
import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme

@Composable
fun AboutScreen() {
Scaffold { padding ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(padding)
.padding(horizontal = 24.dp, vertical = 64.dp),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(R.drawable.ic_passcodes),
contentDescription = "Passcodes Icon",
modifier = Modifier
.size(100.dp)
.padding(10.dp)
)

Text(
text = stringResource(R.string.textview_aboutus_headline),
style = MaterialTheme.typography.titleLarge
)

Spacer(modifier = Modifier.padding(vertical = 12.dp))

Text(
text = stringResource(R.string.textview_app_description),
style = MaterialTheme.typography.bodyLarge
)

Spacer(modifier = Modifier.padding(vertical = 16.dp))

Text(
text = stringResource(R.string.textview_app_warning),
style = MaterialTheme.typography.labelSmall,
color = Color.Red
)

Spacer(modifier = Modifier.padding(16.dp))
}
}
}


@Preview(showBackground = true)
@PreviewLightDark
@Composable
fun AboutScreenPreview() {
PasscodesTheme {
AboutScreen()
}
}
Loading
Loading