Skip to content

Commit

Permalink
Merge pull request #33 from mintrocket/release/1.1.2
Browse files Browse the repository at this point in the history
Release/1.1.2
  • Loading branch information
RadiationX authored Dec 26, 2022
2 parents 002d54e + 74a2950 commit fefac38
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 20 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ allprojects {
// Target module's build.gradle:
dependencies {
implementation 'com.github.mintrocket.MintPermissions:mintpermissions:1.1.1'
implementation 'com.github.mintrocket.MintPermissions:mintpermissions:1.1.2'
// if you need ready processing of permissions with dialogs
implementation 'com.github.mintrocket.MintPermissions:mintpermissions-flows:1.1.1'
implementation 'com.github.mintrocket.MintPermissions:mintpermissions-flows:1.1.2'
}
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ buildscript {
app_version_code = 1
app_version_name = "1.0"
library_min_sdk_version = 15
library_version_name = "1.1.1"
library_version_name = "1.1.2"

/* tools, plugins, etc. */
kotlin_version = '1.6.21'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ internal class MintPermissionsFlowManagerImpl(
private val settingsManager: ManagerInitializer,
) : MintPermissionsFlowManager {

@Volatile
private var initCalled = false

override fun init(activity: ComponentActivity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ import ru.mintrocket.lib.mintpermissions.tools.initializer.ManagerInitializer

internal class MintPermissionsManagerImpl(
private val requestManager: ManagerInitializer,
private val statusManger: ManagerInitializer,
private val statusManager: ManagerInitializer,
) : MintPermissionsManager {

@Volatile
private var initCalled = false

override fun init(activity: ComponentActivity) {
require(!initCalled) {
"Manager should only be initialized once per activity"
}
initCalled = true
statusManger.init(activity)
statusManager.init(activity)
requestManager.init(activity)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import ru.mintrocket.lib.mintpermissions.MintPermissionsController
import ru.mintrocket.lib.mintpermissions.MintPermissionsManager
import ru.mintrocket.lib.mintpermissions.ext.initMintPermissionsManager
import ru.mintrocket.lib.mintpermissions.internal.requests.PermissionsRequestConsumer
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusManger
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusManager
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusProvider
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusUpdater
import ru.mintrocket.lib.mintpermissions.internal.statuses.StatusesController
Expand Down Expand Up @@ -41,8 +41,8 @@ internal object MintPermissionsZygote {
MintPermissionsControllerImpl(requestsZygote.controller, statusesController)
}

private fun createStatusManger(): StatusManger {
return StatusManger(statusUpdater)
private fun createStatusManager(): StatusManager {
return StatusManager(statusUpdater)
}

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

fun createManager(): MintPermissionsManager {
val queueManager = requestsZygote.createManager()
val statusManger = createStatusManger()
return MintPermissionsManagerImpl(queueManager, statusManger)
val statusManager = createStatusManager()
return MintPermissionsManagerImpl(queueManager, statusManager)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ru.mintrocket.lib.mintpermissions.internal.statuses
import androidx.activity.ComponentActivity
import ru.mintrocket.lib.mintpermissions.tools.initializer.ManagerInitializer

internal class StatusManger(
internal class StatusManager(
private val statusUpdater: StatusUpdater
) : ManagerInitializer {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package ru.mintrocket.lib.mintpermissions.internal.statuses

import android.content.Context
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.core.app.ActivityCompat
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import ru.mintrocket.lib.mintpermissions.BuildConfig
import ru.mintrocket.lib.mintpermissions.internal.ext.getPackagePermissions
import ru.mintrocket.lib.mintpermissions.internal.ext.isPermissionGranted
import ru.mintrocket.lib.mintpermissions.models.MintPermission
Expand All @@ -29,7 +31,9 @@ internal class StatusProvider(
): List<MintPermissionStatus> {
return withContext(dispatcher) {
permissions.map { permission ->
val isGranted = activity.isPermissionGranted(permission)
val isGranted = safePermission {
activity.isPermissionGranted(permission)
}
toStatus(permission, isGranted, activity)
}
}
Expand All @@ -39,20 +43,41 @@ internal class StatusProvider(
permission: MintPermission,
isGranted: Boolean,
activity: ComponentActivity
) = when {
isGranted -> MintPermissionStatus.Granted(permission)
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission) -> {
MintPermissionStatus.NeedsRationale(permission)
): MintPermissionStatus {
val isNeedsRationale by lazy {
safePermission {
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)
}
}
getCachedPackagePermissions(activity).contains(permission) -> {
MintPermissionStatus.Denied(permission)
return when {
isGranted -> MintPermissionStatus.Granted(permission)
isNeedsRationale -> {
MintPermissionStatus.NeedsRationale(permission)
}
getCachedPackagePermissions(activity).contains(permission) -> {
MintPermissionStatus.Denied(permission)
}
else -> MintPermissionStatus.NotFound(permission)
}
else -> MintPermissionStatus.NotFound(permission)
}

private fun getCachedPackagePermissions(context: Context): List<MintPermission> {
val permissions = cachedPackagePermissions ?: context.getPackagePermissions()
cachedPackagePermissions = permissions
return permissions
}

// Needs only for android 23. System can throw exception if declared permission not supported
// find "unknown permission" in
// https://android.googlesource.com/platform/frameworks/base/+/aa2ffea8baea65c13ac2b841b3d581f28261dd2b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
private fun safePermission(block: () -> Boolean): Boolean {
return try {
block()
} catch (ex: IllegalArgumentException) {
if (BuildConfig.DEBUG) {
Log.e("StatusProvider", "MintPermissions caught exception, but it is ok. $ex")
}
false
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import ru.mintrocket.lib.mintpermissions.tools.uirequests.models.UiResult

internal class UiRequestViewModel<T, R>(
private val handle: SavedStateHandle,
private val config: UiRequestConfig,
config: UiRequestConfig,
private val controller: UiRequestControllerImpl<T, R>
) : ViewModel() {

Expand Down

0 comments on commit fefac38

Please sign in to comment.