package Ġcom . the wiz rd . simple weather . preferences Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent . Filter Comparison Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . SharedPreferences . On Shared Preference ChangeListener Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . location . Location Manager Compat Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . preference .* Ċ import Ġandroidx . preference . Preference . Summary Provider Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . android . material . time picker . Material Time Picker Ċ import Ġcom . google . android . material . time picker . Time Format Ċ import Ġcom . the wiz rd . shared _ resources . Simple Library Ċ import Ġcom . the wiz rd . shared _ resources . controls . Provider Entry Ċ import Ġcom . the wiz rd . shared _ resources . helpers . Context Utils Ċ import Ġcom . the wiz rd . shared _ resources . remote config . Remote Config Ċ import Ġcom . the wiz rd . shared _ resources . utils .* Ċ import Ġcom . the wiz rd . shared _ resources . utils . User Theme Mode . On Theme ChangeListener Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather API Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather Manager Ċ import Ġcom . the wiz rd . simple weather . App Ċ import Ġcom . the wiz rd . simple weather . Build Config Ċ import Ġcom . the wiz rd . simple weather . R Ċ import Ġcom . the wiz rd . simple weather . extras .* Ċ import Ġcom . the wiz rd . simple weather . locale . Install Request Ċ import Ġcom . the wiz rd . simple weather . locale . Locale Installer Ċ import Ġcom . the wiz rd . simple weather . notifications . Weather Notification Worker Ċ import Ġcom . the wiz rd . simple weather . preferences . icon preference . Icon Provider Picker Fragment Ċ import Ġcom . the wiz rd . simple weather . preferences . rad iop reference . Candidate Info Ċ import Ġcom . the wiz rd . simple weather . preferences . rad iop reference . RadioButton Preference Ċ import Ġcom . the wiz rd . simple weather . preferences . time picker preference . Time Picker Preference Ċ import Ġcom . the wiz rd . simple weather . radar . Rad ar Provider Ċ import Ġcom . the wiz rd . simple weather . re ceiv ers . Common Actions Broadcast Receiver Ċ import Ġcom . the wiz rd . simple weather . services . Updater Utils Ċ import Ġcom . the wiz rd . simple weather . services . Weather Updater Worker Ċ import Ġcom . the wiz rd . simple weather . services . Widget Updater Worker Ċ import Ġcom . the wiz rd . simple weather . sn ackbar . Snackbar Ċ import Ġcom . the wiz rd . simple weather . utils . Power Utils Ċ import Ġcom . the wiz rd . simple weather . we arable . W ear able Worker Ċ import Ġcom . the wiz rd . simple weather . we arable . W ear able Worker Actions Ċ import Ġcom . the wiz rd . simple weather . widgets . Weather Widget Service Ċ import Ġjava . util .* Ċ Ċ class ĠSettings Fragment Ġ: ĠToolbar Preference Fragment Compat (), ĊĠĠĠĠĠĠĠ ĠOn Shared Preference ChangeListener , ĊĠĠĠĠĠĠĠ ĠOn Theme ChangeListener Ġ{ ĊĠĠĠ Ġ// ĠPreferences ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfollow G ps : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinterval Pref : ĠList Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprovider Pref : ĠList Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġradar Provider Pref : ĠList Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpersonal Key Pref : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey Entry : ĠEditText Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġon Go ing Notification : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Icon : ĠList Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalert Notification : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġregister Pref : ĠPreference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtheme Pref : ĠList Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlanguage Pref : ĠList Preference ĊĊĠĠĠ Ġprivate Ġvar Ġprem ium Pref : ĠPreference ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdaily Not if Pref : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdaily Not if Time Pref : ĠTime Picker Preference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpop Chance Not if Pref : ĠSwitch Preference Compat ĊĊĠĠĠ Ġ// ĠBackground Ġops ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġforeground Pref : ĠSwitch Preference Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbattery Opts Pref : ĠPreference ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnot Category : ĠPreference Category ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapi Category : ĠPreference Category ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġabout Category : ĠPreference Category ĊĊĠĠĠ Ġ// ĠIntent Ġqueue ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġintent Queue : ĠHashSet < Filter Comparison > ĊĠĠĠ Ġprivate Ġvar Ġm Theme Change Listeners : ĠMutable List < On Theme ChangeListener >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsplit Install Request : ĠInstall Request ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ LOCATION _ REQUEST _ CODE Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠPreference ĠKeys ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ UNITS Ġ= Ġ" key _ units " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ICON S Ġ= Ġ" key _ icons " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FEATURES Ġ= Ġ" key _ features " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PRE MI UM Ġ= Ġ" key _ premium " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ AB OUT APP Ġ= Ġ" key _ about app " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ API REGISTER Ġ= Ġ" key _ ap ire gister " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠC ATEG ORY _ NOTIFICATION Ġ= Ġ" category _ notification " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠC ATEG ORY _ API Ġ= Ġ" category _ api " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġt int Icons ( preference : ĠPreference , Ġ@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference Ġis ĠPreference Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpreference . preference Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Icons ( preference . get Preference ( i ), Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon : ĠDrawable ? Ġ= Ġpreference . icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon ?. setColor Filter ( color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . string . title _ activity _ settings ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġa Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġregister On Theme ChangeListener ( listener : ĠOn Theme ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Theme Change Listeners Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Theme Change Listeners Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Theme Change Listeners !!. contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Theme Change Listeners !!. add ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn registers Ġa Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġunregister On Theme ChangeListener ( listener : ĠOn Theme ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Theme Change Listeners ?. remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispatch Theme Changed ( mode : ĠUser Theme Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist : ĠList < On Theme ChangeListener > ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Theme Change Listeners Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= ĠArrayList ( m Theme Change Listeners !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠN Ġ= Ġlist . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ i ]. on Theme Changed ( mode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Theme Changed ( mode : ĠUser Theme Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Window Colors ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Settings Fragment : ĠonCreate ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Settings Fragment : Ġon Resume ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġlistener ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp . instance ĊĠĠĠĠĠĠĠ Ġapp . unregister App Shared Preference Listener () ĊĠĠĠĠĠĠĠ Ġapp . register App Shared Preference Listener ( this ) ĊĠĠĠĠĠĠĠ Ġregister On Theme ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġregister On Theme ChangeListener ( app Compat Activity Ġas ĠOn Theme ChangeListener ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġqueue ĊĠĠĠĠĠĠĠ Ġintent Queue Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠ Ġbattery Opts Pref . isVisible Ġ= Ġ!( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M Ġ|| ĠPower Utils . is Background Optimization Disabled ( require Context ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Settings Fragment : Ġon Pause ") ĊĠĠĠĠĠĠĠ Ġif Ġ( settings Manager . use Personal Key () Ġ&& Ġsettings Manager . get API KEY (). isNull Or Blank () Ġ&& ĠWeather Manager . is Key Required ( provider Pref . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠF allback Ġto Ġsupported Ġweather Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠAPI Ġ= ĠRemote Config . getDefault Weather Provider () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Pref . value Ġ= ĠAPI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Pref . call ChangeListener ( API ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( API ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Manager . instance . update API () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Personal Key ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUn register Ġlistener ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp . instance ĊĠĠĠĠĠĠĠ Ġapp . unregister App Shared Preference Listener ( this ) ĊĠĠĠĠĠĠĠ Ġapp . register App Shared Preference Listener () ĊĠĠĠĠĠĠĠ Ġunregister On Theme ChangeListener ( app Compat Activity Ġas ĠOn Theme ChangeListener ) ĊĠĠĠĠĠĠĠ Ġunregister On Theme ChangeListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( filter : ĠFilter Comparison Ġin Ġintent Queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( Common Actions . ACTION _ SETTINGS _ UPDATE API Ġ== Ġfilter . intent . action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Manager . instance . update API () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" API ", Ġsettings Manager . get API ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString (" API _ Is Internal Key ", Ġ(! settings Manager . use Personal Key ()). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Update _ API ", Ġbundle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Updater Worker . enqueue Action ( app Compat Activity , ĠWeather Updater Worker . ACTION _ UPDATE WE ATHER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( Weather Widget Service :: class . java . name Ġ== Ġfilter . intent . component !!. className )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Widget Service . enqueue Work ( app Compat Activity , Ġfilter . intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( Weather Updater Worker :: class . java . name Ġ== Ġfilter . intent . component !!. className )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( Weather Updater Worker . ACTION _ REQ UE UE WORK Ġ== Ġfilter . intent . action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . update Alarm ( app Compat Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( Weather Updater Worker . ACTION _ EN QUEUE WORK Ġ== Ġfilter . intent . action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . start Alarm ( app Compat Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( Weather Updater Worker . ACTION _ CANCEL WORK Ġ== Ġfilter . intent . action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . cancel Alarm ( app Compat Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Updater Worker . enqueue Action ( app Compat Activity , Ġ( filter . intent . action ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( W ear able Worker :: class . java . name Ġ== Ġfilter . intent . component !!. className )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ear able Worker . enqueue Action ( app Compat Activity , Ġ( filter . intent . action ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( Common Actions Broadcast Receiver :: class . java . name Ġ== Ġfilter . intent . component !!. className )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( app Compat Activity ). send Broadcast ( filter . intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . start Service ( filter . intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( settings Manager . use Personal Key () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . get API KEY (). isNull Or Blank () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Manager . is Key Required ( provider Pref . value ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġkey entry pref Ġcolor Ġto Ġred ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( Snackbar . make ( R . string . message _ enter _ apikey , ĠSn ackbar . Duration . LONG ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ general , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġnot Category Ġ= Ġfind Preference ( CATEGORY _ NOTIFICATION ) !! ĊĠĠĠĠĠĠĠ Ġapi Category Ġ= Ġfind Preference ( CATEGORY _ API ) !! ĊĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ AB OUT APP ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( Settings Fragment Directions . action Settings Fragment To About App Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ UNITS ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( Settings Fragment Directions . action Settings Fragment To Units Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfollow G ps Ġ= Ġfind Preference ( Settings Manager . KEY _ FOLLOW GPS ) !! ĊĠĠĠĠĠĠĠ Ġfollow G ps . on Preference ChangeListener Ġ= Ġobject Ġ: ĠPreference . On Preference ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Settings : Ġfollow G ps Ġtoggle d ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġas ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( app Compat Activity , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( app Compat Activity , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĠManifest . permission . ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ LOCATION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloc Man Ġ= Ġapp Compat Activity . getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loc Man Ġ== Ġnull Ġ|| Ġ! Location Manager Compat . is Location Enabled ( loc Man )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( Snackbar . make ( R . string . error _ enable _ location _ services , ĠSn ackbar . Duration . SHORT ), Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Follow GPS ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinterval Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ REFRESH INTERVAL ) !! ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Additional Refresh Intervals ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Pref . set Entries ( R . array . premium _ refresh interval _ entries ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Pref . set Entry Values ( R . array . premium _ refresh interval _ values ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Pref . set Entries ( R . array . refresh interval _ entries ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Pref . set Entry Values ( R . array . refresh interval _ values ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtheme Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ U SERT HE ME ) !! ĊĠĠĠĠĠĠĠ Ġtheme Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString (" mode ", ĠnewValue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Logger . log Event (" Settings : Ġtheme Ġchanged ", Ġargs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode : ĠUser Theme Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( newValue . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠUser Theme Mode . FOLLOW _ SYSTEM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ AUTO _ B ATTER Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠUser Theme Mode . DARK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠUser Theme Mode . AMO LED _ DARK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠUser Theme Mode . LIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠUser Theme Mode . FOLLOW _ SYSTEM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ AUTO _ B ATTER Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Theme Changed ( mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġkey Entry Ġ= Ġfind Preference ( Settings Manager . KEY _ API KEY ) !! ĊĠĠĠĠĠĠĠ Ġpersonal Key Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ USE PERSON AL KEY ) !! ĊĠĠĠĠĠĠĠ Ġpersonal Key Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġas ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( Settings Manager . KEY _ API KEY ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . add Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( KEY _ API REGISTER ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . add Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected W Prov Ġ= ĠWeather Manager . get Provider ( provider Pref . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! selected W Prov . is Key Required () Ġ|| Ġ! selected W Prov . get API Key (). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġusing Ġour Ġown Ġ( verified ) Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( provider Pref . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠWeather API . API s ĊĠĠĠĠĠĠĠ Ġprovider Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ API ) !! ĊĊĠĠĠĠĠĠĠ Ġvar Ġentries Ġ= ĠarrayOf Null s < String >( providers . size ) ĊĠĠĠĠĠĠĠ Ġvar Ġentry Values Ġ= ĠarrayOf Null s < String >( providers . size ) ĊĊĠĠĠĠĠĠĠ Ġproviders . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ i ] Ġ= Ġit . display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Values [ i ] Ġ= Ġit . value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprovider Pref . entries Ġ= Ġentries ĊĠĠĠĠĠĠĠ Ġprovider Pref . entry Values Ġ= Ġentry Values ĊĠĠĠĠĠĠĠ Ġprovider Pref . is Persistent Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprovider Pref . on Preference ChangeListener Ġ= Ġobject Ġ: ĠPreference . On Preference ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Weather API Supported ( newValue . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Prem ium Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref Ġ= Ġpreference Ġas ĠList Preference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected W Prov Ġ= ĠWeather Manager . get Provider ( newValue . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected W Prov . is Key Required ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected W Prov . get API Key (). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Personal Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . use Personal Key ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġusing Ġour Ġown Ġ( verified ) Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUser Ġis Ġusing Ġpersonal Ġ( un verified ) Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear ĠAPI ĠKEY Ġentry Ġto Ġavoid Ġissues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API KEY ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( Settings Manager . KEY _ API KEY ) Ġ== Ġnull ) Ġapi Category . add Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( KEY _ API REGISTER ) Ġ== Ġnull ) Ġapi Category . add Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( Settings Manager . KEY _ USE PERSON AL KEY ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . add Preference ( personal Key Pref ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġto Ġold Ġvalue Ġif Ġnot Ġverified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . is Key Verified ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( pref . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( newValue . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider Entry Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . find Ġ{ Ġentry Ġ-> Ġentry . value Ġ== ĠnewValue . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Key Summary ( provider Entry !!. display ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Register Link ( provider Entry . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( newValue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear ĠAPI ĠKEY Ġentry Ġto Ġavoid Ġissues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API KEY ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( personal Key Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Key Summary () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Register Link () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Alert Preference ( Weather Manager . instance . supports Alerts ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregister Pref Ġ= Ġfind Preference ( KEY _ API REGISTER ) !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġkey Ġas Ġverified Ġif ĠAPI ĠKey Ġis Ġreq Ġfor ĠAPI Ġand Ġits Ġset ĊĠĠĠĠĠĠĠ Ġif Ġ( Weather Manager . instance . is Key Required ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . get API KEY (). isNull Or Blank () Ġ&& Ġ! settings Manager . is Key Verified ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Weather Manager . instance . get API Key (). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Personal Key ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . use Personal Key ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 're Ġusing Ġour Ġown Ġ( verified ) Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUser Ġis Ġusing Ġpersonal Ġ( un verified ) Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Settings Manager (). set Key Verified ( false ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear ĠAPI ĠKEY Ġentry Ġto Ġavoid Ġissues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Settings Manager (). set API KEY (""); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( Settings Manager . KEY _ API KEY ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . add Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Category . find Preference < Preference ? >( KEY _ API REGISTER ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . add Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Key Pref . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( personal Key Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( key Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Category . remove Preference ( register Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear ĠAPI ĠKEY Ġentry Ġto Ġavoid Ġissues ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API KEY ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Key Summary () ĊĠĠĠĠĠĠĠ Ġupdate Register Link () ĊĊĠĠĠĠĠĠĠ Ġradar Provider Pref Ġ= Ġfind Preference ( Rad ar Provider . KEY _ RAD AR PROVIDER ) !! ĊĠĠĠĠĠĠĠ Ġval Ġradar Providers Ġ= ĠRad ar Provider . get Rad ar Providers () ĊĠĠĠĠĠĠĠ Ġentries Ġ= ĠarrayOf Null s ( radar Providers . size ) ĊĠĠĠĠĠĠĠ Ġentry Values Ġ= ĠarrayOf Null s ( radar Providers . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġradar Providers . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ i ] Ġ= Ġradar Providers [ i ]. display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Values [ i ] Ġ= Ġradar Providers [ i ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġradar Provider Pref . entries Ġ= Ġentries ĊĠĠĠĠĠĠĠ Ġradar Provider Pref . entry Values Ġ= Ġentry Values ĊĠĠĠĠĠĠĠ Ġradar Provider Pref . value Ġ= ĠRad ar Provider . get Rad ar Provider () ĊĊĠĠĠĠĠĠĠ Ġon Go ing Notification Ġ= Ġfind Preference ( Settings Manager . KEY _ ONGO ING NOTIFICATION ) !! ĊĠĠĠĠĠĠĠ Ġon Go ing Notification . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġpreference . context . application Context ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn - going Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġas ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Worker . request Refresh Notification ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not Category . find Preference < Preference ? >( Settings Manager . KEY _ NOTIFICATION ICON ) Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Category . add Preference ( notification Icon ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ EN QUEUE WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Worker . remove Notification ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Category . remove Preference ( notification Icon ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ CANCEL WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotification Icon Ġ= Ġfind Preference ( Settings Manager . KEY _ NOTIFICATION ICON ) !! ĊĠĠĠĠĠĠĠ Ġnotification Icon . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Worker . request Refresh Notification ( preference . context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġpreferences ĊĠĠĠĠĠĠĠ Ġif Ġ(! on Go ing Notification . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Category . remove Preference ( notification Icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Notification Ġ= Ġfind Preference ( Settings Manager . KEY _ USE AL ER TS ) !! ĊĠĠĠĠĠĠĠ Ġalert Notification . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġpreference . context . application Context ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlert Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġas ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ EN QUEUE WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ CANCEL WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Alert Preference ( Weather Manager . instance . supports Alerts ()) ĊĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ ICON S ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( Settings Fragment Directions . action Settings Fragment To Icons Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ FEATURES ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( Settings Fragment Directions . action Settings Fragment To Features Fragment 2 ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlanguage Pref Ġ= Ġfind Preference ( Locale Utils . KEY _ LANGUAGE ) !! ĊĠĠĠĠĠĠĠ Ġval Ġlang Codes Ġ= Ġlanguage Pref . entry Values ĊĠĠĠĠĠĠĠ Ġval Ġlang Entries Ġ= ĠarrayOf Null s < CharSequence >( lang Codes . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlang Codes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġlang Codes [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Entries [ i ] Ġ= Ġrequire Context (). getString ( R . string . summary _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Code Ġ= Ġcode . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= ĠLocale ( locale Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Entries [ i ] Ġ= Ġlocale . get DisplayName ( locale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlanguage Pref . entries Ġ= Ġlang Entries ĊĊĠĠĠĠĠĠĠ Ġlanguage Pref . summary Provider Ġ= ĠSummary Provider < List Preference > Ġ{ Ġpreference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference . value . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . context . getString ( R . string . summary _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale Utils . getLocale DisplayName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlanguage Pref . set DefaultValue ("") ĊĠĠĠĠĠĠĠ Ġlanguage Pref . value Ġ= ĠLocale Utils . getLocale Code () ĊĠĠĠĠĠĠĠ Ġlanguage Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequested Lang Ġ= ĠnewValue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Request Ġ= ĠLocale Installer . install Locale ( require Activity (), Ġrequested Lang ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Prem ium Supported ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprem ium Pref Ġ= Ġcreate Prem ium Preference () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġforeground Pref Ġ= Ġfind Preference ( Power Utils . KEY _ USE _ FO REG ROUND SERVICE ) !! ĊĠĠĠĠĠĠĠ Ġbattery Opts Pref Ġ= Ġfind Preference ( Power Utils . KEY _ REQUEST IGNORE B AT OPTS ) !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! Power Utils . check Background Optimization Permission ( require Context ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! Power Utils . can Start Ignore Battery Opt Activity ( require Context ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPower Utils . is Background Optimization Disabled ( require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Opts Pref . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Opts Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ Ġpreference : ĠPreference ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPower Utils . start Ignore Battery Opt Activity ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġforeground Pref . on Preference ChangeListener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . enable Foreground Service ( require Context (), ĠnewValue Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdaily Not if Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ DA IL Y NOTIFICATION ) !! ĊĠĠĠĠĠĠĠ Ġdaily Not if Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ== Ġtrue Ġ&& Ġ! are Notification Extras Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Prem ium Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Preference ChangeListener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . enable Daily Notification Service ( preference . context , ĠnewValue Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdaily Not if Time Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ DA IL Y NOTIFICATION TIME ) !! ĊĠĠĠĠĠĠĠ Ġdaily Not if Time Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Daily Notification Time ( newValue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUp dater Utils . re schedule Daily Notification Service ( preference . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Chance Not if Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ POP CHAN C EN OT IFICATION ) !! ĊĠĠĠĠĠĠĠ Ġpop Chance Not if Pref . on Preference ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ== Ġtrue Ġ&& Ġ! are Notification Extras Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Prem ium Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Preference ChangeListener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġpreference . context . application Context ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlert Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġas ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ EN QUEUE WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ CANCEL WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġabout Pref Ġ= Ġfind Preference < Preference >( KEY _ AB OUT APP ) !! ĊĠĠĠĠĠĠĠ Ġabout Category Ġ= Ġabout Pref . parent Ġas ĠPreference Category ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġif Ġsubs Ġare Ġnot Ġsupported ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Prem ium Supported ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprem ium Pref ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Category . remove Preference ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Not if Pref . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Not if Time Pref . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Chance Not if Pref . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( premium Pref Ġ!= Ġnull Ġ&& Ġabout Category . find Preference < Preference >( KEY _ PRE MI UM ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabout Category . add Preference ( premium Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Not if Pref . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Not if Time Pref . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Chance Not if Pref . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġt int Icons ( preference Screen , ĠContext Utils . getColor ( app Compat Activity , ĠR . attr . color Primary )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠLocale Installer . CONFIRM ATION _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġthe Ġuser 's Ġdecision . ĠFor Ġexample , Ġif Ġthe Ġuser Ġselects Ġ" Cancel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġyou Ġmay Ġwant Ġto Ġdisable Ġcertain Ġfunctionality Ġthat Ġdepends Ġon Ġthe Ġmodule . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ C ANCE LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Request ?. cancel Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Install Request Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Range ") ĊĠĠĠ Ġoverride Ġfun Ġon Display Preference Dialog ( preference : ĠPreference ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( preference Ġis ĠEditText Preference Ġ&& Ġ( Settings Manager . KEY _ API KEY Ġ== Ġpreference . getKey ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠKey Entry Preference Dialog Fragment :: class . java . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent FragmentManager . find Fragment By Tag ( TAG ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠKey Entry Preference Dialog Fragment . newInstance ( preference . getKey ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . set Positive Button OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun With View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġfragment . key ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠAPI Ġ= Ġprovider Pref . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Weather Manager . is Key Valid ( key , ĠAPI )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API KEY ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set API ( API ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Key Verified ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Key Summary () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Alert Preference ( Weather Manager . instance . supports Alerts ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . dialog !!. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( app Compat Activity , ĠR . string . message _ key invalid , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠWeather Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . ERROR , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . setTarget Fragment ( this , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . show ( parent FragmentManager , ĠKey Entry Preference Dialog Fragment :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( preference Ġis ĠTime Picker Preference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠMaterial Time Picker :: class . java . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent FragmentManager . find Fragment By Tag ( TAG ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis 2 4 hour Ġ= ĠDate Format . is 2 4 Hour Format ( preference . getContext ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠMaterial Time Picker . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Format ( if Ġ( is 2 4 hour ) ĠTime Format . CLOCK _ 2 4 H Ġelse ĠTime Format . CLOCK _ 1 2 H ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hour ( preference . hour OfDay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Minute ( preference . minute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInput Mode ( Material Time Picker . INPUT _ MODE _ CLOCK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference . call ChangeListener ( String . format ( Locale . ROOT , Ġ"% 0 2 d :% 0 2 d ", Ġf . hour , Ġf . minute ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . setTime ( f . hour , Ġf . minute ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . setTarget Fragment ( this , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . show ( parent FragmentManager , ĠTAG ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Display Preference Dialog ( preference ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Key Summary ( provider API : ĠCharSequence Ġ= Ġprovider Pref . entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! settings Manager . get API KEY (). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Verified Ġ= Ġsettings Manager . is Key Verified () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Span Ġ= ĠFore ground Color Span ( if Ġ( key Verified ) ĠColor . GREEN Ġelse ĠColor . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= ĠSp ann able String ( if Ġ( key Verified ) ĠgetString ( R . string . message _ key verified ) Ġelse ĠgetString ( R . string . message _ key invalid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary . set Span ( color Span , Ġ 0 , Ġsummary . length , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . summary Ġ= Ġsummary ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entry . summary Ġ= ĠgetString ( R . string . pref _ summary _ apikey , Ġprovider API ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Register Link ( provider API : ĠCharSequence Ġ= Ġprovider Pref . value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprov : ĠProvider Entry ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( provider : ĠProvider Entry Ġin ĠWeather API . API s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( provider . value Ġ== Ġprovider API . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprov Ġ= Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( prov Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Pref . intent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setData ( Uri . parse ( prov . api Register URL )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Alert Preference ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġalert Notification . isEnabled Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġalert Notification . summary Ġ= Ġif Ġ( enable ) ĠgetString ( R . string . pref _ summary _ alerts ) Ġelse ĠgetString ( R . string . pref _ summary _ alerts _ disabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ LOCATION _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġrequest Ġis Ġcancelled , Ġthe Ġresult Ġarrays Ġare Ġempty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġthe Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow G ps . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Follow GPS ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfunctionality Ġthat Ġdepends Ġon Ġthis Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow G ps . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Follow GPS ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( Snackbar . make ( R . string . error _ location _ den ied , ĠSn ackbar . Duration . SHORT ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenqueue Intent ( intent : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Weather Updater Worker . ACTION _ REQ UE UE WORK Ġ== Ġintent . action Ġ|| Ġ( Weather Updater Worker . ACTION _ EN QUEUE WORK Ġ== Ġintent . action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( filter : ĠFilter Comparison Ġin Ġintent Queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Weather Updater Worker . ACTION _ CANCEL WORK Ġ== Ġfilter . intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Queue . remove ( filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Weather Updater Worker . ACTION _ CANCEL WORK Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( filter : ĠFilter Comparison Ġin Ġintent Queue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Weather Updater Worker . ACTION _ REQ UE UE WORK Ġ== Ġfilter . intent . action Ġ|| ĠWeather Updater Worker . ACTION _ EN QUEUE WORK Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Queue . remove ( filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent Queue . add ( Filter Comparison ( intent )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences , Ġkey : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key . isNull Or Blank ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġapp Compat Activity ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Manager . KEY _ API Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( Common Actions . ACTION _ SETTINGS _ UPDATE API )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠW ear able Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( W ear able Worker Actions . ACTION _ SEND SETTINGS UPDATE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Manager . KEY _ FOLLOW GPS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġshared Preferences . getBoolean ( key , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠW ear able Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( W ear able Worker Actions . ACTION _ SEND SETTINGS UPDATE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠW ear able Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( W ear able Worker Actions . ACTION _ SEND LOCATION UPDATE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ UPDATE WE ATHER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠW ear able Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( W ear able Worker Actions . ACTION _ SEND WE ATHER UPDATE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Widget Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( if Ġ( value ) ĠWeather Widget Service . ACTION _ REFRESH GPS WIDGET S Ġelse ĠWeather Widget Service . ACTION _ RESET GPS WIDGET S )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Manager . KEY _ REFRESH INTERVAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠWeather Updater Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Weather Updater Worker . ACTION _ REQ UE UE WORK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocale Utils . KEY _ LANGUAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Intent ( Intent ( context , ĠW ear able Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( W ear able Worker Actions . ACTION _ SEND SETTINGS UPDATE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUnits Fragment Ġ: ĠToolbar Preference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠKEY _ RESET UNITS Ġ= Ġ" key _ reset units " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġtemp Unit Pref : ĠList Preference ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġspeed Unit Pref : ĠList Preference ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġdistance Unit Pref : ĠList Preference ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġpre cip ation Unit Pref : ĠList Preference ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġpressure Unit Pref : ĠList Preference ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġunits Changed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocal Broadcast Mgr : ĠLocal Broadcast Manager ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ units ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ units , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Unit Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ TEMP UNIT ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Unit Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ SPEED UNIT ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Unit Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ DISTANCE UNIT ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre cip ation Unit Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ PREC IP IT ATION UNIT ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Unit Pref Ġ= Ġfind Preference ( Settings Manager . KEY _ PRESS URE UNIT ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Unit Pref . on Preference ChangeListener Ġ= Ġon Unit ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Unit Pref . on Preference ChangeListener Ġ= Ġon Unit ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Unit Pref . on Preference ChangeListener Ġ= Ġon Unit ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre cip ation Unit Pref . on Preference ChangeListener Ġ= Ġon Unit ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Unit Pref . on Preference ChangeListener Ġ= Ġon Unit ChangeListener ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ RESET UNITS ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( app Compat Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . pref _ title _ units ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( R . array . default _ units ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis F ah ren heit : ĠBoolean Ġ= Ġwhich Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Unit Pref . value Ġ= Ġif Ġ( is F ah ren heit ) ĠUnits . FA H REN HE IT Ġelse ĠUnits . CEL SI US ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Unit Pref . value Ġ= Ġif Ġ( is F ah ren heit ) ĠUnits . M ILE S _ PER _ HOUR Ġelse ĠUnits . KI LO METER S _ PER _ HOUR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Unit Pref . value Ġ= Ġif Ġ( is F ah ren heit ) ĠUnits . M ILE S Ġelse ĠUnits . KI LO METER S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre cip ation Unit Pref . value Ġ= Ġif Ġ( is F ah ren heit ) ĠUnits . IN CH ES Ġelse ĠUnits . MILLI METER S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Unit Pref . value Ġ= Ġif Ġ( is F ah ren heit ) ĠUnits . IN HG Ġelse ĠUnits . MIL LIB AR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Broadcast Mgr . send Broadcast ( Intent ( Common Actions . ACTION _ SETTINGS _ UPDATE UNIT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel ) Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . cancel () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Unit ChangeListener Ġ= ĠPreference . On Preference ChangeListener Ġ{ Ġpreference : ĠPreference ?, ĠnewValue : ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunits Changed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Broadcast Mgr Ġ= ĠLocal Broadcast Manager . getInstance ( app Compat Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( units Changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Broadcast Mgr . send Broadcast ( Intent ( Common Actions . ACTION _ SETTINGS _ UPDATE UNIT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits Changed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠIcons Fragment Ġ: ĠIcon Provider Picker Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ icons ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDefault Key (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsettings Manager . get Icons Provider () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetDefault Key ( key : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Manager . set Icons Provider ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind Preference Extra ( pref : ĠRadio Button Preference , Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo : ĠC andidate Info , Ġdefault Key : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Default Key : ĠString ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . bind Preference Extra ( pref , Ġkey , Ġinfo , Ġdefault Key , Ġsystem Default Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . is Persistent Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Selection Performed ( success : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Selection Performed ( success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġpref Context . application Context ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWidget Updater Worker . enqueue Action ( context , ĠWidget Updater Worker . ACTION _ UPDATE WIDGET S ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ear able Worker . enqueue Action ( context , ĠW ear able Worker Actions . ACTION _ SEND SETTINGS UPDATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon RadioButton Confirmed ( selected Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Icon Pack Supported ( selected Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Unsupported Icon Pack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on RadioButton Confirmed ( selected Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFeatures Fragment Ġ: ĠToolbar Preference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ features ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ features , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( Feature Settings . KEY _ FEATURE _ BG IMAGE )?. isVisible Ġ= Ġ! Build Config . IS _ N ONG MS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAbout App Fragment Ġ: ĠToolbar Preference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPreference ĠKeys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ AB OUT CRED ITS Ġ= Ġ" key _ about credits " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ AB OUT OS LIBS Ġ= Ġ" key _ about os libs " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FEED BACK Ġ= Ġ" key _ feedback " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ R ATER E VIEW Ġ= Ġ" key _ rat ere view " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TRANSL ATE Ġ= Ġ" key _ translate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ AB OUT VERSION Ġ= Ġ" key _ about version " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġdev Settings Controller : ĠDev Settings Controller ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ about ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdev Settings Controller Ġ= ĠDev Settings Controller ( this , ĠKEY _ AB OUT VERSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ about app , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ AB OUT CRED ITS ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate (` Settings Fragment $ About App Fragment Directions `. action About App Fragment To Credits Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ AB OUT OS LIBS ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġthe Ġfragment Ġas Ġthe Ġmain Ġcontent . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity . find Nav Controller ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate (` Settings Fragment $ About App Fragment Directions `. action About App Fragment To OSS Credits Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ FEED BACK ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend To Ġ= ĠIntent ( Intent . ACTION _ SEND TO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend To . data Ġ= ĠUri . parse (" mailto : the wiz rd . dev + Simple Weather Android @ gmail . com ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( send To , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Review Preference ( find Preference ( KEY _ R ATER E VIEW ) !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ TRANSL ATE ) !!. on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ Ġpreference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference . intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( preference . intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi : ĠIntent Ġ= Ġpreference . intent ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i . resolve Activity ( app Compat Activity . package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Info Ġ= Ġapp Compat Activity . package Manager . get Package Info ( app Compat Activity . packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Preference < Preference >( KEY _ AB OUT VERSION ) !!. summary Ġ= ĠString . format (" v % s ", Ġpackage Info . version Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġnever Ġhappen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdev Settings Controller . onCreate Preferences ( preference Screen ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Tree Click ( preference : ĠPreference ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dev Settings Controller . on Preference Tree Click ( preference )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Preference Tree Click ( preference ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCred its Fragment Ġ: ĠToolbar Preference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠC ATEG ORY _ ICON S Ġ= Ġ" key _ c atic ons " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ credits ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ credits , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicons Category Ġ= Ġfind Preference < Preference Category >( CATEGORY _ ICON S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons Category !!. removeAll () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠSimple Library . instance . icon Providers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . forEach Ġ{ Ġ( s , Ġwi Provider ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref Ġ= ĠPreference ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . title Ġ= Ġwi Provider . displayName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . summary Ġ= Ġwi Provider . author Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wi Provider . at tribution Link Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . intent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Category ( Intent . CATEGORY _ BRO WS ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setData ( Uri . parse ( wi Provider . at tribution Link )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicons Category . add Preference ( pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Tree Click ( preference : ĠPreference ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preference . intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( preference . intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġpreference . intent ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i . resolve Activity ( app Compat Activity . package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠO SS Credits Fragment Ġ: ĠToolbar Preference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Title (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . string . pref _ title _ os libs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ os libs , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }