Skip to content

Commit fefac38

Browse files
authored
Merge pull request #33 from mintrocket/release/1.1.2
Release/1.1.2
2 parents 002d54e + 74a2950 commit fefac38

8 files changed

Lines changed: 47 additions & 20 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ allprojects {
3232
3333
// Target module's build.gradle:
3434
dependencies {
35-
implementation 'com.github.mintrocket.MintPermissions:mintpermissions:1.1.1'
35+
implementation 'com.github.mintrocket.MintPermissions:mintpermissions:1.1.2'
3636
3737
// if you need ready processing of permissions with dialogs
38-
implementation 'com.github.mintrocket.MintPermissions:mintpermissions-flows:1.1.1'
38+
implementation 'com.github.mintrocket.MintPermissions:mintpermissions-flows:1.1.2'
3939
}
4040
```
4141

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ buildscript {
99
app_version_code = 1
1010
app_version_name = "1.0"
1111
library_min_sdk_version = 15
12-
library_version_name = "1.1.1"
12+
library_version_name = "1.1.2"
1313

1414
/* tools, plugins, etc. */
1515
kotlin_version = '1.6.21'

flows/src/main/java/ru/mintrocket/lib/mintpermissions/flows/internal/MintPermissionsFlowManagerImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ internal class MintPermissionsFlowManagerImpl(
99
private val settingsManager: ManagerInitializer,
1010
) : MintPermissionsFlowManager {
1111

12+
@Volatile
1213
private var initCalled = false
1314

1415
override fun init(activity: ComponentActivity) {

library/src/main/java/ru/mintrocket/lib/mintpermissions/internal/MintPermissionsManagerImpl.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ import ru.mintrocket.lib.mintpermissions.tools.initializer.ManagerInitializer
66

77
internal class MintPermissionsManagerImpl(
88
private val requestManager: ManagerInitializer,
9-
private val statusManger: ManagerInitializer,
9+
private val statusManager: ManagerInitializer,
1010
) : MintPermissionsManager {
1111

12+
@Volatile
1213
private var initCalled = false
1314

1415
override fun init(activity: ComponentActivity) {
1516
require(!initCalled) {
1617
"Manager should only be initialized once per activity"
1718
}
1819
initCalled = true
19-
statusManger.init(activity)
20+
statusManager.init(activity)
2021
requestManager.init(activity)
2122
}
2223
}

library/src/main/java/ru/mintrocket/lib/mintpermissions/internal/MintPermissionsZygote.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import ru.mintrocket.lib.mintpermissions.MintPermissionsController
66
import ru.mintrocket.lib.mintpermissions.MintPermissionsManager
77
import ru.mintrocket.lib.mintpermissions.ext.initMintPermissionsManager
88
import ru.mintrocket.lib.mintpermissions.internal.requests.PermissionsRequestConsumer
9-
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusManger
9+
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusManager
1010
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusProvider
1111
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusUpdater
1212
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusesController
@@ -41,8 +41,8 @@ internal object MintPermissionsZygote {
4141
MintPermissionsControllerImpl(requestsZygote.controller, statusesController)
4242
}
4343

44-
private fun createStatusManger(): StatusManger {
45-
return StatusManger(statusUpdater)
44+
private fun createStatusManager(): StatusManager {
45+
return StatusManager(statusUpdater)
4646
}
4747

4848
val controller: MintPermissionsController by lazy { permissionsControllerImpl }
@@ -58,7 +58,7 @@ internal object MintPermissionsZygote {
5858

5959
fun createManager(): MintPermissionsManager {
6060
val queueManager = requestsZygote.createManager()
61-
val statusManger = createStatusManger()
62-
return MintPermissionsManagerImpl(queueManager, statusManger)
61+
val statusManager = createStatusManager()
62+
return MintPermissionsManagerImpl(queueManager, statusManager)
6363
}
6464
}

library/src/main/java/ru/mintrocket/lib/mintpermissions/internal/statuses/StatusManger.kt renamed to library/src/main/java/ru/mintrocket/lib/mintpermissions/internal/statuses/StatusManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package ru.mintrocket.lib.mintpermissions.internal.statuses
33
import androidx.activity.ComponentActivity
44
import ru.mintrocket.lib.mintpermissions.tools.initializer.ManagerInitializer
55

6-
internal class StatusManger(
6+
internal class StatusManager(
77
private val statusUpdater: StatusUpdater
88
) : ManagerInitializer {
99

library/src/main/java/ru/mintrocket/lib/mintpermissions/internal/statuses/StatusProvider.kt

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package ru.mintrocket.lib.mintpermissions.internal.statuses
22

33
import android.content.Context
4+
import android.util.Log
45
import androidx.activity.ComponentActivity
56
import androidx.core.app.ActivityCompat
67
import kotlinx.coroutines.CoroutineDispatcher
78
import kotlinx.coroutines.Dispatchers
89
import kotlinx.coroutines.withContext
10+
import ru.mintrocket.lib.mintpermissions.BuildConfig
911
import ru.mintrocket.lib.mintpermissions.internal.ext.getPackagePermissions
1012
import ru.mintrocket.lib.mintpermissions.internal.ext.isPermissionGranted
1113
import ru.mintrocket.lib.mintpermissions.models.MintPermission
@@ -29,7 +31,9 @@ internal class StatusProvider(
2931
): List<MintPermissionStatus> {
3032
return withContext(dispatcher) {
3133
permissions.map { permission ->
32-
val isGranted = activity.isPermissionGranted(permission)
34+
val isGranted = safePermission {
35+
activity.isPermissionGranted(permission)
36+
}
3337
toStatus(permission, isGranted, activity)
3438
}
3539
}
@@ -39,20 +43,41 @@ internal class StatusProvider(
3943
permission: MintPermission,
4044
isGranted: Boolean,
4145
activity: ComponentActivity
42-
) = when {
43-
isGranted -> MintPermissionStatus.Granted(permission)
44-
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission) -> {
45-
MintPermissionStatus.NeedsRationale(permission)
46+
): MintPermissionStatus {
47+
val isNeedsRationale by lazy {
48+
safePermission {
49+
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)
50+
}
4651
}
47-
getCachedPackagePermissions(activity).contains(permission) -> {
48-
MintPermissionStatus.Denied(permission)
52+
return when {
53+
isGranted -> MintPermissionStatus.Granted(permission)
54+
isNeedsRationale -> {
55+
MintPermissionStatus.NeedsRationale(permission)
56+
}
57+
getCachedPackagePermissions(activity).contains(permission) -> {
58+
MintPermissionStatus.Denied(permission)
59+
}
60+
else -> MintPermissionStatus.NotFound(permission)
4961
}
50-
else -> MintPermissionStatus.NotFound(permission)
5162
}
5263

5364
private fun getCachedPackagePermissions(context: Context): List<MintPermission> {
5465
val permissions = cachedPackagePermissions ?: context.getPackagePermissions()
5566
cachedPackagePermissions = permissions
5667
return permissions
5768
}
69+
70+
// Needs only for android 23. System can throw exception if declared permission not supported
71+
// find "unknown permission" in
72+
// https://android.googlesource.com/platform/frameworks/base/+/aa2ffea8baea65c13ac2b841b3d581f28261dd2b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
73+
private fun safePermission(block: () -> Boolean): Boolean {
74+
return try {
75+
block()
76+
} catch (ex: IllegalArgumentException) {
77+
if (BuildConfig.DEBUG) {
78+
Log.e("StatusProvider", "MintPermissions caught exception, but it is ok. $ex")
79+
}
80+
false
81+
}
82+
}
5883
}

tools/src/main/java/ru/mintrocket/lib/mintpermissions/tools/uirequests/internal/UiRequestViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import ru.mintrocket.lib.mintpermissions.tools.uirequests.models.UiResult
1414

1515
internal class UiRequestViewModel<T, R>(
1616
private val handle: SavedStateHandle,
17-
private val config: UiRequestConfig,
17+
config: UiRequestConfig,
1818
private val controller: UiRequestControllerImpl<T, R>
1919
) : ViewModel() {
2020

0 commit comments

Comments
 (0)