package Ġblack . br ack en . p ics ort er . settings _ observed _ directory Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . observe Ċ import Ġblack . br ack en . p ics ort er . feature _ common . ext . create Intent For External Storage Permission Ċ import Ġblack . br ack en . p ics ort er . feature _ common . ext . has External Storage Permission Ċ import Ġblack . br ack en . p ics ort er . settings _ observed _ directory . databinding . Directories Chooser Fragment Binding Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . files . folder Chooser Ċ import Ġcom . x wr ay . group ie . Group Adapter Ċ import Ġcom . x wr ay . group ie . Group ie ViewHolder Ċ import Ġkotlinx . android . synt hetic . main . directories _ cho oser _ fragment .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ import Ġjava . io . File Ċ Ċ class ĠDirect ories Chooser Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Directories Chooser ViewModel >() ĊĊĠĠĠ Ġprivate Ġval Ġrequest Permission To Open Dir Chooser Intent Ġ= Ġcreate Intent For External Storage Permission Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Dialog To Choose Directory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . inflate < Directories Chooser Fragment Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĠR . layout . directories _ cho oser _ fragment , Ġcontainer , Ġfalse ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġbinding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠAppCompatActivity )?. set Support ActionBar ( toolbar Directories ) ĊĠĠĠĠĠĠĠ Ġtoolbar Directories . setTitle ( R . string . title _ directories _ cho oser ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgroup Adapter Ġ= ĠGroup Adapter < Group ie ViewHolder >() ĊĠĠĠĠĠĠĠ Ġre cycler Directories . adapter Ġ= Ġgroup Adapter ĊĊĠĠĠĠĠĠĠ Ġbutton Add Directory . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has External Storage Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog To Choose Directory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission To Open Dir Chooser Intent . launch ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . directory Path Ob served List . observe ( view Lifecycle Owner ) Ġ{ Ġpath List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( group Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( path List . map Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirectory Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġshow Confirmation ToRemove Directory ( path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dialog To Choose Directory () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( context Ġ?: Ġreturn ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Chooser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Directory Ġ= ĠFile ("/ storage / em ulated / 0 / "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Folder Creation Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . try Add Directory ( file . absolute Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. makeText ( context , ĠR . string . error _ dup lication , ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Confirmation ToRemove Directory ( directory Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( context Ġ?: Ġreturn ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( R . string . dialog _ confirm _ remove ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( R . string . dialog _ do _ remove ) Ġ{ ĠviewModel . remove Directory ( directory Path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( R . string . dialog _ cancel ) Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ