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

Commit 14ceac3c authored by Shenqiu Zhang's avatar Shenqiu Zhang
Browse files

Output Switcher shouldn't enable transfer when apps don't support

If a media route provider can support transfer, the route will be marked
as transferable. If the app can support transfer, the app will include
the route in the RouteListingPreference. If neither the media route
provider nor the app could support transfer, then the route can't
support transfer and the full item shouldn't be clickable when the route
is selectable to support expansion.

Flag: com.android.media.flags.disable_transfer_when_apps_do_not_support
Test: presubmit and manually tested with demo app
Bug: b/373404114
Fix: b/373404114
Change-Id: Ic8c41563df4e5e0e6b1ddff557f88dcc765c2f1f
parent ec28bbfb
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -20,6 +20,16 @@ flag {
    }
}

flag {
    name: "disable_transfer_when_apps_do_not_support"
    namespace: "media_better_together"
    description: "Fixes a bug causing output switcher routes to be incorrectly enabled for media transfer."
    bug: "373404114"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "enable_audio_input_device_routing_and_volume_control"
    namespace: "media_better_together"
+22 −2
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@
package com.android.settingslib.media;

import static android.media.MediaRoute2Info.TYPE_AUX_LINE;
import static android.media.MediaRoute2Info.TYPE_LINE_ANALOG;
import static android.media.MediaRoute2Info.TYPE_LINE_DIGITAL;
import static android.media.MediaRoute2Info.TYPE_BLE_HEADSET;
import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
@@ -27,6 +25,8 @@ import static android.media.MediaRoute2Info.TYPE_HDMI;
import static android.media.MediaRoute2Info.TYPE_HDMI_ARC;
import static android.media.MediaRoute2Info.TYPE_HDMI_EARC;
import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
import static android.media.MediaRoute2Info.TYPE_LINE_ANALOG;
import static android.media.MediaRoute2Info.TYPE_LINE_DIGITAL;
import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_CAR;
import static android.media.MediaRoute2Info.TYPE_REMOTE_COMPUTER;
@@ -253,6 +253,10 @@ public abstract class InfoMediaManager {
    @NonNull
    protected abstract List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo info);

    @NonNull
    protected abstract List<MediaRoute2Info> getTransferableRoutes(
            @NonNull RoutingSessionInfo info);

    @NonNull
    protected abstract List<MediaRoute2Info> getDeselectableRoutes(
            @NonNull RoutingSessionInfo info);
@@ -518,6 +522,22 @@ public abstract class InfoMediaManager {
        return deviceList;
    }

    /**
     * Returns the list of {@link MediaDevice media devices} that can be transferred to with the
     * current {@link RoutingSessionInfo routing session} by the media route provider.
     */
    @NonNull
    List<MediaDevice> getTransferableMediaDevices() {
        final RoutingSessionInfo info = getActiveRoutingSession();

        final List<MediaDevice> deviceList = new ArrayList<>();
        for (MediaRoute2Info route : getTransferableRoutes(info)) {
            deviceList.add(
                    new InfoMediaDevice(mContext, route, mPreferenceItemMap.get(route.getId())));
        }
        return deviceList;
    }

    /**
     * Returns the list of {@link MediaDevice media devices} that can be deselected from the current
     * {@link RoutingSessionInfo routing session}.
+11 −0
Original line number Diff line number Diff line
@@ -351,6 +351,17 @@ public class LocalMediaManager implements BluetoothCallback {
        return mInfoMediaManager.getSelectableMediaDevices();
    }

    /**
     * Gets the MediaDevice list that can be transferred to with the current media session by the
     * media route provider.
     *
     * @return list of MediaDevice
     */
    @NonNull
    public List<MediaDevice> getTransferableMediaDevices() {
        return mInfoMediaManager.getTransferableMediaDevices();
    }

    /**
     * Get the MediaDevice list that can be removed from current media session.
     *
+6 −0
Original line number Diff line number Diff line
@@ -115,6 +115,12 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
        return mRouterManager.getSelectableRoutes(info);
    }

    @Override
    @NonNull
    protected List<MediaRoute2Info> getTransferableRoutes(@NonNull RoutingSessionInfo info) {
        return mRouterManager.getTransferableRoutes(info);
    }

    @Override
    @NonNull
    protected List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo info) {
+8 −3
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.settingslib.media;

import static android.media.MediaRoute2Info.TYPE_AUX_LINE;
import static android.media.MediaRoute2Info.TYPE_BLE_HEADSET;
import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
@@ -24,6 +25,8 @@ import static android.media.MediaRoute2Info.TYPE_HDMI;
import static android.media.MediaRoute2Info.TYPE_HDMI_ARC;
import static android.media.MediaRoute2Info.TYPE_HDMI_EARC;
import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
import static android.media.MediaRoute2Info.TYPE_LINE_ANALOG;
import static android.media.MediaRoute2Info.TYPE_LINE_DIGITAL;
import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
@@ -33,9 +36,6 @@ 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.MediaRoute2Info.TYPE_LINE_DIGITAL;
import static android.media.MediaRoute2Info.TYPE_LINE_ANALOG;
import static android.media.MediaRoute2Info.TYPE_AUX_LINE;
import static android.media.RouteListingPreference.Item.FLAG_ONGOING_SESSION;
import static android.media.RouteListingPreference.Item.FLAG_ONGOING_SESSION_MANAGED;
import static android.media.RouteListingPreference.Item.FLAG_SUGGESTED;
@@ -244,6 +244,11 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     */
    public abstract String getId();

    /** Returns {@code true} if the device has a non-null {@link RouteListingPreference.Item}. */
    public boolean hasRouteListingPreferenceItem() {
        return mItem != null;
    }

    /**
     * Get selection behavior of device
     *
Loading