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