|
class DuziPermissionActivity: AppCompatActivity() { |
|
|
|
private lateinit var permissions: Array<String> |
|
private lateinit var rationaleTitle: CharSequence |
|
private lateinit var rationaleMessage: CharSequence |
|
private lateinit var denyTitle: CharSequence |
|
private lateinit var denyMessage: CharSequence |
|
private var orientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED |
|
|
|
override fun onCreate(savedInstanceState: Bundle?) { |
|
overridePendingTransition(0, 0) //startActivity 또는 finish 이후에 호출해야됨. 애니메이션 적용 |
|
super.onCreate(savedInstanceState) |
|
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) // 잠시 원하는 시간에 터치가 안되도록 |
|
|
|
with(intent) { |
|
permissions = getStringArrayExtra(EXTRA_PERMISSIONS) |
|
rationaleTitle = getCharSequenceExtra(EXTRA_RATIONALE_TITLE) |
|
rationaleMessage = getCharSequenceExtra(EXTRA_RATIONALE_MESSAGE) |
|
denyTitle = getCharSequenceExtra(EXTRA_DENY_TITLE) |
|
denyMessage = getCharSequenceExtra(EXTRA_DENY_MESSAGE) |
|
orientation = getIntExtra(EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) |
|
} |
|
|
|
if(!isGranted(this, permissions)) { |
|
checkPermissions() |
|
} else { |
|
listener?.onPermissionGranted() |
|
|
|
finish() |
|
overridePendingTransition(0, 0) |
|
} |
|
|
|
requestedOrientation = orientation |
|
} |
|
|
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { |
|
when(requestCode) { |
|
REQ_CODE_PERMISSION_REQUEST -> { |
|
if(grantResults.isNotEmpty()) { |
|
listener?.onPermissionGranted() |
|
|
|
finish() |
|
overridePendingTransition(0, 0) |
|
} |
|
} |
|
} |
|
} |
|
|
|
override fun onDestroy() { |
|
super.onDestroy() |
|
overridePendingTransition(0, 0) |
|
} |
|
|
|
private fun checkPermissions() { |
|
ActivityCompat.requestPermissions(this, permissions, REQ_CODE_PERMISSION_REQUEST) |
|
} |
|
|
|
private fun isGranted(context: Context, permissions: Array<String>): Boolean { |
|
for(permission in permissions) { |
|
if(!isGranted(context, permission)) { |
|
return false |
|
} |
|
} |
|
return true |
|
} |
|
|
|
private fun isGranted(context: Context, permission: String): Boolean = |
|
ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED |
|
|
|
private fun canRequestPermission(activity: Activity, permissions: Array<String>) { |
|
for(permission in permissions) { |
|
if(ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) { |
|
|
|
} |
|
} |
|
} |
|
|
|
companion object { |
|
fun startActivity(context: Context, intent: Intent, listener: DuziPermission.PermissionListener) { |
|
this.listener = listener |
|
context.startActivity(intent) |
|
} |
|
|
|
private var listener: DuziPermission.PermissionListener? = null |
|
|
|
val EXTRA_PERMISSIONS = "permissions" |
|
val EXTRA_RATIONALE_TITLE = "rationale_title" |
|
val EXTRA_RATIONALE_MESSAGE = "rationale_message" |
|
val EXTRA_DENY_TITLE = "deny_title" |
|
val EXTRA_DENY_MESSAGE = "deny_message" |
|
val EXTRA_SCREEN_ORIENTATION = "screen_orientation" |
|
val REQ_CODE_PERMISSION_REQUEST = 1000 |
|
} |
|
} |