/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠD y lan ĠC ai Ċ Ġ* Ċ Ġ* Ġ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 . dy l anc . activity result . launcher . sample . kotlin Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroidx . document file . provider . Document File Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . dy l anc . activity result . launcher .* Ċ import Ġcom . dy l anc . activity result . launcher . sample . Base Activity Ċ import Ġcom . dy l anc . activity result . launcher . sample . R Ċ import Ġcom . dy l anc . activity result . launcher . sample . databinding . Activity Launcher Binding Ċ import Ġcom . dy l anc . activity result . launcher . sample . kotlin . launcher . Input Text Activity Ċ import Ġcom . dy l anc . activity result . launcher . sample . kotlin . launcher . Input Text Launcher Ċ import Ġcom . dy l anc . activity result . launcher . sample . kotlin . launcher . Input Text Result Contract . Companion . KEY _ NAME Ċ import Ġcom . dy l anc . activity result . launcher . sample . kotlin . launcher . Input Text Result Contract . Companion . KEY _ TITLE Ċ import Ġcom . dy l anc . activity result . launcher . sample . kotlin . launcher . Input Text Result Contract . Companion . KEY _ VALUE Ċ import Ġcom . dy l anc . activity result . launcher . sample . widget . Picture Dialog Fragment Ċ import Ġcom . dy l anc . view binding . binding Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . transform Ċ import Ġkotlinx . coroutines . launch ĊĊ Ċ class ĠCor outine Usage Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠ Ġprivate Ġval Ġbinding : ĠActivity Launcher Binding Ġby Ġbinding () ĊĠ Ġprivate Ġval ĠstartActivity Launcher Ġ= ĠStart Activity Launcher ( this ) ĊĠ Ġprivate Ġval Ġtake Picture Launcher Ġ= ĠTake Picture Launcher ( this ) ĊĠ Ġprivate Ġval Ġtake Picture Preview Launcher Ġ= ĠTake Picture Preview Launcher ( this ) ĊĠ Ġprivate Ġval Ġtake Video Launcher Ġ= ĠTake Video Launcher ( this ) ĊĠ Ġprivate Ġval Ġpick Content Launcher Ġ= ĠPick Content Launcher ( this ) ĊĠ Ġprivate Ġval Ġget Multiple Contents Launcher Ġ= ĠGet Multiple Contents Launcher ( this ) ĊĠ Ġprivate Ġval Ġcrop Picture Launcher Ġ= ĠC rop Picture Launcher ( this ) ĊĠ Ġprivate Ġval Ġrequest Permission Launcher Ġ= ĠRequest Permission Launcher ( this ) ĊĠ Ġprivate Ġval Ġrequest Multiple Permissions Launcher Ġ= ĠRequest Multiple Permissions Launcher ( this ) ĊĠ Ġprivate Ġval Ġapp Details Settings Launcher Ġ= ĠApp Details Settings Launcher ( this ) ĊĠ Ġprivate Ġval Ġcreate Document Launcher Ġ= ĠCreate Document Launcher ( this ) ĊĠ Ġprivate Ġval Ġopen Document Launcher Ġ= ĠOpen Document Launcher ( this ) ĊĠ Ġprivate Ġval Ġopen Multiple Documents Launcher Ġ= ĠOpen Multiple Documents Launcher ( this ) ĊĠ Ġprivate Ġval Ġopen Document Tree Launcher Ġ= ĠOpen Document Tree Launcher ( this ) ĊĠ Ġprivate Ġval Ġpick Contact Launcher Ġ= ĠPick Contact Launcher ( this ) ĊĠ Ġprivate Ġval Ġenable Bluetooth Launcher Ġ= ĠEnable Bluetooth Launcher ( this ) ĊĠ Ġprivate Ġval Ġenable Location Launcher Ġ= ĠEnable Location Launcher ( this ) ĊĠ Ġprivate Ġval Ġinput Text Launcher Ġ= ĠInput Text Launcher ( this ) ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠ Ġbtn Start Activity . setOnClickListener Ġ{ Ġstart Input Text Activity () Ġ} ĊĠĠĠĠĠ Ġbtn Take Picture Preview . setOnClickListener Ġ{ Ġtake Picture Preview () Ġ} ĊĠĠĠĠĠ Ġbtn Take Picture . setOnClickListener Ġ{ Ġtake Picture () Ġ} ĊĠĠĠĠĠ Ġbtn Crop Picture . setOnClickListener Ġ{ Ġtake Picture And Crop It () Ġ} ĊĠĠĠĠĠ Ġbtn Take Video . setOnClickListener Ġ{ Ġtake Video () Ġ} ĊĠĠĠĠĠ Ġbtn Pick Picture . setOnClickListener Ġ{ Ġpick Picture () Ġ} ĊĠĠĠĠĠ Ġbtn Pick Video . setOnClickListener Ġ{ Ġpick Video () Ġ} ĊĠĠĠĠĠ Ġbtn Get Multiple Picture . setOnClickListener Ġ{ Ġget Multiple Picture () Ġ} ĊĠĠĠĠĠ Ġbtn Get Multiple Video . setOnClickListener Ġ{ Ġget Multiple Video () Ġ} ĊĠĠĠĠĠ Ġbtn Request Permission . setOnClickListener Ġ{ Ġrequest Permission () Ġ} ĊĠĠĠĠĠ Ġbtn Request Multiple Permissions . setOnClickListener Ġ{ Ġrequest Multiple Permissions () Ġ} ĊĠĠĠĠĠ Ġbtn App Details Settings . setOnClickListener Ġ{ Ġgo To App Detail Settings () Ġ} ĊĠĠĠĠĠ Ġbtn Create Document . setOnClickListener Ġ{ Ġcreate Document () Ġ} ĊĠĠĠĠĠ Ġbtn Open Document . setOnClickListener Ġ{ Ġopen Document () Ġ} ĊĠĠĠĠĠ Ġbtn Open Multiple Document . setOnClickListener Ġ{ Ġopen Multiple Documents () Ġ} ĊĠĠĠĠĠ Ġbtn Open Document Tree . setOnClickListener Ġ{ Ġopen Document Tree () Ġ} ĊĠĠĠĠĠ Ġbtn Pick Contact . setOnClickListener Ġ{ Ġpick Contact () Ġ} ĊĠĠĠĠĠ Ġbtn Enable Bluetooth . setOnClickListener Ġ{ Ġenable Bluetooth () Ġ} ĊĠĠĠĠĠ Ġbtn Enable Location . setOnClickListener Ġ{ Ġenable Location () Ġ} ĊĠĠĠĠĠ Ġbtn Input Text . setOnClickListener Ġ{ Ġinput Text () Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġstart Input Text Activity () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġactivity Result Ġ= ĠstartActivity Launcher . launch For Result < Input Text Activity >( ĊĠĠĠĠĠ ĠKEY _ NAME Ġto Ġ" nickname ", ĊĠĠĠĠĠ ĠKEY _ TITLE Ġto Ġ" Nick name ", ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( activity Result . result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠ Ġactivity Result . data ?. getString Extra ( KEY _ VALUE )?. let Ġ{ Ġtoast ( it ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtake Picture Preview () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġbitmap Ġ= Ġtake Picture Preview Launcher . launch For Result () ĊĠĠĠ ĠPicture Dialog Fragment ( bitmap ). show ( support FragmentManager ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtake Picture () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġtake Picture Launcher . launch For Result () ĊĠĠĠ ĠPicture Dialog Fragment ( uri ) Ġ{ ĊĠĠĠĠĠ Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠ Ġ}. show ( support FragmentManager ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtake Picture And Crop It () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġtake Picture Launcher . launch For Result () ĊĠĠĠ Ġval Ġc ropped Uri Ġ= Ġcrop Picture Launcher . launch For Result ( uri ) ĊĠĠĠ Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠ ĠPicture Dialog Fragment ( c ropped Uri ). show ( support FragmentManager ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtake Video () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġtake Video Launcher . launch For Result () ĊĠĠĠ ĠPicture Dialog Fragment ( uri ) Ġ{ ĊĠĠĠĠĠ Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠ Ġ}. show ( support FragmentManager ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpick Picture () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . no _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick Picture () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. transform Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġemit ( pick Content Launcher . launch For Image Result ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠPicture Dialog Fragment ( uri ). show ( support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpick Video () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . no _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick Video () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. transform Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġemit ( pick Content Launcher . launch For Video Result ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠPicture Dialog Fragment ( uri , Ġtrue ). show ( support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Multiple Picture () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . no _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Multiple Picture () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. transform Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġemit ( get Multiple Contents Launcher . launch For Image Result ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġur is Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Items ( R . string . selected _ files , Ġur is . map Ġ{ Ġit . displayName !! Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Multiple Video () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . no _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ read _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Multiple Video () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. transform Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġemit ( get Multiple Contents Launcher . launch For Video Result ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġur is Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Items ( R . string . selected _ files , Ġur is . map Ġ{ Ġit . displayName !! Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . no _ location _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ location _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . location _ permission _ gr anted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Multiple Permissions () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Multiple Permissions Launcher . launch For Flow ( ĊĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġlist , Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . size Ġ== Ġ 2 Ġ-> ĠR . string . need _ location _ and _ read _ permissions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . first () Ġ== ĠManifest . permission . ACCESS _ F INE _ LOCATION Ġ-> ĠR . string . need _ location _ permission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . string . need _ read _ permission ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , Ġmessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . size Ġ== Ġ 2 Ġ-> ĠR . string . need _ location _ and _ read _ permissions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . first () Ġ== ĠManifest . permission . ACCESS _ F INE _ LOCATION Ġ-> ĠR . string . need _ location _ permission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . string . need _ read _ permission ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , Ġmessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Multiple Permissions () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ). collect Ġ{ ĊĠĠĠĠĠĠĠ Ġtoast ( R . string . location _ and _ read _ permissions _ gr anted ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgo To App Detail Settings () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġapp Details Settings Launcher . launch For Result () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġenable Bluetooth () Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠ Ġrequest Permission Launcher . launch For Flow ( Manifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠ Ġon Denied Ġ= Ġ{ Ġsettings Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . bluetooth _ need _ location _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Launcher . launch () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Explain Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( R . string . need _ permission _ title , ĠR . string . need _ location _ permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Bluetooth () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. transform Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbluetooth Enabled Ġ= Ġenable Bluetooth Launcher . launch For Result () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Enabled Ġ&& Ġ! is Location Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . enable _ location _ reason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable Location Launcher . launch For Result ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bluetooth Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Unit ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . bluetooth _ enabled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġenable Location () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġif Ġ( enable Location Launcher . launch For Result ()) Ġ{ ĊĠĠĠĠĠ Ġtoast ( R . string . location _ enabled ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġtoast ( R . string . location _ disabled ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Document () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġcreate Document Launcher . launch For Result () ĊĠĠĠ Ġcontent Resolver . query ( uri , ĠarrayOf ( Open able Columns . DISPLAY _ NAME ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠ Ġ? . use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( Open able Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠ Ġtoast (" create Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Document () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġopen Document Launcher . launch For Result (" application /* ") ĊĠĠĠ Ġcontent Resolver . query ( uri , ĠarrayOf ( Open able Columns . DISPLAY _ NAME ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠ Ġ? . use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( Open able Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Multiple Documents () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġur is Ġ= Ġopen Multiple Documents Launcher . launch For Non Empty Result (" application /* ") ĊĠĠĠ Ġval Ġnames Ġ= Ġur is . map Ġ{ ĊĠĠĠĠĠ Ġcontent Resolver . query ( it , ĠarrayOf ( Open able Columns . DISPLAY _ NAME ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ? . use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( Open able Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĠĠĠ Ġ} ĊĠĠĠ Ġshow Items ( R . string . documents , Ġnames ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Document Tree () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġopen Document Tree Launcher . launch For Result () ĊĠĠĠ Ġval Ġdocument File Ġ= ĠDocument File . from Tree Uri ( this @ Coroutine Usage Activity , Ġuri ) !! ĊĠĠĠ Ġval Ġnames Ġ= Ġdocument File . list Files (). map Ġ{ Ġit . name . or Empty () Ġ} ĊĠĠĠ Ġshow Items ( R . string . documents , Ġnames ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpick Contact () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġpick Contact Launcher . launch For Result () ĊĠĠĠ Ġcontent Resolver . query ( uri , ĠarrayOf ( Contacts Contract . Data . DISPLAY _ NAME ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠ Ġ? . use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Contacts Contract . Data . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠ Ġtoast ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinput Text () Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġinput Text Launcher . launch For Result ( name Ġ= Ġ" name ", Ġtitle Ġ= Ġ" Input Ġname ") ĊĠĠĠ Ġtoast ( value ) ĊĠ Ġ} Ċ }