package Ġn inja . m ire a . m ire a app Ċ Ċ import Ġandroid . app . Alarm Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Remote Views Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . jsonObject Ċ import Ġn inja . m ire a . m ire a app . widget _ channel . Abstract Home Widget Provider Ċ import Ġn inja . m ire a . m ire a app . widget _ channel . Home Widget Launch Intent Ċ import Ġn inja . m ire a . m ire a app . widget _ channel . Schedule Model Ċ import Ġn inja . m ire a . m ire a app . widget _ channel . Update Widget Service Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ class ĠHome Widget Provider Ġ: ĠAbstract Home Widget Provider () Ġ{ ĊĊĠĠĠ Ġval ĠACTION _ AUTO _ UPDATE _ WIDGET Ġ= Ġ" ACTION _ AUTO _ UPDATE _ WIDGET " ĊĊĠĠĠ Ġoverride Ġfun Ġon Enabled ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Enabled ( context ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe load Ġwidget Ġevery Ġmid night ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠHome Widget Provider :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠACTION _ AUTO _ UPDATE _ WIDGET ĊĠĠĠĠĠĠĠ Ġval Ġp Intent Ġ= ĠPending Intent . get Broadcast ( context , Ġ 0 , Ġintent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġalarm Manager Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . ALARM _ SERVICE ) Ġas ĠAlarm Manager ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġc [ Calendar . HOUR _ OF _ DAY ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġc [ Calendar . MINUTE ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġc [ Calendar . SECOND ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġc [ Calendar . MILLI SECOND ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġc . add ( Calendar . MINUTE , Ġ 3 ) ĊĠĠĠĠĠĠ Ġalarm Manager . set Repe ating ( ĊĠĠĠĠĠĠĠĠĠĠ ĠAlarm Manager . RTC , Ġc . time In Millis , ĊĠĠĠĠĠĠĠĠĠĠ ĠAlarm Manager . INTERVAL _ DAY , Ġp Intent ĊĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġapp Widget Manager : ĠApp Widget Manager , ĊĠĠĠĠĠĠĠ Ġapp Widget Ids : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġwidget Data : ĠSharedPreferences ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Widget Ids . forEach Ġ{ Ġwidget Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule Data Ġ= Ġwidget Data . getString (" schedule ", Ġ"") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweek Data Ġ= Ġwidget Data . getString (" days Stuff ", Ġ"") !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġcurrent Ġweek Ġnum Ġor Ġplaceholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġweek Ġ= Ġ"- 2 2 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( week Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Obj Week Ġ= ĠJson . parse ToJson Element ( week Data ). jsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek Ġ= Ġjson Obj Week [ Calendar . getInstance (). get ( Calendar . DAY _ OF _ YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString ()]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠRemote Views ( context . packageName , ĠR . layout . timetable _ layout ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġse mester Ġis Ġgoing Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( week . matches ("\\ d +". to Regex ()) Ġ&& Ġweek . toInt () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset ĠonClick Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠHome Widget Launch Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . widget _ container , Ġpending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . widget _ place Holder , Ġpending Intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset ĠHeader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( schedule Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson . decode FromString ( Schedule Model . serializer (), Ġschedule Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġdate : ĠString Ġ= ĠSimpleDateFormat (" dd - MM ĠHH : mm : ss "). format ( Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . widget _ title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ðĵ ÑĢÑĥ Ð¿ Ð¿ Ð° : Ġ${ schedule Model . group } Ġ| ĠÐĿ ÐµÐ´ ÐµÐ»Ñı : Ġ$ week " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ main , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ no _ lessons , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ place Holder , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġloading Ġplaceholder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ main , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ no _ lessons , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ place Holder , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġno Ġless ons Ġplaceholder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ no _ lessons , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ main , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . widget _ place Holder , ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġ 1 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġless ons Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( week . matches ("\\ d +". to Regex ()) Ġ&& Ġweek . toInt () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset List ( views , Ġcontext , Ġwidget Id , Ġschedule Data , Ġweek ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġwidget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . update App Widget ( widget Id , Ġviews ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġless ons Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . notify App Widget ViewData Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . lv List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Disabled ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Disabled ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ACTION _ AUTO _ UPDATE _ WIDGET ) ĊĠĠĠĠĠĠĠ Ġval Ġalarm Mgr Ġ= Ġcontext . getSystem Service ( Context . ALARM _ SERVICE ) Ġas ĠAlarm Manager ĊĠĠĠĠĠĠĠ Ġalarm Mgr . cancel ( Pending Intent . get Broadcast ( context , Ġ 0 , Ġintent , Ġ 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Receive ( context , Ġintent ) ĊĊĠĠĠĠĠĠ Ġif Ġ( intent . action . equals ( ACTION _ AUTO _ UPDATE _ WIDGET )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis App Widget Ġ= ĠComponent Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext !!. packageName , Ġjava Class . name ĊĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġapp Widget Manager . getApp Widget Ids ( this App Widget ) ĊĊĠĠĠĠĠĠĠĠĠĠ ĠonUpdate ( context , ĠApp Widget Manager . getInstance ( context ), Ġids ) ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset List ( ĊĠĠĠĠĠĠĠ Ġrv : ĠRemote Views , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ?, ĊĠĠĠĠĠĠĠ Ġapp Widget Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġschedule : ĠString , ĊĠĠĠĠĠĠĠ Ġweek : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠIntent ( context , ĠUpdate Widget Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġadapter . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġapp Widget Id ) ĊĠĠĠĠĠĠĠ Ġadapter . putExtra (" schedule ", Ġschedule ) ĊĠĠĠĠĠĠĠ Ġadapter . putExtra (" week ", Ġweek ) ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠĠĠĠĠ Ġadapter . type Ġ= Ġ( random . nextInt ( 2 2 8 1 3 3 7 )). toString () ĊĊĠĠĠĠĠĠĠ Ġrv . set Remote Adapter ( R . id . lv List , Ġadapter ) ĊĠĠĠ Ġ} Ċ } Ċ