/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠThe Ġsky ĠAuthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . sky . android . news . ui . main . story Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . sky . android . news . data . model . Base ViewType Ċ import Ġcom . sky . android . news . data . model . Node Item Model Ċ import Ġcom . sky . android . news . data . model . Top Story ListModel Ċ import Ġcom . sky . android . news . data . source . I Story Source Ċ import Ġcom . sky . android . news . ext . do Failure Ċ import Ġcom . sky . android . news . ext . do Success Ċ import Ġcom . sky . android . news . ui . base . News ViewModel Ċ import Ġcom . sky . android . news . ui . helper . Page Helper Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . on Completion Ċ import Ġkotlinx . coroutines . flow . onStart Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsky Ġon Ġ 2 0 2 1 - 0 1 - 2 5 . Ċ Ġ*/ Ċ @ H ilt ViewModel Ċ class ĠStory List ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsource : ĠI Story Source Ċ ) Ġ: ĠNews ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Loading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġloading : ĠLive Data < Boolean > Ġ= Ġm Loading ĊĊĠĠĠ Ġprivate Ġval Ġm Failure Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġfailure : ĠLive Data < String > Ġ= Ġm Failure ĊĊĠĠĠ Ġprivate Ġval Ġm Story List Ġ= ĠMutable LiveData < List < Base ViewType >>() ĊĠĠĠ Ġval Ġstory List : ĠLive Data < List < Base ViewType >> Ġ= Ġm Story List ĊĊĠĠĠ Ġprivate Ġval Ġm Page Helper Ġ= ĠPage Helper < Base ViewType >() ĊĠĠĠ Ġprivate Ġvar Ġm Date Ġ= Ġ"" ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Page Helper . not Fixed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Last St ories () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlaunch On UI Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . get Latest St ories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onStart Ġ{ Ġm Loading . value Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ Ġm Loading . value Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Failure . value Ġ= Ġ" åĬłè½½ åĪĹè¡¨ ä¿¡æģ¯ å¤±è´¥ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. do Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¿ĿåŃĺ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Date Ġ= Ġit . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Helper . setData ( listOf ( Top Story ListModel ( it . top St ories ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Helper . append Data ( listOf ( Node Item Model ( it . date , Ġ" ä»Ĭ æĹ¥ çĥŃ éĹ» "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Helper . append Data ( it . stories ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Story List . value Ġ= Ġm Page Helper . getData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload More St ories () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlaunch On UI Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . get Latest St ories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onStart Ġ{ Ġm Loading . value Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ Ġm Loading . value Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Failure . value Ġ= Ġ" åĬłè½½ åĪĹè¡¨ ä¿¡æģ¯ å¤±è´¥ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. do Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¿ĿåŃĺ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Date Ġ= Ġit . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿½åĬł æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Helper . append Data ( listOf ( Node Item Model ( it . date ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Helper . append Data ( it . stories ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Story List . value Ġ= Ġm Page Helper . getData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }