diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 278a60c..8c77551 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,9 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.ksp) + alias(libs.plugins.dagger.hilt) } android { @@ -18,6 +21,8 @@ android { vectorDrawables { useSupportLibrary = true } + + manifestPlaceholders["YANDEX_CLIENT_ID"] = "f1402bc7bc8b4502a39624d9acecc54c" } buildTypes { @@ -39,9 +44,7 @@ android { buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.1" - } + packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" @@ -50,20 +53,42 @@ android { } dependencies { + implementation(libs.androidx.navigation) + + // Yandex + implementation(libs.yandex.oauth) + + // Hilt + implementation(libs.dagger.hilt) + ksp(libs.dagger.hilt.compiler) + + // Room + implementation(libs.room.ktx) + implementation(libs.room.runtime) + annotationProcessor(libs.room.compiler) + ksp(libs.room.compiler) + + // Retrofit + implementation(libs.retrofit) + implementation(libs.retrofit.converter.gson) + implementation(libs.retrofit.converter.scalars) + implementation(libs.google.gson) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) + + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) + testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) - debugImplementation(libs.androidx.ui.tooling) - debugImplementation(libs.androidx.ui.test.manifest) } \ No newline at end of file diff --git a/app/release/app-release.aab b/app/release/app-release.aab new file mode 100644 index 0000000..b2a6836 Binary files /dev/null and b/app/release/app-release.aab differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0967ec5..b0e26b9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,9 +13,8 @@ android:theme="@style/Theme.Wallenc" tools:targetApi="31"> diff --git a/app/src/main/java/ru/freedominc/wallenc/MainActivity.kt b/app/src/main/java/ru/freedominc/wallenc/MainActivity.kt deleted file mode 100644 index e66d04a..0000000 --- a/app/src/main/java/ru/freedominc/wallenc/MainActivity.kt +++ /dev/null @@ -1,47 +0,0 @@ -package ru.freedominc.wallenc - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import ru.freedominc.wallenc.ui.theme.WallencTheme - -class MainActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - setContent { - WallencTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", - modifier = Modifier.padding(innerPadding) - ) - } - } - } - } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - WallencTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/freedominc/wallenc/ui/MainActivity.kt b/app/src/main/java/ru/freedominc/wallenc/ui/MainActivity.kt new file mode 100644 index 0000000..79fe254 --- /dev/null +++ b/app/src/main/java/ru/freedominc/wallenc/ui/MainActivity.kt @@ -0,0 +1,82 @@ +package ru.freedominc.wallenc.ui + +import android.os.Bundle +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Arrangement +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.material3.Button +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import com.yandex.authsdk.YandexAuthLoginOptions +import com.yandex.authsdk.YandexAuthOptions +import com.yandex.authsdk.YandexAuthResult +import com.yandex.authsdk.YandexAuthSdk +import com.yandex.authsdk.internal.strategy.LoginType +import ru.freedominc.wallenc.ui.theme.WallencTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + + val sdk = YandexAuthSdk.create(YandexAuthOptions(applicationContext, true)) + val launcher = + registerForActivityResult(sdk.contract) { result -> handleResult(result) } + val loginOptions = YandexAuthLoginOptions(LoginType.CHROME_TAB) + + setContent { + WallencTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + Greeting(modifier = Modifier.padding(innerPadding)) { + + launcher.launch(loginOptions) + } + } + } + } + } + + private fun handleResult(result: YandexAuthResult) { + when (result) { + is YandexAuthResult.Success -> Toast.makeText(applicationContext, "Success: ${result.token}", Toast.LENGTH_SHORT).show() + is YandexAuthResult.Failure -> Toast.makeText(applicationContext, "Success: ${result.exception}", Toast.LENGTH_SHORT).show() + YandexAuthResult.Cancelled -> Toast.makeText(applicationContext, "Cancel", Toast.LENGTH_SHORT).show() + } + } +} + +@Composable +fun Greeting(modifier: Modifier = Modifier, onClick: () -> Unit) { + Column( + modifier = modifier + .fillMaxWidth() + .fillMaxHeight(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Button(onClick = onClick) { + Text(text = "Login") + } + } +} + +@Preview(showBackground = true) +@Composable +fun GreetingPreview() { + WallencTheme { + Greeting(Modifier) { + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/freedominc/wallenc/ui/theme/Theme.kt b/app/src/main/java/ru/freedominc/wallenc/ui/theme/Theme.kt index 11bebb6..d661cc7 100644 --- a/app/src/main/java/ru/freedominc/wallenc/ui/theme/Theme.kt +++ b/app/src/main/java/ru/freedominc/wallenc/ui/theme/Theme.kt @@ -1,6 +1,5 @@ package ru.freedominc.wallenc.ui.theme -import android.app.Activity import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme diff --git a/build.gradle.kts b/build.gradle.kts index 922f551..4535f71 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,4 +2,7 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.ksp) apply false + alias(libs.plugins.dagger.hilt) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index df656ca..7036f70 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,15 +1,42 @@ [versions] agp = "8.6.0" -kotlin = "1.9.0" +kotlin = "2.0.20" coreKtx = "1.13.1" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" -lifecycleRuntimeKtx = "2.8.4" -activityCompose = "1.9.1" -composeBom = "2024.04.01" +lifecycleRuntimeKtx = "2.8.5" +activityCompose = "1.9.2" +composeBom = "2024.09.00" +navigation = "2.8.0" +yandexAuthSdk = "3.1.1" +daggerHilt = "2.47" +ksp = "2.0.20-1.0.24" +room = "2.6.1" +retrofit = "2.9.0" +gson = "2.10.1" [libraries] +androidx-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } + +# Yandex +yandex-oauth = { group = "com.yandex.android", name = "authsdk", version.ref = "yandexAuthSdk" } + +# Hilt +dagger-hilt = { group = "com.google.dagger", name = "hilt-android", version.ref = "daggerHilt" } +dagger-hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "daggerHilt" } + +# Room +room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } +room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } + +# Retrofit +retrofit = { group="com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit"} +retrofit-converter-scalars = { group="com.squareup.retrofit2", name = "converter-scalars", version.ref = "retrofit"} +retrofit-converter-gson = { group="com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit"} +google-gson = { group="com.google.code.gson", name = "gson", version.ref = "gson"} + androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } @@ -17,15 +44,20 @@ androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-co androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } +androidx-material3 = { group = "androidx.compose.material3", name = "material3" } + androidx-ui = { group = "androidx.compose.ui", name = "ui" } androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } -androidx-material3 = { group = "androidx.compose.material3", name = "material3" } + [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +dagger-hilt = { id = "com.google.dagger.hilt.android", version.ref = "daggerHilt" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }