package Ġcom . dev ja ew oo . its my way e Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . dev ja ew oo . its my way e . databinding . Activity Main Binding Ċ import Ġcom . google . android . material . navigation . Navigation View Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠNavigation View . On Navigation ItemSelected Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġvar Ġlast Back Pressed Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠD RAW ER _ GR AV ITY Ġ= ĠGr avity Compat . START ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġrequest Permissions () ĊĠĠĠĠĠĠĠ Ġcreate Notification Channel () ĊĊĠĠĠĠĠĠĠ Ġbinding . content Main . toolbar . ib Toolbar . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Drawer Layout ( binding . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . nav View . set Navigation ItemSelected Listener ( this ) ĊĠĠĠĠĠĠĠ Ġset Fragment ( Alarm Fragment ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġif ( currentTime Ġ- Ġlast Back Pressed Time Ġ< Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ CLOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ"' ìĿ´ ìłĦ ' Ġë²Ħ íĬ ¼ ìĿĦ Ġíķľ ë²Ī ĠëįĶ Ġë Ī Ħ ë¥ ´ë © ´ Ġì¢ ħ ë£Į ëĲ ©ëĭĪëĭ¤ .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Back Pressed Time Ġ= ĠcurrentTime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Navigation ItemSelected : Ġ${ item . title }") ĊĠĠĠĠĠĠĠ Ġwhen ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ alarm Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Navigation ItemSelected : ĠSet Ġfragment Ġto ĠAlarm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment ( Alarm Fragment . newInstance ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ notification Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Navigation ItemSelected : ĠSet Ġfragment Ġto ĠNotification ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment ( Notification Fragment . newInstance ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ settings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Navigation ItemSelected : ĠSet Ġfragment Ġto ĠSettings ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment ( Settings Fragment . newInstance ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Navigation ItemSelected : ĠW TF ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . root . close Drawer ( DRAW ER _ GR AV ITY ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction (). replace ( R . id . fragment _ container _ view , Ġfragment ). commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Drawer Layout ( drawer Layout : ĠDraw er Layout ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif (! drawer Layout . is Drawer Open ( DRAW ER _ GR AV ITY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . open Drawer ( DRAW ER _ GR AV ITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . close Drawer ( DRAW ER _ GR AV ITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Notification Write Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Notification Write Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! is Notification Write Permission Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" ìķ Į ë¦ ¼ ìĿĦ Ġë Ŀ Ħ ìļ° ê¸° ĠìľĦíķ´ Ġê ¶ Į íķľ ĠìĦ¤ìłķ ìĿ´ ĠíķĦìļĶ íķ©ëĭĪëĭ¤ .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( Settings . ACTION _ NOTIFICATION _ LIST ENER _ SETTINGS )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Notification Write Permission Granted (): ĠBoolean Ġ= ĠNotification Manager Compat . from ( this ). are Notifications Enabled () ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġget System Service ( Notification Manager :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Notification Channel Ġ= ĠNotification Channel ( NOTIFICATION _ DEFAULT _ CHANNEL _ ID , ĠNOT IFICATION _ DEFAULT _ CHANNEL _ NAME , ĠNotification Manager . IMPORT ANCE _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . create Notification Channel ( default Notification Channel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfullscreen Notification Channel Ġ= ĠNotification Channel ( NOTIFICATION _ FULL SCREEN _ CHANNEL _ ID , ĠNOT IFICATION _ DEFAULT _ CHANNEL _ NAME , ĠNotification Manager . IMPORT ANCE _ HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . create Notification Channel ( fullscreen Notification Channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }