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

Commit 397065c0 authored by Shaowei Shen's avatar Shaowei Shen Committed by Android (Google) Code Review
Browse files

Merge "[Output Switcher] Add RouteListingPreference.Item in MediaDevice"

parents d4c6aad8 21f94dee
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public class BluetoothMediaDevice extends MediaDevice {

    BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
            MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
        super(context, routerManager, info, packageName);
        super(context, routerManager, info, packageName, null);
        mCachedDevice = device;
        mAudioManager = context.getSystemService(AudioManager.class);
        initDeviceRecord();
+8 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;

import androidx.annotation.VisibleForTesting;

@@ -40,11 +41,16 @@ public class InfoMediaDevice extends MediaDevice {
    private static final String TAG = "InfoMediaDevice";

    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
        super(context, routerManager, info, packageName);
            String packageName, RouteListingPreference.Item item) {
        super(context, routerManager, info, packageName, item);
        initDeviceRecord();
    }

    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
        this(context, routerManager, info, packageName, null);
    }

    @Override
    public String getName() {
        return mRouteInfo.getName().toString();
+31 −4
Original line number Diff line number Diff line
@@ -58,7 +58,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@@ -82,6 +84,8 @@ public class InfoMediaManager extends MediaManager {

    private MediaDevice mCurrentConnectedDevice;
    private LocalBluetoothManager mBluetoothManager;
    private final Map<String, RouteListingPreference.Item> mPreferenceItemMap =
            new ConcurrentHashMap<>();

    public InfoMediaManager(Context context, String packageName, Notification notification,
            LocalBluetoothManager localBluetoothManager) {
@@ -248,7 +252,7 @@ public class InfoMediaManager extends MediaManager {
        if (info != null) {
            for (MediaRoute2Info route : mRouterManager.getSelectableRoutes(info)) {
                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
                        route, mPackageName));
                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
            }
            return deviceList;
        }
@@ -275,7 +279,7 @@ public class InfoMediaManager extends MediaManager {
        if (info != null) {
            for (MediaRoute2Info route : mRouterManager.getDeselectableRoutes(info)) {
                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
                        route, mPackageName));
                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
                Log.d(TAG, route.getName() + " is deselectable for " + mPackageName);
            }
            return deviceList;
@@ -302,7 +306,7 @@ public class InfoMediaManager extends MediaManager {
        if (info != null) {
            for (MediaRoute2Info route : mRouterManager.getSelectedRoutes(info)) {
                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
                        route, mPackageName));
                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
            }
            return deviceList;
        }
@@ -510,7 +514,7 @@ public class InfoMediaManager extends MediaManager {
            case TYPE_GROUP:
                //TODO(b/148765806): use correct device type once api is ready.
                mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route,
                        mPackageName);
                        mPackageName, mPreferenceItemMap.get(route.getId()));
                if (!TextUtils.isEmpty(mPackageName)
                        && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())) {
                    mediaDevice.setState(STATE_SELECTED);
@@ -601,6 +605,16 @@ public class InfoMediaManager extends MediaManager {
        public void onSessionUpdated(RoutingSessionInfo sessionInfo) {
            refreshDevices();
        }

        @Override
        public void onRouteListingPreferenceUpdated(
                String packageName,
                RouteListingPreference routeListingPreference) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                Api34Impl.onRouteListingPreferenceUpdated(packageName, routeListingPreference,
                        mPreferenceItemMap);
            }
        }
    }

    @RequiresApi(34)
@@ -666,5 +680,18 @@ public class InfoMediaManager extends MediaManager {
            return routeListingPreference != null
                    && !routeListingPreference.getUseSystemOrdering();
        }

        @DoNotInline
        static void onRouteListingPreferenceUpdated(
                String packageName,
                RouteListingPreference routeListingPreference,
                Map<String, RouteListingPreference.Item> preferenceItemMap) {
            preferenceItemMap.clear();
            if (routeListingPreference != null) {
                routeListingPreference.getItems().forEach((item) -> {
                    preferenceItemMap.put(item.getRouteId(), item);
                });
            }
        }
    }
}
+27 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static android.media.MediaRoute2Info.TYPE_USB_DEVICE;
import static android.media.MediaRoute2Info.TYPE_USB_HEADSET;
import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES;
import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET;
import static android.media.RouteListingPreference.Item.FLAG_SUGGESTED_ROUTE;

import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED;

@@ -39,10 +40,14 @@ import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.NearbyDevice;
import android.media.RouteListingPreference;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.DoNotInline;
import androidx.annotation.IntDef;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;

import java.lang.annotation.Retention;
@@ -87,14 +92,16 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
    protected final Context mContext;
    protected final MediaRoute2Info mRouteInfo;
    protected final MediaRouter2Manager mRouterManager;
    protected final RouteListingPreference.Item mItem;
    protected final String mPackageName;

    MediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
            String packageName, RouteListingPreference.Item item) {
        mContext = context;
        mRouteInfo = info;
        mRouterManager = routerManager;
        mPackageName = packageName;
        mItem = item;
        setType(info);
    }

@@ -180,10 +187,21 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {

    /**
     * Get unique ID that represent MediaDevice
     *
     * @return unique id of MediaDevice
     */
    public abstract String getId();

    /**
     * Checks if device is suggested device from application
     *
     * @return true if device is suggested device
     */
    public boolean isSuggestedDevice() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
                && Api34Impl.isSuggestedDevice(mItem);
    }

    void setConnectedRecord() {
        mConnectedRecord++;
        ConnectionRecordManager.getInstance().setConnectionRecord(mContext, getId(),
@@ -466,4 +484,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
        final MediaDevice otherDevice = (MediaDevice) obj;
        return otherDevice.getId().equals(getId());
    }

    @RequiresApi(34)
    private static class Api34Impl {
        @DoNotInline
        static boolean isSuggestedDevice(RouteListingPreference.Item item) {
            return item != null && item.getFlags() == FLAG_SUGGESTED_ROUTE;
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public class PhoneMediaDevice extends MediaDevice {

    PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
        super(context, routerManager, info, packageName);
        super(context, routerManager, info, packageName, null);
        mDeviceIconUtil = new DeviceIconUtil();
        initDeviceRecord();
    }
Loading