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;
|
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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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 =
|
||||||
|
@@ -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(
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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<>();
|
||||||
|
@@ -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 {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user