package Ġcom . sh ay an . podcast app . ui . activities Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . text . format . Date Utils Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . text . Html Compat Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . sh ay an . podcast app . R Ċ import Ġcom . sh ay an . podcast app . network . models . Episode Model Ċ import Ġkotlinx . android . synt hetic . main . activity _ episode .* Ċ Ċ class ĠEp isode Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġepisode Ġ: ĠEp isode Model ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ episode ) ĊĠĠĠĠĠĠĠ Ġepisode Ġ= Ġintent . extras !!. get Serializable (" episode ") Ġas ĠEp isode Model ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit (){ ĊĠĠĠĠĠĠĠ Ġ// ĠData ĠBinding ĊĠĠĠĠĠĠĠ Ġepisode _ title . text Ġ= ĠHtml Compat . from Html ( episode . title , Html Compat . FROM _ HTML _ MODE _ COMP ACT ) ĊĠĠĠĠĠĠĠ Ġepisode _ description . text Ġ= ĠHtml Compat . from Html ( episode . description , Html Compat . FROM _ HTML _ MODE _ COMP ACT ) ĊĠĠĠĠĠĠĠ Ġepisode _ length . text Ġ= Ġformat Duration ( episode . audio _ length _ sec ) ĊĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( episode . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( episode _ image ) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( episode . maybe _ audio _ invalid ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Download Button () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġepisode _ download . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisable Download Button (){ ĊĠĠĠĠĠĠĠ Ġepisode _ download . alpha Ġ= Ġ 0 . 4 f ĊĠĠĠĠĠĠĠ Ġepisode _ download . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġdownload Button Click Handler (){ ĊĠĠĠĠĠĠĠ Ġ// Check ĠWRITE _ STORAGE ĠPermission Ġand Ġdownload Ġaudio Ġif Ġgranted ĊĠĠĠĠĠĠĠ Ġwhen Ġ( PackageManager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Episode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , getString ( R . string . download _ started ), Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), 4 4 4 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Duration ( seconds : ĠInt ): ĠString Ġ= Ġif Ġ( seconds Ġ< Ġ 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseconds . toString () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠDate Utils . format Elapsed Time ( seconds . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload Episode () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmgr Ġ= Ġget System Service ( Context . DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager ĊĊĠĠĠĠĠĠĠ Ġval Ġdownload Uri Ġ= ĠUri . parse ( episode . audio ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDownload Manager . Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Uri ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrequest . set Allowed Network Types ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Manager . Request . NETWORK _ WIFI Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Manager . Request . NETWORK _ MOB ILE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Allowed Over Roaming ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( episode . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Notification Visibility ( Download Manager . Request . VIS IBILITY _ VISIBLE _ NOTIFY _ COMPLETED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Destination In External Public Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ POD CAST S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ ${ episode . title }. mp 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmgr . enqueue ( request ) ĊĠĠĠ Ġ} Ċ }