package Ġcom . k iss . www . k weather Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . k iss . www . k weather . model . news Model . News Ċ import Ġkotlinx . android . synt hetic . main . fragment _ news .* Ċ import Ġjava . util .* Ċ import Ġkotlin . random . Random ĊĊ Ċ class ĠNews Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠNews Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠNews Fragment ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ news , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlog Tag : ĠString ? Ġ= Ġthis . java Class . simple Name ĊĠĠĠ Ġprivate Ġvar Ġnews : ĠList < News > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġtimer : ĠTimer Ġ= ĠTimer () ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( News Fragment ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . news Update (). observe ( this , ĠObserver Ġ{ Ġnews List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( log Tag , Ġ" News ĠUpdate : ĠSetting ĠNews ĠFeed ĠUI ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Ġ= Ġnews List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread { set News Feed ( news List )} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠLog . d ( log Tag , Ġ" On Pause () Ġ-> ĠCancel ing ĠNews ĠFeed ĠTimer ") ĊĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate News UI () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Item ( news Item TextView : ĠTextView ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnews Item Number Ġ= ĠInt Range . random ( 0 , Ġnews . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . setOnClickListener Ġ{ Ġopen Website ( Uri . parse ( news [ news Item Number ]. link )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . text Ġ= Ġformat ( news [ news Item Number ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Item TextView . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! news . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠInt Range . random ( 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( random ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ update Item ( news Item One )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ update Item ( news Item Two )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ update Item ( news Item Three )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ update Item ( news Item Four )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġ{ update Item ( news Item Five )} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset News Feed ( news List : ĠList < News >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitles List : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġlinks List : ĠArrayList < Uri > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 5 , Ġaction Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Num er Ġ= ĠInt Range . random ( 0 , Ġnews List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitles List . add ( format ( news List [ random Num er ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinks List . add ( Uri . parse ( news List [ random Num er ]. link )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġnews Item One . text Ġ= Ġtitles List [ 0 ] ĊĠĠĠĠĠĠĠ Ġnews Item One . setOnClickListener Ġ{ Ġopen Website ( links List [ 0 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnews Item Two . text Ġ= Ġtitles List [ 1 ] ĊĠĠĠĠĠĠĠ Ġnews Item Two . setOnClickListener Ġ{ Ġopen Website ( links List [ 1 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnews Item Three . text Ġ= Ġtitles List [ 2 ] ĊĠĠĠĠĠĠĠ Ġnews Item Three . setOnClickListener Ġ{ Ġopen Website ( links List [ 2 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnews Item Four . text Ġ= Ġtitles List [ 3 ] ĊĠĠĠĠĠĠĠ Ġnews Item Four . setOnClickListener Ġ{ Ġopen Website ( links List [ 3 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnews Item Five . text Ġ= Ġtitles List [ 4 ] ĊĠĠĠĠĠĠĠ Ġnews Item Five . setOnClickListener Ġ{ Ġopen Website ( links List [ 4 ]) Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Website ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġuri ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat ( news Item : News ): String { ĊĠĠĠĠĠĠĠ Ġreturn ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( news Item . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( news Item . author ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠInt Range . Companion . random ( start : ĠInt , Ġend : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn ĠRandom . nextInt ( start , Ġend ) Ċ } Ċ