From 16de45d8ec0ca888cd61203de29378ce1cd58ae6 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 30 Apr 2018 13:41:56 -0700 Subject: [PATCH] Fix NPE during unit test As of ag/3932176 the slice indexer now queries getSummary() for each controller. So we need to create all necessary objects before getSummary(). In this case, the PSCD object. Change-Id: I0162996be37d740f1e450880bf4698acd94ca0ad Fixes: 78897071 Test: atest --- .../backup/AutoRestorePreferenceController.java | 10 ++++----- .../backup/BackupDataPreferenceController.java | 10 ++++----- .../settings/backup/BackupSettingsHelper.java | 3 ++- .../ConfigureAccountPreferenceController.java | 10 ++++----- .../backup/DataManagementPreferenceController.java | 26 ++++++++++------------ .../android/settings/backup/PrivacySettings.java | 9 ++------ .../settings/backup/PrivacySettingsConfigData.java | 12 +++++++++- .../AutoRestorePreferenceControllerTest.java | 7 +++--- .../backup/BackupDataPreferenceControllerTest.java | 12 +++++----- .../ConfigureAccountPreferenceControllerTest.java | 11 ++++----- .../DataManagementPreferenceControllerTest.java | 16 ++++++------- 11 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/com/android/settings/backup/AutoRestorePreferenceController.java b/src/com/android/settings/backup/AutoRestorePreferenceController.java index 062863a967..0333451cf0 100644 --- a/src/com/android/settings/backup/AutoRestorePreferenceController.java +++ b/src/com/android/settings/backup/AutoRestorePreferenceController.java @@ -22,12 +22,13 @@ import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.provider.Settings; -import androidx.preference.SwitchPreference; -import androidx.preference.Preference; import android.util.Log; import com.android.settings.core.TogglePreferenceController; +import androidx.preference.Preference; +import androidx.preference.SwitchPreference; + public class AutoRestorePreferenceController extends TogglePreferenceController { private static final String TAG = "AutoRestorePrefCtrler"; @@ -36,10 +37,7 @@ public class AutoRestorePreferenceController extends TogglePreferenceController public AutoRestorePreferenceController(Context context, String key) { super(context, key); - } - - public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) { - mPSCD = pData; + mPSCD = PrivacySettingsConfigData.getInstance(); } @Override diff --git a/src/com/android/settings/backup/BackupDataPreferenceController.java b/src/com/android/settings/backup/BackupDataPreferenceController.java index d7c82064da..e464fc2204 100644 --- a/src/com/android/settings/backup/BackupDataPreferenceController.java +++ b/src/com/android/settings/backup/BackupDataPreferenceController.java @@ -17,20 +17,18 @@ package com.android.settings.backup; import android.content.Context; -import androidx.preference.Preference; -import com.android.settings.core.BasePreferenceController; import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; + +import androidx.preference.Preference; public class BackupDataPreferenceController extends BasePreferenceController { private PrivacySettingsConfigData mPSCD; public BackupDataPreferenceController(Context context, String key) { super(context, key); - } - - public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) { - mPSCD = pData; + mPSCD = PrivacySettingsConfigData.getInstance(); } @Override diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java index 15f1dab92f..53406fef75 100644 --- a/src/com/android/settings/backup/BackupSettingsHelper.java +++ b/src/com/android/settings/backup/BackupSettingsHelper.java @@ -24,7 +24,6 @@ import android.content.Intent; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; -import androidx.annotation.VisibleForTesting; import android.util.Log; import com.android.settings.R; @@ -32,6 +31,8 @@ import com.android.settings.Settings.PrivacySettingsActivity; import java.net.URISyntaxException; +import androidx.annotation.VisibleForTesting; + /** * Helper class for {@link BackupSettingsActivity} that interacts with {@link IBackupManager}. */ diff --git a/src/com/android/settings/backup/ConfigureAccountPreferenceController.java b/src/com/android/settings/backup/ConfigureAccountPreferenceController.java index 8be5b5e4ed..f6b0eb7d44 100644 --- a/src/com/android/settings/backup/ConfigureAccountPreferenceController.java +++ b/src/com/android/settings/backup/ConfigureAccountPreferenceController.java @@ -18,20 +18,18 @@ package com.android.settings.backup; import android.content.Context; import android.content.Intent; -import androidx.preference.Preference; -import com.android.settings.core.BasePreferenceController; import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; + +import androidx.preference.Preference; public class ConfigureAccountPreferenceController extends BasePreferenceController { private PrivacySettingsConfigData mPSCD; public ConfigureAccountPreferenceController(Context context, String key) { super(context, key); - } - - public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) { - mPSCD = pData; + mPSCD = PrivacySettingsConfigData.getInstance(); } @Override diff --git a/src/com/android/settings/backup/DataManagementPreferenceController.java b/src/com/android/settings/backup/DataManagementPreferenceController.java index 0a78f96444..120c827de8 100644 --- a/src/com/android/settings/backup/DataManagementPreferenceController.java +++ b/src/com/android/settings/backup/DataManagementPreferenceController.java @@ -17,21 +17,17 @@ package com.android.settings.backup; import android.content.Context; -import androidx.preference.Preference; import com.android.settings.core.BasePreferenceController; +import androidx.preference.Preference; + public class DataManagementPreferenceController extends BasePreferenceController { private PrivacySettingsConfigData mPSCD; - private boolean mManageEnabled; public DataManagementPreferenceController(Context context, String key) { super(context, key); - } - - public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) { - mPSCD = pData; - mManageEnabled = (mPSCD.getManageIntent() != null) && mPSCD.isBackupEnabled(); + mPSCD = PrivacySettingsConfigData.getInstance(); } @Override @@ -39,7 +35,8 @@ public class DataManagementPreferenceController extends BasePreferenceController if (!PrivacySettingsUtils.isAdminUser(mContext)) { return DISABLED_FOR_USER; } - if (!mManageEnabled) { + boolean manageEnabled = (mPSCD.getManageIntent() != null) && mPSCD.isBackupEnabled(); + if (!manageEnabled) { return DISABLED_UNSUPPORTED; } return AVAILABLE; @@ -47,12 +44,13 @@ public class DataManagementPreferenceController extends BasePreferenceController @Override public void updateState(Preference preference) { - if (mManageEnabled) { - preference.setIntent(mPSCD.getManageIntent()); - final String manageLabel = mPSCD.getManageLabel(); - if (manageLabel != null) { - preference.setTitle(manageLabel); - } + if (!isAvailable()) { + return; + } + preference.setIntent(mPSCD.getManageIntent()); + final String manageLabel = mPSCD.getManageLabel(); + if (manageLabel != null) { + preference.setTitle(manageLabel); } } } \ No newline at end of file diff --git a/src/com/android/settings/backup/PrivacySettings.java b/src/com/android/settings/backup/PrivacySettings.java index 9b342e7477..684956e5a6 100644 --- a/src/com/android/settings/backup/PrivacySettings.java +++ b/src/com/android/settings/backup/PrivacySettings.java @@ -65,15 +65,10 @@ public class PrivacySettings extends DashboardFragment { } private void updatePrivacySettingsConfigData(final Context context) { - final PrivacySettingsConfigData pData = new PrivacySettingsConfigData(); if (PrivacySettingsUtils.isAdminUser(context)) { - PrivacySettingsUtils.updatePrivacyBuffer(context, pData); + PrivacySettingsUtils.updatePrivacyBuffer(context, + PrivacySettingsConfigData.getInstance()); } - - use(BackupDataPreferenceController.class).setPrivacySettingsConfigData(pData); - use(ConfigureAccountPreferenceController.class).setPrivacySettingsConfigData(pData); - use(DataManagementPreferenceController.class).setPrivacySettingsConfigData(pData); - use(AutoRestorePreferenceController.class).setPrivacySettingsConfigData(pData); } public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = diff --git a/src/com/android/settings/backup/PrivacySettingsConfigData.java b/src/com/android/settings/backup/PrivacySettingsConfigData.java index 9b72a829a2..ffe05b8559 100644 --- a/src/com/android/settings/backup/PrivacySettingsConfigData.java +++ b/src/com/android/settings/backup/PrivacySettingsConfigData.java @@ -19,6 +19,9 @@ package com.android.settings.backup; import android.content.Intent; public class PrivacySettingsConfigData { + + private static PrivacySettingsConfigData sInstance; + private boolean mBackupEnabled; private boolean mBackupGray; private Intent mConfigIntent; @@ -26,7 +29,7 @@ public class PrivacySettingsConfigData { private Intent mManageIntent; private String mManageLabel; - public PrivacySettingsConfigData() { + private PrivacySettingsConfigData() { mBackupEnabled = false; mBackupGray = false; mConfigIntent = null; @@ -35,6 +38,13 @@ public class PrivacySettingsConfigData { mManageLabel = null; } + public static PrivacySettingsConfigData getInstance() { + if (sInstance == null) { + sInstance = new PrivacySettingsConfigData(); + } + return sInstance; + } + public boolean isBackupEnabled() { return mBackupEnabled; } diff --git a/tests/robotests/src/com/android/settings/backup/AutoRestorePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/AutoRestorePreferenceControllerTest.java index 6a3288c128..9a4e167576 100644 --- a/tests/robotests/src/com/android/settings/backup/AutoRestorePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/AutoRestorePreferenceControllerTest.java @@ -19,7 +19,6 @@ package com.android.settings.backup; import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import androidx.preference.SwitchPreference; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -32,6 +31,8 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import androidx.preference.SwitchPreference; + @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {ShadowPrivacySettingsUtils.class}) public class AutoRestorePreferenceControllerTest { @@ -44,7 +45,7 @@ public class AutoRestorePreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mPSCD = new PrivacySettingsConfigData(); + mPSCD = PrivacySettingsConfigData.getInstance(); mController = new AutoRestorePreferenceController(mContext, PrivacySettingsUtils.AUTO_RESTORE); mPreference = new SwitchPreference(mContext); @@ -59,7 +60,7 @@ public class AutoRestorePreferenceControllerTest { public void updateState_backupEnabled_prefShouldBeEnabled() { mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java index 73a9bc5525..7cfe9c740f 100644 --- a/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java @@ -19,8 +19,6 @@ package com.android.settings.backup; import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import android.os.UserManager; -import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; @@ -34,6 +32,8 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import androidx.preference.Preference; + @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {ShadowPrivacySettingsUtils.class}) public class BackupDataPreferenceControllerTest { @@ -46,7 +46,7 @@ public class BackupDataPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mPSCD = new PrivacySettingsConfigData(); + mPSCD = PrivacySettingsConfigData.getInstance(); mController = new BackupDataPreferenceController(mContext, PrivacySettingsUtils.BACKUP_DATA); mPreference = new Preference(mContext); @@ -61,7 +61,7 @@ public class BackupDataPreferenceControllerTest { public void updateState_backupEnabled_prefShouldBeEnabled() { mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isTrue(); } @@ -70,7 +70,7 @@ public class BackupDataPreferenceControllerTest { public void updateState_backupEnabled_prefShouldDisplayOnSummary() { mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.getSummary()) .isEqualTo(mContext.getString(R.string.accessibility_feature_state_on)); @@ -80,7 +80,7 @@ public class BackupDataPreferenceControllerTest { public void updateState_backupDisabled_prefShouldDisplayOffSummary() { mPSCD.setBackupEnabled(false); mPSCD.setBackupGray(false); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.getSummary()) .isEqualTo(mContext.getString(R.string.accessibility_feature_state_off)); diff --git a/tests/robotests/src/com/android/settings/backup/ConfigureAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/ConfigureAccountPreferenceControllerTest.java index 7ddd95adf3..306088356e 100644 --- a/tests/robotests/src/com/android/settings/backup/ConfigureAccountPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/ConfigureAccountPreferenceControllerTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.content.Intent; -import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; @@ -35,6 +34,8 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import androidx.preference.Preference; + @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {ShadowPrivacySettingsUtils.class}) public class ConfigureAccountPreferenceControllerTest { @@ -51,7 +52,7 @@ public class ConfigureAccountPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mPSCD = new PrivacySettingsConfigData(); + mPSCD = PrivacySettingsConfigData.getInstance(); mController = new ConfigureAccountPreferenceController(mContext, PrivacySettingsUtils.CONFIGURE_ACCOUNT); mPreference = new Preference(mContext); @@ -68,7 +69,7 @@ public class ConfigureAccountPreferenceControllerTest { mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); mPSCD.setConfigIntent(mIntent); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isTrue(); } @@ -80,7 +81,7 @@ public class ConfigureAccountPreferenceControllerTest { mPSCD.setBackupGray(false); mPSCD.setConfigIntent(mIntent); mPSCD.setConfigSummary(null); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.getSummary()) .isEqualTo(mContext.getString(R.string.backup_configure_account_default_summary)); @@ -93,7 +94,7 @@ public class ConfigureAccountPreferenceControllerTest { mPSCD.setBackupGray(false); mPSCD.setConfigIntent(mIntent); mPSCD.setConfigSummary(mTestSummary); - mController.setPrivacySettingsConfigData(mPSCD); + mController.updateState(mPreference); assertThat(mPreference.getSummary()).isEqualTo(mTestSummary); } diff --git a/tests/robotests/src/com/android/settings/backup/DataManagementPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/DataManagementPreferenceControllerTest.java index 36e2045993..f192a8bdff 100644 --- a/tests/robotests/src/com/android/settings/backup/DataManagementPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/DataManagementPreferenceControllerTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.content.Intent; -import androidx.preference.Preference; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -34,6 +33,8 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import androidx.preference.Preference; + @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {ShadowPrivacySettingsUtils.class}) public class DataManagementPreferenceControllerTest { @@ -56,7 +57,7 @@ public class DataManagementPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mPSCD = new PrivacySettingsConfigData(); + mPSCD = PrivacySettingsConfigData.getInstance(); mController = new DataManagementPreferenceController(mContext, KEY); mPreference = new Preference(mContext); mTitle = "Title"; @@ -68,26 +69,25 @@ public class DataManagementPreferenceControllerTest { mPSCD.setBackupGray(false); mPSCD.setManageIntent(mIntent); mPSCD.setManageLabel(mTitle); - mController.setPrivacySettingsConfigData(mPSCD); mController.updateState(mPreference); assertThat(mPreference.getTitle()) .isEqualTo(mTitle); } @Test - public void getAvailabilityStatus_isAdmiUser_backupEnabled_hadManageIntent_shouldBeAvailable() { + public void getAvailabilityStatus_isAdmin_backupEnabled_hadManageIntent_shouldBeAvailable() { ShadowPrivacySettingsUtils.setIsAdminUser(true); mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); mPSCD.setManageIntent(mIntent); mPSCD.setManageLabel(mTitle); - mController.setPrivacySettingsConfigData(mPSCD); + assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } @Test - public void getAvailabilityStatus_isnotAdmiUser_shouldBeDisabledForUser() { + public void getAvailabilityStatus_isNotAdminUser_shouldBeDisabledForUser() { ShadowPrivacySettingsUtils.setIsAdminUser(false); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.DISABLED_FOR_USER); @@ -95,13 +95,13 @@ public class DataManagementPreferenceControllerTest { @Test public void - getAvailabilityStatus_isAdmiUser_backupEnabled_nullManageIntent_shouldBeDisabledUnsupported() { + getAvailabilityStatus_isAdminUser_backupEnabled_nullManageIntent_shouldBeDisabledUnsupported() { ShadowPrivacySettingsUtils.setIsAdminUser(true); mPSCD.setBackupEnabled(true); mPSCD.setBackupGray(false); mPSCD.setManageIntent(null); mPSCD.setManageLabel(mTitle); - mController.setPrivacySettingsConfigData(mPSCD); + assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.DISABLED_UNSUPPORTED); } -- 2.11.0