From 399cb29dd5657c8537ea1f159586e8ec82d284a4 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 4 Feb 2018 11:02:07 +0800 Subject: [PATCH] feat: permission checking dialog --- .../scriptdroid/ui/main/MainActivity.java | 33 +++++++++++++++---- app/src/main/res/values/strings.xml | 3 ++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java index dfadbfa5..71c55869 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java @@ -3,10 +3,13 @@ package com.stardust.scriptdroid.ui.main; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; +import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -38,6 +41,8 @@ import com.stardust.scriptdroid.ui.main.sample.SampleListFragment_; import com.stardust.scriptdroid.ui.main.scripts.MyScriptListFragment_; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.app.ThemeColorMaterialDialog; +import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; import com.stardust.util.DeveloperUtils; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.ui.BaseActivity; @@ -84,6 +89,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkPermissions(); + showAccessibilitySettingPromptIfDisabled(); mVersionGuard = new VersionGuard(this); showAnnunciationIfNeeded(); EventBus.getDefault().register(this); @@ -120,7 +126,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega private void checkPermissions() { checkPermission(Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE); - showAccessibilitySettingPromptIfDisabled(); } private void showAccessibilitySettingPromptIfDisabled() { @@ -220,13 +225,29 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - int i = Arrays.asList(permissions).indexOf(Manifest.permission.READ_EXTERNAL_STORAGE); - if (i < 0) { - return; - } - if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) { StorageFileProvider.getDefault().notifyStoragePermissionGranted(); } + + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED) { + new ThemeColorMaterialDialogBuilder(this) + .title(R.string.text_no_phone_state_permission) + .content(R.string.info_no_phone_state_permission) + .positiveText(R.string.text_request_permission) + .negativeText(R.string.text_exit) + .cancelable(false) + .onPositive(((dialog, which) -> checkPermissions())) + .onNegative((dialog, which) -> finish()) + .show(); + } + } + + private int getGrantResult(String permission, String[] permissions, int[] grantResults) { + int i = Arrays.asList(permissions).indexOf(permission); + if (i < 0) { + return 2; + } + return grantResults[i]; } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e13a7c97..922c8c8b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -339,4 +339,7 @@ 退出登录 操作失败,请稍后重试 稳定模式通过省略布局细节使脚本抓取布局时更稳定,但同时获取到的屏幕上的控件可能会减少。\n\n重新启动无障碍服务才能生效。 + 获取权限失败 :-( + 重新授予 + 软件需要显示启动页广告来维持服务器和软件的开发和维护,因此需要\"读取手机状态\"的权限。\n如果您不喜欢广告,可以在设置中设定广告每天只显示一次。