package Ġcom . ud acity . load app . view . main Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . ud acity . load app . R Ċ import Ġcom . ud acity . load app . util . Download Requests Store Ċ import Ġkotlinx . coroutines . launch ĊĊ Ċ class ĠMain ViewModel ( private Ġval Ġapp : ĠApplication ) Ġ: ĠAndroid ViewModel ( app ) Ġ{ ĊĊĠĠĠ Ġvar Ġradio Button Id Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġdownload Ids Ġ= ĠDownload Requests Store ( app ) ĊĊĠĠĠ Ġfun Ġdownload (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdownload Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġurl : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString ĊĠĠĠĠĠĠĠ Ġwhen Ġ( radioButton Id . value ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . radioButton G lide Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġapp . getString ( R . string . url _ glide ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" G lide Ġsource Ġcode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . radioButton Load App Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġapp . getString ( R . string . url _ load app ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Ud acity Ġproject Ġ 3 Ġsource Ġcode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . radioButton Ret rofit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġapp . getString ( R . string . url _ ret rofit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Ret rofit Ġsource Ġcode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . i (" Main ViewModel ", Ġ" download : Ġtitle Ġ= Ġ'$ title ', ĠURL Ġ= Ġ'$ url '") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue Download ( url , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast No Download Selected () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload Started ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenqueue Download ( url : ĠString , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Manager . Request ( Uri . parse ( url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Requires Ch arging ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Allowed Over Meter ed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Allowed Over Roaming ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdownload Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp . getSystem Service ( AppCompatActivity . DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager ĊĊĠĠĠĠĠĠĠ Ġval Ġdownload Id Ġ= Ġdownload Manager . enqueue ( request ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Ids . add ( download Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoast No Download Selected () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( app , Ġapp . getString ( R . string . no _ download _ selected ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } Ċ