From 242da31179c8b5fe51a2fc4dfa3bf60c8472d94a Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 25 Oct 2016 16:38:22 -0700 Subject: [PATCH] Fix logging spam in DashboardFragment. When updating preferences managed through PreferenceController, the fragment should skip prefs that are not available. Bug: 32255863 Test: RunSettingsRoboTests Change-Id: I2f9b6ddf8c78d40068dc18f07e60672dcba4474a --- .../settings/core/PreferenceController.java | 10 ++++----- .../settings/dashboard/DashboardFragment.java | 6 +++++- ...ionalSystemUpdatePreferenceController.java | 2 +- .../ManageStoragePreferenceController.java | 5 +---- .../SystemUpdatePreferenceController.java | 2 +- .../AutoBrightnessPreferenceController.java | 2 +- .../AutoRotatePreferenceController.java | 2 +- .../CameraGesturePreferenceController.java | 2 +- .../display/DozePreferenceController.java | 2 +- .../display/FontSizePreferenceController.java | 2 +- .../LiftToWakePreferenceController.java | 2 +- .../NightDisplayPreferenceController.java | 2 +- .../NightModePreferenceController.java | 2 +- .../ScreenSaverPreferenceController.java | 2 +- .../TapToWakePreferenceController.java | 2 +- .../display/TimeoutPreferenceController.java | 2 +- .../VrDisplayPreferenceController.java | 2 +- .../WallpaperPreferenceController.java | 2 +- ...ipeToNotificationPreferenceController.java | 2 +- .../AirplaneModePreferenceController.java | 2 +- .../MobileNetworkPreferenceController.java | 2 +- .../MobilePlanPreferenceController.java | 2 +- .../NetworkResetPreferenceController.java | 2 +- .../network/ProxyPreferenceController.java | 2 +- .../network/TetherPreferenceController.java | 2 +- .../network/VpnPreferenceController.java | 2 +- .../WifiCallingPreferenceController.java | 2 +- .../settings/nfc/NfcPreferenceController.java | 2 +- ...creenNotificationPreferenceController.java | 2 +- ...PulseNotificationPreferenceController.java | 2 +- .../core/PreferenceControllerTest.java | 2 +- .../dashboard/DashboardFragmentTest.java | 21 +++++++++++++++++-- 32 files changed, 58 insertions(+), 40 deletions(-) diff --git a/src/com/android/settings/core/PreferenceController.java b/src/com/android/settings/core/PreferenceController.java index 8a4a245391a..50e9b2c15f7 100644 --- a/src/com/android/settings/core/PreferenceController.java +++ b/src/com/android/settings/core/PreferenceController.java @@ -65,6 +65,11 @@ public abstract class PreferenceController { } } + /** + * Returns true if preference is available (should be displayed) + */ + public abstract boolean isAvailable(); + /** * Handles preference tree click * @@ -87,9 +92,4 @@ public abstract class PreferenceController { screen.removePreference(pref); } } - - /** - * Returns true if preference is available (should be displayed) - */ - protected abstract boolean isAvailable(); } diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index fd125af0fc7..d76fe7ad732 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -251,11 +251,15 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment Collection controllers = mPreferenceControllers.values(); final PreferenceScreen screen = getPreferenceScreen(); for (PreferenceController controller : controllers) { + if (!controller.isAvailable()) { + continue; + } final String key = controller.getPreferenceKey(); final Preference preference = mProgressiveDisclosureMixin.findPreference(screen, key); if (preference == null) { - Log.d(TAG, "Cannot find preference with key " + key); + Log.d(TAG, String.format("Cannot find preference with key %s in Controller %s", + key, controller.getClass().getSimpleName())); continue; } controller.updateState(preference); diff --git a/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java index 7290250dd75..3435b53d06d 100644 --- a/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java +++ b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java @@ -34,7 +34,7 @@ public class AdditionalSystemUpdatePreferenceController extends PreferenceContro } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean( com.android.settings.R.bool.config_additional_system_update_setting_enable); } diff --git a/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java b/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java index d4d53d493d8..e64525bef35 100644 --- a/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java +++ b/src/com/android/settings/deviceinfo/ManageStoragePreferenceController.java @@ -17,13 +17,10 @@ package com.android.settings.deviceinfo; import android.content.Context; import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceController; -import java.util.List; - public class ManageStoragePreferenceController extends PreferenceController { public static final String KEY_MANAGE_STORAGE = "pref_manage_storage"; @@ -43,7 +40,7 @@ public class ManageStoragePreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean(R.bool.config_storage_manager_settings_enabled); } } diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java index e086a56062b..0bf43e24dc2 100644 --- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java +++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java @@ -46,7 +46,7 @@ public class SystemUpdatePreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mUm.isAdminUser(); } diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java index 775e60c0bc5..df2000ef417 100644 --- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java +++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java @@ -35,7 +35,7 @@ public class AutoBrightnessPreferenceController extends PreferenceController imp } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_automatic_brightness_available); } diff --git a/src/com/android/settings/display/AutoRotatePreferenceController.java b/src/com/android/settings/display/AutoRotatePreferenceController.java index 44d21583902..567393e80c4 100644 --- a/src/com/android/settings/display/AutoRotatePreferenceController.java +++ b/src/com/android/settings/display/AutoRotatePreferenceController.java @@ -73,7 +73,7 @@ public class AutoRotatePreferenceController extends PreferenceController impleme } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return RotationPolicy.isRotationLockToggleVisible(mContext); } diff --git a/src/com/android/settings/display/CameraGesturePreferenceController.java b/src/com/android/settings/display/CameraGesturePreferenceController.java index 3f5d0de5138..a3dc6cf0917 100644 --- a/src/com/android/settings/display/CameraGesturePreferenceController.java +++ b/src/com/android/settings/display/CameraGesturePreferenceController.java @@ -50,7 +50,7 @@ public class CameraGesturePreferenceController extends PreferenceController impl } @Override - protected boolean isAvailable() { + public boolean isAvailable() { boolean configSet = mContext.getResources().getInteger( com.android.internal.R.integer.config_cameraLaunchGestureSensorType) != -1; return configSet diff --git a/src/com/android/settings/display/DozePreferenceController.java b/src/com/android/settings/display/DozePreferenceController.java index bf5d8f3fe55..16b0e81aa86 100644 --- a/src/com/android/settings/display/DozePreferenceController.java +++ b/src/com/android/settings/display/DozePreferenceController.java @@ -67,7 +67,7 @@ public class DozePreferenceController extends PreferenceController implements } @Override - protected boolean isAvailable() { + public boolean isAvailable() { String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null; if (TextUtils.isEmpty(name)) { name = mContext.getResources().getString( diff --git a/src/com/android/settings/display/FontSizePreferenceController.java b/src/com/android/settings/display/FontSizePreferenceController.java index fcd423d7639..5014bda6100 100644 --- a/src/com/android/settings/display/FontSizePreferenceController.java +++ b/src/com/android/settings/display/FontSizePreferenceController.java @@ -31,7 +31,7 @@ public class FontSizePreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return true; } diff --git a/src/com/android/settings/display/LiftToWakePreferenceController.java b/src/com/android/settings/display/LiftToWakePreferenceController.java index c518f6880bc..81ba5f5a4ac 100644 --- a/src/com/android/settings/display/LiftToWakePreferenceController.java +++ b/src/com/android/settings/display/LiftToWakePreferenceController.java @@ -34,7 +34,7 @@ public class LiftToWakePreferenceController extends PreferenceController impleme } @Override - protected boolean isAvailable() { + public boolean isAvailable() { SensorManager sensors = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null; } diff --git a/src/com/android/settings/display/NightDisplayPreferenceController.java b/src/com/android/settings/display/NightDisplayPreferenceController.java index c52df23bbbc..9cf240959dd 100644 --- a/src/com/android/settings/display/NightDisplayPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayPreferenceController.java @@ -33,7 +33,7 @@ public class NightDisplayPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return NightDisplayController.isAvailable(mContext); } diff --git a/src/com/android/settings/display/NightModePreferenceController.java b/src/com/android/settings/display/NightModePreferenceController.java index c0f0c17a405..874d84f1d3e 100644 --- a/src/com/android/settings/display/NightModePreferenceController.java +++ b/src/com/android/settings/display/NightModePreferenceController.java @@ -35,7 +35,7 @@ public class NightModePreferenceController extends PreferenceController } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return false; } diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java index 64d9dec548d..7335b1ffd26 100644 --- a/src/com/android/settings/display/ScreenSaverPreferenceController.java +++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java @@ -28,7 +28,7 @@ public class ScreenSaverPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsSupported); } diff --git a/src/com/android/settings/display/TapToWakePreferenceController.java b/src/com/android/settings/display/TapToWakePreferenceController.java index 4c5aaa01772..18c877ae5d0 100644 --- a/src/com/android/settings/display/TapToWakePreferenceController.java +++ b/src/com/android/settings/display/TapToWakePreferenceController.java @@ -35,7 +35,7 @@ public class TapToWakePreferenceController extends PreferenceController implemen } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_supportDoubleTapWake); } diff --git a/src/com/android/settings/display/TimeoutPreferenceController.java b/src/com/android/settings/display/TimeoutPreferenceController.java index 8c73c31d0d9..d33f81374e8 100644 --- a/src/com/android/settings/display/TimeoutPreferenceController.java +++ b/src/com/android/settings/display/TimeoutPreferenceController.java @@ -42,7 +42,7 @@ public class TimeoutPreferenceController extends PreferenceController implements } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return true; } diff --git a/src/com/android/settings/display/VrDisplayPreferenceController.java b/src/com/android/settings/display/VrDisplayPreferenceController.java index 84d74620177..61c3ed29066 100644 --- a/src/com/android/settings/display/VrDisplayPreferenceController.java +++ b/src/com/android/settings/display/VrDisplayPreferenceController.java @@ -35,7 +35,7 @@ public class VrDisplayPreferenceController extends PreferenceController implemen } @Override - protected boolean isAvailable() { + public boolean isAvailable() { final PackageManager pm = mContext.getPackageManager(); return pm.hasSystemFeature(PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE); } diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java index 29415e9a3f8..8352377fd69 100644 --- a/src/com/android/settings/display/WallpaperPreferenceController.java +++ b/src/com/android/settings/display/WallpaperPreferenceController.java @@ -32,7 +32,7 @@ public class WallpaperPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return true; } diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java index dee532fa6cd..353eed8667f 100644 --- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java +++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java @@ -51,7 +51,7 @@ public class SwipeToNotificationPreferenceController extends PreferenceControlle } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_supportSystemNavigationKeys); } diff --git a/src/com/android/settings/network/AirplaneModePreferenceController.java b/src/com/android/settings/network/AirplaneModePreferenceController.java index bd1918f5370..a25c5f84dcf 100644 --- a/src/com/android/settings/network/AirplaneModePreferenceController.java +++ b/src/com/android/settings/network/AirplaneModePreferenceController.java @@ -87,7 +87,7 @@ public class AirplaneModePreferenceController extends PreferenceController } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEVISION); } diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java index 14dcf9eba93..588d80caa80 100644 --- a/src/com/android/settings/network/MobileNetworkPreferenceController.java +++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java @@ -45,7 +45,7 @@ public class MobileNetworkPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return !mIsSecondaryUser && !Utils.isWifiOnly(mContext) && !hasBaseUserRestriction(mContext, DISALLOW_CONFIG_MOBILE_NETWORKS, myUserId()); diff --git a/src/com/android/settings/network/MobilePlanPreferenceController.java b/src/com/android/settings/network/MobilePlanPreferenceController.java index 8dfff150b70..42b2bea71b1 100644 --- a/src/com/android/settings/network/MobilePlanPreferenceController.java +++ b/src/com/android/settings/network/MobilePlanPreferenceController.java @@ -111,7 +111,7 @@ public class MobilePlanPreferenceController extends PreferenceController impleme } @Override - protected boolean isAvailable() { + public boolean isAvailable() { final boolean isPrefAllowedOnDevice = mContext.getResources().getBoolean( com.android.settings.R.bool.config_show_mobile_plan); final boolean isPrefAllowedForUser = !mIsSecondaryUser diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java index b313cc01f2f..2842139dd1d 100644 --- a/src/com/android/settings/network/NetworkResetPreferenceController.java +++ b/src/com/android/settings/network/NetworkResetPreferenceController.java @@ -37,7 +37,7 @@ public class NetworkResetPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return !RestrictedLockUtils.hasBaseUserRestriction(mContext, UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId()); } diff --git a/src/com/android/settings/network/ProxyPreferenceController.java b/src/com/android/settings/network/ProxyPreferenceController.java index 5feb5d07b2d..54b8ca948e3 100644 --- a/src/com/android/settings/network/ProxyPreferenceController.java +++ b/src/com/android/settings/network/ProxyPreferenceController.java @@ -36,7 +36,7 @@ public class ProxyPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { // proxy UI disabled until we have better app support return false; } diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java index 96f037b783e..f6ef6784f65 100644 --- a/src/com/android/settings/network/TetherPreferenceController.java +++ b/src/com/android/settings/network/TetherPreferenceController.java @@ -67,7 +67,7 @@ public class TetherPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { final boolean isBlocked = (!mConnectivityManager.isTetheringSupported() && !mAdminDisallowedTetherConfig) || hasBaseUserRestriction(mContext, DISALLOW_CONFIG_TETHERING, diff --git a/src/com/android/settings/network/VpnPreferenceController.java b/src/com/android/settings/network/VpnPreferenceController.java index 0703ed36e12..3c4877ff939 100644 --- a/src/com/android/settings/network/VpnPreferenceController.java +++ b/src/com/android/settings/network/VpnPreferenceController.java @@ -58,7 +58,7 @@ public class VpnPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { // TODO: http://b/23693383 return mIsSecondaryUser || RestrictedLockUtils.hasBaseUserRestriction(mContext, UserManager.DISALLOW_CONFIG_VPN, UserHandle.myUserId()); diff --git a/src/com/android/settings/network/WifiCallingPreferenceController.java b/src/com/android/settings/network/WifiCallingPreferenceController.java index 61ab92e2b7c..5036c461210 100644 --- a/src/com/android/settings/network/WifiCallingPreferenceController.java +++ b/src/com/android/settings/network/WifiCallingPreferenceController.java @@ -50,7 +50,7 @@ public class WifiCallingPreferenceController extends PreferenceController { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return ImsManager.isWfcEnabledByPlatform(mContext) && ImsManager.isWfcProvisionedOnDevice(mContext); } diff --git a/src/com/android/settings/nfc/NfcPreferenceController.java b/src/com/android/settings/nfc/NfcPreferenceController.java index b7cd702668f..6303d5b3b5f 100644 --- a/src/com/android/settings/nfc/NfcPreferenceController.java +++ b/src/com/android/settings/nfc/NfcPreferenceController.java @@ -101,7 +101,7 @@ public class NfcPreferenceController extends PreferenceController } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mNfcAdapter != null; } diff --git a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java index f349a8493e6..15f8c9f1011 100644 --- a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java +++ b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java @@ -190,7 +190,7 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return false; } diff --git a/src/com/android/settings/notification/PulseNotificationPreferenceController.java b/src/com/android/settings/notification/PulseNotificationPreferenceController.java index 03832e5d234..de365f13b75 100644 --- a/src/com/android/settings/notification/PulseNotificationPreferenceController.java +++ b/src/com/android/settings/notification/PulseNotificationPreferenceController.java @@ -79,7 +79,7 @@ public class PulseNotificationPreferenceController extends PreferenceController } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return mContext.getResources() .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed); } diff --git a/tests/robotests/src/com/android/settings/core/PreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/PreferenceControllerTest.java index 9a526b106d7..2ae9d9d7a0c 100644 --- a/tests/robotests/src/com/android/settings/core/PreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/PreferenceControllerTest.java @@ -102,7 +102,7 @@ public class PreferenceControllerTest { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return isAvailable; } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java index 6d11041af06..6435f613b8a 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java @@ -158,6 +158,21 @@ public class DashboardFragmentTest { assertThat(preference.getOrder()).isEqualTo(-tile.priority); } + @Test + public void updateState_skipUnavailablePrefs() { + List preferenceControllers = mTestFragment.mControllers; + preferenceControllers.add(mock(PreferenceController.class)); + preferenceControllers.add(mock(PreferenceController.class)); + when(preferenceControllers.get(0).isAvailable()).thenReturn(false); + when(preferenceControllers.get(1).isAvailable()).thenReturn(true); + + mTestFragment.onAttach(ShadowApplication.getInstance().getApplicationContext()); + mTestFragment.onResume(); + + verify(mTestFragment.mControllers.get(0), never()).getPreferenceKey(); + verify(mTestFragment.mControllers.get(1)).getPreferenceKey(); + } + public static class TestPreferenceController extends PreferenceController { public TestPreferenceController(Context context) { @@ -170,7 +185,7 @@ public class DashboardFragmentTest { } @Override - protected boolean isAvailable() { + public boolean isAvailable() { return false; } @@ -189,10 +204,12 @@ public class DashboardFragmentTest { private final Context mContext; public PreferenceScreen mScreen; + private List mControllers; public TestFragment(Context context) { mContext = context; mScreen = mock(PreferenceScreen.class); + mControllers = new ArrayList<>(); } @Override @@ -227,7 +244,7 @@ public class DashboardFragmentTest { @Override protected List getPreferenceControllers(Context context) { - return null; + return mControllers; } }