package Ġapps . j iz zu . simp let odo . ui . view . base čĊč Ċ import Ġandroid . animation . Value Animator č Ċ import Ġandroid . content . Context č Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . content . pm . PackageManager č Ċ import Ġandroid . graphics . Color č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . provider . Settings č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . WindowManager č Ċ import Ġandroid . view . input method . Input Method Manager č Ċ import Ġandroid . widget . EditText č Ċ import Ġandroid . widget . ScrollView č Ċ import Ġandroidx . appcompat . app . AppCompatActivity č Ċ import Ġandroidx . appcompat . widget . Toolbar č Ċ import Ġandroidx . core . app . Activity Compat č Ċ import Ġandroidx . core . content . Context Compat č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġapps . j iz zu . simp let odo . R č Ċ import Ġapps . j iz zu . simp let odo . data . models . Task č Ċ import Ġapps . j iz zu . simp let odo . ui . view . task . Edit Task Activity č Ċ import Ġapps . j iz zu . simp let odo . utils . toast Long č Ċ import Ġcom . google . android . material . sn ackbar . Snackbar č Ċ import Ġda io . io . d ress code . d ress Code Style Id č Ċ import Ġkotlinx . android . synt hetic . main . toolbar .* čĊč Ċ abstract Ġclass ĠBase Activity Ġ: ĠAppCompatActivity () Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Resume () čĊĠĠĠĠĠĠĠ Ġinit StatusBar () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġinit Toolbar ( title Text : ĠString Ġ= Ġ"", Ġdrawable : ĠInt ? Ġ= ĠR . drawable . round _ arrow _ back _ black _ 2 4 , Ġview : ĠToolbar ? Ġ= Ġtoolbar ) Ġ{ čĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"" čĊĠĠĠĠĠĠĠ Ġtv Toolbar Title . text Ġ= Ġtitle Text čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( toolbar Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġwhen Ġ( d ress Code Style Id ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Light Ġ-> ĠR . color . grey White čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Dark Ġ-> ĠR . color . deep Blue Grey čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Black Ġ-> ĠR . color . black čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . color . grey White čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= ĠContext Compat . getColor ( this , Ġcolor ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Support ActionBar ( view ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Home As Up Indicator ( drawable ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinit StatusBar () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( d ress Code Style Id ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Light Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġflags Ġ= Ġtoolbar . system Ui Visibility čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠView . SYSTEM _ UI _ FLAG _ LIGHT _ STATUS _ BAR čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . system Ui Visibility Ġ= Ġflags čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . window . status Bar Color Ġ= ĠColor . WHITE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Dark Ġ-> ĠContext Compat . getColor ( this , ĠR . color . deep Blue Grey ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . App Theme _ Black Ġ-> ĠContext Compat . getColor ( this , ĠR . color . black ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġopen Application Settings () Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent ( Settings . ACTION _ APPLICATION _ DETAILS _ SETTINGS , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" package :$ packageName ")), ĠPER MISSION _ REQUEST _ CODE ) čĊčĊĠĠĠ Ġfun Ġrequest Per ms ( permission : ĠString , Ġfragment : ĠFragment ? Ġ= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . request Permissions ( array Of ( permission ), ĠPER MISSION _ REQUEST _ CODE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġrequest Permissions ( array Of ( permission ), ĠPER MISSION _ REQUEST _ CODE ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġshow Task Details Activity ( task : ĠTask ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠEdit Task Activity :: class . java ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" id ", Ġtask . id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" title ", Ġtask . title ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" note ", Ġtask . note ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" position ", Ġtask . position ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" time _ stamp ", Ġtask . time Stamp ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . date Ġ!= Ġ 0 L ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" date ", Ġtask . date ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Toolbar Shadow ( start : ĠFloat , Ġend : ĠFloat ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue Animator . of Float ( start , Ġend ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġupdated Animation Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . elevation Ġ= Ġupdated Animation . animated Value Ġas ĠFloat čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġinit ScrollView Listener ( scroll View : ĠScroll View ) Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġis Shadow Shown Ġ= Ġfalse čĊčĊĠĠĠĠĠĠĠ Ġscroll View . view Tree Observer . add On Scroll Changed Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll View . scroll Y Ġ> Ġ 0 Ġ&& Ġ! is Shadow Shown ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Toolbar Shadow ( 0 f , Ġ 1 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow Shown Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( scroll View . scroll Y Ġ== Ġ 0 Ġ&& Ġis Shadow Shown ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Toolbar Shadow ( 1 0 f , Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow Shown Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġis Has Permissions ( permission : ĠString ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠInt čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( current Permission Ġin ĠarrayOf ( permission )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcheck Calling Or Self Permission ( current Permission ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġshow No Permission Snackbar ( view : ĠView , Ġsn ackbar Message : ĠString , Ġtoast Message : ĠString , Ġanchor View : ĠView ? Ġ= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( view , Ġsn ackbar Message , ĠSn ackbar . LENGTH _ LONG ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . permission _ sn ackbar _ button _ settings ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Application Settings () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Long ( toast Message ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( anchor View Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . anchor View Ġ= Ġanchor View čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġsn ackbar . show () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġrequest Permission With R ationale ( view : ĠView , Ġmessage : ĠString , Ġpermission : ĠString , Ġcallback : ĠPermission RequestListener ? Ġ= Ġnull , Ġanchor View : ĠView ? Ġ= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( this , Ġpermission )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( view , Ġmessage , ĠSn ackbar . LENGTH _ LONG ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . permission _ sn ackbar _ button _ grant ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Permission Request () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġrequest Per ms ( permission ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anchor View Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . anchor View Ġ= Ġanchor View čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Permission Request () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġrequest Per ms ( permission ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġshow Keyboard ( edit Text : ĠEditText ) Ġ{ čĊĠĠĠĠĠĠĠ Ġedit Text . request Focus () čĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager čĊĠĠĠĠĠĠĠ Ġinput Method Manager . toggle Soft Input ( Input Method Manager . SHOW _ FOR CED , ĠInput Method Manager . HIDE _ IMP LICIT _ ONLY ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġhide Keyboard ( edit Text : ĠEditText ) Ġ{ čĊĠĠĠĠĠĠĠ Ġedit Text . clear Focus () čĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager čĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( edit Text . window Token , Ġ 0 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinterface ĠPermission RequestListener Ġ{ čĊĠĠĠĠĠĠĠ Ġfun Ġon Permission Request () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPER MISSION _ REQUEST _ CODE Ġ= Ġ 1 2 3 čĊĠĠĠ Ġ} č Ċ }