package Ġjp . mu o . sync mem ories Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . preference . EditText Preference Ċ import Ġandroidx . preference . Preference Ċ import Ġandroidx . preference . Preference Fragment Compat Ċ import Ġpermissions . dispatcher . Needs Permission Ċ import Ġpermissions . dispatcher . Runtime Permissions Ċ Ċ @ Runtime Permissions Ċ class ĠSettings Fragment Ġ: ĠPreference Fragment Compat () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠP REF KEYS _ TO _ REQUEST _ CODES Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠInt >(" src Root " Ġto Ġ 1 0 0 0 1 , Ġ" dest J peg Root " Ġto Ġ 1 0 0 0 2 , Ġ" dest Raw Root " Ġto Ġ 1 0 0 0 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Needs Permission ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠ Ġfun Ġacquire Directory ( code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent ( Intent . ACTION _ OPEN _ DOCUMENT _ TREE ), Ġcode ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġedit Text Map Ġ= Ġmutable Map Of < Preference , ĠEditText >() ĊĊĠĠĠ Ġprivate Ġfun Ġsetup EditText Preference ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < EditText Preference >( key )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacquire Directory With Permission Check ( PRE F KEYS _ TO _ REQUEST _ CODES [ key ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Bind EditText Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Map [ this ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Provider Ġ= ĠEditText Preference . Simple Summary Provider . getInstance () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . preferences , Ġroot Key ) ĊĠĠĠĠĠĠĠ Ġedit Text Map . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin ĠP REF KEYS _ TO _ REQUEST _ CODES . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup EditText Preference ( key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġresult Data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ!= ĠActivity . RESULT _ OK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġq Ġ= ĠP REF KEYS _ TO _ REQUEST _ CODES . filter Values Ġ{ Ġit Ġ== Ġrequest Code Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( q . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġkv Ġ= Ġq . toList ()[ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġpref : ĠEditText Preference Ġ= Ġfind Preference ( kv . first ) !! ĊĠĠĠĠĠĠĠ Ġval Ġtree Uri Ġ= Ġresult Data !!. data Ġas ĠUri ĊĠĠĠĠĠĠĠ Ġcontext !!. grant Uri Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !!. packageName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Uri , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontext !!. content Resolver . take Persist able Uri Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Uri , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpref . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Map [ this ]?. setText ( tree Uri . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġon Request Permissions Result ( request Code , Ġgrant Results ) ĊĠĠĠ Ġ} Ċ }