From 75af171006ee80aaf7cfb56ded1378afe0084cca Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Sun, 10 Nov 2013 18:54:03 -0800 Subject: [PATCH] Changes to support new screen cast settings screen. Fixed the Preference ordering code to consider the case where two preferences might have the same order. In that case, it falls back on the title to disambiguate. Previous behavior was undefined (and technically not stable). Expose the wifi display device address. Perform wifi display scans every 10 seconds instead of every 15 to improve reponsiveness. Make sure to define routes for wifi displays that we are connecting to even if they are not yet paired. Simplified the logic for adding and removing these routes to avoid possibly getting out of sync and leaving stale routes behind. Fix wifi display notification icon. Bug: 11257292 Change-Id: I8ac15fb17d83758c0bdce80399e12723c367b83c --- core/java/android/preference/Preference.java | 6 +- .../drawable-hdpi/ic_notify_wifidisplay.png | Bin 941 -> 0 bytes .../drawable-mdpi/ic_notify_wifidisplay.png | Bin 721 -> 0 bytes .../drawable-xhdpi/ic_notify_wifidisplay.png | Bin 1096 -> 0 bytes .../drawable-xxhdpi/ic_notify_wifidisplay.png | Bin 1427 -> 0 bytes core/res/res/values/symbols.xml | 1 - media/java/android/media/MediaRouter.java | 77 +++++++++--------- .../server/display/WifiDisplayAdapter.java | 2 +- 8 files changed, 43 insertions(+), 43 deletions(-) delete mode 100644 core/res/res/drawable-hdpi/ic_notify_wifidisplay.png delete mode 100644 core/res/res/drawable-mdpi/ic_notify_wifidisplay.png delete mode 100644 core/res/res/drawable-xhdpi/ic_notify_wifidisplay.png delete mode 100644 core/res/res/drawable-xxhdpi/ic_notify_wifidisplay.png diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 37a8102368321..f7d1eb72f0802 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -1069,11 +1069,11 @@ public class Preference implements Comparable { * @return 0 if the same; less than 0 if this Preference sorts ahead of another; * greater than 0 if this Preference sorts after another. */ + @Override public int compareTo(Preference another) { - if (mOrder != DEFAULT_ORDER - || (mOrder == DEFAULT_ORDER && another.mOrder != DEFAULT_ORDER)) { + if (mOrder != another.mOrder) { // Do order comparison - return mOrder - another.mOrder; + return mOrder - another.mOrder; } else if (mTitle == another.mTitle) { // If titles are null or share same object comparison return 0; diff --git a/core/res/res/drawable-hdpi/ic_notify_wifidisplay.png b/core/res/res/drawable-hdpi/ic_notify_wifidisplay.png deleted file mode 100644 index 35f27df17260ced48bcfa57c102153a7af95894a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9>jA5L~c#`DCC7XMsm#F_88EW4Dvpb_@(mwVp1HArXh)PPgsx2^2YA|NN|UqVaCo zRu}b&8WUECa7`5D>UD8hdD&CMuF7TOqHBwm1YQjA2yt01bkTELK!kMJ_p`QL)$e9o zoBuvjA@7{>@8sFJ)$jKd|9f9^_j5v@6=rOnkH&2vd@>C8SPeba?RCi5k@<| zzbTh=-Wi!;Um#JD_GHtO+`29g?Z)(9MbTm}D+6j6E132$^fAUaZayGwUA{^ym!~+G zqcP4)!@on8J&u{bQTjkuN!T@(;$mTL*2r1&mao(7`K$Usxj^^^Cyykn-KtsF)?5?d zII1S1Y{2l2;eA7KkI@DbfAJ-oa=#tvSSe`DU~}~Nb-_hO7mk$HJ89T)ACcL>vxj}% zt+@O!F)zU_TpQZ>zf{zxwaDB{wVf^h;O_SuCwA(^Ov~T={LNeEu)QqnnDcu*b|eK{ zz4lmRt)a7<<6p@g9CJ*J6q#cyc6f8Mo~(UfT_7I8Xr_GWuwLg9v0EE{3Knq0*XuDq z@677&DDh&`Sp7~e)K*Gs!z#WjkGHKA57~PE(T&uia3B8&Z#|_Iue9vuI=iucUvqnp zrjqMi@pVQ`58bQ8ZuM_`W0=HRaO|5{=vChCBwa@B^2kZCLA3fR&;->JBA1vuPyo9rFh6LE8X zdEE6`NlJUU%*`CN_x_am&r`?vJ~*`|)NE}TFh#1CxJHzuB$lLFB^RXvDF!10LnB>7 z16@P25JOWdLvt$=3tapM_`B*=!~{Irtt#G+IN j$CUh}R0Yr6#Prml)Wnp^!jq|>Y{TH`>gTe~DWM4feKc}> diff --git a/core/res/res/drawable-mdpi/ic_notify_wifidisplay.png b/core/res/res/drawable-mdpi/ic_notify_wifidisplay.png deleted file mode 100644 index f9c8678f7f644922472396a865a8359d866d543f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)Rw3q4&NLp+XOox0agBv9mdeRKQ%zZcF9Eo8FwO3#gbh z+xYuA+xY*V3m?`mXIXI1Dw=8MjxI|jj{{O0HZ8cv^n-Us`zH}aTc&;OjY)hvSZ*C) zxWV?T(u;GeX#3lMe@qsgwZS^V1&lUqc8r#c=U4r5tzBDog?a1hMP_{tzKWYy{tGe> z;YeLRtz^l&kW*J<&OWNXb;>Ev+jbpKis>7Md5rfP`VU-g@I5f)(vi^1h0K?7TKJRS zGTJw6pZH_u1F7@{i^4uIMX>TUJ}DSr1<%~X^wgl##FWaylc}Jj O#o+1c=d#Wzp$Py1Z5Cz# diff --git a/core/res/res/drawable-xhdpi/ic_notify_wifidisplay.png b/core/res/res/drawable-xhdpi/ic_notify_wifidisplay.png deleted file mode 100644 index 4cc0ee83faf896e950cd5673826a7e0c24e9946b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1096 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?XPI|c@32~QWtkc@k8XYTJ7b`&{ouP?n=-2b7C zpw1CD?bX^x?p^ zUAE|jSr^V1*a<3K@O;2oAaCLLOujQedS&F(i?crIaCrXxTls*sfHmUdSFYrcxAMs+ zW?t}^EI9jWwWoNK{}HvX^DEz;Xz3CV+aY4XcZYQz%akY5$k<*v6q4(O2s`J zT#a|hi=RK-wv+YE!M8{DF}D|5Z?f7pW%U8^IX~CUij1E$b7qqIzn7=QBGt6+bXj-3 zTfOD~hjod8&1M3A56{H+@7eVuMqlaoLQ56#;3g z?MX>Q8F=^>0o4?!QgH3eFhuw@BU>OJ#|8XVtQme}}>9 z{~9VirVM=#H{GkbAo2NXCzH}~xz`WuXFtiwo;T5B$A3nVdyyv!mjxQ%H@NfW{N)z5 zi4BL^tZz`N!wRN`@K#XKk>M%x`Aneb#<_hUQi#7P vNstY}`DrEPiAAXljw$&`sS2LCiRr09sfj6-g(p)%Ihw)K)z4*}Q$iB}CZNqY diff --git a/core/res/res/drawable-xxhdpi/ic_notify_wifidisplay.png b/core/res/res/drawable-xxhdpi/ic_notify_wifidisplay.png deleted file mode 100644 index fea4774c8d727c7ad16daff267585a74e9c36aa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIh(r~ z8k(CJm>U_GSr{5x8X8!-nYcL`8#o)7o0_}A%)qACz{1ka(Z#~ez{S+W(9qS$$krjQe6`as9% zgAxZ)Vu1+(Qy_>5Px?R(JoBXH0dq_dFl$WyzTpM~1LI*&7srr_TW@ZicV|hIIsS3( zw=0?7FYOn6nZM%kykGJ`T^${Mf`Xc*cV7!lJU7?s+DdQ1xzjvW=PdE?ng4Khnf< z(A=}epZ|SGtdD(``fO(Uy!6EuecDInb0{=0FhL0>0S5*~mVkqeSy|gxh%qouv0tE( zFrl%JRiUA-Oh@_LZ`Q9qbAwmkc{240&#RZ-f2Mkup8C0OmD!c#uXlgyZMpX7-;#gl z_8z&kZo6`+>)t{;`C#i*>E;^dOS5;aUbp%@>&}Wg(HF+$uV&q1(XbYOwWf+Mpe*Xu zs#|O)=7*O$-`#edq4LtU%_~_0%KWaXN-t+P<#GAk3Oz5Nq;@%Qp}lWn*6g2I6ciZZ>GjK^~!`;o(~60UpOq(ujS#@ zh_t!AX`|Ycqnj5p{G1l=&0n(g-0eNfG=5&&)<4_5S+cyq?dnV~$wxWGcW#S$Y+AZG zJzDu)e%TfFtM!a49pCCaopi{tU~6XV$##q&t;ucLK6V%C;pQF diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index cfdd64cf1d664..ee64bf94ab983 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1452,7 +1452,6 @@ - diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 27b5451dc9027..fb753c55b3bfa 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -59,7 +59,7 @@ public class MediaRouter { static class Static implements DisplayManager.DisplayListener { // Time between wifi display scans when actively scanning in milliseconds. - private static final int WIFI_DISPLAY_SCAN_INTERVAL = 15000; + private static final int WIFI_DISPLAY_SCAN_INTERVAL = 10000; final Context mAppContext; final Resources mResources; @@ -82,7 +82,6 @@ public class MediaRouter { RouteInfo mSelectedRoute; - WifiDisplayStatus mLastKnownWifiDisplayStatus; boolean mActivelyScanningWifiDisplays; int mDiscoveryRequestRouteTypes; @@ -1244,60 +1243,57 @@ public class MediaRouter { } } - static void updateWifiDisplayStatus(WifiDisplayStatus newStatus) { - final WifiDisplayStatus oldStatus = sStatic.mLastKnownWifiDisplayStatus; - - // TODO Naive implementation. Make this smarter later. + static void updateWifiDisplayStatus(WifiDisplayStatus status) { boolean wantScan = false; - boolean blockScan = false; - WifiDisplay[] oldDisplays = oldStatus != null ? - oldStatus.getDisplays() : WifiDisplay.EMPTY_ARRAY; - WifiDisplay[] newDisplays; + WifiDisplay[] displays; WifiDisplay activeDisplay; - if (newStatus.getFeatureState() == WifiDisplayStatus.FEATURE_STATE_ON) { - newDisplays = newStatus.getDisplays(); - activeDisplay = newStatus.getActiveDisplay(); + if (status.getFeatureState() == WifiDisplayStatus.FEATURE_STATE_ON) { + displays = status.getDisplays(); + activeDisplay = status.getActiveDisplay(); } else { - newDisplays = WifiDisplay.EMPTY_ARRAY; + displays = WifiDisplay.EMPTY_ARRAY; activeDisplay = null; } - for (int i = 0; i < newDisplays.length; i++) { - final WifiDisplay d = newDisplays[i]; - if (d.isRemembered()) { + // Add or update routes. + for (int i = 0; i < displays.length; i++) { + final WifiDisplay d = displays[i]; + if (shouldShowWifiDisplay(d, activeDisplay)) { RouteInfo route = findWifiDisplayRoute(d); if (route == null) { - route = makeWifiDisplayRoute(d, newStatus); + route = makeWifiDisplayRoute(d, status); addRouteStatic(route); wantScan = true; } else { - updateWifiDisplayRoute(route, d, newStatus); + updateWifiDisplayRoute(route, d, status); } if (d.equals(activeDisplay)) { selectRouteStatic(route.getSupportedTypes(), route, false); - - // Don't scan if we're already connected to a wifi display, - // the scanning process can cause a hiccup with some configurations. - blockScan = true; - } - } - } - for (int i = 0; i < oldDisplays.length; i++) { - final WifiDisplay d = oldDisplays[i]; - if (d.isRemembered()) { - final WifiDisplay newDisplay = findMatchingDisplay(d, newDisplays); - if (newDisplay == null || !newDisplay.isRemembered()) { - removeRouteStatic(findWifiDisplayRoute(d)); } } } - if (wantScan && !blockScan) { + // Remove stale routes. + for (int i = sStatic.mRoutes.size(); i-- > 0; ) { + RouteInfo route = sStatic.mRoutes.get(i); + if (route.mDeviceAddress != null) { + WifiDisplay d = findWifiDisplay(displays, route.mDeviceAddress); + if (d == null || !shouldShowWifiDisplay(d, activeDisplay)) { + removeRouteStatic(route); + } + } + } + + // Don't scan if we're already connected to a wifi display, + // the scanning process can cause a hiccup with some configurations. + if (wantScan && activeDisplay != null) { sStatic.mDisplayService.scanWifiDisplays(); } + } - sStatic.mLastKnownWifiDisplayStatus = newStatus; + private static boolean shouldShowWifiDisplay(WifiDisplay d, WifiDisplay activeDisplay) { + return d.isRemembered() || d.equals(activeDisplay); } static int getWifiDisplayStatusCode(WifiDisplay d, WifiDisplayStatus wfdStatus) { @@ -1375,11 +1371,11 @@ public class MediaRouter { } } - private static WifiDisplay findMatchingDisplay(WifiDisplay d, WifiDisplay[] displays) { + private static WifiDisplay findWifiDisplay(WifiDisplay[] displays, String deviceAddress) { for (int i = 0; i < displays.length; i++) { - final WifiDisplay other = displays[i]; - if (d.hasSameAddress(other)) { - return other; + final WifiDisplay d = displays[i]; + if (d.getDeviceAddress().equals(deviceAddress)) { + return d; } } return null; @@ -1804,6 +1800,11 @@ public class MediaRouter { return null; } + /** @hide */ + public String getDeviceAddress() { + return mDeviceAddress; + } + /** * Returns true if this route is enabled and may be selected. * diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java index f7bbdf8246bb7..99f8ebb6f0ca9 100644 --- a/services/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/java/com/android/server/display/WifiDisplayAdapter.java @@ -499,7 +499,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { .setContentText(r.getString( R.string.wifi_display_notification_message)) .setContentIntent(mSettingsPendingIntent) - .setSmallIcon(R.drawable.ic_notify_wifidisplay) + .setSmallIcon(R.drawable.ic_media_route_on_holo_dark) .setOngoing(true) .addAction(android.R.drawable.ic_menu_close_clear_cancel, r.getString(R.string.wifi_display_notification_disconnect),