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

Commit a2a4b30f authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "Add "Broadcast" button at output switcher" into tm-dev

parents 033ac7f4 37289dfa
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.view.WindowInsets.Type.statusBars;

import android.app.WallpaperColors;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
@@ -35,6 +36,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -65,6 +67,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements

    private static final String TAG = "MediaOutputDialog";
    private static final String EMPTY_TITLE = " ";
    private static final String PREF_NAME = "MediaOutputDialog";
    private static final String PREF_IS_LE_BROADCAST_FIRST_LAUNCH = "PrefIsLeBroadcastFirstLaunch";

    private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
    private final RecyclerView.LayoutManager mLayoutManager;
@@ -252,6 +256,33 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
        }
        // Show when remote media session is available
        mStopButton.setVisibility(getStopButtonVisibility());
        if (isBroadcastSupported() && mMediaOutputController.isPlaying()) {
            mStopButton.setText(R.string.media_output_broadcast);
            mStopButton.setOnClickListener(v -> {
                SharedPreferences sharedPref = mContext.getSharedPreferences(PREF_NAME,
                        Context.MODE_PRIVATE);

                if (sharedPref != null
                        && sharedPref.getBoolean(PREF_IS_LE_BROADCAST_FIRST_LAUNCH, true)) {
                    Log.d(TAG, "PREF_IS_LE_BROADCAST_FIRST_LAUNCH: true");

                    mMediaOutputController.launchLeBroadcastNotifyDialog(mDialogView,
                            mBroadcastSender,
                            MediaOutputController.BroadcastNotifyDialog.ACTION_FIRST_LAUNCH);
                    SharedPreferences.Editor editor = sharedPref.edit();
                    editor.putBoolean(PREF_IS_LE_BROADCAST_FIRST_LAUNCH, false);
                    editor.apply();
                } else {
                    mMediaOutputController.launchMediaOutputBroadcastDialog(mDialogView,
                            mBroadcastSender);
                }
            });
        } else {
            mStopButton.setOnClickListener(v -> {
                mMediaOutputController.releaseSession();
                dismiss();
            });
        }
    }

    private Drawable resizeDrawable(Drawable drawable, int size) {
@@ -284,6 +315,10 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements

    abstract int getStopButtonVisibility();

    public boolean isBroadcastSupported() {
        return false;
    }

    @Override
    public void onMediaChanged() {
        mMainThreadHandler.post(() -> refresh());
+1 −1
Original line number Diff line number Diff line
@@ -228,7 +228,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
     * that convert BluetoothLeBroadcastMetadata object to String format.
     */
    private String getBroadcastMetaData() {
        return "";
        return "TEST";
    }

    /**
+29 −0
Original line number Diff line number Diff line
@@ -58,7 +58,9 @@ import androidx.mediarouter.media.MediaRouterParams;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.Utils;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.media.BluetoothMediaDevice;
import com.android.settingslib.media.InfoMediaManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
@@ -683,6 +685,20 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
                || features.contains(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK));
    }

    boolean isBluetoothLeDevice(@NonNull MediaDevice device) {
        if (device instanceof BluetoothMediaDevice) {
            final CachedBluetoothDevice cachedDevice =
                    ((BluetoothMediaDevice) device).getCachedDevice();
            boolean isConnectedLeAudioDevice =
                    (cachedDevice != null) ? cachedDevice.isConnectedLeAudioDevice() : false;
            if (DEBUG) {
                Log.d(TAG, "isConnectedLeAudioDevice=" + isConnectedLeAudioDevice);
            }
            return isConnectedLeAudioDevice;
        }
        return false;
    }

    private boolean isPlayBackInfoLocal() {
        return mMediaController != null
                && mMediaController.getPlaybackInfo() != null
@@ -690,6 +706,19 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
                == MediaController.PlaybackInfo.PLAYBACK_TYPE_LOCAL;
    }

    boolean isPlaying() {
        if (mMediaController == null) {
            return false;
        }

        PlaybackState state = mMediaController.getPlaybackState();
        if (state == null) {
            return false;
        }

        return (state.getState() == PlaybackState.STATE_PLAYING);
    }

    boolean isVolumeControlEnabled(@NonNull MediaDevice device) {
        return isPlayBackInfoLocal()
                || mLocalMediaManager.isMediaSessionAvailableForVolumeControl();
+15 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.core.graphics.drawable.IconCompat;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.media.MediaDevice;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastSender;
import com.android.systemui.dagger.SysUISingleton;
@@ -87,8 +88,20 @@ public class MediaOutputDialog extends MediaOutputBaseDialog {

    @Override
    int getStopButtonVisibility() {
        return mMediaOutputController.isActiveRemoteDevice(
                mMediaOutputController.getCurrentConnectedMediaDevice()) ? View.VISIBLE : View.GONE;
        boolean isActiveRemoteDevice = mMediaOutputController.isActiveRemoteDevice(
                mMediaOutputController.getCurrentConnectedMediaDevice());
        boolean isBroadCastSupported = isBroadcastSupported();

        return (isActiveRemoteDevice || isBroadCastSupported) ? View.VISIBLE : View.GONE;
    }

    @Override
    public boolean isBroadcastSupported() {
        MediaDevice device = mMediaOutputController.getCurrentConnectedMediaDevice();
        if (device == null) {
            return false;
        }
        return mMediaOutputController.isBluetoothLeDevice(device);
    }

    @VisibleForTesting