package Ġmy . it gun gn ir . permission Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġio . reactivex . subjects . Publish Subject Ċ Ċ class ĠG Permission Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsubjects Ġ= Ġmutable Map Of < String , ĠPublish Subject < Permission >>() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPER MISSION _ REQUEST _ CODE Ġ= Ġ 0 x 1 F ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( manager : ĠFragment Manager ): ĠG Permission Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( manager . find Fragment By Tag ( G Permission Fragment :: class . java . name ) Ġ?: ĠG Permission Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . beginTransaction (). add ( this , ĠG Permission Fragment :: class . java . name ). commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġas ĠG Permission Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( PERMISSION _ REQUEST _ CODE Ġ!= Ġrequest Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpermissions . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġsubjects [ permissions [ i ]] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ å·² æİĪæĿĥ æĪĸ å·² ç¦ģ çĶ¨çļĦ æĿĥéĻĲ åĪłéĻ¤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubjects . remove ( permissions [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgranted Ġ= Ġgrant Results [ i ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġpermissions [ i ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgranted Ġ= Ġgranted , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Show Request Permission R ationale Ġ= Ġshould Show Request Permission R ationale ( permissions [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onComplete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Permissions ( permissions : ĠArray < String >) Ġ= ĊĠĠĠĠĠĠĠ Ġrequest Permissions ( permissions , ĠPER MISSION _ REQUEST _ CODE ) ĊĊĠĠĠ Ġfun Ġget Permission Subject ( permission : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġsubjects [ permission ] ĊĊĠĠĠ Ġfun Ġset Permission Subject ( permission : ĠString , Ġsubject : ĠPublish Subject < Permission >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubjects [ permission ] Ġ= Ġsubject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġfun Ġis Permission Granted ( permission : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġactivity ?. check Self Permission ( permission ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġfun Ġis Permission Rev oked ( permission : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġactivity ?. package Manager ?. is Permission Rev oked By Policy ( permission , Ġactivity !!. packageName ) Ġ?: Ġfalse Ċ }