Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2444ae7e authored by Jeff Brown's avatar Jeff Brown
Browse files

Ensure MediaRouter correctly handles renamed Wifi displays.

Fix a couple of bugs that cause MediaRouter to disconnect from
the current Wifi display whenever it is renamed.

Added an extra check in WifiDisplayAdapter for identity renames.
The Settings app already handles this case but it's good to have
the service check for it as well so we don't store unnecessary
aliases.

Bug: 7310777
Change-Id: I8fddd32ca59f9b798ee31b467b81457508c345f8
parent a2f7ca7d
Loading
Loading
Loading
Loading
+7 −15
Original line number Diff line number Diff line
@@ -751,18 +751,10 @@ public class MediaRouter {
                RouteInfo.STATUS_AVAILABLE : RouteInfo.STATUS_CONNECTING);
        newRoute.mEnabled = available;

        newRoute.mName = makeWifiDisplayName(display);
        newRoute.mName = display.getFriendlyDisplayName();
        return newRoute;
    }

    static String makeWifiDisplayName(WifiDisplay display) {
        String name = display.getDeviceAlias();
        if (TextUtils.isEmpty(name)) {
            name = display.getDeviceName();
        }
        return name;
    }

    private static void updateWifiDisplayRoute(RouteInfo route, WifiDisplay display,
            boolean available, WifiDisplayStatus wifiDisplayStatus) {
        final boolean isScanning =
@@ -792,8 +784,8 @@ public class MediaRouter {
            }
        }

        final String newName = makeWifiDisplayName(display);
        if (route.getName().equals(newName)) {
        final String newName = display.getFriendlyDisplayName();
        if (!route.getName().equals(newName)) {
            route.mName = newName;
            changed = true;
        }
@@ -814,11 +806,11 @@ public class MediaRouter {
        }
    }

    private static WifiDisplay findMatchingDisplay(WifiDisplay address, WifiDisplay[] displays) {
    private static WifiDisplay findMatchingDisplay(WifiDisplay d, WifiDisplay[] displays) {
        for (int i = 0; i < displays.length; i++) {
            final WifiDisplay d = displays[i];
            if (d.equals(address)) {
                return d;
            final WifiDisplay other = displays[i];
            if (d.getDeviceAddress().equals(other.getDeviceAddress())) {
                return other;
            }
        }
        return null;
+28 −1
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ import java.util.Arrays;
final class WifiDisplayAdapter extends DisplayAdapter {
    private static final String TAG = "WifiDisplayAdapter";

    private static final boolean DEBUG = false;

    private final PersistentDataStore mPersistentDataStore;
    private final boolean mSupportsProtectedBuffers;

@@ -116,6 +118,10 @@ final class WifiDisplayAdapter extends DisplayAdapter {
    }

    public void requestScanLocked() {
        if (DEBUG) {
            Slog.d(TAG, "requestScanLocked");
        }

        getHandler().post(new Runnable() {
            @Override
            public void run() {
@@ -127,6 +133,10 @@ final class WifiDisplayAdapter extends DisplayAdapter {
    }

    public void requestConnectLocked(final String address, final boolean trusted) {
        if (DEBUG) {
            Slog.d(TAG, "requestConnectLocked: address=" + address + ", trusted=" + trusted);
        }

        if (!trusted) {
            synchronized (getSyncRoot()) {
                if (!isRememberedDisplayLocked(address)) {
@@ -157,6 +167,10 @@ final class WifiDisplayAdapter extends DisplayAdapter {
    }

    public void requestDisconnectLocked() {
        if (DEBUG) {
            Slog.d(TAG, "requestDisconnectedLocked");
        }

        getHandler().post(new Runnable() {
            @Override
            public void run() {
@@ -168,9 +182,13 @@ final class WifiDisplayAdapter extends DisplayAdapter {
    }

    public void requestRenameLocked(String address, String alias) {
        if (DEBUG) {
            Slog.d(TAG, "requestRenameLocked: address=" + address + ", alias=" + alias);
        }

        if (alias != null) {
            alias = alias.trim();
            if (alias.isEmpty()) {
            if (alias.isEmpty() || alias.equals(address)) {
                alias = null;
            }
        }
@@ -183,6 +201,10 @@ final class WifiDisplayAdapter extends DisplayAdapter {
    }

    public void requestForgetLocked(String address) {
        if (DEBUG) {
            Slog.d(TAG, "requestForgetLocked: address=" + address);
        }

        if (mPersistentDataStore.forgetWifiDisplay(address)) {
            mPersistentDataStore.saveIfNeeded();
            updateRememberedDisplaysLocked();
@@ -200,6 +222,10 @@ final class WifiDisplayAdapter extends DisplayAdapter {
                    mFeatureState, mScanState, mActiveDisplayState,
                    mActiveDisplay, mAvailableDisplays, mRememberedDisplays);
        }

        if (DEBUG) {
            Slog.d(TAG, "getWifiDisplayStatusLocked: result=" + mCurrentStatus);
        }
        return mCurrentStatus;
    }

@@ -295,6 +321,7 @@ final class WifiDisplayAdapter extends DisplayAdapter {
            }
        }

        @Override
        public void onScanFinished(WifiDisplay[] availableDisplays) {
            synchronized (getSyncRoot()) {
                availableDisplays = mPersistentDataStore.applyWifiDisplayAliases(