diff --git a/res/values/strings.xml b/res/values/strings.xml
index f100aefe67a..14bdba3f3ea 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4384,6 +4384,10 @@
Automatic restore
When reinstalling an app, restore backed up settings and data
+
+ Backup service is inactive.
+
+ This is set by your device policy.
Desktop backup password
diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml
index 44894e7acf6..476030074e1 100644
--- a/res/xml/privacy_settings.xml
+++ b/res/xml/privacy_settings.xml
@@ -43,6 +43,14 @@
android:summary="@string/auto_restore_summary"
android:persistent="false" />
+
+
keysToRemove = getNonVisibleKeys(getActivity());
+ final int screenPreferenceCount = screen.getPreferenceCount();
+ for (int i = screenPreferenceCount - 1; i >= 0; --i) {
+ Preference preference = screen.getPreference(i);
+ if (keysToRemove.contains(preference.getKey())) {
+ screen.removePreference(preference);
+ }
}
-
- // Vendor specific
- if (getActivity().getPackageManager().
- resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) {
- screen.removePreference(findPreference(BACKUP_CATEGORY));
+ PreferenceCategory backupCategory = (PreferenceCategory) findPreference(BACKUP_CATEGORY);
+ if (backupCategory != null) {
+ final int backupCategoryPreferenceCount = backupCategory.getPreferenceCount();
+ for (int i = backupCategoryPreferenceCount - 1; i >= 0; --i) {
+ Preference preference = backupCategory.getPreference(i);
+ if (keysToRemove.contains(preference.getKey())) {
+ backupCategory.removePreference(preference);
+ }
+ }
}
updateToggles();
}
@@ -285,6 +297,40 @@ public class PrivacySettings extends SettingsPreferenceFragment implements
return result;
}
+
+ @Override
+ public List getNonIndexableKeys(Context context) {
+ return getNonVisibleKeys(context);
+ }
}
-}
\ No newline at end of file
+ private static ArrayList getNonVisibleKeys(Context context) {
+ final ArrayList nonVisibleKeys = new ArrayList();
+ final IBackupManager backupManager = IBackupManager.Stub.asInterface(
+ ServiceManager.getService(Context.BACKUP_SERVICE));
+ boolean isServiceActive = false;
+ try {
+ isServiceActive = backupManager.isBackupServiceActive(UserHandle.myUserId());
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed querying backup manager service activity status. " +
+ "Assuming it is inactive.");
+ }
+ if (isServiceActive) {
+ nonVisibleKeys.add(BACKUP_INACTIVE);
+ } else {
+ nonVisibleKeys.add(AUTO_RESTORE);
+ nonVisibleKeys.add(CONFIGURE_ACCOUNT);
+ nonVisibleKeys.add(BACKUP_DATA);
+ }
+ if (UserManager.get(context).hasUserRestriction(
+ UserManager.DISALLOW_FACTORY_RESET)) {
+ nonVisibleKeys.add(PERSONAL_DATA_CATEGORY);
+ }
+ // Vendor specific
+ if (context.getPackageManager().
+ resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) {
+ nonVisibleKeys.add(BACKUP_CATEGORY);
+ }
+ return nonVisibleKeys;
+ }
+}