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:
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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<List<AbstractPreferenceController>> 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<List<AbstractPreferenceController>> controllerLists =
|
||||
|
@@ -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(
|
||||
|
@@ -95,11 +95,6 @@ public class NetworkDashboardFragment extends DashboardFragment implements
|
||||
this /* fragment */, this /* mobilePlanHost */);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isParalleledControllers() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
|
||||
Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment,
|
||||
MobilePlanPreferenceHost mobilePlanHost) {
|
||||
|
@@ -96,11 +96,6 @@ public class ConfigureNotificationSettings extends DashboardFragment implements
|
||||
mNotificationAssistantPreferenceController.setBackend(new NotificationBackend());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isParalleledControllers() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
|
||||
Application app, Fragment host) {
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
|
@@ -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 {
|
||||
|
||||
|
Reference in New Issue
Block a user