package Ġcom . cy uan . mys ample fork otlin . sample . video Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ Ċ class ĠVideo ViewModel ( application : ĠApplication , Ġprivate Ġval Ġrepository : ĠVideo Repository ) Ġ: ĊĠĠĠ ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġval ĠTAG Ġ= Ġ" Video ViewModel " ĊĊĠĠĠ Ġvar Ġmedia Index Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġmedia List Ġ= ĠMutable LiveData < ArrayList < Video Info >>() ĊĊĠĠĠ Ġval Ġmedia Player Status Ġ= ĠMutable LiveData < MediaPlayer Status >() ĊĠĠĠ Ġval Ġmedia Name Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġmedia Information Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġmedia Total Length Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġmedia Current Position Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġmedia Uri Ġ= ĠMutable LiveData < Uri >() ĊĠĠĠ Ġval Ġmedia Width Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġmedia Height Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġval Ġdisplay View Status Ġ= ĠMutable LiveData < Display View Status >() ĊĊĠĠĠ Ġval Ġis Touch ProgressBar Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Index . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmedia List . value Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Init ĊĠĠĠĠĠĠĠ Ġmedia Name . value Ġ= Ġ" å° ļ æľª éģ¸ æĵ ĩ æĴŃæĶ¾ å½± çīĩ " ĊĠĠĠĠĠĠĠ Ġmedia Information . value Ġ= Ġ" å° ļ æľª éģ¸ æĵ ĩ æĴŃæĶ¾ å½± çīĩ " ĊĠĠĠĠĠĠĠ Ġmedia Total Length . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmedia Current Position . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmedia Uri . value Ġ= ĠUri . EMPTY ĊĠĠĠĠĠĠĠ Ġmedia Width . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmedia Height . value Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġis Touch ProgressBar . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselected Media () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¨Ńå®ļ åªĴ é« Ķ ä½įç½® ï¼Į ä¿®æĶ¹ åªĴ é« Ķ æĴ ¥ æĶ¾ åĻ¨ çĭ Ģ æħĭ ĊĠĠĠĠĠĠĠ Ġmedia Uri . value Ġ= Ġmedia List . value !!. get ( media Index . value !! ). video Uri ĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Found Media ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è¼ ī åħ¥ éł Ĳ è¨Ń åĢ¼ ĊĠĠĠĠĠĠĠ Ġmedia Name . value Ġ= Ġ" è«ĭ ç¨ į å¾Į åªĴ é« Ķ è¼ ī åħ¥ ä¸Ń ..." ĊĠĠĠĠĠĠĠ Ġmedia Information . value Ġ= Ġ" è«ĭ ç¨ į å¾Į åªĴ é« Ķ è¼ ī åħ¥ ä¸Ń ..." ĊĠĠĠĠĠĠĠ Ġmedia Current Position . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmedia Total Length . value Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Video List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġrepository . load Video List () ĊĠĠĠĠĠĠĠ Ġmedia List . value !!. addAll ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! media List . value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Index . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Media () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . NotFound Media ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Touch ProgressBar ( is Touch : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Touch ProgressBar . value Ġ= Ġis Touch ĊĊĠĠĠĠĠĠĠ Ġif Ġ( media Player Status . value Ġ== ĠMedia Player Status . Start Ġ&& Ġis Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Pause ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( media Player Status . value Ġ== ĠMedia Player Status . Pause Ġ&& Ġ! is Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Start ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Media Progress Change ( progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Current Position . value Ġ= Ġprogress ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Display Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay View Status . value Ġ= ĠDisplay View Status . Created ĊĠĠĠĠĠĠĠ Ġif Ġ( media Player Status . value Ġ== ĠMedia Player Status . Stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Prepare ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Display Destroyed () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay View Status . value Ġ= ĠDisplay View Status . Destroyed ĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Stop ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon MediaPlayer Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( media Player Status . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player Status . Ready , ĠMedia Player Status . Pause , ĠMedia Player Status . Complete Ġ-> Ġmedia Player Status . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player Status . Start ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player Status . Start Ġ-> Ġmedia Player Status . value Ġ= ĠMedia Player Status . Pause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Previous Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( media Index . value !! Ġ> Ġ 0 Ġ&& Ġmedia List . value !!. size Ġ> Ġmedia Index . value !! Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Index . value Ġ= Ġmedia Index . value !! Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Media () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Next Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( media List . value !!. size Ġ> Ġmedia Index . value !! Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Index . value Ġ= Ġmedia Index . value !! Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Media () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Media Play Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Complete ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall MediaPlayer Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¨Ńå®ļ åªĴ é« Ķ è³ĩ è¨ Ĭ ĊĠĠĠĠĠĠĠ Ġmedia Name . value Ġ= Ġmedia List . value !!. get ( media Index . value !! ). video Name ĊĠĠĠĠĠĠĠ Ġmedia Information . value Ġ= Ġmedia List . value !!. get ( media Index . value !! ). video Inf om ation ĊĠĠĠĠĠĠĠ Ġ// media Total Length . value Ġ= Ġmedia Player . duration ĊĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Ready ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Media Play Error ( p 1 : ĠInt , Ġp 2 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Error ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate MediaPlayer Info ( current Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Ready Media ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Current Position . value Ġ= Ġcurrent Position ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall MediaPlayer Prepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Prepare ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall MediaPlayer Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Start Media ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Status . value Ġ= ĠMedia Player Status . Start ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Start Media (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( media Player Status . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player Status . Ready , ĠMedia Player Status . Pause , ĠMedia Player Status . Complete Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Ready Media (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( media Player Status . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player Status . Ready , ĠMedia Player Status . Start , ĠMedia Player Status . Pause , ĠMedia Player Status . Complete Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Media Info ( total Length : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Total Length . value Ġ= Ġtotal Length ĊĠĠĠ Ġ} Ċ }