package Ġorg . fn ives . tik tok downloader . ui . main . queue Ċ Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġorg . fn ives . tik tok downloader . R Ċ import Ġorg . fn ives . tik tok downloader . data . model . Video State Ċ import Ġorg . fn ives . tik tok downloader . di . provide ViewModels Ċ Ċ class ĠQueue Fragment Ġ: ĠFragment ( R . layout . fragment _ queue ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġprovide ViewModels < Queue ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġre cycler Ġ= Ġview . findViewById < RecyclerView >( R . id . recycler ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Setup ( recycler ) ĊĠĠĠĠĠĠĠ Ġnavigation Setup () ĊĊĠĠĠĠĠĠĠ Ġval Ġsave Url C ta Ġ= Ġview . findViewById < Button >( R . id . save _ cta ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġview . findViewById < EditText >( R . id . download _ url _ input ) ĊĠĠĠĠĠĠĠ Ġinput . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Url C ta . isEnabled Ġ= Ġit ?. isNotBlank () Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsave Url C ta . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Save Clicked ( input . text ?. toString (). or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . setText ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigation Setup () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . navigation Event . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġwhen Ġ( val Ġdata Ġ= Ġit . item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠQueue ViewModel . Navigation Event . Open Browser Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Browser Intent ( data . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠQueue ViewModel . Navigation Event . Open Gallery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Gallery Intent ( data . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġreturn @ observe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( activity NotFoundException : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġactivity ?. findViewById < Coordinator Layout >( R . id . sn ack _ bar _ anchor ) Ġ?: Ġreturn @ observe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( anchor , ĠR . string . could _ not _ open , ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre cyclerView Setup ( recycler : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠQueue Item Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Clicked Ġ= ĠviewModel :: on Item Clicked , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Clicked Ġ= ĠviewModel :: on Url Clicked ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġre cycler . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠVideo State Item Touch Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhich Item Ġ= Ġ{ Ġadapter . current List . get OrNull ( it . binding Adapter Position ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Element Ġ= ĠviewModel :: on Element Deleted , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon UI Move Element Ġ= Ġadapter :: swap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Move Element Ġ= ĠviewModel :: on Element Moved ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtouch Helper Ġ= ĠItem Touch Helper ( callback ) ĊĠĠĠĠĠĠĠ Ġtouch Helper . attach To RecyclerView ( recycler ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . downloads . observe ( view Lifecycle Owner ) Ġ{ Ġvideo States Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . drag Enabled Ġ= Ġvideo States . none Ġ{ Ġit Ġis ĠVideo State . In Process Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( video States , ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex To Scroll To Ġ= Ġvideo States . indexOf First Ġ{ Ġit Ġis ĠVideo State . In Process Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit Ġ!= Ġ- 1 Ġ} Ġ?: Ġreturn @ Runnable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . smooth Scroll To Position ( index To Scroll To ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠQueue Fragment Ġ= ĠQueue Fragment () ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Browser Intent ( url : ĠString ): ĠIntent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( url )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Gallery Intent ( uri : ĠString ): ĠIntent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW , Ġuri . to Uri ()) ĊĠĠĠ Ġ} Ċ }