add PermissionExt Test
This commit is contained in:
parent
9e883b4d79
commit
e9381c468b
|
|
@ -4,6 +4,11 @@
|
|||
package="luyao.ktx">
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||
<uses-permission android:name="android.permission.CAMERA"/>
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
|
@ -24,6 +29,7 @@
|
|||
<activity android:name="luyao.util.ktx.ui.ExtActivity"/>
|
||||
<activity android:name="luyao.util.ktx.ui.ToastExtActivity"/>
|
||||
<activity android:name="luyao.util.ktx.ui.IntentExtActivity"/>
|
||||
<activity android:name="luyao.util.ktx.ui.PermissionExtActivity"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
@ -15,6 +15,7 @@ class ExtActivity : CommonListActivity() {
|
|||
add(ItemBean("ToastExt", ToastExtActivity::class.java))
|
||||
add(ItemBean("AppExt", ToastExtActivity::class.java))
|
||||
add(ItemBean("IntentExt", IntentExtActivity::class.java))
|
||||
add(ItemBean("PermissionExt",PermissionExtActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package luyao.util.ktx.ui
|
||||
|
||||
import android.Manifest
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import kotlinx.android.synthetic.main.activity_permission_ext.*
|
||||
import luyao.ktx.R
|
||||
import luyao.util.ktx.base.BaseActivity
|
||||
import luyao.util.ktx.ext.goToAppInfoPage
|
||||
import luyao.util.ktx.ext.permission.PermissionRequest
|
||||
import luyao.util.ktx.ext.permission.request
|
||||
import luyao.util.ktx.ext.toast
|
||||
|
||||
/**
|
||||
* Created by luyao
|
||||
* on 2019/6/21 14:28
|
||||
*/
|
||||
class PermissionExtActivity : BaseActivity() {
|
||||
|
||||
override fun getLayoutResId() = R.layout.activity_permission_ext
|
||||
|
||||
override fun initView() {
|
||||
requestCamera.setOnClickListener { requestCameraPermission() }
|
||||
requestCalendarAndAudio.setOnClickListener { requestCalendarAndAudioPermission() }
|
||||
}
|
||||
|
||||
override fun initData() {
|
||||
}
|
||||
|
||||
private fun requestCameraPermission() {
|
||||
request(Manifest.permission.CAMERA) {
|
||||
onGranted { toast("onGranted") }
|
||||
onDenied { toast("onDenied") }
|
||||
onShowRationale { showRationale(it) }
|
||||
onNeverAskAgain { goToAppInfoPage() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun showRationale(request: PermissionRequest) {
|
||||
MaterialDialog(this).show {
|
||||
title = "Request Permission"
|
||||
message(text = "We need permission to provide normal service. Do you agree ?")
|
||||
positiveButton(R.string.agree) { request.retry() }
|
||||
negativeButton(R.string.disagree)
|
||||
}
|
||||
}
|
||||
|
||||
private fun requestCalendarAndAudioPermission() {
|
||||
request(Manifest.permission.READ_CALENDAR, Manifest.permission.RECORD_AUDIO) {
|
||||
onGranted { toast("onGranted") }
|
||||
onDenied { toast("onDenied") }
|
||||
onShowRationale { showRationale(it) }
|
||||
onNeverAskAgain { goToAppInfoPage() }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include layout="@layout/title_layout"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/requestCamera"
|
||||
style="@style/NormalButton"
|
||||
android:text="request Camera"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/requestCalendarAndAudio"
|
||||
style="@style/NormalButton"
|
||||
android:text="request Calendar && Recode Audio"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<item name="android:layout_marginLeft">10dp</item>
|
||||
<item name="android:layout_marginRight">10dp</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
<item name="android:background">#333</item>
|
||||
<item name="android:textColor">@color/black</item>
|
||||
<item name="android:background">@drawable/ripple</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
<resources>
|
||||
<string name="app_name">AndroidUtilCodeKTX</string>
|
||||
<string name="groot">I am groot.</string>
|
||||
<string name="agree">Agree</string>
|
||||
<string name="disagree">Disgree</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="luyao.util.ktx">
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||
|
||||
|
||||
<application android:name=".KtxApp">
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import androidx.fragment.app.Fragment
|
|||
*/
|
||||
class KtxPermissionFragment : Fragment() {
|
||||
|
||||
private val PERMISSION_REQUEST_CODE = 0XFF
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
retainInstance = true
|
||||
|
|
|
|||
|
|
@ -6,22 +6,23 @@ import android.os.Build
|
|||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.Observer
|
||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||
|
||||
/**
|
||||
* Created by luyao
|
||||
* on 2019/6/18 15:47
|
||||
*/
|
||||
fun FragmentActivity.request(vararg permissions: String) {
|
||||
ActivityCompat.requestPermissions(this, permissions, 0XFF)
|
||||
}
|
||||
|
||||
fun FragmentActivity.request(vararg permissions: String, callbacks: PermissionsCallbackDSL.() -> Unit) {
|
||||
|
||||
val permissionsCallback = PermissionsCallbackDSL().apply { callbacks() }
|
||||
val requestCode = PermissionsMap.put(permissionsCallback)
|
||||
|
||||
val needRequestPermissions = permissions.filter { !isGranted(it) }
|
||||
|
||||
if (needRequestPermissions.isEmpty()) {
|
||||
// onGranted
|
||||
permissionsCallback.onGranted()
|
||||
} else {
|
||||
val shouldShowRationalePermissions = mutableListOf<String>()
|
||||
|
|
@ -34,21 +35,32 @@ fun FragmentActivity.request(vararg permissions: String, callbacks: PermissionsC
|
|||
}
|
||||
|
||||
if (shouldShowRationalePermissions.isNotEmpty()) {
|
||||
// shouldShowRequestPermissionRationale
|
||||
permissionsCallback.onShowRationale(shouldShowRationalePermissions)
|
||||
permissionsCallback.onShowRationale(
|
||||
PermissionRequest(
|
||||
getKtxPermissionFragment(this),
|
||||
shouldShowRationalePermissions,
|
||||
requestCode
|
||||
)
|
||||
)
|
||||
}
|
||||
val requestCode = PermissionsMap.put(permissionsCallback)
|
||||
|
||||
|
||||
if (shouldNotShowRationalePermissions.isNotEmpty()) {
|
||||
val ktxPermissionFragment = KtxPermissionFragment()
|
||||
supportFragmentManager.beginTransaction().add(ktxPermissionFragment,"ktx").commitNow()
|
||||
ktxPermissionFragment.requestPermissionsByFragment(shouldNotShowRationalePermissions.toTypedArray(),requestCode)
|
||||
getKtxPermissionFragment(this).requestPermissionsByFragment(
|
||||
shouldNotShowRationalePermissions.toTypedArray(),
|
||||
requestCode
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun startObserve(permissionsCallback: PermissionsCallbackDSL){
|
||||
|
||||
private fun getKtxPermissionFragment(activity: FragmentActivity): KtxPermissionFragment {
|
||||
var fragment = activity.supportFragmentManager.findFragmentByTag("ktx")
|
||||
if (fragment == null) {
|
||||
fragment = KtxPermissionFragment()
|
||||
activity.supportFragmentManager.beginTransaction().add(fragment, "ktx").commitNow()
|
||||
}
|
||||
return fragment as KtxPermissionFragment
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package luyao.util.ktx.ext.permission
|
||||
|
||||
/**
|
||||
* Created by luyao
|
||||
* on 2019/6/21 15:28
|
||||
*/
|
||||
data class PermissionRequest(
|
||||
val permissionFragment: KtxPermissionFragment,
|
||||
val permissions: List<String>,
|
||||
val requestCode: Int
|
||||
) {
|
||||
|
||||
fun retry() {
|
||||
permissionFragment.requestPermissionsByFragment(permissions.toTypedArray(), requestCode)
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ interface PermissionsCallback {
|
|||
|
||||
fun onDenied(permissions: List<String>)
|
||||
|
||||
fun onShowRationale(permissions: List<String>)
|
||||
fun onShowRationale(request: PermissionRequest)
|
||||
|
||||
fun onNeverAskAgain(permissions: List<String>)
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ class PermissionsCallbackDSL : PermissionsCallback {
|
|||
|
||||
private var onGranted: () -> Unit = {}
|
||||
private var onDenied: (permissions: List<String>) -> Unit = {}
|
||||
private var onShowRationale: (permissions: List<String>) -> Unit = {}
|
||||
private var onShowRationale: (request: PermissionRequest) -> Unit = {}
|
||||
private var onNeverAskAgain: (permissions: List<String>) -> Unit = {}
|
||||
|
||||
fun onGranted(func: () -> Unit) {
|
||||
|
|
@ -29,7 +29,7 @@ class PermissionsCallbackDSL : PermissionsCallback {
|
|||
onDenied = func
|
||||
}
|
||||
|
||||
fun onShowRationale(func: (permissions: List<String>) -> Unit) {
|
||||
fun onShowRationale(func: (request: PermissionRequest) -> Unit) {
|
||||
onShowRationale = func
|
||||
}
|
||||
|
||||
|
|
@ -45,8 +45,8 @@ class PermissionsCallbackDSL : PermissionsCallback {
|
|||
onDenied.invoke(permissions)
|
||||
}
|
||||
|
||||
override fun onShowRationale(permissions: List<String>) {
|
||||
onShowRationale.invoke(permissions)
|
||||
override fun onShowRationale(request: PermissionRequest) {
|
||||
onShowRationale.invoke(request)
|
||||
}
|
||||
|
||||
override fun onNeverAskAgain(permissions: List<String>) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue