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; + } +}