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

This commit is contained in:
SongFerng Wang
2022-03-31 08:52:27 +00:00
committed by Android (Google) Code Review
4 changed files with 80 additions and 3 deletions

View File

@@ -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());

View File

@@ -228,7 +228,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
* that convert BluetoothLeBroadcastMetadata object to String format.
*/
private String getBroadcastMetaData() {
return "";
return "TEST";
}
/**

View File

@@ -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();

View File

@@ -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