diff options
author | Chong Zhang <chz@google.com> | 2013-06-15 00:36:15 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-06-15 00:36:15 +0000 |
commit | e0dae4b493d3547b223f498a9f3e5aa2ddd856f6 (patch) | |
tree | d98a7b2850511f37218c515ab45614edcea59e49 /services | |
parent | 343233c4edc09013bdb9ac44d65054c029d4d885 (diff) | |
parent | ab87a63997a7dc771acfd0dcd7efda990dc3d5fe (diff) | |
download | frameworks_base-e0dae4b493d3547b223f498a9f3e5aa2ddd856f6.zip frameworks_base-e0dae4b493d3547b223f498a9f3e5aa2ddd856f6.tar.gz frameworks_base-e0dae4b493d3547b223f498a9f3e5aa2ddd856f6.tar.bz2 |
Merge "MediaRouter: grey out wifi displays that's in use"
Diffstat (limited to 'services')
3 files changed, 46 insertions, 7 deletions
diff --git a/services/java/com/android/server/display/PersistentDataStore.java b/services/java/com/android/server/display/PersistentDataStore.java index d5d7132..67b3695 100644 --- a/services/java/com/android/server/display/PersistentDataStore.java +++ b/services/java/com/android/server/display/PersistentDataStore.java @@ -106,7 +106,7 @@ final class PersistentDataStore { } if (!Objects.equal(display.getDeviceAlias(), alias)) { return new WifiDisplay(display.getDeviceAddress(), display.getDeviceName(), - alias, display.canConnect()); + alias, display.isAvailable(), display.canConnect(), display.isRemembered()); } } return display; @@ -260,7 +260,8 @@ final class PersistentDataStore { } mRememberedWifiDisplays.add( - new WifiDisplay(deviceAddress, deviceName, deviceAlias)); + new WifiDisplay(deviceAddress, deviceName, deviceAlias, + false, false, false)); } } } diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java index b655b3a..4c80cf5 100644 --- a/services/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/java/com/android/server/display/WifiDisplayAdapter.java @@ -45,6 +45,8 @@ import android.view.SurfaceControl; import java.io.PrintWriter; import java.util.Arrays; +import java.util.List; +import java.util.ArrayList; import libcore.util.Objects; @@ -88,6 +90,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { private int mScanState; private int mActiveDisplayState; private WifiDisplay mActiveDisplay; + private WifiDisplay[] mDisplays = WifiDisplay.EMPTY_ARRAY; private WifiDisplay[] mAvailableDisplays = WifiDisplay.EMPTY_ARRAY; private WifiDisplay[] mRememberedDisplays = WifiDisplay.EMPTY_ARRAY; @@ -116,6 +119,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { pw.println("mScanState=" + mScanState); pw.println("mActiveDisplayState=" + mActiveDisplayState); pw.println("mActiveDisplay=" + mActiveDisplay); + pw.println("mDisplays=" + Arrays.toString(mDisplays)); pw.println("mAvailableDisplays=" + Arrays.toString(mAvailableDisplays)); pw.println("mRememberedDisplays=" + Arrays.toString(mRememberedDisplays)); pw.println("mPendingStatusChangeBroadcast=" + mPendingStatusChangeBroadcast); @@ -229,7 +233,8 @@ final class WifiDisplayAdapter extends DisplayAdapter { WifiDisplay display = mPersistentDataStore.getRememberedWifiDisplay(address); if (display != null && !Objects.equal(display.getDeviceAlias(), alias)) { - display = new WifiDisplay(address, display.getDeviceName(), alias); + display = new WifiDisplay(address, display.getDeviceName(), alias, + false, false, false); if (mPersistentDataStore.rememberWifiDisplay(display)) { mPersistentDataStore.saveIfNeeded(); updateRememberedDisplaysLocked(); @@ -262,7 +267,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { if (mCurrentStatus == null) { mCurrentStatus = new WifiDisplayStatus( mFeatureState, mScanState, mActiveDisplayState, - mActiveDisplay, mAvailableDisplays, mRememberedDisplays); + mActiveDisplay, mDisplays); } if (DEBUG) { @@ -271,10 +276,36 @@ final class WifiDisplayAdapter extends DisplayAdapter { return mCurrentStatus; } + private void updateDisplaysLocked() { + List<WifiDisplay> displays = new ArrayList<WifiDisplay>( + mAvailableDisplays.length + mRememberedDisplays.length); + boolean[] remembered = new boolean[mAvailableDisplays.length]; + for (WifiDisplay d : mRememberedDisplays) { + boolean available = false; + for (int i = 0; i < mAvailableDisplays.length; i++) { + if (d.equals(mAvailableDisplays[i])) { + remembered[i] = available = true; + break; + } + } + if (!available) { + displays.add(new WifiDisplay(d.getDeviceAddress(), d.getDeviceName(), + d.getDeviceAlias(), false, false, true)); + } + } + for (int i = 0; i < mAvailableDisplays.length; i++) { + WifiDisplay d = mAvailableDisplays[i]; + displays.add(new WifiDisplay(d.getDeviceAddress(), d.getDeviceName(), + d.getDeviceAlias(), true, d.canConnect(), remembered[i])); + } + mDisplays = displays.toArray(WifiDisplay.EMPTY_ARRAY); + } + private void updateRememberedDisplaysLocked() { mRememberedDisplays = mPersistentDataStore.getRememberedWifiDisplays(); mActiveDisplay = mPersistentDataStore.applyWifiDisplayAlias(mActiveDisplay); mAvailableDisplays = mPersistentDataStore.applyWifiDisplayAliases(mAvailableDisplays); + updateDisplaysLocked(); } private void fixRememberedDisplayNamesFromAvailableDisplaysLocked() { @@ -487,11 +518,18 @@ final class WifiDisplayAdapter extends DisplayAdapter { availableDisplays = mPersistentDataStore.applyWifiDisplayAliases( availableDisplays); - if (mScanState != WifiDisplayStatus.SCAN_STATE_NOT_SCANNING - || !Arrays.equals(mAvailableDisplays, availableDisplays)) { + // check if any of the available displays changed canConnect status + boolean changed = !Arrays.equals(mAvailableDisplays, availableDisplays); + for (int i = 0; !changed && i<availableDisplays.length; i++) { + changed = availableDisplays[i].canConnect() + != mAvailableDisplays[i].canConnect(); + } + + if (mScanState != WifiDisplayStatus.SCAN_STATE_NOT_SCANNING || changed) { mScanState = WifiDisplayStatus.SCAN_STATE_NOT_SCANNING; mAvailableDisplays = availableDisplays; fixRememberedDisplayNamesFromAvailableDisplaysLocked(); + updateDisplaysLocked(); scheduleStatusChangedBroadcastLocked(); } } diff --git a/services/java/com/android/server/display/WifiDisplayController.java b/services/java/com/android/server/display/WifiDisplayController.java index e595df4..f89917c 100644 --- a/services/java/com/android/server/display/WifiDisplayController.java +++ b/services/java/com/android/server/display/WifiDisplayController.java @@ -898,7 +898,7 @@ final class WifiDisplayController implements DumpUtils.Dump { private static WifiDisplay createWifiDisplay(WifiP2pDevice device) { return new WifiDisplay(device.deviceAddress, device.deviceName, null, - device.wfdInfo.isSessionAvailable()); + true, device.wfdInfo.isSessionAvailable(), false); } private final BroadcastReceiver mWifiP2pReceiver = new BroadcastReceiver() { |