package Ġs oko . ek ib un . bang umi . ui . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . children Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġs oko . ek ib un . bang umi . R Ċ import Ġs oko . ek ib un . bang umi . ui . main . fragment . Drawer Fragment Ċ import Ġs oko . ek ib un . bang umi . ui . main . fragment . calendar . Calendar Fragment Ċ import Ġs oko . ek ib un . bang umi . ui . main . fragment . history . History Fragment Ċ import Ġs oko . ek ib un . bang umi . ui . main . fragment . home . Home Fragment Ċ import Ġs oko . ek ib un . bang umi . ui . main . fragment . index . Index Fragment Ċ import Ġs oko . ek ib un . bang umi . ui . search . Search Activity Ċ import Ġs oko . ek ib un . bang umi . ui . setting . Settings Activity Ċ Ċ /** Ċ Ġ* ĠæĬ ½ å± ī Ċ Ġ* Ġ@ property Ġcontext ĠMainActivity Ċ Ġ* Ġ@ property Ġchecked Id ĠInt Ċ Ġ* Ġ@ property Ġhome Fragment ĠHome Fragment Ċ Ġ* Ġ@ property Ġfragments ĠMap < Int , ĠDraw er Fragment > Ċ Ġ* Ġ@ property Ġtoggle ĠAction Bar Drawer Toggle Ċ Ġ* Ġ@ property Ġnavigation ItemSelected Listener ĠFunction 1 < MenuItem , ĠBoolean > Ċ Ġ* Ġ@ constructor Ċ Ġ*/ Ċ class ĠDraw er View ( private Ġval Ġcontext : ĠMainActivity , Ġon Logout : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvar Ġchecked Id Ġ= ĠR . id . nav _ home ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġfind OrCreate Fragment By ClassName ( clazz : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ( context . support FragmentManager . find Fragment By Tag ( clazz . name )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" restore ", Ġclazz . name ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġclazz . newInstance ()) Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġhome Fragment Ġ= Ġfind OrCreate Fragment By ClassName ( Home Fragment :: class . java ) ĊĠĠĠ Ġval Ġcalendar Fragment Ġ= Ġfind OrCreate Fragment By ClassName ( Calendar Fragment :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġfragments : ĠMap < Int , ĠDraw er Fragment > Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠR . id . nav _ home Ġto Ġhome Fragment , ĊĠĠĠĠĠĠĠ ĠR . id . nav _ calendar Ġto Ġcalendar Fragment , ĊĠĠĠĠĠĠĠ ĠR . id . nav _ index Ġto Ġfind OrCreate Fragment By ClassName ( Index Fragment :: class . java ), ĊĠĠĠĠĠĠĠ ĠR . id . nav _ history Ġto Ġfind OrCreate Fragment By ClassName ( History Fragment :: class . java ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtoggle Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . set Support ActionBar ( context . toolbar ) ĊĠĠĠĠĠĠĠ Ġval Ġtoggle Ġ= ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġcontext . drawer _ layout , Ġcontext . toolbar , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ open , ĠR . string . navigation _ drawer _ close ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontext . drawer _ layout . add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . is Drawer Indicator Enabled Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . configuration . orientation Ġ!= ĠConfiguration . OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĠĠĠĠĠĠĠ Ġtoggle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġnavigation ItemSelected Listener Ġ= Ġ{ Ġit : ĠMenuItem Ġ-> ĊĠĠĠĠĠĠĠ Ġcontext . drawer _ layout . close Draw ers () ĊĠĠĠĠĠĠĠ Ġif Ġ( fragments . containsKey ( it . itemId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( it . itemId ) ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ search Ġ-> ĠSearch Activity . startActivity ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ setting Ġ-> Ġcontext . startActivity ( Intent ( context , ĠSettings Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ logout Ġ-> Ġon Logout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcontext . drawer _ layout . setOn Apply Window Insets Listener Ġ{ Ġ_, Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . root _ layout . set Padding ( 0 , Ġin sets . system Window Inset Top , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content _ frame . children . forEach Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . on Apply Window Insets ( in sets . replace System Window Insets ( 0 , Ġ 0 , Ġ 0 , Ġin sets . system Window Inset Bottom )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . consume System Window Insets () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext . nav _ view . set Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation ItemSelected Listener ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġselect ( checked Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¿ĿåŃĺ çĬ¶æĢģ ĊĠĠĠĠ Ġ* Ġ@ param Ġout State ĠBundle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int (" Drawer Checked Id ", Ġchecked Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ ģ ¢å¤į çĬ¶æĢģ ĊĠĠĠĠ Ġ* Ġ@ param ĠsavedInstanceState ĠBundle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect ( savedInstanceState . getInt (" Drawer Checked Id ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį fragment ĊĠĠĠĠ Ġ* Ġ@ return ĠDraw er Fragment ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcurrent (): ĠDraw er Fragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragments [ checked Id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢī ä¸Ń fragment ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġselect ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchecked Id Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġfragments [ id ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġcontext . support FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . content _ frame , Ġfragment , Ġfragment . java Class . name ). run On Commit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . request Apply Insets ( context . drawer _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. commit () ĊĠĠĠĠĠĠĠ Ġcontext . invalidate Options Menu () ĊĠĠĠĠĠĠĠ Ġcontext . setTitle ( fragment . title Res ) ĊĠĠĠĠĠĠĠ Ġcontext . nav _ view . setChecked Item ( id ) ĊĠĠĠ Ġ} Ċ }