/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġim . vector . lib . attachment viewer Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Video View Ċ import Ġandroidx . core . view . isVisible Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġjava . io . File Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ // ĠTODO , Ġit Ġwould Ġbe Ġprobably Ġbetter Ġto Ġuse Ġa Ġunique Ġmedia Ġplayer Ċ // Ġfor Ġbetter Ġcustomization Ġand Ġcontrol Ċ // ĠBut Ġfor Ġnow ĠVideo View Ġis Ġenough , Ġit Ġreleased Ġplayer Ġwhen Ġdet ached , Ġwe Ġuse Ġa Ġtimer Ġto Ġupdate Ġprogress Ċ class ĠVideo ViewHolder Ġconstructor ( item View : ĠView ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase ViewHolder ( item View ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġis Selected Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Video Path : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġprogress Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġprogress : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġwas Paused Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġevent Listener : ĠWeak Reference < Attachment EventListener >? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġthumbnail Image : ĠImageView Ġ= ĠitemView . findViewById ( R . id . video Thumbnail Image ) ĊĠĠĠ Ġval Ġvideo View : ĠVideo View Ġ= ĠitemView . findViewById ( R . id . video View ) ĊĠĠĠ Ġval Ġloader ProgressBar : ĠProgress Bar Ġ= ĠitemView . findViewById ( R . id . video Loader Progress ) ĊĠĠĠ Ġval Ġvideo Control Icon : ĠImageView Ġ= ĠitemView . findViewById ( R . id . video Control Icon ) ĊĠĠĠ Ġval Ġerror TextView : ĠTextView Ġ= ĠitemView . findViewById ( R . id . video Media Viewer Error View ) ĊĊĠĠĠ Ġinternal Ġval Ġtarget Ġ= ĠDefault Video Loader Target ( this , Ġthumbnail Image ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Re cyc led () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Re cyc led () ĊĠĠĠĠĠĠĠ Ġprogress Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġprogress Disposable Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Video Path Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvideo Ready ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Video Path Ġ= Ġfile . path ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Playing () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvideo File Load Error () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġent ers Background () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video View . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġvideo View . current Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . stop Playback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġent ers Foreground () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Selected ( isSelected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selected ( selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video View . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġvideo View . current Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . stop Playback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Video Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Playing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Playing () Ġ{ ĊĠĠĠĠĠĠĠ Ġthumbnail Image . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġloader ProgressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvideo View . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġvideo View . setOn Prepared Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable ?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Disposable Ġ= ĠObservable . interval ( 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. time Interval () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġvideo View . duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġvideo View . current Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Playing Ġ= Ġvideo View . is Playing Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" FOO ", Ġ" is Playing Ġ$ is Playing Ġ$ progress /$ duration ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Listener ?. get ()?. on Event ( Attachment Events . Video Event ( is Playing , Ġprogress , Ġduration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvideo View . set Video Path ( m Video Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! was Paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . seek To ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Command ( commands : ĠAttachment Commands ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isSelected ) Ġreturn ĊĠĠĠĠĠĠĠ Ġwhen Ġ( commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAttachment Commands . Start Video Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Paused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAttachment Commands . Pause Video Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Paused Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAttachment Commands . Seek To Ġ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġvideo View . duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseek Duration Ġ= Ġduration Ġ* Ġ( commands . percent Progress Ġ/ Ġ 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View . seek To ( seek Duration . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( attachment Info : ĠAttachment Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . bind ( attachment Info ) ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwas Paused Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ