package Ġcom . ches ire . nek ome . app . search Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . ches ire . l ifec yk le log . Log L ifec yk le Ċ import Ġcom . ches ire . nek ome . app . search . databinding . Fragment Search Binding Ċ import Ġcom . ches ire . nek ome . core . extensions . hide Ċ import Ġcom . ches ire . nek ome . core . extensions . hide System Keyboard Ċ import Ġcom . ches ire . nek ome . core . extensions . show Ċ import Ġcom . ches ire . nek ome . core . flags . Async State Ċ import Ġcom . ches ire . nek ome . core . flags . Series Type Ċ import Ġcom . ches ire . nek ome . core . view model . ViewModel Factory Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġdagger . android . support . D agger Fragment Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠAllows Ġa Ġuser Ġto Ġperform Ġa Ġsearch Ġto Ġfind Ġnew Ġseries Ġto Ġfollow . Ċ Ġ*/ Ċ @ Log L ifec yk le Ċ class ĠSearch Fragment Ġ: ĠD agger Fragment ( R . layout . fragment _ search ) Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Search ViewModel > Ġ{ ĠviewModel Factory Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġsearch Preferences : ĠSearch Preferences ĊĠĠĠ Ġprivate Ġval Ġseries Type : ĠSeries Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( binding . search Chip Group . checked Chip Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search Chip An ime Ġ-> ĠSeries Type . An ime ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search Chip M anga Ġ-> ĠSeries Type . M anga ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSeries Type . Unknown ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Search Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġrequire NotNull (_ binding ) Ġ{ Ġ" Binding Ġnot Ġset " Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Search Binding . bind ( view ) ĊĊĠĠĠĠĠĠĠ Ġset Initial Series Type () ĊĠĠĠĠĠĠĠ Ġbinding . search Confirm Button . setOnClickListener Ġ{ Ġsubmit Search () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . search Text . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Text Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . search Chip Group . setOn Checked ChangeListener Ġ{ Ġ_, Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġwhen Ġ( checked Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search Chip An ime Ġ-> ĠSeries Type . An ime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search Chip M anga Ġ-> ĠSeries Type . M anga ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSeries Type . Unknown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Preferences . last Search Type Ġ= Ġtype . id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobserve SearchResults () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Initial Series Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchip Id Ġ= Ġwhen Ġ( Series Type . for Id ( search Preferences . last Search Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSeries Type . M anga Ġ-> ĠR . id . search Chip M anga ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . id . search Chip An ime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . search Chip Group . check ( chip Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubmit Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. hide System Keyboard () ĊĠĠĠĠĠĠĠ ĠviewModel . execute Search ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Data ( binding . search Text . text . toString (), Ġseries Type ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve SearchResults () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . search Result . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAsync State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Spinner () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Fragment Directions . to Results Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAsync State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Spinner () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Search Error ( result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAsync State . Loading Ġ-> Ġshow Spinner () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Search Error ( error : ĠSearch Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Error . Empty Title Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Text Layout . error Ġ= ĠgetString ( R . string . search _ error _ no _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Error . Generic Error Ġ-> ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . error _ generic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Error . No Type Selected Ġ-> ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . search _ error _ no _ type _ selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Error . No Series Found Ġ-> ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . search _ error _ no _ series _ found , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Spinner () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Showing ĠSp inner ") ĊĠĠĠĠĠĠĠ Ġbinding . search Confirm Button . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġbinding . search Confirm Button . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . search Progress . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Spinner () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" H iding ĠSp inner ") ĊĠĠĠĠĠĠĠ Ġbinding . search Confirm Button . text Ġ= ĠgetString ( R . string . search _ search ) ĊĠĠĠĠĠĠĠ Ġbinding . search Confirm Button . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . search Progress . hide ( invisible Ġ= Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ