package Ġcom . android . permission library . managers Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġcom . android . permission library . callbacks . Permission Callback Ċ import Ġcom . t br uy elle . rx permissions 2 . Rx Permissions Ċ Ċ class ĠPermission Manager ( ĊĠĠĠ Ġprivate Ġval Ġm Activity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġm Listener : ĠPermission Callback Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrx Permission : ĠRx Permissions Ġby Ġlazy Ġ{ ĠRx Permissions ( this . m Activity ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġallows Ġyou Ġto Ġrequest Ġsingle Ġpermission ĊĠĠĠĠ Ġ* Ġwithout Ġsplitting Ġthe Ġprocess Ġin Ġtwo Ġdifferent Ġplaces . ĊĠĠĠĠ Ġ* ĠYou Ġonly Ġneed Ġto Ġspecify : ĊĠĠĠĠ Ġ* Ġ@ param Ġpermission Ġmust Ġbe Ġof Ġtype Ġ[ Manifest . permission ] ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean Ġ-> Ġtrue Ġif Ġit Ġneeds Ġto Ġbe Ġrequested ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġft Ġit Ġwas Ġalready Ġrequested ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġrequest Single Permission ( permission : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Per missing Present In Manifest ( permission )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rx Permission . request ( permission ). subscribe Ġ{ Ġcheck Permission State ( it , Ġpermission ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Listener . on Permission Denied ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġsome Ġpermission Ġwas Ġrequest Ġand Ġgranted ĊĠĠĠĠ Ġ* Ġ@ param Ġpermission Ġmust Ġbe Ġof Ġtype Ġ[ Manifest . permission ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Permission Granted ( permission : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Ġ== ĠManifest . permission . GET _ ACCOUNT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . self Permission Is Granted ( permission ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . self Permission Is Granted ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġsome Ġpermission Ġis Ġdeclared Ġin Ġthe Ġmanifest . ĊĠĠĠĠ Ġ* Ġ@ param Ġpermission Ġmust Ġbe Ġof Ġtype Ġ[ Manifest . permission ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Per missing Present In Manifest ( permission : ĠString ): ĠBoolean Ġ= Ġwith ( this . m Activity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . package Manager . get Package Info ( packageName , ĠPackage Manager . GET _ PERMISSION S ) ĊĠĠĠĠĠĠĠ Ġpackage Info . requested Permissions . first OrNull Ġ{ Ġit . contains ( permission , Ġtrue ) Ġ} Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġself Permission Is Granted ( permission : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission ĊĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission State ( is Granted : ĠBoolean , Ġpermission : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . notify Granted Permission ( permission ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . notify Denied Permission ( permission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Granted Permission ( permissions : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Listener . on Permission Granted ( permissions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Denied Permission ( permission : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Listener . on Permission Denied ( permission ) ĊĠĠĠ Ġ} Ċ Ċ }