package Ġcom . kn ight . kotlin . library _ per miss Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . kn ight . kotlin . library _ per miss . listener . I Permission Interceptor Ċ import Ġcom . kn ight . kotlin . library _ per miss . listener . On Permission Callback Ċ import Ġcom . kn ight . kotlin . library _ per miss . utils . Permission Utils Ċ Ċ /** Ċ Ġ* ĠAuthor : K night Ċ Ġ* ĠTime : 2 0 2 2 / 1 / 2 0 Ġ 1 6 : 5 7 Ċ Ġ* ĠDescription : XX Permissions Ċ Ġ*/ Ċ class ĠXX Permissions Ġconstructor ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġ/** ĠContext Ġå¯¹è±¡ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġ æĿĥéĻĲ è®¾ç½® é¡µ è·³è½¬ è¯·æ±Ĥ çłģ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ CODE Ġ= Ġ 1 0 2 4 Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ æĿĥéĻĲ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġs Interceptor : ĠI Permission Interceptor ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** Ġå½ĵåīį æĺ¯åĲ¦ ä¸º æ£ĢæŁ¥ æ¨¡å¼ı Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġs Check Mode : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® è¯·æ±Ĥ çļĦ å¯¹è±¡ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠĠ Ġå½ĵåīį ĠActivity ï¼Į åı¯ä»¥ ä¼łåħ¥ æłĪ é¡¶ çļĦ ĠActivity ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwith ( context : ĠContext ): ĠXX Permissions Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠXX Permissions ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith ( fragment : ĠFragment ): ĠXX Permissions ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment . activity ?. let Ġ{ Ġwith ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġpublic Ġstatic ĠXX Permissions Ġwith ( android . support . v 4 . app . Fragment Ġfragment ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġwith ( fragment . getActivity ()); Ċ // ĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġpublic Ġstatic ĠXX Permissions Ġwith ( android . support . v 4 . app . Fragment Ġfragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġreturn Ġwith ( fragment . getActivity ()); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ ä¸º æ£ĢæŁ¥ æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Check Mode ( check Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Check Mode Ġ= Ġcheck Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® åħ¨å±Ģ æĿĥéĻĲ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Interceptor ( interceptor : ĠI Permission Interceptor ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Interceptor Ġ= Ġinterceptor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġèİ·åıĸ åħ¨å±Ģ æĿĥéĻĲ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Interceptor (): ĠI Permission Interceptor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Interceptor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Interceptor Ġ= Ġobject Ġ: ĠI Permission Interceptor Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs Interceptor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠåĪ¤æĸŃ ä¸Ģä¸ª æĪĸ å¤ļä¸ª æĿĥéĻĲ æĺ¯åĲ¦ åħ¨éĥ¨ æİĪ äºĪ äºĨ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Granted ( context : ĠContext ?, Ġvar arg Ġpermissions : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Granted ( context , ĠPermission Utils . as ArrayList (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Granted ( context : ĠContext ?, Ġvar arg Ġpermissions : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Granted ( context , ĠPermission Utils . as ArrayList s (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Granted ( context : ĠContext ?, Ġpermissions : ĠList < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPermission Utils . is Granted Permissions ( context !! , Ġpermissions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġèİ·åıĸ æ²¡æľī æİĪ äºĪ çļĦ æĿĥéĻĲ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Denied ( context : ĠContext ?, Ġvar arg Ġpermissions : ĠString ): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Denied ( context , ĠPermission Utils . as ArrayList (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Denied ( context : ĠContext ?, Ġvar arg Ġpermissions : ĠArray < String >): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Denied ( context , ĠPermission Utils . as ArrayList s (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Denied ( context : ĠContext ?, Ġpermissions : ĠList < String >): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext ?. let Ġ{ ĠPermission Utils . get Denied Permissions ( it , Ġpermissions ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æŁĲä¸ª æĿĥéĻĲ æĺ¯åĲ¦ ä¸º çī¹æ®Ĭ æĿĥéĻĲ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Special ( permission : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPermission Utils . is Special Permission ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠåĪ¤æĸŃ ä¸Ģä¸ª æĪĸ å¤ļä¸ª æĿĥéĻĲ æĺ¯åĲ¦ è¢« æ°¸ ä¹ħ æĭ Ĵ ç»Ŀ äºĨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġï¼Ī æ³¨æĦı ä¸įèĥ½ åľ¨ è¯·æ±Ĥ æĿĥéĻĲ ä¹ĭåīį è°ĥçĶ¨ ï¼Į åºĶè¯¥ åľ¨ Ġ[ On Permission Callback . on Denied ] Ġæĸ¹æ³ķ ä¸Ń è°ĥçĶ¨ ï¼ī ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Permanent Denied ( activity : ĠActivity ?, Ġvar arg Ġpermissions : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Permanent Denied ( activity , ĠPermission Utils . as ArrayList (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Permanent Denied ( activity : ĠActivity ?, Ġvar arg Ġpermissions : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Permanent Denied ( activity , ĠPermission Utils . as ArrayList s (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Permanent Denied ( activity : ĠActivity ?, Ġpermissions : ĠList < String ?> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity ?. let Ġ{ ĠPermission Utils . is Permission Permanent Denied ( it , Ġpermissions ) Ġ} Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è·³è½¬ åĪ° åºĶçĶ¨ æĿĥéĻĲ è®¾ç½® é¡µ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĠĠĠĠĠĠĠĠĠĠ Ġæ ² ¡ æľī æİĪ äºĪ æĪĸèĢħ è¢« æĭ Ĵ ç»Ŀ çļĦ æĿĥéĻĲ ç»Ħ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( context : ĠContext , Ġpermissions : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity ? Ġ= ĠPermission Utils . find Activity ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( activity , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠPermission Setting Page . get Smart Permission Intent ( context , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ! is ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent !!. add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* Ġandroid . app . Activity Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ/* Ġandroid . app . Activity Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( activity , Ġnull Ġas ĠList < String >) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( activity : ĠActivity , Ġvar arg Ġpermissions : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( activity , ĠPermission Utils . as ArrayList (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( activity : ĠActivity , Ġvar arg Ġpermissions : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( activity , ĠPermission Utils . as ArrayList s (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( activity : ĠActivity , Ġpermissions : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( activity , Ġpermissions , ĠREQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è·³è½¬ åĪ° åºĶçĶ¨ æĿĥéĻĲ è®¾ç½® é¡µ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĠĠĠĠĠĠĠĠĠĠ Ġæ ² ¡ æľī æİĪ äºĪ æĪĸèĢħ è¢« æĭ Ĵ ç»Ŀ çļĦ æĿĥéĻĲ ç»Ħ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĠĠĠĠĠĠĠĠĠĠ ĠActivity Ġ è·³è½¬ è¯·æ±Ĥ çłģ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( activity : ĠActivity , Ġpermissions : ĠList < String ?> ?, Ġrequest Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Setting Page . get Smart Permission Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġrequest Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* Ġandroid . app . Fragment Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ/* Ġandroid . app . Fragment Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( fragment , Ġnull Ġas ĠList < String >) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( fragment : ĠFragment , Ġvar arg Ġpermissions : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( fragment , ĠPermission Utils . as ArrayList (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( fragment : ĠFragment , Ġvar arg Ġpermissions : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( fragment , ĠPermission Utils . as ArrayList s (* permissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( fragment : ĠFragment , Ġpermissions : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Permission Activity ( fragment , Ġpermissions , ĠREQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è·³è½¬ åĪ° åºĶçĶ¨ æĿĥéĻĲ è®¾ç½® é¡µ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĠĠĠĠĠĠĠĠĠĠ Ġæ ² ¡ æľī æİĪ äºĪ æĪĸèĢħ è¢« æĭ Ĵ ç»Ŀ çļĦ æĿĥéĻĲ ç»Ħ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĠĠĠĠĠĠĠĠĠĠ ĠActivity Ġ è·³è½¬ è¯·æ±Ĥ çłģ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstart Permission Activity ( fragment : ĠFragment , Ġpermissions : ĠList < String ?> ?, Ġrequest Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġfragment . activity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Setting Page . get Smart Permission Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġrequest Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ/** Ġ æĿĥéĻĲ åĪĹè¡¨ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Permissions : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** Ġ æĿĥéĻĲ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Interceptor : ĠI Permission Interceptor ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġè®¾ç½® ä¸į æ£ĢæŁ¥ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Check Mode : ĠBoolean Ġ= Ġfalse ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł æĿĥéĻĲ ç»Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpermission ( var arg Ġpermissions : ĠString ): ĠXX Permissions Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpermission ( Permission Utils . as ArrayList (* permissions )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpermission ( var arg Ġpermissions : ĠArray < String >): ĠXX Permissions Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpermission ( Permission Utils . as ArrayList s (* permissions )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpermission ( permissions : ĠList < String >): ĠXX Permissions Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Ġ== Ġnull Ġ|| Ġpermissions . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Permissions Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Permissions Ġ= ĠArrayList ( permissions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin Ġpermissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Permissions ?. contains ( permission ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Permissions ?. add ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĿĥéĻĲ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinterceptor ( interceptor : ĠI Permission Interceptor ?): ĠXX Permissions Ġ{ ĊĠĠĠĠĠĠĠ Ġm Interceptor Ġ= Ġinterceptor ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ä¸į è§¦åıĳ éĶĻè¯¯ æ£Ģæµĭ æľºåĪ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunchecked (): ĠXX Permissions Ġ{ ĊĠĠĠĠĠĠĠ Ġm Check Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¯·æ±Ĥ æĿĥéĻĲ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest ( callback : ĠOn Permission Callback ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mContext Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Interceptor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Interceptor Ġ= Ġget Interceptor () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æĿĥéĻĲ è¯·æ±Ĥ åĪĹè¡¨ ï¼Ī ä¸ºä»Ģä¹Ī çĽ´æİ¥ ä¸į çĶ¨ åŃĹæ®µ ï¼Ł åĽłä¸º æ¡Ĩæŀ¶ è¦ģ åħ¼ å®¹ æĸ° æĹ§ æĿĥéĻĲ ï¼Į åľ¨ ä½İ çīĪæľ¬ ä¸ĭ ä¼ļ èĩªåĬ¨ æ·»åĬł æĹ§ æĿĥéĻĲ çĶ³è¯· ï¼ī ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġm Permissions ĊĠĠĠĠĠĠĠ Ġif Ġ( m Check Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Check Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Check Mode Ġ= ĠmContext ?. let Ġ{ ĠPermission Utils . isDebug Mode ( it ) Ġ} Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Check Mode Ġ= Ġs Check Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ å½ĵåīį ĠActivity Ġ çĬ¶æĢģ æĺ¯åĲ¦ æĺ¯ æŃ£å¸¸ çļĦ ï¼Į å¦Ĥæŀľ ä¸įæĺ¯ åĪĻ ä¸į è¯·æ±Ĥ æĿĥéĻĲ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= ĠPermission Utils . find Activity ( mContext ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Permission Checker . check Activity Status ( activity , Ġm Check Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¿ħé¡» è¦ģ ä¼łåħ¥ æŃ£å¸¸ çļĦ æĿĥéĻĲ æĪĸèĢħ æĿĥéĻĲ ç»Ħ æīįèĥ½ çĶ³è¯· æĿĥéĻĲ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Permission Checker . check Permission Argument ( permissions , Ġm Check Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Check Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ çĶ³è¯· çļĦ åŃĺåĤ¨ æĿĥéĻĲ æĺ¯åĲ¦ ç¬¦åĲĪ è§ĦèĮĥ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmContext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Checker . check Storage Permission ( it , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ çĶ³è¯· çļĦ å®ļä½į æĿĥéĻĲ æĺ¯åĲ¦ ç¬¦åĲĪ è§ĦèĮĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Checker . check Location Permission ( it , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ çĶ³è¯· çļĦ æĿĥéĻĲ åĴĮ Ġtarget Sdk Ġ çīĪæľ¬ æĺ¯åĲ¦ èĥ½ åĲ » åĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Checker . check Target Sdk Version ( it , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Check Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æµĭ æĿĥéĻĲ æľī æ²¡æľī åľ¨ æ¸ħ åįķ æĸĩä»¶ ä¸Ń æ³¨åĨĮ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmContext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission Checker . check Manifest Permissions ( it , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ä¼ĺåĮĸ æīĢ çĶ³è¯· çļĦ æĿĥéĻĲ åĪĹè¡¨ ĊĠĠĠĠĠĠĠ ĠPermission Checker . optimize Deprecated Permission ( permissions ) ĊĠĠĠĠĠĠĠ ĠmContext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Permission Utils . is Granted Permissions ( it , Ġpermissions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯ģ æĺİ è¿ĻäºĽ æĿĥéĻĲ å·²ç»ı åħ¨éĥ¨ æİĪ äºĪ è¿ĩ ï¼Į çĽ´æİ¥ åĽŀè°ĥ æĪĲåĬŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Interceptor ?. gr anted Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ çĶ³è¯· æ²¡æľī æİĪ äºĪ è¿ĩ çļĦ æĿĥéĻĲ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġm Interceptor ?. request Permissions ( it , Ġcallback , Ġpermissions ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĊ Ċ }