Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
abf5de1
chore(deps): update gradle 8.14.3
JeelDobariya38 Jul 28, 2025
99aba7f
Merge branch 'main' into feat-package-migration-jeel-dev
JeelDobariya38 Jul 28, 2025
c12b4e9
Reapply "Feat: Migrate from `com.passwordmanager` to `com.jeeldobariy…
JeelDobariya38 Jul 28, 2025
d43ca81
chore(deps): update to Grade DSL and update dependency to latest
JeelDobariya38 Jul 28, 2025
ada91b0
chore(deps): compile app against api 36.
JeelDobariya38 Jul 28, 2025
c3b4e24
docs: update with latest info
JeelDobariya38 Jul 28, 2025
4583788
chore: make sure to print all warnings in Gradle
JeelDobariya38 Jul 28, 2025
cf9767b
refactor: permissions util class
JeelDobariya38 Jul 28, 2025
b2cd553
feat: migrate to room
JeelDobariya38 Jul 28, 2025
dae2bc7
refactor: made a binding class member
JeelDobariya38 Jul 28, 2025
1fbcc9b
refactor: migrate the rest of codebase
JeelDobariya38 Jul 28, 2025
d5617ef
fix: database operation on main thread
JeelDobariya38 Jul 29, 2025
f5c7f7f
test: add android test for room database
JeelDobariya38 Jul 29, 2025
a791f12
refactor: add a way to generate schema
JeelDobariya38 Jul 29, 2025
fa5aea0
docs: update changelog.md
JeelDobariya38 Jul 29, 2025
0bcd0df
docs: Update security_guide.md
JeelDobariya38 Jul 29, 2025
6a051af
docs: Update release-workflow.md
JeelDobariya38 Jul 29, 2025
c40847e
docs: Update release-workflow.md
JeelDobariya38 Jul 29, 2025
306d6ad
docs: Update installing.md and made more casual readable and fun to read
JeelDobariya38 Jul 29, 2025
14f0323
docs: update installing.md
JeelDobariya38 Jul 29, 2025
2200230
docs: update database-design-guide.md
JeelDobariya38 Jul 29, 2025
3e54c67
docs: update database-design-guide.md with latest schema changes
JeelDobariya38 Jul 29, 2025
b8471ce
docs: update building.md
JeelDobariya38 Jul 29, 2025
dacc3b4
chore: deprecated the installondevice.bat.
JeelDobariya38 Jul 29, 2025
5553e7e
refactor: project to have passcodes as name instead of password manager
JeelDobariya38 Jul 29, 2025
fc09838
docs: update README.md add new optimistic feature
JeelDobariya38 Jul 29, 2025
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
50 changes: 42 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,61 @@
# Password Manager

A android app that take down the headace of remember passwords. It is open source solutions that help you in keep your passwords safe and secure in your own local storage without ever need to push you password to cloud.
A android app that take down the headace of remember passwords. It is open source solutions that help you in keep your passwords safe and secure in your own local storage without ever need to push them to cloud.

> [!WARNING]
> It is just a open source project. An is under active development please, consider using it for fun and not for real password managment. (untill, we offically release a stable release)
> It is just a open source project. An is current under active development.
> Please, consider using it for fun and not for real password managment. (untill, we offically release a stable release)

## Compatibility

**Compile Sdk**: `Android 16 (API level 36)`

```
Android 8+ (Minimum) [API level 26+]
Android 14 [API level 34] (we support offically)

Note: high version can still run but are not guaranteed offically.
```

## Features

- [X] Intuitive UI.
- [ ] Update Checkers.
- [X] Password Management. (current priority)
- [ ] Other Info Management.
- [ ] Update Checkers & Manager.
- [X] Password Management. (Current Priority)
- [ ] Secure File. (Least Priority, Because it include permission. Which, I am as developer not familar with 😂)
- Could be Image. (JPG. PNG ....)
- Could be Vidoe.
- Could any Binary File. (more like won't be a text file)
- [ ] Other Secret Info Management.
- Could be note. (txt file)
- Could be any info that can encode as key & value.
```json
{
"key": "SECRET API KEY",
"content": "qwerty-let-say"
"createdat": "...",
"updatedat": "..."
}
```
- [ ] NON Secret Info Store
- [ ] Encryption and Decryption.
- [ ] Backup Manager.
- [ ] Import/Export Passwords.
- [ ] Extensivity with custom database.
- [ ] Multiple Language Translation.
- [ ] Theme & Customization.
- [ ] Key Manager.
- [ ] Multi Platform Support. (KMP)

## Installation Steps

1. Go to our [github repository release page](https://github.com/JeelDobariya38/password-manager/releases/latest).

2. Download the apk for your phone. If Don't know the architecture of phone then download apk file that has universal in its name.

3. Install the apk and you are ready to use the app.

it was short and sweet description, for more detailed description vist the file [docs/installing.md](docs/installing.md)
It was most shortest and sweetest description (I have ever crafted), For more detailed description, Vist the file [docs/installing.md](docs/installing.md)

## Building The App

Expand All @@ -33,7 +67,7 @@ it was short and sweet description, for more detailed description vist the file

4. For code documention and support docs, check the `docs/` folder in our repository.

it was short and sweet description, for more detailed description vist the file [docs/building.md](docs/building.md)
It was general, intuitive, short and sweet description, For more detailed description, Vist the file [docs/building.md](docs/building.md).

## Support Docs

Expand All @@ -45,4 +79,4 @@ By, contribuating to project you accept the [CONTRIBUTING.md](CONTRIBUTING.md) &

## Licence

Password Manager Project is licence under [MIT](LICENSE.txt) Licence. Downloading the app would mean you are ok with the license.
Passcodes Project is licence under [MIT](LICENSE.txt) Licence. Downloading the app would mean, you are ok and have accepted the license.
109 changes: 0 additions & 109 deletions app/build.gradle

This file was deleted.

171 changes: 171 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
import java.io.FileInputStream
import java.util.Properties
import org.gradle.api.GradleException
import com.android.build.api.dsl.ApplicationExtension

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
// If you use Kotlin Parcelize, uncomment the next line:
// id("kotlin-parcelize")
}

android {
(this as ApplicationExtension).apply {
compileSdk = 36
namespace = "com.jeeldobariya.passcodes"

defaultConfig {
applicationId = "com.jeeldobariya.passcodes"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "0.1.0-Alpha"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
}

signingConfigs {
create("release") {
val keystorePropertiesFile = rootProject.file("keystore.properties")
if (keystorePropertiesFile.exists()) {
val keystoreProperties = Properties()
keystoreProperties.load(FileInputStream(keystorePropertiesFile))

keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
storeFile = file(keystoreProperties.getProperty("storeFile"))
storePassword = keystoreProperties.getProperty("storePassword")
} else {
logger.warn("WARNING: keystore.properties not found for release signing config.")
// throw GradleException("keystore.properties not found!")
}
}
}

splits {
abi {
isEnable = true
reset()
include("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
isUniversalApk = true
}
}

lint {
// baseline = rootProject.file("lint-baseline.xml") // If you use a baseline
lintConfig = rootProject.file("lint.xml")
}

buildTypes {
getByName("release") {
if (rootProject.file("keystore.properties").exists()) {
signingConfig = signingConfigs.getByName("release")
} else {
logger.warn("WARNING: Release build will not be signed as keystore.properties is missing.")
// throw GradleException("Can't Sign Release Build")
}

isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")

// Use manifestPlaceholders.put() for key-value pairs
manifestPlaceholders.put("appIcon", "@mipmap/ic_launcher")
manifestPlaceholders.put("appLabel", "@string/app_name")
}

getByName("debug") {
applicationIdSuffix = ".dev"
versionNameSuffix = "-Dev"
isMinifyEnabled = false

manifestPlaceholders.put("appIcon", "@mipmap/dev_ic_launcher")
manifestPlaceholders.put("appLabel", "Passcodes Dev")
}

create("staging") {
applicationIdSuffix = ".staging"
versionNameSuffix = "-Staging"

isMinifyEnabled = true
isShrinkResources = true
isDebuggable = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")

manifestPlaceholders.put("appIcon", "@mipmap/dev_ic_launcher")
manifestPlaceholders.put("appLabel", "Passcodes Staging")
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

kotlinOptions {
jvmTarget = "11"
}

buildFeatures {
viewBinding = true
}
}
}

dependencies {
val kotlinVersion = "1.9.0"
val materialVersion = "1.12.0"
val appCompatVersion = "1.7.0"
val roomVersion = "2.7.2"
// val jsonVersion = "20250517"
val junitVersion = "4.13.2"
val truthVersion = "1.4.4"
val androidxTestExtJunitVersion = "1.2.1"
val espressoCoreVersion = "3.6.1"

val coroutinesVersion = "1.10.2"
val lifecycleVersion = "2.9.2"

implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")

implementation("com.google.android.material:material:$materialVersion")
implementation("androidx.appcompat:appcompat:$appCompatVersion")
// viewbinding is often not explicitly needed here if buildFeatures.viewBinding = true
// implementation("androidx.databinding:viewbinding:7.4.1")

implementation("androidx.room:room-ktx:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")

// Kotlin Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")

// Lifecycle components for lifecycleScope
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")
// implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") // Good for future ViewModels

// // External JSON library
// implementation("org.json:json:$jsonVersion") // Standard org.json library

// Testing dependencies
testImplementation("junit:junit:$junitVersion")
testImplementation("com.google.truth:truth:$truthVersion")

// Room testing
androidTestImplementation("androidx.room:room-testing:$roomVersion") // Essential for Room testing
androidTestImplementation("androidx.test.ext:junit:$androidxTestExtJunitVersion")
androidTestImplementation("androidx.test.espresso:espresso-core:$espressoCoreVersion")

// Coroutine test utilities (for runTest)
androidTestImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion")

// Assertion library (Google Truth)
androidTestImplementation("com.google.truth:truth:$truthVersion")
}
Loading