瀏覽代碼

Ask permissions once. Fixes #892

inorichi 7 年之前
父節點
當前提交
17fe501a6d

+ 15 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt

@@ -1,5 +1,9 @@
 package eu.kanade.tachiyomi.ui.base.controller
 
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import android.os.Build
+import android.support.v4.content.ContextCompat
+import com.bluelinelabs.conductor.Controller
 import com.bluelinelabs.conductor.Router
 
 fun Router.popControllerWithTag(tag: String): Boolean {
@@ -9,4 +13,15 @@ fun Router.popControllerWithTag(tag: String): Boolean {
         return true
     }
     return false
+}
+
+fun Controller.requestPermissionsSafe(permissions: Array<String>, requestCode: Int) {
+    val activity = activity ?: return
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+        permissions.forEach { permission ->
+            if (ContextCompat.checkSelfPermission(activity, permission) != PERMISSION_GRANTED) {
+                requestPermissions(arrayOf(permission), requestCode)
+            }
+        }
+    }
 }

+ 2 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt

@@ -26,6 +26,7 @@ import eu.kanade.tachiyomi.source.SourceManager
 import eu.kanade.tachiyomi.ui.base.controller.RouterPagerAdapter
 import eu.kanade.tachiyomi.ui.base.controller.RxController
 import eu.kanade.tachiyomi.ui.base.controller.TabbedController
+import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
 import eu.kanade.tachiyomi.ui.manga.chapter.ChaptersController
 import eu.kanade.tachiyomi.ui.manga.info.MangaInfoController
 import eu.kanade.tachiyomi.ui.manga.track.TrackController
@@ -85,9 +86,7 @@ class MangaController : RxController, TabbedController {
 
         if (manga == null || source == null) return
 
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-            requestPermissions(arrayOf(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE), 301)
-        }
+        requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 301)
 
         with(view) {
             adapter = MangaDetailAdapter()

+ 2 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt

@@ -26,6 +26,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.ui.base.controller.DialogController
 import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag
+import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
 import eu.kanade.tachiyomi.util.getUriCompat
 import eu.kanade.tachiyomi.util.registerLocalReceiver
 import eu.kanade.tachiyomi.util.toast
@@ -52,9 +53,7 @@ class SettingsBackupController : SettingsController() {
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-            requestPermissions(arrayOf(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE), 500)
-        }
+        requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 500)
     }
 
     override fun onDestroy() {