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
diff --git a/src/com/android/settings/backup/AutoRestorePreferenceController.java b/src/com/android/settings/backup/AutoRestorePreferenceController.java
index 062863a..0333451 100644
--- a/src/com/android/settings/backup/AutoRestorePreferenceController.java
+++ b/src/com/android/settings/backup/AutoRestorePreferenceController.java
@@ -22,12 +22,13 @@
 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 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 d7c8206..e464fc2 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 15f1dab..53406fe 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -24,7 +24,6 @@
 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 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 8be5b5e..f6b0eb7 100644
--- a/src/com/android/settings/backup/ConfigureAccountPreferenceController.java
+++ b/src/com/android/settings/backup/ConfigureAccountPreferenceController.java
@@ -18,20 +18,18 @@
 
 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 0a78f96..120c827 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 @@
         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 @@
 
     @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 9b342e7..684956e 100644
--- a/src/com/android/settings/backup/PrivacySettings.java
+++ b/src/com/android/settings/backup/PrivacySettings.java
@@ -65,15 +65,10 @@
     }
 
     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 9b72a82..ffe05b8 100644
--- a/src/com/android/settings/backup/PrivacySettingsConfigData.java
+++ b/src/com/android/settings/backup/PrivacySettingsConfigData.java
@@ -19,6 +19,9 @@
 import android.content.Intent;
 
 public class PrivacySettingsConfigData {
+
+    private static PrivacySettingsConfigData sInstance;
+
     private boolean mBackupEnabled;
     private boolean mBackupGray;
     private Intent mConfigIntent;
@@ -26,7 +29,7 @@
     private Intent mManageIntent;
     private String mManageLabel;
 
-    public PrivacySettingsConfigData() {
+    private PrivacySettingsConfigData() {
         mBackupEnabled = false;
         mBackupGray = false;
         mConfigIntent = null;
@@ -35,6 +38,13 @@
         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 6a3288c..9a4e167 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 @@
 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.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 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 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 73a9bc5..7cfe9c7 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 @@
 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.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 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 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 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 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 7ddd95a..3060883 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 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.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 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 @@
         mPSCD.setBackupEnabled(true);
         mPSCD.setBackupGray(false);
         mPSCD.setConfigIntent(mIntent);
-        mController.setPrivacySettingsConfigData(mPSCD);
+
         mController.updateState(mPreference);
         assertThat(mPreference.isEnabled()).isTrue();
     }
@@ -80,7 +81,7 @@
         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 @@
         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 36e2045..f192a8b 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 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.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 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 @@
         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 @@
 
     @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);
     }