From 7023e57abc41a0ed312d9b8dc3fa4687904cffd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D=C6=B0=C6=A1ng=20Th=C3=A1i=20Minh?=
<73929358+hide-your-code@users.noreply.github.com>
Date: Fri, 7 Jul 2023 02:39:48 +0700
Subject: [PATCH] [v1.0.4] Update some versions for new Android Studio
Preview's version (#126)
---
.github/dependabot.yml | 4 +-
.../workflows/check_build_lint_unittest.yaml | 6 +
.github/workflows/dependabot_ci.yaml | 3 +
.../workflows/deploy_to_internal_testing.yaml | 3 +
.gitignore | 2 +
.idea/deploymentTargetDropDown.xml | 4 +-
.idea/kotlinc.xml | 2 +-
.idea/misc.xml | 3 +-
README.md | 6 +
app/build.gradle.kts | 195 +++++++++--------
app/firebase-crashlytics.pro | 3 +
.../presentation/component/InfinityText.kt | 6 +-
.../component/NavigationDrawerLabel.kt | 1 -
.../presentation/component/WeatherScaffold.kt | 1 -
.../weapose/presentation/ui/WeatherApp.kt | 3 +-
.../presentation/ui/WeatherAppState.kt | 61 +++---
.../ui/home/CurrentWeatherScreen.kt | 2 +-
.../ui/infomation/InformationScreen.kt | 1 +
.../ui/search/map/SearchByMapScreen.kt | 10 +-
.../ui/search/text/SearchByTextScreen.kt | 5 +-
.../SevenDaysWeatherScreen.kt | 6 +-
.../presentation/ui/splash/SplashScreen.kt | 1 -
build.gradle.kts | 15 +-
gradle/libs.versions.toml | 199 ++++++++++++++++++
gradle/wrapper/gradle-wrapper.properties | 2 +-
settings.gradle.kts | 1 +
26 files changed, 392 insertions(+), 153 deletions(-)
create mode 100644 app/firebase-crashlytics.pro
create mode 100644 gradle/libs.versions.toml
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index fd6b7a7..6451970 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -3,7 +3,7 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
- interval: daily
+ interval: monthly
time: "09:00"
timezone: "Asia/Ho_Chi_Minh"
- package-ecosystem: gradle
@@ -11,7 +11,7 @@ updates:
reviewers:
- "hide-your-code"
schedule:
- interval: daily
+ interval: monthly
time: "09:00"
timezone: "Asia/Ho_Chi_Minh"
open-pull-requests-limit: 99
diff --git a/.github/workflows/check_build_lint_unittest.yaml b/.github/workflows/check_build_lint_unittest.yaml
index 67345e3..1cf5a79 100644
--- a/.github/workflows/check_build_lint_unittest.yaml
+++ b/.github/workflows/check_build_lint_unittest.yaml
@@ -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:
@@ -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:
diff --git a/.github/workflows/dependabot_ci.yaml b/.github/workflows/dependabot_ci.yaml
index 1bbe25e..2298ad3 100644
--- a/.github/workflows/dependabot_ci.yaml
+++ b/.github/workflows/dependabot_ci.yaml
@@ -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:
diff --git a/.github/workflows/deploy_to_internal_testing.yaml b/.github/workflows/deploy_to_internal_testing.yaml
index 9bc54d4..84b136b 100644
--- a/.github/workflows/deploy_to_internal_testing.yaml
+++ b/.github/workflows/deploy_to_internal_testing.yaml
@@ -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:
diff --git a/.gitignore b/.gitignore
index f5e396a..cf4cbcf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@
.cxx
local.properties
/reports
+
+/app/google-services.json
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 5123a39..3f2a854 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -7,11 +7,11 @@
-
+
-
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 2b8a50f..69e8615 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 60ffdae..a2061bf 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
-
+
diff --git a/README.md b/README.md
index d39f92f..86ddf2d 100644
--- a/README.md
+++ b/README.md
@@ -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!
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 65ec651..025da60 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -5,11 +5,15 @@ 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 {
@@ -17,19 +21,10 @@ val properties = Properties().apply {
}
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
}
@@ -44,25 +39,34 @@ 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.*")
+ }
}
}
}
@@ -70,12 +74,12 @@ kover {
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"
@@ -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")
}
}
@@ -121,7 +132,7 @@ android {
}
composeOptions {
- kotlinCompilerExtensionVersion = "1.4.0"
+ kotlinCompilerExtensionVersion = "1.4.6"
}
packaging {
@@ -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)
}
diff --git a/app/firebase-crashlytics.pro b/app/firebase-crashlytics.pro
new file mode 100644
index 0000000..df863db
--- /dev/null
+++ b/app/firebase-crashlytics.pro
@@ -0,0 +1,3 @@
+-keepattributes SourceFile,LineNumberTable
+-keep public class * extends java.lang.Throwable
+-keep public class * extends com.minhdtm.example.weapose.data.exception.ResponseException
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/InfinityText.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/InfinityText.kt
index 975a128..d95f2df 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/InfinityText.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/InfinityText.kt
@@ -48,8 +48,12 @@ fun InfinityText(
modifier = modifier,
targetState = text,
transitionSpec = {
- slideInVertically { height -> -height } + fadeIn() with slideOutVertically { height -> height } + fadeOut()
+ val fadeInAndFadeOut = slideInVertically { height -> -height } + fadeIn() with slideOutVertically { height -> height } + fadeOut()
+ fadeInAndFadeOut.using(
+ SizeTransform(clip = false)
+ )
},
+ label = "",
) { targetState ->
content.invoke(targetState)
}
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/NavigationDrawerLabel.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/NavigationDrawerLabel.kt
index 1f7dce4..b51b028 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/NavigationDrawerLabel.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/NavigationDrawerLabel.kt
@@ -8,7 +8,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NavigationDrawerLabel(
modifier: Modifier = Modifier,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/WeatherScaffold.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/WeatherScaffold.kt
index d693a12..1394a2d 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/component/WeatherScaffold.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/component/WeatherScaffold.kt
@@ -8,7 +8,6 @@ import androidx.compose.ui.graphics.Color
import com.minhdtm.example.weapose.domain.enums.ActionType
import com.minhdtm.example.weapose.presentation.base.ViewState
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun WeatherScaffold(
modifier: Modifier = Modifier,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherApp.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherApp.kt
index a81d8fe..2f0eaf9 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherApp.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherApp.kt
@@ -29,7 +29,7 @@ import com.minhdtm.example.weapose.presentation.broadcast.LocaleChangeBroadcast
import com.minhdtm.example.weapose.presentation.component.NavigationDrawerLabel
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalAnimationApi::class)
+@OptIn(ExperimentalAnimationApi::class)
@Composable
fun WeatherApp(appState: WeatherAppState = rememberWeatherAppState()) {
val systemUiController = rememberSystemUiController()
@@ -115,7 +115,6 @@ fun WeatherApp(appState: WeatherAppState = rememberWeatherAppState()) {
}
}
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ColumnScope.WeatherDrawerContent(
selectedItem: DrawerTab,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherAppState.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherAppState.kt
index 3c56eb3..eeb20ad 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherAppState.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/WeatherAppState.kt
@@ -6,7 +6,7 @@ import android.net.Uri
import android.provider.Settings
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
-import androidx.compose.animation.AnimatedContentScope
+import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.tween
import androidx.compose.material3.*
@@ -92,16 +92,16 @@ fun NavGraphBuilder.splash(appState: WeatherAppState) {
composable(
route = Screen.Splash.route,
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
Splash(appState)
@@ -118,16 +118,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
composable(
route = Screen.CurrentWeather.route,
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
CurrentWeather(
@@ -139,16 +139,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
composable(
route = Screen.Settings.route,
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
Settings(
@@ -160,16 +160,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
composable(
route = Screen.SevenDaysWeather.route,
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
SevenDaysWeather(
@@ -181,16 +181,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
composable(
route = Screen.Info.route,
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
Information(
@@ -207,16 +207,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
navArgument(Constants.Key.FROM_ROUTE) { type = NavType.StringType },
),
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
SearchByMap(
@@ -233,16 +233,16 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
navArgument(Constants.Key.FROM_ROUTE) { type = NavType.StringType },
),
enterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
exitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Left, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Left, animationSpec = tween(700))
},
popEnterTransition = {
- slideIntoContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
popExitTransition = {
- slideOutOfContainer(AnimatedContentScope.SlideDirection.Right, animationSpec = tween(700))
+ slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.Right, animationSpec = tween(700))
},
) {
SearchByText(
@@ -253,7 +253,7 @@ fun NavGraphBuilder.home(appState: WeatherAppState) {
}
}
-@OptIn(ExperimentalAnimationApi::class, ExperimentalMaterial3Api::class)
+@OptIn(ExperimentalAnimationApi::class)
@Composable
fun rememberWeatherAppState(
coroutineScope: CoroutineScope = rememberCoroutineScope(),
@@ -264,7 +264,6 @@ fun rememberWeatherAppState(
WeatherAppState(coroutineScope, controller, drawer, snackbarHost)
}
-@OptIn(ExperimentalMaterial3Api::class)
class WeatherAppState(
private val coroutineScope: CoroutineScope,
val controller: NavHostController,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/home/CurrentWeatherScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/home/CurrentWeatherScreen.kt
index ac6991d..000a944 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/home/CurrentWeatherScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/home/CurrentWeatherScreen.kt
@@ -171,7 +171,7 @@ fun CurrentWeather(
)
}
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
+@OptIn(ExperimentalMaterialApi::class)
@Composable
fun CurrentWeatherScreen(
state: CurrentWeatherViewState,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/infomation/InformationScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/infomation/InformationScreen.kt
index 17042d0..49daeb8 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/infomation/InformationScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/infomation/InformationScreen.kt
@@ -12,6 +12,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.minhdtm.example.weapose.presentation.component.WeatherScaffold
import com.minhdtm.example.weapose.presentation.ui.WeatherAppState
+import kotlinx.coroutines.flow.buffer
@Composable
fun Information(
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/map/SearchByMapScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/map/SearchByMapScreen.kt
index f05ff38..f913b93 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/map/SearchByMapScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/map/SearchByMapScreen.kt
@@ -226,8 +226,7 @@ fun SearchAppBar(
onBack: () -> Unit = {},
onChangeModeGoogleMap: () -> Unit = {},
) {
- TopAppBar(
- modifier = Modifier.windowInsetsPadding(WindowInsets.statusBars),
+ TopAppBar(modifier = Modifier.windowInsetsPadding(WindowInsets.statusBars),
backgroundColor = Color.Transparent,
contentColor = Color.Transparent,
elevation = 0.dp,
@@ -255,14 +254,15 @@ fun SearchAppBar(
targetState = isDarkMode,
transitionSpec = {
if (!targetState) { // Dark mode
- slideInVertically { height -> height } + fadeIn() with slideOutVertically { height -> -height } + fadeOut()
+ slideInVertically { height -> height } + fadeIn() togetherWith slideOutVertically { height -> -height } + fadeOut()
} else { // Light mode
- slideInVertically { height -> -height } + fadeIn() with slideOutVertically { height -> height } + fadeOut()
+ slideInVertically { height -> -height } + fadeIn() togetherWith slideOutVertically { height -> height } + fadeOut()
}.using(
SizeTransform(clip = false)
)
},
- ) {
+ label = "",
+ ) { _ ->
val icon = rememberSaveable(isDarkMode) {
if (isDarkMode) {
R.drawable.ic_dark_mode
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/text/SearchByTextScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/text/SearchByTextScreen.kt
index e1297ad..b49b616 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/text/SearchByTextScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/search/text/SearchByTextScreen.kt
@@ -114,7 +114,6 @@ fun SearchByText(
)
}
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchByTextScreen(
state: SearchByTextViewState,
@@ -241,7 +240,6 @@ fun EmptyList(
}
}
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ListHistorySearch(
modifier: Modifier = Modifier,
@@ -297,7 +295,6 @@ fun ItemResultSearch(
}
}
-@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchByTextAppBar(
modifier: Modifier = Modifier,
@@ -317,7 +314,7 @@ fun SearchByTextAppBar(
onValueChange = onTextChange,
singleLine = true,
shape = RoundedCornerShape(30.dp),
- colors = TextFieldDefaults.textFieldColors(
+ colors = TextFieldDefaults.colors(
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent,
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/sevendaysweather/SevenDaysWeatherScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/sevendaysweather/SevenDaysWeatherScreen.kt
index e31dd59..0732918 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/sevendaysweather/SevenDaysWeatherScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/sevendaysweather/SevenDaysWeatherScreen.kt
@@ -117,7 +117,7 @@ fun SevenDaysWeather(
)
}
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
+@OptIn(ExperimentalMaterialApi::class)
@Composable
fun SevenDaysWeatherScreen(
state: SevenDaysViewState,
@@ -246,9 +246,9 @@ fun WeatherDayItem(
transition.AnimatedContent(transitionSpec = {
if (!targetState) {
- slideInVertically { height -> height } + fadeIn() with slideOutVertically { height -> -height } + fadeOut()
+ slideInVertically { height -> height } + fadeIn() togetherWith slideOutVertically { height -> -height } + fadeOut()
} else {
- slideInVertically { height -> -height } + fadeIn() with slideOutVertically { height -> height } + fadeOut()
+ slideInVertically { height -> -height } + fadeIn() togetherWith slideOutVertically { height -> height } + fadeOut()
}.using(
SizeTransform(clip = false)
)
diff --git a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/splash/SplashScreen.kt b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/splash/SplashScreen.kt
index 700d5a4..3957e63 100644
--- a/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/splash/SplashScreen.kt
+++ b/app/src/main/java/com/minhdtm/example/weapose/presentation/ui/splash/SplashScreen.kt
@@ -26,7 +26,6 @@ fun Splash(appState: WeatherAppState) {
)
}
-@OptIn(ExperimentalMaterial3Api::class)
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun SplashScreen(
diff --git a/build.gradle.kts b/build.gradle.kts
index 152e222..7dfc3fa 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,8 +1,11 @@
plugins {
- id("com.android.application") version "8.1.0-alpha02" apply false
- id("com.android.library") version "8.1.0-alpha02" apply false
- id("org.jetbrains.kotlin.android") version "1.8.0" apply false
- id("org.jetbrains.kotlin.jvm") version "1.8.0" apply false
- id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
- id("com.google.dagger.hilt.android") version "2.45" apply false
+ alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.firebase.crashlytics) apply false
+ alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.kotlin.jvm) apply false
+ alias(libs.plugins.google.hilt) apply false
+ alias(libs.plugins.google.ksp) apply false
+ alias(libs.plugins.google.maps.secrets) apply false
+ alias(libs.plugins.google.service) apply false
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 0000000..f4a67d1
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,199 @@
+[versions]
+# Gradle
+android-core = "8.2.0-alpha01"
+firebase-crashlytics = "2.9.4"
+google-hilt = "2.45"
+google-maps-screts = "2.0.1"
+google-services = "4.3.15"
+google-ksp = "1.8.20-1.0.10"
+kotlin-android = "1.8.10"
+kotlin-jvm = "1.8.10"
+
+# AndroidX
+androidx-activity = "1.7.2"
+androidx-compose = "1.6.0-alpha01"
+androidx-compose-material-3 = "1.2.0-alpha03"
+androidx-compose-bom = "2023.06.01"
+androidx-core = "1.10.1"
+androidx-datastore = "1.0.0"
+androidx-hilt = "1.0.0"
+androidx-lifecycle = "2.6.1"
+androidx-livedata = "1.6.0-alpha01"
+androidx-viewmodel = "2.6.0-alpha05"
+androidx-navigation = "2.6.0"
+androidx-room = "2.5.2"
+androidx-test-junit = "1.1.5"
+androidx-test-espresso = "3.5.1"
+androidx-work = "2.8.1"
+
+# Firebase
+firebase-bom = "32.1.1"
+
+# Jetbrains
+jetbrains-kotlin-reflect = "1.8.10"
+jetbrains-kotlinx-coroutines = "1.6.4"
+
+# Junit
+junit = "4.13.2"
+
+# Google
+google-accompanist = "0.31.1-alpha"
+google-dagger = "2.44.2"
+google-gson = "2.10.1"
+google-maps = "2.9.1"
+google-places = "3.2.0"
+google-services-location = "21.0.1"
+google-services-maps = "18.1.0"
+
+# Lottie
+lottie = "5.2.0"
+
+# MockK
+mockK = "1.13.3"
+
+# Timber
+timber = "5.0.1"
+
+# Square
+okhttp3 = "4.10.0"
+retrofit2 = "2.9.0"
+
+[libraries]
+# AndroidX Activity Compose
+androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" }
+
+# AndroidX Core
+androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }
+
+# AndroidX Compose
+androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidx-compose-bom" }
+
+# AndroidX Compose Ui
+androidx-compose-ui-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "androidx-compose" }
+androidx-compose-ui-ui-test-junit = { group = "androidx.compose.ui", name = "ui-test-junit4", version.ref = "androidx-compose" }
+androidx-compose-ui-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest", version.ref = "androidx-compose" }
+androidx-compose-ui-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "androidx-compose" }
+androidx-compose-ui-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "androidx-compose" }
+
+# AndroidX Compose Material
+androidx-compose-material-2 = { group = "androidx.compose.material", name = "material", version.ref = "androidx-compose" }
+androidx-compose-material-3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material-3" }
+
+# AndroidX DataStore
+androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "androidx-datastore" }
+
+# AndroidX Hilt
+androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt" }
+androidx-hilt-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "androidx-hilt" }
+
+# AndroidX Lifecycle
+androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
+androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
+androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" }
+androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
+
+# AndroidX LiveData
+androidx-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata", version.ref = "androidx-livedata" }
+
+# AndroidX Navigation
+androidx-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidx-navigation" }
+
+# AndroidX Room
+androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "androidx-room" }
+androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "androidx-room" }
+androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "androidx-room" }
+
+# AndroidX Test
+androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-junit" }
+androidx-test-espresso = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidx-test-espresso" }
+
+# AndroidX Work Manager
+androidx-work = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "androidx-work" }
+
+# Firebase
+firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" }
+firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" }
+
+# Google Accompanist
+google-accompanist-navigation-animation = { group = "com.google.accompanist", name = "accompanist-navigation-animation", version.ref = "google-accompanist" }
+google-accompanist-systemUiController = { group = "com.google.accompanist", name = "accompanist-systemuicontroller", version.ref = "google-accompanist" }
+google-accompanist-flowLayout = { group = "com.google.accompanist", name = "accompanist-flowlayout", version.ref = "google-accompanist" }
+google-accompanist-permission = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "google-accompanist" }
+
+# Google Dagger
+google-dagger-hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "google-dagger" }
+google-dagger-hilt-android-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "google-dagger" }
+
+# Google Gson
+google-gson = { group = "com.google.code.gson", name = "gson", version.ref = "google-gson" }
+
+# Google Services
+google-maps = { group = "com.google.maps.android", name = "maps-compose", version.ref = "google-maps" }
+google-places = { group = "com.google.android.libraries.places", name = "places", version.ref = "google-places" }
+google-play-services-location = { group = "com.google.android.gms", name = "play-services-location", version.ref = "google-services-location" }
+google-play-services-maps = { group = "com.google.android.gms", name = "play-services-maps", version.ref = "google-services-maps" }
+
+# JUnit
+junit-4 = { group = "junit", name = "junit", version.ref = "junit" }
+
+# Kotlin Reflect
+kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "jetbrains-kotlin-reflect" }
+
+# KotlinX Coroutines
+kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "jetbrains-kotlinx-coroutines" }
+kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "jetbrains-kotlinx-coroutines" }
+kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "jetbrains-kotlinx-coroutines" }
+
+# MockK
+mockk = { group = "io.mockk", name = "mockk", version.ref = "mockK" }
+mockk-agent-jvm = { group = "io.mockk", name = "mockk-agent-jvm", version.ref = "mockK" }
+
+# Lottie
+lottie = { group = "com.airbnb.android", name = "lottie-compose", version.ref = "lottie" }
+
+# Timber
+timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" }
+
+# Okhttp
+okhttp3 = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp3" }
+okhttp3-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp3" }
+
+# Retrofit
+retrofit2 = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit2" }
+retrofit2-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit2" }
+
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "android-core" }
+android-library = { id = "com.android.library", version.ref = "android-core" }
+
+firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
+
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-android" }
+kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-jvm" }
+
+google-maps-secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "google-maps-screts" }
+google-hilt = { id = "com.google.dagger.hilt.android", version.ref = "google-hilt" }
+google-ksp = { id = "com.google.devtools.ksp", version.ref = "google-ksp" }
+google-service = { id = "com.google.gms.google-services", version.ref = "google-services" }
+
+[bundles]
+androidx-compose = ["androidx-activity-compose",
+ "androidx-compose-material-2",
+ "androidx-compose-material-3",
+ "androidx-compose-ui-ui",
+ "androidx-compose-ui-ui-tooling-preview",
+]
+androidx-compose-debug = ["androidx-compose-ui-ui-tooling", "androidx-compose-ui-ui-test-manifest"]
+androidx-compose-integration-testing = ["androidx-compose-ui-ui-test-junit"]
+
+firebase = ["firebase-crashlytics"]
+
+google-accompanist = [
+ "google-accompanist-flowLayout",
+ "google-accompanist-navigation-animation",
+ "google-accompanist-permission",
+ "google-accompanist-systemUiController",
+]
+
+retrofit2 = ["retrofit2", 'retrofit2-converter-gson']
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 703be24..7c654e6 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Sat Jul 09 23:12:33 ICT 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-rc-1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/settings.gradle.kts b/settings.gradle.kts
index fec8570..2cab1f7 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -8,6 +8,7 @@ pluginManagement {
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+
repositories {
google()
mavenCentral()