From 5d0057615aad046b50895e98d140180c7bd10955 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 6 Apr 2022 12:06:08 +0800 Subject: [PATCH] Fix title clipped for "Custom settings for schedule" Set rule to header, switch and action buttons controllers before their isAvailable() is called in onCreate(). Fix: 228262001 Test: manual Change-Id: Idc0ea779ab768497a8426ac847c4bbb2c6c4faea --- ...tomaticRuleHeaderPreferenceController.java | 13 +++--- ...tomaticRuleSwitchPreferenceController.java | 10 ++--- .../zen/ZenModeRuleSettingsBase.java | 21 ++++++---- .../ZenRuleButtonsPreferenceController.java | 17 ++++---- .../zen/ZenModeEventRuleSettingsTest.java | 42 +++++-------------- 5 files changed, 40 insertions(+), 63 deletions(-) diff --git a/src/com/android/settings/notification/zen/ZenAutomaticRuleHeaderPreferenceController.java b/src/com/android/settings/notification/zen/ZenAutomaticRuleHeaderPreferenceController.java index 813955558ca..a0c33dfb4b8 100644 --- a/src/com/android/settings/notification/zen/ZenAutomaticRuleHeaderPreferenceController.java +++ b/src/com/android/settings/notification/zen/ZenAutomaticRuleHeaderPreferenceController.java @@ -38,10 +38,8 @@ import com.android.settingslib.widget.LayoutPreference; public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModePreferenceController implements PreferenceControllerMixin { - private final String KEY = PREF_KEY_APP_HEADER; private final PreferenceFragmentCompat mFragment; private AutomaticZenRule mRule; - private String mId; private EntityHeaderController mController; public ZenAutomaticRuleHeaderPreferenceController(Context context, @@ -52,7 +50,11 @@ public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModeP @Override public String getPreferenceKey() { - return KEY; + return PREF_KEY_APP_HEADER; + } + + void setRule(AutomaticZenRule rule) { + mRule = rule; } @Override @@ -96,9 +98,4 @@ public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModeP return null; } - - protected void onResume(AutomaticZenRule rule, String id) { - mRule = rule; - mId = id; - } } diff --git a/src/com/android/settings/notification/zen/ZenAutomaticRuleSwitchPreferenceController.java b/src/com/android/settings/notification/zen/ZenAutomaticRuleSwitchPreferenceController.java index 703ffae49a4..fa36dde5171 100644 --- a/src/com/android/settings/notification/zen/ZenAutomaticRuleSwitchPreferenceController.java +++ b/src/com/android/settings/notification/zen/ZenAutomaticRuleSwitchPreferenceController.java @@ -48,6 +48,11 @@ public class ZenAutomaticRuleSwitchPreferenceController extends return KEY; } + void setIdAndRule(String id, AutomaticZenRule rule) { + mId = id; + mRule = rule; + } + @Override public boolean isAvailable() { return mRule != null && mId != null; @@ -74,11 +79,6 @@ public class ZenAutomaticRuleSwitchPreferenceController extends } } - public void onResume(AutomaticZenRule rule, String id) { - mRule = rule; - mId = id; - } - public void updateState(Preference preference) { if (mRule != null) { mSwitchBar.updateStatus(mRule.isEnabled()); diff --git a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java index 5ce8b48b27c..57684f63a2f 100644 --- a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java +++ b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java @@ -43,7 +43,6 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase { private final String CUSTOM_BEHAVIOR_KEY = "zen_custom_setting"; - protected Context mContext; protected boolean mDisableListeners; protected AutomaticZenRule mRule; protected String mId; @@ -58,9 +57,8 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase { abstract protected void updateControlsInternal(); @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - mContext = getActivity(); + public void onAttach(Context context) { + super.onAttach(context); final Intent intent = getActivity().getIntent(); if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent); @@ -78,7 +76,14 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase { } if (DEBUG) Log.d(TAG, "mId=" + mId); - if (refreshRuleOrFinish()) { + refreshRuleOrFinish(); + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + if (isFinishingOrDestroyed()) { return; } @@ -128,15 +133,12 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase { protected void updateHeader() { final PreferenceScreen screen = getPreferenceScreen(); - mSwitch.onResume(mRule, mId); mSwitch.displayPreference(screen); updatePreference(mSwitch); - mHeader.onResume(mRule, mId); mHeader.displayPreference(screen); updatePreference(mHeader); - mActionButtons.onResume(mRule, mId); mActionButtons.displayPreference(screen); updatePreference(mActionButtons); } @@ -157,6 +159,9 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase { private boolean refreshRuleOrFinish() { mRule = getZenRule(); if (DEBUG) Log.d(TAG, "mRule=" + mRule); + mHeader.setRule(mRule); + mSwitch.setIdAndRule(mId, mRule); + mActionButtons.setIdAndRule(mId, mRule); if (!setRule(mRule)) { toastAndFinish(); return true; diff --git a/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java b/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java index 1b57fed4e6e..3b7cde09cf0 100644 --- a/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java +++ b/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java @@ -39,11 +39,9 @@ public class ZenRuleButtonsPreferenceController extends AbstractZenModePreferenc implements PreferenceControllerMixin { public static final String KEY = "zen_action_buttons"; - private AutomaticZenRule mRule; + private final PreferenceFragmentCompat mFragment; private String mId; - private PreferenceFragmentCompat mFragment; - private ActionButtonsPreference mButtonsPref; - + private AutomaticZenRule mRule; public ZenRuleButtonsPreferenceController(Context context, PreferenceFragmentCompat fragment, Lifecycle lc) { @@ -51,6 +49,10 @@ public class ZenRuleButtonsPreferenceController extends AbstractZenModePreferenc mFragment = fragment; } + void setIdAndRule(String id, AutomaticZenRule rule) { + mId = id; + mRule = rule; + } @Override public boolean isAvailable() { @@ -60,7 +62,7 @@ public class ZenRuleButtonsPreferenceController extends AbstractZenModePreferenc @Override public void displayPreference(PreferenceScreen screen) { if (isAvailable()) { - mButtonsPref = ((ActionButtonsPreference) screen.findPreference(KEY)) + ((ActionButtonsPreference) screen.findPreference(KEY)) .setButton1Text(R.string.zen_mode_rule_name_edit) .setButton1Icon(com.android.internal.R.drawable.ic_mode_edit) .setButton1OnClickListener(new EditRuleNameClickListener()) @@ -116,9 +118,4 @@ public class ZenRuleButtonsPreferenceController extends AbstractZenModePreferenc }); } } - - protected void onResume(AutomaticZenRule rule, String id) { - mRule = rule; - mId = id; - } } diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeEventRuleSettingsTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeEventRuleSettingsTest.java index f0409ce93f8..eeb53cff369 100644 --- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeEventRuleSettingsTest.java +++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeEventRuleSettingsTest.java @@ -18,31 +18,27 @@ package com.android.settings.notification.zen; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.robolectric.RuntimeEnvironment.application; -import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Looper; import androidx.fragment.app.FragmentActivity; +import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; -import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowToast; import java.util.ArrayList; @@ -57,42 +53,32 @@ public class ZenModeEventRuleSettingsTest { @Mock private Intent mIntent; - @Mock - private NotificationManager mNotificationManager; - - private TestFragment mFragment; + private ZenModeEventRuleSettings mFragment; private Context mContext; @Before public void setUp() { MockitoAnnotations.initMocks(this); - ShadowApplication shadowApplication = ShadowApplication.getInstance(); - shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNotificationManager); - mContext = application; + mContext = ApplicationProvider.getApplicationContext(); - mFragment = spy(new TestFragment()); - mFragment.onAttach(application); - - doReturn(mActivity).when(mFragment).getActivity(); - - Resources res = application.getResources(); - - doReturn(res).when(mFragment).getResources(); + Resources res = mContext.getResources(); when(mActivity.getTheme()).thenReturn(res.newTheme()); when(mActivity.getIntent()).thenReturn(mIntent); when(mActivity.getResources()).thenReturn(res); when(mActivity.getMainLooper()).thenReturn(mock(Looper.class)); + + mFragment = spy(new ZenModeEventRuleSettings()); + when(mFragment.getActivity()).thenReturn(mActivity); when(mFragment.getContext()).thenReturn(mContext); + when(mFragment.getResources()).thenReturn(res); + mFragment.onAttach(mContext); } @Test - @Ignore - public void onCreate_noRuleId_shouldToastAndFinishAndNoCrash() { + public void onAttach_noRuleId_shouldToastAndFinishAndNoCrash() { final String expected = mContext.getString(R.string.zen_mode_rule_not_found_text); - mFragment.onCreate(null); - // verify the toast assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(expected); @@ -110,12 +96,4 @@ public class ZenModeEventRuleSettingsTest { mFragment.addCalendar(1234, "calName", 3, calendarsList); assertThat(calendarsList.size()).isEqualTo(1); } - - private static class TestFragment extends ZenModeEventRuleSettings { - - @Override - protected Object getSystemService(final String name) { - return null; - } - } }