package Ġcom . de mon . change voice ĊĊ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . widget . RadioButton Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . de mon . change voice . databinding . Activity Main Binding Ċ import Ġcom . de mon . change voice . record . Play Dialog Fragment Ċ import Ġcom . de mon . change voice . record . Recording Dialog Fragment Ċ import Ġcom . permission x . gu olin dev . Permission X Ċ import Ġjava . io . File Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" MainActivity " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĊĠĠĠ Ġprivate Ġvar Ġall Granted : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġrecord Type Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Permission () ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . rg Group . setOn Checked ChangeListener Ġ{ Ġgroup , Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrb Ġ= Ġgroup . findViewById < RadioButton >( checked Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Type Ġ= Ġgroup . indexOf Child ( rb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsave Path Ġ= ĠSP Util . get (" record _ path ", Ġ"") Ġas ĠString ; ĊĠĠĠĠĠĠĠ Ġif Ġ( File ( save Path ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Path . text Ġ= Ġsave Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . btn Record . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! all Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Permission Ġis Ġmissing !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Record () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecord ing Dialog Fragment . newInstance ( record Type ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Listener ( object Ġ: ĠRecord ing Dialog Fragment . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancel () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish ( path : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Path . text Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSP Util . save (" record _ path ", Ġpath Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Allow ing State Loss ( support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Play . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġbinding . tv Path . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" è¯· åħĪ å½ķ éŁ³ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Dialog Fragment . newInstance ( path ). show Allow ing State Loss ( support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . b nt F mod . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġbinding . tv Path . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" è¯· åħĪ å½ķ éŁ³ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠSound F mod Activity :: class . java ). putExtra (" path ", Ġpath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . b nt Sound Touch . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġbinding . tv Path . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" è¯· åħĪ å½ķ éŁ³ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠSound Touch Activity :: class . java ). putExtra (" path ", Ġpath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġdelete Record () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĪłéĻ¤ ä¸Ĭ ä¸Ģä¸ª å½ķ éŁ³ æĸĩä»¶ ĊĠĠĠ Ġprivate Ġfun Ġdelete Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( binding . tv Path . text . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . tv Path . text Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠPermission X . init ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. permissions ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE , ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĠManifest . permission . RECORD _ AUDIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Ġ{ Ġall Granted , Ġgranted List , Ġdenied List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . all Granted Ġ= Ġall Granted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( all Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Permissions Ġall ĠGr anted !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" These Ġpermissions Ġare Ġdenied : Ġ$ den ied List ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }