162 lines
5.8 KiB
Kotlin
162 lines
5.8 KiB
Kotlin
/*
|
|
* Copyright (c) 2020 Hemanth Savarla.
|
|
*
|
|
* Licensed under the GNU General Public License v3
|
|
*
|
|
* This is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details.
|
|
*
|
|
*/
|
|
package code.name.monkey.retromusic.activities.base
|
|
|
|
import android.Manifest
|
|
import android.content.Intent
|
|
import android.content.pm.PackageManager
|
|
import android.media.AudioManager
|
|
import android.net.Uri
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import android.provider.Settings
|
|
import android.view.KeyEvent
|
|
import android.view.View
|
|
import androidx.core.app.ActivityCompat
|
|
import code.name.monkey.appthemehelper.ThemeStore
|
|
import code.name.monkey.retromusic.R
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
abstract class AbsBaseActivity : AbsThemeActivity() {
|
|
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()) {
|
|
// requestPermissions()
|
|
}
|
|
}
|
|
|
|
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
|
|
println(hasPermissions)
|
|
}
|
|
|
|
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
|
if (event.keyCode == KeyEvent.KEYCODE_MENU && event.action == KeyEvent.ACTION_UP) {
|
|
showOverflowMenu()
|
|
return true
|
|
}
|
|
return super.dispatchKeyEvent(event)
|
|
}
|
|
|
|
private fun showOverflowMenu() {
|
|
}
|
|
|
|
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
|
|
onHasPermissionsChanged(true)
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
const val PERMISSION_REQUEST = 100
|
|
}
|
|
}
|