diff options
Diffstat (limited to 'src/com/android/settings/PrivacySettings.java')
-rw-r--r-- | src/com/android/settings/PrivacySettings.java | 142 |
1 files changed, 110 insertions, 32 deletions
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java index d936f46..0a9f086 100644 --- a/src/com/android/settings/PrivacySettings.java +++ b/src/com/android/settings/PrivacySettings.java @@ -24,13 +24,24 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; -import android.preference.CheckBoxPreference; +import android.os.UserHandle; +import android.os.UserManager; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceScreen; +import android.preference.SwitchPreference; +import android.provider.SearchIndexableResource; import android.provider.Settings; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable.SearchIndexProvider; + +import java.util.ArrayList; +import java.util.List; + /** * Gesture lock pattern settings. */ @@ -43,11 +54,13 @@ public class PrivacySettings extends SettingsPreferenceFragment implements private static final String BACKUP_DATA = "backup_data"; private static final String AUTO_RESTORE = "auto_restore"; private static final String CONFIGURE_ACCOUNT = "configure_account"; + private static final String PERSONAL_DATA_CATEGORY = "personal_data_category"; private IBackupManager mBackupManager; - private CheckBoxPreference mBackup; - private CheckBoxPreference mAutoRestore; + private SwitchPreference mBackup; + private SwitchPreference mAutoRestore; private Dialog mConfirmDialog; private PreferenceScreen mConfigure; + private boolean mEnabled; private static final int DIALOG_ERASE_BACKUP = 2; private int mDialogType; @@ -55,16 +68,30 @@ public class PrivacySettings extends SettingsPreferenceFragment implements @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // Don't allow any access if this is a secondary user + mEnabled = Process.myUserHandle().isOwner(); + if (!mEnabled) { + return; + } + addPreferencesFromResource(R.xml.privacy_settings); final PreferenceScreen screen = getPreferenceScreen(); - mBackupManager = IBackupManager.Stub.asInterface( ServiceManager.getService(Context.BACKUP_SERVICE)); - mBackup = (CheckBoxPreference) screen.findPreference(BACKUP_DATA); - mAutoRestore = (CheckBoxPreference) screen.findPreference(AUTO_RESTORE); + mBackup = (SwitchPreference) screen.findPreference(BACKUP_DATA); + mBackup.setOnPreferenceChangeListener(preferenceChangeListener); + + mAutoRestore = (SwitchPreference) screen.findPreference(AUTO_RESTORE); + mAutoRestore.setOnPreferenceChangeListener(preferenceChangeListener); + mConfigure = (PreferenceScreen) screen.findPreference(CONFIGURE_ACCOUNT); + if (UserManager.get(getActivity()).hasUserRestriction( + UserManager.DISALLOW_FACTORY_RESET)) { + screen.removePreference(findPreference(PERSONAL_DATA_CATEGORY)); + } + // Vendor specific if (getActivity().getPackageManager(). resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) { @@ -78,7 +105,9 @@ public class PrivacySettings extends SettingsPreferenceFragment implements super.onResume(); // Refresh UI - updateToggles(); + if (mEnabled) { + updateToggles(); + } } @Override @@ -91,35 +120,41 @@ public class PrivacySettings extends SettingsPreferenceFragment implements super.onStop(); } - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, - Preference preference) { - if (preference == mBackup) { - if (!mBackup.isChecked()) { - showEraseBackupDialog(); - } else { - setBackupEnabled(true); + private OnPreferenceChangeListener preferenceChangeListener = new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!(preference instanceof SwitchPreference)) { + return true; } - } else if (preference == mAutoRestore) { - boolean curState = mAutoRestore.isChecked(); - try { - mBackupManager.setAutoRestore(curState); - } catch (RemoteException e) { - mAutoRestore.setChecked(!curState); + boolean nextValue = (Boolean) newValue; + boolean result = false; + if (preference == mBackup) { + if (nextValue == false) { + // Don't change Switch status until user makes choice in dialog + // so return false here. + showEraseBackupDialog(); + } else { + setBackupEnabled(true); + result = true; + } + } else if (preference == mAutoRestore) { + try { + mBackupManager.setAutoRestore(nextValue); + result = true; + } catch (RemoteException e) { + mAutoRestore.setChecked(!nextValue); + } } + return result; } - return super.onPreferenceTreeClick(preferenceScreen, preference); - } + }; private void showEraseBackupDialog() { - mBackup.setChecked(true); - mDialogType = DIALOG_ERASE_BACKUP; CharSequence msg = getResources().getText(R.string.backup_erase_dialog_message); // TODO: DialogFragment? mConfirmDialog = new AlertDialog.Builder(getActivity()).setMessage(msg) .setTitle(R.string.backup_erase_dialog_title) - .setIconAttribute(android.R.attr.alertDialogIcon) .setPositiveButton(android.R.string.ok, this) .setNegativeButton(android.R.string.cancel, this) .show(); @@ -153,7 +188,7 @@ public class PrivacySettings extends SettingsPreferenceFragment implements mConfigure.setEnabled(configureEnabled); mConfigure.setIntent(configIntent); setConfigureSummary(configSummary); -} + } private void setConfigureSummary(String summary) { if (summary != null) { @@ -173,13 +208,20 @@ public class PrivacySettings extends SettingsPreferenceFragment implements } } + @Override public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) { - //updateProviders(); - if (mDialogType == DIALOG_ERASE_BACKUP) { + // Dialog is triggered before Switch status change, that means marking the Switch to + // true in showEraseBackupDialog() method will be override by following status change. + // So we do manual switching here due to users' response. + if (mDialogType == DIALOG_ERASE_BACKUP) { + // Accept turning off backup + if (which == DialogInterface.BUTTON_POSITIVE) { setBackupEnabled(false); - updateConfigureSummary(); + } else if (which == DialogInterface.BUTTON_NEGATIVE) { + // Reject turning off backup + setBackupEnabled(true); } + updateConfigureSummary(); } mDialogType = 0; } @@ -208,4 +250,40 @@ public class PrivacySettings extends SettingsPreferenceFragment implements protected int getHelpResource() { return R.string.help_url_backup_reset; } -} + + /** + * For Search. + */ + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new PrivacySearchIndexProvider(); + + private static class PrivacySearchIndexProvider extends BaseSearchIndexProvider { + + boolean mIsPrimary; + + public PrivacySearchIndexProvider() { + super(); + + mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; + } + + @Override + public List<SearchIndexableResource> getXmlResourcesToIndex( + Context context, boolean enabled) { + + List<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); + + // For non-primary user, no backup or reset is available + if (!mIsPrimary) { + return result; + } + + SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.privacy_settings; + result.add(sir); + + return result; + } + } + +}
\ No newline at end of file |