Move in-app screensaver cancellation into compose
This commit is contained in:
committed by
Niels van Velzen
parent
c7d8790e17
commit
8415802188
@@ -3,7 +3,6 @@ package org.jellyfin.androidtv.ui.browsing
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.compose.setContent
|
||||
@@ -31,7 +30,6 @@ import org.jellyfin.androidtv.ui.screensaver.InAppScreensaver
|
||||
import org.jellyfin.androidtv.ui.settings.compat.MainActivitySettings
|
||||
import org.jellyfin.androidtv.ui.startup.StartupActivity
|
||||
import org.jellyfin.androidtv.util.applyTheme
|
||||
import org.jellyfin.androidtv.util.isMediaSessionKeyEvent
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import timber.log.Timber
|
||||
@@ -119,22 +117,15 @@ class MainActivity : FragmentActivity() {
|
||||
}
|
||||
|
||||
// Forward key events to fragments
|
||||
|
||||
private fun Fragment.onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
var result = childFragmentManager.fragments.any { it.onKeyEvent(keyCode, event) }
|
||||
if (!result && this is View.OnKeyListener) result = onKey(currentFocus, keyCode, event)
|
||||
return result
|
||||
}
|
||||
|
||||
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
// Ignore the key event that closes the screensaver
|
||||
if (interactionTrackerViewModel.visible.value) {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = event?.action == KeyEvent.ACTION_UP, userInitiated = true)
|
||||
return true
|
||||
}
|
||||
|
||||
return supportFragmentManager.fragments
|
||||
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
|
||||
.any { it.onKeyEvent(keyCode, event) }
|
||||
}
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
|
||||
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)
|
||||
@@ -144,38 +135,4 @@ class MainActivity : FragmentActivity() {
|
||||
|
||||
override fun onKeyLongPress(keyCode: Int, event: KeyEvent?): Boolean =
|
||||
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
|
||||
|
||||
@Suppress("RestrictedApi") // False positive
|
||||
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
||||
// Ignore the key event that closes the screensaver
|
||||
if (!event.isMediaSessionKeyEvent() && interactionTrackerViewModel.visible.value) {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = event.action == KeyEvent.ACTION_UP, userInitiated = true)
|
||||
return true
|
||||
}
|
||||
|
||||
@Suppress("RestrictedApi") // False positive
|
||||
return super.dispatchKeyEvent(event)
|
||||
}
|
||||
|
||||
@Suppress("RestrictedApi") // False positive
|
||||
override fun dispatchKeyShortcutEvent(event: KeyEvent): Boolean {
|
||||
// Ignore the key event that closes the screensaver
|
||||
if (!event.isMediaSessionKeyEvent() && interactionTrackerViewModel.visible.value) {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = event.action == KeyEvent.ACTION_UP, userInitiated = true)
|
||||
return true
|
||||
}
|
||||
|
||||
@Suppress("RestrictedApi") // False positive
|
||||
return super.dispatchKeyShortcutEvent(event)
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
|
||||
// Ignore the touch event that closes the screensaver
|
||||
if (interactionTrackerViewModel.visible.value) {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = true, userInitiated = true)
|
||||
return true
|
||||
}
|
||||
|
||||
return super.dispatchTouchEvent(ev)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,10 +12,13 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.input.key.KeyEventType
|
||||
import androidx.compose.ui.input.key.onKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import org.jellyfin.androidtv.integration.dream.composable.DreamHost
|
||||
import org.jellyfin.androidtv.ui.InteractionTrackerViewModel
|
||||
import org.jellyfin.androidtv.ui.base.dialog.DialogBase
|
||||
import org.jellyfin.androidtv.util.isMediaSessionKeyEvent
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
|
||||
@Composable
|
||||
@@ -39,8 +42,13 @@ fun InAppScreensaver() {
|
||||
) {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = true, userInitiated = false)
|
||||
}
|
||||
.onKeyEvent {
|
||||
interactionTrackerViewModel.notifyInteraction(canCancel = true, userInitiated = true)
|
||||
.onKeyEvent { event ->
|
||||
if (!event.nativeKeyEvent.isMediaSessionKeyEvent()) {
|
||||
interactionTrackerViewModel.notifyInteraction(
|
||||
canCancel = event.type == KeyEventType.KeyUp,
|
||||
userInitiated = true,
|
||||
)
|
||||
}
|
||||
false
|
||||
}
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user