From b85ece440bb8c307d47ee9c49cf2fa5dc14dbd8a Mon Sep 17 00:00:00 2001 From: weishu Date: Sat, 1 Jul 2023 12:13:19 +0800 Subject: [PATCH] manager: show context menu on touch position --- .../weishu/kernelsu/ui/screen/AppProfile.kt | 32 +++++++++++++++---- .../src/main/res/values-zh-rCN/strings.xml | 3 ++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt index e06ef0d3..89be4c48 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt @@ -3,11 +3,12 @@ package me.weishu.kernelsu.ui.screen import android.util.Log import androidx.annotation.StringRes import androidx.compose.animation.Crossfade -import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -42,10 +43,14 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import coil.request.ImageRequest @@ -302,16 +307,29 @@ private fun ProfileBox( private fun AppMenuBox(packageName: String, content: @Composable () -> Unit) { var expanded by remember { mutableStateOf(false) } - Box { + var touchPoint: Offset by remember { mutableStateOf(Offset.Zero) } + val density = LocalDensity.current - Box(modifier = Modifier.clickable { - expanded = true - }) { - content() + BoxWithConstraints( + Modifier + .fillMaxSize() + .pointerInput(Unit) { + detectTapGestures { + touchPoint = it + expanded = true + } + } + ) { + + content() + + val (offsetX, offsetY) = with(density) { + (touchPoint.x.toDp()) to (touchPoint.y.toDp()) } DropdownMenu( expanded = expanded, + offset = DpOffset(offsetX, -offsetY), onDismissRequest = { expanded = false }, diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index a28da33f..4d5d65db 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -75,4 +75,7 @@ 正在下载模块:%s 开始下载:%s 发现新版本:%d,点击下载 + 启动 + 强制停止 + 重新启动