2019-04-20 05:29:45 +00:00
|
|
|
package code.name.monkey.retromusic.activities.base
|
2018-11-30 01:06:16 +00:00
|
|
|
|
|
|
|
import android.Manifest
|
|
|
|
import android.content.Intent
|
|
|
|
import android.content.pm.PackageManager
|
|
|
|
import android.media.AudioManager
|
|
|
|
import android.net.Uri
|
2019-12-30 11:01:50 +00:00
|
|
|
import android.os.Build
|
|
|
|
import android.os.Bundle
|
2018-11-30 01:06:16 +00:00
|
|
|
import android.provider.Settings
|
2019-12-30 11:01:50 +00:00
|
|
|
import android.view.KeyEvent
|
|
|
|
import android.view.View
|
2018-11-30 01:06:16 +00:00
|
|
|
import androidx.core.app.ActivityCompat
|
|
|
|
import code.name.monkey.appthemehelper.ThemeStore
|
2019-12-30 11:01:50 +00:00
|
|
|
import code.name.monkey.retromusic.R
|
2018-11-30 01:06:16 +00:00
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
|
|
|
|
abstract class AbsBaseActivity : AbsThemeActivity() {
|
2019-12-30 11:01:50 +00:00
|
|
|
private var hadPermissions: Boolean = false
|
|
|
|
private lateinit var permissions: Array<String>
|
|
|
|
private var permissionDeniedMessage: String? = null
|
|
|
|
|
|
|
|
open fun getPermissionsToRequest(): Array<String> {
|
|
|
|
return arrayOf()
|
|
|
|
}
|
|
|
|
|
|
|
|
protected fun setPermissionDeniedMessage(message: String) {
|
|
|
|
permissionDeniedMessage = message
|
|
|
|
}
|
|
|
|
|
|
|
|
fun getPermissionDeniedMessage(): String {
|
|
|
|
return if (permissionDeniedMessage == null) getString(R.string.permissions_denied) else permissionDeniedMessage!!
|
|
|
|
}
|
|
|
|
|
|
|
|
private val snackBarContainer: View
|
|
|
|
get() = window.decorView
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
volumeControlStream = AudioManager.STREAM_MUSIC
|
|
|
|
permissions = getPermissionsToRequest()
|
|
|
|
hadPermissions = hasPermissions()
|
|
|
|
permissionDeniedMessage = null
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPostCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onPostCreate(savedInstanceState)
|
|
|
|
if (!hasPermissions()) {
|
2020-09-12 19:39:46 +00:00
|
|
|
//requestPermissions()
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
|
|
|
val hasPermissions = hasPermissions()
|
|
|
|
if (hasPermissions != hadPermissions) {
|
|
|
|
hadPermissions = hasPermissions
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
|
onHasPermissionsChanged(hasPermissions)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected open fun onHasPermissionsChanged(hasPermissions: Boolean) {
|
|
|
|
// implemented by sub classes
|
2020-05-16 19:59:18 +00:00
|
|
|
println(hasPermissions)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
|
|
|
if (event.keyCode == KeyEvent.KEYCODE_MENU && event.action == KeyEvent.ACTION_UP) {
|
|
|
|
showOverflowMenu()
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return super.dispatchKeyEvent(event)
|
|
|
|
}
|
|
|
|
|
2020-04-24 18:11:14 +00:00
|
|
|
private fun showOverflowMenu() {
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected open fun requestPermissions() {
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
|
requestPermissions(permissions, PERMISSION_REQUEST)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected fun hasPermissions(): Boolean {
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
|
for (permission in permissions) {
|
|
|
|
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onRequestPermissionsResult(
|
|
|
|
requestCode: Int,
|
|
|
|
permissions: Array<String>,
|
|
|
|
grantResults: IntArray
|
|
|
|
) {
|
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
|
|
if (requestCode == PERMISSION_REQUEST) {
|
|
|
|
for (grantResult in grantResults) {
|
|
|
|
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
|
|
|
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
|
|
|
this@AbsBaseActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
//User has deny from permission dialog
|
|
|
|
Snackbar.make(
|
|
|
|
snackBarContainer,
|
|
|
|
permissionDeniedMessage!!,
|
|
|
|
Snackbar.LENGTH_INDEFINITE
|
|
|
|
)
|
|
|
|
.setAction(code.name.monkey.retromusic.R.string.action_grant) { requestPermissions() }
|
|
|
|
.setActionTextColor(ThemeStore.accentColor(this)).show()
|
|
|
|
} else {
|
|
|
|
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
|
|
|
Snackbar.make(
|
|
|
|
snackBarContainer,
|
|
|
|
permissionDeniedMessage!!,
|
|
|
|
Snackbar.LENGTH_INDEFINITE
|
|
|
|
).setAction(code.name.monkey.retromusic.R.string.action_settings) {
|
|
|
|
val intent = Intent()
|
|
|
|
intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
|
|
|
|
val uri = Uri.fromParts(
|
|
|
|
"package",
|
|
|
|
this@AbsBaseActivity.packageName,
|
|
|
|
null
|
|
|
|
)
|
|
|
|
intent.data = uri
|
|
|
|
startActivity(intent)
|
|
|
|
}.setActionTextColor(ThemeStore.accentColor(this)).show()
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
hadPermissions = true
|
2020-05-23 13:53:10 +00:00
|
|
|
onHasPermissionsChanged(true)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
const val PERMISSION_REQUEST = 100
|
|
|
|
}
|
2018-11-30 01:06:16 +00:00
|
|
|
}
|