package Ġcom . st . st player Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Picture In Picture Params Ċ import Ġandroid . app . Remote Action Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . drawable . Icon Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Rational Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . st . st player . St Video View . On Player State ChangeListener Ċ import Ġcom . st . st player . data . TestData Ċ import Ġcom . st . st player . data . Video Entity Ċ import Ġcom . st . st player . state . Player State Ċ import Ġcom . st . st player . util . Activity Util Ċ import Ġcom . st . st player _ float window . util . View Util Ċ import Ġcom . st . st player _ ui . St Vod Media Controller Ċ import Ġkotlinx . android . synt hetic . main . activity _ pip .* Ċ import Ġjava . util .* Ċ Ċ @ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) Ċ class ĠP ip Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Media Controller : ĠSt Vod Media Controller ĊĠĠĠ Ġprivate Ġvar Ġm Video Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġm Picture In Picture Params Builder Ġ= ĊĠĠĠĠĠĠĠ ĠPicture In Picture Params . Builder () ĊĠĠĠ Ġprivate Ġval Ġi Want ToBe In Pip Mode Now Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Receiver : ĠBroadcast Receiver ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. hide () ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ pip ) ĊĠĠĠĠĠĠĠ Ġm Media Controller Ġ= ĠSt Vod Media Controller ( this ) ĊĠĠĠĠĠĠĠ Ġm Video View . set Media Controller ( m Media Controller ) ĊĠĠĠĠĠĠĠ Ġm Video View . setOn Player State ChangeListener ( object Ġ: ĠOn Player State ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Player StateChange ( player State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( player State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer State . STATE _ PLAY ING Ġ-> Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Picture In Picture Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . st _ video _ component _ play , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pause ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ROL _ TYPE _ PAUSE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ PAUSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer State . STATE _ PA USED , ĠPlayer State . STATE _ COMPLETE Ġ-> Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Picture In Picture Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . st _ video _ component _ pause , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" play ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ROL _ TYPE _ PLAY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ PLAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Video Height Ġ= Ġ( Activity Util . get Screen Width ( this ) Ġ* Ġ 9 f Ġ/ Ġ 1 6 f ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm St Video View Container . layout Params Ġas ĠLinearLayout . LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġm Video Height ĊĠĠĠĠĠĠĠ Ġm St Video View Container . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġm Enter Pip . setOnClickListener Ġ{ Ġenter Pip () Ġ} ĊĠĠĠĠĠĠĠ Ġstart Play () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Video View . is FullScreen ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . close FullScreen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Play () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Data : ĠVideo Entity Ġ= ĠTest Data . getSimple Data () ĊĠĠĠĠĠĠĠ Ġm Video View . set Video Path ( simple Data . url ) ĊĠĠĠĠĠĠĠ Ġm Video View . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Pip Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContinue Ġplayback ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġexisting Ġplayback Ġlogic Ġfor Ġpaused ĠActivity Ġbehavior . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisIn Pip Mode (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Picture In Picture Mode ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Pip Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¸įèĥ½ åľ¨ on Pause è°ĥçĶ¨ äºĨ ï¼Į éľĢè¦ģ æĶ¾ åĪ° on Stop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . pause () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Pip Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¸įèĥ½ åľ¨ on Resume è°ĥçĶ¨ é¢Ŀ ï¼Į éľĢè¦ģ æĶ¾ åĪ° onStart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Pip Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon User Leave Hint () Ġ{ ĊĠĠĠĠĠĠĠ Ġenter Pip () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenter Pip () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġthe Ġaspect Ġratio Ġof Ġthe ĠPi P Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaspect Ratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRational ( m Video View . width , Ġm Video View . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Picture In Picture Params Builder . set AspectRatio ( aspect Ratio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Picture In Picture Mode ( m Picture In Picture Params Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Util . remove View Form Parent ( m Video View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor View Ġ= Ġwindow . decor View Ġas ĠViewGroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . addView ( m Video View , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . set Media Controller ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Picture In Picture Mode Changed ( ĊĠĠĠĠĠĠĠ ĠisIn Picture In Picture Mode : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġnew Config : ĠConfiguration ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Picture In Picture Mode Changed ( isIn Picture In Picture Mode , Ġnew Config ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Picture In Picture Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent : ĠIntent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ACTION _ MEDIA _ CONTROL Ġ!= Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġwhere Ġwe Ġare Ġcalled Ġback Ġfrom ĠPicture - in - Picture Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġitems . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontrol Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getInt Extra ( EXTRA _ CONTROL _ TYPE , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( control Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ROL _ TYPE _ PLAY Ġ-> Ġm Video View . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ROL _ TYPE _ PAUSE Ġ-> Ġm Video View . pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Receiver ( m Receiver , ĠIntent Filter ( ACTION _ MEDIA _ CONTROL )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Receiver ( m Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Receiver Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRestore Ġthe Ġfull - screen ĠUI . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Util . remove View Form Parent ( m Video View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm St Video View Container . addView ( m Video View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Video View . set Media Controller ( m Media Controller ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġm Video View . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġstate Ġof Ġpause / resume Ġaction Ġitem Ġin ĠPicture - in - Picture Ġmode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġicon Id ĠĠĠĠĠ ĠThe Ġicon Ġto Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ@ param Ġtitle ĠĠĠĠĠĠ ĠThe Ġtitle Ġtext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontrol Type ĠThe Ġtype Ġof Ġthe Ġaction . Ġeither Ġ[. CONTROL _ TYPE _ PLAY ] Ġor Ġ[ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ][ . CONTROL _ TYPE _ PAUSE ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĠThe Ġrequest Ġcode Ġfor Ġthe Ġ[ Pending Intent ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġfun Ġupdate Picture In Picture Actions ( ĊĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġicon Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString ?, ĊĠĠĠĠĠĠĠ Ġcontrol Type : ĠInt , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactions Ġ= ĠArrayList < Remote Action >() ĊĠĠĠĠĠĠĠ Ġactions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon . create With Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Pip Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . drawable . ic _ menu _ more ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . more ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . more _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Pip Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ MORE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . more _ uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġthe ĠPending Intent Ġthat Ġis Ġinvoked Ġwhen Ġa Ġuser Ġclicks Ġon Ġthe Ġaction Ġitem . ĊĠĠĠĠĠĠĠ Ġ// ĠYou Ġneed Ġto Ġuse Ġdistinct Ġrequest Ġcodes Ġfor Ġplay Ġand Ġpause , Ġor Ġthe ĠPending Intent Ġwon 't ĊĠĠĠĠĠĠĠ Ġ// Ġbe Ġproperly Ġupdated . ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠPending Intent . get Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Pip Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ACTION _ MEDIA _ CONTROL ). putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ CONTROL _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġicon : ĠIcon ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠIcon . create With Resource ( this @ Pip Activity , Ġicon Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add ( Remote Action ( icon , Ġtitle !! , Ġtitle , Ġintent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnother Ġaction Ġitem . ĠThis Ġis Ġa Ġfixed Ġaction . ĊĠĠĠĠĠĠĠ Ġactions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon . create With Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Pip Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . drawable . ic _ menu _ info _ details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . info ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . info _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Pip Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . info _ uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Picture In Picture Params Builder . set Actions ( actions ) ĊĠĠĠĠĠĠĠ Ġset Picture In Picture Params ( m Picture In Picture Params Builder . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ MEDIA _ CONTROL Ġ= Ġ" media _ control " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ CONTROL _ TYPE Ġ= Ġ" control _ type " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCONT ROL _ TYPE _ PLAY Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCONT ROL _ TYPE _ PAUSE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ PLAY Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ PAUSE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ INFO Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ MORE Ġ= Ġ 4 ĊĠĠĠ Ġ} Ċ }