Fix Flicker for ZenCustomRuleSettingsBase am: bab799899d
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/17374483
Change-Id: I751dd866452c17271fdafd6ea7e00098aa2c783d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java b/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
index bf70080..f6997c6 100644
--- a/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
+++ b/src/com/android/settings/notification/zen/AbstractZenCustomRulePreferenceController.java
@@ -19,9 +19,6 @@
import android.app.AutomaticZenRule;
import android.content.Context;
import android.os.Bundle;
-import android.util.Slog;
-
-import androidx.preference.Preference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -38,22 +35,18 @@
}
@Override
- public void updateState(Preference preference) {
- if (mId != null) {
- mRule = mBackend.getAutomaticZenRule(mId);
- }
- }
-
- @Override
public boolean isAvailable() {
return mRule != null;
}
- public void onResume(AutomaticZenRule rule, String id) {
+ public void setIdAndRule(String id, AutomaticZenRule rule) {
mId = id;
mRule = rule;
}
+ public void onResume() {
+ }
+
Bundle createBundle() {
Bundle bundle = new Bundle();
bundle.putString(ZenCustomRuleSettings.RULE_ID, mId);
diff --git a/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
index 28a3046..b417e03 100644
--- a/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
+++ b/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
@@ -37,10 +37,11 @@
String mId;
AutomaticZenRule mRule;
List<AbstractPreferenceController> mControllers = new ArrayList<>();
+ private boolean mIsFirstLaunch = true;
/**
* @return null if no preference category exists
- */
+ */
abstract String getPreferenceCategoryKey();
@Override
@@ -49,7 +50,7 @@
Bundle bundle = getArguments();
if (bundle != null && bundle.containsKey(RULE_ID)) {
mId = bundle.getString(RULE_ID);
- mRule = mBackend.getAutomaticZenRule(mId);
+ updateRule();
} else {
Log.d(TAG, "Rule id required to set custom dnd rule config settings");
this.finish();
@@ -57,13 +58,32 @@
}
@Override
- public void onZenModeConfigChanged() {
- super.onZenModeConfigChanged();
+ public void onResume() {
+ super.onResume();
updatePreferences();
}
- public void updatePreferences() {
+ @Override
+ public void onZenModeConfigChanged() {
+ super.onZenModeConfigChanged();
+ updatePreferences();
+ updatePreferenceStates();
+ }
+
+ private void updateRule() {
mRule = mBackend.getAutomaticZenRule(mId);
+ for (AbstractPreferenceController controller : mControllers) {
+ AbstractZenCustomRulePreferenceController zenRuleController =
+ (AbstractZenCustomRulePreferenceController) controller;
+ zenRuleController.setIdAndRule(mId, mRule);
+ }
+ }
+
+ public void updatePreferences() {
+ if (!mIsFirstLaunch) {
+ updateRule();
+ }
+
final PreferenceScreen screen = getPreferenceScreen();
String categoryKey = getPreferenceCategoryKey();
if (categoryKey != null) {
@@ -78,10 +98,15 @@
for (AbstractPreferenceController controller : mControllers) {
AbstractZenCustomRulePreferenceController zenRuleController =
(AbstractZenCustomRulePreferenceController) controller;
- zenRuleController.onResume(mRule, mId);
- zenRuleController.displayPreference(screen);
- updatePreference(zenRuleController);
+ zenRuleController.onResume();
+ if (!mIsFirstLaunch) {
+ // In first launch, displayPreference() is already called in DashboardFragment's
+ // onCreate().
+ zenRuleController.displayPreference(screen);
+ }
}
+
+ mIsFirstLaunch = false;
}
@Override
@@ -89,12 +114,6 @@
return R.string.help_uri_interruptions;
}
- @Override
- public void onResume() {
- super.onResume();
- updatePreferences();
- }
-
Bundle createZenRuleBundle() {
Bundle bundle = new Bundle();
bundle.putString(RULE_ID, mId);
diff --git a/src/com/android/settings/notification/zen/ZenRulePrioritySendersPreferenceController.java b/src/com/android/settings/notification/zen/ZenRulePrioritySendersPreferenceController.java
index cee496e..8f5e0e1 100644
--- a/src/com/android/settings/notification/zen/ZenRulePrioritySendersPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenRulePrioritySendersPreferenceController.java
@@ -18,7 +18,6 @@
import static com.android.settings.notification.zen.ZenPrioritySendersHelper.UNKNOWN;
-import android.app.AutomaticZenRule;
import android.content.Context;
import android.os.AsyncTask;
import android.service.notification.ZenPolicy;
@@ -79,8 +78,8 @@
}
@Override
- public void onResume(AutomaticZenRule rule, String id) {
- super.onResume(rule, id);
+ public void onResume() {
+ super.onResume();
if (mIsMessages) {
updateChannelCounts();
}
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java b/tests/robotests/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
index 8c9cfc0..339ba8e 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
@@ -20,8 +20,6 @@
import android.app.NotificationManager;
import android.service.notification.ZenPolicy;
-import com.android.settings.notification.zen.AbstractZenCustomRulePreferenceController;
-
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -37,6 +35,6 @@
void updateControllerZenPolicy(ZenPolicy policy) {
mRule.setZenPolicy(policy);
- getController().onResume(mRule, RULE_ID);
+ getController().setIdAndRule(RULE_ID, mRule);
}
}
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenRulePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenRulePreferenceControllerTest.java
index 10eae06..514b4f6 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenRulePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenRulePreferenceControllerTest.java
@@ -78,7 +78,7 @@
assertTrue(mController.mRule == null);
assertTrue(mController.mId == null);
- mController.onResume(rule, id);
+ mController.setIdAndRule(id, rule);
assertEquals(mController.mId, id);
assertEquals(mController.mRule, rule);
diff --git a/tests/unit/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java b/tests/unit/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
index 53ad7c5..c263943 100644
--- a/tests/unit/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
+++ b/tests/unit/src/com/android/settings/notification/zen/ZenRuleCustomPrefContrTestBase.java
@@ -35,6 +35,6 @@
void updateControllerZenPolicy(ZenPolicy policy) {
mRule.setZenPolicy(policy);
- getController().onResume(mRule, RULE_ID);
+ getController().setIdAndRule(RULE_ID, mRule);
}
}