From 25bff0ea5ba44b5f777da76f3adf04c075ef1d27 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Sat, 31 Dec 2022 17:05:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=A2=AB=E6=B0=B8=E4=B9=85=E7=A6=81=E6=AD=A2=E5=90=8E=E4=BB=8D?= =?UTF-8?q?=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tieba/post/utils/PermissionUtils.kt | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/PermissionUtils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/PermissionUtils.kt index 5c502ca6..c41cfad1 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/PermissionUtils.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/PermissionUtils.kt @@ -1,7 +1,9 @@ package com.huanchengfly.tieba.post.utils +import android.app.Activity import android.content.Context import android.os.Build +import androidx.core.app.ActivityCompat import com.hjq.permissions.OnPermissionCallback import com.hjq.permissions.XXPermissions import com.huanchengfly.tieba.post.R @@ -215,6 +217,17 @@ class PermissionRequester(val context: Context) { if (XXPermissions.isGranted(context, permissions)) { onGranted?.invoke() } else { + val isFirstRequest = permissions.any { + !SharedPreferencesUtil.get(SharedPreferencesUtil.SP_PERMISSION) + .getBoolean("tried_request_${it}", false) + } + val showRationale = (context !is Activity) || permissions.any { + ActivityCompat.shouldShowRequestPermissionRationale( + context, + it + ) + } + val showDialog = isFirstRequest || showRationale val dialog = RequestPermissionTipDialog( context, PermissionUtils.Permission(permissions, description) @@ -233,15 +246,15 @@ class PermissionRequester(val context: Context) { } else { onDenied?.invoke() } - dialog.dismiss() + if (showDialog) dialog.dismiss() } override fun onDenied(permissions: List, never: Boolean) { onDenied?.invoke() - dialog.dismiss() + if (showDialog) dialog.dismiss() } }) - dialog.show() + if (showDialog) dialog.show() } } }