package Ġcom . example . news App . ui . fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . news App . R Ċ import Ġcom . example . news App . adapters . News Adapter Ċ import Ġcom . example . news App . models . Article Ċ import Ġcom . example . news App . ui . News Activity Ċ import Ġcom . example . news App . ui . News ViewModel Ċ import Ġcom . example . news App . util . Resource Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ breaking _ news .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search _ news .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search _ news . pagination ProgressBar Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠSearch News Fragment Ġ: ĠFragment ( R . layout . fragment _ search _ news ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠNews ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnews Adapter : ĠNews Adapter ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= Ġ" breaking Ġnews " ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġ( activity Ġas ĠNews Activity ). viewModel ĊĊĠĠĠĠĠĠĠ Ġnews Adapter . setOn ItemClickListener { Ġarticle : ĠArticle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable (" article ", Ġarticle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ search News Fragment _ to _ article Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Callback Ġ= object : ĠItem Touch Helper . Simple Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . RIGHT Ġor ĠItem Touch Helper . LEFT ĊĠĠĠĠĠĠĠ Ġ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠviewHolder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle Ġ= Ġnews Adapter . differ . current List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Article ( article ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view Ġ, Ġ" Successfully Ġdeleted Ġarticle ", ĠSn ackbar . LENGTH _ LONG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action (" UN DO "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Article ( article ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( item Touch Helper Callback ). attach To RecyclerView ( rv Search News ) ĊĊĊĠĠĠĠĠĠĠ Ġvar Ġjob : ĠJob ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġet Search . add TextChanged Listener Ġ{ Ġeditable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob = ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 2 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editable . toString (). isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search News ( editable . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . search News . observe ( view Lifecycle Owner Ġ, ĠObserver Ġ{ Ġsearch Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( search Response ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ProgressBar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . data ?. let Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Adapter . differ . submit List ( response . articles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ProgressBar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . message ?. let Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG Ġ, Ġ" An Ġerror Ġoccured Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ProgressBar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup RecyclerView (){ ĊĠĠĠĠĠĠĠ Ġnews Adapter = ĠNews Adapter () ĊĠĠĠĠĠĠĠ Ġrv Search News . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnews Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide ProgressBar (){ ĊĠĠĠĠĠĠĠ Ġpagination ProgressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ProgressBar (){ ĊĠĠĠĠĠĠĠ Ġpagination ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} Ċ }