From e72f76b7d0d899e38268b12495e58006e02ae598 Mon Sep 17 00:00:00 2001 From: omtians9425 Date: Fri, 25 Feb 2022 00:27:49 +0900 Subject: [PATCH 1/2] Change LifecycleOwner for observing LiveData when PermissionsRequester is constructed in Fragment --- .../java/permissions/dispatcher/ktx/FragmentExtensions.kt | 4 ++++ .../permissions/dispatcher/ktx/PermissionsRequesterImpl.kt | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ktx/src/main/java/permissions/dispatcher/ktx/FragmentExtensions.kt b/ktx/src/main/java/permissions/dispatcher/ktx/FragmentExtensions.kt index 5cabcd58..39f0c6b0 100644 --- a/ktx/src/main/java/permissions/dispatcher/ktx/FragmentExtensions.kt +++ b/ktx/src/main/java/permissions/dispatcher/ktx/FragmentExtensions.kt @@ -25,6 +25,7 @@ fun Fragment.constructPermissionsRequest( ): PermissionsRequester = PermissionsRequesterImpl( permissions = permissions, activity = requireActivity(), + lifecycleOwner = this, onShowRationale = onShowRationale, onPermissionDenied = onPermissionDenied, onNeverAskAgain = onNeverAskAgain, @@ -50,6 +51,7 @@ fun Fragment.constructLocationPermissionRequest( ): PermissionsRequester = PermissionsRequesterImpl( permissions = permissions.filterByApiLevel(), activity = requireActivity(), + lifecycleOwner = this, onShowRationale = onShowRationale, onPermissionDenied = onPermissionDenied, onNeverAskAgain = onNeverAskAgain, @@ -74,6 +76,7 @@ fun Fragment.constructWriteSettingsPermissionRequest( ): PermissionsRequester = PermissionsRequesterImpl( permissions = arrayOf(Settings.ACTION_MANAGE_WRITE_SETTINGS), activity = requireActivity(), + lifecycleOwner = this, onShowRationale = onShowRationale, onPermissionDenied = onPermissionDenied, onNeverAskAgain = null, @@ -98,6 +101,7 @@ fun Fragment.constructSystemAlertWindowPermissionRequest( ): PermissionsRequester = PermissionsRequesterImpl( permissions = arrayOf(Settings.ACTION_MANAGE_OVERLAY_PERMISSION), activity = requireActivity(), + lifecycleOwner = this, onShowRationale = onShowRationale, onPermissionDenied = onPermissionDenied, onNeverAskAgain = null, diff --git a/ktx/src/main/java/permissions/dispatcher/ktx/PermissionsRequesterImpl.kt b/ktx/src/main/java/permissions/dispatcher/ktx/PermissionsRequesterImpl.kt index ee21cfda..422ef499 100644 --- a/ktx/src/main/java/permissions/dispatcher/ktx/PermissionsRequesterImpl.kt +++ b/ktx/src/main/java/permissions/dispatcher/ktx/PermissionsRequesterImpl.kt @@ -1,6 +1,7 @@ package permissions.dispatcher.ktx import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ViewModelProvider import permissions.dispatcher.PermissionUtils.shouldShowRequestPermissionRationale import java.lang.ref.WeakReference @@ -8,7 +9,8 @@ import java.lang.ref.WeakReference internal class PermissionsRequesterImpl( private val permissions: Array, private val activity: FragmentActivity, - private val onShowRationale: ShowRationaleFun?, + lifecycleOwner: LifecycleOwner = activity, + val onShowRationale: ShowRationaleFun?, private val onPermissionDenied: Fun?, private val requiresPermission: Fun, onNeverAskAgain: Fun?, @@ -24,7 +26,7 @@ internal class PermissionsRequesterImpl( init { viewModel.observe( - activity, + lifecycleOwner, // https://github.com/permissions-dispatcher/PermissionsDispatcher/issues/729 permissions.sortedArray().contentToString(), WeakReference(requiresPermission), From ddb6fccaf02fee738b7999d21d15bfbca9e67d26 Mon Sep 17 00:00:00 2001 From: omtians9425 Date: Fri, 25 Feb 2022 00:28:46 +0900 Subject: [PATCH 2/2] Use trailing lambda syntax for LiveData.observe --- .../permissions/dispatcher/ktx/PermissionRequestViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ktx/src/main/java/permissions/dispatcher/ktx/PermissionRequestViewModel.kt b/ktx/src/main/java/permissions/dispatcher/ktx/PermissionRequestViewModel.kt index 88d6db0c..7dc66d85 100644 --- a/ktx/src/main/java/permissions/dispatcher/ktx/PermissionRequestViewModel.kt +++ b/ktx/src/main/java/permissions/dispatcher/ktx/PermissionRequestViewModel.kt @@ -27,14 +27,14 @@ internal class PermissionRequestViewModel : ViewModel() { onPermissionDenied: WeakReference?, onNeverAskAgain: WeakReference? ) { - permissionRequestResult.observe(owner, { + permissionRequestResult.observe(owner) { when (it[key]?.getContentIfNotHandled()) { PermissionResult.GRANTED -> requiresPermission.get()?.invoke() PermissionResult.DENIED -> onPermissionDenied?.get()?.invoke() PermissionResult.DENIED_AND_DISABLED -> onNeverAskAgain?.get()?.invoke() else -> Unit } - }) + } } fun removeObservers(owner: LifecycleOwner) = permissionRequestResult.removeObservers(owner)