package Ġcom . ir ware . remote Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . ir ware . remote . holders . Remote Properties Ċ import Ġcom . ir ware . remote . ui . adapters . Remote ListAdapter Ċ import Ġcom . ir ware . remote . ui . buttons . Remote Button Ċ import Ġcom . ir ware . remote . ui . dialogs . Remote Dialog Ċ import Ġkotlinx . android . synt hetic . main . activity _ widget _ configur ator .* Ċ import Ġkotlinx . android . synt hetic . main . controllers _ refresh _ layout .* Ċ import Ġjava . io . File Ċ import Ġkotlin . math . min Ċ Ċ class ĠWidget Configurator Activity Ġ: ĠAppCompatActivity (), Swipe Refresh Layout . On Refresh Listener Ġ{ ĊĊĠĠĠ Ġvar Ġwidget Id Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Adapter : ĠRecyclerView . Adapter < *> ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Manager : ĠRecyclerView . LayoutManager ĊĠĠĠ Ġval Ġremote Prop List Ġ= ĠArrayList < Remote Properties >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġwidget Id Ġ= Ġintent ?. extras ?. getInt ( App Widget Manager . EXTRA _ APP WIDGET _ ID , ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ) Ġ?: ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ĊĊĠĠĠĠĠĠĠ Ġval Ġpref Ġ= Ġget SharedPreferences (" widget _ associ ations ", Context . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġif (! pref . getString ( widget Id . toString (), "" ). isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate App Widget () ĊĠĠĠĠĠĠĠ Ġ} else Ġif (! pref . getString (" queued _ button ","" ). isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit (). putString (" queued _ button ","" ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate App Widget () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen ( get SharedPreferences (" theme _ setting ", ĠContext . MODE _ PRIVATE ). getInt (" application _ theme ", if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ Ġ 0 Ġ} else { Ġ 2 Ġ})) ĊĠĠĠĠĠĠĠ Ġ{ 1 -> ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ NO ); 2 -> ĠAppCompat Delegate . setDefault Night Mode ( AppCompat Delegate . MODE _ N IGHT _ YES )} ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ widget _ configur ator ) ĊĊĠĠĠĠĠĠĠ Ġwindow ?. setBackground Drawable Resource ( R . drawable . layout _ border _ round _ corner ) ĊĠĠĠĠĠĠĠ Ġval Ġl Window Params Ġ= ĠWindow Manager . LayoutParams () ĊĠĠĠĠĠĠĠ Ġl Window Params . copyFrom ( window ?. attributes ) ĊĠĠĠĠĠĠĠ Ġl Window Params . width Ġ= ĠWindow Manager . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġl Window Params . height Ġ= ĠWindow Manager . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġwindow ?. attributes Ġ= Ġl Window Params ĊĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . getSize ( MainActivity . size ) ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġmin ( MainActivity . size . x , ĠMainActivity . size . y ) ĊĠĠĠĠĠĠĠ ĠMainActivity . NUM _ COLUMNS Ġ= Ġwhen { x > 9 2 0 -> 5 ; x < 7 2 0 -> 3 ; else -> 4 } ĊĠĠĠĠĠĠĠ Ġl Window Params . width Ġ= ĠMainActivity . size . x * 7 / 8 ĊĠĠĠĠĠĠĠ Ġl Window Params . height Ġ= ĠMainActivity . size . y * 6 / 8 ĊĠĠĠĠĠĠĠ Ġwindow ?. attributes Ġ= Ġl Window Params ĊĠĠĠĠĠĠĠ ĠRemote Button . on Config Changed () ĊĊĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġresources . obtain Typed Array ( R . array . icons ) ĊĠĠĠĠĠĠĠ ĠMainActivity . icon Drawable List Ġ= ĠInt Array ( arr . length ()) ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġarr . length ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . icon Drawable List [ i ] Ġ= Ġarr . getResource Id ( i , 0 ) ĊĠĠĠĠĠĠĠ Ġarr . recycle () ĊĊĠĠĠĠĠĠĠ Ġview Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġview Adapter Ġ= ĠRemote ListAdapter ( remote Prop List , Remote Dialog . MODE _ SELECT _ BUTTON ) ĊĠĠĠĠĠĠĠ Ġmanage _ rem otes _ recycler _ view . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġview Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġview Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( remote _ refresh _ layout Ġas ĠSw ipe Refresh Layout ). setOn Refresh Listener ( this ) ĊĠĠĠĠĠĠĠ Ġon Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( remote _ refresh _ layout Ġas ĠSw ipe Refresh Layout ). is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠThread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Prop List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= ĠFile ( files Dir . absolute Path Ġ+ ĠFile . separator Ġ+ ĠMainActivity . REMOTE _ CONFIG _ DIR ). list Files Ġ{ Ġpathname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpathname !!. isFile Ġand Ġ( pathname . name . endsWith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġand Ġpathname . can Write () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Prop List . add ( Remote Properties ( it , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( remote _ refresh _ layout Ġas ĠSw ipe Refresh Layout ). is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate App Widget (){ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠButton Widget Provider :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠApp Widget Manager . ACTION _ APP WIDGET _ UPDATE ĊĠĠĠĠĠĠĠ Ġval Ġ Ġids Ġ= ĠApp Widget Manager . getInstance ( this ). getApp Widget Ids ( Component Name ( this , Button Widget Provider :: class . java )) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ IDS , Ġids ) ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( intent ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Value Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġwidget Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġresult Value ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġvar Ġactivity : Widget Configurator Activity ? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ