summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2013-06-15 00:36:15 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-06-15 00:36:15 +0000
commite0dae4b493d3547b223f498a9f3e5aa2ddd856f6 (patch)
treed98a7b2850511f37218c515ab45614edcea59e49 /services
parent343233c4edc09013bdb9ac44d65054c029d4d885 (diff)
parentab87a63997a7dc771acfd0dcd7efda990dc3d5fe (diff)
downloadframeworks_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')
-rw-r--r--services/java/com/android/server/display/PersistentDataStore.java5
-rw-r--r--services/java/com/android/server/display/WifiDisplayAdapter.java46
-rw-r--r--services/java/com/android/server/display/WifiDisplayController.java2
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() {