diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 59ad507e..f6ddd573 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -37,8 +37,8 @@ android { applicationId = "com.ratik.uttam.prod" minSdk = 24 targetSdk = 37 - versionCode = 21 - versionName = "4.4" + versionCode = 22 + versionName = "4.5" buildConfigField( "String", @@ -116,11 +116,9 @@ dependencies { // Compose val composeBom = platform(libs.androidx.compose.bom) implementation(composeBom) - androidTestImplementation(composeBom) - api(libs.bundles.compose.core) + implementation(libs.bundles.compose.core) implementation(libs.androidx.activity.compose) implementation(libs.androidx.hilt.navigation.compose) - implementation(libs.coil) implementation(libs.coil.compose) implementation(libs.androidx.compose.tooling.preview) debugImplementation(libs.androidx.compose.tooling) @@ -136,7 +134,7 @@ dependencies { ksp(libs.hilt.compiler) // Logging - api(libs.timber) + implementation(libs.timber) // Testing testImplementation(libs.junit) diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/extensions/FlowExtensions.kt b/app/src/main/kotlin/com/ratik/uttam/ui/extensions/FlowExtensions.kt index 7ceeee44..4379bf8f 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/extensions/FlowExtensions.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/extensions/FlowExtensions.kt @@ -4,8 +4,8 @@ import android.annotation.SuppressLint import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/feature/home/HomeScreen.kt b/app/src/main/kotlin/com/ratik/uttam/ui/feature/home/HomeScreen.kt index ae845192..f3ea1fe1 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/feature/home/HomeScreen.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/feature/home/HomeScreen.kt @@ -42,10 +42,9 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.core.content.FileProvider.getUriForFile import androidx.core.net.toUri -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import coil.request.ImageRequest import com.ratik.uttam.R -import com.ratik.uttam.core.Ignored import com.ratik.uttam.core.MessageState.Snack import com.ratik.uttam.core.contract.ViewEvent.DisplayMessage import com.ratik.uttam.core.contract.ViewEvent.Effect @@ -92,7 +91,7 @@ internal fun HomeScreen( Toast.makeText(context, event.message.message, Toast.LENGTH_SHORT).show() } - else -> Ignored + else -> Unit } } @@ -117,10 +116,18 @@ internal fun HomeScreen( } } - else -> Ignored + else -> Unit } } + val wallpaperShareText = + stringResource( + R.string.wallpaper_share_text, + state.currentWallpaper?.photographer?.name.orEmpty(), + state.currentWallpaper?.shareUrl.orEmpty(), + ) + val shareLabel = stringResource(R.string.share_label) + Box( modifier = Modifier @@ -151,17 +158,9 @@ internal fun HomeScreen( refreshWallpaper = { viewModel.onViewAction(RefreshWallpaper) }, shareWallpaper = { val shareIntent = Intent(Intent.ACTION_SEND) - val shareText = - String.format( - context.getString(R.string.wallpaper_share_text), - state.currentWallpaper?.photographer?.name.orEmpty(), - state.currentWallpaper?.shareUrl.orEmpty(), - ) shareIntent.setType("text/plain") - shareIntent.putExtra(Intent.EXTRA_TEXT, shareText) - context.startActivity( - createChooser(shareIntent, context.getString(R.string.share_label)), - ) + shareIntent.putExtra(Intent.EXTRA_TEXT, wallpaperShareText) + context.startActivity(createChooser(shareIntent, shareLabel)) }, ) diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/feature/landing/LandingScreen.kt b/app/src/main/kotlin/com/ratik/uttam/ui/feature/landing/LandingScreen.kt index 91ee3156..dbeb83ce 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/feature/landing/LandingScreen.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/feature/landing/LandingScreen.kt @@ -15,9 +15,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale.Companion.Crop import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.ratik.uttam.R -import com.ratik.uttam.core.Ignored import com.ratik.uttam.core.contract.ViewEvent.Navigate import com.ratik.uttam.ui.components.UttamButton import com.ratik.uttam.ui.extensions.collectAsEffect @@ -44,7 +43,7 @@ internal fun LandingScreen( is Onboarding -> navigateToOnboarding() } } - else -> Ignored + else -> Unit } } diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/feature/onboarding/OnboardingScreen.kt b/app/src/main/kotlin/com/ratik/uttam/ui/feature/onboarding/OnboardingScreen.kt index 7af560b2..b5dab9f6 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/feature/onboarding/OnboardingScreen.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/feature/onboarding/OnboardingScreen.kt @@ -41,11 +41,10 @@ import androidx.compose.ui.graphics.Color.Companion.White import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.rememberPermissionState import com.ratik.uttam.R -import com.ratik.uttam.core.Ignored import com.ratik.uttam.core.contract.ViewEvent.Navigate import com.ratik.uttam.ui.components.UttamText import com.ratik.uttam.ui.components.VerticalSpacer @@ -107,7 +106,7 @@ internal fun OnboardingScreen( } } - else -> Ignored + else -> Unit } } diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/feature/settings/SettingsScreen.kt b/app/src/main/kotlin/com/ratik/uttam/ui/feature/settings/SettingsScreen.kt index 2911c0f6..7b36073b 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/feature/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/feature/settings/SettingsScreen.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.ratik.uttam.Constants.EMAIL import com.ratik.uttam.R import com.ratik.uttam.ui.components.UttamText diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/feature/splash/SplashScreen.kt b/app/src/main/kotlin/com/ratik/uttam/ui/feature/splash/SplashScreen.kt index 3b71233d..53f0ef3e 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/feature/splash/SplashScreen.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/feature/splash/SplashScreen.kt @@ -8,9 +8,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.ratik.uttam.R -import com.ratik.uttam.core.Ignored import com.ratik.uttam.core.contract.ViewEvent.Navigate import com.ratik.uttam.ui.extensions.collectAsEffect import com.ratik.uttam.ui.feature.splash.SplashNavTarget.Home @@ -31,7 +30,7 @@ internal fun SplashScreen( is Landing -> navigateToLanding() } } - else -> Ignored + else -> Unit } } diff --git a/app/src/main/kotlin/com/ratik/uttam/ui/modifiers/Shimmer.kt b/app/src/main/kotlin/com/ratik/uttam/ui/modifiers/Shimmer.kt index 30664d7e..482db590 100644 --- a/app/src/main/kotlin/com/ratik/uttam/ui/modifiers/Shimmer.kt +++ b/app/src/main/kotlin/com/ratik/uttam/ui/modifiers/Shimmer.kt @@ -42,7 +42,7 @@ fun Modifier.shimmerBackground( end = Offset(translateAnimation + GRADIENT_OFFSET, translateAnimation + GRADIENT_OFFSET), tileMode = TileMode.Mirror, ) - return@composed this.then(background(brush = brush, shape = shape)) + return@composed background(brush = brush, shape = shape) } private const val ANIM_DURATION = 1500 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 12ba7ff2..4c8ba6e5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,26 +1,25 @@ [versions] # Core -kotlin = "2.2.10" -android-gradle-plugin = "9.1.1" +kotlin = "2.4.10" +android-gradle-plugin = "9.3.1" hilt = "2.60.1" -ksp = "2.3.7" +ksp = "2.3.11" # Android X work-manager = "2.11.2" -hilt-work = "1.3.0" -splashscreen = "1.0.1" +hilt-work = "1.4.0" +splashscreen = "1.2.0" # Compose -androidx-compose-bom = "2024.08.00" -androidx-activity = "1.9.1" -androidx-hilt-navigation-compose = "1.2.0" +androidx-compose-bom = "2026.08.00" +androidx-activity = "1.13.0" +androidx-hilt-navigation-compose = "1.4.0" coil = "2.7.0" -accompanist = "0.34.0" +accompanist = "0.37.3" # Networking okhttp = "4.12.0" retrofit = "2.11.0" -retrofit-converter-gson = "2.11.0" # Testing junit = "4.13.2" @@ -29,7 +28,7 @@ junit = "4.13.2" timber = "5.0.1" # Linting -spotless = "7.0.0.BETA2" +spotless = "7.2.1" ktlint = "0.50.0" [libraries] @@ -50,7 +49,6 @@ androidx-compose-tooling-preview = { group = "androidx.compose.ui", name = "ui-t androidx-compose-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" } androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt-navigation-compose" } -coil = { group = "io.coil-kt", name = "coil", version.ref = "coil" } coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } @@ -58,7 +56,7 @@ accompanist-permissions = { group = "com.google.accompanist", name = "accompanis # Networking okhttp-logging-inspector = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } -retrofit-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit-converter-gson" } +retrofit-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" } ## DI hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b95..eddabd2e 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5f38436f..c6f915a7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-all.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index f5feea6d..249efbb0 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -173,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -206,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..8508ef68 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,12 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -51,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/settings.gradle.kts b/settings.gradle.kts index 2a4f4e6e..d3051851 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,17 +6,12 @@ pluginManagement { } } -plugins { - id("com.gradle.enterprise") version "3.18" -} dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - maven { setUrl("https://jitpack.io") } google() mavenCentral() - gradlePluginPortal() } }