From 6d76569320b49d3fd26eadc2f80fefdbcef3a496 Mon Sep 17 00:00:00 2001 From: Shubham Singh Date: Thu, 6 Oct 2022 12:21:54 +0530 Subject: [PATCH 1/4] Update all dependency versions --- app/build.gradle.kts | 3 +- build.gradle.kts | 1 - buildSrc/build.gradle.kts | 2 +- buildSrc/src/main/kotlin/AppVersions.kt | 4 +- buildSrc/src/main/kotlin/Dependencies.kt | 112 +++++++++++------- common/build.gradle.kts | 1 - commonui/build.gradle.kts | 3 +- data/build.gradle.kts | 1 - .../praxis/data/injection/DataModule.kt | 13 +- .../PicSumPhotoFetchRepositoryImpl.kt | 16 +-- gradle/wrapper/gradle-wrapper.properties | 4 +- navigator/build.gradle.kts | 3 +- .../praxis/navigator/Navigator.kt | 15 ++- .../composenavigator/ComposeNavigator.kt | 11 +- ui-authentication/build.gradle.kts | 5 +- .../authentication/ui/AuthenticationUI.kt | 47 ++++++-- .../praxis/feat/authentication/vm/AuthVM.kt | 19 ++- ui-onboarding/build.gradle.kts | 5 +- 18 files changed, 165 insertions(+), 100 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5f8997ff..2d024d18 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -82,7 +82,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = Lib.Androidx.composeVersion + kotlinCompilerExtensionVersion = Lib.Androidx.COMPOSE_COMPILER_VERSION } packagingOptions { @@ -142,7 +142,6 @@ dependencies { /*DI*/ api(Lib.Di.hilt) api(Lib.Di.hiltNavigationCompose) - api(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/build.gradle.kts b/build.gradle.kts index 7dd80b6e..638b2de9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,6 @@ buildscript { classpath(BuildPlugins.KOTLIN_GRADLE_PLUGIN) classpath(kotlin("serialization", version = Lib.Kotlin.KOTLIN_VERSION)) classpath(BuildPlugins.KTLINT_GRADLE_PLUGIN) - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 148f55f3..db41e689 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,5 +1,5 @@ repositories { - jcenter() + mavenCentral() } plugins { diff --git a/buildSrc/src/main/kotlin/AppVersions.kt b/buildSrc/src/main/kotlin/AppVersions.kt index 60b5dae6..d38b93b7 100644 --- a/buildSrc/src/main/kotlin/AppVersions.kt +++ b/buildSrc/src/main/kotlin/AppVersions.kt @@ -6,8 +6,8 @@ object AppVersions { const val versionCode = versionMajor * 10000 + versionMinor * 100 + versionPatch const val versionName = "$versionMajor.$versionMinor.$versionPatch" - const val COMPILE_SDK = 31 + const val COMPILE_SDK = 33 const val MIN_SDK = 21 - const val TARGET_SDK = 31 + const val TARGET_SDK = 33 const val APPLICATION_ID = "com.mutualmobile.praxis" } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 81a3a66c..3ba6e2a5 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,16 +1,17 @@ /** This file contains versions of all the dependencies used in the module */ object BuildPlugins { - private const val TOOLS_BUILD = "7.1.1" - private const val KT_LINT = "9.2.1" - private const val SAFE_ARGS = "2.3.5" + private const val TOOLS_BUILD = "7.3.0" + private const val KT_LINT = "11.0.0" + private const val SAFE_ARGS = "2.5.2" + const val DAGGER_VERSION = "2.44" const val TOOLS_BUILD_GRADLE = "com.android.tools.build:gradle:${TOOLS_BUILD}" const val KTLINT_GRADLE_PLUGIN = "org.jlleitschuh.gradle:ktlint-gradle:${KT_LINT}" const val SAFE_ARGS_GRADLE_PLUGIN = "androidx.navigation:navigation-safe-args-gradle-plugin:${SAFE_ARGS}" - const val DAGGER_HILT_PLUGIN = "com.google.dagger:hilt-android-gradle-plugin:2.38.1" - const val KOTLIN_GRADLE_PLUGIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" + const val DAGGER_HILT_PLUGIN = "com.google.dagger:hilt-android-gradle-plugin:${DAGGER_VERSION}" + const val KOTLIN_GRADLE_PLUGIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Lib.Kotlin.KOTLIN_VERSION}" const val ANDROID_APPLICATION_PLUGIN = "com.android.application" const val ANDROID_LIBRARY_PLUGIN = "com.android.library" const val KOTLIN_ANDROID_PLUGIN = "kotlin-android" @@ -23,21 +24,24 @@ object BuildPlugins { object Lib { object Kotlin { - const val KOTLIN_VERSION = "1.6.0" + const val KOTLIN_VERSION = "1.7.0" private const val KTX_CORE_VERSION = "1.2.0" + const val KOTLINX_DATETIME_VERSION = "0.4.0" + const val COROUTINES_VERSION = "1.6.4" const val KT_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${KOTLIN_VERSION}" private const val KTX_CORE = "androidx.core:core-ktx:${KTX_CORE_VERSION}" - private const val DATE_TIME = "org.jetbrains.kotlinx:kotlinx-datetime:0.3.2" + private const val DATE_TIME = "org.jetbrains.kotlinx:kotlinx-datetime:${KOTLINX_DATETIME_VERSION}" - const val COROUTINES = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${KOTLIN_VERSION}" + const val COROUTINES = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${COROUTINES_VERSION}" private const val COROUTINES_ANDROID = - "org.jetbrains.kotlinx:kotlinx-coroutines-android:${KOTLIN_VERSION}" + "org.jetbrains.kotlinx:kotlinx-coroutines-android:${COROUTINES_VERSION}" val list = listOf(KT_STD, KTX_CORE, DATE_TIME, COROUTINES, COROUTINES_ANDROID) } object Google { - const val MATERIAL_DESIGN = "com.google.android.material:material:1.4.0" + const val MATERIAL_DESIGN_VERSION = "1.6.1" + const val MATERIAL_DESIGN = "com.google.android.material:material:${MATERIAL_DESIGN_VERSION}" val list = listOf( MATERIAL_DESIGN, @@ -47,9 +51,12 @@ object Lib { object Androidx { // Compose - const val composeVersion = "1.1.0" - private const val SPLASH_SCREEN_API = "androidx.core:core-splashscreen:1.0.0-beta01" - private const val APP_COMPAT = "androidx.appcompat:appcompat:1.3.0-beta01" + const val COMPOSE_VERSION = "1.2.1" + const val COMPOSE_COMPILER_VERSION = "1.2.0" + const val SPLASH_SCREEN_VERSION = "1.0.0" + const val APP_COMPAT_VERSION = "1.5.1" + private const val SPLASH_SCREEN_API = "androidx.core:core-splashscreen:${SPLASH_SCREEN_VERSION}" + private const val APP_COMPAT = "androidx.appcompat:appcompat:${APP_COMPAT_VERSION}" val list = listOf( APP_COMPAT, @@ -57,16 +64,19 @@ object Lib { ) object Compose { - private const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:${composeVersion}" + const val NAVIGATION_COMPOSE_VERSION = "2.5.2" + const val CONSTRAINT_LAYOUT_COMPOSE_VERSION = "1.0.1" + + private const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:${COMPOSE_VERSION}" private const val CONSTRAINT_LAYOUT_COMPOSE = - "androidx.constraintlayout:constraintlayout-compose:1.0.0" - private const val COMPOSE_UI = "androidx.compose.ui:ui:${composeVersion}" + "androidx.constraintlayout:constraintlayout-compose:${CONSTRAINT_LAYOUT_COMPOSE_VERSION}" + private const val COMPOSE_UI = "androidx.compose.ui:ui:${COMPOSE_VERSION}" private const val COMPOSE_LIVEDATA = - "androidx.compose.runtime:runtime-livedata:${composeVersion}" - private const val COMPOSE_MATERIAL = "androidx.compose.material:material:${composeVersion}" - private const val COMPOSE_TOOLING = "androidx.compose.ui:ui-tooling-preview:${composeVersion}" - private const val COMPOSE_DEBUG_TOOLING = "androidx.compose.ui:ui-tooling:${composeVersion}" - private const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:2.5.0-alpha01" + "androidx.compose.runtime:runtime-livedata:${COMPOSE_VERSION}" + private const val COMPOSE_MATERIAL = "androidx.compose.material:material:${COMPOSE_VERSION}" + private const val COMPOSE_TOOLING = "androidx.compose.ui:ui-tooling-preview:${COMPOSE_VERSION}" + private const val COMPOSE_DEBUG_TOOLING = "androidx.compose.ui:ui-tooling:${COMPOSE_VERSION}" + private const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:${NAVIGATION_COMPOSE_VERSION}" val list = listOf( CONSTRAINT_LAYOUT_COMPOSE, @@ -83,49 +93,56 @@ object Lib { object Accompanist { - const val insets = "com.google.accompanist:accompanist-insets:0.23.0" - const val pager = "com.google.accompanist:accompanist-pager:0.23.0" - const val pagerIndicators = "com.google.accompanist:accompanist-pager-indicators:0.23.0" + const val ACCOMPANIST_VERSION = "0.26.4-beta" + + const val insets = "com.google.accompanist:accompanist-insets:${ACCOMPANIST_VERSION}" + const val pager = "com.google.accompanist:accompanist-pager:${ACCOMPANIST_VERSION}" + const val pagerIndicators = "com.google.accompanist:accompanist-pager-indicators:${ACCOMPANIST_VERSION}" const val systemuicontroller = - "com.google.accompanist:accompanist-systemuicontroller:0.23.0" + "com.google.accompanist:accompanist-systemuicontroller:${ACCOMPANIST_VERSION}" val list = listOf(insets, pager, pagerIndicators, systemuicontroller) } object Di { - private const val DAGGER_VERSION = "2.40.5" - const val hilt = "com.google.dagger:hilt-android:${DAGGER_VERSION}" - const val hiltAndroidCompiler = "com.google.dagger:hilt-android-compiler:${DAGGER_VERSION}" + const val HILT_COMPILER_VERSION = "1.0.0" + const val HILT_NAVIGATION_COMPOSE_VERSION = "1.0.0" + + const val hilt = "com.google.dagger:hilt-android:${BuildPlugins.DAGGER_VERSION}" + const val hiltAndroidCompiler = "com.google.dagger:hilt-android-compiler:${BuildPlugins.DAGGER_VERSION}" - const val viewmodel = "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" - const val hiltCompiler = "androidx.hilt:hilt-compiler:1.0.0" - const val hiltNavigationCompose = "androidx.hilt:hilt-navigation-compose:1.0.0-rc01" + const val hiltCompiler = "androidx.hilt:hilt-compiler:${HILT_COMPILER_VERSION}" + const val hiltNavigationCompose = "androidx.hilt:hilt-navigation-compose:${HILT_NAVIGATION_COMPOSE_VERSION}" } object Paging { - private const val PAGING_VERSION = "3.1.0" + private const val PAGING_VERSION = "3.1.1" + private const val PAGING_COMPOSE_VERSION = "1.0.0-alpha16" + const val PAGING_3 = "androidx.paging:paging-runtime:${PAGING_VERSION}" - const val PAGING_COMPOSE = "androidx.paging:paging-compose:1.0.0-alpha14" + const val PAGING_COMPOSE = "androidx.paging:paging-compose:${PAGING_COMPOSE_VERSION}" const val PAGING_COMMON = "androidx.paging:paging-common-ktx:${PAGING_VERSION}" } object Room { - private const val roomVersion = "2.4.1" + private const val roomVersion = "2.4.3" const val roomRuntime = "androidx.room:room-runtime:$roomVersion" const val roomCompiler = "androidx.room:room-compiler:$roomVersion" const val roomKtx = "androidx.room:room-ktx:$roomVersion" - const val roomPaging = "androidx.room:room-paging:2.4.1" + const val roomPaging = "androidx.room:room-paging:$roomVersion" const val testing = "androidx.room:room-testing:$roomVersion" } object Networking { - const val KTOR = "io.ktor:ktor-client-android:1.6.7" - const val KTOR_LOGGING = "io.ktor:ktor-client-logging-jvm:1.6.7" + private const val KTOR_VERSION = "2.1.2" + const val KTOR = "io.ktor:ktor-client-android:${KTOR_VERSION}" + const val KTOR_LOGGING = "io.ktor:ktor-client-logging-jvm:${KTOR_VERSION}" val ktorList = listOf(KTOR, KTOR_LOGGING) } object ThirdParty { - private const val COIL_COMPOSE = "io.coil-kt:coil-compose:1.4.0" + private const val COIL_COMPOSE_VERSION = "2.2.2" + private const val COIL_COMPOSE = "io.coil-kt:coil-compose:${COIL_COMPOSE_VERSION}" val list = listOf(COIL_COMPOSE) } @@ -133,18 +150,23 @@ object Lib { } object UnitTesting { - const val junit = "junit:junit:4.13.2" - const val MOCKK = "io.mockk:mockk:1.10.5" - const val coroutineTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.0" - const val turbin = "app.cash.turbine:turbine:0.7.0" + private const val JUNIT_VERSION = "4.13.2" + private const val MOCKK_VERSION = "1.13.2" + private const val TURBINE_VERSION = "0.11.0" + + const val junit = "junit:junit:${JUNIT_VERSION}" + const val MOCKK = "io.mockk:mockk:${MOCKK_VERSION}" + const val coroutineTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Lib.Kotlin.COROUTINES_VERSION}" + const val turbine = "app.cash.turbine:turbine:${TURBINE_VERSION}" - val list = listOf(junit, MOCKK, coroutineTest, turbin) + val list = listOf(junit, MOCKK, coroutineTest, turbine) } object DevDependencies { - private const val LEAK_CANARY_VERSION = "2.8.1" + private const val LEAK_CANARY_VERSION = "2.9.1" + private const val TIMBER_VERSION = "5.0.1" + const val LEAK_CANARY = "com.squareup.leakcanary:leakcanary-android:${LEAK_CANARY_VERSION}" - private const val TIMBER_VERSION = "4.7.1" const val TIMBER = "com.jakewharton.timber:timber:${TIMBER_VERSION}" val debugList = listOf(LEAK_CANARY) val list = listOf(TIMBER) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index e9bdb2fd..1deb3456 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -43,7 +43,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/commonui/build.gradle.kts b/commonui/build.gradle.kts index 73940cf7..92596bb1 100644 --- a/commonui/build.gradle.kts +++ b/commonui/build.gradle.kts @@ -27,7 +27,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = Lib.Androidx.composeVersion + kotlinCompilerExtensionVersion = Lib.Androidx.COMPOSE_COMPILER_VERSION } packagingOptions { resources { @@ -55,7 +55,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 00e49bff..38983a1d 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -37,7 +37,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/data/src/main/java/com/mutualmobile/praxis/data/injection/DataModule.kt b/data/src/main/java/com/mutualmobile/praxis/data/injection/DataModule.kt index 154fe98f..a9f4366c 100644 --- a/data/src/main/java/com/mutualmobile/praxis/data/injection/DataModule.kt +++ b/data/src/main/java/com/mutualmobile/praxis/data/injection/DataModule.kt @@ -11,14 +11,13 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import io.ktor.client.HttpClient +import io.ktor.client.engine.android.Android +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging +import io.ktor.client.plugins.observer.ResponseObserver import javax.inject.Singleton -import io.ktor.client.* -import io.ktor.client.engine.android.* -import io.ktor.client.features.* -import io.ktor.client.features.logging.* -import io.ktor.client.features.observer.* -import io.ktor.client.request.* -import io.ktor.http.* import timber.log.Timber @Module diff --git a/data/src/main/java/com/mutualmobile/praxis/data/repositories/PicSumPhotoFetchRepositoryImpl.kt b/data/src/main/java/com/mutualmobile/praxis/data/repositories/PicSumPhotoFetchRepositoryImpl.kt index f19ae564..f308395e 100644 --- a/data/src/main/java/com/mutualmobile/praxis/data/repositories/PicSumPhotoFetchRepositoryImpl.kt +++ b/data/src/main/java/com/mutualmobile/praxis/data/repositories/PicSumPhotoFetchRepositoryImpl.kt @@ -5,15 +5,15 @@ import com.mutualmobile.praxis.domain.repositories.PhotoFetchListener import com.mutualmobile.praxis.domain.repositories.PhotoFetchRepository import com.mutualmobile.praxis.domain.repositories.RandomFileService import com.mutualmobile.praxis.injection.dispatcher.CoroutineDispatcherProvider -import io.ktor.client.* -import io.ktor.client.call.* -import io.ktor.client.features.* -import io.ktor.client.request.* -import io.ktor.client.statement.* -import kotlinx.coroutines.withContext -import timber.log.Timber +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.plugins.onDownload +import io.ktor.client.request.get +import io.ktor.client.statement.HttpResponse import java.io.File import javax.inject.Inject +import kotlinx.coroutines.withContext +import timber.log.Timber class PicSumPhotoFetchRepositoryImpl @Inject constructor( private val coroutineContext: CoroutineDispatcherProvider, @@ -40,7 +40,7 @@ class PicSumPhotoFetchRepositoryImpl @Inject constructor( try { val file = fileCreationService.getTempFile() val response: HttpResponse = responseWithListener(PIC_SUM_URL, file) - val bytes = response.receive() + val bytes = response.body() file.writeBytes(bytes) notifyFileDownloaded(file) } catch (ex: Exception) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d8cebfcc..0e27106e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jan 27 08:55:19 IST 2022 +#Thu Oct 06 11:32:10 IST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/navigator/build.gradle.kts b/navigator/build.gradle.kts index fe83c7e6..dd786f7f 100644 --- a/navigator/build.gradle.kts +++ b/navigator/build.gradle.kts @@ -30,7 +30,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = Lib.Androidx.composeVersion + kotlinCompilerExtensionVersion = Lib.Androidx.COMPOSE_COMPILER_VERSION } } @@ -54,7 +54,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt index 4c4d7fbe..2dc50d82 100644 --- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt +++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt @@ -4,9 +4,18 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.navigation.NavController import androidx.navigation.NavOptionsBuilder -import kotlinx.coroutines.* +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.flow.onSubscription +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext abstract class Navigator { val navigationCommands = MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE) @@ -23,7 +32,7 @@ abstract class Navigator { abstract class ComposeNavigator : Navigator() { abstract fun navigate(route: String, optionsBuilder: (NavOptionsBuilder.() -> Unit)? = null) - abstract fun observeResult(key: String, route: String? = null): Flow + abstract fun observeResult(key: String, route: String? = null): Flow abstract fun navigateBackWithResult(key: String, result: T, route: String?) abstract fun popUpTo(route: String, inclusive: Boolean) diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt index 4fcebd70..6e01a83d 100644 --- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt +++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt @@ -5,9 +5,14 @@ import androidx.navigation.navOptions import com.mutualmobile.praxis.navigator.ComposeNavigationCommand import com.mutualmobile.praxis.navigator.ComposeNavigator import com.mutualmobile.praxis.navigator.asFlow -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.* import javax.inject.Inject +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.onEach class PraxisCloneComposeNavigator @Inject constructor(): ComposeNavigator() { @@ -41,7 +46,7 @@ class PraxisCloneComposeNavigator @Inject constructor(): ComposeNavigator() { } @OptIn(ExperimentalCoroutinesApi::class) - override fun observeResult(key: String, route: String?): Flow { + override fun observeResult(key: String, route: String?): Flow { return navControllerFlow .filterNotNull() .flatMapLatest { navController -> diff --git a/ui-authentication/build.gradle.kts b/ui-authentication/build.gradle.kts index f976ad7b..9f219759 100644 --- a/ui-authentication/build.gradle.kts +++ b/ui-authentication/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id(BuildPlugins.KOTLIN_KAPT) id(BuildPlugins.DAGGER_HILT) id(BuildPlugins.KOTLIN_PARCELABLE_PLUGIN) - id("org.jlleitschuh.gradle.ktlint") + id(BuildPlugins.ktLint) } android { @@ -28,7 +28,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = Lib.Androidx.composeVersion + kotlinCompilerExtensionVersion = Lib.Androidx.COMPOSE_COMPILER_VERSION } packagingOptions { resources.excludes.add("META-INF/LICENSE.txt") @@ -74,7 +74,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt index 7449c1e5..9b6986da 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt @@ -3,12 +3,32 @@ package com.praxis.feat.authentication.ui import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.Image import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.* -import androidx.compose.runtime.* +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.material.ScaffoldState +import androidx.compose.material.Text +import androidx.compose.material.TextField +import androidx.compose.material.TextFieldDefaults +import androidx.compose.material.rememberScaffoldState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -34,7 +54,12 @@ import com.google.accompanist.insets.navigationBarsWithImePadding import com.google.accompanist.insets.statusBarsPadding import com.mutualmobile.praxis.commonui.material.DefaultSnackbar import com.mutualmobile.praxis.commonui.material.PraxisSurfaceAppBar -import com.mutualmobile.praxis.commonui.theme.* +import com.mutualmobile.praxis.commonui.theme.AlphaNearTransparent +import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider +import com.mutualmobile.praxis.commonui.theme.PraxisShapes +import com.mutualmobile.praxis.commonui.theme.PraxisSurface +import com.mutualmobile.praxis.commonui.theme.PraxisTheme +import com.mutualmobile.praxis.commonui.theme.PraxisTypography import com.praxis.feat.authentication.R import com.praxis.feat.authentication.vm.AuthVM import com.praxis.feat.authentication.vm.streamProgress @@ -170,12 +195,14 @@ private fun AuthSurface( ForgotPasswordText(authVM) } - if (resetPasswordState.isNotEmpty()) { - LaunchedEffect(scaffoldState) { - scaffoldState.snackbarHostState.showSnackbar( - message = resetPasswordState, - actionLabel = "Ok" - ) + resetPasswordState?.let { nnResetPasswordState -> + if (nnResetPasswordState.isNotEmpty()) { + LaunchedEffect(scaffoldState) { + scaffoldState.snackbarHostState.showSnackbar( + message = nnResetPasswordState, + actionLabel = "Ok" + ) + } } } } diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt index ecb1eaf1..0a6d6312 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt @@ -1,7 +1,9 @@ package com.praxis.feat.authentication.vm import android.net.Uri -import androidx.lifecycle.* +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.mutualmobile.praxis.domain.model.StreamingFile import com.mutualmobile.praxis.domain.usecases.FetchRandomPhotoUseCase import com.mutualmobile.praxis.navigator.ComposeNavigator @@ -10,11 +12,20 @@ import com.mutualmobile.praxis.navigator.PraxisScreen import com.praxis.feat.authentication.ui.exceptions.FormValidationFailed import com.praxis.feat.authentication.ui.model.LoginForm import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* import java.io.FileNotFoundException import java.net.UnknownHostException import javax.inject.Inject +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineExceptionHandler +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.launch @HiltViewModel class AuthVM @Inject constructor( @@ -27,7 +38,7 @@ class AuthVM @Inject constructor( var credentials = MutableStateFlow(LoginForm()) private set - var snackBarState = MutableStateFlow("") + var snackBarState: MutableStateFlow = MutableStateFlow("") private set var formUiState = MutableStateFlow(UiState.Empty) private set diff --git a/ui-onboarding/build.gradle.kts b/ui-onboarding/build.gradle.kts index ced77d9d..74305da2 100644 --- a/ui-onboarding/build.gradle.kts +++ b/ui-onboarding/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id(BuildPlugins.KOTLIN_KAPT) id(BuildPlugins.DAGGER_HILT) id(BuildPlugins.KOTLIN_PARCELABLE_PLUGIN) - id("org.jlleitschuh.gradle.ktlint") + id(BuildPlugins.ktLint) } android { @@ -28,7 +28,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = Lib.Androidx.composeVersion + kotlinCompilerExtensionVersion = Lib.Androidx.COMPOSE_COMPILER_VERSION } packagingOptions { resources.excludes.add("META-INF/LICENSE.txt") @@ -75,7 +75,6 @@ dependencies { /*DI*/ implementation(Lib.Di.hilt) implementation(Lib.Di.hiltNavigationCompose) - implementation(Lib.Di.viewmodel) kapt(Lib.Di.hiltCompiler) kapt(Lib.Di.hiltAndroidCompiler) From 11d58d591b8fee98b2b7d018970a8a154ad57a53 Mon Sep 17 00:00:00 2001 From: Shubham Singh Date: Thu, 6 Oct 2022 12:29:21 +0530 Subject: [PATCH 2/4] Clean up Dependencies.kt --- buildSrc/src/main/kotlin/Dependencies.kt | 293 ++++++++++++----------- 1 file changed, 150 insertions(+), 143 deletions(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 3ba6e2a5..e20b929c 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,173 +1,180 @@ /** This file contains versions of all the dependencies used in the module */ object BuildPlugins { - private const val TOOLS_BUILD = "7.3.0" - private const val KT_LINT = "11.0.0" - private const val SAFE_ARGS = "2.5.2" - const val DAGGER_VERSION = "2.44" - - const val TOOLS_BUILD_GRADLE = "com.android.tools.build:gradle:${TOOLS_BUILD}" - const val KTLINT_GRADLE_PLUGIN = "org.jlleitschuh.gradle:ktlint-gradle:${KT_LINT}" - const val SAFE_ARGS_GRADLE_PLUGIN = - "androidx.navigation:navigation-safe-args-gradle-plugin:${SAFE_ARGS}" - const val DAGGER_HILT_PLUGIN = "com.google.dagger:hilt-android-gradle-plugin:${DAGGER_VERSION}" - const val KOTLIN_GRADLE_PLUGIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Lib.Kotlin.KOTLIN_VERSION}" - const val ANDROID_APPLICATION_PLUGIN = "com.android.application" - const val ANDROID_LIBRARY_PLUGIN = "com.android.library" - const val KOTLIN_ANDROID_PLUGIN = "kotlin-android" - const val KOTLIN_PARCELABLE_PLUGIN = "kotlin-parcelize" - const val KOTLIN_KAPT = "kotlin-kapt" - const val DAGGER_HILT = "dagger.hilt.android.plugin" - const val ktLint = "org.jlleitschuh.gradle.ktlint" - const val SAFE_ARGS_KOTLIN = "androidx.navigation.safeargs.kotlin" + private const val TOOLS_BUILD = "7.3.0" + private const val KT_LINT = "11.0.0" + private const val SAFE_ARGS = "2.5.2" + const val DAGGER_VERSION = "2.44" + + const val TOOLS_BUILD_GRADLE = "com.android.tools.build:gradle:$TOOLS_BUILD" + const val KTLINT_GRADLE_PLUGIN = "org.jlleitschuh.gradle:ktlint-gradle:$KT_LINT" + const val SAFE_ARGS_GRADLE_PLUGIN = + "androidx.navigation:navigation-safe-args-gradle-plugin:$SAFE_ARGS" + const val DAGGER_HILT_PLUGIN = "com.google.dagger:hilt-android-gradle-plugin:$DAGGER_VERSION" + const val KOTLIN_GRADLE_PLUGIN = + "org.jetbrains.kotlin:kotlin-gradle-plugin:${Lib.Kotlin.KOTLIN_VERSION}" + const val ANDROID_APPLICATION_PLUGIN = "com.android.application" + const val ANDROID_LIBRARY_PLUGIN = "com.android.library" + const val KOTLIN_ANDROID_PLUGIN = "kotlin-android" + const val KOTLIN_PARCELABLE_PLUGIN = "kotlin-parcelize" + const val KOTLIN_KAPT = "kotlin-kapt" + const val DAGGER_HILT = "dagger.hilt.android.plugin" + const val ktLint = "org.jlleitschuh.gradle.ktlint" } object Lib { - object Kotlin { - const val KOTLIN_VERSION = "1.7.0" - private const val KTX_CORE_VERSION = "1.2.0" - const val KOTLINX_DATETIME_VERSION = "0.4.0" - const val COROUTINES_VERSION = "1.6.4" - const val KT_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${KOTLIN_VERSION}" - private const val KTX_CORE = "androidx.core:core-ktx:${KTX_CORE_VERSION}" - private const val DATE_TIME = "org.jetbrains.kotlinx:kotlinx-datetime:${KOTLINX_DATETIME_VERSION}" - - const val COROUTINES = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${COROUTINES_VERSION}" - private const val COROUTINES_ANDROID = - "org.jetbrains.kotlinx:kotlinx-coroutines-android:${COROUTINES_VERSION}" - - val list = listOf(KT_STD, KTX_CORE, DATE_TIME, COROUTINES, COROUTINES_ANDROID) - } - - object Google { - const val MATERIAL_DESIGN_VERSION = "1.6.1" - const val MATERIAL_DESIGN = "com.google.android.material:material:${MATERIAL_DESIGN_VERSION}" - - val list = listOf( - MATERIAL_DESIGN, - ) - - } - - object Androidx { - // Compose - const val COMPOSE_VERSION = "1.2.1" - const val COMPOSE_COMPILER_VERSION = "1.2.0" - const val SPLASH_SCREEN_VERSION = "1.0.0" - const val APP_COMPAT_VERSION = "1.5.1" - private const val SPLASH_SCREEN_API = "androidx.core:core-splashscreen:${SPLASH_SCREEN_VERSION}" - private const val APP_COMPAT = "androidx.appcompat:appcompat:${APP_COMPAT_VERSION}" - - val list = listOf( - APP_COMPAT, - SPLASH_SCREEN_API - ) - - object Compose { - const val NAVIGATION_COMPOSE_VERSION = "2.5.2" - const val CONSTRAINT_LAYOUT_COMPOSE_VERSION = "1.0.1" - - private const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:${COMPOSE_VERSION}" - private const val CONSTRAINT_LAYOUT_COMPOSE = - "androidx.constraintlayout:constraintlayout-compose:${CONSTRAINT_LAYOUT_COMPOSE_VERSION}" - private const val COMPOSE_UI = "androidx.compose.ui:ui:${COMPOSE_VERSION}" - private const val COMPOSE_LIVEDATA = - "androidx.compose.runtime:runtime-livedata:${COMPOSE_VERSION}" - private const val COMPOSE_MATERIAL = "androidx.compose.material:material:${COMPOSE_VERSION}" - private const val COMPOSE_TOOLING = "androidx.compose.ui:ui-tooling-preview:${COMPOSE_VERSION}" - private const val COMPOSE_DEBUG_TOOLING = "androidx.compose.ui:ui-tooling:${COMPOSE_VERSION}" - private const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:${NAVIGATION_COMPOSE_VERSION}" - - val list = listOf( - CONSTRAINT_LAYOUT_COMPOSE, - COMPOSE_UI, - ACTIVITY_COMPOSE, - COMPOSE_LIVEDATA, - COMPOSE_MATERIAL, - COMPOSE_TOOLING, - COMPOSE_DEBUG_TOOLING, - COMPOSE_NAVIGATION, - ) + object Kotlin { + const val KOTLIN_VERSION = "1.7.0" + private const val KTX_CORE_VERSION = "1.2.0" + private const val KOTLINX_DATETIME_VERSION = "0.4.0" + const val COROUTINES_VERSION = "1.6.4" + + const val KT_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$KOTLIN_VERSION" + private const val KTX_CORE = "androidx.core:core-ktx:$KTX_CORE_VERSION" + private const val DATE_TIME = + "org.jetbrains.kotlinx:kotlinx-datetime:$KOTLINX_DATETIME_VERSION" + const val COROUTINES = + "org.jetbrains.kotlinx:kotlinx-coroutines-core:$COROUTINES_VERSION" + private const val COROUTINES_ANDROID = + "org.jetbrains.kotlinx:kotlinx-coroutines-android:$COROUTINES_VERSION" + + val list = listOf(KT_STD, KTX_CORE, DATE_TIME, COROUTINES, COROUTINES_ANDROID) } - } + object Google { + private const val MATERIAL_DESIGN_VERSION = "1.6.1" + private const val MATERIAL_DESIGN = + "com.google.android.material:material:$MATERIAL_DESIGN_VERSION" - object Accompanist { - const val ACCOMPANIST_VERSION = "0.26.4-beta" + val list = listOf( + MATERIAL_DESIGN + ) + } - const val insets = "com.google.accompanist:accompanist-insets:${ACCOMPANIST_VERSION}" - const val pager = "com.google.accompanist:accompanist-pager:${ACCOMPANIST_VERSION}" - const val pagerIndicators = "com.google.accompanist:accompanist-pager-indicators:${ACCOMPANIST_VERSION}" - const val systemuicontroller = - "com.google.accompanist:accompanist-systemuicontroller:${ACCOMPANIST_VERSION}" - val list = listOf(insets, pager, pagerIndicators, systemuicontroller) - } + object Androidx { + // Compose + const val COMPOSE_VERSION = "1.2.1" + const val COMPOSE_COMPILER_VERSION = "1.2.0" + private const val SPLASH_SCREEN_VERSION = "1.0.0" + private const val APP_COMPAT_VERSION = "1.5.1" + + private const val SPLASH_SCREEN_API = + "androidx.core:core-splashscreen:$SPLASH_SCREEN_VERSION" + private const val APP_COMPAT = "androidx.appcompat:appcompat:$APP_COMPAT_VERSION" + + val list = listOf( + APP_COMPAT, + SPLASH_SCREEN_API + ) + + object Compose { + private const val NAVIGATION_COMPOSE_VERSION = "2.5.2" + private const val CONSTRAINT_LAYOUT_COMPOSE_VERSION = "1.0.1" + + private const val ACTIVITY_COMPOSE = + "androidx.activity:activity-compose:$COMPOSE_VERSION" + private const val CONSTRAINT_LAYOUT_COMPOSE = + "androidx.constraintlayout:constraintlayout-compose:$CONSTRAINT_LAYOUT_COMPOSE_VERSION" + private const val COMPOSE_UI = "androidx.compose.ui:ui:$COMPOSE_VERSION" + private const val COMPOSE_LIVEDATA = + "androidx.compose.runtime:runtime-livedata:$COMPOSE_VERSION" + private const val COMPOSE_MATERIAL = + "androidx.compose.material:material:$COMPOSE_VERSION" + private const val COMPOSE_TOOLING = + "androidx.compose.ui:ui-tooling-preview:$COMPOSE_VERSION" + private const val COMPOSE_DEBUG_TOOLING = + "androidx.compose.ui:ui-tooling:$COMPOSE_VERSION" + private const val COMPOSE_NAVIGATION = + "androidx.navigation:navigation-compose:$NAVIGATION_COMPOSE_VERSION" + + val list = listOf( + CONSTRAINT_LAYOUT_COMPOSE, + COMPOSE_UI, + ACTIVITY_COMPOSE, + COMPOSE_LIVEDATA, + COMPOSE_MATERIAL, + COMPOSE_TOOLING, + COMPOSE_DEBUG_TOOLING, + COMPOSE_NAVIGATION + ) + } + } - object Di { - const val HILT_COMPILER_VERSION = "1.0.0" - const val HILT_NAVIGATION_COMPOSE_VERSION = "1.0.0" + object Accompanist { + private const val ACCOMPANIST_VERSION = "0.26.4-beta" - const val hilt = "com.google.dagger:hilt-android:${BuildPlugins.DAGGER_VERSION}" - const val hiltAndroidCompiler = "com.google.dagger:hilt-android-compiler:${BuildPlugins.DAGGER_VERSION}" + private const val insets = "com.google.accompanist:accompanist-insets:$ACCOMPANIST_VERSION" + private const val pager = "com.google.accompanist:accompanist-pager:$ACCOMPANIST_VERSION" + private const val pagerIndicators = + "com.google.accompanist:accompanist-pager-indicators:$ACCOMPANIST_VERSION" + private const val systemuicontroller = + "com.google.accompanist:accompanist-systemuicontroller:$ACCOMPANIST_VERSION" + val list = listOf(insets, pager, pagerIndicators, systemuicontroller) + } - const val hiltCompiler = "androidx.hilt:hilt-compiler:${HILT_COMPILER_VERSION}" - const val hiltNavigationCompose = "androidx.hilt:hilt-navigation-compose:${HILT_NAVIGATION_COMPOSE_VERSION}" - } + object Di { + private const val HILT_COMPILER_VERSION = "1.0.0" + private const val HILT_NAVIGATION_COMPOSE_VERSION = "1.0.0" - object Paging { - private const val PAGING_VERSION = "3.1.1" - private const val PAGING_COMPOSE_VERSION = "1.0.0-alpha16" + const val hilt = "com.google.dagger:hilt-android:${BuildPlugins.DAGGER_VERSION}" + const val hiltAndroidCompiler = + "com.google.dagger:hilt-android-compiler:${BuildPlugins.DAGGER_VERSION}" - const val PAGING_3 = "androidx.paging:paging-runtime:${PAGING_VERSION}" - const val PAGING_COMPOSE = "androidx.paging:paging-compose:${PAGING_COMPOSE_VERSION}" - const val PAGING_COMMON = "androidx.paging:paging-common-ktx:${PAGING_VERSION}" - } + const val hiltCompiler = "androidx.hilt:hilt-compiler:$HILT_COMPILER_VERSION" + const val hiltNavigationCompose = + "androidx.hilt:hilt-navigation-compose:$HILT_NAVIGATION_COMPOSE_VERSION" + } - object Room { - private const val roomVersion = "2.4.3" - const val roomRuntime = "androidx.room:room-runtime:$roomVersion" - const val roomCompiler = "androidx.room:room-compiler:$roomVersion" - const val roomKtx = "androidx.room:room-ktx:$roomVersion" - const val roomPaging = "androidx.room:room-paging:$roomVersion" - const val testing = "androidx.room:room-testing:$roomVersion" - } + object Paging { + private const val PAGING_VERSION = "3.1.1" + const val PAGING_COMMON = "androidx.paging:paging-common-ktx:$PAGING_VERSION" + } - object Networking { - private const val KTOR_VERSION = "2.1.2" - const val KTOR = "io.ktor:ktor-client-android:${KTOR_VERSION}" - const val KTOR_LOGGING = "io.ktor:ktor-client-logging-jvm:${KTOR_VERSION}" + object Room { + private const val roomVersion = "2.4.3" + const val roomRuntime = "androidx.room:room-runtime:$roomVersion" + const val roomCompiler = "androidx.room:room-compiler:$roomVersion" + const val roomKtx = "androidx.room:room-ktx:$roomVersion" + const val testing = "androidx.room:room-testing:$roomVersion" + } - val ktorList = listOf(KTOR, KTOR_LOGGING) - } + object Networking { + private const val KTOR_VERSION = "2.1.2" + private const val KTOR = "io.ktor:ktor-client-android:$KTOR_VERSION" + private const val KTOR_LOGGING = "io.ktor:ktor-client-logging-jvm:$KTOR_VERSION" - object ThirdParty { - private const val COIL_COMPOSE_VERSION = "2.2.2" - private const val COIL_COMPOSE = "io.coil-kt:coil-compose:${COIL_COMPOSE_VERSION}" + val ktorList = listOf(KTOR, KTOR_LOGGING) + } - val list = listOf(COIL_COMPOSE) - } + object ThirdParty { + private const val COIL_COMPOSE_VERSION = "2.2.2" + private const val COIL_COMPOSE = "io.coil-kt:coil-compose:$COIL_COMPOSE_VERSION" + val list = listOf(COIL_COMPOSE) + } } object UnitTesting { - private const val JUNIT_VERSION = "4.13.2" - private const val MOCKK_VERSION = "1.13.2" - private const val TURBINE_VERSION = "0.11.0" + private const val JUNIT_VERSION = "4.13.2" + private const val MOCKK_VERSION = "1.13.2" + private const val TURBINE_VERSION = "0.11.0" - const val junit = "junit:junit:${JUNIT_VERSION}" - const val MOCKK = "io.mockk:mockk:${MOCKK_VERSION}" - const val coroutineTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Lib.Kotlin.COROUTINES_VERSION}" - const val turbine = "app.cash.turbine:turbine:${TURBINE_VERSION}" + private const val junit = "junit:junit:$JUNIT_VERSION" + private const val MOCKK = "io.mockk:mockk:$MOCKK_VERSION" + private const val coroutineTest = + "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Lib.Kotlin.COROUTINES_VERSION}" + private const val turbine = "app.cash.turbine:turbine:$TURBINE_VERSION" - val list = listOf(junit, MOCKK, coroutineTest, turbine) + val list = listOf(junit, MOCKK, coroutineTest, turbine) } object DevDependencies { - private const val LEAK_CANARY_VERSION = "2.9.1" - private const val TIMBER_VERSION = "5.0.1" - - const val LEAK_CANARY = "com.squareup.leakcanary:leakcanary-android:${LEAK_CANARY_VERSION}" - const val TIMBER = "com.jakewharton.timber:timber:${TIMBER_VERSION}" - val debugList = listOf(LEAK_CANARY) - val list = listOf(TIMBER) + private const val LEAK_CANARY_VERSION = "2.9.1" + private const val TIMBER_VERSION = "5.0.1" + + private const val LEAK_CANARY = + "com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY_VERSION" + private const val TIMBER = "com.jakewharton.timber:timber:$TIMBER_VERSION" + val debugList = listOf(LEAK_CANARY) + val list = listOf(TIMBER) } From f585268d667be2af17b911101e951be80c8b19df Mon Sep 17 00:00:00 2001 From: Shubham Singh Date: Thu, 6 Oct 2022 12:54:48 +0530 Subject: [PATCH 3/4] Fix all possible build warnings --- app/build.gradle.kts | 3 +- .../praxis/root/OnboardingActivity.kt | 21 ++- common/build.gradle.kts | 1 - commonui/build.gradle.kts | 3 +- .../reusable/SlackDragComposableView.kt | 8 +- .../praxis/commonui/reusable/SlackImageBox.kt | 13 +- data/build.gradle.kts | 1 - .../praxis/data/local/AppDatabase.kt | 2 +- .../usecases/FetchRandomPhotoUseCase.kt | 2 +- navigator/build.gradle.kts | 1 - .../praxis/navigator/Navigator.kt | 3 - ui-authentication/build.gradle.kts | 1 - .../authentication/ui/AuthenticationUI.kt | 15 +- .../authentication/ui/ForgotPasswordUI.kt | 68 +++++---- ui-onboarding/build.gradle.kts | 3 +- .../uionboarding/compose/CommonInputUI.kt | 5 +- .../uionboarding/compose/GettingStarted.kt | 102 +++++++++----- .../uionboarding/compose/SkipTypingScreen.kt | 133 ++++++++++-------- 18 files changed, 222 insertions(+), 163 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2d024d18..a6420d2c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,9 +4,9 @@ plugins { id(BuildPlugins.ANDROID_APPLICATION_PLUGIN) id(BuildPlugins.KOTLIN_ANDROID_PLUGIN) id(BuildPlugins.KOTLIN_PARCELABLE_PLUGIN) - id(BuildPlugins.KOTLIN_KAPT) id(BuildPlugins.DAGGER_HILT) id(BuildPlugins.ktLint) + id(BuildPlugins.KOTLIN_KAPT) } // def preDexEnabled = "true" == System.getProperty("pre-dex", "true") @@ -104,7 +104,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt b/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt index 243107ab..3dbaec89 100644 --- a/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt +++ b/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt @@ -8,12 +8,11 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.view.WindowCompat import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController -import com.google.accompanist.insets.ProvideWindowInsets -import dagger.hilt.android.AndroidEntryPoint import com.mutualmobile.praxis.navigator.ComposeNavigator import com.mutualmobile.praxis.navigator.PraxisRoute import com.mutualmobile.praxis.uionboarding.nav.onboardingNavigation import com.praxis.feat.authentication.nav.authNavGraph +import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @AndroidEntryPoint @@ -34,16 +33,14 @@ class OnboardingActivity : AppCompatActivity() { composeNavigator.handleNavigationCommands(navController) } - ProvideWindowInsets(windowInsetsAnimationsEnabled = true) { - NavHost( - navController = navController, - startDestination = PraxisRoute.OnBoarding.name, - ) { - onboardingNavigation( - composeNavigator = composeNavigator, - ) - authNavGraph() - } + NavHost( + navController = navController, + startDestination = PraxisRoute.OnBoarding.name, + ) { + onboardingNavigation( + composeNavigator = composeNavigator, + ) + authNavGraph() } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 1deb3456..264f7db5 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -26,7 +26,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/commonui/build.gradle.kts b/commonui/build.gradle.kts index 92596bb1..be0d1675 100644 --- a/commonui/build.gradle.kts +++ b/commonui/build.gradle.kts @@ -2,9 +2,9 @@ plugins { id(BuildPlugins.ANDROID_LIBRARY_PLUGIN) id(BuildPlugins.KOTLIN_ANDROID_PLUGIN) id(BuildPlugins.KOTLIN_PARCELABLE_PLUGIN) - id(BuildPlugins.KOTLIN_KAPT) id(BuildPlugins.DAGGER_HILT) id(BuildPlugins.ktLint) + id(BuildPlugins.KOTLIN_KAPT) } android { @@ -38,7 +38,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackDragComposableView.kt b/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackDragComposableView.kt index 321d83cc..b8afe366 100644 --- a/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackDragComposableView.kt +++ b/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackDragComposableView.kt @@ -9,8 +9,8 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange -import androidx.compose.ui.input.pointer.consumePositionChange import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.input.pointer.positionChange import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.IntOffset @@ -125,7 +125,7 @@ private fun chatScreenModifier( // this moves the chat view left/right val summedMain = Offset(x = offsetX.targetValue + dragAmount, y = 0f) val newDragValueMain = Offset(x = summedMain.x.coerceIn(0f, requiredOffset), y = 0f) - change.consumePositionChange() + if (change.positionChange() != Offset.Zero) change.consume() coroutineScope.launch { offsetX.animateTo(newDragValueMain.x, animationSpec = tween(50)) } @@ -232,7 +232,7 @@ private fun mainAnimateOffset( if (offsetX.targetValue <= 0f) { val summedChat = Offset(x = chatViewOffX.targetValue + dragAmount, y = 0f) val chatNewDragValueMain = Offset(x = summedChat.x.coerceIn(0f, chatScreenOffset), y = 0f) - change.consumePositionChange() + if (change.positionChange() != Offset.Zero) change.consume() coroutineScope.launch { chatViewOffX.animateTo(chatNewDragValueMain.x, animationSpec = tween(50)) } @@ -241,7 +241,7 @@ private fun mainAnimateOffset( // this moved the main view left/right val summedMain = Offset(x = offsetX.targetValue + dragAmount, y = 0f) val newDragValueMain = Offset(x = summedMain.x.coerceIn(0f, mainDragOffset), y = 0f) - change.consumePositionChange() + if (change.positionChange() != Offset.Zero) change.consume() coroutineScope.launch { offsetX.animateTo(newDragValueMain.x, animationSpec = tween(50)) } diff --git a/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackImageBox.kt b/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackImageBox.kt index da069d44..b86a13b8 100644 --- a/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackImageBox.kt +++ b/commonui/src/main/java/com/mutualmobile/praxis/commonui/reusable/SlackImageBox.kt @@ -3,19 +3,22 @@ package com.mutualmobile.praxis.commonui.reusable import androidx.compose.foundation.Image import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import coil.compose.rememberAsyncImagePainter import coil.compose.rememberImagePainter import coil.memory.MemoryCache import coil.request.CachePolicy +import coil.request.ImageRequest import coil.transform.RoundedCornersTransformation @Composable fun PraxisImageBox(modifier: Modifier, imageUrl: String) { Image( - painter = rememberImagePainter( - data = imageUrl, - builder = { - transformations(RoundedCornersTransformation(12.0f, 12.0f, 12.0f, 12.0f)) - } + painter = rememberAsyncImagePainter( + ImageRequest.Builder(LocalContext.current).data(data = imageUrl) + .apply(block = fun ImageRequest.Builder.() { + transformations(RoundedCornersTransformation(12.0f, 12.0f, 12.0f, 12.0f)) + }).build() ), contentDescription = null, modifier = modifier diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 38983a1d..a3b528fe 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -24,7 +24,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/data/src/main/java/com/mutualmobile/praxis/data/local/AppDatabase.kt b/data/src/main/java/com/mutualmobile/praxis/data/local/AppDatabase.kt index 0fb49b56..92b5adc2 100644 --- a/data/src/main/java/com/mutualmobile/praxis/data/local/AppDatabase.kt +++ b/data/src/main/java/com/mutualmobile/praxis/data/local/AppDatabase.kt @@ -4,6 +4,6 @@ import androidx.room.Database import androidx.room.RoomDatabase import com.mutualmobile.praxis.data.local.model.SampleEntity -@Database(entities = [SampleEntity::class], version = 1) +@Database(entities = [SampleEntity::class], version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() diff --git a/domain/src/main/java/com/mutualmobile/praxis/domain/usecases/FetchRandomPhotoUseCase.kt b/domain/src/main/java/com/mutualmobile/praxis/domain/usecases/FetchRandomPhotoUseCase.kt index cefb6b18..a34120fe 100644 --- a/domain/src/main/java/com/mutualmobile/praxis/domain/usecases/FetchRandomPhotoUseCase.kt +++ b/domain/src/main/java/com/mutualmobile/praxis/domain/usecases/FetchRandomPhotoUseCase.kt @@ -14,7 +14,7 @@ import kotlin.coroutines.cancellation.CancellationException class FetchRandomPhotoUseCase(private val photoFetchRepository: PhotoFetchRepository) : BaseUseCase< StreamingFile,String> { - override fun performStreaming(input: String?): Flow { + override fun performStreaming(params: String?): Flow { return callbackFlow { val listener = photoFetchListener() photoFetchRepository.setListener(listener) diff --git a/navigator/build.gradle.kts b/navigator/build.gradle.kts index dd786f7f..55345227 100644 --- a/navigator/build.gradle.kts +++ b/navigator/build.gradle.kts @@ -36,7 +36,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt index 2dc50d82..1a5e4912 100644 --- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt +++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt @@ -58,9 +58,6 @@ abstract class ComposeNavigator : Navigator() { is ComposeNavigationCommand.NavigateUpWithResult<*> -> { navUpWithResult(navigationCommand) } - else -> { - throw RuntimeException("can't handle this with ComposeNavigator") - } } } diff --git a/ui-authentication/build.gradle.kts b/ui-authentication/build.gradle.kts index 9f219759..079714ad 100644 --- a/ui-authentication/build.gradle.kts +++ b/ui-authentication/build.gradle.kts @@ -50,7 +50,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt index 9b6986da..cdf39c02 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/AuthenticationUI.kt @@ -9,8 +9,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.KeyboardActions @@ -48,10 +51,8 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import coil.compose.rememberAsyncImagePainter import coil.compose.rememberImagePainter -import com.google.accompanist.insets.navigationBarsPadding -import com.google.accompanist.insets.navigationBarsWithImePadding -import com.google.accompanist.insets.statusBarsPadding import com.mutualmobile.praxis.commonui.material.DefaultSnackbar import com.mutualmobile.praxis.commonui.material.PraxisSurfaceAppBar import com.mutualmobile.praxis.commonui.theme.AlphaNearTransparent @@ -132,7 +133,7 @@ private fun AuthSurface( ) { Box(Modifier.background(Color.Black)) { Image( - painter = rememberImagePainter(randomPhotoState.uri()), + painter = rememberAsyncImagePainter(randomPhotoState.uri()), contentScale = ContentScale.Crop, contentDescription = null, modifier = Modifier.fillMaxSize(), ) @@ -159,7 +160,7 @@ private fun AuthSurface( Column( Modifier .padding(16.dp) - .navigationBarsWithImePadding() + .navigationBarsPadding().imePadding() .fillMaxWidth() .fillMaxHeight(), verticalArrangement = Arrangement.Center, @@ -283,7 +284,7 @@ private fun PasswordTF(authVM: AuthVM, focusRequester: FocusRequester) { val keyboardController = LocalSoftwareKeyboardController.current TextField( - value = credentials.password ?: "", + value = credentials.password, onValueChange = { authVM.credentials.value = credentials.copy(password = it) }, @@ -320,7 +321,7 @@ private fun EmailTF(authVM: AuthVM, focusRequester: FocusRequester) { val credentials by authVM.credentials.collectAsState() TextField( - value = credentials.email ?: "", + value = credentials.email, onValueChange = { authVM.credentials.value = credentials.copy(email = it) }, diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/ForgotPasswordUI.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/ForgotPasswordUI.kt index b444c5d3..c1946114 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/ForgotPasswordUI.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/ForgotPasswordUI.kt @@ -1,8 +1,21 @@ package com.praxis.feat.authentication.ui import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.material.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.material.Text +import androidx.compose.material.TextField +import androidx.compose.material.TextFieldDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -11,38 +24,41 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import com.google.accompanist.insets.navigationBarsPadding -import com.google.accompanist.insets.statusBarsPadding import com.mutualmobile.praxis.commonui.material.PraxisSurfaceAppBar -import com.mutualmobile.praxis.commonui.theme.* +import com.mutualmobile.praxis.commonui.theme.AlphaNearTransparent +import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider +import com.mutualmobile.praxis.commonui.theme.PraxisShapes +import com.mutualmobile.praxis.commonui.theme.PraxisSurface +import com.mutualmobile.praxis.commonui.theme.PraxisTheme +import com.mutualmobile.praxis.commonui.theme.PraxisTypography import com.praxis.feat.authentication.R import com.praxis.feat.authentication.vm.ForgotPasswordVM @Composable fun ForgotPasswordUI(forgotPasswordVM: ForgotPasswordVM = hiltViewModel()){ PraxisTheme() { - Scaffold( - backgroundColor = PraxisColorProvider.colors.uiBackground, - contentColor = PraxisColorProvider.colors.textSecondary, - modifier = Modifier - .statusBarsPadding() - .navigationBarsPadding(), - topBar = { - PraxisSurfaceAppBar( - title = { - Text( - text = "Forgot password", - style = PraxisTypography.h5.copy( - color = Color.White, - fontWeight = FontWeight.Bold + Scaffold( + backgroundColor = PraxisColorProvider.colors.uiBackground, + contentColor = PraxisColorProvider.colors.textSecondary, + modifier = Modifier + .statusBarsPadding() + .navigationBarsPadding(), + topBar = { + PraxisSurfaceAppBar( + title = { + Text( + text = "Forgot password", + style = PraxisTypography.h5.copy( + color = Color.White, + fontWeight = FontWeight.Bold + ) + ) + }, + backgroundColor = PraxisColorProvider.colors.appBarColor, ) - ) - }, - backgroundColor = PraxisColorProvider.colors.appBarColor, - ) - }) { - ForgotPasswordSurface(forgotPasswordVM) - } + }) { + ForgotPasswordSurface(forgotPasswordVM) + } } } diff --git a/ui-onboarding/build.gradle.kts b/ui-onboarding/build.gradle.kts index 74305da2..52d98c33 100644 --- a/ui-onboarding/build.gradle.kts +++ b/ui-onboarding/build.gradle.kts @@ -1,10 +1,10 @@ plugins { id(BuildPlugins.ANDROID_LIBRARY_PLUGIN) id(BuildPlugins.KOTLIN_ANDROID_PLUGIN) - id(BuildPlugins.KOTLIN_KAPT) id(BuildPlugins.DAGGER_HILT) id(BuildPlugins.KOTLIN_PARCELABLE_PLUGIN) id(BuildPlugins.ktLint) + id(BuildPlugins.KOTLIN_KAPT) } android { @@ -50,7 +50,6 @@ android { // Required for annotation processing plugins like Dagger kapt { - generateStubs = true correctErrorTypes = true } diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt index 65592eb2..3b70092c 100644 --- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt +++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt @@ -9,9 +9,6 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout -import com.google.accompanist.insets.navigationBarsPadding -import com.google.accompanist.insets.navigationBarsWithImePadding -import com.google.accompanist.insets.statusBarsPadding import com.mutualmobile.praxis.commonui.theme.PraxisSurface import com.mutualmobile.praxis.commonui.theme.PraxisTheme import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider @@ -48,7 +45,7 @@ fun CommonInputUI( ConstraintLayout( modifier = Modifier .padding(12.dp) - .navigationBarsWithImePadding() + .navigationBarsPadding().imePadding() .fillMaxHeight() .fillMaxWidth() ) { diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt index 270d36b0..5c7b5ff5 100644 --- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt +++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt @@ -1,10 +1,41 @@ package com.mutualmobile.praxis.uionboarding.compose -import androidx.compose.animation.* +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.expandHorizontally +import androidx.compose.animation.expandIn +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkHorizontally +import androidx.compose.animation.shrinkOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.material.* -import androidx.compose.runtime.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Scaffold +import androidx.compose.material.Text +import androidx.compose.material.rememberScaffoldState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -17,9 +48,14 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp -import com.google.accompanist.insets.statusBarsPadding import com.google.accompanist.systemuicontroller.rememberSystemUiController -import com.mutualmobile.praxis.commonui.theme.* +import com.mutualmobile.praxis.commonui.theme.PraxisCloneColor +import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider +import com.mutualmobile.praxis.commonui.theme.PraxisLogoYellow +import com.mutualmobile.praxis.commonui.theme.PraxisSurface +import com.mutualmobile.praxis.commonui.theme.PraxisTheme +import com.mutualmobile.praxis.commonui.theme.PraxisTypography +import com.mutualmobile.praxis.commonui.theme.praxisFontFamily import com.mutualmobile.praxis.navigator.ComposeNavigator import com.mutualmobile.praxis.navigator.PraxisScreen import com.mutualmobile.praxis.uionboarding.R @@ -35,36 +71,36 @@ fun GettingStartedUI(composeNavigator: ComposeNavigator) { sysUiController.setSystemBarsColor(color = PraxisCloneColor) } - Scaffold( - backgroundColor = PraxisCloneColor, - contentColor = PraxisColorProvider.colors.textSecondary, - modifier = Modifier.statusBarsPadding(), scaffoldState = scaffoldState, snackbarHost = { - scaffoldState.snackbarHostState - } - ) { innerPadding -> - Box(modifier = Modifier.padding(innerPadding)) { - PraxisSurface( - color = PraxisCloneColor, - modifier = Modifier - .padding(28.dp) - ) { - Column( - verticalArrangement = Arrangement.SpaceAround, - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .fillMaxHeight() - .fillMaxWidth() - ) { - IntroText(modifier = Modifier.padding(top = 12.dp)) - CenterImage() - Spacer(Modifier.padding(8.dp)) - GetStartedButton(composeNavigator) + Scaffold( + backgroundColor = PraxisCloneColor, + contentColor = PraxisColorProvider.colors.textSecondary, + modifier = Modifier.statusBarsPadding(), scaffoldState = scaffoldState, snackbarHost = { + scaffoldState.snackbarHostState + } + ) { innerPadding -> + Box(modifier = Modifier.padding(innerPadding)) { + PraxisSurface( + color = PraxisCloneColor, + modifier = Modifier + .padding(28.dp) + ) { + Column( + verticalArrangement = Arrangement.SpaceAround, + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth() + ) { + IntroText(modifier = Modifier.padding(top = 12.dp)) + CenterImage() + Spacer(Modifier.padding(8.dp)) + GetStartedButton(composeNavigator) + } + + } } - } } - - } } } diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt index 15e9e023..311f0f6f 100644 --- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt +++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt @@ -2,10 +2,25 @@ package com.mutualmobile.praxis.uionboarding.compose import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.material.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.OutlinedButton +import androidx.compose.material.Scaffold +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear +import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.Alignment @@ -18,10 +33,14 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp -import com.google.accompanist.insets.statusBarsPadding import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.mutualmobile.praxis.commonui.material.PraxisSurfaceAppBar -import com.mutualmobile.praxis.commonui.theme.* +import com.mutualmobile.praxis.commonui.theme.PraxisCloneColor +import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider +import com.mutualmobile.praxis.commonui.theme.PraxisSurface +import com.mutualmobile.praxis.commonui.theme.PraxisTheme +import com.mutualmobile.praxis.commonui.theme.PraxisTypography +import com.mutualmobile.praxis.commonui.theme.praxisFontFamily import com.mutualmobile.praxis.navigator.ComposeNavigator import com.mutualmobile.praxis.navigator.PraxisScreen import com.mutualmobile.praxis.uionboarding.R @@ -35,66 +54,66 @@ fun SkipTypingUI(composeNavigator: ComposeNavigator) { sysUiController.setNavigationBarColor(color = PraxisCloneColor) sysUiController.setSystemBarsColor(color = PraxisCloneColor) } - Scaffold( - backgroundColor = PraxisCloneColor, - contentColor = PraxisColorProvider.colors.textSecondary, - modifier = Modifier.statusBarsPadding(), scaffoldState = scaffoldState, - topBar = { - PraxisSurfaceAppBar( - title = { + Scaffold( + backgroundColor = PraxisCloneColor, + contentColor = PraxisColorProvider.colors.textSecondary, + modifier = Modifier.statusBarsPadding(), scaffoldState = scaffoldState, + topBar = { + PraxisSurfaceAppBar( + title = { - }, - navigationIcon = { - IconButton(onClick = { - composeNavigator.navigateUp() - }) { - Icon( - imageVector = Icons.Filled.Clear, - contentDescription = "Clear", - modifier = Modifier.padding(start = 8.dp), tint = Color.White + }, + navigationIcon = { + IconButton(onClick = { + composeNavigator.navigateUp() + }) { + Icon( + imageVector = Icons.Filled.Clear, + contentDescription = "Clear", + modifier = Modifier.padding(start = 8.dp), tint = Color.White + ) + } + }, + backgroundColor = PraxisCloneColor, + elevation = 0.dp ) - } }, - backgroundColor = PraxisCloneColor, - elevation = 0.dp - ) - }, - snackbarHost = { - scaffoldState.snackbarHostState - } - ) { innerPadding -> - Box(modifier = Modifier.padding(innerPadding)) { - PraxisSurface( - color = PraxisCloneColor, - modifier = Modifier - .padding(28.dp) - ) { - Column( - verticalArrangement = Arrangement.SpaceAround, - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .fillMaxHeight() - .fillMaxWidth() - ) { - Image( - painter = painterResource(id = R.drawable.gettingstarted), - contentDescription = "Logo", - Modifier - ) - TitleSubtitleText() - Spacer(Modifier.padding(8.dp)) - Column { - EmailMeMagicLink(composeNavigator) - Box(modifier = Modifier.height(12.dp)) - IWillSignInManually(composeNavigator) - } + snackbarHost = { + scaffoldState.snackbarHostState + } + ) { innerPadding -> + Box(modifier = Modifier.padding(innerPadding)) { + PraxisSurface( + color = PraxisCloneColor, + modifier = Modifier + .padding(28.dp) + ) { + Column( + verticalArrangement = Arrangement.SpaceAround, + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth() + ) { + Image( + painter = painterResource(id = R.drawable.gettingstarted), + contentDescription = "Logo", + Modifier + ) + TitleSubtitleText() + Spacer(Modifier.padding(8.dp)) + Column { + EmailMeMagicLink(composeNavigator) + Box(modifier = Modifier.height(12.dp)) + IWillSignInManually(composeNavigator) + } + + } + } } - } } - - } } From 2613fae086ec805fd691ceac819c2f2aee904f59 Mon Sep 17 00:00:00 2001 From: Shubham Singh Date: Thu, 6 Oct 2022 13:36:34 +0530 Subject: [PATCH 4/4] Mark classes with `@Immutable` --- .../praxis/commonui/keyboard/Keyboard.kt | 12 +++++++++--- .../praxis/data/local/model/SampleEntity.kt | 2 ++ .../praxis/navigator/NavigationCommand.kt | 9 ++++++--- .../feat/authentication/ui/model/FailureType.kt | 3 +++ .../praxis/feat/authentication/ui/model/LoginForm.kt | 5 +++-- .../java/com/praxis/feat/authentication/vm/AuthVM.kt | 7 ++++--- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/commonui/src/main/java/com/mutualmobile/praxis/commonui/keyboard/Keyboard.kt b/commonui/src/main/java/com/mutualmobile/praxis/commonui/keyboard/Keyboard.kt index 1192aa28..aec0747c 100644 --- a/commonui/src/main/java/com/mutualmobile/praxis/commonui/keyboard/Keyboard.kt +++ b/commonui/src/main/java/com/mutualmobile/praxis/commonui/keyboard/Keyboard.kt @@ -2,12 +2,18 @@ package com.mutualmobile.praxis.commonui.keyboard import android.graphics.Rect import android.view.ViewTreeObserver -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalView +@Immutable sealed class Keyboard { - data class Opened(var height: Int) : Keyboard() - object Closed : Keyboard() + @Immutable data class Opened(val height: Int) : Keyboard() + @Immutable object Closed : Keyboard() } @Composable diff --git a/data/src/main/java/com/mutualmobile/praxis/data/local/model/SampleEntity.kt b/data/src/main/java/com/mutualmobile/praxis/data/local/model/SampleEntity.kt index 57e4e047..e2416786 100644 --- a/data/src/main/java/com/mutualmobile/praxis/data/local/model/SampleEntity.kt +++ b/data/src/main/java/com/mutualmobile/praxis/data/local/model/SampleEntity.kt @@ -1,5 +1,6 @@ package com.mutualmobile.praxis.data.local.model +import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey @@ -7,6 +8,7 @@ import androidx.room.PrimaryKey internal const val SAMPLE_ENTITY_TABLE = "sample_entity_table" @Entity(tableName = SAMPLE_ENTITY_TABLE) +@Immutable data class SampleEntity( @PrimaryKey @ColumnInfo(name = "name") val name: String, @ColumnInfo(name = "cell") val phone: String diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt index 2c0b51bb..e7dda922 100644 --- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt +++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt @@ -1,20 +1,23 @@ package com.mutualmobile.praxis.navigator +import androidx.compose.runtime.Immutable import androidx.navigation.NavOptions +@Immutable sealed class NavigationCommand { object NavigateUp : NavigationCommand() } +@Immutable sealed class ComposeNavigationCommand : NavigationCommand() { - data class NavigateToRoute(val route: String, val options: NavOptions? = null) : + @Immutable data class NavigateToRoute(val route: String, val options: NavOptions? = null) : ComposeNavigationCommand() - data class NavigateUpWithResult( + @Immutable data class NavigateUpWithResult( val key: String, val result: T, val route: String? = null ) : ComposeNavigationCommand() - data class PopUpToRoute(val route: String, val inclusive: Boolean) : ComposeNavigationCommand() + @Immutable data class PopUpToRoute(val route: String, val inclusive: Boolean) : ComposeNavigationCommand() } \ No newline at end of file diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/FailureType.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/FailureType.kt index 89d998a1..320c6d8c 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/FailureType.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/FailureType.kt @@ -1,5 +1,8 @@ package com.praxis.feat.authentication.ui.model +import androidx.compose.runtime.Immutable + +@Immutable enum class FailureType(val message: String) { EMAIL_NOT_VALID(message = "Email is not valid"), PASSWORD_NOT_VALID(message = "Password should be at least 6 characters long") diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/LoginForm.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/LoginForm.kt index 4dc8b2c0..7b722e3f 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/LoginForm.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/ui/model/LoginForm.kt @@ -1,12 +1,13 @@ package com.praxis.feat.authentication.ui.model +import androidx.compose.runtime.Immutable import com.praxis.feat.authentication.services.Validatable -import android.util.Patterns import com.praxis.feat.authentication.ui.exceptions.FormValidationFailed import java.util.regex.Pattern -data class LoginForm(val email: String = "", var password: String = "") : Validatable { +@Immutable +data class LoginForm(val email: String = "", val password: String = "") : Validatable { override fun validate() { val pattern = emailRegex() if (!pattern.matcher(email).matches()) { diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt index 0a6d6312..aff75c47 100644 --- a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt +++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt @@ -1,6 +1,7 @@ package com.praxis.feat.authentication.vm import android.net.Uri +import androidx.compose.runtime.Immutable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -132,13 +133,13 @@ class AuthVM @Inject constructor( sealed class UiState { object Empty : UiState() - data class Streaming(val result: StreamingFile) : UiState() + @Immutable data class Streaming(val result: StreamingFile) : UiState() object LoadingState : UiState() - data class SuccessState( + @Immutable data class SuccessState( val authToken: String, ) : UiState() - data class ErrorState(val throwable: Throwable) : UiState() + @Immutable data class ErrorState(val throwable: Throwable) : UiState() } }