package Ġcom . re vol gen x . an ilib . ui . fragment Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġcom . google . android . material . app bar . AppBar Layout Ċ import Ġcom . pr an av pan de y . android . dynamic . support . adapter . Dynamic Spinner Image Adapter Ċ import Ġcom . pr an av pan de y . android . dynamic . support . model . Dynamic Menu Ċ import Ġcom . pr an av pan de y . android . dynamic . support . theme . Dynamic Theme Ċ import Ġcom . pr an av pan de y . android . dynamic . theme . Theme Ċ import Ġcom . re vol gen x . an ilib . R Ċ import Ġcom . re vol gen x . an ilib . app . theme . dynamic BackgroundColor Ċ import Ġcom . re vol gen x . an ilib . app . theme . dynamic TextColor Primary Ċ import Ġcom . re vol gen x . an ilib . infrastructure . event . List Editor Result Event Ċ import Ġcom . re vol gen x . an ilib . data . field . Toggle F avour ite Field Ċ import Ġcom . re vol gen x . an ilib . data . meta . List Editor Meta Ċ import Ġcom . re vol gen x . an ilib . data . meta . List Editor Result Meta Ċ import Ġcom . re vol gen x . an ilib . data . model . Date Model Ċ import Ġcom . re vol gen x . an ilib . common . preference . getUser Pref Model Ċ import Ġcom . re vol gen x . an ilib . common . preference . userId Ċ import Ġcom . re vol gen x . an ilib . common . preference . user Score Format Ċ import Ġcom . re vol gen x . an ilib . common . ui . fragment . Base Layout Fragment Ċ import Ġcom . re vol gen x . an ilib . data . meta . type . Media List Status Editor Ċ import Ġcom . re vol gen x . an ilib . databinding . List Editor Fragment Layout Binding Ċ import Ġcom . re vol gen x . an ilib . infrastructure . repository . util . Status .* Ċ import Ġcom . re vol gen x . an ilib . type . MediaType Ċ import Ġcom . re vol gen x . an ilib . type . Score Format Ċ import Ġcom . re vol gen x . an ilib . ui . bottom sheet . air ing . Calendar View Bottom Sheet Dialog Ċ import Ġcom . re vol gen x . an ilib . ui . view . make Confirmation Dialog Ċ import Ġcom . re vol gen x . an ilib . ui . view . make Toast Ċ import Ġcom . re vol gen x . an ilib . ui . view model . entry . Media Entry Editor ViewModel Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt ĊĊ Ċ class ĠEntry List Editor Fragment Ġ: ĠBase Layout Fragment < List Editor Fragment Layout Binding >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLIST _ EDITOR _ META _ KEY Ġ= Ġ" list _ editor _ meta _ key " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOL LAP SED Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX PAN DED Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( meta : List Editor Meta ) Ġ= ĠEntry List Editor Fragment (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . arguments Ġ= Ġbundle Of ( LIST _ EDITOR _ META _ KEY Ġto Ġmeta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstate Ġ= ĠCOL LAP SED Ġ// collapsed ĊĠĠĠ Ġprivate Ġval Ġmedia Meta : ĠList Editor Meta ? Ġget () Ġ= Ġarguments ?. get Parcelable ( LIST _ EDITOR _ META _ KEY ) ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Media Entry Editor ViewModel >() ĊĊĠĠĠ Ġprivate Ġvar Ġsaving Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġdeleting Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġto g gling Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis F avour ite Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġapi Model Entry ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠviewModel . api Model Entry ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . api Model Entry Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġset Home As Up : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġcalendar Drawable Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . ic _ calendar ) !!. mutate (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Tint ( dynamic TextColor Primary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcross Drawable Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . ic _ close ) !!. mutate (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Tint ( dynamic TextColor Primary ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġcalendar Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCalendar . getInstance () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġoff Set ChangeListener Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Bar Layout . On Offset Changed Listener Ġ{ Ġapp Bar Layout , Ġvertical Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vertical Offset Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( state Ġ!= ĠEX PAN DED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠEX PAN DED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( abs ( vertical Offset ) Ġ>= Ġ( app Bar Layout . total Scroll Range Ġ- Ġbinding . list Editor Toolbar . height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( state Ġ!= ĠCOL LAP SED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠCOL LAP SED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ? ĊĠĠĠ Ġ): ĠList Editor Fragment Layout Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠList Editor Fragment Layout Binding . inflate ( in flater , Ġparent , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . root . set BackgroundColor ( dynamic BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). invalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// bug Ġor Ġsm th Ġw ont Ġparcel ize Ġwithout Ġclass Ġloader ĊĠĠĠĠĠĠĠ Ġval Ġmedia List Meta Ġ= Ġmedia Meta Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġapi Model Entry . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . media Id Ġ= Ġmedia List Meta . media Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= Ġmedia List Meta . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . userId Ġ= Ġrequire Context (). userId () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Toolbar Theme () ĊĠĠĠĠĠĠĠ Ġbinding . show Views () ĊĠĠĠĠĠĠĠ Ġbinding . init Listener () ĊĊĠĠĠĠĠĠĠ ĠviewModel . media LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . data Ġ== Ġnull ) Ġreturn @ observe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Meta . type Ġ= Ġit . data . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . type Ġ= Ġmedia List Meta . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media List Meta . cover Image Ġ== Ġnull Ġ|| Ġmedia List Meta . banner Image Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Meta . cover Image Ġ= Ġit . data . cover Image ?. large Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Meta . banner Image Ġ= Ġit . data . banner Image Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Meta . title Ġ= Ġit . data . title ?. rom aji Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . show Meta Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Media Info ( media List Meta . media Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Layout Ġ= Ġbinding . resource Status Layout ĊĊĠĠĠĠĠĠĠ ĠviewModel . query Media ListEntry LiveData . observe ( view Lifecycle Owner , Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Status Container . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Editor Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Progress Layout . progress Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Error Layout . error Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . has Data . not () Ġ&& Ġresource . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry Ġ= Ġresource . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . has Data Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . update View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Status Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Editor Container . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Progress Layout . progress Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Error Layout . error Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Status Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Editor Container . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Progress Layout . progress Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Layout . resource Error Layout . error Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . is F avour ite Query ( media List Meta . media Id ). observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis F avour ite Ġ= Ġit . data !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . setImage Resource ( if Ġ( is F avour ite ) ĠR . drawable . ic _ fav our ite Ġelse ĠR . drawable . ic _ not _ fav our ite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . toggle Fav Media LiveData . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto g gling Ġ= Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis F avour ite Ġ= Ġ! is F avour ite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . setImage Resource ( if Ġ( is F avour ite ) ĠR . drawable . ic _ fav our ite Ġelse ĠR . drawable . ic _ not _ fav our ite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . failed _ to _ toggle , Ġicon Ġ= ĠR . drawable . ic _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . show Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . save Media ListEntry LiveData . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsaving Ġ= Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= ĠList Editor Result Meta ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . media Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . progress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Editor Result Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). post Sticky ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose List Editor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . failed _ to _ save , Ġicon Ġ= ĠR . drawable . ic _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Save Button . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Save Button . show Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . delete Media ListEntry LiveData . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeleting Ġ= Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Editor Result Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Editor Result Meta ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . media Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġapi Model Entry . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). post Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose List Editor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . failed _ to _ delete , Ġicon Ġ= ĠR . drawable . ic _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . show Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . query Media ListEntry ( media List Meta . media Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose List Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). support FragmentManager . pop Back Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList Editor Fragment Layout Binding . show Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia List Meta Ġ= Ġmedia Meta ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġshow Meta Views () ĊĠĠĠĠĠĠĠ Ġlist Delete Button . background Tint List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor State List . valueOf ( Context Compat . getColor ( require Context (), ĠR . color . red )) ĊĊĠĠĠĠĠĠĠ Ġlist Editor Score Layout . score Format Type Ġ= Ġrequire Context (). user Score Format () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( media List Meta . type Ġ== ĠMediaType . M ANG A . ordinal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Header . title Ġ= ĠgetString ( R . string . manga _ progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Progress Header . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Editor Volume Progress Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ ĠstartDate Dynamic Et . set Compound Draw ables Relative With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Drawable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcross Drawable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠendDate Dynamic Et . set Compound Draw ables Relative With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Drawable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcross Drawable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġspinner Items Ġ= Ġmutable ListOf < Dynamic Menu >() ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ watch ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġif ( media List Meta . type Ġ== ĠMediaType . M ANG A . ordinal ) ĠgetString ( R . string . reading ) Ġelse ĠgetString ( R . string . watch ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ planning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġif ( media List Meta . type Ġ== ĠMediaType . M ANG A . ordinal ) ĠgetString ( R . string . plan _ to _ read ) Ġelse ĠgetString ( R . string . plan _ to _ watch ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ completed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠgetString ( R . string . completed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ re watch ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġif ( media List Meta . type Ġ== ĠMediaType . M ANG A . ordinal ) ĠgetString ( R . string . r ere ading ) Ġelse ĠgetString ( R . string . re watch ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ paused _ filled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠgetString ( R . string . paused ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġspinner Items . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ d ropped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠgetString ( R . string . d ropped ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĊĠĠĠĠĠĠĠ Ġstatus Spinner . adapter Ġ= ĠDynamic Spinner Image Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . ads _ layout _ spinner _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ads _ spinner _ item _ icon , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ads _ spinner _ item _ text , Ġspinner Items ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList Editor Fragment Layout Binding . show Meta Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia List Meta Ġ= Ġmedia Meta ?: return ĊĠĠĠĠĠĠĠ Ġget Base Toolbar (). title Ġ= Ġmedia List Meta . title ĊĊĠĠĠĠĠĠĠ Ġmedia Title Tv . text Ġ= Ġmedia List Meta . title ĊĠĠĠĠĠĠĠ Ġlist Editor Cover Image . setImage URI ( media List Meta . cover Image ) ĊĠĠĠĠĠĠĠ Ġlist Editor Banner Image . setImage URI ( media List Meta . banner Image ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Base Toolbar (): ĠToolbar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . list Editor Toolbar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun ĠList Editor Fragment Layout Binding . init Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġapp bar Layout . add On Offset Changed Listener ( off Set ChangeListener ) ĊĊĠĠĠĠĠĠĠ Ġlist Save Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Delete Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Fav Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Fav () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstartDate Dynamic Et . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . raw X Ġ>= Ġ( startDate Dynamic Et . right Ġ- ĠstartDate Dynamic Et . compound Draw ables Relative [ 2 ]. bounds . width ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Dynamic Et . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . startDate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠendDate Dynamic Et . setOn Touch Listener Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . raw X Ġ>= Ġ( startDate Dynamic Et . right Ġ- ĠstartDate Dynamic Et . compound Draw ables Relative [ 2 ]. bounds . width ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Dynamic Et . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . endDate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ ĠstartDate Dynamic Et . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar View Bottom Sheet Dialog (). show ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ= ĠCalendar View Bottom Sheet Dialog . Selection Mode . DATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . startDate ?. year Ġ?: Ġcalendar . get ( Calendar . YEAR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . startDate ?. month Ġ?: Ġcalendar . get ( Calendar . MONTH ) Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . startDate ?. day Ġ?: Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġ{ ĠstartDate , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . startDate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( api Model Entry . startDate Ġ?: ĠDate Model ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . year Ġ= ĠstartDate . year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . month Ġ= ĠstartDate . month . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . day Ġ= ĠstartDate . day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Media Progress Date () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠendDate Dynamic Et . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar View Bottom Sheet Dialog (). show ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ= ĠCalendar View Bottom Sheet Dialog . Selection Mode . DATE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ġ= ĠLocalDate . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . endDate ?. year Ġ?: Ġcalendar . get ( Calendar . YEAR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . endDate ?. month Ġ?: Ġcalendar . get ( Calendar . MONTH ) Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . endDate ?. day Ġ?: Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġ{ ĠstartDate , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . endDate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( api Model Entry . endDate Ġ?: ĠDate Model ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . year Ġ= ĠstartDate . year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . month Ġ= ĠstartDate . month . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . day Ġ= ĠstartDate . day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Media Progress Date () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstatus Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . status Ġ= ĠMedia List Status Editor . values ()[ position ]. status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Editor Episode Layout . text ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . progress Ġ= Ġit . toString (). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Editor Volume Progress Layout . text ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . progress Volumes Ġ= Ġit . toString (). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Editor Score Layout . on Score ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . score Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate ToggleButton . set Toggle Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . private Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate ToggleButton . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . make _ private ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotes Et . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . notes Ġ= Ġtext . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtotal Rew atches Layout . text ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . repeat Ġ= Ġit . toString (). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadvance Score View . advance Score Observer Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . advanced Sc oring ?. let Ġ{ Ġadvance Sc oring Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Score Ġ= Ġadvance Sc oring . map Ġ{ Ġit . score Ġ}. sum () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. div ( advance Sc oring . count Ġ{ Ġit . score Ġ!= Ġ 0 . 0 Ġ}. take If Ġ{ Ġit Ġ!= Ġ 0 Ġ} Ġ?: Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Editor Score Layout . media List Score Ġ= Ġ( mean Score Ġ* Ġ 1 0 ). round ToInt () Ġ/ Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList Editor Fragment Layout Binding . update View () Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Model Entry . status ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Spinner . setSelection ( Media List Status Editor . from ( it ). ordinal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Editor Score Layout . media List Score Ġ= Ġapi Model Entry . score Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate ToggleButton . checked Ġ= Ġapi Model Entry . private Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġlist Editor Episode Layout . set Counter ( api Model Entry . progress ?. toDouble ()) ĊĠĠĠĠĠĠĠ Ġtotal Rew atches Layout . set Counter ( api Model Entry . repeat ?. toDouble ()) ĊĠĠĠĠĠĠĠ Ġlist Editor Volume Progress Layout . set Counter ( api Model Entry . progress Volumes ?. toDouble ()) ĊĠĠĠĠĠĠĠ Ġnotes Et . setText ( api Model Entry . notes ) ĊĊĠĠĠĠĠĠĠ Ġupdate Media Progress Date () ĊĊĠĠĠĠĠĠĠ ĠgetUser Pref Model ( require Context ()). media List Option ?. let Ġ{ Ġoption Setting Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option Setting . score Format Ġ== ĠScore Format . POINT _ 1 0 _ DECIMAL . ordinal Ġ|| Ġoption Setting . score Format Ġ== ĠScore Format . POINT _ 1 0 0 . ordinal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . type Ġ== ĠMediaType . AN IME . ordinal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Setting . anime List ?. let Ġ{ Ġan ime List Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anime List Option . advanced Sc oring Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . advanced Sc oring Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . advanced Sc oring Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Setting . anime List ?. advanced Sc oring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvance Score View . set Advance Score ( api Model Entry . advanced Sc oring !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Score Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Setting . anime List ?. let Ġ{ Ġm anga List Options Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( manga List Options . advanced Sc oring Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . advanced Sc oring Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Model Entry . advanced Sc oring Ġ= Ġm anga List Options . advanced Sc oring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvance Score View . set Advance Score ( api Model Entry . advanced Sc oring !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Score Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvanced Score Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate Media Progress Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . startDate ?. year Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . startDate Dynamic Et . setText ( this . api Model Entry . startDate !!. let Ġ{ Ġ"${ it . year }-${ it . month }-${ it . day }" Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( api Model Entry . endDate ?. year Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . endDate Dynamic Et . setText ( this . api Model Entry . endDate !!. let Ġ{ Ġ"${ it . year }-${ it . month }-${ it . day }" Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Fav () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( to g gling ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġmedia List Meta Ġ= Ġmedia Meta ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel . toggle Media F avour ite ( Toggle F avour ite Field (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( media List Meta . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . AN IME . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . anime Id Ġ= Ġmedia List Meta . media Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . M ANG A . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . manga Id Ġ= Ġmedia List Meta . media Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( de leting Ġ|| Ġ! api Model Entry . has Data Ġ|| Ġmedia Meta Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġapi Model Entry . list Id . take If Ġ{ Ġit Ġ!= Ġ- 1 Ġ} ?. let Ġ{ Ġlist Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Confirmation Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . do _ you _ really _ want _ to _ delete _ the _ entry _ s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Meta !!. title Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Media ListEntry ( list Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( saving ) Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel . save Media ListEntry ( api Model Entry ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġupdate Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . update Toolbar () ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠEX PAN DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! api Model Entry . is UserList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is F avour ite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Fav Button . setImage Resource ( R . drawable . ic _ fav our ite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget Base Toolbar (). inflate Menu ( R . menu . list _ editor _ menu ) ĊĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġget Base Toolbar (). menu ĊĠĠĠĠĠĠĠ Ġif Ġ(! api Model Entry . is UserList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . list Delete Menu ). isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list Delete Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is F avour ite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . ic _ fav our ite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . list Fav Menu ). icon Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Toolbar Menu Selected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list Save Menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . please _ wait , Ġicon Ġ= ĠR . drawable . ic _ hour _ glass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list Delete Menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . please _ wait , Ġicon Ġ= ĠR . drawable . ic _ hour _ glass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . list Fav Menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Toast ( R . string . please _ wait , Ġicon Ġ= ĠR . drawable . ic _ hour _ glass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Fav () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose List Editor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Toolbar Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Col lap sing Toolbar . set Collapsed Title TextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Theme . getInstance (). get (). text Primary Color ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Col lap sing Toolbar . set BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Theme . getInstance (). get (). backgroundColor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Col lap sing Toolbar . setStatus Bar S cri m Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Theme . getInstance (). get (). backgroundColor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Col lap sing Toolbar . setContent S cri m Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Theme . getInstance (). get (). backgroundColor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Toolbar . color Type Ġ= ĠTheme . Color Type . BACKGROUND ĊĠĠĠĠĠĠĠ Ġbinding . list Editor Toolbar . textColor Type Ġ= ĠTheme . Color Type . TEXT _ PRIMARY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . app bar Layout . remove On Offset Changed Listener ( off Set ChangeListener ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ