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

Commit 6923a28e authored by Shaowei Shen's avatar Shaowei Shen Committed by Automerger Merge Worker
Browse files

Merge "[Output Switcher] Sets TemporaryAllowList when transfer from local to...

Merge "[Output Switcher] Sets TemporaryAllowList when transfer from local to remote (or oppsite way)" into tm-dev am: 3a4731d9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18156225



Change-Id: Iccc29f7655ae0d74af1f6995e0101f4a7f8e243c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3857e889 3a4731d9
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -385,6 +385,12 @@ public class PowerExemptionManager {
     */
     */
    public static final int REASON_ACTIVE_DEVICE_ADMIN = 324;
    public static final int REASON_ACTIVE_DEVICE_ADMIN = 324;


    /**
     * Media notification re-generate during transferring.
     * @hide
     */
    public static final int REASON_MEDIA_NOTIFICATION_TRANSFER = 325;

    /** @hide The app requests out-out. */
    /** @hide The app requests out-out. */
    public static final int REASON_OPT_OUT_REQUESTED = 1000;
    public static final int REASON_OPT_OUT_REQUESTED = 1000;


@@ -465,6 +471,7 @@ public class PowerExemptionManager {
            REASON_DPO_PROTECTED_APP,
            REASON_DPO_PROTECTED_APP,
            REASON_DISALLOW_APPS_CONTROL,
            REASON_DISALLOW_APPS_CONTROL,
            REASON_ACTIVE_DEVICE_ADMIN,
            REASON_ACTIVE_DEVICE_ADMIN,
            REASON_MEDIA_NOTIFICATION_TRANSFER,
    })
    })
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface ReasonCode {}
    public @interface ReasonCode {}
@@ -830,6 +837,8 @@ public class PowerExemptionManager {
                return "ACTIVE_DEVICE_ADMIN";
                return "ACTIVE_DEVICE_ADMIN";
            case REASON_OPT_OUT_REQUESTED:
            case REASON_OPT_OUT_REQUESTED:
                return "REASON_OPT_OUT_REQUESTED";
                return "REASON_OPT_OUT_REQUESTED";
            case REASON_MEDIA_NOTIFICATION_TRANSFER:
                return "REASON_MEDIA_NOTIFICATION_TRANSFER";
            default:
            default:
                return "(unknown:" + reasonCode + ")";
                return "(unknown:" + reasonCode + ")";
        }
        }
+8 −0
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ import android.net.ConnectivityManager;
import android.net.NetworkScoreManager;
import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager;
import android.os.BatteryStats;
import android.os.BatteryStats;
import android.os.PowerExemptionManager;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.ServiceManager;
import android.os.ServiceManager;
import android.os.UserManager;
import android.os.UserManager;
@@ -375,6 +376,13 @@ public class FrameworkServicesModule {
        return context.getSystemService(PowerManager.class);
        return context.getSystemService(PowerManager.class);
    }
    }


    /** */
    @Provides
    @Singleton
    static PowerExemptionManager providePowerExemptionManager(Context context) {
        return context.getSystemService(PowerExemptionManager.class);
    }

    /** */
    /** */
    @Provides
    @Provides
    @Main
    @Main
+1 −0
Original line number Original line Diff line number Diff line
@@ -285,6 +285,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                Log.d(TAG, "This device is already connected! : " + device.getName());
                Log.d(TAG, "This device is already connected! : " + device.getName());
                return;
                return;
            }
            }
            mController.setTemporaryAllowListExceptionIfNeeded(device);
            mCurrentActivePosition = -1;
            mCurrentActivePosition = -1;
            mController.connectDevice(device);
            mController.connectDevice(device);
            device.setState(MediaDeviceState.STATE_CONNECTING);
            device.setState(MediaDeviceState.STATE_CONNECTING);
+5 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.media.dialog
import android.content.Context
import android.content.Context
import android.media.AudioManager
import android.media.AudioManager
import android.media.session.MediaSessionManager
import android.media.session.MediaSessionManager
import android.os.PowerExemptionManager
import android.view.View
import android.view.View
import com.android.internal.logging.UiEventLogger
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.bluetooth.LocalBluetoothManager
import com.android.settingslib.bluetooth.LocalBluetoothManager
@@ -43,7 +44,8 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(
    private val uiEventLogger: UiEventLogger,
    private val uiEventLogger: UiEventLogger,
    private val dialogLaunchAnimator: DialogLaunchAnimator,
    private val dialogLaunchAnimator: DialogLaunchAnimator,
    private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
    private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>,
    private val audioManager: AudioManager
    private val audioManager: AudioManager,
    private val powerExemptionManager: PowerExemptionManager
) {
) {
    var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null
    var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null


@@ -54,7 +56,8 @@ class MediaOutputBroadcastDialogFactory @Inject constructor(


        val controller = MediaOutputController(context, packageName,
        val controller = MediaOutputController(context, packageName,
                mediaSessionManager, lbm, starter, notifCollection,
                mediaSessionManager, lbm, starter, notifCollection,
                dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager)
                dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager,
                powerExemptionManager)
        val dialog =
        val dialog =
                MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
                MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
        mediaOutputBroadcastDialog = dialog
        mediaOutputBroadcastDialog = dialog
+20 −2
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.media.session.PlaybackState;
import android.os.IBinder;
import android.os.IBinder;
import android.os.PowerExemptionManager;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
@@ -101,6 +102,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final String PAGE_CONNECTED_DEVICES_KEY =
    private static final String PAGE_CONNECTED_DEVICES_KEY =
            "top_level_connected_devices";
            "top_level_connected_devices";
    private static final long ALLOWLIST_DURATION_MS = 20000;
    private static final String ALLOWLIST_REASON = "mediaoutput:remote_transfer";

    private final String mPackageName;
    private final String mPackageName;
    private final Context mContext;
    private final Context mContext;
    private final MediaSessionManager mMediaSessionManager;
    private final MediaSessionManager mMediaSessionManager;
@@ -114,6 +118,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
    final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
    final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
    final List<MediaDevice> mCachedMediaDevices = new CopyOnWriteArrayList<>();
    final List<MediaDevice> mCachedMediaDevices = new CopyOnWriteArrayList<>();
    private final AudioManager mAudioManager;
    private final AudioManager mAudioManager;
    private final PowerExemptionManager mPowerExemptionManager;
    private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
    private final NearbyMediaDevicesManager mNearbyMediaDevicesManager;
    private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();
    private final Map<String, Integer> mNearbyDeviceInfoMap = new ConcurrentHashMap<>();


@@ -147,7 +152,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
            CommonNotifCollection notifCollection,
            CommonNotifCollection notifCollection,
            DialogLaunchAnimator dialogLaunchAnimator,
            DialogLaunchAnimator dialogLaunchAnimator,
            Optional<NearbyMediaDevicesManager> nearbyMediaDevicesManagerOptional,
            Optional<NearbyMediaDevicesManager> nearbyMediaDevicesManagerOptional,
            AudioManager audioManager) {
            AudioManager audioManager,
            PowerExemptionManager powerExemptionManager) {
        mContext = context;
        mContext = context;
        mPackageName = packageName;
        mPackageName = packageName;
        mMediaSessionManager = mediaSessionManager;
        mMediaSessionManager = mediaSessionManager;
@@ -155,6 +161,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
        mActivityStarter = starter;
        mActivityStarter = starter;
        mNotifCollection = notifCollection;
        mNotifCollection = notifCollection;
        mAudioManager = audioManager;
        mAudioManager = audioManager;
        mPowerExemptionManager = powerExemptionManager;
        InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
        InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
        mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
        mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
        mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
        mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
@@ -776,7 +783,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
        MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
        MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
                mMediaSessionManager, mLocalBluetoothManager, mActivityStarter,
                mMediaSessionManager, mLocalBluetoothManager, mActivityStarter,
                mNotifCollection, mDialogLaunchAnimator, Optional.of(mNearbyMediaDevicesManager),
                mNotifCollection, mDialogLaunchAnimator, Optional.of(mNearbyMediaDevicesManager),
                mAudioManager);
                mAudioManager, mPowerExemptionManager);
        MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true,
        MediaOutputBroadcastDialog dialog = new MediaOutputBroadcastDialog(mContext, true,
                broadcastSender, controller);
                broadcastSender, controller);
        mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
        mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
@@ -822,6 +829,17 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
        broadcast.setBroadcastCode(broadcastCode.getBytes(StandardCharsets.UTF_8));
        broadcast.setBroadcastCode(broadcastCode.getBytes(StandardCharsets.UTF_8));
    }
    }


    void setTemporaryAllowListExceptionIfNeeded(MediaDevice targetDevice) {
        if (mPowerExemptionManager == null || mPackageName == null) {
            Log.w(TAG, "powerExemptionManager or package name is null");
            return;
        }
        mPowerExemptionManager.addToTemporaryAllowList(mPackageName,
                PowerExemptionManager.REASON_MEDIA_NOTIFICATION_TRANSFER,
                ALLOWLIST_REASON,
                ALLOWLIST_DURATION_MS);
    }

    String getBroadcastMetadata() {
    String getBroadcastMetadata() {
        LocalBluetoothLeBroadcast broadcast =
        LocalBluetoothLeBroadcast broadcast =
                mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
                mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
Loading