package Ġcom . ice . kt u ice . ui . main . fragments čĊč Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . view . LayoutInflater č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġandroidx . lifecycle . Observer č Ċ import Ġandroidx . work . Data č Ċ import Ġandroidx . work . Existing Periodic Work Policy č Ċ import Ġandroidx . work . Periodic Work RequestBuilder č Ċ import Ġandroidx . work . Work Manager č Ċ import Ġcom . ice . kt u ice . R č Ċ import Ġcom . ice . kt u ice . al . logger . Ice Log č Ċ import Ġcom . ice . kt u ice . al . logger . info č Ċ import Ġcom . ice . kt u ice . al . notifications . Sync Job č Ċ import Ġcom . ice . kt u ice . al . notifications . Sync Job Worker č Ċ import Ġcom . ice . kt u ice . al . services . year Gr ades Service . Year Gr ades Service č Ċ import Ġcom . ice . kt u ice . repositories . pref rence Repository . Preference Repository č Ċ import Ġcom . ice . kt u ice . ui . main . components . Grade Table č Ċ import Ġcom . ice . kt u ice . view Models . grade s Fragment . Gr ades Fragment ViewModel č Ċ import Ġkotlinx . android . synt hetic . main . fragment _ grade s .* č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . Global Scope č Ċ import Ġkotlinx . coroutines . launch č Ċ import Ġorg . k oin . android . ext . android . inject č Ċ import Ġorg . k oin . standalone . K oin Component č Ċ import Ġjava . util . concurrent . TimeUnit čĊčĊč Ċ /** čĊ Ġ* ĠCreated Ġby ĠAnd ri us Ġon Ġ 2 / 2 4 / 2 0 1 8 . čĊ Ġ* ĠThe Ġmain Ġfragment Ġof Ġthe Ġapplication : čĊ Ġ* Ġdisplays Ġa ĠGr ade ĠTable Ġcomponent Ġand Ġlets Ġthe Ġstudent Ġlog Ġout čĊ Ġ*/ č Ċ class ĠFragment Gr ades : ĠFragment (), ĠK oin Component , ĠI ce Log Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġyear Gr ades Service : ĠYear Gr ades Service Ġby Ġinject () čĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠGr ades Fragment ViewModel Ġby Ġinject () čĊĠĠĠ Ġprivate Ġval Ġpreference Repository : ĠPreference Repository Ġby Ġinject () čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgrade TableView : ĠGr ade Table čĊĠĠĠ Ġprivate Ġval Ġsync Job Ġ= ĠSync Job () čĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġinfo (" Creating ĠGr ades Ġfragment !") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ grade s , Ġcontainer , Ġfalse ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġview čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) čĊčĊĠĠĠĠĠĠĠ Ġgrade TableView Ġ= ĠGr ade Table ( this . activity !! ) čĊĠĠĠĠĠĠĠ Ġgrade _ table _ view _ container . addView ( grade TableView ) čĊčĊĠĠĠĠĠĠĠ ĠviewModel . grade s . observe ( this , ĠObserver Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . activity ?. run On Ui Thread Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġreduce Ġthe Ġview - model Ġto Ġonly Ġcontain Ġa Ġkey , Ġor Ġadd ĠPDO 's čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrealm Ġcan Ġnot Ġpass Ġobjects Ġbetween Ġthreads .. čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġre - fetch Ġthe Ġgr ades Ġhere čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgr ades Ġ= Ġyear Gr ades Service . get Year Gr ades List From DB () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( grade s Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade TableView . update Grade Table ( grade s , ĠviewModel . selected Se mester Number . value , ĠviewModel . selected Year . value ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ ĠviewModel . login Model . observe ( this , ĠObserver Ġ{ Ġ Ġlogin Model -> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . activity ?. run On Ui Thread Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Model !! čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo _ student _ code . text Ġ= Ġlogin Model . student Id čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo _ student _ name . text Ġ= Ġlogin Model . student Name čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest _ button . setOnClickListener { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Job ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Pause () čĊĠĠĠĠĠĠĠ Ġschedule Job ( false ) čĊĠĠĠĠĠĠĠ Ġ// Ġs hed ule Ġthe Ġnotifications Ġto Ġbe Ġpol led Ġfor Ġ Ġwhenever Ġthe Ġapplication Ġis Ġpaused Ġ/ Ġstopped čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġschedule Job ( instant : ĠBoolean ){ čĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= ĠWork Manager . getInstance () čĊĠĠĠĠĠĠĠ Ġval Ġnotification Flag Ġ= Ġif ( instant ) Ġ 0 Ġelse Ġ 1 čĊĠĠĠĠĠĠĠ Ġval Ġdata To Worker Ġ= ĠData . Builder (). put Int ( resources . getString ( R . string . notification _ enabled _ flag ), Ġnotification Flag ). build () čĊĠĠĠĠĠĠĠ Ġpreference Repository . setValue ( R . string . grade _ sc raper _ retries , Ġ" 0 ") čĊčĊĠĠĠĠĠĠĠ Ġif (! instant ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Work Tag Ġ= Ġresources . getString ( R . string . notification _ work _ tag ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperiodic Sync Work Ġ= ĠPeriod ic Work RequestBuilder < Sync Job Worker >( 3 , ĠTimeUnit . HOUR S ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( data To Worker ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( notification Work Tag ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwm . enqueue Unique Periodic Work ( resources . getString ( R . string . notification _ work _ name ), ĠExisting Periodic Work Policy . KEEP , Ġperiodic Sync Work ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġmove Ġperiod Ġtime Ġto Ġconfiguration , Ġnot Ġinline čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġelse { čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Job . sync ( 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊč Ċ }