/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠH am id re za ĠE te bar ian Ġ& ĠAli ĠMod ares . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġme ow . k tx Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġme ow . core . ui . Fragment Activity Interface Ċ import Ġme ow . core . ui . is Activity Ċ import Ġme ow . core . ui . is Fragment Ċ Ċ /** Ċ Ġ* ĠPermission ĠExtensions . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ ĠH am id re za ĠE te bar ian Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* Ġ@ since ĠĠĠ 2 0 2 0 - 0 3 - 1 7 Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠREQUEST _ CODE Ġ= Ġ 1 1 2 2 Ċ Ċ fun ĠContext ?. should Show Permission Dialog ( permissions : ĠList < String >): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠ Ġpermissions . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , Ġit ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ fun ĠFragment ?. should Show Permission Dialog ( permissions : ĠList < String >) Ġ= ĊĠĠĠ Ġthis ?. require Context (). should Show Permission Dialog ( permissions ) Ċ Ċ class ĠPermission Utils ( ĊĠĠĠ Ġprivate Ġvar Ġmv vm : ĠFragment Activity Interface < *> Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġon Result : Ġ( is Success : ĠBoolean ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġfun Ġcheck ( var arg Ġrequested Permissions : ĠString , Ġon Result : Ġ( is Success : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Result Ġ= Ġon Result ĊĊĠĠĠĠĠĠĠ Ġval Ġnot Granted Permissions Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġrequested Permissions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Granted Permissions . check And Add Permission ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( not Granted Permissions . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Result ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( mv vm . is Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmv vm . activity (), Ġnot Granted Permissions . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mv vm . is Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( mv vm Ġas ĠFragment ). request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Granted Permissions . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠArrayList < String >. check And Add Permission ( permission : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmv vm . context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( permission ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor ĠR ationale ĠOption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActivity Compat . should Show Request Permission R ationale ( mv vm . activity (), Ġpermission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Request ( request Code : ĠInt , Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!= ĠREQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġvar Ġall Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġgrant Results . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ i ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Granted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Result ( all Granted ) ĊĠĠĠ Ġ} Ċ }