package Ġcom . amazonaws . iv s . player . scroll able feed . common Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . rend erscript . Allocation Ċ import Ġandroid . rend erscript . Element Ċ import Ġandroid . rend erscript . Render Script Ċ import Ġandroid . rend erscript . Script Intr insic Blur Ċ import Ġandroid . view . Pixel Copy Ċ import Ġandroid . view . Surface View Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġcom . amazonaws . iv s . player . scroll able feed . R Ċ import Ġkotlinx . coroutines . delay Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* ĠBl urred Ġbackground Ċ Ġ* Ġimplemented Ġusing ĠPixel Copy Ġ( API Ġ> Ġ 2 4 ) Ċ Ġ*/ Ċ suspend Ġfun ĠActivity . init Bl urred Background ( surface : ĠSurface View , Ġbackground : ĠImageView ) Ġ{ ĊĠĠĠ Ġdelay ( Configuration . BACKGROUND _ DELAY ) ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( surface . holder . surface . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsurface Bitmap Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Bitmap ( surface . width , Ġsurface . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPixel Copy Ġprovides Ġa Ġmechanisms Ġto Ġissue Ġpixel Ġcopy Ġrequests Ġto Ġallow Ġfor Ġcopy Ġoperations Ġfrom ĠSurface Ġto ĠBitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Copy . request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Bitmap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠPixel Copy . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Bitmap Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Bitmap . scale Bitmap ( background . width , Ġbackground . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbl urred Bitmap Ġ= Ġscaled Bitmap . blur Bitmap ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . setImage Bitmap ( bl urred Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . fadeIn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBackground ĠBitmap Ġblur Ċ Ġ*/ Ċ @ Worker Thread Ċ fun ĠBitmap . blur Bitmap ( application Context : ĠContext ): ĠBitmap Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġrender Script : ĠRender Script ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġoutput Ġbitmap ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , Ġheight , Ġconfig ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠBl ur Ġthe Ġimage ĊĠĠĠĠĠĠĠ Ġrender Script Ġ= ĠRender Script . create ( application Context , ĠRender Script . Context Type . DEBUG ) ĊĠĠĠĠĠĠĠ Ġval Ġin Alloc Ġ= ĠAl location . createFrom Bitmap ( render Script , Ġthis ) ĊĠĠĠĠĠĠĠ Ġval Ġout Alloc Ġ= ĠAl location . create Typed ( render Script , Ġin Alloc . type ) ĊĠĠĠĠĠĠĠ Ġval Ġthe Intr insic Ġ= ĠScript Intr insic Blur . create ( render Script , ĠElement . U 8 _ 4 ( render Script )) ĊĠĠĠĠĠĠĠ Ġthe Intr insic . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Radius ( Configuration . BL UR _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Intr insic . setInput ( in Alloc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Intr insic . forEach ( out Alloc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġout Alloc . copy To ( output ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġrender Script . finish () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBackground ĠBitmap Ġscaling Ċ Ġ*/ Ċ @ Worker Thread Ċ fun ĠBitmap . scale Bitmap ( maxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠ Ġvar Ġwidth Ġ= Ġwidth ĊĠĠĠ Ġvar Ġheight Ġ= Ġheight ĊĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Ġ> Ġheight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLand scape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth Ġ/ ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 ) Ġheight Ġ/= Ġratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheight Ġ> Ġwidth Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPor trait ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġheight Ġ/ ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 ) Ġwidth Ġ/= Ġratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSquare ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠBitmap . create Scaled Bitmap ( this , Ġwidth , Ġheight , Ġtrue ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSurface Ġview Ġwidth / height Ġscaling Ċ Ġ* Ġ@ param Ġwindow Manager Ġwindow Ġmanager Ċ Ġ* Ġ@ param Ġwidth Ġvideo Ġwidth Ċ Ġ* Ġ@ param Ġheight Ġvideo Ġheight Ċ Ġ*/ Ċ fun ĠSurface View . set Por trait Dim ens ( window Manager : ĠWindow Manager , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġpoint Ġ= ĠPoint () ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . R ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . display ?. get Real Size ( point ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . getSize ( point ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġaspect Ratio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () ĊĠĠĠ Ġval Ġpor trait Width Ġ= Ġpoint . y Ġ* Ġaspect Ratio ĊĠĠĠ Ġif Ġ( portrait Width Ġ>= Ġpoint . x ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġpor trait Width . toInt () ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġpoint . y ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpor trait Height Ġ= Ġpoint . x Ġ/ Ġaspect Ratio ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġpoint . x ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġpor trait Height . toInt () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSet Ġactive Ġtime Ċ Ġ* Ġ@ param Ġtime Ġtime Ġstring Ġin Ġa Ġformat Ġ' yyyy - MM - dd Th h : mm : ss Z ' Ċ Ġ*/ Ċ fun ĠTextView . setActive Time ( time : ĠString , ĠcurrentTime : ĠLong ) Ġ{ ĊĠĠĠ Ġval Ġmessage Ġ= ĠStringBuilder (" for ") ĊĠĠĠ Ġval Ġpattern Ġ= Ġ" yyyy - MM - dd Ġhh : mm : ss " ĊĠĠĠ Ġval Ġdate Ġ= Ġtime . replace (" T ", Ġ" Ġ"). replace (" Z ", Ġ" Ġ") ĊĊĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( pattern , ĠLocale . US ). parse ( date ) ĊĊĠĠĠ ĠdateFormat ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġabs ( currentTime Ġ- ĠdateFormat . time ) ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĠTimeUnit . MILLISECONDS . to Days ( diff ) ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= ĠTimeUnit . MILLISECONDS . to Hours ( diff Ġ- ĠTimeUnit . DAYS . to Millis ( days )) ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . to Minutes ( diff Ġ- ĠTimeUnit . DAYS . to Millis ( days ) Ġ- ĠTimeUnit . HOUR S . to Millis ( hours )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( days Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . append (" Ġ${ days } d ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . append (" Ġ${ hours } h ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmessage . append (" Ġ${ minutes } m ") ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġmessage ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠChange Ġvolume Ġview Ġbackground Ċ Ġ* Ġ@ param Ġmut ed Ġvolume Ġparam Ċ Ġ*/ Ċ fun ĠView . change Volume Background ( muted : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġon Drawable Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . ic _ volume _ on , Ġnull ) ĊĠĠĠ Ġval Ġoff Drawable Ġ= ĠResources Compat . get Drawable ( resources , ĠR . drawable . ic _ volume _ off , Ġnull ) ĊĠĠĠ Ġbackground Ġ= Ġif Ġ( muted ) Ġoff Drawable Ġelse Ġon Drawable Ċ } Ċ