[Output Switcher] Set clickable on MediaMetadata section

Set clicklistener on Media Metadata section, to guide user to
application when tap on it.

Bug: 262013662
Test: atest MediaOutputAdapterTest MediaOutputControllerTest MediaOutputBaseDialogTest MediaOutputDialogTest
Change-Id: I0f5fa36af6bfaa8d5b78f8bdab69dd43bcc70d6e
This commit is contained in:
shaoweishen
2023-01-17 13:37:10 +00:00
committed by Shaowei Shen
parent 90a438c690
commit 8027f4608d
5 changed files with 32 additions and 10 deletions

View File

@@ -24,6 +24,7 @@
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:id="@+id/media_metadata_section"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"

View File

@@ -95,6 +95,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
private RecyclerView mDevicesRecyclerView; private RecyclerView mDevicesRecyclerView;
private LinearLayout mDeviceListLayout; private LinearLayout mDeviceListLayout;
private LinearLayout mCastAppLayout; private LinearLayout mCastAppLayout;
private LinearLayout mMediaMetadataSectionLayout;
private Button mDoneButton; private Button mDoneButton;
private Button mStopButton; private Button mStopButton;
private Button mAppButton; private Button mAppButton;
@@ -240,6 +241,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
mHeaderSubtitle = mDialogView.requireViewById(R.id.header_subtitle); mHeaderSubtitle = mDialogView.requireViewById(R.id.header_subtitle);
mHeaderIcon = mDialogView.requireViewById(R.id.header_icon); mHeaderIcon = mDialogView.requireViewById(R.id.header_icon);
mDevicesRecyclerView = mDialogView.requireViewById(R.id.list_result); mDevicesRecyclerView = mDialogView.requireViewById(R.id.list_result);
mMediaMetadataSectionLayout = mDialogView.requireViewById(R.id.media_metadata_section);
mDeviceListLayout = mDialogView.requireViewById(R.id.device_list); mDeviceListLayout = mDialogView.requireViewById(R.id.device_list);
mDoneButton = mDialogView.requireViewById(R.id.done); mDoneButton = mDialogView.requireViewById(R.id.done);
mStopButton = mDialogView.requireViewById(R.id.stop); mStopButton = mDialogView.requireViewById(R.id.stop);
@@ -255,21 +257,17 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
mDevicesRecyclerView.setLayoutManager(mLayoutManager); mDevicesRecyclerView.setLayoutManager(mLayoutManager);
mDevicesRecyclerView.setAdapter(mAdapter); mDevicesRecyclerView.setAdapter(mAdapter);
mDevicesRecyclerView.setHasFixedSize(false); mDevicesRecyclerView.setHasFixedSize(false);
// Init header icon
mHeaderIcon.setOnClickListener(v -> onHeaderIconClick());
// Init bottom buttons // Init bottom buttons
mDoneButton.setOnClickListener(v -> dismiss()); mDoneButton.setOnClickListener(v -> dismiss());
mStopButton.setOnClickListener(v -> { mStopButton.setOnClickListener(v -> {
mMediaOutputController.releaseSession(); mMediaOutputController.releaseSession();
dismiss(); dismiss();
}); });
mAppButton.setOnClickListener(v -> { mAppButton.setOnClickListener(v -> mMediaOutputController.tryToLaunchMediaApplication());
mBroadcastSender.closeSystemDialogs(); if (mMediaOutputController.isAdvancedLayoutSupported()) {
if (mMediaOutputController.getAppLaunchIntent() != null) { mMediaMetadataSectionLayout.setOnClickListener(
mContext.startActivity(mMediaOutputController.getAppLaunchIntent()); v -> mMediaOutputController.tryToLaunchMediaApplication());
} }
dismiss();
});
} }
@Override @Override
@@ -560,7 +558,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
@Override @Override
public void dismissDialog() { public void dismissDialog() {
dismiss(); mBroadcastSender.closeSystemDialogs();
} }
void onHeaderIconClick() { void onHeaderIconClick() {

View File

@@ -382,6 +382,15 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
return mContext.getPackageManager().getLaunchIntentForPackage(mPackageName); return mContext.getPackageManager().getLaunchIntentForPackage(mPackageName);
} }
void tryToLaunchMediaApplication() {
Intent launchIntent = getAppLaunchIntent();
if (launchIntent != null) {
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mCallback.dismissDialog();
mContext.startActivity(launchIntent);
}
}
CharSequence getHeaderTitle() { CharSequence getHeaderTitle() {
if (mMediaController != null) { if (mMediaController != null) {
final MediaMetadata metadata = mMediaController.getMetadata(); final MediaMetadata metadata = mMediaController.getMetadata();

View File

@@ -242,6 +242,13 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
verify(mMediaOutputBaseAdapter).notifyDataSetChanged(); verify(mMediaOutputBaseAdapter).notifyDataSetChanged();
} }
@Test
public void dismissDialog_closesDialogByBroadcastSender() {
mMediaOutputBaseDialogImpl.dismissDialog();
verify(mBroadcastSender).closeSystemDialogs();
}
@Test @Test
public void whenBroadcasting_verifyLeBroadcastServiceCallBackIsRegisteredAndUnregistered() { public void whenBroadcasting_verifyLeBroadcastServiceCallBackIsRegisteredAndUnregistered() {
when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn( when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(

View File

@@ -251,6 +251,13 @@ public class MediaOutputControllerTest extends SysuiTestCase {
verify(mNearbyMediaDevicesManager).unregisterNearbyDevicesCallback(any()); verify(mNearbyMediaDevicesManager).unregisterNearbyDevicesCallback(any());
} }
@Test
public void tryToLaunchMediaApplication_nullIntent_skip() {
mMediaOutputController.tryToLaunchMediaApplication();
verify(mCb, never()).dismissDialog();
}
@Test @Test
public void onDevicesUpdated_unregistersNearbyDevicesCallback() throws RemoteException { public void onDevicesUpdated_unregistersNearbyDevicesCallback() throws RemoteException {
mMediaOutputController.start(mCb); mMediaOutputController.start(mCb);