diff options
| author | 2020-06-02 11:21:38 -0400 | |
|---|---|---|
| committer | 2020-06-02 16:49:39 -0400 | |
| commit | e03aa8f7512a690ebc25175f6c9214944c256d92 (patch) | |
| tree | df37999a4af1cd68563e8f90e96dc3fae8186b12 | |
| parent | 088de38a8c7591c7a440b2e8e539f3a405c8e11e (diff) | |
Update conversation priority onboarding
And fix a bug with toggling priority I noticed while testing
Test: atest
Fixes: 157988478
Bug: 155490513
Change-Id: I8f5a6076ed2aa6c862a187bac15f3ad9af3cd141
9 files changed, 215 insertions, 185 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 1b19e1290121..52764d568f29 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1778,6 +1778,15 @@ public final class Settings { = "android.settings.NOTIFICATION_SETTINGS"; /** + * Activity Action: Show conversation settings. + * + * @hide + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_CONVERSATION_SETTINGS + = "android.settings.CONVERSATION_SETTINGS"; + + /** * Activity Action: Show notification history screen. * * @hide diff --git a/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml b/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml index c27b3a9b3bf4..bf2eac3c8ff3 100644 --- a/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml +++ b/packages/SystemUI/res/layout/priority_onboarding_half_shell.xml @@ -38,157 +38,67 @@ android:background="@drawable/rounded_bg_full" > - <!-- We have a known number of rows that can be shown; just design them all here --> - <LinearLayout - android:id="@+id/show_at_top_tip" + <ImageView + android:id="@+id/conversation_icon" + android:layout_width="@dimen/notification_guts_conversation_icon_size" + android:layout_height="@dimen/notification_guts_conversation_icon_size" + android:layout_gravity="center_horizontal" /> + + <TextView + android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="8dp" - android:paddingBottom="8dp" - android:paddingStart="4dp" - android:paddingEnd="4dp" - android:orientation="horizontal" - > - <ImageView - android:id="@+id/bell_icon" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center_vertical" - android:src="@drawable/ic_notifications_alert" - android:tint="?android:attr/colorControlNormal" /> - - <TextView - android:id="@+id/show_at_top_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:gravity="center_vertical|start" - android:textSize="15sp" - android:ellipsize="end" - android:maxLines="2" - android:text="@string/priority_onboarding_show_at_top_text" - style="@style/TextAppearance.NotificationInfo" - /> - - </LinearLayout> - - <LinearLayout - android:id="@+id/show_avatar_tip" + android:gravity="center_horizontal" + android:layout_marginTop="16dp" + android:text="@string/priority_onboarding_title" + style="@style/TextAppearance.NotificationImportanceChannel" + /> + + <View + android:id="@+id/divider" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="8dp" - android:paddingBottom="8dp" - android:paddingStart="4dp" - android:paddingEnd="4dp" - android:orientation="horizontal" - > - <ImageView - android:id="@+id/avatar_icon" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center_vertical" - android:src="@drawable/ic_person" - android:tint="?android:attr/colorControlNormal" /> - - <TextView - android:id="@+id/avatar_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:gravity="center_vertical|start" - android:textSize="15sp" - android:ellipsize="end" - android:maxLines="2" - android:text="@string/priority_onboarding_show_avatar_text" - style="@style/TextAppearance.NotificationInfo" - /> + android:layout_height="0.5dp" + android:layout_marginTop="20dp" + android:layout_marginBottom="20dp" + android:background="@color/material_grey_300" /> - </LinearLayout> - - <!-- These rows show optionally --> - - <LinearLayout - android:id="@+id/floating_bubble_tip" + <TextView android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="8dp" - android:paddingBottom="8dp" - android:paddingStart="4dp" - android:paddingEnd="4dp" - android:orientation="horizontal" - > - - <ImageView - android:id="@+id/bubble_icon" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center_vertical" - android:src="@drawable/ic_create_bubble" - android:tint="?android:attr/colorControlNormal" /> + android:gravity="start" + android:text="@string/priority_onboarding_behavior" + style="@style/TextAppearance.NotificationImportanceChannelGroup" + /> - <TextView - android:id="@+id/bubble_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:gravity="center_vertical|start" - android:textSize="15sp" - android:ellipsize="end" - android:maxLines="2" - android:text="@string/priority_onboarding_appear_as_bubble_text" - style="@style/TextAppearance.NotificationInfo" - /> - - </LinearLayout> - - <LinearLayout - android:id="@+id/ignore_dnd_tip" + <TextView + android:id="@+id/behaviors" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="8dp" - android:paddingBottom="8dp" - android:paddingStart="4dp" - android:paddingEnd="4dp" - android:orientation="horizontal" - > - - <ImageView - android:id="@+id/dnd_icon" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center_vertical" - android:src="@drawable/moon" - android:tint="?android:attr/colorControlNormal" /> - - <TextView - android:id="@+id/dnd_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:gravity="center_vertical|start" - android:textSize="15sp" - android:ellipsize="end" - android:maxLines="2" - android:text="@string/priority_onboarding_ignores_dnd_text" - style="@style/TextAppearance.NotificationInfo" - /> - - </LinearLayout> + android:gravity="start" + android:layout_marginTop="8dp" + style="@style/TextAppearance.NotificationImportanceChannelGroup" + /> <!-- Bottom button container --> <RelativeLayout android:id="@+id/button_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingStart="4dp" - android:paddingEnd="4dp" + android:layout_marginTop="32dp" android:orientation="horizontal" > <TextView + android:id="@+id/settings_button" + android:text="@string/priority_onboarding_settings_button_title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:gravity="start|center_vertical" + android:minWidth="@dimen/notification_importance_toggle_size" + android:minHeight="@dimen/notification_importance_toggle_size" + android:maxWidth="125dp" + style="@style/TextAppearance.NotificationInfo.Button"/> + <TextView android:id="@+id/done_button" android:text="@string/priority_onboarding_done_button_title" android:layout_width="wrap_content" diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index e26f31cdf5ad..d32ac6a0b372 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -224,6 +224,7 @@ <dimen name="notification_guts_conversation_icon_size">56dp</dimen> <dimen name="notification_guts_conversation_action_height">56dp</dimen> <dimen name="notification_guts_conversation_action_text_padding_start">32dp</dimen> + <dimen name="conversation_onboarding_bullet_gap_width">6dp</dimen> <!-- The height of the header in inline settings --> <dimen name="notification_guts_header_height">24dp</dimen> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 97a0d032c4a7..39237ac246eb 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2667,6 +2667,11 @@ <string name="inattentive_sleep_warning_title">Standby</string> <!-- Priority conversation onboarding screen --> + <!-- title of priority onboarding [CHAR LIMIT=75] --> + <string name="priority_onboarding_title">Conversation set to priority</string> + <!-- Text explaining that the following actions are the behaviors of priority conversations. + E.g. priority conversations will show at the top of the conversation section [CHAR LIMIT=75] --> + <string name="priority_onboarding_behavior">Priority conversations will:</string> <!-- Text explaining that priority conversations show at the top of the conversation section [CHAR LIMIT=75] --> <string name="priority_onboarding_show_at_top_text">Show at top of conversation section</string> <!-- Text explaining that priority conversations show an avatar on the lock screen [CHAR LIMIT=75] --> @@ -2677,6 +2682,8 @@ <string name="priority_onboarding_ignores_dnd_text">Interrupt Do Not Disturb</string> <!-- Title for the affirmative button [CHAR LIMIT=50] --> <string name="priority_onboarding_done_button_title">Got it</string> + <!-- Title for the settings button button [CHAR LIMIT=50] --> + <string name="priority_onboarding_settings_button_title">Settings</string> <!-- Window Magnification strings --> <!-- Title for Magnification Overlay Window [CHAR LIMIT=NONE] --> diff --git a/packages/SystemUI/src/com/android/systemui/Prefs.java b/packages/SystemUI/src/com/android/systemui/Prefs.java index 87990cd3bffa..ccb506de6d8b 100644 --- a/packages/SystemUI/src/com/android/systemui/Prefs.java +++ b/packages/SystemUI/src/com/android/systemui/Prefs.java @@ -124,7 +124,7 @@ public final class Prefs { String HAS_SEEN_BUBBLES_MANAGE_EDUCATION = "HasSeenBubblesManageOnboarding"; String CONTROLS_STRUCTURE_SWIPE_TOOLTIP_COUNT = "ControlsStructureSwipeTooltipCount"; /** Tracks whether the user has seen the onboarding screen for priority conversations */ - String HAS_SEEN_PRIORITY_ONBOARDING = "HasSeenPriorityOnboarding"; + String HAS_SEEN_PRIORITY_ONBOARDING = "HaveShownPriorityOnboarding"; } public static boolean getBoolean(Context context, @Key String key, boolean defaultValue) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java index daa4ffe88b4f..e9d89589172e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java @@ -53,6 +53,7 @@ import android.transition.TransitionManager; import android.transition.TransitionSet; import android.util.AttributeSet; import android.util.Log; +import android.util.Slog; import android.view.LayoutInflater; import android.view.View; import android.view.accessibility.AccessibilityEvent; @@ -115,6 +116,7 @@ public class NotificationConversationInfo extends LinearLayout implements private OnSnoozeClickListener mOnSnoozeClickListener; private OnSettingsClickListener mOnSettingsClickListener; private NotificationGuts mGutsContainer; + private OnConversationSettingsClickListener mOnConversationSettingsClickListener; @VisibleForTesting boolean mSkipPost = false; @@ -164,6 +166,10 @@ public class NotificationConversationInfo extends LinearLayout implements private OnClickListener mOnDone = v -> { mPressedApply = true; + // If the user selected Priority, maybe show the priority onboarding + if (mSelectedAction == ACTION_FAVORITE && shouldShowPriorityOnboarding()) { + showPriorityOnboarding(); + } mGutsContainer.closeControls(v, true); }; @@ -175,6 +181,10 @@ public class NotificationConversationInfo extends LinearLayout implements void onClick(View v, NotificationChannel channel, int appUid); } + public interface OnConversationSettingsClickListener { + void onClick(); + } + public interface OnAppSettingsClickListener { void onClick(View v, Intent intent); } @@ -190,14 +200,6 @@ public class NotificationConversationInfo extends LinearLayout implements } mSelectedAction = selectedAction; - onSelectedActionChanged(); - } - - private void onSelectedActionChanged() { - // If the user selected Priority, maybe show the priority onboarding - if (mSelectedAction == ACTION_FAVORITE && shouldShowPriorityOnboarding()) { - showPriorityOnboarding(); - } } public void bindNotification( @@ -216,7 +218,8 @@ public class NotificationConversationInfo extends LinearLayout implements Provider<PriorityOnboardingDialogController.Builder> builderProvider, boolean isDeviceProvisioned, @Main Handler mainHandler, - @Background Handler bgHandler) { + @Background Handler bgHandler, + OnConversationSettingsClickListener onConversationSettingsClickListener) { mSelectedAction = -1; mINotificationManager = iNotificationManager; mVisualStabilityManager = visualStabilityManager; @@ -231,6 +234,7 @@ public class NotificationConversationInfo extends LinearLayout implements mDelegatePkg = mSbn.getOpPkg(); mIsDeviceProvisioned = isDeviceProvisioned; mOnSnoozeClickListener = onSnoozeClickListener; + mOnConversationSettingsClickListener = onConversationSettingsClickListener; mIconFactory = conversationIconFactory; mUserContext = userContext; mBubbleMetadata = bubbleMetadata; @@ -323,7 +327,6 @@ public class NotificationConversationInfo extends LinearLayout implements ImageView image = findViewById(R.id.conversation_icon); image.setImageDrawable(mIconFactory.getConversationDrawable( mShortcutInfo, mPackageName, mAppUid, important)); - } private void bindPackage() { @@ -521,9 +524,9 @@ public class NotificationConversationInfo extends LinearLayout implements boolean ignoreDnd = false; try { - ignoreDnd = (mINotificationManager - .getConsolidatedNotificationPolicy().priorityConversationSenders - & NotificationManager.Policy.CONVERSATION_SENDERS_IMPORTANT) != 0; + ignoreDnd = mINotificationManager + .getConsolidatedNotificationPolicy().priorityConversationSenders == + NotificationManager.Policy.CONVERSATION_SENDERS_IMPORTANT; } catch (RemoteException e) { Log.e(TAG, "Could not check conversation senders", e); } @@ -538,6 +541,8 @@ public class NotificationConversationInfo extends LinearLayout implements .setView(onboardingView) .setIgnoresDnd(ignoreDnd) .setShowsAsBubble(showAsBubble) + .setIcon(((ImageView) findViewById(R.id.conversation_icon)).getDrawable()) + .setOnSettingsClick(mOnConversationSettingsClickListener) .build(); controller.init(); @@ -613,8 +618,7 @@ public class NotificationConversationInfo extends LinearLayout implements try { switch (mAction) { case ACTION_FAVORITE: - mChannelToUpdate.setImportantConversation( - !mChannelToUpdate.isImportantConversation()); + mChannelToUpdate.setImportantConversation(true); if (mChannelToUpdate.isImportantConversation()) { mChannelToUpdate.setAllowBubbles(true); if (mAppBubble == BUBBLE_PREFERENCE_NONE) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java index a64dcdffff1e..1074adc3383d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java @@ -216,6 +216,11 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx } } + private void startConversationSettingsActivity(int uid, ExpandableNotificationRow row) { + final Intent intent = new Intent(Settings.ACTION_CONVERSATION_SETTINGS); + mNotificationActivityStarter.startNotificationGutsIntent(intent, uid, row); + } + private boolean bindGuts(final ExpandableNotificationRow row) { row.ensureGutsInflated(); return bindGuts(row, mGutsMenuItem); @@ -438,6 +443,12 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx mListContainer.getSwipeActionHelper().snooze(sbn, hours); }; + final NotificationConversationInfo.OnConversationSettingsClickListener + onConversationSettingsListener = + () -> { + startConversationSettingsActivity(sbn.getUid(), row); + }; + if (!userHandle.equals(UserHandle.ALL) || mLockscreenUserManager.getCurrentUserId() == UserHandle.USER_SYSTEM) { onSettingsClick = (View v, NotificationChannel channel, int appUid) -> { @@ -468,7 +479,8 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx mBuilderProvider, mDeviceProvisionedController.isDeviceProvisioned(), mMainHandler, - mBgHandler); + mBgHandler, + onConversationSettingsListener); } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PriorityOnboardingDialogController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PriorityOnboardingDialogController.kt index d1b405256f39..88c325880241 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PriorityOnboardingDialogController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PriorityOnboardingDialogController.kt @@ -21,19 +21,21 @@ import android.content.Context import android.graphics.Color import android.graphics.PixelFormat import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.text.SpannableStringBuilder +import android.text.style.BulletSpan import android.view.Gravity import android.view.View -import android.view.View.GONE import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.view.Window import android.view.WindowInsets.Type.statusBars import android.view.WindowManager -import android.widget.LinearLayout +import android.widget.ImageView import android.widget.TextView import com.android.systemui.Prefs import com.android.systemui.R -import java.lang.IllegalStateException +import com.android.systemui.statusbar.notification.row.NotificationConversationInfo.OnConversationSettingsClickListener import javax.inject.Inject /** @@ -43,7 +45,9 @@ class PriorityOnboardingDialogController @Inject constructor( val view: View, val context: Context, val ignoresDnd: Boolean, - val showsAsBubble: Boolean + val showsAsBubble: Boolean, + val icon : Drawable, + val onConversationSettingsClickListener : OnConversationSettingsClickListener ) { private lateinit var dialog: Dialog @@ -62,11 +66,21 @@ class PriorityOnboardingDialogController @Inject constructor( dialog.dismiss() } + private fun settings() { + // Log that the user has seen the onboarding + Prefs.putBoolean(context, Prefs.Key.HAS_SEEN_PRIORITY_ONBOARDING, true) + dialog.dismiss() + onConversationSettingsClickListener?.onClick() + } + class Builder @Inject constructor() { private lateinit var view: View private lateinit var context: Context private var ignoresDnd = false private var showAsBubble = false + private lateinit var icon: Drawable + private lateinit var onConversationSettingsClickListener + : OnConversationSettingsClickListener fun setView(v: View): Builder { view = v @@ -88,9 +102,20 @@ class PriorityOnboardingDialogController @Inject constructor( return this } + fun setIcon(draw : Drawable) : Builder { + icon = draw + return this + } + + fun setOnSettingsClick(onClick : OnConversationSettingsClickListener) : Builder { + onConversationSettingsClickListener = onClick + return this + } + fun build(): PriorityOnboardingDialogController { val controller = PriorityOnboardingDialogController( - view, context, ignoresDnd, showAsBubble) + view, context, ignoresDnd, showAsBubble, icon, + onConversationSettingsClickListener) return controller } } @@ -113,13 +138,32 @@ class PriorityOnboardingDialogController @Inject constructor( done() } - if (!ignoresDnd) { - findViewById<LinearLayout>(R.id.ignore_dnd_tip).visibility = GONE + findViewById<TextView>(R.id.settings_button)?.setOnClickListener { + settings() } - if (!showsAsBubble) { - findViewById<LinearLayout>(R.id.floating_bubble_tip).visibility = GONE + findViewById<ImageView>(R.id.conversation_icon)?.setImageDrawable(icon) + + val gapWidth = dialog.context.getResources().getDimensionPixelSize( + R.dimen.conversation_onboarding_bullet_gap_width) + val description = SpannableStringBuilder() + description.append(context.getText(R.string.priority_onboarding_show_at_top_text), + BulletSpan(gapWidth), /* flags */0) + description.append(System.lineSeparator()) + description.append(context.getText(R.string.priority_onboarding_show_avatar_text), + BulletSpan(gapWidth), /* flags */0) + if (showsAsBubble) { + description.append(System.lineSeparator()) + description.append(context.getText( + R.string.priority_onboarding_appear_as_bubble_text), + BulletSpan(gapWidth), /* flags */0) + } + if (ignoresDnd) { + description.append(System.lineSeparator()) + description.append(context.getText(R.string.priority_onboarding_ignores_dnd_text), + BulletSpan(gapWidth), /* flags */0) } + findViewById<TextView>(R.id.behaviors).setText(description) window?.apply { setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) @@ -129,7 +173,7 @@ class PriorityOnboardingDialogController @Inject constructor( attributes = attributes.apply { format = PixelFormat.TRANSLUCENT - title = ChannelEditorDialogController::class.java.simpleName + title = PriorityOnboardingDialogController::class.java.simpleName gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL fitInsetsTypes = attributes.fitInsetsTypes and statusBars().inv() width = MATCH_PARENT diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java index b1f67ce8a581..4122cf5466e2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java @@ -256,7 +256,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final ImageView view = mNotificationInfo.findViewById(R.id.conversation_icon); assertEquals(mIconDrawable, view.getDrawable()); } @@ -280,7 +280,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final TextView textView = mNotificationInfo.findViewById(R.id.pkg_name); assertTrue(textView.getText().toString().contains("App Name")); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); @@ -331,7 +331,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final TextView textView = mNotificationInfo.findViewById(R.id.group_name); assertTrue(textView.getText().toString().contains(group.getName())); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); @@ -356,7 +356,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final TextView textView = mNotificationInfo.findViewById(R.id.group_name); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); assertEquals(GONE, textView.getVisibility()); @@ -380,7 +380,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name); assertEquals(GONE, nameView.getVisibility()); } @@ -415,7 +415,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name); assertEquals(VISIBLE, nameView.getVisibility()); assertTrue(nameView.getText().toString().contains("Proxied")); @@ -443,7 +443,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final View settingsButton = mNotificationInfo.findViewById(R.id.info); settingsButton.performClick(); @@ -469,7 +469,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertTrue(settingsButton.getVisibility() != View.VISIBLE); } @@ -496,7 +496,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, false, mTestHandler, - mTestHandler); + mTestHandler, null); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertTrue(settingsButton.getVisibility() != View.VISIBLE); } @@ -521,7 +521,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View view = mNotificationInfo.findViewById(R.id.silence); assertThat(view.isSelected()).isTrue(); } @@ -549,7 +549,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View view = mNotificationInfo.findViewById(R.id.default_behavior); assertThat(view.isSelected()).isTrue(); assertThat(((TextView) view.findViewById(R.id.default_summary)).getText()).isEqualTo( @@ -580,7 +580,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View view = mNotificationInfo.findViewById(R.id.default_behavior); assertThat(view.isSelected()).isTrue(); assertThat(((TextView) view.findViewById(R.id.default_summary)).getText()).isEqualTo( @@ -610,7 +610,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View fave = mNotificationInfo.findViewById(R.id.priority); fave.performClick(); @@ -654,7 +654,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); mNotificationInfo.findViewById(R.id.default_behavior).performClick(); mTestableLooper.processAllMessages(); @@ -697,7 +697,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View silence = mNotificationInfo.findViewById(R.id.silence); @@ -741,7 +741,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View fave = mNotificationInfo.findViewById(R.id.priority); fave.performClick(); @@ -778,7 +778,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View fave = mNotificationInfo.findViewById(R.id.priority); fave.performClick(); @@ -793,6 +793,45 @@ public class NotificationConversationInfoTest extends SysuiTestCase { } @Test + public void testFavorite_thenDefaultThenFavorite_andSave_nothingChanged() throws Exception { + mConversationChannel.setOriginalImportance(IMPORTANCE_HIGH); + mConversationChannel.setImportance(IMPORTANCE_HIGH); + mConversationChannel.setImportantConversation(true); + + mNotificationInfo.bindNotification( + mShortcutManager, + mMockPackageManager, + mMockINotificationManager, + mVisualStabilityManager, + TEST_PACKAGE_NAME, + mNotificationChannel, + mEntry, + mBubbleMetadata, + null, + null, + mIconFactory, + mContext, + mBuilderProvider, + true, + mTestHandler, + mTestHandler, null); + + View fave = mNotificationInfo.findViewById(R.id.priority); + fave.performClick(); + mNotificationInfo.findViewById(R.id.default_behavior).performClick(); + fave.performClick(); + mNotificationInfo.findViewById(R.id.done).performClick(); + mTestableLooper.processAllMessages(); + + ArgumentCaptor<NotificationChannel> captor = + ArgumentCaptor.forClass(NotificationChannel.class); + verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( + anyString(), anyInt(), captor.capture()); + assertEquals(IMPORTANCE_HIGH, captor.getValue().getImportance()); + assertTrue(captor.getValue().isImportantConversation()); + } + + @Test public void testDefault_andSave() throws Exception { mConversationChannel.setAllowBubbles(true); mConversationChannel.setOriginalImportance(IMPORTANCE_HIGH); @@ -813,7 +852,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); mNotificationInfo.findViewById(R.id.default_behavior).performClick(); mNotificationInfo.findViewById(R.id.done).performClick(); @@ -849,7 +888,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); mNotificationInfo.findViewById(R.id.default_behavior).performClick(); mNotificationInfo.findViewById(R.id.done).performClick(); @@ -885,7 +924,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); mNotificationInfo.findViewById(R.id.default_behavior).performClick(); mNotificationInfo.findViewById(R.id.done).performClick(); @@ -920,7 +959,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); View silence = mNotificationInfo.findViewById(R.id.silence); silence.performClick(); @@ -954,7 +993,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); verify(mMockINotificationManager, times(1)).createConversationNotificationChannelForPackage( anyString(), anyInt(), anyString(), any(), eq(CONVERSATION_ID)); @@ -979,7 +1018,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { mBuilderProvider, true, mTestHandler, - mTestHandler); + mTestHandler, null); verify(mMockINotificationManager, never()).createConversationNotificationChannelForPackage( anyString(), anyInt(), anyString(), any(), eq(CONVERSATION_ID)); @@ -1014,10 +1053,14 @@ public class NotificationConversationInfoTest extends SysuiTestCase { () -> b, true, mTestHandler, - mTestHandler); + mTestHandler, null); // WHEN user clicks "priority" mNotificationInfo.setSelectedAction(NotificationConversationInfo.ACTION_FAVORITE); + verify(controller, never()).show(); + + // and then done + mNotificationInfo.findViewById(R.id.done).performClick(); // THEN the user is presented with the priority onboarding screen verify(controller, atLeastOnce()).show(); @@ -1050,7 +1093,7 @@ public class NotificationConversationInfoTest extends SysuiTestCase { () -> b, true, mTestHandler, - mTestHandler); + mTestHandler, null); // WHEN user clicks "priority" mNotificationInfo.setSelectedAction(NotificationConversationInfo.ACTION_FAVORITE); |