Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +1 −5 Original line number Diff line number Diff line Loading @@ -413,12 +413,8 @@ public abstract class InfoMediaManager extends MediaManager { */ @NonNull List<MediaDevice> getSelectedMediaDevices() { if (TextUtils.isEmpty(mPackageName)) { Log.w(TAG, "getSelectedMediaDevices() package name is null or empty!"); return Collections.emptyList(); } RoutingSessionInfo info = getRoutingSessionInfo(); final RoutingSessionInfo info = getRoutingSessionInfo(); if (info == null) { Log.w(TAG, "getSelectedMediaDevices() cannot find selectable MediaDevice from : " + mPackageName); Loading packages/SettingsLib/src/com/android/settingslib/media/MediaOutputConstants.java +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,17 @@ public class MediaOutputConstants { public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG = "com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG"; /** * An intent action to launch a media output dialog without any app or playback metadata, which * only controls system routing. * * <p>System routes are those provided by the system, such as built-in speakers, wired headsets, * bluetooth devices, and other outputs that require the app to feed media samples to the * framework. */ public static final String ACTION_LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG = "com.android.systemui.action.LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG"; /** * An intent action to launch media output broadcast dialog. */ Loading packages/SystemUI/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1044,6 +1044,7 @@ android:exported="true"> <intent-filter android:priority="1"> <action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG" /> <action android:name="com.android.systemui.action.LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG" /> <action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG" /> <action android:name="com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG" /> </intent-filter> Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +33 −12 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ import androidx.core.graphics.drawable.IconCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SystemUIDialog; import java.util.concurrent.Executor; Loading @@ -85,6 +85,13 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements final MediaOutputController mMediaOutputController; final BroadcastSender mBroadcastSender; /** * Signals whether the dialog should NOT show app-related metadata. * * <p>A metadata-less dialog hides the title, subtitle, and app icon in the header. */ private final boolean mIncludePlaybackAndAppMetadata; @VisibleForTesting View mDialogView; private TextView mHeaderTitle; Loading Loading @@ -210,8 +217,11 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } } public MediaOutputBaseDialog(Context context, BroadcastSender broadcastSender, MediaOutputController mediaOutputController) { public MediaOutputBaseDialog( Context context, BroadcastSender broadcastSender, MediaOutputController mediaOutputController, boolean includePlaybackAndAppMetadata) { super(context, R.style.Theme_SystemUI_Dialog_Media); // Save the context that is wrapped with our theme. Loading @@ -226,6 +236,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mListPaddingTop = mContext.getResources().getDimensionPixelSize( R.dimen.media_output_dialog_list_padding_top); mExecutor = Executors.newSingleThreadExecutor(); mIncludePlaybackAndAppMetadata = includePlaybackAndAppMetadata; } @Override Loading Loading @@ -354,7 +365,10 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements updateDialogBackgroundColor(); mHeaderIcon.setVisibility(View.GONE); } if (appSourceIcon != null) { if (!mIncludePlaybackAndAppMetadata) { mAppResourceIcon.setVisibility(View.GONE); } else if (appSourceIcon != null) { Icon appIcon = appSourceIcon.toIcon(mContext); mAppResourceIcon.setColorFilter(mMediaOutputController.getColorItemContent()); mAppResourceIcon.setImageIcon(appIcon); Loading @@ -373,6 +387,11 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mHeaderIcon.setLayoutParams(new LinearLayout.LayoutParams(size + padding, size)); } mAppButton.setText(mMediaOutputController.getAppSourceName()); if (!mIncludePlaybackAndAppMetadata) { mHeaderTitle.setVisibility(View.GONE); mHeaderSubtitle.setVisibility(View.GONE); } else { // Update title and subtitle mHeaderTitle.setText(getHeaderText()); final CharSequence subTitle = getHeaderSubtitle(); Loading @@ -384,6 +403,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mHeaderSubtitle.setText(subTitle); mHeaderTitle.setGravity(Gravity.NO_GRAVITY); } } // Show when remote media session is available or // when the device supports BT LE audio + media is playing mStopButton.setVisibility(getStopButtonVisibility()); Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +6 −4 Original line number Diff line number Diff line Loading @@ -42,12 +42,10 @@ import androidx.annotation.NonNull; import androidx.core.graphics.drawable.IconCompat; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.qrcode.QrCodeGenerator; import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.google.zxing.WriterException; Loading Loading @@ -237,7 +235,11 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { MediaOutputBroadcastDialog(Context context, boolean aboveStatusbar, BroadcastSender broadcastSender, MediaOutputController mediaOutputController) { super(context, broadcastSender, mediaOutputController); super( context, broadcastSender, mediaOutputController, /* includePlaybackAndAppMetadata */ true); mAdapter = new MediaOutputAdapter(mMediaOutputController); // TODO(b/226710953): Move the part to MediaOutputBaseDialog for every class // that extends MediaOutputBaseDialog Loading Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +1 −5 Original line number Diff line number Diff line Loading @@ -413,12 +413,8 @@ public abstract class InfoMediaManager extends MediaManager { */ @NonNull List<MediaDevice> getSelectedMediaDevices() { if (TextUtils.isEmpty(mPackageName)) { Log.w(TAG, "getSelectedMediaDevices() package name is null or empty!"); return Collections.emptyList(); } RoutingSessionInfo info = getRoutingSessionInfo(); final RoutingSessionInfo info = getRoutingSessionInfo(); if (info == null) { Log.w(TAG, "getSelectedMediaDevices() cannot find selectable MediaDevice from : " + mPackageName); Loading
packages/SettingsLib/src/com/android/settingslib/media/MediaOutputConstants.java +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,17 @@ public class MediaOutputConstants { public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG = "com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG"; /** * An intent action to launch a media output dialog without any app or playback metadata, which * only controls system routing. * * <p>System routes are those provided by the system, such as built-in speakers, wired headsets, * bluetooth devices, and other outputs that require the app to feed media samples to the * framework. */ public static final String ACTION_LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG = "com.android.systemui.action.LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG"; /** * An intent action to launch media output broadcast dialog. */ Loading
packages/SystemUI/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1044,6 +1044,7 @@ android:exported="true"> <intent-filter android:priority="1"> <action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG" /> <action android:name="com.android.systemui.action.LAUNCH_SYSTEM_MEDIA_OUTPUT_DIALOG" /> <action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG" /> <action android:name="com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG" /> </intent-filter> Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +33 −12 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ import androidx.core.graphics.drawable.IconCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SystemUIDialog; import java.util.concurrent.Executor; Loading @@ -85,6 +85,13 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements final MediaOutputController mMediaOutputController; final BroadcastSender mBroadcastSender; /** * Signals whether the dialog should NOT show app-related metadata. * * <p>A metadata-less dialog hides the title, subtitle, and app icon in the header. */ private final boolean mIncludePlaybackAndAppMetadata; @VisibleForTesting View mDialogView; private TextView mHeaderTitle; Loading Loading @@ -210,8 +217,11 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements } } public MediaOutputBaseDialog(Context context, BroadcastSender broadcastSender, MediaOutputController mediaOutputController) { public MediaOutputBaseDialog( Context context, BroadcastSender broadcastSender, MediaOutputController mediaOutputController, boolean includePlaybackAndAppMetadata) { super(context, R.style.Theme_SystemUI_Dialog_Media); // Save the context that is wrapped with our theme. Loading @@ -226,6 +236,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mListPaddingTop = mContext.getResources().getDimensionPixelSize( R.dimen.media_output_dialog_list_padding_top); mExecutor = Executors.newSingleThreadExecutor(); mIncludePlaybackAndAppMetadata = includePlaybackAndAppMetadata; } @Override Loading Loading @@ -354,7 +365,10 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements updateDialogBackgroundColor(); mHeaderIcon.setVisibility(View.GONE); } if (appSourceIcon != null) { if (!mIncludePlaybackAndAppMetadata) { mAppResourceIcon.setVisibility(View.GONE); } else if (appSourceIcon != null) { Icon appIcon = appSourceIcon.toIcon(mContext); mAppResourceIcon.setColorFilter(mMediaOutputController.getColorItemContent()); mAppResourceIcon.setImageIcon(appIcon); Loading @@ -373,6 +387,11 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mHeaderIcon.setLayoutParams(new LinearLayout.LayoutParams(size + padding, size)); } mAppButton.setText(mMediaOutputController.getAppSourceName()); if (!mIncludePlaybackAndAppMetadata) { mHeaderTitle.setVisibility(View.GONE); mHeaderSubtitle.setVisibility(View.GONE); } else { // Update title and subtitle mHeaderTitle.setText(getHeaderText()); final CharSequence subTitle = getHeaderSubtitle(); Loading @@ -384,6 +403,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements mHeaderSubtitle.setText(subTitle); mHeaderTitle.setGravity(Gravity.NO_GRAVITY); } } // Show when remote media session is available or // when the device supports BT LE audio + media is playing mStopButton.setVisibility(getStopButtonVisibility()); Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +6 −4 Original line number Diff line number Diff line Loading @@ -42,12 +42,10 @@ import androidx.annotation.NonNull; import androidx.core.graphics.drawable.IconCompat; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.qrcode.QrCodeGenerator; import com.android.systemui.res.R; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.google.zxing.WriterException; Loading Loading @@ -237,7 +235,11 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { MediaOutputBroadcastDialog(Context context, boolean aboveStatusbar, BroadcastSender broadcastSender, MediaOutputController mediaOutputController) { super(context, broadcastSender, mediaOutputController); super( context, broadcastSender, mediaOutputController, /* includePlaybackAndAppMetadata */ true); mAdapter = new MediaOutputAdapter(mMediaOutputController); // TODO(b/226710953): Move the part to MediaOutputBaseDialog for every class // that extends MediaOutputBaseDialog Loading