From 2ee6a2a83262d05a566bd713d238e89edfd33a29 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Mon, 1 Oct 2012 14:02:13 -0700 Subject: [PATCH] MediaRouter/Wifi Display improvements * Don't select the default route on initialization in a process * Add "connecting" state to MediaRouteButton Bug 7258981 Bug 7262522 Change-Id: I5cd39b09843783b7e1e17620ca33193f0f3b8fca --- core/java/android/app/MediaRouteButton.java | 34 +++++++++- .../ic_media_route_on_0_holo_dark.png | Bin 0 -> 1320 bytes .../ic_media_route_on_0_holo_light.png | Bin 0 -> 1344 bytes .../ic_media_route_on_1_holo_dark.png | Bin 0 -> 1337 bytes .../ic_media_route_on_1_holo_light.png | Bin 0 -> 1365 bytes .../ic_media_route_on_2_holo_dark.png | Bin 0 -> 1359 bytes .../ic_media_route_on_2_holo_light.png | Bin 0 -> 1367 bytes .../ic_media_route_on_0_holo_dark.png | Bin 0 -> 967 bytes .../ic_media_route_on_0_holo_light.png | Bin 0 -> 978 bytes .../ic_media_route_on_1_holo_dark.png | Bin 0 -> 976 bytes .../ic_media_route_on_1_holo_light.png | Bin 0 -> 997 bytes .../ic_media_route_on_2_holo_dark.png | Bin 0 -> 988 bytes .../ic_media_route_on_2_holo_light.png | Bin 0 -> 1006 bytes .../ic_media_route_on_0_holo_dark.png | Bin 0 -> 1818 bytes .../ic_media_route_on_0_holo_light.png | Bin 0 -> 1849 bytes .../ic_media_route_on_1_holo_dark.png | Bin 0 -> 1842 bytes .../ic_media_route_on_1_holo_light.png | Bin 0 -> 1866 bytes .../ic_media_route_on_2_holo_dark.png | Bin 0 -> 1869 bytes .../ic_media_route_on_2_holo_light.png | Bin 0 -> 1891 bytes .../ic_media_route_connecting_holo_dark.xml | 28 ++++++++ .../ic_media_route_connecting_holo_light.xml | 28 ++++++++ .../res/drawable/ic_media_route_holo_dark.xml | 1 + .../drawable/ic_media_route_holo_light.xml | 1 + media/java/android/media/MediaRouter.java | 61 ++++++++++++------ 24 files changed, 129 insertions(+), 24 deletions(-) create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png create mode 100644 core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png create mode 100644 core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png create mode 100644 core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png create mode 100644 core/res/res/drawable/ic_media_route_connecting_holo_dark.xml create mode 100644 core/res/res/drawable/ic_media_route_connecting_holo_light.xml diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java index a9ccef002863a..3ecafc3bc9b90 100644 --- a/core/java/android/app/MediaRouteButton.java +++ b/core/java/android/app/MediaRouteButton.java @@ -50,6 +50,7 @@ public class MediaRouteButton extends View { private boolean mRemoteActive; private boolean mToggleMode; private boolean mCheatSheetEnabled; + private boolean mIsConnecting; private int mMinWidth; private int mMinHeight; @@ -57,6 +58,10 @@ public class MediaRouteButton extends View { private OnClickListener mExtendedSettingsClickListener; private MediaRouteChooserDialogFragment mDialogFragment; + private static final int[] CHECKED_STATE_SET = { + R.attr.state_checked + }; + private static final int[] ACTIVATED_STATE_SET = { R.attr.state_activated }; @@ -210,10 +215,21 @@ public class MediaRouteButton extends View { } void updateRemoteIndicator() { - final boolean isRemote = - mRouter.getSelectedRoute(mRouteTypes) != mRouter.getSystemAudioRoute(); + final RouteInfo selected = mRouter.getSelectedRoute(mRouteTypes); + final boolean isRemote = selected != mRouter.getSystemAudioRoute(); + final boolean isConnecting = selected.getStatusCode() == RouteInfo.STATUS_CONNECTING; + + boolean needsRefresh = false; if (mRemoteActive != isRemote) { mRemoteActive = isRemote; + needsRefresh = true; + } + if (mIsConnecting != isConnecting) { + mIsConnecting = isConnecting; + needsRefresh = true; + } + + if (needsRefresh) { refreshDrawableState(); } } @@ -248,7 +264,14 @@ public class MediaRouteButton extends View { @Override protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (mRemoteActive) { + + // Technically we should be handling this more completely, but these + // are implementation details here. Checked is used to express the connecting + // drawable state and it's mutually exclusive with activated for the purposes + // of state selection here. + if (mIsConnecting) { + mergeDrawableStates(drawableState, CHECKED_STATE_SET); + } else if (mRemoteActive) { mergeDrawableStates(drawableState, ACTIVATED_STATE_SET); } return drawableState; @@ -425,6 +448,11 @@ public class MediaRouteButton extends View { updateRemoteIndicator(); } + @Override + public void onRouteChanged(MediaRouter router, RouteInfo info) { + updateRemoteIndicator(); + } + @Override public void onRouteAdded(MediaRouter router, RouteInfo info) { updateRouteCount(); diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..10fc8dac3b651d43510b15e1a386df73f415df31 GIT binary patch literal 1320 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 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8364a3672b16dcbc58522363d97cf21a45d1f0a5 GIT binary patch literal 1337 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)pVryh>nTu$sZZAYL$MSD+10f-TA0 z-G$*l2rk&Wd@@jkv%n*=7)X17vD?XPJD_!(o-U3d8Ta1K@Xd&I6**pCe82l_yKmCg zOmCh=H+rWjiA~YViQTb^W9qAOtsG6!j*gC8u_eJScej=-<+$4s!qp@ayG7%gli)|@ z62+rZzS^0=TRlG)zTaW-{K>pCzdbH}pQmxhKIUEOy)%~2>-VKSb8O`j)e2b=u<($s z@)G9VcJsdMPyIFb_JdaS(+^u^Ojb$t~x8AUyQ@$wS-@&51Nv=g;kNM(Pn;R{!USz*>S;=X&5Jz4g zXEo;!F^i5C^XrvcuP&NcVRQNTmmcQohQPUXvYvB!Zm?Y`Jh~^0N$%N883{%{&57cn z73((5S{C|f=YqhkR;!q;8w?-BnZFNDVDwzL@yN>8Y6;zIJBkySEcj|zZCoSo@VdmT zVwwAWh8;uqf%6B1Hn2)u`j{=%Y4_lq*trOC#{I{HD>*D!=dj6z3TboImaW`SDp(Z(a*{{x|I_SFGd@ z+G4Ero^SbM|Eb1HCT3*0EZ;C?V^ba94=D?#JFHKFiz|P;xRev4p>$yPfmGA7^`}lu zEMd&#OS{givh~%0hQ8L2%Iy!hYXvGqHNQ-6ft~JUeR;n=o#3B#c>0&UM=MJLIj;yw8cw_&%=9*} zL~qe`mNmwW6**EBtT$@^9pAt1UEN#8&)-`1=?9lhvpW^_$;e5mob^?#$-Vcd%o~zD z6yq5;O=efyRQs5j_0r|?7qi~q{pF}ya9MJ<4QUC&B*g563sMhhAoUi-hkS>~PJ%lEw7cO0y8>)9BP)ZTbLvU2^6Wk;S( z*kxcj`%87(Ch5CHESEN))6Y6n?XiE`Yn5z;bcOr=w;mTi-IHCx-+jqyQ&5OP#xX56(3tvf_;FG=phW(l+m$mOKWAX89d-B~;<^JX5 z(%|*$+r-LQk}VflJ*y3w6{~q$@JE1cp~#Pr<5p&SS`7m|C0A=M@iPm$=F($mHsQzp z|7$M^H2(i29}UThPOV(A$Lwn@a!C8<`)MX5lF!N|bSNY~In z*T68u(9p`*+{)Nk*TCG$z#t%F|49@Lx%nxXX_dG&D4MdD0yRj2YzWRzD=AMbN@Z|N i$xljE@XSq2PYp^NS%G}U;vjb? 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 PhGOt^^>bP0l+XkK@z9Zs literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0c200910a0a3e303fb221106292e65e080654b84 GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CjA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(mi#%N%Ln02po#yWm5-4)4KL6g|P+|cxjdE1+@u_=031X+NQX*D?_y9qMD&HN7OVf*DwBDUNKW< zcAc5=xVkucPw|^`#d883V@%lP_Eg`ueg6Ag`MJH{9nWTc+dq4`{@T5ZKU#7dRHXfW zC0uaeZlyd&NzzUiD{Je=AJ3{q_dE1@XuBtjH*(CRH3f{Pu4Is5n#WW-$yMWiZkTO8x}23eQ0FB#P$PgK4wm-}3J-SbIwl!z4btVUj!zb39%;u*rK zmkKeeE_4w(p!z_zfH{MO$$pOaml(_EZ~tFNUvh5u(Q=oX%SLkI@{gH9lphFvRQWvR z%hBou%JKJ~M4#WRroqCr%hO@mk{(~7WT_R*lk)cKOl`2rc!|S8_6)H-#0~bhb6un)<5pnXA(9|dF1)?{8{>n*P@Ya`KZAR_{)5^dk z*^3L?_J|kyU4JT2usvRG2j?5cUBSka7pAWjpRt6|=s-SWrpN`(&Wj9Z80+V>tP;AA zyMp~fZGwEDupgtE&x}W{xBK5@e7?s}!CfPEzvoBa$%@TCbRrqQbG&2k6UaUMeo+f+ z)6FMtzc(zNtGj<6Lk)AC*PSg>G~KrdOQrHWc% zv9Yd!xs`!IK*s))C>nC}Q!>*kacfXCWiJJ4kObKfoS#-wo>-L1;Fyx1l&avFo0y&& Yl$w}QS$HxPl(!f>UHx3vIVCg!0I+9+R{#J2 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2f70ceef3b7e14821f697eb18049f58ababcb68e GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CjA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(m3p`yMLn02powh$a#8Ke5{qJ{oCEs6= z5H^(vS#!n7QFu#duR>PNUuGRvX;$gnH9?(In-Y|h5|dxLE=~~E4iprrSK#1U{?UEU zoLTa5_wGi$Idk{k?#aIyH-2Q3`(1W(=FfBGX=UQOE=~O(+w+enz4)Uk_lGAhE_`DC zFz5GcPK8UYWsMQpkH2M!_pD5IFwbSEW8UnbQ0=vrsnas=M3yW=q5{LI1Gx$E1yVaS z&j~NOE;NBn;akVs^iyq295uF*#s?S*m@8OhgpPBm1Y9_LQ|4OKf9|zgvx=AAVDey! zPR(Ontib%rwNZriXY2#M4bct}3L)Rz)a=4u9J%Tf`KFI)cgo-1hV>V&bu{i!*>i%Q zTl#v#*+(ZB9=`Y`_jy%7irpqQ3q~110pkM;Tx_{T3cjjFZt`W+;9wPEINm6Jz~Tb8 zOYKU98~dz0txReUxIS3(qE2AhwUae&B~JGpjT!6&lqW84EI#1D`o%dwV?ZEM%K-NHqP4bgrmFXBJl-eK;e{R6o|0Z(sjy_VFol5xTI zhcfRjSh#Xe4_w2lWXh*=3JtMz5YYUJ`g)WPcKv zXx9BtO5#>Tn^ z=2iv<0U7&GqG-s?PsvQH#H~Tml)V(FK@wy`aDG}zd16s2gJVj5QmTSyZen_BP-NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CjA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(mTRmMILn02po#yBf5-8HP|MxxV;Ke#y zMVgf|1RYx?x2?>$xF|!^Wp&enUJ+MrN3KP#TO^#Cx}sdSc&%7FRgh)t>MgE{tpcJQ z5wCit%zV6Or|vt;%cWAXB1c?{&EDVr{m%A({lDV#w*05Uw*9}`vu{fYzu39RhI`Jh z#pXA#zdPUV5T^djd&%O(i!aRosy^wY3d2OJ{Fic9TzLutxOWk>m zOsRLrZ`=us{OvlA^UhMXfJW;%k@qu0gsw%Nxi9jEC66JzG34=f{=l#6OZ3v4q8@O3 z5SsqKiqW^TUv$TmKi`lk z!57|TEW+W{kS+O*VeJm1E1xzwlr1S+ytj1YT#a)P56nJz{JG{iORZpPfO0a!V)2WU z;*ZvGO*z2w?ve%jo$pgV1W$V3wbwZGw9`IiKe03QS}f=1GiDyY#q9Se%S=_Uwm|Gbb1Z3<#iJ~DlKP5A*61N6LQ}$Az21$?& s!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$LD`ML)78&qol`;+03-I3Q2+n{ literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7b10534ef009eb1171d756a1aa350efedf824f GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CjA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(mYdl>XLn02pz2@H$7AkT4B{=Daw@IR;1tqrQcAtl zG{-Ib(#-N_TXvkExwAO*-b}{ZU+fAh^`6iBY;*s!^>dr&m$vWwdw=Z-{pjPzZs&6D zv)u6TA+yOO^V{qf&hnmS_0-(@ST|3jt6Jp5T)D%se>#nRozY`mGIa}&{q?Y~at#3s zdd@B1AiMtYVh=lk$J4kcsei3G^3QC0YQrW=y*~!m9y-^w?wx4SJVmnV^^F}_62lnx8W%Ej;xq*ZS}4J#%<3@a;Qbees|3f%B)! z>{)M_UEtWEf2Bg+f0cQ9IAJtcSYv!PA5_?6=yvKrJ&?0^6DyS1n6L_w&^ zp4EC!W#1fJzC-AwyVU8xCr%~yte=)i9di9T(fW3Pl4<(Kum98|R{Z_>TO_VW;)9P* z#=l#>nwninf)4vE{vDIAI4h*L_?qC0XAfTW&aglKV0p*h7e-YVN^RDzi~0Yu^iEvc zo{wQ)(zi^KpOp5z@>cs_?`zxleSI5WJmc+KF7w19U;3VtQ&&YGO)d;mK4`E@SX?^>bP0l+XkKP|v4o literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8d37b9940a188047933cd81b90f8106523704b67 GIT binary patch literal 1006 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_CjA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(m`#fD7Ln02pz2@H$9xB5A;e7Re^C;#% z&55Z3yjxZ*Xq6JvU6e54K&Zmoo&~N!Dr|=w1auD_RS=ruv3rHDlkVi8MM@l-wlp2G z=eQ~FGUbzbR+jPS>iyRr&9(mgXQ}aDmh6Y`bKdQKKDYYZ_qy|YpU1EnO^}Y=^krk( z`OdglR`%=nEB`W@G?{2G-1irf*&mVj@{njU29=1vVGo9%j$nyWlvoTXnVdvPCR*g z@(%voIl=SwR|L&^#yr76MZt33!TuX*+s!qtDdU z_<$3`EQd`ueipD;wut-PE6dL=N=cm;de`^|L;r(m2|iEc&mEr`A@g~SJVU1AsanaB zcWXAix$#atzW&3LuHT`N|D131u|0h*y~W>k&%*4)1jU5wI)52fT+sv~%U1Ett9GS7 z{ym#-jZLXXSgAb6?Z*-aCv8}~Y~Sj@*q4?9pFJ}5SnD78=D7dCzwj+bUunJb@wRfc%X|@g|F#r*FQNxJ^>lyxckMLva3wo5lifExtCS zU#(prtC{t3KeyTCXx7P6pHG+B-fvbho&Wlq!q5BjQZ$!z$C3& z;u=wsl30>zm0Xkxq!^4042^UR4Rj3*LktbAjLof#jdcyotqcqTGWMTD(U6;;l9^VC zTZ5u0dnr(ZB*=!~{Irtt#G+IN$CUh}R0Yr6#Prml)Wnp^!jq|>e8=GF>gTe~DWM4f DLcy;F literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..483b61270a0eaf319d9fe3ee9224a240b95750ed GIT binary patch literal 1818 zcmZ`)X*ipS7XGp|2}3Po&{6wVl_r)!Fd0H3)~Xs}X#@#XYb~Xy#@e8@OfQX&wOX`A zRcpPZX;E5&b{Hutq*_%SVwqCwP4BNeKkj>;bKd8?=Xsy=@0@H`7dr{DBVqsmNZ6BX z-9&8lEfI%A^Im0ELZ7z`~z-@A78=8!&nu-z`wp@ZN3n+(0jP6M4qVFK2=du{}ffn~S zKcsRwuGbTPMoPhN7^+Ez!ErE2NPg%-oLIy|vf53SIfu(>eYUj^J+ZjrPpx;Ic?57j z@tVnSWhfiM1}Uqy6W9S8dTAwzvG>KMYxky+_1W8<(A{c&S8swt};pBse# z7jS^>HdT2IQgV1D9x_=X`LHGaaX_!47Iobi zQkqAKe0?GONG+0$%OT@y=#Mz1DJsO`MY_Cd1mDRBq70J+S3ovjvq;#s189r>$f8b5 z#L*JE&qZL^j&Fx3QE^DgqpDSRs+~KBbVOO5LO8O@tpz<69F%tN)`wH~wE9%*-aUCS~50`NJuK&%Q?LjaIMI>Z{z&@~3;Isk2Z81>fVKHLh&b zp#+Hp~UaQFY{zG&z0Xr*m~&aw*xYpfZ6AYx2VI55!h?s$cDe3Fhnl1}x(r+)dN8(Qt^8 z%-+p9g`cmO7<3&sl#R$UA)f zhf?Piwd(gg&pyt(KN=~H86TYdvciFLt{4Xef33HhZ@`gcHjJ8V>`PyDDhhT?rJa&H zFz5`&h+dq*zkGN-5^cI>*$)?md7PlF4(Z*p>yGM~TYzpPvC za4FL#GI-MNVG+13{H%;P{_^q%FcdY$O(Cey`taZ@uw+B zFhKEmw&M=yvJ%_oeGqPz17sit51v2Q+lw-(w`%3KdOH#LKDT}Z38YyS>8veE?>zUr z@cuSk0Ze*rgmm>-+R79crH6O!kGbbM^Zi@>^rDY%noYXk*!eA6i$POUV&XAMIT3B1 zTid7gY}Hc^t6mZ5_CTwnW^Zu;?XWB(G!Wv1SBihqG<39QTRoSbK?E~H!$2l7K~FR$ zkyPC79g_qZuZacJz@;Y>@eOqt80ih}<|RGHwi@Ay&U(As|^MCV^CmOzfB`Nz`D1Ec980t_(* zhA0CJ3S;1IU|?=!YHnnN!kC(4Fs^5xy!eM9Jdzd?bn*Wi)P91;i42P0Hk^(OijDV= lrUTZr$N;*keYk%x-Hq-~yLkQu{o9WM>e*iOJE2RJc literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c3507dc30cea38dd4718b04981b62443ccf9561e GIT binary patch literal 1849 zcmZ`)c{JOJ7XC?SLa2SK(1d8GnzSL+U{J|e5*i|w+NwfAQ6iSwrfsNKOIl+&wiY#Q zXR3yvsa;1p>Y%OV)ri)bT8c4tYN_R=@2@w1ynD~R-}&yn-?{g{n@)AKlao0n0|0;= znPg29qt&;79uen?VD`8eB!dVP0sz$h1lyxaiMd1+&5j80dg1e8f(RhdC;*Uf0suHE z0I(}AapnLZ1`7ax`2m1gApodH6gNAYiyKG$9qg=u!*5>p@@cNPA{{~Uj1nX1zhT=Q zYAK$QCR-C+_2M|H{N)`~V2X)t8t9FfXK{)x6x zVW>1K=Q+RDP39&yQwi#{6i(R-A%!4a*I2GrS56M21kfHlp%|@~a-(_^@zuFSY@=M+ zxI--C^H|^EVR7P8)0UL^KkOhDntxgYt{D_vE)aE@SRF~*01M`*^r~5%#~x^!LEd+2 z+*RDy%LaKN^*!fIY|E!{;aaLs^{8mI+kwM_N&>TY67s-^Tbe?bT;^TK31TXgK3?QP za7T0UERMoKnG!4z9$;!?Ly1-OP}_dwFnAR7_YvVdzpPZDP7-Uwa?e>vnoZIZIPA7e zLKV6Fj)oZ>kD6K>&VWaMiCTp4oY+_Gfgd~%@7Qm9iQN2D;$#|$4|Z@{sCnY3^$gDOo$PWw9Lq?jFJJr2^UGAv~a zxB`Z7v{9u>ov8^rpS--g?X0FfE<})mvN^Kdks3ogDPFAG`IrT%(~1JWGgk;c%fXD! zI8AoDeTDC19mU{VTH0$cfz$9M%?}kZ7dfZ=gux@1SXu5+kqrHrAh@5-;GoomS~lOOX&>G z{_G;J+#W1nLr$-DQSv4UclA+|kljRtaq1}yHw#lcL#S~^MxxlFqaqiPgNRV9-QM%v z`pgb#_Is(~7!qsnX3yYBk}%=yr1a1EJ)rg7ms%fxy>uC9xE0l-5C`3s*@iZj{F3e( zA?j{`;xzdm8tbbN?)4=QQS184RMh$p-F>-nq-veCiUeYd6bVL`9#AIz_(A>}4#_jU zaetGayT|`zpcn7F5R1$||4vuJ@V(K{8?Kj{Nm!`kHDmh1@5$C%K}k~rm_2rzKGY6x z3esRyJpl4Ev~)4}qw$?@nEQnt>m?}8>6DHnj9`Iupg>_6xauiAA$esPPt*2C)@qpj zY*4hU(4MosB3TUfmAsQww!9at0QX9T=j)s0j-7d_uOdP}&P`L>^@;paU3<#0+6fJ&$Sm;=`~utqez<2LcE zWMlr7@Yg3x9@3FI#a4(Ls>E<_$X$RFN1EBIc}g6`?{|4l3YsRc=C z!=lE8Ts%;ZeEy{x#a>PS6TV9Z&8WoiI=tp3!Wj=Gd)fR%b$rLhtY$WG$x%9&+cY^dtm_C#?hKb H^h^E^76B-# literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..24c65198f21a3d329caf5f998636157895a3d7cb GIT binary patch literal 1842 zcmZ`)X*ipS7XH3SLWq#q*NSawNhQ%`P;ICLEsCPdxFjW(wj@MURf$|RR4>(5Yb%|! zgSOU7Rn!t{rdoz(1g)yZwGWE+M$}R_y}$1KxaU0Qyw7{id7ty^JSW@R%T-xXR}laJ zWp_6hUm23Vg#uibA4SJa$N(DYm~l!}E_h<({tkE{RscZV#fieb+TPu}sW z9@jaRo9-rRS(HeSjqhrNi()g@$d7%jT z;OpwVG^FN3XGhJS2TcEBrSZ%f#Sz9HdiZnv;?q3HEuc;dFwx6AxjxQHT8SH&ynLj6 z`>ow*bIil%1foWV`ct2HO=z36wj^;`p&n%=_+4<;%vjD+rnNVrrK{5VLVcVgJUIpL zRhEEt;75*9dNC^SAaAw=s)olTpzBdBXzkY*V$F@m&{Uj_KUPcbB;*+=M>T=2wxbVl$6rqgOH@E-c$0Xw3SWT*`qLcE5gsJ(+`hMcE#r$KC>N)G5%SPhw_Hi3gbo~eY}R>(mzNhEZl8hjVgoipQ@V?DTh|= zR(0z$?^*EE3f)cq<-a~LH>P>zdo9G@DEdSwOMCcB_z#Ti+fPK?x2jZpL7mAXDIP;8 zJ0_|RsTzGq5v40}tW44?IV+M5cz%(O1$siEj8uL-%k~;uxTqkH3`xFjJ#$q*?I?R&h$G~^0c`Hp{i>}z|3yFCdJ!KAEUfETu+k#=iLGdYZ051z2 zdFx4kWUH4${_s=v?U3csrg_z_5qY#{Z_{~Xp=c}B)ML;AjN7d!)?qrV>hMNR3k%)& zxUJl&%e77nwZog9ZWWQqDb}r_F1_2{liwk9iB)>Wqi4CFL6dGwh5U7mRCHjpOG-SI z>svT`+AT`1VTPT&a^1ho7qb}^JQIy$B};_x&ty*5QU?kN=7E>eE7QBChKjZ}1T8T% z=_2fm*Bw`@1#~Et=y(60#UT_r8;e#|qos7|*u`I3_xP$2)hhl@d8SO{7n|b81wLSd>DtMciwKN;%9xVFRg&VR{bnLZY{W5K> z+yZk?J^!v9XN)x6!JYe}&6_pvGs3Qy-}7;pEd`WfW*?+N%Sh`hKi((Q7@D_r@1Io? z$C;|UseDjyOOz^3=vLfg*-x|UI;l^~3~LA}CM}7-f+3I)GgI5OXy3jS#pJT170XAR zMLT={@t84}&lXc%%3^ZQX4!nN-^%vPo`->KgO+Pmyj&-Uxdb$ve=FoRx%^Z@EGqH zd>ezF&X?0J8T2s~{SY*$kmYzO2sTj-B{>Z{XmseH2l&;@>jdSLY<(^gYxyyu8l2AP z9neEjq&Oi0TtoH`IQgZh@jg{#Hcu@cU)AZ&8bqpK&VLB04ZxhWFWE&NNq)L zqIVYj8+TFG_jVEcOV!kOZC)$hjo>C89IbB;CUp;43yY#9YMB2uFQ09t-@*;1s&G-M zvbSKCKn_d@rzOzs!{X^O0El=35l6t|@B}{s!QS?ey{#<{f5;w>_m1j(`4>S9BRo3d z;{O+556H7+0-bLgPB9`9F3{rXfKxc*4Bf~*h89WprPIPM#=WF}`(1!L*~_KYnaceS DnmiY6 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2be0380fdbfcec7b9251b494d497230de555a612 GIT binary patch literal 1866 zcmZ`)c{tPy7yiv+>}Dq0y_Uu{D9P9w<`y%|7-P@1gzBOhVX`#HR+^cVOO~R`U@Y;4 zE(Vn~%Y@RT&~+`LW_q%vY)|Bi@J-)e_xs~J=Q-zn-gD0Tod3>A_i!W2%c#i!03c6s zBzlSw|0ASe;{0dW#dl(Wo+r2x0H7&H_Ir?on1fHMo#9Rb`I1B(R1p)w$0|2Vg+>VpS#SK`nGnokN|M2pz>O65pI@-}MMvRXC4F>_; zMm(iPArib2rk0ERLN#eh16N}T^ddU`j0+1NgVm3h7-l$r`l@ny@miafp%?0@1XXEU z|8S+$nD3K0!rd#kbY>}G^(G|ror)S`pOcF9^)24T$Jz%o;S1bClhNYh;yHcQ?|T^P zN^9A^wa|KDM_=^*pSIp(kMVxWA2IB^c12Du3#`N>qJSHcJ1WV`hk7x389Kcfm%-2R zN+j1E6@RX-&wJTO6uMd$aU%#*obpPl5#-E2!-t`DU``PGO4jWWZ6YTw|IRII#lSc? zB$)}}tMirdt_DZcPRhEnr5B|-pp(!Gu>5d8j3)Ax6vm;!N4o$t4BBC;ZpOdW)%d{c>@71*8eyrZS(Q60EW zvO|5NSQ*5NIh6a2Rm+TLb@6v`i6t{F93!N>i>4@8^kQZ^1w6F4da&HY*Om@e+iYq) zCAk9Fz-+*gy3;CQ{hUM6*&}%s3Ldb?*NHrkk9AB5C}m;`Pbu>0euD^EDr3;wBJ4pIr`c^ zUOv|}s-UaeS~}eG8 z<*=15Y`ePMEuE=WrSAk|tP#$wWg;2r+}M4NpW3~p6_oTuI(h&*n#tN>x+5QUrwh`( zqHC_2QxF`9F8BG@ty+bp5!ZT3w$Ri<)Zy>Y!s{DLEJIE>OBSTtd!UMpkY5GH)sRku+eS}4vmm5j zzpj~|;b`{d;2Lht2;Y9}NrzCu-|UeaN^woy7z<9~n%26Vp`fN=V{TgfM}fIZq* zt>)HA0}ALd2Aq%!oOV}v=LQIulG!sP&O*cDIYWAhW}!hS`;uZHd)j9j(wQ*}zAp-8 zKU{yl0Ht)CI5^q?K43PSYt8?I8nkl6uMH}l{FXXzJAZ1xID(#R zOOxC=a4TS5D_yo@=<)5@f$X=BHG1)X2`k2Pv_m2vY~()OyQm*Po|bML32|GJT06o> z5q^9bwv2hN9Af$#Fszlxk9YDXP?kYM2BT~1GipA0-_rA3VvLWKLEB1qE!NB!#hs8h zX;od5sgWBI1jQm#k!!!qK@tP}vn<}pkwj!g{7yVbUEp>@7gwFU9Z=OX@JCw}=cdH$DiE)0&=qmGvv|K+ zElR($_MTyeXKtSda2_^U5VdL}!kT0uG=(#DwF^!>SAr@>+o zs|&usUiEG>|D7ykC;WTVr5katr1x=ejk}}9lVB=c!@*AISo^_p=lDT6_*b;}{Lw^i zB2_(}{iTnS$g;s0)lxLK@AYY$oX2VDU57hM8t9R*3GIEOz!!DRItfP5*=av3$_aX! zRJIJ)!Z6@7EivJr7OS%d>9vNZ22i6vi{Ax0mUJqX8Wc;zonz3%0GMG+&5TVk#u!sC zQ&XHd7H4j5jKShC7?02%!T$&%qNrgZiT_`qZ7CTi7X18U!>>^xvGG9+8bF{%1=F-B b5kco^p0prp;za@N$4>(&BsU_@E|C2n=EW$V literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd69bd765cb138a0bc1363497b86539ffed39d4 GIT binary patch literal 1869 zcmZ`)dpy$%8~^?0GA5Vl;$GX(#pSgTAu@~ETz0g~C1GP*C6~G14mR)3YsEp5+#+30 zycMaW%w@TRj!VONT@phdjh&J-O608fulM}%exJ|td_T|S`+5HSUhpQlsls$&005{G z2`*$AV}GQQqOAV=T+FnLkfTYY<@svKIiP?gs!i z7XUV7Beoa-63_s!LD zXk?^~)8bthfAX$ThyQ~2DdYNg84Y)5MbX2I7d#ilxs`Fg>ND%_8<|OirSr*52hm37 z!k_7D!RPC@Gt-+I2RYooVMMKN`q$g#-^4+}&f$S{KtUh@vC9`LPdcvcm`62IzqHxSPsC0&qU1y08M~0E>WDj!N8( zT=sV)Ux33cfNtJt@F}^+Ue4B{hvo^1lw(8?Q36$u#cylD4VsgDc@?#Km#+xQroLo=dEx}ESC{!t zOfbB$;juqhr#LM)4c4Kax)x(dK3v{oDb0up2C`KJ;Ue9wwp(wvd6iCgbTY!=0#U() zO-B->3Q`Z`C>0lWXA8|xHk9S`h{%7TSPDpUr(It1*s4lD&Z6LOYseUkgl8vvlR~Bx zrt;~z);t~G*dgol@ZD69Rakij|=0TQQ(?n{+b{tH5kXtXs`5RmsY=?G`e# z6#>bhX3Tjqu0;FUirGlwDkq0se#IO5(Ug2uyUx0BW1@a5&B*wPgOZIYcYv__ss6b9 z&+=0)MVPsZ4^K-ej0V-x^i}DV$@&0co;WCnV<&8Nruq-@3l2NZLb|rJP{=6o7`}hQ z62FHWwN-gMxhmjQxqL|b-rCQ(Z{G>OI^bsKi#8urYOxPBBVwhBws17^9<>=-I{S|O zY=2kww>+{^=cX<(64BOTw6uJ*Yt(s8;AtEHaGm&|`Osztv(Qem$D6BVp6kQ;h z>7N;n3MwLjD>wFTL!yBpNE+CD6lPX+bmC%loD^7Dj7E_ScoO=Y%es4NiJpEm6pYx@ zzkURj(QdlYmMWPdwksL|Z|-Ln+jhbG5I=oghUj37z@7H{HlIV` z;tmE9*XqP82!8+VtVfn2{H-qyjP>6LXr9@ef|ex8IRnxTPC^K>WiWk-r=e z!Rb}hu+M|Z%6ica<=sDn4!NUXn$Kg@+>lB^?BvJNj8md=XMbC%)ypUTra=fbRyOAy z=c;mdKTn$8I>A3<<@wb(&j0EypJ4-WUy2YN%DNrlyy+CY<@JXI`Mqjypb1++XSFryQg7SI`hixH zfx^7Z?wCPJyhp!@lSE=leHPsA!aKmA%e{DE#lCfF=N$&5>r!hCcdQmDu#z(S#xy(Z z{01WF`qaT+^Aa!NKesy`e%adICeSKQ=O zKA@V~JGHc;qT0N6+xh%Y8o?j-f4Wic7L1GZPSj zZ+pTY*L&10q)AuP(pTUjipUkm(mm0e3;lWum%My8(SX7ZLHVM~(cf;~xCAV8>OJn9 zDQJm$|3Y&j(8Ptry(wrCsB=Re;kQy+E&(f{q2FS5F6*uZ+j$s_{>K{+1#WU=~Vi__5EYTQCa}3%X zjq$-??5&R2TUnW-kJzKp-e=qU{w9cwrk`V`{C@$`8k!&z==}I_GMX8mM2lqr&h+R| d27(w#JHsF|X!MkrKE@AQ1Bk99mpU9Z>o1RoI1>N> literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..51588564da424e6fe97099f7462bc93f646b73ca GIT binary patch literal 1891 zcmZ`)c|6pK8~)Bk#x?Fij=>FxsTevit|yIk=^D&FI0qL@AYmu|hM9mH2S zl8a*?bA0Z`u^8ne$euJ@ho`Akx~?(I#lvMWHrybLKf%p2#3Q?}M`bu@SY)evbL15* z>amVGso2G(N|3e;cAtd_r@In+6_LkLIN)?-Plz(Sb1q+gYQ4W)u497ULAP4m=8_^s zedRX0yPM`ByMQnM!p0Qpr{R}x$Gm@Z*POdK37`@jeIj&X4hZ@Ef zPBsNEk2MY?7hg^N=ukcV1FXsz{$lC48R-6Ve7t7k@k_>#&9#AfzDtxMs?T=WM8JbJ zw#o9%$%HQ&@lu!?i@s7n?mj1FS1HG=kLUO%WLZq;1DL+lVNW1n#S(3!#DtGR@bz7u z`H1X2O6W{yJoJp*BLvT}$5xGJ{hZE~BIpefdNq7rw zyk|f0PUL>GYpgO>0ZTqzlQgNy|8hN53UW^eL+$fk`_yrU09SGRQrzNrmAkJ}GM zf~jqJUu=aqp&1!=?~cJD#ULl%`@m(rk#QLtVaia;HV>x&Os0fM%mB?Topma??m)6% z`cs|?6WWU`Q^4(~&DW3U9pYOGHPA(p`Jh4Wz*1*Q!6P^Mm-Su8j<9b;v4IA}LCt1_ z(j)|*2{lmCOUOCo^plF$h-eL1FjXk)y~$7L?1b@r2bTqXIwQ-97~hHMQ|XOGVB%+0 z>=pYUAP(4KR5r;C%|GuJ~}%>_tMU{>>^3ovho?La0<>} zq5;wd(SaljsWQo~>XNrNw_>Sl{Ual@NzGLj<;kIP$KSWCg1@D_yK|jtfO!zlKonL>hE421*LeQ^Dw|2O<>4S-Prn958|yvdyk* z6C;??jRLlH8yS7+nZx;+V+O718%rj4yA~7zB(ovQ#ne4AdO5d=1*)gW522XrQzfi1 z4-Gp2FWZOgYlph4h0@V~AGRmH`EksXGX%?i1-J&4(f5)sJr+UNE?!Mdm{Y=z87RHv)a6|4rxP%+?V9|riltobQ`#wzgj-5 zVyuuc5}+8>zV&w0#jdGGVPVW|KYVZ$niI~d_pmy+#nl#T zXJ%gpwJEo4rvbcM3{-L8l~64@R$!ipC~?*j%?YM^ew&}mCl_9O21piJj*dqZ&g?jJ zJJnUa0tcUJzVn45BvEgX%a(oG*-7oA{U@J-D~Q7&$s;X$rw4y8{Ln&qu+z%7Drt%T zOkvZT+~7jDwLkdMg4iY1Zh3mcCYI1so zsBjd72;6db$wB%Jsfidw9o>sN+_ti*pc{)J0uVtHglxgQ5 z5;5A+f_cz9(JQg~O7h5VZ|;cR!hnBMFym6vuRAY3ZFy&w4AWDzO*RAat!0(?CU)l+ z9jJCOH!I3?d(RF>5vofOzn*+$$yTsV=kX*{rD7 z{6wL2Rja(i-FiB=z+c7#G8y!Kf}Qih#3{GN%e3Z&7Ib-_(`JsT^ssmF;Ph!yLO5G< zbMbY8tUfm>uaL1-&x$FM4`f~p1YaK~e9RftRk&cL_|6xX>RgbTZ^L?3A z*=Npx&WJv7&B4=%M5QZE8^7cI(t1z(TGs!=9XCx#@P*Hh?Htb+`v{uh z8qAAQJ@Nnm literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml new file mode 100644 index 0000000000000..36e01f6ef7d38 --- /dev/null +++ b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_light.xml b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml new file mode 100644 index 0000000000000..6683db84bd0d0 --- /dev/null +++ b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/core/res/res/drawable/ic_media_route_holo_dark.xml b/core/res/res/drawable/ic_media_route_holo_dark.xml index 0b267d7cff959..b4c1fac9cca9c 100644 --- a/core/res/res/drawable/ic_media_route_holo_dark.xml +++ b/core/res/res/drawable/ic_media_route_holo_dark.xml @@ -15,6 +15,7 @@ --> + diff --git a/core/res/res/drawable/ic_media_route_holo_light.xml b/core/res/res/drawable/ic_media_route_holo_light.xml index 377253a2e077e..553721d6678c5 100644 --- a/core/res/res/drawable/ic_media_route_holo_light.xml +++ b/core/res/res/drawable/ic_media_route_holo_light.xml @@ -15,6 +15,7 @@ --> + diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 36c9c705e3221..e5b9637a44b4d 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -105,8 +105,13 @@ public class MediaRouter { mDefaultAudioVideo = new RouteInfo(mSystemCategory); mDefaultAudioVideo.mNameResId = com.android.internal.R.string.default_audio_route_name; mDefaultAudioVideo.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO | ROUTE_TYPE_LIVE_VIDEO; - addRoute(mDefaultAudioVideo); + addRouteStatic(mDefaultAudioVideo); + // This will select the active wifi display route if there is one. + updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus()); + + appContext.registerReceiver(new WifiDisplayStatusChangedReceiver(), + new IntentFilter(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)); appContext.registerReceiver(new VolumeChangeReceiver(), new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION)); @@ -116,13 +121,17 @@ public class MediaRouter { } catch (RemoteException e) { } if (newAudioRoutes != null) { + // This will select the active BT route if there is one and the current + // selected route is the default system route, or if there is no selected + // route yet. updateAudioRoutes(newAudioRoutes); } - updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus()); - - appContext.registerReceiver(new WifiDisplayStatusChangedReceiver(), - new IntentFilter(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)); + // Select the default route if the above didn't sync us up + // appropriately with relevant system state. + if (mSelectedRoute == null) { + selectRouteStatic(mDefaultAudioVideo.getSupportedTypes(), mDefaultAudioVideo); + } } void updateAudioRoutes(AudioRoutesInfo newRoutes) { @@ -159,7 +168,7 @@ public class MediaRouter { info.mName = mCurAudioRoutesInfo.mBluetoothName; info.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO; sStatic.mBluetoothA2dpRoute = info; - addRoute(sStatic.mBluetoothA2dpRoute); + addRouteStatic(sStatic.mBluetoothA2dpRoute); } else { sStatic.mBluetoothA2dpRoute.mName = mCurAudioRoutesInfo.mBluetoothName; dispatchRouteChanged(sStatic.mBluetoothA2dpRoute); @@ -175,7 +184,8 @@ public class MediaRouter { mSelectedRoute == mBluetoothA2dpRoute) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo); } else if (mCurAudioRoutesInfo.mMainType == AudioRoutesInfo.MAIN_SPEAKER && - mSelectedRoute == mDefaultAudioVideo && a2dpEnabled) { + (mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == null) && + a2dpEnabled) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute); } } @@ -393,22 +403,21 @@ public class MediaRouter { * @see #removeUserRoute(UserRouteInfo) */ public void addUserRoute(UserRouteInfo info) { - addRoute(info); + addRouteStatic(info); } /** * @hide Framework use only */ public void addRouteInt(RouteInfo info) { - addRoute(info); + addRouteStatic(info); } - static void addRoute(RouteInfo info) { + static void addRouteStatic(RouteInfo info) { final RouteCategory cat = info.getCategory(); if (!sStatic.mCategories.contains(cat)) { sStatic.mCategories.add(cat); } - final boolean onlyRoute = sStatic.mRoutes.isEmpty(); if (cat.isGroupable() && !(info instanceof RouteGroup)) { // Enforce that any added route in a groupable category must be in a group. final RouteGroup group = new RouteGroup(info.getCategory()); @@ -422,10 +431,6 @@ public class MediaRouter { sStatic.mRoutes.add(info); dispatchRouteAdded(info); } - - if (onlyRoute) { - selectRouteStatic(info.getSupportedTypes(), info); - } } /** @@ -693,18 +698,25 @@ public class MediaRouter { oldStatus.getRememberedDisplays() : new WifiDisplay[0]; WifiDisplay[] newDisplays = newStatus.getRememberedDisplays(); WifiDisplay[] availableDisplays = newStatus.getAvailableDisplays(); + WifiDisplay activeDisplay = newStatus.getActiveDisplay(); for (int i = 0; i < newDisplays.length; i++) { final WifiDisplay d = newDisplays[i]; final WifiDisplay oldRemembered = findMatchingDisplay(d, oldDisplays); if (oldRemembered == null) { - addRoute(makeWifiDisplayRoute(d)); + addRouteStatic(makeWifiDisplayRoute(d)); needScan = true; } else { final boolean available = findMatchingDisplay(d, availableDisplays) != null; final RouteInfo route = findWifiDisplayRoute(d); updateWifiDisplayRoute(route, d, available, newStatus); } + if (d.equals(activeDisplay)) { + final RouteInfo activeRoute = findWifiDisplayRoute(d); + if (activeRoute != null) { + selectRouteStatic(activeRoute.getSupportedTypes(), activeRoute); + } + } } for (int i = 0; i < oldDisplays.length; i++) { final WifiDisplay d = oldDisplays[i]; @@ -840,11 +852,11 @@ public class MediaRouter { // A predetermined connection status that can override mStatus private int mStatusCode; - static final int STATUS_NONE = 0; - static final int STATUS_SCANNING = 1; - static final int STATUS_CONNECTING = 2; - static final int STATUS_AVAILABLE = 3; - static final int STATUS_NOT_AVAILABLE = 4; + /** @hide */ public static final int STATUS_NONE = 0; + /** @hide */ public static final int STATUS_SCANNING = 1; + /** @hide */ public static final int STATUS_CONNECTING = 2; + /** @hide */ public static final int STATUS_AVAILABLE = 3; + /** @hide */ public static final int STATUS_NOT_AVAILABLE = 4; private Object mTag; @@ -940,6 +952,13 @@ public class MediaRouter { return false; } + /** + * @hide + */ + public int getStatusCode() { + return mStatusCode; + } + /** * @return A media type flag set describing which types this route supports. */