1e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani/* 2e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * Copyright (C) 2009 The Android Open Source Project 3e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * 4e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 5e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * you may not use this file except in compliance with the License. 6e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * You may obtain a copy of the License at 7e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * 8e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 9e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * 10e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * Unless required by applicable law or agreed to in writing, software 11e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 12e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * See the License for the specific language governing permissions and 14e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * limitations under the License. 15e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani */ 16e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 17e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasanipackage com.android.settings; 18e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 19616c3ee12a65696f43e62931631ba092884ad3fdChristopher Tateimport android.app.backup.IBackupManager; 20e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.content.ContentResolver; 21e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.content.Context; 22df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tateimport android.content.Intent; 23e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.os.Bundle; 244339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport android.os.Process; 25e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.os.RemoteException; 26e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.os.ServiceManager; 274339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport android.os.UserHandle; 282c53933e8d35ba50d0791a29e46fa3156e9cab7cJulia Reynoldsimport android.os.UserManager; 29e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.preference.Preference; 30ce543836cea5887484026837f0a4181dca04a733areteimport android.preference.Preference.OnPreferenceChangeListener; 31e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.preference.PreferenceScreen; 32ce543836cea5887484026837f0a4181dca04a733areteimport android.preference.SwitchPreference; 334339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport android.provider.SearchIndexableResource; 34e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasaniimport android.provider.Settings; 35876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Banimport android.util.Log; 36e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 378a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger; 384339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport com.android.settings.search.BaseSearchIndexProvider; 39d34dd4fb9ebae8c909fcb268d7f76d9e7a8267bdFabrice Di Meglioimport com.android.settings.search.Indexable; 404339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport java.util.ArrayList; 41be90341c808ac5b17149eb42eac966906c6f2041Stuart Scottimport java.util.Collection; 42be90341c808ac5b17149eb42eac966906c6f2041Stuart Scottimport java.util.HashSet; 434339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasaniimport java.util.List; 44be90341c808ac5b17149eb42eac966906c6f2041Stuart Scottimport java.util.Set; 454339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 46e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani/** 47e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani * Gesture lock pattern settings. 48e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani */ 496ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williamspublic class PrivacySettings extends SettingsPreferenceFragment implements Indexable { 50e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 51e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani // Vendor specific 52ecfeaffdfa19bea836f24fd399376825c377eaa9Bjorn Bringert private static final String GSETTINGS_PROVIDER = "com.google.settings"; 53aa1f8aeeea1c27fe88270cc8b5df970d9f292385Kenny Root private static final String BACKUP_DATA = "backup_data"; 54a5a67306a4c7a066d97802333a473be94661e091Christopher Tate private static final String AUTO_RESTORE = "auto_restore"; 5558e62926b9ceca72275b657b2fa7b9e54fc1a931Christopher Tate private static final String CONFIGURE_ACCOUNT = "configure_account"; 56876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban private static final String BACKUP_INACTIVE = "backup_inactive"; 5747ed6ca004dcfe9498269602b109b1e667fae287Stuart Scott private static final String NETWORK_RESET = "network_reset"; 58be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott private static final String FACTORY_RESET = "factory_reset"; 59876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban private static final String TAG = "PrivacySettings"; 60df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate private IBackupManager mBackupManager; 616ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams private PreferenceScreen mBackup; 62ce543836cea5887484026837f0a4181dca04a733arete private SwitchPreference mAutoRestore; 63df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate private PreferenceScreen mConfigure; 644339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani private boolean mEnabled; 65e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 66e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani @Override 678a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 688a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren return MetricsLogger.PRIVACY; 698a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 708a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 718a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 72d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 73e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani super.onCreate(savedInstanceState); 744339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani // Don't allow any access if this is a secondary user 754339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani mEnabled = Process.myUserHandle().isOwner(); 764339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani if (!mEnabled) { 774339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani return; 784339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 794339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 80e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani addPreferencesFromResource(R.xml.privacy_settings); 81a5a67306a4c7a066d97802333a473be94661e091Christopher Tate final PreferenceScreen screen = getPreferenceScreen(); 82df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate mBackupManager = IBackupManager.Stub.asInterface( 83df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate ServiceManager.getService(Context.BACKUP_SERVICE)); 84df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate 856ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams mBackup = (PreferenceScreen) screen.findPreference(BACKUP_DATA); 86ce543836cea5887484026837f0a4181dca04a733arete 87ce543836cea5887484026837f0a4181dca04a733arete mAutoRestore = (SwitchPreference) screen.findPreference(AUTO_RESTORE); 88ce543836cea5887484026837f0a4181dca04a733arete mAutoRestore.setOnPreferenceChangeListener(preferenceChangeListener); 89ce543836cea5887484026837f0a4181dca04a733arete 9058e62926b9ceca72275b657b2fa7b9e54fc1a931Christopher Tate mConfigure = (PreferenceScreen) screen.findPreference(CONFIGURE_ACCOUNT); 91e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 92be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott Set<String> keysToRemove = new HashSet<>(); 93be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott getNonVisibleKeys(getActivity(), keysToRemove); 94876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban final int screenPreferenceCount = screen.getPreferenceCount(); 95876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban for (int i = screenPreferenceCount - 1; i >= 0; --i) { 96876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban Preference preference = screen.getPreference(i); 97876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban if (keysToRemove.contains(preference.getKey())) { 98876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban screen.removePreference(preference); 99876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 1002c53933e8d35ba50d0791a29e46fa3156e9cab7cJulia Reynolds } 101be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott 102e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani updateToggles(); 103e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani } 104e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 105e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani @Override 10670bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio public void onResume() { 10770bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio super.onResume(); 10870bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio 10970bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio // Refresh UI 1104339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani if (mEnabled) { 1114339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani updateToggles(); 1124339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 11370bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio } 11470bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio 115ce543836cea5887484026837f0a4181dca04a733arete private OnPreferenceChangeListener preferenceChangeListener = new OnPreferenceChangeListener() { 116ce543836cea5887484026837f0a4181dca04a733arete @Override 117ce543836cea5887484026837f0a4181dca04a733arete public boolean onPreferenceChange(Preference preference, Object newValue) { 118ce543836cea5887484026837f0a4181dca04a733arete if (!(preference instanceof SwitchPreference)) { 119ce543836cea5887484026837f0a4181dca04a733arete return true; 120e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani } 121ce543836cea5887484026837f0a4181dca04a733arete boolean nextValue = (Boolean) newValue; 122ce543836cea5887484026837f0a4181dca04a733arete boolean result = false; 1236ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams if (preference == mAutoRestore) { 124ce543836cea5887484026837f0a4181dca04a733arete try { 125ce543836cea5887484026837f0a4181dca04a733arete mBackupManager.setAutoRestore(nextValue); 126ce543836cea5887484026837f0a4181dca04a733arete result = true; 127ce543836cea5887484026837f0a4181dca04a733arete } catch (RemoteException e) { 128ce543836cea5887484026837f0a4181dca04a733arete mAutoRestore.setChecked(!nextValue); 129ce543836cea5887484026837f0a4181dca04a733arete } 130a5a67306a4c7a066d97802333a473be94661e091Christopher Tate } 131ce543836cea5887484026837f0a4181dca04a733arete return result; 132e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani } 133ce543836cea5887484026837f0a4181dca04a733arete }; 134e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 135e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 136e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani /* 1376ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams * Creates toggles for each backup/reset preference. 138e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani */ 139e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani private void updateToggles() { 140e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani ContentResolver res = getContentResolver(); 141a5a67306a4c7a066d97802333a473be94661e091Christopher Tate 142df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate boolean backupEnabled = false; 143df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate Intent configIntent = null; 144df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate String configSummary = null; 145df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate try { 146df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate backupEnabled = mBackupManager.isBackupEnabled(); 147df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate String transport = mBackupManager.getCurrentTransport(); 148df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate configIntent = mBackupManager.getConfigurationIntent(transport); 149df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate configSummary = mBackupManager.getDestinationString(transport); 1506ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams 1516ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams mBackup.setSummary(backupEnabled 1526ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams ? R.string.accessibility_feature_state_on 1536ee5a4d0ef0386d56c72a8ae81e65443fe5a2979Matthew Williams : R.string.accessibility_feature_state_off); 154df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate } catch (RemoteException e) { 155df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate // leave it 'false' and disable the UI; there's no backup manager 156df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate mBackup.setEnabled(false); 157df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate } 158a5a67306a4c7a066d97802333a473be94661e091Christopher Tate 159a5a67306a4c7a066d97802333a473be94661e091Christopher Tate mAutoRestore.setChecked(Settings.Secure.getInt(res, 160c99cffbffcf38f0e6bf10c9ff541b1bb5180316eChristopher Tate Settings.Secure.BACKUP_AUTO_RESTORE, 1) == 1); 161a5a67306a4c7a066d97802333a473be94661e091Christopher Tate mAutoRestore.setEnabled(backupEnabled); 162df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate 16370bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio final boolean configureEnabled = (configIntent != null) && backupEnabled; 16470bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio mConfigure.setEnabled(configureEnabled); 165df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate mConfigure.setIntent(configIntent); 16670bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio setConfigureSummary(configSummary); 167ce543836cea5887484026837f0a4181dca04a733arete } 16870bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio 16970bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio private void setConfigureSummary(String summary) { 17070bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio if (summary != null) { 17170bc797a926abdf14bc0d34d9b49a066663fbca7Fabrice Di Meglio mConfigure.setSummary(summary); 172df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate } else { 1731da842af414a251cdc335534cc6fa456c788a084Stuart Scott mConfigure.setSummary(R.string.backup_configure_account_default_summary); 174df6a7e55ccffd4a8b17780ee07b9f11988b98aaaChristopher Tate } 175e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani } 176e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 177b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 178b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 179b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_backup_reset; 180b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 1814339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1824339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani /** 1834339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani * For Search. 1844339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani */ 1854339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 1864339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani new PrivacySearchIndexProvider(); 1874339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1884339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani private static class PrivacySearchIndexProvider extends BaseSearchIndexProvider { 1894339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1904339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani boolean mIsPrimary; 1914339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1924339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani public PrivacySearchIndexProvider() { 1934339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani super(); 1944339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1954339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; 1964339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 1974339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 1984339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani @Override 1994339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani public List<SearchIndexableResource> getXmlResourcesToIndex( 2004339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani Context context, boolean enabled) { 2014339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 2024339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani List<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); 2034339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 2044339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani // For non-primary user, no backup or reset is available 2054339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani if (!mIsPrimary) { 2064339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani return result; 2074339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 2084339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 2094339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani SearchIndexableResource sir = new SearchIndexableResource(context); 2104339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani sir.xmlResId = R.xml.privacy_settings; 2114339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani result.add(sir); 2124339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 2134339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani return result; 2144339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 215876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban 216876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban @Override 217876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban public List<String> getNonIndexableKeys(Context context) { 218be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott final List<String> nonVisibleKeys = new ArrayList<>(); 219be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott getNonVisibleKeys(context, nonVisibleKeys); 220be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott return nonVisibleKeys; 221876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 2224339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani } 2234339a470d3c1059b6b0e0591e9da2a44ca52df2dAmith Yamasani 224be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott private static void getNonVisibleKeys(Context context, Collection<String> nonVisibleKeys) { 225876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban final IBackupManager backupManager = IBackupManager.Stub.asInterface( 226876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban ServiceManager.getService(Context.BACKUP_SERVICE)); 227876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban boolean isServiceActive = false; 228876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban try { 229876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban isServiceActive = backupManager.isBackupServiceActive(UserHandle.myUserId()); 230876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } catch (RemoteException e) { 231876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban Log.w(TAG, "Failed querying backup manager service activity status. " + 232876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban "Assuming it is inactive."); 233876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 234be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott boolean vendorSpecific = context.getPackageManager(). 235be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott resolveContentProvider(GSETTINGS_PROVIDER, 0) == null; 236be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott if (vendorSpecific || isServiceActive) { 237876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban nonVisibleKeys.add(BACKUP_INACTIVE); 238be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott } 239be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott if (vendorSpecific || !isServiceActive) { 240be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott nonVisibleKeys.add(BACKUP_DATA); 241876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban nonVisibleKeys.add(AUTO_RESTORE); 242876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban nonVisibleKeys.add(CONFIGURE_ACCOUNT); 243876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 244876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban if (UserManager.get(context).hasUserRestriction( 245876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban UserManager.DISALLOW_FACTORY_RESET)) { 246be90341c808ac5b17149eb42eac966906c6f2041Stuart Scott nonVisibleKeys.add(FACTORY_RESET); 247876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 24847ed6ca004dcfe9498269602b109b1e667fae287Stuart Scott if (UserManager.get(context).hasUserRestriction( 24947ed6ca004dcfe9498269602b109b1e667fae287Stuart Scott UserManager.DISALLOW_NETWORK_RESET)) { 25047ed6ca004dcfe9498269602b109b1e667fae287Stuart Scott nonVisibleKeys.add(NETWORK_RESET); 25147ed6ca004dcfe9498269602b109b1e667fae287Stuart Scott } 252876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban } 253876a21bae81e8468d2d6415313c9805d56ae3dfeZoltan Szatmary-Ban} 254