diff options
| author | 2022-03-31 08:52:27 +0000 | |
|---|---|---|
| committer | 2022-03-31 08:52:27 +0000 | |
| commit | a2a4b30ffda6443326de2fedf8e383cb69bf0bb2 (patch) | |
| tree | 2805495289ab5c1999ca40a448addc5de8b44b99 | |
| parent | 033ac7f4543caab5dbb455cd681728c8deee0658 (diff) | |
| parent | 37289dfa671d89446efc135f9f043a55047ec130 (diff) | |
Merge "Add "Broadcast" button at output switcher" into tm-dev
4 files changed, 80 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java index dcb1c7c4637c..bde772d95674 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java @@ -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()); diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java index c277c334d9c4..494dae0532dc 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java @@ -228,7 +228,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { * that convert BluetoothLeBroadcastMetadata object to String format. */ private String getBroadcastMetaData() { - return ""; + return "TEST"; } /** diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 97e79e9cab1b..807f0f1bb0ba 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -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(); diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java index 7834ec0fa17f..3cffd0266ac8 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java @@ -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 |