/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 Ġi FL Y TE K ĠCO ., L TD . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . if ly tek . cyber . iot . show . core . fragment Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . navigation . Navigation Ċ import Ġcn . if ly os . i ace . if ly os . MediaPlayer Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Simple Target Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . bump tech . glide . request . transition . Transition Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . if ly tek . cyber . iot . show . core . R Ċ import Ġcom . if ly tek . cyber . iot . show . core . impl . Logger . LogEntry Ċ import Ġcom . if ly tek . cyber . iot . show . core . impl . Logger . Logger Handler Ċ import Ġcom . if ly tek . cyber . iot . show . core . impl . Playback Controller . Playback Controller Handler Ċ import Ġcom . if ly tek . cyber . iot . show . core . model . Content Ċ import Ġcom . if ly tek . cyber . iot . show . core . model . Content Storage Ċ import Ġcom . if ly tek . cyber . iot . show . core . model . Template Content Ċ import Ġcom . if ly tek . cyber . iot . show . core . utils . Rounded C orners Transformation Ċ import Ġcom . w ark iz . widget . Indicator Seek Bar Ċ import Ġcom . w ark iz . widget . On Seek ChangeListener Ċ import Ġcom . w ark iz . widget . Seek Params Ċ import Ġjp . was ab eef . blur ry . Blur ry Ċ import Ġjava . util .* Ċ Ċ class ĠPlayer Info Fragment Ġ: ĠBase Fragment (), ĠView . OnClickListener , ĠPlay back Controller Handler . Playback Callback , ĠObserver , ĠOn Seek ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtv Title : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtv Artist : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Previous : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Play Pause : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Next : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Album : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtv Current Position : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtv Duration : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Provider Logo : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Back : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġiv Blur Background : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtv Tips Title : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġseek Bar : ĠIndicator Seek Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġseek Bar Dragging Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġseek Bar Progress Target Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġalbum Height : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġplayback Controller : ĠPlay back Controller Handler ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ player _ info , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġlauncher Ġ&& Ġlauncher ?. m Engine Service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Controller Ġ= Ġlauncher ?. m Engine Service ?. get Playback Controller () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Controller ?. set Playback Callback ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( launcher Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlauncher ?. add Observer ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġiv Back Ġ= Ġview . findViewById ( R . id . iv _ back ) ĊĠĠĠĠĠĠĠ Ġtv Title Ġ= Ġview . findViewById ( R . id . title ) ĊĠĠĠĠĠĠĠ Ġtv Tips Title Ġ= Ġview . findViewById ( R . id . tv _ tips _ title ) ĊĠĠĠĠĠĠĠ Ġtv Artist Ġ= Ġview . findViewById ( R . id . artist ) ĊĠĠĠĠĠĠĠ Ġseek Bar Ġ= Ġview . findViewById ( R . id . seek _ bar ) ĊĠĠĠĠĠĠĠ Ġiv Play Pause Ġ= Ġview . findViewById ( R . id . play _ pause ) ĊĠĠĠĠĠĠĠ Ġiv Next Ġ= Ġview . findViewById ( R . id . skip _ next ) ĊĠĠĠĠĠĠĠ Ġiv Previous Ġ= Ġview . findViewById ( R . id . skip _ previous ) ĊĠĠĠĠĠĠĠ Ġtv Current Position Ġ= Ġview . findViewById ( R . id . current _ position ) ĊĠĠĠĠĠĠĠ Ġtv Duration Ġ= Ġview . findViewById ( R . id . duration ) ĊĠĠĠĠĠĠĠ Ġiv Provider Logo Ġ= Ġview . findViewById ( R . id . music _ provider _ logo ) ĊĠĠĠĠĠĠĠ Ġiv Album Ġ= Ġview . findViewById ( R . id . album ) ĊĠĠĠĠĠĠĠ Ġiv Blur Background Ġ= Ġview . findViewById ( R . id . iv _ blur _ background ) ĊĊĠĠĠĠĠĠĠ Ġiv Back ?. setOnClickListener Ġ{ Ġv Ġ-> ĠNavigation . find Nav Controller ( v ). navigate Up () Ġ} ĊĊĠĠĠĠĠĠĠ Ġiv Previous ?. setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġiv Previous ?. tag Ġ= ĠTAG _ PREVIOUS ĊĠĠĠĠĠĠĠ Ġiv Next ?. setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġiv Next ?. tag Ġ= ĠTAG _ NEXT ĊĠĠĠĠĠĠĠ Ġiv Play Pause ?. setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġiv Play Pause ?. tag Ġ= ĠTAG _ PLAY _ PAUSE ĊĊĠĠĠĠĠĠĠ Ġseek Bar ?. max Ġ= Ġ 1 0 0 f ĊĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġseek Bar ?. on Seek ChangeListener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Added Ġ&& Ġlauncher Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠBl ur ry . with ( launcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sampling ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. radius ( 7 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( Color . parse Color ("# 6 6 2 1 2 1 2 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( get Bitmap From Vector Drawable ( R . drawable . cover _ default )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( iv Blur Background !! ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠContent Storage . get (). current Content ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tips Title ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tips Title ?. text Ġ= ĠgetString ( R . string . default _ music _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Artist ?. text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Artist ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. text Ġ= Ġformat ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. text Ġ= Ġformat ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault Cover () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ play _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tips Title ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. text Ġ= Ġcontent . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Artist ?. text Ġ= Ġcontent . title Sub text 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Artist ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . art Ġ!= Ġnull Ġ&& Ġcontent . art ?. sources Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcontent . art ?. sources ?. size Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Set Cover ( content , Ġtrue , Ġalbum Height Ġ/ Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . view Tree Observer ?. add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Set Cover ( content , Ġtrue , Ġit . height Ġ/ Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . view Tree Observer ?. remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault Cover () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . provider Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . provider ?. logo Ġ!= Ġnull Ġ&& Ġcontent . provider ?. logo ?. sources ?. size Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Provider Logo ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Provider Logo ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( launcher !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( content . provider ?. logo !!. sources [ 0 ]. url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( e : ĠG lide Exception ?, Ġmodel : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable >, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠDrawable , Ġmodel : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable >, ĠdataSource : ĠDataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Provider Logo ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( playback Controller Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( playback Controller ?. media Player ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Playback StateChanged ( MediaPlayer . Media State . PLAY ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Playback StateChanged ( MediaPlayer . Media State . STOP PED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġplayback Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. text Ġ= Ġformat ( playback Controller ?. media Player ?. position Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. text Ġ= Ġformat ( playback Controller ?. media Player ?. duration Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. max Ġ= Ġplayback Controller ?. media Player ?. duration ?. toFloat () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. set Progress ( playback Controller ?. media Player ?. position ?. toFloat () !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetDefault Cover () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( album Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius [ 0 ] Ġ= Ġalbum Height Ġ/ Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreal Set Cover ( null , Ġfalse , Ġradius [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. view Tree Observer ?. add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Height Ġ= Ġiv Album !!. height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius [ 0 ] Ġ= Ġalbum Height Ġ/ Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Set Cover ( null , Ġfalse , Ġradius [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. view Tree Observer ?. remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġreal Set Cover ( content : ĠContent ?, Ġshould Blur : ĠBoolean , Ġradius : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( launcher Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Blur Ġ&& Ġcontent ?. art ?. sources Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . art ?. sources ?. size Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( iv Album !!. context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( content . art !!. sources [ 0 ]. url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder Of ( R . drawable . cover _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( Rounded C orners Transformation ( radius , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . cover _ default )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( object Ġ: ĠSimple Target < Bitmap >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġtransition : ĠTransition < in ĠBitmap > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. setImage Bitmap ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Blur Background ?. let Ġ{ Ġblur Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBl ur ry . with ( launcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sampling ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( Color . parse Color ("# 6 6 2 1 2 1 2 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( blur ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( error Drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Load Failed ( error Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. setImage Resource ( R . drawable . cover _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Album ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( launcher !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( R . drawable . cover _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder Of ( R . drawable . cover _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( Rounded C orners Transformation ( radius , Ġ 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tv Title Ġ!= Ġnull Ġ&& Ġtv Title ?. visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. request Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaband on Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tv Title Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. clear Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġid Ġis Ġnot Ġstatic - final ĊĠĠĠĠĠĠĠ Ġif Ġ( playback Controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= Ġplayback Controller ?. media Player ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . tag . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG _ PREVIOUS Ġ-> Ġplayback Controller ?. previous Button Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG _ NEXT Ġ-> Ġplayback Controller ?. next Button Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG _ PLAY _ PAUSE Ġ-> Ġif Ġ( media Player ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Controller ?. pause Button Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Controller ?. play Button Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat ( duration : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . getDefault (), Ġ"% 2 d :% 0 2 d ", Ġduration Ġ/ Ġ 1 0 0 0 Ġ/ Ġ 6 0 , Ġduration Ġ/ Ġ 1 0 0 0 Ġ% Ġ 6 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Position Updated ( position : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( playback Controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= Ġplayback Controller ?. media Player ĊĊĠĠĠĠĠĠĠ Ġif Ġ( seek Bar Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ pause _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ play _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( media Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Player . duration Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seek Bar ?. max Ġ!= Ġmedia Player . duration . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. max Ġ= Ġmedia Player . duration . toInt (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. set Progress ( position . toInt (). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. set Progress ( 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Playback StateChanged ( state : ĠMedia Player . Media State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠMedia Player . Media State . PLAY ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ pause _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Storage . get (). is Music Playing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ play _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Storage . get (). is Music Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠMedia Player . Media State . STOP PED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Play Pause ?. setImage Resource ( R . drawable . ic _ play _ circle _ outline _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Storage . get (). is Music Playing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġplayback Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= Ġplayback Controller ?. media Player ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Player ?. duration Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( o : ĠObservable , Ġarg : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( o Ġ! is ĠLogger Handler . Logger Observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ! is ĠLog Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( arg . type Ġ== ĠLogger Handler . RENDER _ PLAYER _ INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠGson (). fromJson ( arg . json . toString (), ĠTemplate Content :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Storage . get (). save Content ( content . template ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Back ?. post Ġ{ Ġsetup View () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Seek ing ( seek Params : ĠSeek Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( playback Controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= Ġplayback Controller ?. media Player ĊĠĠĠĠĠĠĠ Ġif Ġ( media Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Player . duration Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. text Ġ= Ġformat ( seek Params . progress . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. text Ġ= Ġformat ( media Player . duration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. text Ġ= Ġformat ( seek Params . progress . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. text Ġ= Ġformat ( media Player . duration ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Current Position ?. text Ġ= Ġformat ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Duration ?. text Ġ= Ġformat ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( seek Params . from User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar Progress Target Ġ= Ġseek Params . progress ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠIndicator Seek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar Dragging Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠIndicator Seek Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar Dragging Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( playback Controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Player Ġ= Ġplayback Controller ?. media Player ĊĊĠĠĠĠĠĠĠ Ġif Ġ( seek Bar Progress Target Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. position Ġ= Ġseek Bar Progress Target . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar Progress Target Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap From Vector Drawable ( drawable Id : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( launcher !! , Ġdrawable Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( drawable !!. intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . intrinsic Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġcanvas . width , Ġcanvas . height ) ĊĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ PREVIOUS Ġ= Ġ" PREVIOUS " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ NEXT Ġ= Ġ" NEXT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ PLAY _ PAUSE Ġ= Ġ" PLAY _ PAUSE " ĊĠĠĠ Ġ} Ċ } Ċ