package Ġio . github . w ulkan owy . ui . modules . luck yn umber widget Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Pending Intent . FLAG _ UPDATE _ CURRENT Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . app widget . App Widget Manager . OPTION _ APP WIDGET _ MAX _ HEIGHT Ċ import Ġandroid . app widget . App Widget Manager . OPTION _ APP WIDGET _ MIN _ WIDTH Ċ import Ġandroid . app widget . App Widget Provider Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . widget . Remote Views Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġio . github . w ulkan owy . R Ċ import Ġio . github . w ulkan owy . data . db . Shared Pref Provider Ċ import Ġio . github . w ulkan owy . data . exceptions . No Current Student Exception Ċ import Ġio . github . w ulkan owy . data . repositories . luck yn umber . L uck y Number Repository Ċ import Ġio . github . w ulkan owy . data . repositories . student . Student Repository Ċ import Ġio . github . w ulkan owy . ui . modules . main . MainActivity Ċ import Ġio . github . w ulkan owy . ui . modules . main . Main View Ċ import Ġio . github . w ulkan owy . utils . to First Result Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠL uck y Number Widget Provider Ġ: ĠApp Widget Provider () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġstudent Repository : ĠStudent Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġluck y Number Repository : ĠL uck y Number Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġshared Pref : ĠShared Pref Provider ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Student Widget Key ( app Widget Id : ĠInt ) Ġ= Ġ" luck y _ number _ widget _ student _$ app Widget Id " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Theme Widget Key ( app Widget Id : ĠInt ) Ġ= Ġ" luck y _ number _ widget _ theme _$ app Widget Id " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Height Widget Key ( app Widget Id : ĠInt ) Ġ= Ġ" luck y _ number _ widget _ height _$ app Widget Id " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Width Widget Key ( app Widget Id : ĠInt ) Ġ= Ġ" luck y _ number _ widget _ width _$ app Widget Id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( context : ĠContext , Ġapp Widget Manager : ĠApp Widget Manager , Ġapp Widget Ids : ĠInt Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Update ( context , Ġapp Widget Manager , Ġapp Widget Ids ) ĊĠĠĠĠĠĠĠ Ġapp Widget Ids ?. forEach Ġ{ Ġapp Widget Id Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġluck y Number Ġ= Ġget L uck y Number ( shared Pref . getLong ( get Student Widget Key ( app Widget Id ), Ġ 0 ), Ġapp Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Intent Ġ= ĠPending Intent . getActivity ( context , ĠMain View . Section . LU CK Y _ NUMBER . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . getStart Intent ( context , ĠMain View . Section . LU CK Y _ NUMBER , Ġtrue ), ĠFLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote View Ġ= ĠRemote Views ( context . packageName , Ġget Correct Layout Id ( app Widget Id , Ġcontext )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . luck y Number Widget Number , Ġluck y Number ?. luck y Number ?. toString () Ġ?: Ġ"# ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . luck y Number Widget Container , Ġapp Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Styles ( remote View , Ġapp Widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Widget Manager . update App Widget ( app Widget Id , Ġremote View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Deleted ( context : ĠContext ?, Ġapp Widget Ids : ĠInt Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Deleted ( context , Ġapp Widget Ids ) ĊĠĠĠĠĠĠĠ Ġapp Widget Ids ?. forEach Ġ{ Ġapp Widget Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( shared Pref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( getHeight Widget Key ( app Widget Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( get Student Widget Key ( app Widget Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( get Theme Widget Key ( app Widget Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( getWidth Widget Key ( app Widget Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon App Widget Options Changed ( context : ĠContext , Ġapp Widget Manager : ĠApp Widget Manager , Ġapp Widget Id : ĠInt , Ġnew Options : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on App Widget Options Changed ( context , Ġapp Widget Manager , Ġapp Widget Id , Ġnew Options ) ĊĊĠĠĠĠĠĠĠ Ġval Ġremote View Ġ= ĠRemote Views ( context . packageName , Ġget Correct Layout Id ( app Widget Id , Ġcontext )) ĊĊĠĠĠĠĠĠĠ Ġset Styles ( remote View , Ġapp Widget Id , Ġnew Options ) ĊĠĠĠĠĠĠĠ Ġapp Widget Manager . update App Widget ( app Widget Id , Ġremote View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Styles ( views : ĠRemote Views , Ġapp Widget Id : ĠInt , Ġoptions : ĠBundle ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġoptions ?. getInt ( OPTION _ APP WIDGET _ MIN _ WIDTH ) Ġ?: Ġshared Pref . getLong ( getWidth Widget Key ( app Widget Id ), Ġ 7 4 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġoptions ?. getInt ( OPTION _ APP WIDGET _ MAX _ HEIGHT ) Ġ?: Ġshared Pref . getLong ( getHeight Widget Key ( app Widget Id ), Ġ 7 4 ). toInt () ĊĊĠĠĠĠĠĠĠ Ġwith ( shared Pref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( getWidth Widget Key ( app Widget Id ), Ġwidth . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( getHeight Widget Key ( app Widget Id ), Ġheight . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġget Cells For Size ( height ) ĊĠĠĠĠĠĠĠ Ġval Ġcols Ġ= Ġget Cells For Size ( width ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" New Ġluck y Ġnumber Ġwidget Ġmeasurement : Ġ% dx % d ", Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Widget Ġsize : Ġ$ cols Ġx Ġ$ rows ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ== Ġcols Ġ&& Ġ 1 Ġ== Ġrows Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġfalse , Ġimage Left Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ== Ġcols Ġ&& Ġ 1 Ġ< Ġrows Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġtrue , Ġimage Left Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ< Ġcols Ġ&& Ġ 1 Ġ== Ġrows Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġfalse , Ġimage Left Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ== Ġcols Ġ&& Ġ 1 Ġ== Ġrows Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġtrue , Ġimage Left Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ== Ġcols Ġ&& Ġ 1 Ġ== Ġrows Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġfalse , Ġimage Left Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġviews . setVisibility ( image Top Ġ= Ġfalse , Ġimage Left Ġ= Ġfalse , Ġtitle Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRemote Views . setVisibility ( image Top : ĠBoolean , Ġimage Left : ĠBoolean , Ġtitle : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . luck y Number Widget Image Top , Ġif Ġ( image Top ) ĠVIS IBLE Ġelse ĠG ONE ) ĊĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . luck y Number Widget Image Left , Ġif Ġ( image Left ) ĠVIS IBLE Ġelse ĠG ONE ) ĊĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . luck y Number Widget Title , Ġif Ġ( title ) ĠVIS IBLE Ġelse ĠG ONE ) ĊĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . luck y Number Widget Number , ĠVIS IBLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cells For Size ( size : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( 7 4 Ġ* Ġn Ġ- Ġ 3 0 Ġ< Ġsize ) Ġ++ n ĊĠĠĠĠĠĠĠ Ġreturn Ġn Ġ- Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget L uck y Number ( student Id : ĠLong , Ġapp Widget Id : ĠInt ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstudents Ġ= Ġstudent Repository . get Saved Students () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstudent Ġ= Ġstudents . single OrNull Ġ{ Ġit . student . id Ġ== Ġstudent Id Ġ} ?. student ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Student Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Ġ!= Ġnull Ġ-> Ġstudent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Id Ġ!= Ġ 0 L Ġ&& Ġstudent Repository . is Current Student Set () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Repository . getCurrent Student ( false ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Pref . put Long ( get Student Widget Key ( app Widget Id ), Ġit . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Student ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġluck y Number Repository . get L uck y Number ( it , Ġfalse ). to First Result (). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . cause Ġ! is ĠNo Current Student Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" An Ġerror Ġhas Ġoccurred Ġin Ġluck y Ġnumber Ġprovider ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Correct Layout Id ( app Widget Id : ĠInt , Ġcontext : ĠContext ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved Theme Ġ= Ġshared Pref . getLong ( get Theme Widget Key ( app Widget Id ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġis System Dark Mode Ġ= Ġcontext . resources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK Ġ== ĠConfiguration . UI _ MODE _ N IGHT _ YES ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( saved Theme Ġ== Ġ 1 L Ġ|| Ġ( saved Theme Ġ== Ġ 2 L Ġ&& Ġis System Dark Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . widget _ luck yn umber _ dark ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . widget _ luck yn umber ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ