diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/AppScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/AppScreen.kt
index fd45258..28fe5b6 100644
--- a/app/src/main/java/org/nsh07/pomodoro/ui/AppScreen.kt
+++ b/app/src/main/java/org/nsh07/pomodoro/ui/AppScreen.kt
@@ -41,6 +41,7 @@ fun AppScreen(
showBrandTitle = showBrandTitle,
progress = { progress },
resetTimer = viewModel::resetTimer,
+ skipTimer = viewModel::skipTimer,
toggleTimer = viewModel::toggleTimer,
modifier = modifier
)
diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt
index ebb4cc4..93edf78 100644
--- a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt
+++ b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt
@@ -67,6 +67,7 @@ fun TimerScreen(
showBrandTitle: Boolean,
progress: () -> Float,
resetTimer: () -> Unit,
+ skipTimer: () -> Unit,
toggleTimer: () -> Unit,
modifier: Modifier = Modifier
) {
@@ -228,7 +229,7 @@ fun TimerScreen(
maxLines = 1
)
}
- val interactionSources = remember { List(2) { MutableInteractionSource() } }
+ val interactionSources = remember { List(3) { MutableInteractionSource() } }
ButtonGroup(
overflowIndicator = { state ->
FilledTonalIconButton(
@@ -243,11 +244,13 @@ fun TimerScreen(
containerColor = colorContainer
),
shapes = IconButtonDefaults.shapes(),
- modifier = Modifier.size(64.dp, 96.dp)
+ modifier = Modifier
+ .size(64.dp, 96.dp)
) {
Icon(
painterResource(R.drawable.more_vert_large),
- contentDescription = "More"
+ contentDescription = "More",
+ modifier = Modifier.size(32.dp)
)
}
},
@@ -263,10 +266,10 @@ fun TimerScreen(
checkedContentColor = onColor
),
shapes = IconButtonDefaults.toggleableShapes(),
- interactionSource = interactionSources[1],
+ interactionSource = interactionSources[0],
modifier = Modifier
.size(width = 128.dp, height = 96.dp)
- .animateWidth(interactionSources[1])
+ .animateWidth(interactionSources[0])
) {
if (uiState.timerRunning) {
Icon(
@@ -306,6 +309,7 @@ fun TimerScreen(
)
}
)
+
customItem(
{
FilledTonalIconButton(
@@ -314,10 +318,10 @@ fun TimerScreen(
containerColor = colorContainer
),
shapes = IconButtonDefaults.shapes(),
- interactionSource = interactionSources[0],
+ interactionSource = interactionSources[1],
modifier = Modifier
.size(96.dp)
- .animateWidth(interactionSources[0])
+ .animateWidth(interactionSources[1])
) {
Icon(
painterResource(R.drawable.restart_large),
@@ -342,6 +346,43 @@ fun TimerScreen(
)
}
)
+
+ customItem(
+ {
+ FilledTonalIconButton(
+ onClick = skipTimer,
+ colors = IconButtonDefaults.filledTonalIconButtonColors(
+ containerColor = colorContainer
+ ),
+ shapes = IconButtonDefaults.shapes(),
+ interactionSource = interactionSources[2],
+ modifier = Modifier
+ .size(64.dp, 96.dp)
+ .animateWidth(interactionSources[2])
+ ) {
+ Icon(
+ painterResource(R.drawable.skip_next_large),
+ contentDescription = "Skip to next",
+ modifier = Modifier.size(32.dp)
+ )
+ }
+ },
+ { state ->
+ DropdownMenuItem(
+ leadingIcon = {
+ Icon(
+ painterResource(R.drawable.skip_next),
+ "Skip to next"
+ )
+ },
+ text = { Text("Skip to next") },
+ onClick = {
+ skipTimer()
+ state.dismiss()
+ }
+ )
+ }
+ )
}
}
@@ -374,8 +415,7 @@ fun TimerScreen(
@Preview(
showSystemUi = true,
- device = Devices.PIXEL_9_PRO,
-// widthDp = 200
+ device = Devices.PIXEL_9_PRO
)
@Composable
fun TimerScreenPreview() {
@@ -383,6 +423,6 @@ fun TimerScreenPreview() {
timeStr = "03:34", nextTimeStr = "5:00", timerMode = TimerMode.FOCUS, timerRunning = true
)
TomatoTheme {
- TimerScreen(uiState, false, { 0.3f }, {}, {})
+ TimerScreen(uiState, false, { 0.3f }, {}, {}, {})
}
}
diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/viewModel/UiViewModel.kt b/app/src/main/java/org/nsh07/pomodoro/ui/viewModel/UiViewModel.kt
index 73ecbc0..ef54923 100644
--- a/app/src/main/java/org/nsh07/pomodoro/ui/viewModel/UiViewModel.kt
+++ b/app/src/main/java/org/nsh07/pomodoro/ui/viewModel/UiViewModel.kt
@@ -54,6 +54,43 @@ class UiViewModel : ViewModel() {
}
}
+ fun skipTimer() {
+ startTime = 0L
+ pauseTime = 0L
+ pauseDuration = 0L
+ cycles = (cycles + 1) % 8
+
+ if (cycles % 2 == 0) {
+ _time.update { focusTime }
+ _uiState.update { currentState ->
+ currentState.copy(
+ timerMode = TimerMode.FOCUS,
+ timeStr = millisecondsToStr(time.value),
+ totalTime = time.value,
+ nextTimerMode = if (cycles == 6) TimerMode.LONG_BREAK else TimerMode.SHORT_BREAK,
+ nextTimeStr = if (cycles == 6) millisecondsToStr(
+ longBreakTime
+ ) else millisecondsToStr(
+ shortBreakTime
+ )
+ )
+ }
+ } else {
+ val long = cycles == 7
+ _time.update { if (long) longBreakTime else shortBreakTime }
+
+ _uiState.update { currentState ->
+ currentState.copy(
+ timerMode = if (long) TimerMode.LONG_BREAK else TimerMode.SHORT_BREAK,
+ timeStr = millisecondsToStr(time.value),
+ totalTime = time.value,
+ nextTimerMode = TimerMode.FOCUS,
+ nextTimeStr = millisecondsToStr(focusTime)
+ )
+ }
+ }
+ }
+
fun toggleTimer() {
if (uiState.value.timerRunning) {
_uiState.update { currentState ->
@@ -85,7 +122,7 @@ class UiViewModel : ViewModel() {
startTime = 0L
pauseTime = 0L
pauseDuration = 0L
- cycles++
+ cycles = (cycles + 1) % 8
if (cycles % 2 == 0) {
_time.update { focusTime }
@@ -94,8 +131,8 @@ class UiViewModel : ViewModel() {
timerMode = TimerMode.FOCUS,
timeStr = millisecondsToStr(time.value),
totalTime = time.value,
- nextTimerMode = if (cycles % 6 == 0) TimerMode.LONG_BREAK else TimerMode.SHORT_BREAK,
- nextTimeStr = if (cycles % 6 == 0) millisecondsToStr(
+ nextTimerMode = if (cycles == 6) TimerMode.LONG_BREAK else TimerMode.SHORT_BREAK,
+ nextTimeStr = if (cycles == 6) millisecondsToStr(
longBreakTime
) else millisecondsToStr(
shortBreakTime
@@ -103,7 +140,7 @@ class UiViewModel : ViewModel() {
)
}
} else {
- val long = cycles % 7 == 0
+ val long = cycles == 7
_time.update { if (long) longBreakTime else shortBreakTime }
_uiState.update { currentState ->
diff --git a/app/src/main/res/drawable/skip_next.xml b/app/src/main/res/drawable/skip_next.xml
new file mode 100644
index 0000000..b344f09
--- /dev/null
+++ b/app/src/main/res/drawable/skip_next.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/skip_next_large.xml b/app/src/main/res/drawable/skip_next_large.xml
new file mode 100644
index 0000000..c8fbc0d
--- /dev/null
+++ b/app/src/main/res/drawable/skip_next_large.xml
@@ -0,0 +1,13 @@
+
+
+
+
+