MediaRouter: grey out wifi displays that's in use
bug 9229799 Change-Id: I9f5fd2107f60c492d42c74e575e6483838a51267
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user