package Ġcom . h dd . permission request . permission Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠAuthor ï¼ļ h dd Ċ Ġ* ĠDate ï¼ļ 2 0 2 0 / 9 / 2 8 Ċ Ġ* ĠDescription ï¼ļ Ċ Ġ* Ċ Ġ*/ Ċ class ĠPermission Action ( context : ĠActivity ?, Ġpermission : ĠString , Ġrequest Code : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠmContext Ġ= ĠWeak Reference < Activity >( context ) ĊĠĠĠ Ġprivate Ġval Ġm Permission Ġ= Ġpermission ĊĠĠĠ Ġprivate Ġval Ġm Request Code Ġ= Ġrequest Code ĊĠĠĠ Ġprivate Ġvar Ġshould Show Rational Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Request Callback : ĠPermission Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġrequest ( callback : ĠPermission Callback ? ){ ĊĠĠĠĠĠĠĠ Ġm Request Callback Ġ= Ġcallback ĊĊĠĠĠĠĠĠĠ Ġval Ġact Ġ= ĠmContext . get () ĊĠĠĠĠĠĠĠ Ġact ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Rational Ġ= ĠActivity Compat . should Show Request Permission R ationale ( it , Ġm Permission ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Permission Request . TAG , Ġ" request Ġpermission : code =$ m Request Code ,$ m Permission ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Request Permissions Result ( grant Result : ĠInt ){ Ċ // ĠĠĠĠĠĠĠ ĠLog . i ( Permission Request . TAG , Ġ" permission Ġresult :$ grant Result ") ĊĠĠĠĠĠĠĠ Ġif ( grant Result Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Granted () ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( grant Result Ġ== ĠPackage Manager . PERMISSION _ DEN IED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Denied () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpermission Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Permission Granted (){ ĊĠĠĠĠĠĠĠ Ġm Request Callback ?. on Permission Granted ( m Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpermission Ġdenied ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Permission Denied (){ ĊĠĠĠĠĠĠĠ Ġval Ġact Ġ= ĠmContext . get () ĊĠĠĠĠĠĠĠ Ġact ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( should Show Rational Ġ&& Ġ! Activity Compat . should Show Request Permission R ationale ( it , Ġm Permission ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// it Ġis Ġrefused Ġbefore , should Show Rational = true , Ġrequest Ġagain , choose Ġnot Ġask Ġagain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// then Ġshould Show Rational = false . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Not Ask () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! should Show Rational Ġ&& Ġ! Activity Compat . should Show Request Permission R ationale ( it , Ġm Permission )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// it Ġhas Ġchosen Ġnot Ġask Ġagain , Ġrequest Ġagain , Ġgo Ġto Ġpermission Ġsetting Ġpage . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Setting () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Request Callback ?. on Permission Denied ( m Permission ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpermission Ġdo Ġnot Ġask ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Permission Not Ask (){ ĊĠĠĠĠĠĠĠ Ġm Request Callback ?. on Permission Not Ask ( m Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpermission Ġgo Ġto Ġsetting ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Permission Setting (){ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġlist . add ( m Permission ) ĊĠĠĠĠĠĠĠ Ġm Request Callback ?. on Permission Setting ( list ) ĊĠĠĠ Ġ} Ċ }