package Ġcom . chr yn an . video . ui . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . chr yn an . video . R Ċ import Ġcom . chr yn an . video . common . model . api . Video Info Ċ import Ġcom . chr yn an . video . common . model . core . ID Ċ import Ġcom . chr yn an . video . common . model . core . Uri String Ċ import Ġcom . chr yn an . logger . Logger Ċ import Ġcom . chr yn an . video . presentation . navigator . Channel Details Screen Ċ import Ġcom . chr yn an . video . presentation . state . Channel Details Change Ċ import Ġcom . chr yn an . video . presentation . state . Channel Details Intent Ċ import Ġcom . chr yn an . video . presentation . state . Channel Details State Ċ import Ġcom . chr yn an . video . presentation . presenter . Channel Details Presenter Ċ import Ġcom . chr yn an . video . presentation . view model .* Ċ import Ġcom . chr yn an . video . ui . adapter . channel . Channel Header Adapter Ċ import Ġcom . chr yn an . video . ui . adapter . factory . Channel Adapter Factory Ċ import Ġcom . chr yn an . video . ui . adapter . factory . bind Adapter Factory Ċ import Ġcom . chr yn an . video . ui . adapter . factory . calculate And Dispatch Diff Ċ import Ġcom . chr yn an . video . ui . adapter . video . Video Recommendation Adapter Ċ import Ġkotlinx . android . synt hetic . main . fragment _ channel .* Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠChannel Fragment Ġ: ĊĠĠĠ ĠBase Fragment < Channel Details Intent , ĠChannel Details State , ĠChannel Details Change , ĠChannel Details Screen >(), ĊĠĠĠ ĠVideo Recommendation Adapter . Video Recommendation ItemSelected Listener , ĊĠĠĠ ĠChannel Header Adapter . Subscribe Button Selected Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PROVIDER _ URI Ġ= Ġ" key Provider Uri " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ CHANNEL _ ID Ġ= Ġ" key Channel Id " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( provider Uri : ĠUri String , Ġchannel Id : ĠID ) Ġ= ĠChannel Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ PROVIDER _ URI , Ġprovider Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ CHANNEL _ ID , Ġchannel Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġpresenter : ĠChannel Details Presenter ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġadapter Factory : ĠChannel Adapter Factory ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ= Ġlayout Inflater . inflate ( R . layout . fragment _ channel , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġchannel RecyclerView ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Adapter Factory ( adapter Factory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Info Ġ= ĠVideo Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Image Uri Ġ= Ġ" https :// external - content . duck duck go . com / iu /? u = https % 3 A % 2 F % 2 Ft se 3 . mm . bing . net % 2 F th % 3 F id % 3 DO IP . U CU c O cot _ h 5 5 wn ZN ad I zs AH a Dr % 2 6 pid % 3 D Api & f = 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Header ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" ch Ry NaN ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber Count Ġ= Ġ" 1 , 0 0 0 , 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Video View Count Ġ= Ġ" 5 , 0 0 0 , 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Uri Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Provider ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider ServiceName Ġ= Ġ" ch Ry NaN ĠCode s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Uri Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Item One Ġ= ĠChannel Video List ViewModel . Channel Video ListItem ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Info Ġ= Ġvideo Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Title ĠOne ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Description ĠOne " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Item Two Ġ= ĠChannel Video List ViewModel . Channel Video ListItem ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Info Ġ= Ġvideo Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Title ĠTwo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Description ĠTwo " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Video List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Name Ġ= Ġ" List ĠName ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= ĠlistOf ( list Item One , Ġlist Item Two ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSection Header ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" About " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Info ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Ġ= Ġ" A Ġ** Channel ** Ġ* you * Ġmight Ġlike .\ n \ n Ġ![ Image ]( https :// external - content . duck duck go . com / iu /? u = https % 3 A % 2 F % 2 Ft se 3 . mm . bing . net % 2 F th % 3 F id % 3 DO IP . U CU c O cot _ h 5 5 wn ZN ad I zs AH a Dr % 2 6 pid % 3 D Api & f = 1 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= Ġ" Today ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Ġ= Ġ" Today ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Image Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Image Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sub scribed Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Uri Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Url Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. calculate And Dispatch Diff ( adapter Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĠLogger . log Error ( throwable Ġ= Ġit , Ġmessage Ġ= Ġ" Error Ġloading ĠChannel ĠItems .") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( this @ Channel Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġintent s (): ĠFlow < Channel Details Intent > Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( state : ĠChannel Details State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . render ( state ) ĊĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgo To ( screen : ĠChannel Details Screen ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Recommendation ItemSelected ( item : ĠVideo Recommendation ViewModel ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Recommendation Options Selected ( item : ĠVideo Recommendation ViewModel ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Subscribe Button Selected ( provider Uri : ĠUri String , Ġchannel Id : ĠID ) Ġ{ ĊĊĠĠĠ Ġ} Ċ }