/* Ċ Ġ* ĠLicensed Ġunder ĠApache - 2 . 0 Ċ Ġ* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ*/ Ċ package Ġcom . af ol le st ad . ass ent . internal Ċ Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . util . Log Ċ import Ġcom . af ol le st ad . ass ent . Ass ent Result Ċ import Ġcom . af ol le st ad . ass ent . internal . Data . Companion . ass ure Fragment Ċ import Ġcom . af ol le st ad . ass ent . internal . Data . Companion . forget Fragment Ċ import Ġcom . af ol le st ad . ass ent . internal . Data . Companion . get Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ( af ol le st ad ) Ġ*/ Ċ class ĠPermission Fragment Ġ: ĠFragment () Ġ{ ĊĊĠ Ġinternal Ġfun Ġperform ( request : ĠPending Request ) Ġ{ ĊĠĠĠ Ġthis . request Permissions ( request . permissions . all Values (), Ġrequest . request Code ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġdetach () Ġ{ ĊĠĠĠ Ġif Ġ( parent Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġparent Fragment ?. transact Ġ{ ĊĠĠĠĠĠĠĠ Ġdetach ( this @ Permission Fragment ) ĊĠĠĠĠĠĠĠ Ġremove ( this @ Permission Fragment ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity ?. transact Ġ{ ĊĠĠĠĠĠĠĠ Ġdetach ( this @ Permission Fragment ) ĊĠĠĠĠĠĠĠ Ġremove ( this @ Permission Fragment ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ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 ) ĊĠĠĠ Ġon Permissions Response ( ĊĠĠĠĠĠĠĠ Ġpermissions Ġ= Ġpermissions , ĊĠĠĠĠĠĠĠ Ġgrant Results Ġ= Ġgrant Results ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠFragment . on Permissions Response ( ĊĠ Ġpermissions : ĠArray < out ĠString >, ĊĠ Ġgrant Results : ĠInt Array Ċ ) Ġ= Ġsynchronized ( Data . LOCK ) Ġ{ ĊĊĠ Ġval Ġcurrent Request Ġ= Ġget (). current Pending Request ĊĠ Ġif Ġ( current Request Ġ== Ġnull ) Ġ{ ĊĠĠĠ ĠLog . w ( ĊĠĠĠĠĠĠĠ Ġ" Ass ent ", ĊĠĠĠĠĠĠĠ Ġ" response () Ġcalled Ġbut Ġthere 's Ġno Ġcurrent Ġpending Ġrequest ." ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn @ synchronized ĊĠ Ġ} ĊĊĠ Ġif Ġ( current Request . permissions . equals Strings ( permissions )) Ġ{ ĊĠĠĠ Ġ// ĠExecute Ġthe Ġresponse ĊĠĠĠ Ġval Ġresult Ġ= ĠAss ent Result ( ĊĠĠĠĠĠĠĠ Ġpermissions Ġ= Ġpermissions . to Permissions (), ĊĠĠĠĠĠĠĠ Ġgrant Results Ġ= Ġgrant Results ĊĠĠĠ Ġ) ĊĠĠĠ Ġcurrent Request . callbacks . invoke All ( result ) ĊĠĠĠ Ġget (). current Pending Request Ġ= Ġnull ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ ĠLog . w ( ĊĠĠĠĠĠĠĠ Ġ" Ass ent ", ĊĠĠĠĠĠĠĠ Ġ" on Permissions Response () Ġcalled Ġwith Ġa Ġresult Ġthat Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" does n 't Ġmatch Ġthe Ġcurrent Ġpending Ġrequest ." ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn @ synchronized ĊĠ Ġ} ĊĊĠ Ġif Ġ( get (). request Queue . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġ// ĠExecute Ġthe Ġnext Ġrequest Ġin Ġthe Ġqueue ĊĠĠĠ Ġval Ġnext Request Ġ= Ġget (). request Queue . pop () ĊĠĠĠ Ġget (). current Pending Request Ġ= Ġnext Request ĊĠĠĠ Ġass ure Fragment ( this @ on Permissions Response ). perform ( next Request ) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġ// ĠNo Ġmore Ġrequests Ġto Ġexecute , Ġwe Ġcan Ġdestroy Ġthe ĠFragment ĊĠĠĠ Ġforget Fragment () ĊĠ Ġ} Ċ } Ċ