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
This commit is contained in:
Sunny Shao
2021-05-24 15:59:01 +08:00
parent 19baf0df84
commit 9fa4bb8ffa
7 changed files with 2 additions and 65 deletions

View File

@@ -309,11 +309,6 @@ public class AppInfoDashboardFragment extends DashboardFragment
return controllers; return controllers;
} }
@Override
protected boolean isParalleledControllers() {
return true;
}
void addToCallbackList(Callback callback) { void addToCallbackList(Callback callback) {
if (callback != null) { if (callback != null) {
mCallbacks.add(callback); mCallbacks.add(callback);

View File

@@ -49,11 +49,6 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
return TAG; return TAG;
} }
@Override
protected boolean isParalleledControllers() {
return true;
}
@Override @Override
public int getHelpResource() { public int getHelpResource() {
return R.string.help_url_connected_devices; return R.string.help_url_connected_devices;

View File

@@ -22,7 +22,6 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.FeatureFlagUtils;
import android.util.Log; import android.util.Log;
import androidx.annotation.CallSuper; import androidx.annotation.CallSuper;
@@ -36,7 +35,6 @@ import androidx.preference.SwitchPreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerListHelper; import com.android.settings.core.PreferenceControllerListHelper;
import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
@@ -360,11 +358,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
* Update state of each preference managed by PreferenceController. * Update state of each preference managed by PreferenceController.
*/ */
protected void updatePreferenceStates() { protected void updatePreferenceStates() {
if (isParalleledControllers() && FeatureFlagUtils.isEnabled(getContext(),
FeatureFlags.CONTROLLER_ENHANCEMENT)) {
updatePreferenceStatesInParallel();
return;
}
final PreferenceScreen screen = getPreferenceScreen(); final PreferenceScreen screen = getPreferenceScreen();
Collection<List<AbstractPreferenceController>> controllerLists = Collection<List<AbstractPreferenceController>> controllerLists =
mPreferenceControllers.values(); mPreferenceControllers.values();
@@ -396,6 +389,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
* Use parallel method to update state of each preference managed by PreferenceController. * Use parallel method to update state of each preference managed by PreferenceController.
*/ */
@VisibleForTesting @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() { void updatePreferenceStatesInParallel() {
final PreferenceScreen screen = getPreferenceScreen(); final PreferenceScreen screen = getPreferenceScreen();
final Collection<List<AbstractPreferenceController>> controllerLists = final Collection<List<AbstractPreferenceController>> controllerLists =

View File

@@ -402,11 +402,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
return mPreferenceControllers; return mPreferenceControllers;
} }
@Override
protected boolean isParalleledControllers() {
return true;
}
private void registerReceivers() { private void registerReceivers() {
LocalBroadcastManager.getInstance(getContext()) LocalBroadcastManager.getInstance(getContext())
.registerReceiver(mEnableAdbReceiver, new IntentFilter( .registerReceiver(mEnableAdbReceiver, new IntentFilter(

View File

@@ -95,11 +95,6 @@ public class NetworkDashboardFragment extends DashboardFragment implements
this /* fragment */, this /* mobilePlanHost */); this /* fragment */, this /* mobilePlanHost */);
} }
@Override
protected boolean isParalleledControllers() {
return true;
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment, Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment,
MobilePlanPreferenceHost mobilePlanHost) { MobilePlanPreferenceHost mobilePlanHost) {

View File

@@ -96,11 +96,6 @@ public class ConfigureNotificationSettings extends DashboardFragment implements
mNotificationAssistantPreferenceController.setBackend(new NotificationBackend()); mNotificationAssistantPreferenceController.setBackend(new NotificationBackend());
} }
@Override
protected boolean isParalleledControllers() {
return true;
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Application app, Fragment host) { Application app, Fragment host) {
final List<AbstractPreferenceController> controllers = new ArrayList<>(); final List<AbstractPreferenceController> controllers = new ArrayList<>();

View File

@@ -37,7 +37,6 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.FeatureFlagUtils;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
@@ -46,7 +45,6 @@ import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference; import androidx.preference.SwitchPreference;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.slices.BlockingSlicePrefController; import com.android.settings.slices.BlockingSlicePrefController;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
@@ -335,37 +333,6 @@ public class DashboardFragmentTest {
assertThat(pref).isInstanceOf(PrimarySwitchPreference.class); 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 public static class TestPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin { implements PreferenceControllerMixin {