Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java +27 −17 Original line number Diff line number Diff line Loading @@ -163,7 +163,8 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { Log.d(TAG, "Create dialog error: null deviceItems"); return builder.build(); } BluetoothLeBroadcastMetadata metadata = arguments.getParcelable( BluetoothLeBroadcastMetadata metadata = arguments.getParcelable( BUNDLE_KEY_BROADCAST_METADATA, BluetoothLeBroadcastMetadata.class); Drawable qrCodeDrawable = null; if (deviceItems.isEmpty()) { Loading @@ -189,22 +190,31 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { } launcher.launch(); }); qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata, getContext()).orElse(null); qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata, getContext()).orElse(null); if (qrCodeDrawable != null) { String broadcastName = metadata.getBroadcastName() == null ? "" : metadata.getBroadcastName(); boolean hasPassword = metadata.getBroadcastCode() != null boolean hasPassword = metadata.getBroadcastCode() != null && metadata.getBroadcastCode().length > 0; String message = hasPassword ? getString( R.string.audio_sharing_dialog_qr_code_content, broadcastName, new String(metadata.getBroadcastCode(), StandardCharsets.UTF_8)) : getString(R.string.audio_sharing_dialog_qr_code_content_no_password, String message = hasPassword ? getString( R.string.audio_sharing_dialog_qr_code_content, broadcastName, new String( metadata.getBroadcastCode(), StandardCharsets.UTF_8)) : getString( R.string.audio_sharing_dialog_qr_code_content_no_password, broadcastName); builder.setCustomMessage(message) .setCustomMessage2(R.string.audio_sharing_dialog_pair_new_device_content) .setCustomNegativeButton(R.string.audio_streams_dialog_close, v -> onCancelClick()); .setCustomNegativeButton( R.string.audio_streams_dialog_close, v -> onCancelClick()); } else { builder.setCustomImage(R.drawable.audio_sharing_guidance) .setCustomMessage(R.string.audio_sharing_dialog_connect_device_content) Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java +27 −26 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.settings.SettingsEnums; import android.os.Bundle; import android.util.Log; import android.util.Pair; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -78,7 +79,6 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -120,8 +120,8 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag } else { Log.d(TAG, "Show up the dialog."); final Bundle bundle = new Bundle(); bundle.putParcelableList(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putParcelableList( BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); AudioSharingDisconnectDialogFragment dialogFrag = new AudioSharingDisconnectDialogFragment(); dialogFrag.setArguments(bundle); Loading Loading @@ -161,6 +161,14 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag Bundle arguments = requireArguments(); List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, List.class); View.OnClickListener onNegativeBtnClicked = v -> { mMetricsFeatureProvider.action( getContext(), SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); dismiss(); }; AudioSharingDialogFactory.DialogBuilder builder = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_disconnect_dialog_title) Loading @@ -168,34 +176,27 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_disconnect_content) .setCustomNegativeButton( com.android.settings.R.string.cancel, v -> { mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); dismiss(); }); com.android.settings.R.string.cancel, onNegativeBtnClicked); if (deviceItems == null) { Log.d(TAG, "Create dialog error: null deviceItems"); return builder.build(); } builder.setCustomDeviceActions( new AudioSharingDeviceAdapter( getContext(), deviceItems, AudioSharingDeviceAdapter.OnClickListener onClickListener = (AudioSharingDeviceItem item) -> { if (sListener != null) { sListener.onItemClick(item); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } dismiss(); }, }; builder.setCustomDeviceActions( new AudioSharingDeviceAdapter( getContext(), deviceItems, onClickListener, AudioSharingDeviceAdapter.ActionType.REMOVE)); return builder.build(); } Loading @@ -206,15 +207,15 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } } private static void updateDialog( @NonNull List<AudioSharingDeviceItem> deviceItems, @NonNull AlertDialog dialog) { @NonNull List<AudioSharingDeviceItem> deviceItems, @NonNull AlertDialog dialog) { AudioSharingDialogFactory.updateCustomDeviceActions(dialog, deviceItems); } } src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java +28 −27 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.settings.SettingsEnums; import android.os.Bundle; import android.util.Log; import android.util.Pair; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -77,7 +78,6 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -112,8 +112,7 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { AudioSharingUtils.postOnMainThread( host.getContext(), () -> { AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { Log.d(TAG, "Dialog is showing, update the content."); updateDialog(deviceItems, newDevice.getName(), dialog); Loading Loading @@ -162,42 +161,43 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_ITEMS, List.class); String newDeviceName = arguments.getString(BUNDLE_KEY_NEW_DEVICE_NAME); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_share_dialog_title) .setTitleIcon(com.android.settingslib.R.drawable.ic_bt_le_audio_sharing) .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_share_content) .setCustomPositiveButton( R.string.audio_sharing_share_button_label, View.OnClickListener onPositiveBtnClicked = v -> { if (sListener != null) { sListener.onShareClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } dismiss(); }) .setCustomNegativeButton( getMetricsCategory() == SettingsEnums.DIALOG_START_AUDIO_SHARING ? getString( R.string.audio_sharing_switch_active_button_label, newDeviceName) : getString(R.string.audio_sharing_no_thanks_button_label), }; View.OnClickListener onNegativeBtnClicked = v -> { if (sListener != null) { sListener.onCancelClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); } dismiss(); }) }; AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_share_dialog_title) .setTitleIcon(com.android.settingslib.R.drawable.ic_bt_le_audio_sharing) .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_share_content) .setCustomPositiveButton( R.string.audio_sharing_share_button_label, onPositiveBtnClicked) .setCustomNegativeButton( getMetricsCategory() == SettingsEnums.DIALOG_START_AUDIO_SHARING ? getString( R.string.audio_sharing_switch_active_button_label, newDeviceName) : getString(R.string.audio_sharing_no_thanks_button_label), onNegativeBtnClicked) .build(); if (deviceItems == null) { Log.d(TAG, "Fail to create dialog: null deviceItems"); Loading @@ -215,7 +215,8 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java +34 −31 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.connecteddevice.audiosharing; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.util.Pair; Loading Loading @@ -75,7 +76,6 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -117,8 +117,8 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { } else { Log.d(TAG, "Show up the dialog."); final Bundle bundle = new Bundle(); bundle.putParcelableList(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putParcelableList( BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putString(BUNDLE_KEY_NEW_DEVICE_NAME, newDevice.getName()); AudioSharingStopDialogFragment dialogFrag = new AudioSharingStopDialogFragment(); Loading Loading @@ -160,30 +160,30 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, List.class); String newDeviceName = arguments.getString(BUNDLE_KEY_NEW_DEVICE_NAME); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitleIcon(com.android.settings.R.drawable.ic_warning_24dp) .setIsCustomBodyEnabled(true) .setPositiveButton( R.string.audio_sharing_connect_button_label, DialogInterface.OnClickListener onPositiveBtnClicked = (dlg, which) -> { if (sListener != null) { sListener.onStopSharingClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } }) .setNegativeButton( com.android.settings.R.string.cancel, }; DialogInterface.OnClickListener onNegativeBtnClicked = (dlg, which) -> mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData)) SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitleIcon(com.android.settings.R.drawable.ic_warning_24dp) .setIsCustomBodyEnabled(true) .setPositiveButton( R.string.audio_sharing_connect_button_label, onPositiveBtnClicked) .setNegativeButton( com.android.settings.R.string.cancel, onNegativeBtnClicked) .build(); dialog.show(); updateDialog(getContext(), deviceItems, newDeviceName, dialog); Loading @@ -196,7 +196,8 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } Loading @@ -211,17 +212,19 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { String customMessage = ""; if (deviceItems != null) { if (deviceItems.size() == 1) { customMessage = context.getString( customMessage = context.getString( R.string.audio_sharing_stop_dialog_content, Iterables.getOnlyElement(deviceItems).getName()); } else if (deviceItems.size() == 2) { customMessage = context.getString( customMessage = context.getString( R.string.audio_sharing_stop_dialog_with_two_content, deviceItems.get(0).getName(), deviceItems.get(1).getName()); } else { customMessage = context.getString( R.string.audio_sharing_stop_dialog_with_more_content); customMessage = context.getString(R.string.audio_sharing_stop_dialog_with_more_content); } } AudioSharingDialogFactory.updateTitle(dialog, title); Loading tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java +28 −21 Original line number Diff line number Diff line Loading @@ -87,8 +87,7 @@ public class AudioSharingDialogFragmentTest { private static final AudioSharingDeviceItem TEST_DEVICE_ITEM3 = new AudioSharingDeviceItem(TEST_DEVICE_NAME3, /* groupId= */ 3, /* isActive= */ false); private static final AudioSharingDialogFragment.DialogEventListener EMPTY_EVENT_LISTENER = new AudioSharingDialogFragment.DialogEventListener() { }; new AudioSharingDialogFragment.DialogEventListener() {}; private static final Pair<Integer, Object> TEST_EVENT_DATA = Pair.create(1, 1); private static final Pair<Integer, Object>[] TEST_EVENT_DATA_LIST = new Pair[] {TEST_EVENT_DATA}; Loading Loading @@ -149,7 +148,10 @@ public class AudioSharingDialogFragmentTest { @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING) public void onCreateDialog_unattachedFragment_dialogNotExist() { AudioSharingDialogFragment.show( new Fragment(), new ArrayList<>(), null, EMPTY_EVENT_LISTENER, new Fragment(), new ArrayList<>(), null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -275,14 +277,16 @@ public class AudioSharingDialogFragmentTest { TextView text = dialog.findViewById(R.id.description_text); assertThat(text).isNotNull(); assertThat(METADATA).isNotNull(); assertThat(text.getText().toString()).isEqualTo( mParent.getString(R.string.audio_sharing_dialog_qr_code_content, METADATA.getBroadcastName(), new String( METADATA.getBroadcastCode(), StandardCharsets.UTF_8))); assertThat(text.getText().toString()) .isEqualTo( mParent.getString( R.string.audio_sharing_dialog_qr_code_content, METADATA.getBroadcastName(), new String(METADATA.getBroadcastCode(), StandardCharsets.UTF_8))); TextView textBottom = dialog.findViewById(R.id.description_text_2); assertThat(textBottom).isNotNull(); assertThat(textBottom.getText().toString()).isEqualTo( assertThat(textBottom.getText().toString()) .isEqualTo( mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content)); Button cancelBtn = dialog.findViewById(R.id.negative_btn); assertThat(cancelBtn).isNotNull(); Loading Loading @@ -321,12 +325,15 @@ public class AudioSharingDialogFragmentTest { TextView text = dialog.findViewById(R.id.description_text); assertThat(text).isNotNull(); assertThat(METADATA_NO_PASSWORD).isNotNull(); assertThat(text.getText().toString()).isEqualTo( mParent.getString(R.string.audio_sharing_dialog_qr_code_content_no_password, assertThat(text.getText().toString()) .isEqualTo( mParent.getString( R.string.audio_sharing_dialog_qr_code_content_no_password, METADATA_NO_PASSWORD.getBroadcastName())); TextView textBottom = dialog.findViewById(R.id.description_text_2); assertThat(textBottom).isNotNull(); assertThat(textBottom.getText().toString()).isEqualTo( assertThat(textBottom.getText().toString()) .isEqualTo( mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content)); Button cancelBtn = dialog.findViewById(R.id.negative_btn); assertThat(cancelBtn).isNotNull(); Loading @@ -347,8 +354,8 @@ public class AudioSharingDialogFragmentTest { public void onCreateDialog_flagOn_singleExtraConnectedDevice() { ArrayList<AudioSharingDeviceItem> list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -385,8 +392,8 @@ public class AudioSharingDialogFragmentTest { public void onCreateDialog_singleExtraConnectedDevice_dialogDismiss() { ArrayList<AudioSharingDeviceItem> list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -446,8 +453,8 @@ public class AudioSharingDialogFragmentTest { list.add(TEST_DEVICE_ITEM1); list.add(TEST_DEVICE_ITEM2); list.add(TEST_DEVICE_ITEM3); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java +27 −17 Original line number Diff line number Diff line Loading @@ -163,7 +163,8 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { Log.d(TAG, "Create dialog error: null deviceItems"); return builder.build(); } BluetoothLeBroadcastMetadata metadata = arguments.getParcelable( BluetoothLeBroadcastMetadata metadata = arguments.getParcelable( BUNDLE_KEY_BROADCAST_METADATA, BluetoothLeBroadcastMetadata.class); Drawable qrCodeDrawable = null; if (deviceItems.isEmpty()) { Loading @@ -189,22 +190,31 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { } launcher.launch(); }); qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata, getContext()).orElse(null); qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata, getContext()).orElse(null); if (qrCodeDrawable != null) { String broadcastName = metadata.getBroadcastName() == null ? "" : metadata.getBroadcastName(); boolean hasPassword = metadata.getBroadcastCode() != null boolean hasPassword = metadata.getBroadcastCode() != null && metadata.getBroadcastCode().length > 0; String message = hasPassword ? getString( R.string.audio_sharing_dialog_qr_code_content, broadcastName, new String(metadata.getBroadcastCode(), StandardCharsets.UTF_8)) : getString(R.string.audio_sharing_dialog_qr_code_content_no_password, String message = hasPassword ? getString( R.string.audio_sharing_dialog_qr_code_content, broadcastName, new String( metadata.getBroadcastCode(), StandardCharsets.UTF_8)) : getString( R.string.audio_sharing_dialog_qr_code_content_no_password, broadcastName); builder.setCustomMessage(message) .setCustomMessage2(R.string.audio_sharing_dialog_pair_new_device_content) .setCustomNegativeButton(R.string.audio_streams_dialog_close, v -> onCancelClick()); .setCustomNegativeButton( R.string.audio_streams_dialog_close, v -> onCancelClick()); } else { builder.setCustomImage(R.drawable.audio_sharing_guidance) .setCustomMessage(R.string.audio_sharing_dialog_connect_device_content) Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java +27 −26 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.settings.SettingsEnums; import android.os.Bundle; import android.util.Log; import android.util.Pair; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -78,7 +79,6 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -120,8 +120,8 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag } else { Log.d(TAG, "Show up the dialog."); final Bundle bundle = new Bundle(); bundle.putParcelableList(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putParcelableList( BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); AudioSharingDisconnectDialogFragment dialogFrag = new AudioSharingDisconnectDialogFragment(); dialogFrag.setArguments(bundle); Loading Loading @@ -161,6 +161,14 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag Bundle arguments = requireArguments(); List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, List.class); View.OnClickListener onNegativeBtnClicked = v -> { mMetricsFeatureProvider.action( getContext(), SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); dismiss(); }; AudioSharingDialogFactory.DialogBuilder builder = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_disconnect_dialog_title) Loading @@ -168,34 +176,27 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_disconnect_content) .setCustomNegativeButton( com.android.settings.R.string.cancel, v -> { mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); dismiss(); }); com.android.settings.R.string.cancel, onNegativeBtnClicked); if (deviceItems == null) { Log.d(TAG, "Create dialog error: null deviceItems"); return builder.build(); } builder.setCustomDeviceActions( new AudioSharingDeviceAdapter( getContext(), deviceItems, AudioSharingDeviceAdapter.OnClickListener onClickListener = (AudioSharingDeviceItem item) -> { if (sListener != null) { sListener.onItemClick(item); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } dismiss(); }, }; builder.setCustomDeviceActions( new AudioSharingDeviceAdapter( getContext(), deviceItems, onClickListener, AudioSharingDeviceAdapter.ActionType.REMOVE)); return builder.build(); } Loading @@ -206,15 +207,15 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } } private static void updateDialog( @NonNull List<AudioSharingDeviceItem> deviceItems, @NonNull AlertDialog dialog) { @NonNull List<AudioSharingDeviceItem> deviceItems, @NonNull AlertDialog dialog) { AudioSharingDialogFactory.updateCustomDeviceActions(dialog, deviceItems); } }
src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java +28 −27 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.settings.SettingsEnums; import android.os.Bundle; import android.util.Log; import android.util.Pair; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -77,7 +78,6 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -112,8 +112,7 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { AudioSharingUtils.postOnMainThread( host.getContext(), () -> { AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { Log.d(TAG, "Dialog is showing, update the content."); updateDialog(deviceItems, newDevice.getName(), dialog); Loading Loading @@ -162,42 +161,43 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_ITEMS, List.class); String newDeviceName = arguments.getString(BUNDLE_KEY_NEW_DEVICE_NAME); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_share_dialog_title) .setTitleIcon(com.android.settingslib.R.drawable.ic_bt_le_audio_sharing) .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_share_content) .setCustomPositiveButton( R.string.audio_sharing_share_button_label, View.OnClickListener onPositiveBtnClicked = v -> { if (sListener != null) { sListener.onShareClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } dismiss(); }) .setCustomNegativeButton( getMetricsCategory() == SettingsEnums.DIALOG_START_AUDIO_SHARING ? getString( R.string.audio_sharing_switch_active_button_label, newDeviceName) : getString(R.string.audio_sharing_no_thanks_button_label), }; View.OnClickListener onNegativeBtnClicked = v -> { if (sListener != null) { sListener.onCancelClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); } dismiss(); }) }; AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitle(R.string.audio_sharing_share_dialog_title) .setTitleIcon(com.android.settingslib.R.drawable.ic_bt_le_audio_sharing) .setIsCustomBodyEnabled(true) .setCustomMessage(R.string.audio_sharing_dialog_share_content) .setCustomPositiveButton( R.string.audio_sharing_share_button_label, onPositiveBtnClicked) .setCustomNegativeButton( getMetricsCategory() == SettingsEnums.DIALOG_START_AUDIO_SHARING ? getString( R.string.audio_sharing_switch_active_button_label, newDeviceName) : getString(R.string.audio_sharing_no_thanks_button_label), onNegativeBtnClicked) .build(); if (deviceItems == null) { Log.d(TAG, "Fail to create dialog: null deviceItems"); Loading @@ -215,7 +215,8 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java +34 −31 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.connecteddevice.audiosharing; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.util.Pair; Loading Loading @@ -75,7 +76,6 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { * @param newDevice The latest connected device triggered this dialog. * @param listener The callback to handle the user action on this dialog. * @param eventData The eventData to log with for dialog onClick events. * * @return whether the dialog is shown */ public static boolean show( Loading Loading @@ -117,8 +117,8 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { } else { Log.d(TAG, "Show up the dialog."); final Bundle bundle = new Bundle(); bundle.putParcelableList(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putParcelableList( BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, deviceItems); bundle.putString(BUNDLE_KEY_NEW_DEVICE_NAME, newDevice.getName()); AudioSharingStopDialogFragment dialogFrag = new AudioSharingStopDialogFragment(); Loading Loading @@ -160,30 +160,30 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { List<AudioSharingDeviceItem> deviceItems = arguments.getParcelable(BUNDLE_KEY_DEVICE_TO_DISCONNECT_ITEMS, List.class); String newDeviceName = arguments.getString(BUNDLE_KEY_NEW_DEVICE_NAME); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitleIcon(com.android.settings.R.drawable.ic_warning_24dp) .setIsCustomBodyEnabled(true) .setPositiveButton( R.string.audio_sharing_connect_button_label, DialogInterface.OnClickListener onPositiveBtnClicked = (dlg, which) -> { if (sListener != null) { sListener.onStopSharingClick(); mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_POSITIVE_BTN_CLICKED, sEventData); } }) .setNegativeButton( com.android.settings.R.string.cancel, }; DialogInterface.OnClickListener onNegativeBtnClicked = (dlg, which) -> mMetricsFeatureProvider.action( getContext(), SettingsEnums .ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData)) SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED, sEventData); AlertDialog dialog = AudioSharingDialogFactory.newBuilder(getActivity()) .setTitleIcon(com.android.settings.R.drawable.ic_warning_24dp) .setIsCustomBodyEnabled(true) .setPositiveButton( R.string.audio_sharing_connect_button_label, onPositiveBtnClicked) .setNegativeButton( com.android.settings.R.string.cancel, onNegativeBtnClicked) .build(); dialog.show(); updateDialog(getContext(), deviceItems, newDeviceName, dialog); Loading @@ -196,7 +196,8 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { FragmentActivity activity = getActivity(); if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() && activity instanceof AudioSharingJoinHandlerActivity && !activity.isChangingConfigurations() && !activity.isFinishing()) { && !activity.isChangingConfigurations() && !activity.isFinishing()) { Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName()); activity.finish(); } Loading @@ -211,17 +212,19 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { String customMessage = ""; if (deviceItems != null) { if (deviceItems.size() == 1) { customMessage = context.getString( customMessage = context.getString( R.string.audio_sharing_stop_dialog_content, Iterables.getOnlyElement(deviceItems).getName()); } else if (deviceItems.size() == 2) { customMessage = context.getString( customMessage = context.getString( R.string.audio_sharing_stop_dialog_with_two_content, deviceItems.get(0).getName(), deviceItems.get(1).getName()); } else { customMessage = context.getString( R.string.audio_sharing_stop_dialog_with_more_content); customMessage = context.getString(R.string.audio_sharing_stop_dialog_with_more_content); } } AudioSharingDialogFactory.updateTitle(dialog, title); Loading
tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java +28 −21 Original line number Diff line number Diff line Loading @@ -87,8 +87,7 @@ public class AudioSharingDialogFragmentTest { private static final AudioSharingDeviceItem TEST_DEVICE_ITEM3 = new AudioSharingDeviceItem(TEST_DEVICE_NAME3, /* groupId= */ 3, /* isActive= */ false); private static final AudioSharingDialogFragment.DialogEventListener EMPTY_EVENT_LISTENER = new AudioSharingDialogFragment.DialogEventListener() { }; new AudioSharingDialogFragment.DialogEventListener() {}; private static final Pair<Integer, Object> TEST_EVENT_DATA = Pair.create(1, 1); private static final Pair<Integer, Object>[] TEST_EVENT_DATA_LIST = new Pair[] {TEST_EVENT_DATA}; Loading Loading @@ -149,7 +148,10 @@ public class AudioSharingDialogFragmentTest { @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING) public void onCreateDialog_unattachedFragment_dialogNotExist() { AudioSharingDialogFragment.show( new Fragment(), new ArrayList<>(), null, EMPTY_EVENT_LISTENER, new Fragment(), new ArrayList<>(), null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -275,14 +277,16 @@ public class AudioSharingDialogFragmentTest { TextView text = dialog.findViewById(R.id.description_text); assertThat(text).isNotNull(); assertThat(METADATA).isNotNull(); assertThat(text.getText().toString()).isEqualTo( mParent.getString(R.string.audio_sharing_dialog_qr_code_content, METADATA.getBroadcastName(), new String( METADATA.getBroadcastCode(), StandardCharsets.UTF_8))); assertThat(text.getText().toString()) .isEqualTo( mParent.getString( R.string.audio_sharing_dialog_qr_code_content, METADATA.getBroadcastName(), new String(METADATA.getBroadcastCode(), StandardCharsets.UTF_8))); TextView textBottom = dialog.findViewById(R.id.description_text_2); assertThat(textBottom).isNotNull(); assertThat(textBottom.getText().toString()).isEqualTo( assertThat(textBottom.getText().toString()) .isEqualTo( mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content)); Button cancelBtn = dialog.findViewById(R.id.negative_btn); assertThat(cancelBtn).isNotNull(); Loading Loading @@ -321,12 +325,15 @@ public class AudioSharingDialogFragmentTest { TextView text = dialog.findViewById(R.id.description_text); assertThat(text).isNotNull(); assertThat(METADATA_NO_PASSWORD).isNotNull(); assertThat(text.getText().toString()).isEqualTo( mParent.getString(R.string.audio_sharing_dialog_qr_code_content_no_password, assertThat(text.getText().toString()) .isEqualTo( mParent.getString( R.string.audio_sharing_dialog_qr_code_content_no_password, METADATA_NO_PASSWORD.getBroadcastName())); TextView textBottom = dialog.findViewById(R.id.description_text_2); assertThat(textBottom).isNotNull(); assertThat(textBottom.getText().toString()).isEqualTo( assertThat(textBottom.getText().toString()) .isEqualTo( mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content)); Button cancelBtn = dialog.findViewById(R.id.negative_btn); assertThat(cancelBtn).isNotNull(); Loading @@ -347,8 +354,8 @@ public class AudioSharingDialogFragmentTest { public void onCreateDialog_flagOn_singleExtraConnectedDevice() { ArrayList<AudioSharingDeviceItem> list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -385,8 +392,8 @@ public class AudioSharingDialogFragmentTest { public void onCreateDialog_singleExtraConnectedDevice_dialogDismiss() { ArrayList<AudioSharingDeviceItem> list = new ArrayList<>(); list.add(TEST_DEVICE_ITEM1); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading Loading @@ -446,8 +453,8 @@ public class AudioSharingDialogFragmentTest { list.add(TEST_DEVICE_ITEM1); list.add(TEST_DEVICE_ITEM2); list.add(TEST_DEVICE_ITEM3); AudioSharingDialogFragment.show(mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); AudioSharingDialogFragment.show( mParent, list, null, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST); shadowMainLooper().idle(); AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); Loading