package Ġcom . tm . bl player . ui . activity Ċ Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment State Pager Adapter Ċ import Ġandroid . view . View Ċ import Ġcom . jak ew h art on . r xb ind ing . view . Rx View Ċ import Ġcom . or h ano but . logger . Logger Ċ import Ġcom . tm . bl player . R Ċ import Ġcom . tm . bl player . base . Base Activity Ċ import Ġcom . tm . bl player . base . Base Fragment Ċ import Ġcom . tm . bl player . bean . Video Detail Data Ċ import Ġcom . tm . bl player . mvp . presenter . Video Detail Presenter Ċ import Ġcom . tm . bl player . mvp . view . Base View Ċ import Ġcom . tm . bl player . ui . fragment . Video Comment Fragment Ċ import Ġcom . tm . bl player . ui . fragment . Video Description Fragment Ċ import Ġcom . tm . bl player . utils . Common Util Ċ import Ġcom . tm . bl player . utils . StringUtils Ċ import Ġcom . tm . bl player . utils . Toast Utils Ċ import Ġcom . tm . bl player . utils . constants . Constants Ċ import Ġcom . tm . bl player . widget . media . Android Media Controller Ċ import Ġkotlinx . android . synt hetic . main . activity _ video _ detail .* Ċ import Ġkotlinx . android . synt hetic . main . include _ common _ toolbar .* Ċ import Ġkotlinx . android . synt hetic . main . include _ video _ detail _ top .* Ċ import Ġtv . dan mak u . ijk . media . player . I jk MediaPlayer Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġ@ author Ġw ut ong ming Ċ Ġ* Ġ@ description Ċ Ġ* Ġ@ since Ġ 2 0 1 7 / 6 / 1 4 Ċ Ġ*/ Ċ class ĠVideo Detail Activity Ġ: ĠBase Activity (), ĠBase View Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġaid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Video Detail Presenter : ĠVideo Detail Presenter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Data : ĠVideo Detail Data ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġfragments Ġ= ĠarrayOf Null s < Base Fragment >( 2 ) ĊĠĠĠ Ġprivate Ġvar Ġmedia Controller : ĠAndroid Media Controller ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplay Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Back Pressed : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġdevice Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Url Index : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Play Position : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ// åĬ¨çĶ» ĊĠĠĠ Ġprivate Ġvar Ġplay Anim Set : ĠAn imator Set ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġup Anim : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdown Anim : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġshow Anim : ĠObject Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhide Anim : ĠObject Animator ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . activity _ video _ detail ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdevice Width Ġ= ĠCommon Util . getDevice Width ( this ) ĊĠĠĠĠĠĠĠ Ġinit Video View () ĊĠĠĠĠĠĠĠ Ġcreate Presenter () ĊĠĠĠĠĠĠĠ ĠgetData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Toolbar () ĊĠĠĠĠĠĠĠ Ġll _ back . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġaid Ġ= Ġintent . getString Extra ( Constants . VIDEO _ A ID ) ĊĠĠĠĠĠĠĠ Ġtv _ back _ title . text Ġ= Ġresources . getString ( R . string . video _ detail _ av , Ġaid . toString ()) ĊĠĠĠĠĠĠĠ Ġcommon _ toolbar . set BackgroundColor ( resources . getColor ( R . color . transparent )) ĊĊĠĠĠĠĠĠĠ Ġinit AppBar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit AppBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfab Size Ġ= ĠCommon Util . dip 2 px ( this , Ġ 6 0 f ) ĊĠĠĠĠĠĠĠ Ġapp _ bar . add On Offset Changed Listener ({ Ġapp Bar Layout , Ġvertical Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Scroll Range Ġ= Ġapp _ bar . total Scroll Range . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= ĠMath . abs ( vertical Offset ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 1 Ġ- Ġoffset Ġ/ Ġtotal Scroll Range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġfab _ play . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġ( fab Size Ġ* Ġscale ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( fab Size Ġ* Ġscale ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ play . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! video _ view . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ>= Ġtotal Scroll Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon _ toolbar ?. set BackgroundColor ( resources . getColor ( R . color . dom inant Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ back _ title . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll _ play . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ play . visibility Ġ= ĠView . GONE Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Play Anim ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon _ toolbar ?. set BackgroundColor ( resources . getColor ( R . color . transparent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ back _ title . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll _ play . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ play . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Tab () ĊĠĠĠĠĠĠĠ ĠRx View . click s ( fab _ play ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġplay Video () Ġ}) ĊĠĠĠĠĠĠĠ Ġinit Anim () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġfragments [ 0 ] Ġ= ĠVideo Description Fragment () ĊĠĠĠĠĠĠĠ Ġfragments [ 1 ] Ġ= ĠVideo Comment Fragment () ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġresources . getString Array ( R . array . video _ detail _ tab ) ĊĊĠĠĠĠĠĠĠ Ġview _ pager . adapter Ġ= Ġobject Ġ: ĠFragment State Pager Adapter ( support FragmentManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠBase Fragment ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragments [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Page Title ( position : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragments . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtab _ layout . setup With ViewPager ( view _ pager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Anim () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æĶ¾ å¤§ åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġup Anim Ġ= ĠObject Animator . of Float ( fab _ play , Ġ" scale ", Ġ 0 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġ// ç¼© å°ı åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġdown Anim Ġ= ĠObject Animator . of Float ( fab _ play , Ġ" scale ", Ġ 1 . 0 f , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠ Ġ// æĺ¾ç¤º åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġshow Anim Ġ= ĠObject Animator . of Float ( fab _ play , Ġ" alpha ", Ġ 0 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġ// æ¶Ī å¤± åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġhide Anim Ġ= ĠObject Animator . of Float ( fab _ play , Ġ" alpha ", Ġ 1 . 0 f , Ġ 0 . 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮīéĴ® ç¼© æĶ¾ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Play Anim ( shown : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplay Anim Set Ġ= Ġplay Anim Set Ġ?: ĠAn imator Set () ĊĠĠĠĠĠĠĠ Ġplay Anim Set ?. duration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Anim Set ?. play To gether ( up Anim , Ġshow Anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Anim Set ?. start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Anim Set ?. play To gether ( down Anim , Ġhide Anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Anim Set ?. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ Ĵ Ń æĶ¾ è§Ĩé¢ĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġplay Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! StringUtils . is Trim Empty ( play Url ) Ġ&& Ġ! video _ view . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" play Url Ġ= Ġ" Ġ+ Ġplay Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Play Fab () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į æĴŃæĶ¾ æĮīéĴ® æĴŃæĶ¾ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Play Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab _ play . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Video View () Ġ{ ĊĠĠĠĠĠĠĠ ĠI jk MediaPlayer . load Libraries Once ( null ) ĊĠĠĠĠĠĠĠ ĠI jk MediaPlayer . native _ profile Begin (" lib ijk player . so ") ĊĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġvideo _ view . layout Params ĊĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġ( device Width Ġ* Ġ( 9 . 0 f Ġ/ Ġ 1 6 . 0 f )). toInt () ĊĊĠĠĠĠĠĠĠ Ġmedia Controller Ġ= ĠAndroid Media Controller ( this , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġvideo _ view . setOn Prepared Listener ({ Ġi MediaPlayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fab _ play . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ play . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġi MediaPlayer . duration . toInt () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvideo _ view . setOn Completion Listener ({ Ġi MediaPlayer Ġ-> ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ç¬¬äºĮ ä¸ª åıĤæķ° ä¸º code , ç¬¬ä¸ī ä¸ª åıĤæķ° ĊĠĠĠĠĠĠĠ Ġvideo _ view . setOn Info Listener ({ Ġi MediaPlayer , Ġi , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Position Ġ= Ġi MediaPlayer . current Position . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvideo _ view ?. setOn Error Listener ({ Ġi MediaPlayer , Ġi , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĴŃæĶ¾ å¤±è´¥ æĹ¶ éĩį è¯ķ ä¸ĭ ä¸Ģä¸ª éĵ¾æİ¥ , çŁ¥éģĵ æ²¡æľī éĵ¾æİ¥ ä¸º æŃ¢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġm Data ?. video _ info ?. url _ list ?. size ĠĠĠ Ġ// å¦Ĥæŀľ ä¸ŃéĹ´ æľī ç©º çļĦè¯Ŀ åĪĻ è¿ĶåĽŀ Int çļĦ æľĢå°ı åĢ¼ , åıį æŃ£ ä¸įä¼ļ è¿Ľåħ¥ if å°±åı¯ä»¥ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Url Index Ġ< Ġsize Ġ?: ĠInt . MIN _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Url Ġ= Ġm Data ?. video _ info ?. url _ list ?. get ( m Current Url Index ++) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . set Video Path ( play Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short Toast ( this @ Video Detail Activity , ĠgetString ( R . string . video _ detail _ parse _ failed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvideo _ view . set Media Controller ( null ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Video Detail Presenter Ġ= Ġm Video Detail Presenter Ġ?: ĠVideo Detail Presenter () ĊĠĠĠĠĠĠĠ Ġm Video Detail Presenter ?. on Attach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġmap . put ( Constants . VIDEO _ A ID , Ġaid . toString ()) ĊĠĠĠĠĠĠĠ Ġm Video Detail Presenter ?. request Data ( map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onClick ( view ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view ?. id ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Network Success ( result : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Data Ġ= Ġresult Ġas ĠVideo Detail Data ĊĠĠĠĠĠĠĠ Ġ( fragments [ 0 ] Ġas ĠVideo Description Fragment ). init Data ( m Data ) ĊĠĠĠĠĠĠĠ Ġplay Url Ġ= Ġm Data ?. video _ info ?. url _ list ?. get ( m Current Url Index ) ĊĠĠĠĠĠĠĠ Ġvideo _ view . set Video Path ( play Url Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Network Failed ( code : ĠInt , Ġerror Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast Utils . show Short Toast ( this , Ġ" code Ġ= Ġ$ code Ġerror Msg Ġ= Ġ$ error Msg ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Network Error ( error : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast Utils . show Short Toast ( this , Ġerror ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Current Play Position Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»§ç»Ń ä¹ĭåīį çļĦ æĴŃæĶ¾ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" ç»§ç»Ń æĴŃæĶ¾ , ä¹ĭåīį æĴŃæĶ¾ è®°å½ķ Ġ==> Ġ" Ġ+ ĠmCurrent Play Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . seek To ( m Current Play Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Back Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠĠĠĠĠ Ġ// æļĤ åģľ æĹ¶ è®°å½ķ æĴŃæĶ¾ åĢ¼ ĊĠĠĠĠĠĠĠ ĠmCurrent Play Position Ġ= Ġvideo _ view . current Position ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Back Pressed Ġ|| Ġ! video _ view . is Background Play Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . stop Playback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . release ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . stop Background Play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Back Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo _ view . enter Background () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠI jk MediaPlayer . native _ profile End () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Video Detail Presenter ?. on Detach () ĊĠĠĠĠĠĠĠ Ġvideo _ view . stop Playback () ĊĠĠĠĠĠĠĠ Ġvideo _ view . release ( true ) ĊĠĠĠĠĠĠĠ Ġvideo _ view . stop Background Play () ĊĠĠĠĠĠĠĠ ĠI jk MediaPlayer . native _ profile End () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }