/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠGoogle ĠInc . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . om air tech . gps location . ui Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . view . margin Bottom Ċ import Ġandroidx . core . view . set Padding Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . om air tech . gps location . R Ċ import Ġcom . om air tech . gps location . model . Permission UI Data Ċ import Ġcom . om air tech . gps location . model . Ui Data Ċ import Ġcom . om air tech . gps location . util . Location Type Ċ import Ġcom . om air tech . gps location . util . full Screen Ċ import Ġcom . om air tech . gps location . util . has Permission Ċ import Ġcom . om air tech . gps location . util . request Permission With R ationale Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Permission Request Frag " Ċ Ċ /** Ċ Ġ* ĠDisplays Ġinformation Ġabout Ġwhy Ġa Ġuser Ġshould Ġenable Ġeither Ġthe Ġfine Ġlocation Ġpermission Ġor Ġthe Ċ Ġ* Ġbackground Ġlocation Ġpermission Ġ( depend ing Ġon Ġwhat Ġis Ġneeded ). Ċ Ġ* Ċ Ġ* ĠAllows Ġusers Ġto Ġgrant Ġthe Ġpermissions Ġas Ġwell . Ċ Ġ*/ Ċ class ĠPermission Fragment Ġ: ĠBottom Sheet Dialog Fragment () Ġ{ ĊĊĠĠĠ Ġ// ĠType Ġof Ġpermission Ġto Ġrequest Ġ( fine Ġor Ġbackground ). ĠSet Ġby Ġcalling ĠActivity . ĊĠĠĠ Ġprivate Ġvar Ġlocation Type : ĠLocation Type ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠTo Ġchange Ġui Ġdata ĊĠĠĠ Ġprivate Ġvar Ġpermission UI Data : ĠPermission UI Data ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠMust Ġimplement Ġthis Ġcallbacks Ġto Ġhandle Ġresponse ĊĠĠĠ Ġprivate Ġvar Ġcallback : Ġ(( Boolean ) Ġ-> ĠUnit ? )? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Style ( STYLE _ NORMAL , ĠR . style . Custom Bottom Sheet Dialog Theme ) ĊĠĠĠĠĠĠĠ Ġlocation Type Ġ= Ġarguments ?. get Serializable ( PERMISSION _ REQUEST _ TYPE ) Ġas ĠLocation Type ? ĊĠĠĠĠĠĠĠ Ġpermission UI Data Ġ= Ġarguments ?. get Serializable ( PERMISSION _ UI _ DATA ) Ġas ĠPermission UI Data ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot : ĠView ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, Ġs : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ permission , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġroot . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Type Ġ== ĠLocation Type . F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ui ( this , Ġpermission UI Data ?. foreground ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( location Type Ġ== ĠLocation Type . BACKGROUND _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ui ( this , Ġpermission UI Data ?. background ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . btn _ approve ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Type Ġ== ĠLocation Type . F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest F ine Location Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( location Type Ġ== ĠLocation Type . BACKGROUND _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Background Location Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . btn _ cancel ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcallback Ġwill Ġonly Ġbe Ġcalled Ġwhen ĠBack Ġbutton Ġpressed . ĊĠĠĠĠĠĠĠ Ġdialog ?. setOn Key Listener Ġ{ Ġ_, ĠkeyCode , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK ) Ġset Result ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Ui ( root : ĠView , Ġdata : ĠUi Data ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . hide UI Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < ImageView >( R . id . image _ icon ). visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . txt _ title ). visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . td t _ details ). visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < ImageView >( R . id . image _ icon ). setImage Resource ( it . icon _ res !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . txt _ title ). text Ġ= ĠgetString ( it . title _ res !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . td t _ details ). text Ġ= ĠgetString ( it . details _ res !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . btn _ approve ). text Ġ= ĠgetString ( it . approve _ res !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . findViewById < TextView >( R . id . btn _ cancel ). text Ġ= ĠgetString ( it . cancel _ res !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġfull Screen () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest F ine Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermission Approved Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. has Permission ( Manifest . permission . ACCESS _ F INE _ LOCATION ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( permission Approved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġfine Location Rational Snackbar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Background Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context ?. has Permission ( Manifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest F ine Location Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpermission Approved Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. has Permission ( Manifest . permission . ACCESS _ BACKGROUND _ LOCATION ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( permission Approved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġbackground Rational Snackbar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Location Permission ( permissions : ĠArray < String >, Ġsn ackbar : ĠSn ackbar ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Permission With R ationale ( permissions , Ġrequest Permission Launcher , Ġsn ackbar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHandle ĠPermissions Ġresult Ġ( gr anted / rejected ) ĊĠĠĠ Ġprivate Ġval Ġrequest Permission Launcher Ġ= Ġregister For Activity Result ( ĊĠĠĠĠĠĠĠ ĠActivity Result Contracts . Request Multiple Permissions () ĊĠĠĠ Ġ) Ġ{ Ġpermissions Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Request Permission Result ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions . entries . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġuser Ġinteraction Ġwas Ġinterrupted , Ġthe Ġpermission Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġcancelled Ġand Ġyou Ġreceive Ġan Ġempty Ġarray . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" User Ġinteraction Ġwas Ġcancelled .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions . entries . first (). value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( permissions . entries . first (). key Ġ== ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpermissions . entries . first (). key Ġ== ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġlocation Type Ġ== ĠLocation Type . BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġrequest Background Location Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġset Result ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Denied Explanation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permissions . entries . first (). key Ġ== ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission UI Data ?. foreground ?. sn ackbar _ permission _ den ied _ explanation _ res !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission UI Data ?. background ?. sn ackbar _ permission _ den ied _ explanation _ res !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( dialog ?. window ?. decor View !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Denied Explanation , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġintent Ġthat Ġdisplays Ġthe ĠApp Ġsettings Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . from Parts (" package ", Ġrequire Activity (). packageName , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġdenied Ġa Ġprevious Ġpermission Ġrequest , Ġbut Ġdidn 't Ġcheck Ġ" Don 't Ġask Ġagain ", Ġthese ĊĠĠĠ Ġ// ĠSn ack bars Ġprovided Ġan Ġexplanation Ġfor Ġwhy Ġuser Ġshould Ġapprove , Ġi . e ., Ġthe Ġadditional ĊĠĠĠ Ġ// Ġr ationale . ĊĠĠĠ Ġprivate Ġval Ġfine Location Rational Snackbar Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. window ?. decor View !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission UI Data ?. foreground ?. sn ackbar _ permission _ ration ale _ res !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( android . R . string . ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġbackground Rational Snackbar Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. window ?. decor View !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission UI Data ?. background ?. sn ackbar _ permission _ ration ale _ res !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( android . R . string . ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ BACKGROUND _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Result ( result : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ Ġit ( result ) Ġ} ĊĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ UI _ DATA Ġ= Ġ" PERMISSION _ UI _ DATA " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ REQUEST _ TYPE Ġ= Ġ" PERMISSION _ REQUEST _ TYPE " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġthis Ġfactory Ġmethod Ġto Ġcreate Ġa Ġnew Ġinstance Ġof Ġthis Ġfragment Ġusing Ġthe Ġprovided Ġparameters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġinstance Ġof ĠPermission Fragment . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Type : ĠLocation Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission UI Data : ĠPermission UI Data ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( Boolean ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠPermission Fragment (). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity Ġ&& Ġcontext . is Destroyed ) Ġreturn @ apply ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( PERMISSION _ UI _ DATA , Ġpermission UI Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( PERMISSION _ REQUEST _ TYPE , Ġlocation Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cancel able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow (( context Ġas ĠFragment Activity ). support FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ