couple permission handling improvements
This commit is contained in:
parent
aded444048
commit
307de07f30
2 changed files with 35 additions and 53 deletions
commons/src/main/kotlin/com/simplemobiletools/commons
|
@ -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) {
|
||||||
|
|
|
@ -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 -> ""
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue