package Ġcom . nag opy . android . ap lin . model Ċ Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġcom . nag opy . android . ap lin . entity . Permission Group Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠPermission Groups Ġ@ Inject Ġconstructor () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġshell Cmd : ĠShell Cmd ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpackage Manager : ĠPackage Manager ĊĊĠĠĠ Ġfun ĠgetAll Permission Groups (): ĠList < Permission Group > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 4 - ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" cmd ", Ġ" package ", Ġ" list ", Ġ" permissions ", Ġ"- g ", Ġ"- d ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" pm ", Ġ" list ", Ġ" permissions ", Ġ"- g ", Ġ"- d ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠgroupName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġpermissions Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Permission Group >() ĊĊĠĠĠĠĠĠĠ Ġshell Cmd . exec ( commands , Ġ{ Ġseq : ĠSequence < String > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseq . map ( String :: trim ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( String :: isNotEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . startsWith (" group :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( groupName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Permission Group ( groupName !! , Ġget Group Label ( groupName !! ), Ġpermissions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnext Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgroupName Ġ= Ġit . replace (" group :", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . startsWith (" permission :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions . add ( it . replace (" permission :", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠUnit ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( groupName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Permission Group ( groupName !! , Ġget Group Label ( groupName !! ), Ġpermissions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Group Label ( groupName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp gi Ġ= Ġpackage Manager . get Permission Group Info ( groupName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp gi . load Label ( package Manager ). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgroupName . split (". "). last () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }