package Ġcom . final week 1 0 . permission . ui . detail Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . final week 1 0 . permission . R Ċ import Ġcom . final week 1 0 . permission . data . db . Database Util Ċ import Ġcom . final week 1 0 . permission . data . helper . Preference Helper Ċ import Ġcom . final week 1 0 . permission . data . model .* Ċ import Ġcom . final week 1 0 . permission . data . source . Perm Repository Ċ import Ġcom . final week 1 0 . permission . di . Activity Scoped Ċ import Ġcom . final week 1 0 . permission . extension .* Ċ import Ġcom . final week 1 0 . permission . ui . view . create Deletion Ass ure Dialog Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . jetbrains . ank o . long Toast Ċ import Ġorg . jetbrains . ank o . toast Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġon Ġ 2 0 1 7 / 9 / 1 4 . Ċ Ġ*/ Ċ @ Activity Scoped Ċ class ĠApp Detail Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Perm Repository : ĠP erm Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Pref Helper : ĠPreference Helper ) Ġ: ĠApp Detail Contract . Presenter Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġm Visible App : ĠVis ible App ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġm A pk File : ĠA pk File ĊĊĠĠĠ Ġprivate Ġvar Ġm View : ĠApp Detail Contract . View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis A pk File : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Disposable : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġtake View ( view : ĠApp Detail Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġis A pk File Ġ= Ġ! mA pk File . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop View () Ġ{ ĊĠĠĠĠĠĠĠ Ġm View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Disposable ?. dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Show Install App MenuItem (): ĠBoolean Ġ= Ġis A pk File Ġ&& Ġ! is N Or Later () ĊĊĠĠĠ Ġoverride Ġfun Ġis A pk File (): ĠBoolean Ġ= Ġis A pk File ĊĊĠĠĠ Ġoverride Ġfun Ġget A pk Path (): ĠString Ġ= Ġm A pk File . path ĊĊĠĠĠ Ġoverride Ġfun Ġfind App PackageName And Location ( context : ĠContext ): ĠString Ġ= Ġm Visible App . packageName Ġ+ Ġif Ġ( is A pk File ) ĊĠĠĠĠĠĠĠ Ġ"\ n \ n " Ġ+ Ġcontext . getString ( R . string . app _ detail _ apk _ location _ template , Ġm A pk File . path ) Ġelse Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġfind App Icon ( context : ĠContext ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is A pk File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġm A pk File . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpi Ġ= Ġpm . get Package Archive Info ( path , ĠPackage Manager . GET _ META _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġai Ġ= Ġpi ?. application Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ai Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġai . source Dir Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġai . public Source Dir Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġai . load Icon ( pm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġcontext . drawable ( R . drawable . ic _ error ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getApplication Icon ( m Visible App . packageName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Permissions ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm View ?. show Loading View () ĊĠĠĠĠĠĠĠ Ġm Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġm Disposable Ġ= ĠObservable . from Callable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is A pk File ) Ġm Perm Repository . get Permissions With A pk File ( context , Ġm A pk File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġm Perm Repository . get Permissions With AppId ( m Visible App ._ id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠLinkedHashMap < String , ĠMutable List < Visible Perm >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Perm Repository . getAll Groups (). call (). forEach Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ group . name ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġ( perm , Ġgroup ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ group . name ]?. add ( Visible Perm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperm ._ id , Ġperm . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . permission To Label ( perm . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . permission To Description ( perm . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER M _ NONE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre Ġsort Ġother Ġpermission Ġto Ġdifferent Ġgroups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Name Ġ= ĠP erm Repository . GROUP _ OTHER . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . containsKey ( other Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Per ms : ĠList < Visible Perm > Ġ= Ġit [ other Name ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove ( other Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother 1 Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguess Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlauncher Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremoved Ġ= Ġmutable ListOf < Visible Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Per ms . forEach Ġ{ Ġperm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġperm . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġin ĠDatabase Util . network Permission List Ġ-> Ġnetwork . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġin ĠDatabase Util . other 1 Permission List Ġ-> Ġother 1 . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġin ĠDatabase Util . removed Permission List Ġ-> Ġremoved . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . contains (" launcher ") Ġ-> Ġlauncher . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( perm . perm Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠText Utils . isEmpty ( perm . perm Description )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguess . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . sortBy Descending Ġ{ Ġitem Ġ-> Ġitem . perm Label Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ NETWORK . name , Ġnetwork ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ OTHER 1 . name , Ġother 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ OTHER . name , Ġother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ LA UNCH ER . name , Ġlauncher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ GU ESS . name , Ġguess ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Perm Repository . GROUP _ RE MOVED . name , Ġremoved ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġls Ġ= Ġarray ListOf < Section Perm >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġm Visible App . packageName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . keys . forEach Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit [ group ]?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis D angerous Group Ġ= Ġgroup Ġin ĠDatabase Util . d angerous Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġls . add ( Section Perm ( true , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . simple GroupName To Description ( group ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize , Ġis D angerous Group )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ group ]?. forEach Ġ{ Ġholder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is D angerous Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . state Ġ= Ġif Ġ( pm . check Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . simple Name . simple Perm Name To Uses Permission (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER M _ ON Ġelse ĠPER M _ OFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġls . add ( Section Perm ( holder )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġls ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Application ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete A pk ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . create Deletion Ass ure Dialog ( Material Dialog . Single Button Callback Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( File ( mA pk File . path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exists () Ġ&& ĠFileUtils . delete Quiet ly ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast ( R . string . delete _ apk _ ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pref Helper . is A pk Deleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View ?. quit Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . long Toast ( R . string . delete _ apk _ fails ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinstall App ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprompt Install Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setData And Type ( Uri . parse (" file ://${ mA pk File . path } "), ĠA PK _ INT ENT _ TYPE ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( prompt Install ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure System Permission ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Settings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ) ĊĠĠĠĠĠĠĠ Ġi . add Category ( Intent . CATEGORY _ DEFAULT ) ĊĠĠĠĠĠĠĠ Ġi . data Ġ= ĠUri . from Parts (" package ", Ġm Visible App . packageName , Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( i . resolve Activity ( pm ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( i ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 2 Ġ= ĠIntent ( Settings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi 2 . add Category ( Intent . CATEGORY _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 2 . resolve Activity ( pm ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( i 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . long Toast (" No Ġactivity Ġfound ! ĠPlease Ġgo Ġto ĠSetting -> Apps ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Showing Perm Des p (): ĠBoolean Ġ= Ġm Pref Helper . is Showing Perm Des p ĊĊĠĠĠ Ġoverride Ġfun Ġset Showing Perm Des p ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Pref Helper . is Showing Perm Des p Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġm View ?. show Perm Des p ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Labels ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm View ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add C ute Label ( context . resources . get Quantity String ( R . plurals . list _ item _ perm _ count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Visible App . permission Count , Ġm Visible App . permission Count )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Visible App . is System ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add C ute Label ( context . getString ( R . string . label _ system ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . label _ system _ explanation )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! context . package Manager . is Package Enabled ( m Visible App . packageName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add C ute Label ( context . getString ( R . string . label _ disabled )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }