Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f8ae987
Chore chore/bump-dependencies: Update room & dagger version, ensure t…
HellBus1 Sep 19, 2025
f429c35
Chore chore/bump-dependencies: move all version to ext variables
HellBus1 Sep 19, 2025
78bf94c
Chore chore/bump-dependencies: update hilt navigation compose & lifec…
HellBus1 Sep 19, 2025
43a09fb
Chore chore/bump-dependencies: update activity compose version
HellBus1 Sep 19, 2025
c543839
Merge pull request #65 from HellBus1/chore/bump-dependencies
HellBus1 Sep 19, 2025
22dbc69
Feat bugfix/theme-and-ui: Refactor scheme & color changer feature to …
HellBus1 Sep 20, 2025
9796b34
Feat bugfix/theme-and-ui: Change selected text color, remove animatin…
HellBus1 Sep 20, 2025
b518007
Feat bugfix/theme-and-ui: Make notes page could change orientation
HellBus1 Sep 20, 2025
5292217
Feat bugfix/theme-and-ui: Remove all lock orientation, make notes edi…
HellBus1 Sep 20, 2025
27d5705
Merge pull request #66 from HellBus1/bugfix/theme-and-ui
HellBus1 Sep 20, 2025
57d6a3e
Chore staging: Upgrade version to 1.1.1
HellBus1 Oct 4, 2025
e4894a9
Feat bugfix-1.2.0: Remove request autofocus when editing notes
HellBus1 Feb 1, 2026
62e0b39
Feat bugfix-1.2.0: Remove unused variables
HellBus1 Feb 1, 2026
dc64296
Feat bugfix-1.2.0: Add key in the item list
HellBus1 Feb 1, 2026
acf44f5
Feat bugfix-1.2.0: Add debounce when searching notes
HellBus1 Feb 1, 2026
3e262a5
Feat bugfix-1.2.0: Add clean up old backups so it only keeps 10 newes…
HellBus1 Feb 1, 2026
726ea86
Feat bugfix-1.2.0: Change backup file name in the list
HellBus1 Feb 1, 2026
ea92b30
Feat bugfix-1.2.0: Remove redundant cloud icon
HellBus1 Feb 1, 2026
8693980
Merge pull request #67 from HellBus1/bugfix-1.2.0
HellBus1 Feb 1, 2026
f0db1de
Feat app-size-enhancement-1.2.: Remove extended material icon & use m…
HellBus1 Feb 2, 2026
969398f
Feat app-size-enhancement-1.2.: Adjusting pro-guard rule to keep nece…
HellBus1 Feb 2, 2026
9d7d1c8
Feat app-size-enhancement-1.2.: Change version code & name
HellBus1 Feb 5, 2026
41eca02
Feat app-size-enhancement-1.2.: Add manual update check when automati…
HellBus1 Feb 6, 2026
1705543
Feat app-size-enhancement-1.2.: Remove unused imports
HellBus1 Feb 6, 2026
f0976ed
Feat app-size-enhancement-1.2.: Remove empty conditionals & change se…
HellBus1 Feb 6, 2026
2a46cb8
Merge pull request #68 from HellBus1/app-size-enhancement-1.2.0
HellBus1 Feb 6, 2026
64b726d
Feat bugfix-1.2.0: Fix restore note backup always replace & create ne…
HellBus1 Feb 6, 2026
96c5d1e
Merge pull request #69 from HellBus1/bugfix-1.2.0
HellBus1 Feb 6, 2026
4c2bd04
Feat note-widget-1.2.0: Adding fully functional widgets that show lis…
HellBus1 Feb 7, 2026
38e5558
Merge pull request #70 from HellBus1/note-widget-1.2.0
HellBus1 Feb 8, 2026
b7c7736
Merge pull request #71 from HellBus1/1.2.0
HellBus1 Feb 8, 2026
9cd4658
Chore staging: Increase version code
HellBus1 Feb 8, 2026
c784d9b
Feat staging: Adjust unit test & gradle to prevent read google-servic…
HellBus1 Feb 8, 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
150 changes: 84 additions & 66 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,27 +1,34 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.google.dagger.hilt.android'
id 'kotlin-kapt'
id 'kotlin-parcelize'
id 'org.jetbrains.kotlin.plugin.serialization' version '2.2.10'
id 'org.jetbrains.kotlin.plugin.compose' version '2.2.10'
}

// disabled for internal purpose (if you want to enable, you must create firebase project first)
// id 'com.google.gms.google-services'
// id 'com.google.firebase.crashlytics'
// id 'com.google.firebase.firebase-perf'
// Apply Google Services and Crashlytics only if google-services.json exists
if (file('google-services.json').exists()) {
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
println 'Google Services and Crashlytics plugins applied'
} else {
println 'google-services.json not found. Skipping Google Services and Crashlytics plugins'
}

android {
namespace 'com.digiventure.ventnote'
compileSdk 36
compileSdk = 36

defaultConfig {
applicationId "com.digiventure.ventnote"
minSdk 23
targetSdk 36
versionCode 42
versionName "1.1.0"
targetSdk = 36
versionCode 46
versionName "1.2.0"

testInstrumentationRunner "com.digiventure.utils.CustomTestRunner"
vectorDrawables {
Expand All @@ -38,23 +45,31 @@ android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
debuggable false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "boolean", "ENABLE_CRASHLYTICS", "true"
}
debug {
minifyEnabled false
shrinkResources false
debuggable true
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "boolean", "ENABLE_CRASHLYTICS", "false"
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
coreLibraryDesugaringEnabled true
}

kotlinOptions {
jvmTarget = '17'
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

buildFeatures {
Expand All @@ -66,124 +81,127 @@ android {
kotlinCompilerExtensionVersion '1.5.15'
}

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

packaging {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
excludes += 'META-INF/*'
excludes.add('/META-INF/{AL2.0,LGPL2.1}')
excludes.add('META-INF/DEPENDENCIES')
excludes.add('META-INF/LICENSE')
excludes.add('META-INF/LICENSE.txt')
excludes.add('META-INF/license.txt')
excludes.add('META-INF/NOTICE')
excludes.add('META-INF/NOTICE.txt')
excludes.add('META-INF/notice.txt')
excludes.add('META-INF/ASL2.0')
excludes.add('META-INF/*.kotlin_module')
excludes.add('META-INF/services/org.jetbrains.kotlin.*')
}
}

lint {
abortOnError false
}

sourceSets {
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
}


dependencies {
implementation "androidx.core:core-ktx:1.17.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.9.2"
implementation "androidx.core:core-ktx:$core_ktx_version"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_ktx_version"

implementation "androidx.activity:activity-compose:1.10.1"
implementation "androidx.activity:activity-compose:$activity_compose_version"

// Jetpack Compose
implementation "androidx.compose.runtime:runtime-livedata:1.9.0"
implementation "androidx.compose.ui:ui:1.9.0"
implementation "androidx.compose.ui:ui-tooling-preview:1.9.0"
implementation "androidx.compose.runtime:runtime-livedata:$jetpack_compose_version"
implementation "androidx.compose.ui:ui:$jetpack_compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$jetpack_compose_version"

implementation "androidx.compose.material3:material3:1.3.2"
implementation "androidx.compose.material3:material3:$material3_version"

// Lifecycle Livedata
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.9.2"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_ktx_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_ktx_version"

implementation "androidx.compose.compiler:compiler:1.5.15"
implementation 'androidx.test.ext:junit-ktx:1.3.0'
implementation "androidx.compose.compiler:compiler:$compose_compiler_version"

// Room
def room_version = "2.7.0"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"
androidTestImplementation "androidx.room:room-testing:$room_version"

// Datastore
implementation("androidx.datastore:datastore-preferences:1.1.7")
implementation "androidx.datastore:datastore-preferences:$datastore_preference_version"

// Compose Navigation
implementation "androidx.navigation:navigation-compose:2.9.3"
implementation "androidx.navigation:navigation-compose:$navigation_compose_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0"

// Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2"

// Unit test
testImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.test.ext:junit:1.3.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"

// Hilt
def dagger_version = "2.56.2"
implementation "com.google.dagger:hilt-android:$dagger_version"
kapt "com.google.dagger:hilt-android-compiler:$dagger_version"
implementation "androidx.hilt:hilt-navigation-compose:1.2.0"

// Material Icon Extension
implementation "androidx.compose.material:material-icons-extended:1.7.8"
implementation "androidx.hilt:hilt-navigation-compose:$hilt_navigation_compose_version"

// So, make sure you also include that repository in your project's build.gradle file.
implementation("com.google.android.play:app-update:2.1.0")
implementation "com.google.android.play:app-update:$play_app_update_version"
// For Kotlin users also import the Kotlin extensions library for Play In-App Update:
implementation("com.google.android.play:app-update-ktx:2.1.0")
implementation "com.google.android.play:app-update-ktx:$play_app_update_version"

// Google Play API
implementation "com.google.android.gms:play-services-auth:21.4.0"
implementation "com.google.android.gms:play-services-auth:$play_services_auth_version"

// Accompanist - Status Bar
implementation "com.google.accompanist:accompanist-systemuicontroller:0.36.0"
implementation "com.google.accompanist:accompanist-systemuicontroller:$systemuicontroller_version"

// Unit test
testImplementation "junit:junit:$junit_version"

// Instrumented test
/// Espresso (for ui interaction purpose)
androidTestImplementation "androidx.test:runner:1.7.0"
androidTestImplementation "androidx.test:rules:1.7.0"
androidTestImplementation "androidx.test.espresso:espresso-intents:3.7.0"
androidTestImplementation "androidx.test.espresso:espresso-core:3.7.0"
androidTestImplementation "androidx.test:runner:$test_version"
androidTestImplementation "androidx.test:rules:$test_version"
androidTestImplementation "androidx.test.espresso:espresso-intents:$test_espresso_version"
androidTestImplementation "androidx.test.espresso:espresso-core:$test_espresso_version"

androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.9.0"
debugImplementation "androidx.compose.ui:ui-tooling:1.9.0"
debugImplementation "androidx.compose.ui:ui-test-manifest:1.9.0"
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_ui_test_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_test_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_ui_test_version"

/// Hilt test (for handling service locator when test)
androidTestImplementation "com.google.dagger:hilt-android-testing:$dagger_version"
kaptAndroidTest "com.google.dagger:hilt-android-compiler:$dagger_version"

// For mocking purposes & make it visible in instrumented test
testImplementation "org.mockito.kotlin:mockito-kotlin:6.0.0"
testImplementation "org.mockito:mockito-inline:5.2.0"
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockito_version"
testImplementation "org.mockito:mockito-inline:$mockito_inline_version"

androidTestImplementation "androidx.test.ext:junit-ktx:1.3.0"
androidTestImplementation "androidx.test.ext:junit-ktx:$junit_ktx_version"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0"

testImplementation "androidx.arch.core:core-testing:2.2.0"
testImplementation "androidx.arch.core:core-testing:$core_testing_version"

// For unit testing coroutines
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_test_version"

// Import the Firebase BoM
implementation platform("com.google.firebase:firebase-bom:34.1.0")
implementation platform("com.google.firebase:firebase-bom:$firebase_bom_version")
// When using the BoM, you don't specify versions in Firebase library dependencies
// Add the dependency for the Firebase SDK for Google Analytics
implementation "com.google.firebase:firebase-analytics"
implementation "com.google.firebase:firebase-crashlytics:20.0.0"
implementation "com.google.firebase:firebase-perf-ktx:21.0.5"

//Google sign in
implementation "com.google.android.gms:play-services-auth:21.4.0"
implementation "com.google.firebase:firebase-crashlytics"

//Google Drive API
implementation "com.google.http-client:google-http-client-gson:2.0.0"
implementation "com.google.apis:google-api-services-drive:v3-rev136-1.25.0"
implementation "com.google.api-client:google-api-client-android:2.8.1"
implementation "com.google.http-client:google-http-client-gson:$http_client_gson_version"
implementation "com.google.apis:google-api-services-drive:$google_drive_service_version"
implementation "com.google.api-client:google-api-client-android:$google_api_client_version"

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}

kapt {
Expand Down
41 changes: 9 additions & 32 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -54,30 +54,13 @@
void traceEventEnd();
}

# Google Play Services Auth
-keep class com.google.android.gms.auth.** { *; }
-keep class com.google.android.gms.common.** { *; }
-keep class com.google.api.client.** { *; }
-keep class com.google.oauth.client.** { *; }
-keep class com.google.http.client.** { *; }
-keep class com.google.api.client.json.** { *; }
-keep class com.google.api.client.http.** { *; }
-keep class com.google.api.client.googleapis.** { *; }

# Google Drive API
-keep class com.google.api.services.drive.** { *; }
-keep class com.google.api.client.googleapis.services.** { *; }

# Google API Client for Android
-keep class com.google.api.client.googleapis.extensions.android.** { *; }
-keep class com.google.api.client.extensions.android.** { *; }

# Keep all classes related to Google Auth API
-keep class com.google.api.services.** { *; }
-keep class com.google.auth.** { *; }
-keep class com.google.api.client.auth.** { *; }
-keep class com.google.http.client.auth.** { *; }
-keep class com.google.oauth.client.auth.** { *; }
# Google API Client & Auth (Targeted)
-keep class * extends com.google.api.client.json.GenericJson { *; }
-keep class com.google.api.client.util.** { *; }

# Google Drive API Models
-keep class com.google.api.services.drive.model.** { *; }
-keep class com.google.api.services.drive.Drive$Files$** { *; }

-keep class com.google.android.gms.auth.api.signin.GoogleSignInClient {
*;
Expand All @@ -98,8 +81,8 @@
@com.google.api.client.util.Value *;
}

# Room database
-keep class androidx.room.** { *; }
# Room database (Targeted)
# -keep class androidx.room.** { *; } # Broad rule removed
-keep class * extends androidx.room.RoomDatabase {
<init>(...);
}
Expand All @@ -125,13 +108,7 @@
# If NoteModel has inner classes, keep them too
-keep class com.digiventure.ventnote.data.persistence.NoteModel$* { *; }

# Keep the GoogleDriveService class and all its methods
-keep class com.digiventure.ventnote.data.google_drive.GoogleDriveService { *; }

# Prevent obfuscation of the DatabaseProxy class as it is used within GoogleDriveService
-keep class com.digiventure.ventnote.module.proxy.DatabaseProxy { *; }

-keep class com.digiventure.ventnote.feature.backup.viewmodel.AuthVM

# Keep any classes that are used in Gson serialization
-keep class * implements com.google.gson.TypeAdapterFactory
Expand Down
Loading