package Ġcom . github . pre mn irm al . ticker . settings Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface . OnClickListener Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . List Preference Ċ import Ġandroid . preference . Preference Ċ import Ġandroid . preference . Preference Activity Ċ import Ġandroid . support . custom tabs . Custom Tabs Intent Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . content . File Provider Ċ import Ġandroid . view . LayoutInflater Ċ import Ġcom . github . pre mn irm al . ticker . App Preferences Ċ import Ġcom . github . pre mn irm al . ticker . base . Base Activity . Companion . getStatus Bar Height Ċ import Ġcom . github . pre mn irm al . ticker . base . Base Activity . Companion . show Dialog Ċ import Ġcom . github . pre mn irm al . ticker . components . In App Message Ċ import Ġcom . github . pre mn irm al . ticker . components . Injector Ċ import Ġcom . github . pre mn irm al . ticker . model . IS to cks Provider Ċ import Ġcom . github . pre mn irm al . ticker . to Bitmap Ċ import Ġcom . github . pre mn irm al . ticker . widget . Widget DataProvider Ċ import Ġcom . github . pre mn irm al . ticker widget . Build Config Ċ import Ġcom . github . pre mn irm al . ticker widget . R Ċ import Ġcom . github . pre mn irm al . ticker widget . R . id . github _ link Ċ import Ġcom . github . pre mn irm al . ticker widget . R . id . version Ċ import Ġcom . nbsp . material file picker . Material File Picker Ċ import Ġcom . nbsp . material file picker . ui . File Picker Activity Ċ import Ġkotlinx . android . synt hetic . main . activity _ preferences . toolbar Ċ import Ġkotlinx . android . synt hetic . main . preferences _ footer . github _ link Ċ import Ġkotlinx . android . synt hetic . main . preferences _ footer . version Ċ import Ġs as ch pe . android . custom tabs . Custom Tabs Helper Ċ import Ġs as ch pe . android . custom tabs . WebView Fallback Ċ import Ġtim ber . log . Tim ber Ċ import Ġuk . co . chr is jen x . call ig raph y . Call ig raph y Context Wrapper Ċ import Ġjava . io . File Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġpre mn irm al Ġon Ġ 2 / 2 7 / 1 6 . Ċ Ġ*/ Ċ class ĠSettings Activity Ġ: ĠPreference Activity (), ĠActivity Compat . On Request Permissions Result Callback Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠREQ CODE _ WRITE _ EXTERNAL _ STORAGE Ġ= Ġ 8 5 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠREQ CODE _ READ _ EXTERNAL _ STORAGE Ġ= Ġ 8 5 1 ĊĠĠĠ Ġprivate Ġconst Ġval ĠREQ CODE _ WRITE _ EXTERNAL _ STORAGE _ SHARE Ġ= Ġ 8 5 2 ĊĠĠĠ Ġprivate Ġconst Ġval ĠREQ CODE _ FILE _ WRITE Ġ= Ġ 8 5 3 ĊĠ Ġ} ĊĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġstock s Provider : ĠI Sto cks Provider ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġwidget DataProvider : ĠWidget DataProvider ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġpreferences : ĠSharedPreferences ĊĠ Ġ@ Inject ĊĠ Ġinternal Ġlateinit Ġvar Ġapp Preferences : ĠApp Preferences ĊĊĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġbroadcast Update Widget () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠInject or . app Component . inject ( this ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ preferences ) ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠ Ġtoolbar . set Padding ( toolbar . padding Left , Ġget StatusBar Height (), ĊĠĠĠĠĠĠĠĠĠ Ġtoolbar . padding Right , Ġtoolbar . padding Bottom ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġattach Base Context ( new Base : ĠContext ) Ġ{ ĊĠĠĠ Ġsuper . attach Base Context ( Call ig raph y Context Wrapper . wrap ( new Base )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Post Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . on Post Create ( savedInstanceState ) ĊĠĠĠ Ġval Ġbar Ġ= Ġtoolbar ĊĠĠĠ Ġbar . set Navigation OnClickListener Ġ{ Ġon Back Pressed () Ġ} ĊĊĠĠĠ ĠlistView . add Footer View ( ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( this ). inflate ( R . layout . preferences _ footer , Ġnull , Ġfalse )) ĊĊĠĠĠ Ġval Ġversion View Ġ= Ġversion ĊĠĠĠ Ġval Ġv Name Ġ= Ġ" v ${ Build Config . VERSION _ NAME }" ĊĠĠĠ Ġversion View . text Ġ= Ġv Name ĊĠĠĠ Ġsetup Simple Preferences Screen () ĊĠĠĠ Ġgithub _ link . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġval Ġcustom Tabs Intent Ġ= ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. add Default Share MenuItem () ĊĠĠĠĠĠĠĠĠĠ Ġ. set Toolbar Color ( this . resources . getColor ( R . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Show Title ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Close Button Icon ( resources . get Drawable ( R . drawable . ic _ close ). to Bitmap ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ ĠCustom Tabs Helper . add KeepAlive Extra ( this , Ġcustom Tabs Intent . intent ) ĊĠĠĠĠĠ ĠCustom Tabs Helper . open Custom Tab ( this , Ġcustom Tabs Intent , ĊĠĠĠĠĠĠĠĠĠ ĠUri . parse ( resources . getString ( R . string . checkout _ open _ source )), ĠWebView Fallback ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠShows Ġthe Ġsimplified Ġsettings ĠUI Ġif Ġthe Ġdevice Ġconfiguration Ġif Ġthe ĊĠĠ Ġ* Ġdevice Ġconfiguration Ġdict ates Ġthat Ġa Ġsimplified , Ġsingle - pane ĠUI Ġshould Ġbe ĊĠĠ Ġ* Ġshown . ĊĠĠ Ġ*/ ĊĠ Ġ@ Suppress Lint (" Commit Pref Ed its ") ĊĠ Ġprivate Ġfun Ġsetup Simple Preferences Screen () Ġ{ ĊĠĠĠ Ġ// ĠIn Ġthe Ġsimplified ĠUI , Ġfragments Ġare Ġnot Ġused Ġat Ġall Ġand Ġwe Ġinstead ĊĠĠĠ Ġ// Ġuse Ġthe Ġolder ĠPreference Activity ĠAPIs . ĊĊĠĠĠ Ġ// ĠAdd Ġ' general ' Ġpreferences . ĊĠĠĠ Ġadd Preferences From Resource ( R . xml . prefs ) ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġprivacy Pref Ġ= Ġfind Preference ( App Preferences . SETTING _ PRIV ACY _ POLICY ) ĊĠĠĠĠĠ Ġprivacy Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcustom Tabs Intent Ġ= ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Default Share MenuItem () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Toolbar Color ( this . resources . getColor ( R . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Title ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Close Button Icon ( resources . get Drawable ( R . drawable . ic _ close ). to Bitmap ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠCustom Tabs Helper . add KeepAlive Extra ( this , Ġcustom Tabs Intent . intent ) ĊĠĠĠĠĠĠĠ ĠCustom Tabs Helper . open Custom Tab ( this , Ġcustom Tabs Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( resources . getString ( R . string . privacy _ policy _ url )), ĠWebView Fallback ()) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġnu ke Pref Ġ= Ġfind Preference ( App Preferences . SETTING _ NU KE ) ĊĠĠĠĠĠ Ġnu ke Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . are _ you _ sure ), ĠOn ClickListener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġhas User Already R ated Ġ= Ġapp Preferences . has User Already R ated () ĊĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( RuntimeException (" N uk ed Ġfrom Ġsettings ! ")) ĊĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). clear (). commit () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġfiles Dir . path Ġ+ Ġ"$ packageName / shared _ prefs /" ĊĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preference File Ġ= ĠFile ( directory ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlist Files Ġ= Ġshared Preference File . list Files () ĊĠĠĠĠĠĠĠĠĠ Ġlist Files ?. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile ?. delete () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). put Boolean ( App Preferences . DID _ RATE , Ġhas User Already R ated ). commit () ĊĠĠĠĠĠĠĠĠĠ ĠSystem . exit ( 0 ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġexport Pref Ġ= Ġfind Preference ( App Preferences . SETTING _ EXPORT ) ĊĠĠĠĠĠ Ġexport Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( needs Permission Grant ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġask For External Storage Permissions ( REQ CODE _ WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġexport Tick ers () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġshare Pref Ġ= Ġfind Preference ( App Preferences . SETTING _ SHARE ) ĊĠĠĠĠĠ Ġshare Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( needs Permission Grant ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġask For External Storage Permissions ( REQ CODE _ WRITE _ EXTERNAL _ STORAGE _ SHARE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġexport And Share Tick ers () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġimport Pref Ġ= Ġfind Preference ( App Preferences . SETTING _ IMPORT ) ĊĠĠĠĠĠ Ġimport Pref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( needs Permission Grant ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġask For External Storage Permissions ( REQ CODE _ READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlaunch Import Intent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval ĠfontSize Preference Ġ= Ġfind Preference ( App Preferences . FONT _ SIZE ) Ġas ĠList Preference ĊĠĠĠĠĠ Ġval Ġsize Ġ= Ġpreferences . getInt ( App Preferences . FONT _ SIZE , Ġ 1 ) ĊĠĠĠĠĠ ĠfontSize Preference . setValue Index ( size ) ĊĠĠĠĠĠ ĠfontSize Preference . summary Ġ= ĠfontSize Preference . entries [ size ] ĊĠĠĠĠĠ ĠfontSize Preference . on Preference ChangeListener Ġ= Ġobject Ġ: ĠDefault Preference ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstring Value Ġ= ĠnewValue . toString () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlist Preference Ġ= Ġpreference Ġas ĠList Preference ĊĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġlist Preference . find IndexOf Value ( stringValue ) ĊĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). remove ( App Preferences . FONT _ SIZE ). put Int ( App Preferences . FONT _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ). apply () ĊĠĠĠĠĠĠĠĠĠ Ġbroadcast Update Widget () ĊĠĠĠĠĠĠĠĠĠ ĠfontSize Preference . summary Ġ= ĠfontSize Preference . entries [ index ] ĊĠĠĠĠĠĠĠĠĠ ĠIn App Message . showMessage ( this @ Settings Activity , ĠR . string . text _ size _ updated _ message ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval Ġrefresh Preference Ġ= Ġfind Preference ( App Preferences . UPDATE _ INTERVAL ) Ġas ĠList Preference ĊĠĠĠĠĠ Ġval Ġrefresh Index Ġ= Ġpreferences . getInt ( App Preferences . UPDATE _ INTERVAL , Ġ 1 ) ĊĠĠĠĠĠ Ġrefresh Preference . setValue Index ( refresh Index ) ĊĠĠĠĠĠ Ġrefresh Preference . summary Ġ= Ġrefresh Preference . entries [ refresh Index ] ĊĠĠĠĠĠ Ġrefresh Preference . on Preference ChangeListener Ġ= Ġobject Ġ: ĠDefault Preference ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstring Value Ġ= ĠnewValue . toString () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlist Preference Ġ= Ġpreference Ġas ĠList Preference ĊĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġlist Preference . find IndexOf Value ( stringValue ) ĊĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). put Int ( App Preferences . UPDATE _ INTERVAL , Ġindex ). apply () ĊĠĠĠĠĠĠĠĠĠ Ġbroadcast Update Widget () ĊĠĠĠĠĠĠĠĠĠ Ġrefresh Preference . summary Ġ= Ġrefresh Preference . entries [ index ] ĊĠĠĠĠĠĠĠĠĠ ĠIn App Message . showMessage ( this @ Settings Activity , ĠR . string . refresh _ updated _ message ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval ĠstartTime Pref Ġ= Ġfind Preference ( App Preferences . START _ TIME ) Ġas ĠTime Preference ĊĠĠĠĠĠ ĠstartTime Pref . summary Ġ= Ġpreferences . getString ( App Preferences . START _ TIME , Ġ" 0 9 : 3 0 ") ĊĠĠĠĠĠ ĠstartTime Pref . on Preference ChangeListener Ġ= Ġobject Ġ: ĠDefault Preference ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime z Ġ= Ġapp Preferences . time As IntArray ( newValue . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġval ĠendTime z Ġ= Ġapp Preferences . endTime () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( endTime z [ 0 ] Ġ== ĠstartTime z [ 0 ] Ġ&& ĠendTime z [ 1 ] Ġ== ĠstartTime z [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . incorrect _ time _ update _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString ( App Preferences . START _ TIME , ĠnewValue . toString ()). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Pref . summary Ġ= ĠnewValue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstock s Provider . schedule () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn App Message . showMessage ( this @ Settings Activity , ĠR . string . start _ time _ updated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠ Ġval ĠendTime Pref Ġ= Ġfind Preference ( App Preferences . END _ TIME ) Ġas ĠTime Preference ĊĠĠĠĠĠ ĠendTime Pref . summary Ġ= Ġpreferences . getString ( App Preferences . END _ TIME , Ġ" 1 6 : 3 0 ") ĊĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠendTime z Ġ= Ġapp Preferences . endTime () ĊĠĠĠĠĠĠĠ Ġval ĠstartTime z Ġ= Ġapp Preferences . startTime () ĊĠĠĠĠĠĠĠ Ġif Ġ( endTime z [ 0 ] Ġ== ĠstartTime z [ 0 ] Ġ&& ĠendTime z [ 1 ] Ġ== ĠstartTime z [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠendTime Pref . set Summary ( R . string . incorrect _ time _ update _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠendTime Pref . on Preference ChangeListener Ġ= Ġobject Ġ: ĠDefault Preference ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Preference Change ( preference : ĠPreference , ĠnewValue : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval ĠendTime z Ġ= Ġapp Preferences . time As IntArray ( newValue . toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime z Ġ= Ġapp Preferences . startTime () ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( endTime z [ 0 ] Ġ== ĠstartTime z [ 0 ] Ġ&& ĠendTime z [ 1 ] Ġ== ĠstartTime z [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . incorrect _ time _ update _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString ( App Preferences . END _ TIME , ĠnewValue . toString ()). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Pref . summary Ġ= ĠnewValue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstock s Provider . schedule () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn App Message . showMessage ( this @ Settings Activity , ĠR . string . end _ time _ updated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġneeds Permission Grant (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 3 Ġ&& ĊĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( this @ Settings Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġask For External Storage Permissions ( req Code : ĠInt ) Ġ{ ĊĠĠĠ ĠActivity Compat . request Permissions ( this @ Settings Activity , ĊĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠ Ġreq Code ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġexport And Share Tick ers () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠApp Preferences . tick ers File ĊĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠ Ġshare Tick ers () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġobject Ġ: ĠFile Export Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . error _ sharing )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( Throwable (" Error Ġsharing Ġtick ers ")) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Tick ers () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}. execute ( stocks Provider . get Tick ers ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlaunch Import Intent () Ġ{ ĊĠĠĠ ĠMaterial File Picker () ĊĠĠĠĠĠĠĠ Ġ. with Activity ( this ) ĊĠĠĠĠĠĠĠ Ġ. with Request Code ( REQ CODE _ FILE _ WRITE ) ĊĠĠĠĠĠĠĠ Ġ. with Filter ( Pattern . compile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" .* \\. txt $ ")) Ġ// ĠFiltering Ġfiles Ġand Ġdirectories Ġby Ġfile Ġname Ġusing Ġregexp ĊĠĠĠĠĠĠĠ Ġ. start () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġexport Tick ers () Ġ{ ĊĠĠĠ Ġobject Ġ: ĠFile Export Task () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . error _ export ing )) ĊĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( Throwable (" Error Ġexporting Ġtick ers ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . exported _ to , Ġresult )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. execute ( stocks Provider . get Tick ers ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshare Tick ers () Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠ Ġintent . type Ġ= Ġ" text / plain " ĊĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ EMAIL , ĠarrayOf < String >()) ĊĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ SUBJECT , ĠgetString ( R . string . my _ stock _ portfolio )) ĊĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TEXT , ĠgetString ( R . string . share _ email _ subject )) ĊĠĠĠ Ġval Ġfile Ġ= ĠApp Preferences . tick ers File ĊĠĠĠ Ġif Ġ(! file . exists () Ġ|| Ġ! file . can Read ()) Ġ{ ĊĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . error _ sharing )) ĊĠĠĠĠĠ ĠTim ber . w ( Throwable (" Error Ġsharing Ġtick ers ")) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġuri Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠ ĠFile Provider . get Uri For File ( this , ĠBuild Config . APPLICATION _ ID Ġ+ Ġ". provider ", Ġfile ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠUri . from File ( file ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ STREAM , Ġuri ) ĊĠĠĠ Ġval Ġlaunch Intent Ġ= ĠIntent . create Chooser ( intent , ĠgetString ( R . string . action _ share )) ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠ Ġlaunch Intent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠstartActivity ( launch Intent ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbroadcast Update Widget () Ġ{ ĊĠĠĠ Ġwidget DataProvider . broadcast Update All Widgets () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠ ĠREQ CODE _ WRITE _ EXTERNAL _ STORAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġexport Tick ers () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . cannot _ export _ msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠREQ CODE _ READ _ EXTERNAL _ STORAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlaunch Import Intent () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . cannot _ import _ msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠREQ CODE _ WRITE _ EXTERNAL _ STORAGE _ SHARE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġexport And Share Tick ers () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . cannot _ share _ msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠ Ġif Ġ( request Code Ġ== ĠREQ CODE _ FILE _ WRITE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġdata ?. getString Extra ( File Picker Activity . RESULT _ FILE _ PATH ) ĊĠĠĠĠĠ Ġif Ġ( filePath Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠFile Import Task ( widget DataProvider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull Ġ&& Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . ticker _ import _ success )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( getString ( R . string . ticker _ import _ fail )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. execute ( filePath ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠ Ġ} Ċ }