diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4395447..d3ff09f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,9 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -30,6 +33,13 @@ + + diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index e4938e8..0b667c8 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -12,4 +12,7 @@ android { } dependencies { implementation(project(":core:ui")) + + // Splash + implementation(libs.androidx.core.splashscreen) } diff --git a/core/designsystem/src/main/ic_launcher-playstore.png b/core/designsystem/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..c32cfb6 Binary files /dev/null and b/core/designsystem/src/main/ic_launcher-playstore.png differ diff --git a/core/designsystem/src/main/res/drawable/ic_launcher_foreground.xml b/core/designsystem/src/main/res/drawable/ic_launcher_foreground.xml index 2b068d1..11490a4 100644 --- a/core/designsystem/src/main/res/drawable/ic_launcher_foreground.xml +++ b/core/designsystem/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,30 +1,64 @@ - - - - - - - - - - \ No newline at end of file + android:viewportWidth="146" + android:viewportHeight="146"> + + + + + + + + + + + + + + + + diff --git a/core/designsystem/src/main/res/drawable/ic_splash.xml b/core/designsystem/src/main/res/drawable/ic_splash.xml new file mode 100644 index 0000000..d0c822e --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_splash.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/core/designsystem/src/main/res/mipmap-anydpi/ic_launcher.xml b/core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 56% rename from core/designsystem/src/main/res/mipmap-anydpi/ic_launcher.xml rename to core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 6f3b755..7353dbd 100644 --- a/core/designsystem/src/main/res/mipmap-anydpi/ic_launcher.xml +++ b/core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,5 @@ - - - + + \ No newline at end of file diff --git a/core/designsystem/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 56% rename from core/designsystem/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f3b755..7353dbd 100644 --- a/core/designsystem/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ b/core/designsystem/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,5 @@ - - - + + \ No newline at end of file diff --git a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp index c209e78..a48126d 100644 Binary files a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp and b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_round.webp index b2dfe3d..4e844be 100644 Binary files a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp index 4f0f1d6..b0cb32b 100644 Binary files a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp and b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 62b611d..16d10b5 100644 Binary files a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp index 948a307..26617a1 100644 Binary files a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 1b9a695..0e46063 100644 Binary files a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 28d4b77..750efef 100644 Binary files a/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 9287f50..c8e52ef 100644 Binary files a/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index aa7d642..3a97e4f 100644 Binary files a/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 9126ae3..6ee2cfe 100644 Binary files a/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/core/designsystem/src/main/res/values/ic_launcher_background.xml b/core/designsystem/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..2f5e088 --- /dev/null +++ b/core/designsystem/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FEC44D + \ No newline at end of file diff --git a/core/designsystem/src/main/res/values/strings.xml b/core/designsystem/src/main/res/values/strings.xml index 94eab90..0c06268 100644 --- a/core/designsystem/src/main/res/values/strings.xml +++ b/core/designsystem/src/main/res/values/strings.xml @@ -1,5 +1,8 @@ - TelePigeon + 텔레피죤 + + + 카카오 로그인 메인 @@ -41,6 +44,13 @@ 완료하기 적용 확인하기 + + + 생존신고를 보내려면 꼭 필요해요! + \'텔레피죤\'에서 알림을 보내고자 합니다. + 알람 기능이 꺼져있으면 기능 사용이 어려워요 + 허용 안함 + 허용 diff --git a/core/designsystem/src/main/res/values/themes.xml b/core/designsystem/src/main/res/values/themes.xml index 09c9d6a..55527ea 100644 --- a/core/designsystem/src/main/res/values/themes.xml +++ b/core/designsystem/src/main/res/values/themes.xml @@ -93,4 +93,15 @@ @style/Theme.TelePigeon.BottomSheet + + + \ No newline at end of file diff --git a/feature/build.gradle.kts b/feature/build.gradle.kts index 2ff3504..170fbae 100644 --- a/feature/build.gradle.kts +++ b/feature/build.gradle.kts @@ -31,4 +31,7 @@ dependencies { // Navigation implementation(libs.androidx.navigation.fragment) implementation(libs.androidx.navigation.ui) + + // Splash + implementation(libs.androidx.core.splashscreen) } diff --git a/feature/src/main/java/com/dongguk/telepigeon/feature/login/LoginFragment.kt b/feature/src/main/java/com/dongguk/telepigeon/feature/login/LoginFragment.kt new file mode 100644 index 0000000..3681048 --- /dev/null +++ b/feature/src/main/java/com/dongguk/telepigeon/feature/login/LoginFragment.kt @@ -0,0 +1,29 @@ +package com.dongguk.telepigeon.feature.login + +import android.os.Bundle +import android.view.View +import androidx.navigation.fragment.findNavController +import com.dongguk.telepigeon.feature.R +import com.dongguk.telepigeon.feature.databinding.FragmentLoginBinding +import com.dongguk.telpigeon.core.ui.base.BindingFragment + +class LoginFragment : BindingFragment({ FragmentLoginBinding.inflate(it) }) { + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { + super.onViewCreated(view, savedInstanceState) + + setLayoutLoginKakaoClickListener() + } + + private fun setLayoutLoginKakaoClickListener() { + binding.layoutLoginKakao.setOnClickListener { + navigateToNotification() + } + } + + private fun navigateToNotification() { + findNavController().navigate(R.id.action_login_to_notification) + } +} diff --git a/feature/src/main/java/com/dongguk/telepigeon/feature/notification/NotificationFragment.kt b/feature/src/main/java/com/dongguk/telepigeon/feature/notification/NotificationFragment.kt new file mode 100644 index 0000000..4256156 --- /dev/null +++ b/feature/src/main/java/com/dongguk/telepigeon/feature/notification/NotificationFragment.kt @@ -0,0 +1,57 @@ +package com.dongguk.telepigeon.feature.notification + +import android.Manifest +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.view.View +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat +import androidx.navigation.fragment.findNavController +import com.dongguk.telepigeon.feature.R +import com.dongguk.telepigeon.feature.databinding.FragmentNotificationBinding +import com.dongguk.telpigeon.core.ui.base.BindingFragment + +class NotificationFragment : BindingFragment({ FragmentNotificationBinding.inflate(it) }) { + private val postNotificationPermissionRequest = + registerForActivityResult( + ActivityResultContracts.RequestPermission(), + ) { + navigateToHome() + } + + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { + super.onViewCreated(view, savedInstanceState) + + initLayout() + setBtnNotificationNoApplyClickListener() + setBtnNotificationApplyClickListener() + } + + private fun initLayout() { + if (ContextCompat.checkSelfPermission(requireContext().applicationContext, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { + navigateToHome() + } + } + + private fun setBtnNotificationNoApplyClickListener() { + binding.btnNotificationNoApply.setOnClickListener { + navigateToHome() + } + } + + private fun setBtnNotificationApplyClickListener() { + binding.btnNotificationApply.setOnClickListener { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + postNotificationPermissionRequest.launch(Manifest.permission.POST_NOTIFICATIONS) + } + } + } + + private fun navigateToHome() { + findNavController().navigate(R.id.action_notification_to_home) + } +} diff --git a/feature/src/main/java/com/dongguk/telepigeon/feature/splash/SplashActivity.kt b/feature/src/main/java/com/dongguk/telepigeon/feature/splash/SplashActivity.kt new file mode 100644 index 0000000..5037325 --- /dev/null +++ b/feature/src/main/java/com/dongguk/telepigeon/feature/splash/SplashActivity.kt @@ -0,0 +1,37 @@ +package com.dongguk.telepigeon.feature.splash + +import android.content.Intent +import android.os.Bundle +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.lifecycle.lifecycleScope +import com.dongguk.telepigeon.feature.MainActivity +import com.dongguk.telepigeon.feature.databinding.ActivitySplashBinding +import com.dongguk.telpigeon.core.ui.base.BindingActivity +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +class SplashActivity : BindingActivity({ ActivitySplashBinding.inflate(it) }) { + override fun onCreate(savedInstanceState: Bundle?) { + installSplashScreen() + super.onCreate(savedInstanceState) + loadSplashScreen() + } + + private fun loadSplashScreen() { + lifecycleScope.launch { + delay(SPLASH_SCREEN_DELAY_TIME) + navigateToMain() + } + } + + private fun navigateToMain() { + Intent(this@SplashActivity, MainActivity::class.java).apply { + startActivity(this) + finish() + } + } + + companion object { + const val SPLASH_SCREEN_DELAY_TIME = 1500L + } +} diff --git a/feature/src/main/res/layout/activity_splash.xml b/feature/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..4f8ba02 --- /dev/null +++ b/feature/src/main/res/layout/activity_splash.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/feature/src/main/res/layout/fragment_login.xml b/feature/src/main/res/layout/fragment_login.xml new file mode 100644 index 0000000..2f92202 --- /dev/null +++ b/feature/src/main/res/layout/fragment_login.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/feature/src/main/res/layout/fragment_notification.xml b/feature/src/main/res/layout/fragment_notification.xml new file mode 100644 index 0000000..155043f --- /dev/null +++ b/feature/src/main/res/layout/fragment_notification.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/feature/src/main/res/navigation/nav_all.xml b/feature/src/main/res/navigation/nav_all.xml index c2d8233..ec3484c 100644 --- a/feature/src/main/res/navigation/nav_all.xml +++ b/feature/src/main/res/navigation/nav_all.xml @@ -3,7 +3,30 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_all" - app:startDestination="@id/menu_home"> + app:startDestination="@id/menu_login"> + + + + + + + + + + tools:layout="@layout/fragment_calendar">