package Ġcom . course work . velo tracker Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . appcompat . widget .* Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . course work . velo tracker . BL . Controller . Training Controller Ċ import Ġcom . course work . velo tracker . databinding . Activity Main Binding Ċ import Ġcom . course work . velo tracker . ui . fragments . main . Page Start Ċ import Ġcom . course work . velo tracker . ui . fragments . main . ViewPager Adapter Ċ import Ġcom . google . android . material . navigation . Navigation View Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠPage Start . On Some EventListener , ĠNavigation View . On Navigation ItemSelected Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġheader : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtheme Btn : ĠAppCompat Image Button ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ PERMISSION _ ACCESS _ F INE _ LOCATION Ġ= Ġ 1 1 1 ĊĊĠĠĠ Ġprivate Ġvar Ġgps Enabled Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Use Compat Loading For Draw ables ") ĊĠĠĠ Ġprivate Ġfun Ġchange Theme (){ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" theme ", ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġif ( shared Preferences . getBoolean (" dark ", Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" light ", Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" dark ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Btn . foreground Ġ= Ġget Drawable ( R . drawable . ic _ light _ mode _ foreground ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif ( shared Preferences . getBoolean (" light ", Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" dark ", Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" light ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Btn . foreground Ġ= Ġget Drawable ( R . drawable . ic _ dark _ mode _ foreground ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" light ", Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" dark ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Btn . foreground Ġ= Ġget Drawable ( R . drawable . ic _ light _ mode _ foreground ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġinit Func () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Func (){ ĊĠĠĠĠĠĠĠ Ġcreate ViewPager () ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ Ġbinding . drawer Layout . open () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . nav View . set Navigation ItemSelected Listener ( this ) ĊĠĠĠĠĠĠĠ Ġheader Ġ= Ġbinding . nav View . getHeader View ( 0 ) ĊĠĠĠĠĠĠĠ Ġtheme Btn Ġ= Ġheader . findViewById < AppCompat Image Button >( R . id . theme Btn ) ĊĠĠĠĠĠĠĠ Ġtheme Btn . setOnClickListener Ġ{ change Theme ()} ĊĠĠĠĠĠĠĠ ĠsetCurrent Theme () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Use Compat Loading For Draw ables ") ĊĠĠĠ Ġprivate Ġfun ĠsetCurrent Theme (){ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" theme ", ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġif ( shared Preferences . contains (" dark ") Ġ&& Ġshared Preferences . getBoolean (" dark ", Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" dark ", Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" light ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Btn . foreground Ġ= Ġget Drawable ( R . drawable . ic _ light _ mode _ foreground ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif ( shared Preferences . contains (" light ") Ġ&& Ġshared Preferences . getBoolean (" light ", Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" dark ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean (" light ", Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Btn . foreground Ġ= Ġget Drawable ( R . drawable . ic _ dark _ mode _ foreground ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ start Ġ-> Ġbinding . tabs . select Tab ( binding . tabs . get Tab At ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ history Ġ-> Ġbinding . tabs . select Tab ( binding . tabs . get Tab At ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ statistics Ġ-> Ġbinding . tabs . select Tab ( binding . tabs . get Tab At ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ about _ program Ġ-> ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbout Program Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . drawer Layout . close Draw ers () ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ViewPager (){ ĊĠĠĠĠĠĠĠ Ġval Ġpager Adapter Ġ= ĠView Pager Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . adapter Ġ= Ġpager Adapter ĊĠĠĠĠĠĠĠ Ġval Ġtab Layout Mediator Ġ= ĠTab Layout Mediator ( binding . tabs , Ġbinding . view Pager ) Ġ{ Ġtab , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġtab . text Ġ= ĠgetText ( R . string . start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġtab . text Ġ= ĠgetText ( R . string . history ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġtab . text Ġ= ĠgetText ( R . string . statistic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtab Layout Mediator . attach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" ResourceType ") ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġallowed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Per Ġ= Ġpermissions [ 0 ] ĊĠĠĠĠĠĠĠ Ġallowed Ġ= Ġgrant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġif ( allowed ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Training () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( current Per Ġ== ĠManifest . permission . ACCESS _ F INE _ LOCATION Ġ&& Ġ! should Show Request Permission R ationale ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Open Permissions Settings ( getString ( R . string . dialog _ open _ set t _ access _ fine _ location _ text )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġrequest Code Ġ== ĠApp Constants . GPS _ REQUEST ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// is GPS Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠstartActivity Training () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠTraining Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen Last Training () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition : ĠInt Ġ= ĠTraining Controller ( this ). load Train ings (). size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tabs . select Tab ( binding . tabs . get Tab At ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠLook Training :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" INDEX ", Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen Statistic () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tabs . select Tab ( binding . tabs . get Tab At ( 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdialog Open Permissions Settings ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog : ĠAlertDialog Ġ= ĠAlertDialog . Builder ( this ). create () ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġlayout Inflater . inflate ( R . layout . dialog _ open _ settings , Ġnull ) Ġas ĠConstraint Layout ĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġcl . get ViewById ( R . id . textView ) Ġas ĠTextView ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġcl . get ViewById ( R . id . open Set tB ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" package :$ packageName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . setView ( cl ) ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdialog Battery Optimization Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ÐµÑģ Ð»Ð¸ ĠÑĤÐ°Ðº Ð¸Ñħ ĠÐ½Ð° ÑģÑĤ ÑĢÐ¾ ÐµÐº ĠÐ½Ðµ ĠÑģ ÑĥÑī ÐµÑģÑĤÐ² ÑĥÐµÑĤ , ĠÐ¾ Ð½Ð¸ ĠÑģ Ð¾Ð· Ð´Ð° ÑİÑĤÑģÑı ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . settings _ checkbox es ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shared Preferences . contains ( getString ( R . string . dialog _ battery _ optimization _ settings _ checkbox _ key ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shared Preferences . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dialog _ battery _ optimization _ settings _ checkbox _ key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ÐµÑģ Ð»Ð¸ ĠÑģ ÑĤÐ¾ Ð¸ÑĤ ĠÐ± Ð¾Ð»ÑĮ ÑĪÐµ ĠÐ½Ðµ ĠÐ¿Ð¾Ðº Ð°Ð· ÑĭÐ² Ð°ÑĤÑĮ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity Training () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠisIn Settings Ġ= Ġboolean ArrayOf ( false ) ĊĠĠĠĠĠĠĠ Ġ// Ð´ Ð¾Ð±Ð°Ð² Ð»Ñı Ñİ ĠÐ½Ð° ÑģÑĤÑĢ Ð¾Ð¹ ÐºÑĥ ĠÐ¸ ĠÐ¿Ð¾ÑĤ Ð¾Ð¼ ĠÐ²Ñĭ Ð· ÑĭÐ² Ð°Ñİ ĠÐ´ Ð¸ Ð°Ð» Ð¾Ð³ ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dialog _ battery _ optimization _ settings _ checkbox _ key ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ). apply () ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ). create () ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġlayout Inflater . inflate ( R . layout . dialog _ open _ settings _ with _ checkbox , Ġnull ) Ġas ĠConstraint Layout ĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġcl . get ViewById ( R . id . textView ) Ġas ĠTextView ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠgetString ( R . string . dialog _ battery _ optimization _ text ) ĊĠĠĠĠĠĠĠ Ġcl . get ViewById ( R . id . open Set tB ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Settings [ 0 ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( Settings . ACTION _ IGNORE _ B ATTER Y _ OPTIMI Z ATION _ SETTINGS )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcompat CheckBox Ġ= Ġcl . get ViewById ( R . id . checkbox ) Ġas ĠAppCompat CheckBox ĊĠĠĠĠĠĠĠ Ġdialog . setOn Dismiss Listener ( DialogInterface . On Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compat CheckBox . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . settings _ checkbox es ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Boolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dialog _ battery _ optimization _ settings _ checkbox _ key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isIn Settings [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity Training () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Dismiss Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġdialog . setView ( cl ) ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Training () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccess F ine Location Ġ= ĠContext Compat . check Self Permission ( this , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġapplication Context . getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠ Ġgps Enabled Ġ= Ġlocation Manager . is Provider Enabled ( Location Manager . GPS _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! access F ine Location ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠREQUEST _ PERMISSION _ ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gps Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgps Utils Ġ= ĠG ps Utils ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgps Utils . turn GPS On ( object Ġ: ĠG ps Utils . On G ps Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġgps Status ( is GPS Enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is GPS Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Training () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gps Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog Battery Optimization Settings () ĊĠĠĠ Ġ} Ċ } Ċ