// ĠCopyright Ġ 2 0 1 9 ĠMat thew ĠCh andler Ċ Ċ // ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ // Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ // Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ // Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ // Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ // Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ // ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ // Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ // ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ // ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ // ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ // ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ // ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ // ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ // ĠSOFTWARE . Ċ Ċ package Ġorg . mat tv ch andler . a 2 0 5 0 Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . preference . List Preference Ċ import Ġandroidx . preference . Preference Ċ import Ġandroidx . preference . Preference Fragment Compat Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġorg . mat tv ch andler . a 2 0 5 0 . databinding . Activity Settings Binding Ċ import Ġjava . util .* Ċ Ċ class ĠSettings : ĠThe med _ activity () Ċ { ĊĠĠĠ Ġclass ĠSettings _ frag : ĠPreference Fragment Compat (), ĠSharedPreferences . On Shared Preference ChangeListener ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . settings , Ġroot Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . setDefault Values ( activity , ĠR . xml . settings , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! has _ accel erometer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrav _ pref Ġ= Ġpreference Screen . find Preference < Preference >(" gravity ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrav _ pref ?. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrav _ pref ?. set Summary ( R . string . no _ accel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < List Preference >(" theme ") ?. summary Provider Ġ= ĠList Preference . Simple Summary Provider . getInstance () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Ġ/ Ġunregister Ġlistener ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resume () ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Screen . shared Preferences . register On Shared Preference ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pause () ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Screen . shared Preferences . unregister On Shared Preference ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences , Ġkey : ĠString ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( key Ġ== Ġ" theme ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġlocation Ġpermission Ġfor Ġlocal Ġsun set Ġ/ Ġsun rise Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( shared Preferences . getString (" theme ", Ġ"") Ġ== Ġresources . getString ( R . string . theme _ values _ auto )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( activity Ġas ĠContext , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Activity Compat . should Show Request Permission R ationale ( require Activity (), ĠManifest . permission . ACCESS _ F INE _ LOCATION )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠLocation _ frag : ĠDialog Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . loc _ perm _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . loc _ perm _ msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠLOC ATION _ PERMISSION _ RESPONSE )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation _ frag (). show ( require Activity (). support FragmentManager , Ġ" location _ permission _ dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠLOC ATION _ PERMISSION _ RESPONSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecreate Ġthis Ġactivity Ġto Ġapply Ġthe Ġnew Ġtheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. re create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Activity Settings Binding >( this , ĠR . layout . activity _ settings ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar Ġas ĠToolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġput Ġsettings Ġcontent Ġinto Ġframe Ġlayout ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction (). replace ( R . id . preferences , ĠSettings _ frag ()). commit () ĊĊĠĠĠĠĠĠĠ Ġval Ġsensor Manager Ġ= Ġget System Service ( Context . SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠ Ġif ( Objects . requireNonNull ( sensor Manager ). getDefault Sensor ( Sensor . TYPE _ AC CEL ERO METER ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas _ accel erometer Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( this ). edit (). put Boolean (" gravity ", Ġfalse ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġhome Ġbutton Ġgo Ġback ĊĠĠĠĠĠĠĠ Ġwhen ( item . itemId ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ Ġfinish (); Ġreturn Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( request Code ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOC ATION _ PERMISSION _ RESPONSE Ġ-> Ġif ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġrecreate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġhas _ accel erometer Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOC ATION _ PERMISSION _ RESPONSE Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ } Ċ