diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt new file mode 100644 index 00000000..b3268131 --- /dev/null +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt @@ -0,0 +1,28 @@ +package me.weishu.kernelsu.ui.component + +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Box +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.key.KeyEvent +import androidx.compose.ui.input.key.onKeyEvent + +@Composable +fun KeyEventBlocker(predicate: (KeyEvent) -> Boolean) { + val requester = remember { FocusRequester() } + Box( + Modifier + .onKeyEvent { + predicate(it) + } + .focusRequester(requester) + .focusable() + ) + LaunchedEffect(Unit) { + requester.requestFocus() + } +} \ No newline at end of file diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt index b385b82b..2299f405 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt @@ -14,7 +14,10 @@ import androidx.compose.material.icons.filled.Save import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.key import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -24,11 +27,11 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.KeyEventBlocker import me.weishu.kernelsu.ui.util.LocalSnackbarHost import me.weishu.kernelsu.ui.util.installModule import me.weishu.kernelsu.ui.util.reboot import java.io.File -import java.lang.StringBuilder import java.text.SimpleDateFormat import java.util.* @@ -36,6 +39,7 @@ import java.util.* * @author weishu * @date 2023/1/1. */ +@OptIn(ExperimentalComposeUiApi::class) @Composable @Destination fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { @@ -107,6 +111,9 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { } ) { innerPadding -> + KeyEventBlocker { + it.key == Key.VolumeDown || it.key == Key.VolumeUp + } Column( modifier = Modifier .fillMaxSize(1f)