Skip to content
This repository was archived by the owner on Jun 6, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
interval: monthly
time: "09:00"
timezone: "Asia/Ho_Chi_Minh"
- package-ecosystem: gradle
directory: "/"
reviewers:
- "hide-your-code"
schedule:
interval: daily
interval: monthly
time: "09:00"
timezone: "Asia/Ho_Chi_Minh"
open-pull-requests-limit: 99
6 changes: 6 additions & 0 deletions .github/workflows/check_build_lint_unittest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ jobs:
MAPS_API_KEY: ${{ secrets.MAPS_API_KEY }}
run: printf "API_KEY=\"$API_KEY\"\nBASE_URL=\"$BASE_URL\"\nMAPS_API_KEY=\"$MAPS_API_KEY\"" > ./local.properties

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Caching gradle
uses: actions/cache@v3
with:
Expand Down Expand Up @@ -70,6 +73,9 @@ jobs:
MAPS_API_KEY: ${{ secrets.MAPS_API_KEY }}
run: printf "API_KEY=\"$API_KEY\"\nBASE_URL=\"$BASE_URL\"\nMAPS_API_KEY=\"$MAPS_API_KEY\"" > ./local.properties

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Caching gradle
uses: actions/cache@v3
with:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/dependabot_ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ jobs:
MAPS_API_KEY: ${{ secrets.MAPS_API_KEY }}
run: printf "API_KEY=\"$API_KEY\"\nBASE_URL=\"$BASE_URL\"\nMAPS_API_KEY=\"$MAPS_API_KEY\"" > ./local.properties

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Caching gradle
uses: actions/cache@v3
with:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/deploy_to_internal_testing.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ jobs:
MAPS_API_KEY: ${{ secrets.MAPS_API_KEY }}
run: printf "API_KEY=\"$API_KEY\"\nBASE_URL=\"$BASE_URL\"\nMAPS_API_KEY=\"$MAPS_API_KEY\"" > ./local.properties

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Caching gradle
uses: actions/cache@v3
with:
Expand Down
4 changes: 2 additions & 2 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ This app is inspired by:

I want to say thanks for those people to help me to make this app.

## :construction: In progress

I'm trying to implement **Version Catalog** for new Gradle's version but the **Dependabot** doesn't support it ([seeing this](https://github.com/dependabot/dependabot-core/pull/6249)).

You can check out from `v1.0.4/version_catalog` to see what I done.

## :tada: Ready on Google Play

Now, you can download it on Google Play Store. Install it and give me your feedback!
Expand Down
195 changes: 106 additions & 89 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,26 @@ import java.util.Properties
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
kotlin("kapt")
// Implemented later because we had an exception when we were trying to run tests.
// id("com.google.devtools.ksp")
id("dagger.hilt.android.plugin")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
id("org.jetbrains.kotlinx.kover") version "0.6.1"
id("io.gitlab.arturbosch.detekt") version "1.22.0"
id("org.jetbrains.kotlinx.kover") version "0.7.0-Beta"
id("io.gitlab.arturbosch.detekt") version "1.23.0-RC3"
id("com.google.firebase.crashlytics")
id("com.google.gms.google-services")
id("org.jetbrains.kotlin.kapt")
}

val properties = Properties().apply {
load(project.rootProject.file("local.properties").inputStream())
}

project.afterEvaluate {
tasks.koverHtmlReport {
group = "kover"
description = "Generated test coverage"

dependsOn("testDebugUnitTest")

isEnabled = true
}

detekt {
toolVersion = "1.22.0"
toolVersion = "1.23.0-RC3"
basePath = "$rootDir"
config = files("$rootDir/config/detekt/detekt_config.yml")
config.setFrom(files("$rootDir/config/detekt/detekt_config.yml"))
buildUponDefaultConfig = true
}

Expand All @@ -44,38 +39,47 @@ project.afterEvaluate {
}

kover {
htmlReport {
reportDir.set(layout.buildDirectory.dir("kover_report/html_result"))
filters {
classes {
includes += listOf("com.minhdtm.example.weapose.*")

excludes += listOf(
"*Screen*",
"*_Factory*",
"*_HiltModules*",
"*di*",
"*_Impl*",
"*BuildConfig*",
"*Activity*",
"*App*",
"*Drawer*",
"*Graph*",
"*.theme*",
)
useKoverTool()
}

koverReport {
androidReports("debug") {
html {
setReportDir(layout.buildDirectory.dir("kover_report/html_result"))

filters {
excludes {
classes(
"*Screen*",
"*_Factory*",
"*_HiltModules*",
"*di*",
"*_Impl*",
"*BuildConfig*",
"*Activity*",
"*App*",
"*Drawer*",
"*Graph*",
"*.theme*",
)
}

includes {
classes("com.minhdtm.example.weapose.*")
}
}
}
}
}

android {
namespace = "com.minhdtm.example.weapose"
compileSdk = 33
compileSdk = 34

defaultConfig {
applicationId = "com.minhdtm.example.weapose"
minSdk = 21
targetSdk = 33
targetSdk = 34
versionCode = 5
versionName = "1.0.3"

Expand All @@ -93,7 +97,14 @@ android {
buildTypes {
getByName("release") {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro", "retrofit2.pro", "gson.pro", "okhttp3.pro")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
"retrofit2.pro",
"gson.pro",
"okhttp3.pro",
"firebase-crashlytics.pro",
)
signingConfig = signingConfigs.getByName("debug")
}
}
Expand Down Expand Up @@ -121,7 +132,7 @@ android {
}

composeOptions {
kotlinCompilerExtensionVersion = "1.4.0"
kotlinCompilerExtensionVersion = "1.4.6"
}

packaging {
Expand All @@ -132,97 +143,103 @@ android {
}

dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.activity:activity-compose:1.6.1")
// Core
implementation(libs.androidx.core)

// Activity
implementation(libs.androidx.activity.compose)

// Compose ui
implementation("androidx.compose.ui:ui:1.4.0-alpha05")
implementation("androidx.compose.ui:ui-tooling-preview:1.4.0-alpha05")
implementation(libs.androidx.compose.ui.ui)
implementation(libs.androidx.compose.ui.ui.tooling.preview)

// Material
implementation("androidx.compose.material3:material3:1.1.0-alpha05")
implementation("androidx.compose.material:material:1.4.0-alpha05")
implementation(libs.androidx.compose.material.get2())
implementation(libs.androidx.compose.material.get3())

// Work manager
implementation("androidx.work:work-runtime-ktx:2.8.0-rc01")
implementation(libs.androidx.work)

// Google accompanist
implementation("com.google.accompanist:accompanist-navigation-animation:0.28.0")
implementation("com.google.accompanist:accompanist-systemuicontroller:0.28.0")
implementation("com.google.accompanist:accompanist-swiperefresh:0.28.0")
implementation("com.google.accompanist:accompanist-permissions:0.27.0")
implementation("com.google.accompanist:accompanist-flowlayout:0.28.0")
implementation(libs.bundles.google.accompanist)

// Google play services
implementation("com.google.android.gms:play-services-location:21.0.1")
implementation("com.google.android.gms:play-services-maps:18.1.0")
implementation("com.google.android.libraries.places:places:3.0.0")
implementation("com.google.maps.android:maps-compose:2.11.2")
implementation(libs.google.play.services.location)
implementation(libs.google.play.services.maps)
implementation(libs.google.places)
implementation(libs.google.maps)

// Firebase platform
implementation(platform(libs.firebase.bom))
implementation(libs.bundles.firebase)

// Coroutine
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)

// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation(libs.bundles.retrofit2)

// Okhttp
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
implementation(libs.okhttp3)
implementation(libs.okhttp3.logging.interceptor)

// Room
implementation("androidx.room:room-runtime:2.5.0")
implementation("androidx.room:room-ktx:2.5.0")
annotationProcessor("androidx.room:room-compiler:2.5.0")
kapt("androidx.room:room-compiler:2.5.0")
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
annotationProcessor(libs.androidx.room.compiler)
kapt(libs.androidx.room.compiler)

// Hilt
implementation("androidx.hilt:hilt-navigation-compose:1.0.0")
implementation("androidx.hilt:hilt-work:1.0.0")
implementation("com.google.dagger:hilt-android:2.45")
kapt("com.google.dagger:hilt-android-compiler:2.45")
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.androidx.hilt.work)
implementation(libs.google.dagger.hilt.android)
kapt(libs.google.dagger.hilt.android.compiler)

// Navigation
implementation("androidx.navigation:navigation-compose:2.5.3")
implementation(libs.androidx.navigation)

// Lifecycle
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.0-alpha05")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.0-alpha05")
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.runtime.ktx)

// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0-alpha05")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0-alpha05")
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.lifecycle.viewmodel.ktx)

// LiveData
implementation("androidx.compose.runtime:runtime-livedata:1.4.0-alpha04")
implementation(libs.androidx.livedata)

// Gson
implementation("com.google.code.gson:gson:2.10.1")
implementation(libs.google.gson)

// Timber
implementation("com.jakewharton.timber:timber:5.0.1")
implementation(libs.timber)

// DataStore
implementation("androidx.datastore:datastore-preferences:1.0.0")

// Kotlin reflect
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.10")
implementation(libs.androidx.datastore.preferences)

// Lottie
implementation("com.airbnb.android:lottie-compose:6.0.0")
implementation(libs.lottie)

// Junit
testImplementation(libs.junit.get4())

// Kotlin reflect
testImplementation(libs.kotlin.reflect)

testImplementation("junit:junit:4.13.2")
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4")
// Coroutines test
testImplementation(libs.kotlinx.coroutines.test)

// MockK
testImplementation("io.mockk:mockk:1.13.4")
testImplementation("io.mockk:mockk-agent-jvm:1.13.4")
testImplementation(libs.mockk)
testImplementation(libs.mockk.agent.jvm)

androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.3.3")
androidTestImplementation(libs.androidx.test.junit)
androidTestImplementation(libs.androidx.test.espresso)
androidTestImplementation(libs.androidx.compose.ui.ui.test.junit)

debugImplementation("androidx.compose.ui:ui-tooling:1.4.0-alpha05")
debugImplementation("androidx.compose.ui:ui-test-manifest:1.4.0-alpha05")
// UI Debugging
debugImplementation(libs.androidx.compose.ui.ui.tooling)
debugImplementation(libs.androidx.compose.ui.ui.test.manifest)
}
Loading