From b965c2d2fe134322bde8e1579bd0117d052fcfda Mon Sep 17 00:00:00 2001 From: guolindev Date: Sun, 26 Sep 2021 18:17:28 +0800 Subject: [PATCH] Fix bug https://github.com/guolindev/PermissionX/issues/51 --- .../permissionx/guolindev/request/BaseTask.kt | 3 ++ .../guolindev/request/PermissionBuilder.kt | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/permissionx/src/main/java/com/permissionx/guolindev/request/BaseTask.kt b/permissionx/src/main/java/com/permissionx/guolindev/request/BaseTask.kt index f8a488b..a2e7287 100644 --- a/permissionx/src/main/java/com/permissionx/guolindev/request/BaseTask.kt +++ b/permissionx/src/main/java/com/permissionx/guolindev/request/BaseTask.kt @@ -102,7 +102,10 @@ internal abstract class BaseTask(@JvmField var pb: PermissionBuilder) : ChainTas if (pb.requestCallback != null) { pb.requestCallback!!.onResult(deniedList.isEmpty(), ArrayList(pb.grantedPermissions), deniedList) } + // Remove the InvisibleFragment from current Activity after request finished. pb.removeInvisibleFragment() + // Restore the orientation after request finished since it's locked before. + pb.restoreOrientation() } } diff --git a/permissionx/src/main/java/com/permissionx/guolindev/request/PermissionBuilder.kt b/permissionx/src/main/java/com/permissionx/guolindev/request/PermissionBuilder.kt index 1eedee6..a0147b7 100644 --- a/permissionx/src/main/java/com/permissionx/guolindev/request/PermissionBuilder.kt +++ b/permissionx/src/main/java/com/permissionx/guolindev/request/PermissionBuilder.kt @@ -16,7 +16,10 @@ package com.permissionx.guolindev.request import android.Manifest +import android.annotation.SuppressLint import android.app.Dialog +import android.content.pm.ActivityInfo +import android.content.res.Configuration import android.view.View import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity @@ -238,9 +241,11 @@ class PermissionBuilder( */ fun request(callback: RequestCallback?) { requestCallback = callback - // Build the request chain. - // RequestNormalPermissions runs first. - // Then RequestBackgroundLocationPermission runs. + // Lock the orientation when requesting permissions, or callback maybe missed due to + // activity destroyed. + lockOrientation() + + // Build the request chain. RequestNormalPermissions runs first, then RequestBackgroundLocationPermission runs. val requestChain = RequestChain() requestChain.addTaskToChain(RequestNormalPermissions(this)) requestChain.addTaskToChain(RequestBackgroundLocationPermission(this)) @@ -491,6 +496,26 @@ class PermissionBuilder( } } + /** + * Restore the screen orientation. Activity just behave as before locked. + */ + internal fun restoreOrientation() { + activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + } + + /** + * Lock the screen orientation. Activity couldn't rotate with sensor. + */ + @SuppressLint("SourceLockedOrientationActivity") + private fun lockOrientation() { + val orientation = activity.resources.configuration.orientation + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + } else if (orientation == Configuration.ORIENTATION_PORTRAIT) { + activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + } + } + /** * Go to your app's Settings page to let user turn on the necessary permissions. *