package Ġcom . z ulu . android Ċ Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . Json Reader Ċ import Ġcom . squareup . mos hi . Json Writer Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġjava . lang . reflect . Type Ċ Ċ class ĠInternal State Json Adapter ( ĊĠĠĠ Ġm oshi : ĠM oshi Ċ ) Ġ: ĠJson Adapter < Internal State >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġoptions : ĠJson Reader . Options Ġ= ĊĠĠĠĠĠĠĠ ĠJson Reader . Options . of (" up Button Enabled ", Ġ" title ", Ġ" subtitle ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable Boolean Adapter : ĠJson Adapter < Boolean ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( Boolean :: class . java ObjectType , Ġempty Set (), Ġ" up Button Enabled ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable String Adapter : ĠJson Adapter < String ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( String :: class . java , Ġempty Set (), Ġ" title ") ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠInternal State ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġup Button Enabled : ĠBoolean ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġup Button Enabled Set : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtitle : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtitle Set : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġsubtitle : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġsubtitle Set : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreader . begin Object () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( reader . select Name ( options )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Button Enabled Ġ= Ġnullable Boolean Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Button Enabled Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġnullable String Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġnullable String Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreader . end Object () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInternal State () ĊĠĠĠĠĠĠĠ Ġresult . up Button Enabled Ġ= Ġif Ġ( up Button Enabled Set ) Ġup Button Enabled Ġelse Ġresult . up Button Enabled ĊĠĠĠĠĠĠĠ Ġresult . title Ġ= Ġif Ġ( title Set ) Ġtitle Ġelse Ġresult . title ĊĠĠĠĠĠĠĠ Ġresult . subtitle Ġ= Ġif Ġ( subtitle Set ) Ġsubtitle Ġelse Ġresult . subtitle ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠInternal State ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" value Ġwas Ġnull ! ĠWrap Ġin Ġ. null Safe () Ġto Ġwrite Ġnullable Ġvalues .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . begin Object () ĊĊĠĠĠĠĠĠĠ Ġvalue . up Button Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . name (" up Button Enabled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Boolean Adapter . toJson ( writer , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvalue . title ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . name (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable String Adapter . toJson ( writer , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvalue . subtitle ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . name (" subtitle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable String Adapter . toJson ( writer , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Internal State )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory Ġ: ĠJson Adapter . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations : ĠMutable Set < out ĠAnnotation >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm oshi : ĠM oshi ĊĠĠĠĠĠĠĠ Ġ): ĠJson Adapter < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠInternal State :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInternal State Json Adapter ( mos hi ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }