diff --git a/README.md b/README.md index 3a5538b..860205f 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Add this to your module's `build.gradle` file: ```gradle dependencies { - implementation 'com.afollestad.assent:core:3.0.0-RC2' + implementation 'com.afollestad.assent:core:3.0.0-RC3' } ``` @@ -155,7 +155,7 @@ Add this to your module's `build.gradle` file: ```gradle dependencies { - implementation 'com.afollestad.assent:rationales:3.0.0-RC2' + implementation 'com.afollestad.assent:rationales:3.0.0-RC3' } ``` @@ -196,7 +196,7 @@ Add this to your module's `build.gradle` file: ```gradle dependencies { - implementation 'com.afollestad.assent:coroutines:3.0.0-RC2' + implementation 'com.afollestad.assent:coroutines:3.0.0-RC3' } ``` diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 3e90dc4..ef4e6fe 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,11 @@ +3.0.0-RC3 + +* Quick fix-up around permanently denied detection! No longer reliant on rationale handler either. +* Added more methods to `AssentResult` to get granted, denied, and permanently denied permissions. +* More internal cleanup. + +--- + 3.0.0-RC2 * Detect permanently denied permissions! Changes to `AssentResult`'s structure, it also allows you diff --git a/core/src/main/java/com/afollestad/assent/AssentResult.kt b/core/src/main/java/com/afollestad/assent/AssentResult.kt index 3c00782..0ac2afd 100644 --- a/core/src/main/java/com/afollestad/assent/AssentResult.kt +++ b/core/src/main/java/com/afollestad/assent/AssentResult.kt @@ -100,7 +100,7 @@ class AssentResult( } override fun toString(): String { - return resultsMap.entries.joinToString(separator = ", ") { "${it.key}=>${it.value}" } + return resultsMap.entries.joinToString(separator = ", ") { "${it.key} -> ${it.value}" } } } diff --git a/core/src/main/java/com/afollestad/assent/internal/PermissionFragment.kt b/core/src/main/java/com/afollestad/assent/internal/PermissionFragment.kt index 116cbc4..bf45fe2 100644 --- a/core/src/main/java/com/afollestad/assent/internal/PermissionFragment.kt +++ b/core/src/main/java/com/afollestad/assent/internal/PermissionFragment.kt @@ -75,8 +75,9 @@ internal fun Fragment.onPermissionsResponse( permissions: Array, grantResults: IntArray ) { - val prefs = RealPrefs(context!!) - val shouldShowRationale = RealShouldShowRationale(activity!!, prefs) + val activity = activity ?: error("Fragment is not attached: $this") + val prefs = RealPrefs(activity) + val shouldShowRationale = RealShouldShowRationale(activity, prefs) val result = AssentResult( permissions = permissions.toPermissions(), grantResults = grantResults, diff --git a/core/src/test/java/com/afollestad/assent/ActivitiesTest.kt b/core/src/test/java/com/afollestad/assent/ActivitiesTest.kt index 5d15adc..f5cf2e8 100644 --- a/core/src/test/java/com/afollestad/assent/ActivitiesTest.kt +++ b/core/src/test/java/com/afollestad/assent/ActivitiesTest.kt @@ -15,7 +15,7 @@ */ package com.afollestad.assent -import android.content.pm.PackageManager +import android.content.SharedPreferences import android.content.pm.PackageManager.PERMISSION_DENIED import android.content.pm.PackageManager.PERMISSION_GRANTED import androidx.fragment.app.FragmentActivity @@ -39,6 +39,7 @@ import com.nhaarman.mockitokotlin2.atLeastOnce import com.nhaarman.mockitokotlin2.doAnswer import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.eq +import com.nhaarman.mockitokotlin2.isA import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify @@ -57,10 +58,12 @@ class ActivitiesTest { on { beginTransaction() } doReturn fragmentTransaction } - private val permissionFragment = mock() - private val responseQueue = MockResponseQueue(allowedPermissions, permissionFragment) - + private val sharedPrefsEditor = mock() + private val sharedPrefs = mock { + on { edit() } doReturn sharedPrefsEditor + } private val activity = mock { + on { getSharedPreferences(any(), any()) } doReturn sharedPrefs // FRAGMENT TRANSACTIONS on { supportFragmentManager } doReturn fragmentManager // CHECK PERMISSION @@ -68,17 +71,31 @@ class ActivitiesTest { val checkPermission = inv.getArgument(0) val parsedCheckPermission = Permission.parse(checkPermission) return@doAnswer if (allowedPermissions.contains(parsedCheckPermission)) { - PackageManager.PERMISSION_GRANTED + PERMISSION_GRANTED } else { - PackageManager.PERMISSION_DENIED + PERMISSION_DENIED } } } + private val permissionFragment = mock { + on { activity } doReturn activity + on { isAdded } doReturn true + } + private val responseQueue = MockResponseQueue(allowedPermissions, permissionFragment) + @Before fun setup() { allowedPermissions.clear() Assent.fragmentCreator = { permissionFragment } + doAnswer { invocation -> + val key: String = invocation.getArgument(0) + val value: Boolean = invocation.getArgument(1) + whenever(sharedPrefs.getBoolean(key, any())) + .doReturn(value) + }.whenever(sharedPrefsEditor) + .putBoolean(isA(), any()) + whenever(permissionFragment.perform(any())).thenCallRealMethod() whenever( permissionFragment.onRequestPermissionsResult(any(), any(), any()) diff --git a/core/src/test/java/com/afollestad/assent/FragmentsTest.kt b/core/src/test/java/com/afollestad/assent/FragmentsTest.kt index 51bed1e..ac8aea2 100644 --- a/core/src/test/java/com/afollestad/assent/FragmentsTest.kt +++ b/core/src/test/java/com/afollestad/assent/FragmentsTest.kt @@ -15,6 +15,7 @@ */ package com.afollestad.assent +import android.content.SharedPreferences import android.content.pm.PackageManager.PERMISSION_DENIED import android.content.pm.PackageManager.PERMISSION_GRANTED import androidx.fragment.app.Fragment @@ -36,6 +37,7 @@ import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.doAnswer import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.eq +import com.nhaarman.mockitokotlin2.isA import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify @@ -54,10 +56,12 @@ class FragmentsTest { on { beginTransaction() } doReturn fragmentTransaction } - private val permissionFragment = mock() - private val responseQueue = MockResponseQueue(allowedPermissions, permissionFragment) - + private val sharedPrefsEditor = mock() + private val sharedPrefs = mock { + on { edit() } doReturn sharedPrefsEditor + } private val activity = mock { + on { getSharedPreferences(any(), any()) } doReturn sharedPrefs // FRAGMENT TRANSACTIONS on { supportFragmentManager } doReturn fragmentManager // CHECK PERMISSION @@ -75,12 +79,27 @@ class FragmentsTest { on { fragmentManager } doReturn fragmentManager on { childFragmentManager } doReturn fragmentManager on { activity } doReturn activity + on { isAdded } doReturn true + } + + private val permissionFragment = mock { + on { activity } doReturn activity + on { isAdded } doReturn true } + private val responseQueue = MockResponseQueue(allowedPermissions, permissionFragment) @Before fun setup() { allowedPermissions.clear() Assent.fragmentCreator = { permissionFragment } + doAnswer { invocation -> + val key: String = invocation.getArgument(0) + val value: Boolean = invocation.getArgument(1) + whenever(sharedPrefs.getBoolean(key, any())) + .doReturn(value) + }.whenever(sharedPrefsEditor) + .putBoolean(isA(), any()) + whenever(permissionFragment.perform(any())).thenCallRealMethod() whenever( permissionFragment.onRequestPermissionsResult(any(), any(), any()) diff --git a/dependencies.gradle b/dependencies.gradle index ac6f9b6..29b065a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,8 +2,8 @@ ext.versions = [ min_sdk: 14, compile_sdk: 29, build_tools: "29.0.0", - publish_version: "3.0.0-RC2", - publish_version_code: 22 + publish_version: "3.0.0-RC3", + publish_version_code: 23 ] ext.deps = [