couple permission handling improvements

This commit is contained in:
tibbi 2017-10-21 17:26:34 +02:00
parent aded444048
commit 307de07f30
2 changed files with 35 additions and 53 deletions
commons/src/main/kotlin/com/simplemobiletools/commons

View file

@ -1,33 +1,32 @@
package com.simplemobiletools.commons.activities package com.simplemobiletools.commons.activities
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.annotation.TargetApi import android.annotation.TargetApi
import android.app.Activity import android.app.Activity
import android.bluetooth.BluetoothClass.Service.AUDIO
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.provider.DocumentsContract import android.provider.DocumentsContract
import android.support.v4.app.ActivityCompat import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v4.util.Pair import android.support.v4.util.Pair
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.view.MenuItem import android.view.MenuItem
import com.simplemobiletools.commons.R import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.asynctasks.CopyMoveTask import com.simplemobiletools.commons.asynctasks.CopyMoveTask
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.APP_LICENSES
import com.simplemobiletools.commons.helpers.APP_NAME
import com.simplemobiletools.commons.helpers.APP_VERSION_NAME
import com.simplemobiletools.commons.helpers.OPEN_DOCUMENT_TREE
import java.io.File import java.io.File
import java.util.* import java.util.*
open class BaseSimpleActivity : AppCompatActivity() { open class BaseSimpleActivity : AppCompatActivity() {
var copyMoveCallback: (() -> Unit)? = null var copyMoveCallback: (() -> Unit)? = null
var actionOnPermission: ((granted: Boolean) -> Unit)? = null var actionOnPermission: ((granted: Boolean) -> Unit)? = null
private val GENERIC_PERM_HANDLER = 100
companion object { companion object {
var funAfterSAFPermission: (() -> Unit)? = null var funAfterSAFPermission: (() -> Unit)? = null
@ -186,34 +185,21 @@ open class BaseSimpleActivity : AppCompatActivity() {
fun handlePermission(permissionId: Int, callback: (granted: Boolean) -> Unit) { fun handlePermission(permissionId: Int, callback: (granted: Boolean) -> Unit) {
actionOnPermission = null actionOnPermission = null
val permString = getPermissionString(permissionId) if (hasPermission(permissionId)) {
if (hasPermission(permString)) {
callback(true) callback(true)
} else { } else {
actionOnPermission = callback actionOnPermission = callback
ActivityCompat.requestPermissions(this, arrayOf(permString), 1) ActivityCompat.requestPermissions(this, arrayOf(getPermissionString(permissionId)), GENERIC_PERM_HANDLER)
} }
} }
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (grantResults.isNotEmpty()) { if (requestCode == GENERIC_PERM_HANDLER && grantResults.isNotEmpty()) {
actionOnPermission?.invoke(grantResults[0] == 0) actionOnPermission?.invoke(grantResults[0] == 0)
} }
} }
private fun hasPermission(permString: String) = ContextCompat.checkSelfPermission(this, permString) == PackageManager.PERMISSION_GRANTED
private fun getPermissionString(id: Int) = when (id) {
PERMISSION_READ_STORAGE -> Manifest.permission.READ_EXTERNAL_STORAGE
PERMISSION_WRITE_STORAGE -> Manifest.permission.WRITE_EXTERNAL_STORAGE
PERMISSION_CAMERA -> Manifest.permission.CAMERA
PERMISSION_RECORD_AUDIO -> Manifest.permission.RECORD_AUDIO
PERMISSION_READ_CONTACTS -> Manifest.permission.READ_CONTACTS
PERMISSION_WRITE_CALENDAR -> Manifest.permission.WRITE_CALENDAR
else -> ""
}
private val copyMoveListener = object : CopyMoveTask.CopyMoveListener { private val copyMoveListener = object : CopyMoveTask.CopyMoveListener {
override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) { override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean) {
if (copyOnly) { if (copyOnly) {

View file

@ -21,27 +21,17 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import com.github.ajalt.reprint.core.Reprint import com.github.ajalt.reprint.core.Reprint
import com.simplemobiletools.commons.R import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.helpers.BaseConfig import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.helpers.PREFS_KEY
import com.simplemobiletools.commons.views.* import com.simplemobiletools.commons.views.*
import kotlinx.android.synthetic.main.dialog_title.view.* import kotlinx.android.synthetic.main.dialog_title.view.*
fun Context.isOnMainThread() = Looper.myLooper() == Looper.getMainLooper() fun Context.isOnMainThread() = Looper.myLooper() == Looper.getMainLooper()
fun Context.getSharedPrefs() = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE) fun Context.getSharedPrefs() = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
fun Context.hasReadStoragePermission() = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
fun Context.hasWriteStoragePermission() = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
fun Context.hasCameraPermission() = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
fun Context.hasRecordAudioPermission() = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
fun Context.isAndroidFour() = Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH fun Context.isAndroidFour() = Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH
fun Context.isKitkatPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT fun Context.isKitkatPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
fun Context.isLollipopPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP fun Context.isLollipopPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
fun Context.isMarshmallowPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M fun Context.isMarshmallowPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
fun Context.isNougatPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N fun Context.isNougatPlus() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
fun Context.updateTextColors(viewGroup: ViewGroup, tmpTextColor: Int = 0, tmpAccentColor: Int = 0) { fun Context.updateTextColors(viewGroup: ViewGroup, tmpTextColor: Int = 0, tmpAccentColor: Int = 0) {
@ -52,33 +42,26 @@ fun Context.updateTextColors(viewGroup: ViewGroup, tmpTextColor: Int = 0, tmpAcc
(0 until cnt) (0 until cnt)
.map { viewGroup.getChildAt(it) } .map { viewGroup.getChildAt(it) }
.forEach { .forEach {
if (it is MyTextView) { when (it) {
it.setColors(textColor, accentColor, backgroundColor) is MyTextView -> it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MyAppCompatSpinner) { is MyAppCompatSpinner -> it.setColors(textColor, accentColor, backgroundColor)
it.setColors(textColor, accentColor, backgroundColor) is MySwitchCompat -> it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MySwitchCompat) { is MyCompatRadioButton -> it.setColors(textColor, accentColor, backgroundColor)
it.setColors(textColor, accentColor, backgroundColor) is MyAppCompatCheckbox -> it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MyCompatRadioButton) { is MyEditText -> it.setColors(textColor, accentColor, backgroundColor)
it.setColors(textColor, accentColor, backgroundColor) is MyFloatingActionButton -> it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MyAppCompatCheckbox) { is MySeekBar -> it.setColors(textColor, accentColor, backgroundColor)
it.setColors(textColor, accentColor, backgroundColor) is ViewGroup -> updateTextColors(it, textColor, accentColor)
} else if (it is MyEditText) {
it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MyFloatingActionButton) {
it.setColors(textColor, accentColor, backgroundColor)
} else if (it is MySeekBar) {
it.setColors(textColor, accentColor, backgroundColor)
} else if (it is ViewGroup) {
updateTextColors(it, textColor, accentColor)
} }
} }
} }
fun Context.getLinkTextColor(): Int { fun Context.getLinkTextColor(): Int {
return if (baseConfig.primaryColor == resources.getColor(R.color.color_primary)) return if (baseConfig.primaryColor == resources.getColor(R.color.color_primary)) {
baseConfig.primaryColor baseConfig.primaryColor
else } else {
baseConfig.textColor baseConfig.textColor
}
} }
fun Context.setupDialogStuff(view: View, dialog: AlertDialog, titleId: Int = 0) { fun Context.setupDialogStuff(view: View, dialog: AlertDialog, titleId: Int = 0) {
@ -148,3 +131,16 @@ fun Context.getLatestMediaId(uri: Uri = MediaStore.Images.Media.EXTERNAL_CONTENT
} }
return 0 return 0
} }
fun Context.hasPermission(permId: Int) = ContextCompat.checkSelfPermission(this, getPermissionString(permId)) == PackageManager.PERMISSION_GRANTED
fun Context.getPermissionString(id: Int) = when (id) {
PERMISSION_READ_STORAGE -> Manifest.permission.READ_EXTERNAL_STORAGE
PERMISSION_WRITE_STORAGE -> Manifest.permission.WRITE_EXTERNAL_STORAGE
PERMISSION_CAMERA -> Manifest.permission.CAMERA
PERMISSION_RECORD_AUDIO -> Manifest.permission.RECORD_AUDIO
PERMISSION_READ_CONTACTS -> Manifest.permission.READ_CONTACTS
PERMISSION_WRITE_CALENDAR -> Manifest.permission.WRITE_CALENDAR
else -> ""
}