package Ġcom . amazonaws . iv s . player . scroll able feed . common Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Surface Texture Ċ 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 .* Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . math . abs Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . util . Size Ċ import Ġandroidx . core . view . do On Layout Ċ import Ġcom . amazonaws . iv s . player . scroll able feed . models . Size Model Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlin . math . round ToInt Ċ Ċ fun Ġinit Bl urred Background ( texture View : ĠTexture View , Ġbackground : ĠImageView ) Ġ= Ġlaunch Main Ġ{ ĊĠĠĠ Ġif Ġ( background . has Image ()) Ġreturn @ launch Main ĊĠĠĠ Ġdelay ( SHOW _ BACKGROUND _ DELAY ) ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsurface Ġ= ĠSurface ( texture View . surface Texture !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ( surface . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsurface Bitmap Ġ= ĠBitmap . create Bitmap ( texture View . width , Ġtexture View . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ( texture View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . setImage Bitmap ( bl urred Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . animate (). alpha ( 0 . 3 5 f ). set Start Delay ( SHOW _ BACKGROUND _ DELAY ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠHandler ( Looper . get Main Looper ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠBitmap . blur Bitmap ( application Context : ĠContext ): ĠBitmap Ġ{ ĊĠĠĠ Ġvar Ġrender Script : ĠRender Script ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠBitmap . create Bitmap ( width , Ġheight , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġ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 ( 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 () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠBitmap . scale Bitmap ( maxWidth : ĠInt , ĠmaxHeight : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠ Ġvar Ġwidth Ġ= Ġwidth ĊĠĠĠ Ġvar Ġheight Ġ= Ġheight ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Ġ> Ġheight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġwidth Ġ/ ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 ) Ġheight Ġ/= Ġratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheight Ġ> Ġwidth Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġheight Ġ/ ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 ) Ġwidth Ġ/= Ġratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠBitmap . create Scaled Bitmap ( this , Ġwidth , Ġheight , Ġtrue ) Ċ } Ċ Ċ fun ĠTextView . first Char Color ( color : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġsp ann able Ġ= ĠSp ann able StringBuilder ( text ) ĊĠĠĠ Ġsp ann able . set Span ( ForegroundColor Span ( color ), Ġ 0 , Ġ 1 , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠ Ġtext Ġ= Ġsp ann able Ċ } Ċ Ċ 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 ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTexture View . on Ready ( on Ready : Ġ( surface : ĠSurface ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( surface Texture Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ready ( Surface ( surface Texture )) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġsurface Texture Listener Ġ= Ġobject Ġ: ĠTexture View . Surface Texture Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface : ĠSurface Texture , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Texture Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ready ( Surface ( surface Texture )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface : ĠSurface Texture , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIgnore d Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface : ĠSurface Texture ) Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface : ĠSurface Texture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIgnore d Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView . scale To Fit ( video Size : ĠSize Model , Ġparent View : ĠView ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġif Ġ( video Size . width Ġ== Ġ 0 Ġ|| Ġvideo Size . height Ġ== Ġ 0 ) Ġreturn ĊĠĠĠ Ġ( parent View Ġ?: Ġparent Ġas ĠView ). do On Layout Ġ{ Ġuse To Scale Ġ-> ĊĠĠĠĠĠĠĠ Ġcalculate Surface Size ( video Size . width , Ġvideo Size . height ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġuse To Scale . calculate Surface Size ( video Size . width , Ġvideo Size . height ) ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġsize . width ĊĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġsize . height ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= Ġparams ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠView . calculate Surface Size ( video Width : ĠInt , Ġvideo Height : ĠInt ): ĠSize Ġ{ ĊĠĠĠ Ġval Ġratio Ġ= Ġvideo Height Ġ/ Ġvideo Width . toFloat () ĊĠĠĠ Ġval Ġscaled Width : ĠInt ĊĠĠĠ Ġval Ġscaled Height : ĠInt ĊĠĠĠ Ġif Ġ( meas ured Height Ġ> Ġmeasured Width Ġ* Ġratio ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscaled Width Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠ Ġscaled Height Ġ= Ġ( meas ured Width Ġ* Ġratio ). round ToInt () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġscaled Width Ġ= Ġ( meas ured Height Ġ/ Ġratio ). round ToInt () ĊĠĠĠĠĠĠĠ Ġscaled Height Ġ= Ġmeasured Height ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠSize ( scaled Width , Ġscaled Height ) Ċ } Ċ Ċ private Ġfun ĠImageView . has Image (): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġhas Image Ġ= Ġdrawable Ġ!= Ġnull ĊĠĠĠ Ġif Ġ( has Image Ġ&& Ġdrawable Ġis ĠBitmap Drawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhas Image Ġ= Ġ( drawable Ġas ĠBitmap Drawable ). bitmap Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġhas Image Ċ } Ċ