/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ* Ċ Ġ* Ġ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 . af ol le st ad . mn ml screen record . ui . main Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent . ACTION _ SEND Ċ import Ġandroid . content . Intent . ACTION _ VIEW Ċ import Ġandroid . content . Intent . EXTRA _ STREAM Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings . ACTION _ MANAGE _ OVER LAY _ PERMISSION Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . af ol le st ad . ass ent . Permission . WRITE _ EXTERNAL _ STORAGE Ċ import Ġcom . af ol le st ad . ass ent . ask For Permissions Ċ import Ġcom . af ol le st ad . inline activity result . startActivity For Result Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . callbacks . on Cancel Ċ import Ġcom . af ol le st ad . material dialogs . callbacks . on Dismiss Ċ import Ġcom . af ol le st ad . mn ml screen record . R Ċ import Ġcom . af ol le st ad . mn ml screen record . common . intent . Url Launcher Ċ import Ġcom . af ol le st ad . mn ml screen record . common . misc . startActivity Ċ import Ġcom . af ol le st ad . mn ml screen record . common . misc . to Uri Ċ import Ġcom . af ol le st ad . mn ml screen record . common . misc . toast Ċ import Ġcom . af ol le st ad . mn ml screen record . common . rx . attach Lifecycle Ċ import Ġcom . af ol le st ad . mn ml screen record . common . view . on De bounc ed Click Ċ import Ġcom . af ol le st ad . mn ml screen record . common . view . on Scroll Ċ import Ġcom . af ol le st ad . mn ml screen record . common . view . setOn MenuItem De bounc ed ClickListener Ċ import Ġcom . af ol le st ad . mn ml screen record . common . view . show Or Hide Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . permission . Mn ml R ationale Handler Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . permission . Overlay Explanation Callback Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . permission . Overlay Explanation Dialog Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . record ings . Recording Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . service . Background Service . Companion . PERMISSION _ DEN IED Ċ import Ġcom . af ol le st ad . mn ml screen record . engine . service . Error Dialog Activity Ċ import Ġcom . af ol le st ad . mn ml screen record . the ming . Dark Mode Switch Activity Ċ import Ġcom . af ol le st ad . mn ml screen record . ui . about . About Dialog Ċ import Ġcom . af ol le st ad . mn ml screen record . ui . settings . Settings Activity Ċ import Ġcom . af ol le st ad . mn ml screen record . views . as Background Tint Ċ import Ġcom . af ol le st ad . mn ml screen record . views . as Enabled Ċ import Ġcom . af ol le st ad . mn ml screen record . views . as Icon Ċ import Ġcom . af ol le st ad . mn ml screen record . views . as Text Ċ import Ġcom . af ol le st ad . re cyc lic al . datasource . empty Selectable DataSource Typed Ċ import Ġcom . af ol le st ad . re cyc lic al . setup Ċ import Ġcom . af ol le st ad . re cyc lic al . view holder . has Selection Ċ import Ġcom . af ol le st ad . re cyc lic al . view holder . isSelected Ċ import Ġcom . af ol le st ad . re cyc lic al . with Item Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . google . android . gms . ads . Ad Request Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers . main Thread Ċ import Ġkotlinx . android . synt hetic . main . activity _ main . empty _ view Ċ import Ġkotlinx . android . synt hetic . main . activity _ main . fab Ċ import Ġkotlinx . android . synt hetic . main . activity _ main . list Ċ import Ġkotlinx . android . synt hetic . main . include _ app bar . toolbar Ċ import Ġkotlinx . android . synt hetic . main . list _ item _ recording . view . thumbnail Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ import Ġkotlinx . android . synt hetic . main . include _ app bar . app _ toolbar Ġas Ġapp Toolbar Ċ import Ġkotlinx . android . synt hetic . main . include _ app bar . toolbar _ title Ġas Ġtoolbar Title Ċ import Ġcom . google . android . gms . ads . Mobile Ads ; Ċ import Ġcom . google . android . gms . ads . Ad View Ċ import Ġcom . google . android . gms . ads . Inter stitial Ad ĊĊ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ( af ol le st ad ) Ġ*/ Ċ class ĠMainActivity Ġ: ĠDark Mode Switch Activity (), ĠOverlay Explanation Callback Ġ{ ĊĊĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Main ViewModel >() ĊĠ Ġprivate Ġval Ġurl Launcher Ġby Ġinject < Url Launcher > Ġ{ Ġparameters Of ( this ) Ġ} ĊĠ Ġlateinit Ġvar Ġm Ad View Ġ: ĠAd View ĊĠ Ġprivate Ġlateinit Ġvar Ġm Inter stitial Ad : ĠInter stitial Ad ĊĠ Ġprivate Ġval ĠdataSource Ġ= ĊĠĠĠ Ġempty Selectable DataSource Typed < Recording >(). apply Ġ{ ĊĠĠĠĠĠ Ġon Selection Change Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . has Selection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( toolbar . navigation Icon Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation Icon ( R . drawable . ic _ close ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf late Menu ( R . menu . edit _ mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtoolbar Title . text Ġ= ĠgetString ( R . string . app _ name _ short _ with Number , Ġit . getSelection Count ()) ĊĠĠĠĠĠĠĠĠĠ Ġtoolbar . menu . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Item ( R . id . share ). isVisible Ġ= Ġit . getSelection Count () Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Item ( R . id . delete ). isEnabled Ġ= Ġit . getSelection Count () Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoolbar . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf late Menu ( R . menu . main ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtoolbar Title . text Ġ= ĠgetString ( R . string . app _ name _ short ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠ ĠMobile Ads . initialize ( this , ĊĠĠĠĠĠ Ġ" ca - app - pub - 3 9 4 0 2 5 6 0 9 9 9 4 2 5 4 4 ~ 3 3 4 7 5 1 1 7 1 3 ") ĊĊĠĠĠ Ġm Ad View Ġ= ĠfindViewById ( R . id . ad View ) ĊĠĠĠ Ġval Ġad Request Ġ= ĠAd Request . Builder (). build () ĊĠĠĠ Ġm Ad View . load Ad ( ad Request ) ĊĠĠĠ Ġm Inter stitial Ad Ġ= ĠInter stitial Ad ( this ) ĊĠĠĠ Ġm Inter stitial Ad . ad Unit Id Ġ= Ġ" ca - app - pub - 5 3 8 1 9 0 9 8 6 7 9 5 0 1 5 4 / 9 8 1 0 4 7 5 2 1 " ĊĠĠĠ Ġm Inter stitial Ad . load Ad ( Ad Request . Builder (). build ()) ĊĊĊĠĠĠ Ġsetup Toolbar () ĊĠĠĠ Ġsetup Grid () ĊĊĠĠĠ Ġfab . on De bounc ed Click Ġ{ ĠviewModel . fab Clicked () Ġ} ĊĠĠĠ Ġlifecycle . add Observer ( viewModel ) ĊĊĠĠĠ ĠviewModel . on Record ings () ĊĠĠĠĠĠ Ġ. observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource . set ( ĊĠĠĠĠĠĠĠĠĠ Ġnew Items Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠ Ġare The Same Ġ= ĠRecord ing . Companion :: are The Same , ĊĠĠĠĠĠĠĠĠĠ Ġare Contents The Same Ġ= ĠRecord ing . Companion :: are Contents The Same ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ ĠviewModel . on Fab Color Res () ĊĠĠĠĠĠ Ġ. as Background Tint ( this , Ġfab ) ĊĠĠĠ ĠviewModel . on Fab Icon Res () ĊĠĠĠĠĠ Ġ. as Icon ( this , Ġfab ) ĊĠĠĠ ĠviewModel . on Fab Text Res () ĊĠĠĠĠĠ Ġ. as Text ( this , Ġfab ) ĊĠĠĠ ĠviewModel . on Fab Enabled () ĊĠĠĠĠĠ Ġ. as Enabled ( this , Ġfab ) ĊĊĠĠĠ ĠviewModel . on Need Overlay Permission () ĊĠĠĠĠĠ Ġ. observe On ( main Thread ()) ĊĠĠĠĠĠ Ġ. subscribe Ġ{ ĠOverlay Explanation Dialog . show ( this ) Ġ} ĊĠĠĠĠĠ Ġ. attach Lifecycle ( this ) ĊĠĠĠ ĠviewModel . on Need Storage Permission () ĊĠĠĠĠĠ Ġ. observe On ( main Thread ()) ĊĠĠĠĠĠ Ġ. subscribe Ġ{ Ġon Should Ask For Storage Permission () Ġ} ĊĠĠĠĠĠ Ġ. attach Lifecycle ( this ) ĊĠĠĠ ĠviewModel . onError () ĊĠĠĠĠĠ Ġ. observe On ( main Thread ()) ĊĠĠĠĠĠ Ġ. subscribe Ġ{ ĠError Dialog Activity . show ( this , Ġit ) Ġ} ĊĠĠĠĠĠ Ġ. attach Lifecycle ( this ) ĊĊĠĠĠ Ġcheck For Media Projection Availability () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġinvalidate Toolbar Elevation ( list . compute Vertical Scroll Offset ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠ Ġif Ġ( dataSource . has Selection ()) Ġ{ ĊĠĠĠĠĠ ĠdataSource . de selectAll () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Should Ask For Overlay Permission () Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠ ĠACTION _ MANAGE _ OVER LAY _ PERMISSION , ĊĠĠĠĠĠ Ġ" package :$ packageName ". to Uri () ĊĠĠĠ Ġ) ĊĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠ Ġintent Ġ= Ġintent , ĊĠĠĠĠĠ Ġrequest Code Ġ= ĠD RAW _ OVER _ OTHER _ APP _ PERMISSION ĊĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠ ĠviewModel . permission Granted () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Should Ask For Storage Permission () Ġ{ ĊĠĠĠ Ġask For Permissions ( ĊĠĠĠĠĠ ĠWRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠ Ġrequest Code Ġ= ĠSTORAGE _ PERMISSION , ĊĠĠĠĠĠ Ġr ationale Handler Ġ= ĠM n ml R ationale Handler ( this ) ĊĠĠĠ Ġ) Ġ{ Ġres Ġ-> ĊĠĠĠĠĠ Ġif Ġ(! res . is All Granted ( WRITE _ EXTERNAL _ STORAGE )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( PERMISSION _ DEN IED )) ĊĠĠĠĠĠĠĠ Ġtoast ( R . string . permission _ den ied _ note ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . permission Granted () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ= Ġtoolbar . run Ġ{ ĊĠĠĠ Ġinf late Menu ( R . menu . main ) ĊĠĠĠ Ġset Navigation OnClickListener Ġ{ ĠdataSource . de selectAll () Ġ} ĊĠĠĠ Ġset On MenuItem De bounc ed ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR . id . about Ġ-> ĠAbout Dialog . show ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ ĠR . id . provide _ feedback Ġ-> Ġurl Launcher . view Url ( ĊĠĠĠĠĠĠĠĠĠ Ġ" https :// github . com / af ol le st ad / mn ml / issues / new / choose " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠR . id . settings Ġ-> ĠstartActivity < Settings Activity >() ĊĠĠĠĠĠĠĠ ĠR . id . share Ġ-> Ġshare Recording ( dataSource . getSelected Items (). single ()) ĊĠĠĠĠĠĠĠ ĠR . id . delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Record ings ( dataSource . getSelected Items ()) ĊĠĠĠĠĠĠĠĠĠ ĠdataSource . de selectAll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠ Ġprivate Ġfun Ġsetup Grid () Ġ{ ĊĠĠĠ Ġlist . setup Ġ{ ĊĠĠĠĠĠ Ġwith DataSource ( dataSource ) ĊĠĠĠĠĠ Ġwith Empty View ( empty _ view ) ĊĠĠĠĠĠ Ġwith Item < Recording , ĠRecord ing ViewHolder >( R . layout . list _ item _ recording ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Bind (:: Recording ViewHolder ) Ġ{ Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠG lide . with ( thumbnail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions (). frame ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( item . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( item View . thumbnail ) ĊĠĠĠĠĠĠĠĠĠ Ġname . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠĠĠ Ġdetails . text Ġ= Ġ"${ item . size String ()} ĠâĢĵ Ġ${ item . timestamp String () }" ĊĠĠĠĠĠĠĠĠĠ ĠcheckBox . show Or Hide ( has Selection ()) ĊĠĠĠĠĠĠĠĠĠ ĠcheckBox . isChecked Ġ= Ġis Selected () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠonClick Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Selection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Selection () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Recording Clicked ( item ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Long Click Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoggle Selection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġlist . on Scroll Ġ{ Ġinvalidate Toolbar Elevation ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Recording Clicked ( recording : ĠRecord ing ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠstartActivity ( Intent ( ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠsetData And Type ( recording . to Uri (), Ġ" video /* ") ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠ Ġtoast ( R . string . install _ video _ viewer ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinvalidate Toolbar Elevation ( scroll Y : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( scroll Y Ġ> Ġ( toolbar . meas ured Height Ġ/ Ġ 2 )) Ġ{ ĊĠĠĠĠĠ Ġapp Toolbar . elevation Ġ= Ġresources . get Dimension ( R . dim en . raised _ toolbar _ elevation ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġapp Toolbar . elevation Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshare Recording ( recording : ĠRecord ing ) Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġrecording . to Uri () ĊĠĠĠ ĠstartActivity ( Intent ( ACTION _ SEND ). apply Ġ{ ĊĠĠĠĠĠ ĠsetData And Type ( uri , Ġ" video /* ") ĊĠĠĠĠĠ Ġput Extra ( EXTRA _ STREAM , Ġuri ) ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck For Media Projection Availability () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠClass . forName (" android . media . projection . Media Projection Manager ") ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠ ĠMaterial Dialog ( this ). show Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle ( text Ġ= Ġ" Device ĠUnsupported ") ĊĠĠĠĠĠĠĠ Ġmessage ( ĊĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Your Ġdevice Ġlack s Ġsupport Ġfor ĠMedia Projection Manager . ĠEither Ġthe Ġmanufacturer Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" of Ġyour Ġdevice Ġleft Ġit Ġout , Ġor Ġyou Ġare Ġusing Ġan Ġemulator ." ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpositive Button ( android . R . string . ok ) Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġcancel On Touch Outside ( false ) ĊĠĠĠĠĠĠĠ Ġcancel able ( false ) ĊĠĠĠĠĠĠĠ Ġon Cancel Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġon Dismiss Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠD RAW _ OVER _ OTHER _ APP _ PERMISSION Ġ= Ġ 6 8 ĊĠĠĠ Ġprivate Ġconst Ġval ĠSTORAGE _ PERMISSION Ġ= Ġ 6 4 ĊĠ Ġ} ĊĊ Ċ }