From 9fa4bb8ffa6d25c9d4464fd8f3f8c2f12debb80b Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 24 May 2021 15:59:01 +0800 Subject: [PATCH] Fix the toggle button flicker problem when display - Root cause: the side effect of the parallel controller loading. - Solution: disable the parallel approach and remove the entry point of parallel approach in DashboardFragment. Fixes: 187838753 Test: Robo test for AppInfoDashboardFragment, ConfigureNotificationSettings, ConnectedDeviceDashboardFragment, DevelopmentSettingsDashboardFragment, NetworkDashboardFragment, DashboardFragment Change-Id: If3b09c4fd6f33042e0ed38704f08e855ab8f5377 --- .../appinfo/AppInfoDashboardFragment.java | 5 --- .../ConnectedDeviceDashboardFragment.java | 5 --- .../settings/dashboard/DashboardFragment.java | 9 ++--- .../DevelopmentSettingsDashboardFragment.java | 5 --- .../network/NetworkDashboardFragment.java | 5 --- .../ConfigureNotificationSettings.java | 5 --- .../dashboard/DashboardFragmentTest.java | 33 ------------------- 7 files changed, 2 insertions(+), 65 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 9cc3836263e..6d3aaa3c2c7 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -309,11 +309,6 @@ public class AppInfoDashboardFragment extends DashboardFragment return controllers; } - @Override - protected boolean isParalleledControllers() { - return true; - } - void addToCallbackList(Callback callback) { if (callback != null) { mCallbacks.add(callback); diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index 5dd769db130..ce980e0bda2 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -49,11 +49,6 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { return TAG; } - @Override - protected boolean isParalleledControllers() { - return true; - } - @Override public int getHelpResource() { return R.string.help_url_connected_devices; diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index e0c9820042a..29a11a3e056 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -22,7 +22,6 @@ import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.util.ArrayMap; -import android.util.FeatureFlagUtils; import android.util.Log; import androidx.annotation.CallSuper; @@ -36,7 +35,6 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.core.BasePreferenceController; -import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerListHelper; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.overlay.FeatureFactory; @@ -360,11 +358,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment * Update state of each preference managed by PreferenceController. */ protected void updatePreferenceStates() { - if (isParalleledControllers() && FeatureFlagUtils.isEnabled(getContext(), - FeatureFlags.CONTROLLER_ENHANCEMENT)) { - updatePreferenceStatesInParallel(); - return; - } final PreferenceScreen screen = getPreferenceScreen(); Collection> controllerLists = mPreferenceControllers.values(); @@ -396,6 +389,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment * Use parallel method to update state of each preference managed by PreferenceController. */ @VisibleForTesting + // To use this parallel approach will cause the side effect of the UI flicker. Such as + // the thumb sliding of the toggle button. void updatePreferenceStatesInParallel() { final PreferenceScreen screen = getPreferenceScreen(); final Collection> controllerLists = diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 7afce83a7d5..fbab1fd1240 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -402,11 +402,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra return mPreferenceControllers; } - @Override - protected boolean isParalleledControllers() { - return true; - } - private void registerReceivers() { LocalBroadcastManager.getInstance(getContext()) .registerReceiver(mEnableAdbReceiver, new IntentFilter( diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index f023ced6efe..c53b4f652ad 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -95,11 +95,6 @@ public class NetworkDashboardFragment extends DashboardFragment implements this /* fragment */, this /* mobilePlanHost */); } - @Override - protected boolean isParalleledControllers() { - return true; - } - private static List buildPreferenceControllers(Context context, Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment, MobilePlanPreferenceHost mobilePlanHost) { diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java index 644d5cbc53d..5f78acc1ccc 100644 --- a/src/com/android/settings/notification/ConfigureNotificationSettings.java +++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java @@ -96,11 +96,6 @@ public class ConfigureNotificationSettings extends DashboardFragment implements mNotificationAssistantPreferenceController.setBackend(new NotificationBackend()); } - @Override - protected boolean isParalleledControllers() { - return true; - } - private static List buildPreferenceControllers(Context context, Application app, Fragment host) { final List controllers = new ArrayList<>(); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java index b83e487dbec..7116b0142b4 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java @@ -37,7 +37,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ProviderInfo; import android.net.Uri; import android.os.Bundle; -import android.util.FeatureFlagUtils; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; @@ -46,7 +45,6 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.slices.BlockingSlicePrefController; import com.android.settings.testutils.FakeFeatureFactory; @@ -335,37 +333,6 @@ public class DashboardFragmentTest { assertThat(pref).isInstanceOf(PrimarySwitchPreference.class); } - @Test - public void isFeatureFlagAndIsParalleled_runParalleledUpdatePreferenceStates() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONTROLLER_ENHANCEMENT, true); - final TestFragment testFragment = spy(new TestFragment(RuntimeEnvironment.application)); - - testFragment.updatePreferenceStates(); - - verify(testFragment).updatePreferenceStatesInParallel(); - } - - @Test - public void notFeatureFlagAndIsParalleled_notRunParalleledUpdatePreferenceStates() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONTROLLER_ENHANCEMENT, false); - final TestFragment testFragment = spy(new TestFragment(RuntimeEnvironment.application)); - - testFragment.updatePreferenceStates(); - - verify(testFragment, never()).updatePreferenceStatesInParallel(); - } - - @Test - public void isFeatureFlagAndNotParalleled_notRunParalleledUpdatePreferenceStates() { - FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONTROLLER_ENHANCEMENT, true); - final TestFragment testFragment = spy(new TestFragment(RuntimeEnvironment.application)); - testFragment.setUsingControllerEnhancement(false); - - testFragment.updatePreferenceStates(); - - verify(testFragment, never()).updatePreferenceStatesInParallel(); - } - public static class TestPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin {