package Ġcom . u iza . sample player . ui . player advanced Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . appcompat . app . AppCompat Dialog Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . Fragment Pager Adapter Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector . Selection Override Ċ import Ġcom . google . android . ex op layer 2 . track selection . Mapping Track Selector . Mapped Track Info Ċ import Ġcom . google . android . ex op layer 2 . ui . Track Selection View Ċ import Ġcom . google . android . ex op layer 2 . ui . Track Selection View . Track Selection Listener Ċ import Ġcom . google . android . ex op layer 2 . util . Assertions Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . u iza . sample player . R Ċ import Ġjava . util .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ Ċ /** Ċ Ġ* ĠDialog Ġto Ġselect Ġtracks . Ċ Ġ*/ Ċ class ĠTrack Selection Dialog Custom Ġ: ĠDialog Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtab Fragments : ĠSparse Array < Track Selection View Fragment > Ġ= ĠSparse Array () ĊĠĠĠ Ġprivate Ġval Ġtab Track Types : ĠArrayList < Int > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġtitle Id Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠonClick Listener : ĠDialog Interface . OnClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Dismiss Listener : ĠDialog Interface . On Dismiss Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( ĊĠĠĠĠĠĠĠ Ġtitle Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmapped Track Info : ĠM apped Track Info , ĊĠĠĠĠĠĠĠ Ġinitial Parameters : ĠDefault Track Selector . Parameters , ĊĠĠĠĠĠĠĠ Ġallow Adaptive Selections : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġallow Multiple Overrides : ĠBoolean , ĊĠĠĠĠĠĠĠ ĠonClick Listener : ĠDialog Interface . OnClickListener , ĊĠĠĠĠĠĠĠ Ġon Dismiss Listener : ĠDialog Interface . On Dismiss Listener ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . title Id Ġ= Ġtitle Id ĊĠĠĠĠĠĠĠ Ġthis . on ClickListener Ġ= ĠonClick Listener ĊĠĠĠĠĠĠĠ Ġthis . on Dismiss Listener Ġ= Ġon Dismiss Listener ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmapped Track Info . renderer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tab For Renderer ( mapped Track Info , Ġi )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Type Ġ= Ġmapped Track Info . get Renderer Type ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab Fragment Ġ= ĠTrack Selection View Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Fragment . init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info Ġ= Ġmapped Track Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer Index Ġ= Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Is Disabled Ġ= Ġinitial Parameters . get Renderer Disabled ( i ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Override Ġ= Ġinitial Parameters . getSelection Override ( i , Ġtrack Group Array ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Adaptive Selections Ġ= Ġallow Adaptive Selections , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Multiple Overrides Ġ= Ġallow Multiple Overrides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Fragments . put ( i , Ġtab Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Track Types . add ( track Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġa Ġrenderer Ġis Ġdisabled . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrenderer Index ĠRenderer Ġindex . ĊĠĠĠĠ Ġ* Ġ@ return ĠWhether Ġthe Ġrenderer Ġis Ġdisabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Is Disabled ( renderer Index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrenderer View Ġ= Ġtab Fragments [ renderer Index ] ĊĠĠĠĠĠĠĠ Ġreturn Ġrenderer View Ġ!= Ġnull Ġ&& Ġrenderer View . is Disabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġlist Ġof Ġselected Ġtrack Ġselection Ġoverrides Ġfor Ġthe Ġspecified Ġrenderer . ĠThere Ġwill ĊĠĠĠĠ Ġ* Ġbe Ġat Ġmost Ġone Ġoverride Ġfor Ġeach Ġtrack Ġgroup . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrenderer Index ĠRenderer Ġindex . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġlist Ġof Ġtrack Ġselection Ġoverrides Ġfor Ġthis Ġrenderer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Overrides ( renderer Index : ĠInt ): ĠList < Selection Override > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrenderer View Ġ= Ġtab Fragments [ renderer Index ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( renderer View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer View . overrides Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġown Ġthe Ġview Ġto Ġlet Ġtab Ġlayout Ġwork Ġcorrectly Ġon Ġall ĠAPI Ġlevels . ĠWe Ġcan 't Ġuse ĊĠĠĠĠĠĠĠ Ġ// ĠAlertDialog Ġbecause Ġit Ġowns Ġthe Ġview Ġitself , Ġso Ġwe Ġuse ĠAppCompat Dialog Ġinstead , Ġthe med Ġusing ĊĠĠĠĠĠĠĠ Ġ// Ġthe ĠAlertDialog Ġtheme Ġoverlay Ġwith Ġforce - enabled Ġtitle . ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAppCompat Dialog ( activity , ĠR . style . Track Selection Dialog Theme Overlay ) ĊĠĠĠĠĠĠĠ Ġdialog . setTitle ( title Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdialog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dismiss ( dialog : ĠDialog Interface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Dismiss ( dialog ) ĊĠĠĠĠĠĠĠ Ġon Dismiss Listener ?. on Dismiss ( dialog ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog View Ġ= Ġinflater . inflate ( R . layout . track _ selection _ dialog _ custom , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġtab Layout : ĠTab Layout Ġ= Ġdialog View . findViewById ( R . id . tab Layout ) ĊĠĠĠĠĠĠĠ Ġval Ġview Pager : ĠView Pager Ġ= Ġdialog View . findViewById ( R . id . view Pager ) ĊĠĠĠĠĠĠĠ Ġval Ġbt Cancel Ġ= Ġdialog View . findViewById < Button >( R . id . bt Cancel ) ĊĠĠĠĠĠĠĠ Ġval Ġbt OK Ġ= Ġdialog View . findViewById < Button >( R . id . bt OK ) ĊĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= ĠFragment Adapter ( child FragmentManager ) ĊĠĠĠĠĠĠĠ Ġtab Layout . setup With ViewPager ( view Pager ) ĊĠĠĠĠĠĠĠ Ġtab Layout . visibility Ġ= Ġif Ġ( tab Fragments . size () Ġ> Ġ 1 ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbt Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbt OK . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener ?. onClick ( dialog , ĠDialog Interface . BUTTON _ POSITIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdialog View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠFragment Adapter ( fragment Manager : ĠFragment Manager ) Ġ: ĠFragment Pager Adapter ( ĊĠĠĠĠĠĠĠ Ġfragment Manager , ĠBE HAV IOR _ RE SU ME _ ONLY _ CURRENT _ FRAGMENT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtab Fragments . value At ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtab Fragments . size () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Page Title ( position : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Track TypeString ( resources , Ġtab Track Types [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFragment Ġto Ġshow Ġa Ġtrack Ġselection Ġin Ġtab Ġof Ġthe Ġtrack Ġselection Ġdialog . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠTrack Selection View Fragment Ġ: ĠFragment (), ĠTrack Selection Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmapped Track Info : ĠM apped Track Info ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġrenderer Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġallow Adaptive Selections Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġallow Multiple Overrides Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/* Ġpackage Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġis Disabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/* Ġpackage Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġoverrides : ĠList < Selection Override >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfun Ġinit ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info : ĠM apped Track Info ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Is Disabled : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Override : ĠSelection Override ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Adaptive Selections : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Multiple Overrides : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . mapped Track Info Ġ= Ġmapped Track Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . renderer Index Ġ= Ġrenderer Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Disabled Ġ= Ġinitial Is Disabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Ġ= Ġinitial Override ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . allow Adaptive Selections Ġ= Ġallow Adaptive Selections ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . allow Multiple Overrides Ġ= Ġallow Multiple Overrides ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠĠĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġinflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . exo _ track _ selection _ dialog , Ġcontainer , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection View : ĠTrack Selection View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . findViewById ( R . id . exo _ track _ selection _ view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection View . set Show Disable Option ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection View . set Allow Multiple Overrides ( allow Multiple Overrides ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection View . set Allow Adaptive Selections ( allow Adaptive Selections ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info ?. let Ġ{ Ġm ti Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides ?. let Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection View . init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ti , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Disabled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Track Selection Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Disabled : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides : ĠList < Selection Override > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Disabled Ġ= Ġis Disabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . overrides Ġ= Ġoverrides ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRet ain Ġinstance Ġacross Ġactivity Ġre - creation Ġto Ġprevent Ġlo sing Ġaccess Ġto Ġinit Ġdata . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġwhether Ġa Ġtrack Ġselection Ġdialog Ġwill Ġhave Ġcontent Ġto Ġdisplay Ġif Ġinitialized Ġwith Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġspecified Ġ[ Default Track Selector ] Ġin Ġits Ġcurrent Ġstate . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwill Have Content ( track Selector : ĠDefault Track Selector ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Track Info Ġ= Ġtrack Selector . current Mapped Track Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapped Track Info Ġ!= Ġnull Ġ&& Ġwill Have Content ( mapped Track Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġwhether Ġa Ġtrack Ġselection Ġdialog Ġwill Ġhave Ġcontent Ġto Ġdisplay Ġif Ġinitialized Ġwith Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġspecified Ġ[ Mapped Track Info ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwill Have Content ( mapped Track Info : ĠM apped Track Info ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmapped Track Info . renderer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tab For Renderer ( mapped Track Info , Ġi )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġdialog Ġfor Ġa Ġgiven Ġ[ Default Track Selector ], Ġwhose Ġparameters Ġwill Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġautomatically Ġupdated Ġwhen Ġtracks Ġare Ġselected . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtrack Selector ĠĠĠĠ ĠThe Ġ[ Default Track Selector ]. ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġon Dismiss Listener ĠA Ġ[ DialogInterface . On Dismiss Listener ] Ġto Ġcall Ġwhen Ġthe Ġdialog Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġdis missed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate For Track Selector ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector : ĠDefault Track Selector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Listener : ĠDialog Interface . On Dismiss Listener ĊĠĠĠĠĠĠĠ Ġ): ĠTrack Selection Dialog Custom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Track Info Ġ= ĠAssertions . checkNotNull ( track Selector . current Mapped Track Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Selection Dialog Ġ= ĠTrack Selection Dialog Custom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġtrack Selector . parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selection Dialog . init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id Ġ= ĠR . string . track _ selection _ title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info Ġ= Ġmapped Track Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Parameters Ġ= Ġparameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Adaptive Selections Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Multiple Overrides Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener Ġ= Ġ{ Ġ_: ĠDialog Interface ?, Ġ_: ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġparameters . build Up on () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmapped Track Info . renderer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clear Selection Overrides ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Renderer Disabled ( i , Ġtrack Selection Dialog . getIs Disabled ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverrides Ġ= Ġtrack Selection Dialog . get Overrides ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( overrides . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setSelection Override ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info . get Track Groups ( i ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selector . set Parameters ( builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Listener Ġ= Ġon Dismiss Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrack Selection Dialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġdialog Ġfor Ġgiven Ġ[ Mapped Track Info ] Ġand Ġ[ Default Track Selector . Parameters ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtitle Id ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThe Ġresource Ġid Ġof Ġthe Ġdialog Ġtitle . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmapped Track Info ĠĠĠĠĠĠĠĠ ĠThe Ġ[ Mapped Track Info ] Ġto Ġdisplay . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġinitial Parameters ĠĠĠĠĠĠ ĠThe Ġ[ Default Track Selector . Parameters ] Ġdescribing Ġthe Ġinitial ĊĠĠĠĠĠĠĠĠ Ġ* Ġtrack Ġselection . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġallow Adaptive Selections ĠWhether Ġadaptive Ġselections Ġ( cons isting Ġof Ġmore Ġthan Ġone Ġtrack ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġcan Ġbe Ġmade . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġallow Multiple Overrides Ġ ĠWhether Ġtracks Ġfrom Ġmultiple Ġtrack Ġgroups Ġcan Ġbe Ġselected . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠonClick Listener ĠĠĠĠĠĠĠĠ Ġ[ DialogInterface . OnClickListener ] Ġcalled Ġwhen Ġtracks Ġare Ġselected . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġon Dismiss Listener ĠĠĠĠĠĠ Ġ[ DialogInterface . On Dismiss Listener ] Ġcalled Ġwhen Ġthe Ġdialog Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġdis missed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate For Mapped Track Info And Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info : ĠM apped Track Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Parameters : ĠDefault Track Selector . Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Adaptive Selections : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Multiple Overrides : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener : ĠDialog Interface . OnClickListener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Listener : ĠDialog Interface . On Dismiss Listener ĊĠĠĠĠĠĠĠ Ġ): ĠTrack Selection Dialog Custom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Selection Dialog Ġ= ĠTrack Selection Dialog Custom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Selection Dialog . init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Adaptive Selections , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Multiple Overrides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrack Selection Dialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Tab For Renderer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Track Info : ĠM apped Track Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer Index : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Group Array Ġ= Ġmapped Track Info . get Track Groups ( renderer Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Group Array . length Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Type Ġ= Ġmapped Track Info . get Renderer Type ( renderer Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Supported Track Type ( track Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Supported Track Type ( track Type : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( track Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC . TRACK _ TYPE _ VIDEO , ĠC . TRACK _ TYPE _ AUDIO , ĠC . TRACK _ TYPE _ TEXT Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Track TypeString ( resources : ĠResources , Ġtrack Type : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( track Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC . TRACK _ TYPE _ VIDEO Ġ-> Ġresources . getString ( R . string . exo _ track _ selection _ title _ video ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC . TRACK _ TYPE _ AUDIO Ġ-> Ġresources . getString ( R . string . exo _ track _ selection _ title _ audio ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC . TRACK _ TYPE _ TEXT Ġ-> Ġresources . getString ( R . string . exo _ track _ selection _ title _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRet ain Ġinstance Ġacross Ġactivity Ġre - creation Ġto Ġprevent Ġlo sing Ġaccess Ġto Ġinit Ġdata . ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ