Skip to content

Commit c81231f

Browse files
committed
feat: intercept onUserLeaveHint in WakeUpActivity to block Home and Recent buttons
1 parent 17d2f18 commit c81231f

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

app/src/main/java/com/hotbell/radio/ui/wakeup/WakeUpActivity.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ import androidx.core.view.WindowCompat
1414
import androidx.core.view.WindowInsetsCompat
1515
import androidx.core.view.WindowInsetsControllerCompat
1616
import android.view.KeyEvent
17+
import androidx.activity.viewModels
1718
import androidx.lifecycle.viewmodel.compose.viewModel
1819
import com.hotbell.radio.ui.theme.HotBellTheme
1920
import com.hotbell.radio.ui.theme.PitchBlack
2021

2122
class WakeUpActivity : ComponentActivity() {
2223

24+
private val viewModel: WakeUpViewModel by viewModels()
25+
2326
override fun onCreate(savedInstanceState: Bundle?) {
2427
super.onCreate(savedInstanceState)
2528

@@ -37,8 +40,6 @@ class WakeUpActivity : ComponentActivity() {
3740
val targetPhotoPath = intent.getStringExtra("EXTRA_TARGET_PHOTO_PATH")
3841

3942
setContent {
40-
val viewModel: WakeUpViewModel = viewModel()
41-
4243
// Trigger playback on launch
4344
androidx.compose.runtime.LaunchedEffect(Unit) {
4445
viewModel.startAlarm(this@WakeUpActivity, stationUuid, stationName, stationUrl)
@@ -118,4 +119,14 @@ class WakeUpActivity : ComponentActivity() {
118119
else -> super.onKeyUp(keyCode, event)
119120
}
120121
}
122+
123+
override fun onUserLeaveHint() {
124+
super.onUserLeaveHint()
125+
if (viewModel.isAlarmActive.value) {
126+
// The user pressed Home or Recent Apps. Bring the activity back to the front immediately.
127+
val i = android.content.Intent(this, WakeUpActivity::class.java)
128+
i.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK or android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP)
129+
startActivity(i)
130+
}
131+
}
121132
}

app/src/main/java/com/hotbell/radio/ui/wakeup/WakeUpViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class WakeUpViewModel(application: Application) : AndroidViewModel(application)
3838
private val _isFallbackActive = MutableStateFlow(false)
3939
val isFallbackActive: StateFlow<Boolean> = _isFallbackActive.asStateFlow()
4040

41+
private val _isAlarmActive = MutableStateFlow(true)
42+
val isAlarmActive: StateFlow<Boolean> = _isAlarmActive.asStateFlow()
43+
4144
// Snooze config
4245
private var snoozeDurationMin = 5
4346
private var maxSnoozeCount = 3
@@ -230,6 +233,7 @@ class WakeUpViewModel(application: Application) : AndroidViewModel(application)
230233
_canSnooze.value = currentSnoozeCount < maxSnoozeCount
231234

232235
android.util.Log.d("WakeUpViewModel", "Snoozing alarm ($currentSnoozeCount/$maxSnoozeCount) for $snoozeDurationMin min")
236+
_isAlarmActive.value = false
233237

234238
// Log snoozed event
235239
viewModelScope.launch {
@@ -281,6 +285,7 @@ class WakeUpViewModel(application: Application) : AndroidViewModel(application)
281285

282286
fun dismissAlarm(onDismissed: () -> Unit) {
283287
android.util.Log.d("WakeUpViewModel", "Dismissing alarm")
288+
_isAlarmActive.value = false
284289

285290
// Log dismissed event with response time
286291
val responseTime = System.currentTimeMillis() - alarmFiredTime

0 commit comments

Comments
 (0)