diff --git a/presentation/src/main/java/daily/dayo/presentation/activity/MainActivity.kt b/presentation/src/main/java/daily/dayo/presentation/activity/MainActivity.kt
index 678e8a4c..0c90dcb1 100644
--- a/presentation/src/main/java/daily/dayo/presentation/activity/MainActivity.kt
+++ b/presentation/src/main/java/daily/dayo/presentation/activity/MainActivity.kt
@@ -45,7 +45,8 @@ class MainActivity : AppCompatActivity() {
MainScreen(
onAdRequest = { onRewardSuccess ->
showAdIfAvailable(onRewardSuccess)
- }
+ },
+ onExit = { finish() }
)
}
}
diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/main/MainNavigator.kt b/presentation/src/main/java/daily/dayo/presentation/screen/main/MainNavigator.kt
index f74bd775..2177b76d 100644
--- a/presentation/src/main/java/daily/dayo/presentation/screen/main/MainNavigator.kt
+++ b/presentation/src/main/java/daily/dayo/presentation/screen/main/MainNavigator.kt
@@ -212,8 +212,13 @@ class MainNavigator(
navController.navigatePostLikeUsers(postId = postId)
}
- fun navigateUp() {
- navController.navigateUp()
+ fun navigateUp(): Boolean {
+ return if (navController.previousBackStackEntry != null) {
+ navController.navigateUp()
+ true
+ } else {
+ false
+ }
}
@Composable
diff --git a/presentation/src/main/java/daily/dayo/presentation/screen/main/MainScreen.kt b/presentation/src/main/java/daily/dayo/presentation/screen/main/MainScreen.kt
index 49a43dc1..c9fc510a 100644
--- a/presentation/src/main/java/daily/dayo/presentation/screen/main/MainScreen.kt
+++ b/presentation/src/main/java/daily/dayo/presentation/screen/main/MainScreen.kt
@@ -1,5 +1,7 @@
package daily.dayo.presentation.screen.main
+import android.widget.Toast
+import androidx.activity.compose.BackHandler
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.animation.ExperimentalSharedTransitionApi
@@ -30,6 +32,7 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -37,6 +40,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
@@ -78,6 +82,7 @@ import kotlinx.coroutines.launch
@Composable
internal fun MainScreen(
onAdRequest: (onRewardSuccess: () -> Unit) -> Unit,
+ onExit: () -> Unit,
navigator: MainNavigator = rememberMainNavigator(),
profileViewModel: ProfileViewModel = hiltViewModel()
) {
@@ -92,6 +97,22 @@ internal fun MainScreen(
derivedStateOf { if (bottomSheetState.bottomSheetState.currentValue == SheetValue.Expanded) 0.6f else 0f }
}
val animatedDimAlpha by animateFloatAsState(targetValue = bottomSheetDimAlpha)
+ val context = LocalContext.current
+ var lastBackPressedTime by remember { mutableLongStateOf(0L) }
+ val toast = remember { Toast.makeText(context, context.getString(R.string.main_finish_toast), Toast.LENGTH_SHORT) }
+
+ BackHandler {
+ if (!navigator.navigateUp()) { // 뒤로갈 화면 없는 경우
+ val currentTime = System.currentTimeMillis()
+ if (currentTime - lastBackPressedTime < 2000) {
+ toast?.cancel()
+ onExit() // 앱 종료
+ } else {
+ lastBackPressedTime = currentTime
+ toast?.show()
+ }
+ }
+ }
SharedTransitionLayout {
BottomSheetScaffold(
diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml
index 59f0ed44..5d3993ad 100644
--- a/presentation/src/main/res/values/strings.xml
+++ b/presentation/src/main/res/values/strings.xml
@@ -55,6 +55,9 @@
DENIED
EXPLAINED
+
+ 한 번 더 누르면 앱이 종료됩니다.
+
인기가 많은 다꾸들을 구경할 수 있어요
내 취향의 다꾸러들을 팔로우하고 모아볼 수 있어요