From bb5b8b615e66644531304dcabaf8326dafb32377 Mon Sep 17 00:00:00 2001 From: ksw4015 Date: Tue, 24 Sep 2024 13:41:50 +0900 Subject: [PATCH 1/2] feat: create SplashActivity *change launch activity --- app/src/main/AndroidManifest.xml | 5 ++- .../presentation/main/MainActivity.kt | 1 - .../presentation/splash/SplashActivity.kt | 36 +++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f54d30a..e858181 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,10 +10,9 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.VisitKorea" - tools:targetApi="31"> + android:theme="@style/Theme.VisitKorea"> diff --git a/app/src/main/java/kr/ksw/visitkorea/presentation/main/MainActivity.kt b/app/src/main/java/kr/ksw/visitkorea/presentation/main/MainActivity.kt index c0e70fc..82450ec 100644 --- a/app/src/main/java/kr/ksw/visitkorea/presentation/main/MainActivity.kt +++ b/app/src/main/java/kr/ksw/visitkorea/presentation/main/MainActivity.kt @@ -16,7 +16,6 @@ import kr.ksw.visitkorea.presentation.ui.theme.VisitKoreaTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - enableEdgeToEdge() setContent { VisitKoreaTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> diff --git a/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt b/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt new file mode 100644 index 0000000..d95c374 --- /dev/null +++ b/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt @@ -0,0 +1,36 @@ +package kr.ksw.visitkorea.presentation.splash + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.sp +import kr.ksw.visitkorea.presentation.ui.theme.VisitKoreaTheme + +class SplashActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + VisitKoreaTheme { + Surface { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "Splash Screen", + fontSize = 24.sp + ) + } + } + } + } + } +} \ No newline at end of file From 868a9ca765de6efa13c6b4f4cc8d40ae1e9de954 Mon Sep 17 00:00:00 2001 From: ksw4015 Date: Tue, 24 Sep 2024 15:20:22 +0900 Subject: [PATCH 2/2] feat: add reqeust loacation permission --- app/build.gradle.kts | 3 ++ app/src/main/AndroidManifest.xml | 6 +++ .../presentation/splash/SplashActivity.kt | 47 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + gradle/libs.versions.toml | 3 ++ 5 files changed, 61 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aa4aa61..58dcc39 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,6 +52,9 @@ android { } dependencies { + // activity + implementation(libs.androidx.activity.ktx) + implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e858181..f721d25 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt b/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt index d95c374..e9bdc30 100644 --- a/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt +++ b/app/src/main/java/kr/ksw/visitkorea/presentation/splash/SplashActivity.kt @@ -1,8 +1,13 @@ package kr.ksw.visitkorea.presentation.splash +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle +import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -11,9 +16,27 @@ import androidx.compose.material3.Text import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.sp +import androidx.core.content.ContextCompat +import kr.ksw.visitkorea.R +import kr.ksw.visitkorea.presentation.main.MainActivity import kr.ksw.visitkorea.presentation.ui.theme.VisitKoreaTheme class SplashActivity : ComponentActivity() { + + private val locationPermissionLauncher = registerForActivityResult( + ActivityResultContracts.RequestMultiplePermissions() + ) { permissionMap -> + if(permissionMap[Manifest.permission.ACCESS_COARSE_LOCATION] != true && + permissionMap[Manifest.permission.ACCESS_FINE_LOCATION] != true) { + Toast.makeText( + this@SplashActivity, + getString(R.string.location_permission_denied_toast), + Toast.LENGTH_SHORT + ).show() + } + startMainActivity() + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { @@ -32,5 +55,29 @@ class SplashActivity : ComponentActivity() { } } } + checkPermission() + } + + private fun checkPermission() { + if(ContextCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_FINE_LOCATION + ) == PackageManager.PERMISSION_GRANTED) { + startMainActivity() + } else { + locationPermissionLauncher.launch(arrayOf( + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + )) + } + } + + private fun startMainActivity() { + startActivity(Intent( + this, + MainActivity::class.java + ).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK + }) } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7f8136..0743139 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ VisitKorea + + 위치 기반으로 검색하기 위해선 권한이 필요합니다. \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5798e53..8c5ddb2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,6 +7,7 @@ junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" lifecycleRuntimeKtx = "2.8.6" +activity = "1.9.2" activityCompose = "1.9.2" composeBom = "2024.09.02" @@ -35,6 +36,8 @@ androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-man androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activity" } + androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }