From 876a21bae81e8468d2d6415313c9805d56ae3dfe Mon Sep 17 00:00:00 2001 From: Zoltan Szatmary-Ban Date: Wed, 12 Nov 2014 23:46:52 +0000 Subject: [PATCH] Remove backup preferences if backup service is inactive Also show informative message instead. Bug: 16641441 Change-Id: I9920c07d56c4c0ccb1f3dce637c0fb390902d2ff --- res/values/strings.xml | 4 ++ res/xml/privacy_settings.xml | 8 +++ src/com/android/settings/PrivacySettings.java | 64 ++++++++++++++++--- 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 76d08a8dbde..ca506cfc159 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4378,6 +4378,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; + } +}