package Ġcom . gb ros . tab sl ite Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġcom . gb ros . tab sl ite . adapters . Browse Tabs Adapter Ċ import Ġcom . gb ros . tab sl ite . data . Int Tab Basic Ċ import Ġcom . gb ros . tab sl ite . databinding . Fragment Browse Tabs Binding Ċ import Ġcom . gb ros . tab sl ite . utilities .* Ċ import Ġcom . gb ros . tab sl ite . utilities . Injector Utils Ċ import Ġcom . gb ros . tab sl ite . utilities . PRE FS _ NAME Ċ import Ġcom . gb ros . tab sl ite . view models . Favorite Tabs List ViewModel Ċ Ċ private Ġconst Ġval ĠLOG _ NAME Ġ= Ġ" tab sl ite . Favorite Tabs Fr " Ċ Ċ class ĠF avorite Tabs Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Browse Tabs Binding ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠF avorite Tabs List ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠInject or Utils . provide Favorite Tab ViewModel Factory ( require Context ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Browse Tabs Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠB rowse Tabs Adapter () ĊĠĠĠĠĠĠĠ Ġbinding . favorite Tabs List . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġbinding . find New S ongs . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠHome Activity ). focus Search () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġsubscribe Ui ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Ui ( binding : ĠFragment Browse Tabs Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġbinding . favorite Tabs List . adapter Ġas ĠB rowse Tabs Adapter ĊĠĠĠĠĠĠĠ Ġfun Ġupdate Sorting ( position : ĠInt , Ġlist : ĠList < Int Tab Basic >) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Result Ġ= Ġwhen ( position ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġlist . sorted By Descending Ġ{ Ġt Ġ-> Ġt . favorite Time Ġ} Ġ Ġ// todo : Ġreplace Ġwith Ġdate Ġof Ġadding Ġto Ġfavor ites ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġlist . sorted By Ġ{ Ġt Ġ-> Ġt . song Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġlist . sorted By Ġ{ Ġt Ġ-> Ġt . artist Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġlist . sorted By Descending Ġ{ Ġt Ġ-> Ġt . votes Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( sorted Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ ĠviewModel . favorite Tabs . observe ( view Lifecycle Owner , Ġ{ Ġtabs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . has History Ġ= Ġ! tabs . isNull OrEmpty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application ?. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstored Pref Ġ= Ġget SharedPreferences ( PRE FS _ NAME , ĠContext . MODE _ PRIVATE ). getInt ( FA V OR ITE _ TAB S _ SORT ING _ PRE F _ NAME , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sortBy . setSelection ( stored Pref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sorting ( stored Pref , Ġtabs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sortBy . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġmethod Ġto Ġbe Ġinvoked Ġwhen Ġthe Ġselection Ġdis appe ars Ġfrom Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġview . ĠThe Ġselection Ġcan Ġdis appear Ġfor Ġinstance Ġwhen Ġtouch Ġis Ġactivated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġor Ġwhen Ġthe Ġadapter Ġbecomes Ġempty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe ĠAdapter View Ġthat Ġnow Ġcontains Ġno Ġselected Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġmethod Ġto Ġbe Ġinvoked Ġwhen Ġan Ġitem Ġin Ġthis Ġview Ġhas Ġbeen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġselected . ĠThis Ġcallback Ġis Ġinvoked Ġonly Ġwhen Ġthe Ġnewly Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġposition Ġis Ġdifferent Ġfrom Ġthe Ġpreviously Ġselected Ġposition Ġor Ġif ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthere Ġwas Ġno Ġselected Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠImplement ers Ġcan Ġcall ĠgetItem At Position ( position ) Ġif Ġthey Ġneed Ġto Ġaccess Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġdata Ġassociated Ġwith Ġthe Ġselected Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe ĠAdapter View Ġwhere Ġthe Ġselection Ġhappened ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview ĠThe Ġview Ġwithin Ġthe ĠAdapter View Ġthat Ġwas Ġclicked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġview Ġin Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġid ĠThe Ġrow Ġid Ġof Ġthe Ġitem Ġthat Ġis Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sorting ( position , Ġadapter . current List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġour Ġspot Ġfor Ġnext Ġrun ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application ?. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget SharedPreferences ( PRE FS _ NAME , ĠContext . MODE _ PRIVATE ). edit (). put Int ( FA V OR ITE _ TAB S _ SORT ING _ PRE F _ NAME , Ġposition ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( LOG _ NAME , Ġ" St oring ĠF avorite Tabs ĠSort By Ġpreference Ġ($ position )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLog . w ( LOG _ NAME , Ġ" Could Ġnot Ġstore ĠF avorite Tabs ĠSort By Ġpreference Ġ($ position ). ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdefault Ġaction Ġif Ġcontext Ġis Ġsomehow Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( tabs . sorted By Descending Ġ{ Ġt Ġ-> Ġt . favorite Time Ġ}) Ġ Ġ// Ġneeded Ġbecause Ġ 0 Ġis Ġthe Ġdefault Ġselection , Ġso Ġthe Ġsort Ġmight Ġnot Ġbe Ġcalled Ġthe Ġfirst Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( LOG _ NAME , Ġ" Submitted Ġnew Ġlist Ġof Ġsize Ġ${ tabs . size }. Ġ ĠCurrent Ġadapter Ġlist Ġsize Ġis Ġnow Ġ${ adapter . current List . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ