2929import java .util .ArrayList ;
3030import java .util .HashMap ;
3131import java .util .List ;
32+ import java .util .concurrent .CopyOnWriteArrayList ;
3233
3334/**
3435 * MediaRouter allows applications to control the routing of media channels
@@ -48,7 +49,8 @@ static class Static {
4849 final Resources mResources ;
4950 final IAudioService mAudioService ;
5051 final Handler mHandler ;
51- final ArrayList <CallbackInfo > mCallbacks = new ArrayList <CallbackInfo >();
52+ final CopyOnWriteArrayList <CallbackInfo > mCallbacks =
53+ new CopyOnWriteArrayList <CallbackInfo >();
5254
5355 final ArrayList <RouteInfo > mRoutes = new ArrayList <RouteInfo >();
5456 final ArrayList <RouteCategory > mCategories = new ArrayList <RouteCategory >();
@@ -497,69 +499,55 @@ static void updateRoute(final RouteInfo info) {
497499 }
498500
499501 static void dispatchRouteSelected (int type , RouteInfo info ) {
500- final int count = sStatic .mCallbacks .size ();
501- for (int i = 0 ; i < count ; i ++) {
502- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
502+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
503503 if ((cbi .type & type ) != 0 ) {
504504 cbi .cb .onRouteSelected (cbi .router , type , info );
505505 }
506506 }
507507 }
508508
509509 static void dispatchRouteUnselected (int type , RouteInfo info ) {
510- final int count = sStatic .mCallbacks .size ();
511- for (int i = 0 ; i < count ; i ++) {
512- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
510+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
513511 if ((cbi .type & type ) != 0 ) {
514512 cbi .cb .onRouteUnselected (cbi .router , type , info );
515513 }
516514 }
517515 }
518516
519517 static void dispatchRouteChanged (RouteInfo info ) {
520- final int count = sStatic .mCallbacks .size ();
521- for (int i = 0 ; i < count ; i ++) {
522- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
518+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
523519 if ((cbi .type & info .mSupportedTypes ) != 0 ) {
524520 cbi .cb .onRouteChanged (cbi .router , info );
525521 }
526522 }
527523 }
528524
529525 static void dispatchRouteAdded (RouteInfo info ) {
530- final int count = sStatic .mCallbacks .size ();
531- for (int i = 0 ; i < count ; i ++) {
532- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
526+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
533527 if ((cbi .type & info .mSupportedTypes ) != 0 ) {
534528 cbi .cb .onRouteAdded (cbi .router , info );
535529 }
536530 }
537531 }
538532
539533 static void dispatchRouteRemoved (RouteInfo info ) {
540- final int count = sStatic .mCallbacks .size ();
541- for (int i = 0 ; i < count ; i ++) {
542- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
534+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
543535 if ((cbi .type & info .mSupportedTypes ) != 0 ) {
544536 cbi .cb .onRouteRemoved (cbi .router , info );
545537 }
546538 }
547539 }
548540
549541 static void dispatchRouteGrouped (RouteInfo info , RouteGroup group , int index ) {
550- final int count = sStatic .mCallbacks .size ();
551- for (int i = 0 ; i < count ; i ++) {
552- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
542+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
553543 if ((cbi .type & group .mSupportedTypes ) != 0 ) {
554544 cbi .cb .onRouteGrouped (cbi .router , info , group , index );
555545 }
556546 }
557547 }
558548
559549 static void dispatchRouteUngrouped (RouteInfo info , RouteGroup group ) {
560- final int count = sStatic .mCallbacks .size ();
561- for (int i = 0 ; i < count ; i ++) {
562- final CallbackInfo cbi = sStatic .mCallbacks .get (i );
550+ for (CallbackInfo cbi : sStatic .mCallbacks ) {
563551 if ((cbi .type & group .mSupportedTypes ) != 0 ) {
564552 cbi .cb .onRouteUngrouped (cbi .router , info , group );
565553 }
0 commit comments