Skip to content

Commit 65ca619

Browse files
committed
#695 [feature] Double back press to exit app on MainScreen
1 parent 31b55a6 commit 65ca619

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

presentation/src/main/java/daily/dayo/presentation/activity/MainActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ class MainActivity : AppCompatActivity() {
4545
MainScreen(
4646
onAdRequest = { onRewardSuccess ->
4747
showAdIfAvailable(onRewardSuccess)
48-
}
48+
},
49+
onExit = { finish() }
4950
)
5051
}
5152
}

presentation/src/main/java/daily/dayo/presentation/screen/main/MainNavigator.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,13 @@ class MainNavigator(
212212
navController.navigatePostLikeUsers(postId = postId)
213213
}
214214

215-
fun navigateUp() {
216-
navController.navigateUp()
215+
fun navigateUp(): Boolean {
216+
return if (navController.previousBackStackEntry != null) {
217+
navController.navigateUp()
218+
true
219+
} else {
220+
false
221+
}
217222
}
218223

219224
@Composable

presentation/src/main/java/daily/dayo/presentation/screen/main/MainScreen.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package daily.dayo.presentation.screen.main
22

3+
import android.widget.Toast
4+
import androidx.activity.compose.BackHandler
35
import androidx.annotation.DrawableRes
46
import androidx.annotation.StringRes
57
import androidx.compose.animation.ExperimentalSharedTransitionApi
@@ -30,13 +32,15 @@ import androidx.compose.material3.SnackbarHostState
3032
import androidx.compose.runtime.Composable
3133
import androidx.compose.runtime.derivedStateOf
3234
import androidx.compose.runtime.getValue
35+
import androidx.compose.runtime.mutableLongStateOf
3336
import androidx.compose.runtime.mutableStateOf
3437
import androidx.compose.runtime.remember
3538
import androidx.compose.runtime.rememberCoroutineScope
3639
import androidx.compose.runtime.setValue
3740
import androidx.compose.ui.Alignment
3841
import androidx.compose.ui.Modifier
3942
import androidx.compose.ui.graphics.vector.ImageVector
43+
import androidx.compose.ui.platform.LocalContext
4044
import androidx.compose.ui.res.stringResource
4145
import androidx.compose.ui.res.vectorResource
4246
import androidx.compose.ui.tooling.preview.Preview
@@ -78,6 +82,7 @@ import kotlinx.coroutines.launch
7882
@Composable
7983
internal fun MainScreen(
8084
onAdRequest: (onRewardSuccess: () -> Unit) -> Unit,
85+
onExit: () -> Unit,
8186
navigator: MainNavigator = rememberMainNavigator(),
8287
profileViewModel: ProfileViewModel = hiltViewModel()
8388
) {
@@ -92,6 +97,22 @@ internal fun MainScreen(
9297
derivedStateOf { if (bottomSheetState.bottomSheetState.currentValue == SheetValue.Expanded) 0.6f else 0f }
9398
}
9499
val animatedDimAlpha by animateFloatAsState(targetValue = bottomSheetDimAlpha)
100+
val context = LocalContext.current
101+
var lastBackPressedTime by remember { mutableLongStateOf(0L) }
102+
val toast = remember { Toast.makeText(context, context.getString(R.string.main_finish_toast), Toast.LENGTH_SHORT) }
103+
104+
BackHandler {
105+
if (!navigator.navigateUp()) { // 뒤로갈 화면 없는 경우
106+
val currentTime = System.currentTimeMillis()
107+
if (currentTime - lastBackPressedTime < 2000) {
108+
toast?.cancel()
109+
onExit() // 앱 종료
110+
} else {
111+
lastBackPressedTime = currentTime
112+
toast?.show()
113+
}
114+
}
115+
}
95116

96117
SharedTransitionLayout {
97118
BottomSheetScaffold(

presentation/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
<string name="permission_fail_second">DENIED</string>
5656
<string name="permission_fail_final">EXPLAINED</string>
5757

58+
<!-- Main -->
59+
<string name="main_finish_toast">한 번 더 누르면 앱이 종료됩니다.</string>
60+
5861
<!-- OnBoarding -->
5962
<string name="onboarding_first_message">인기가 많은 다꾸들을 구경할 수 있어요</string>
6063
<string name="onboarding_second_message">내 취향의 다꾸러들을 팔로우하고 모아볼 수 있어요</string>

0 commit comments

Comments
 (0)