diff options
author | Fan Zhang <zhfan@google.com> | 2018-01-26 10:15:56 -0800 |
---|---|---|
committer | Fan Zhang <zhfan@google.com> | 2018-01-26 12:39:34 -0800 |
commit | 881d5796204262f045d1f30596b824505ad8c0b5 (patch) | |
tree | 5ba2da440a281eb4a36a3a33d03e970a36c52f72 /src/com/android/settings/users/AutoSyncDataPreferenceController.java | |
parent | c24930aaf21b2a05e872df6a13fdba48cab61893 (diff) | |
download | packages_apps_Settings-881d5796204262f045d1f30596b824505ad8c0b5.tar.gz packages_apps_Settings-881d5796204262f045d1f30596b824505ad8c0b5.tar.bz2 packages_apps_Settings-881d5796204262f045d1f30596b824505ad8c0b5.zip |
Misc fixes for User page and my device info page
- Rename UserAndAccountDashboard* to AccountDashboard*
- Move emergency info from account to device info page
- Move auto sync data toggles (4 of them) from Account page to user page
- Move the controllers too. UserSettings is a not a DashboardFragment
so I had to manually call each controller method.
TODO: refactor UserSettings to a DashboardFragment
- Move legal information/regulatory info above advance button within device info page.
Fixes: 72523158
Bug: 71871075
Test: robotests
Change-Id: I1b8af8af61e49d17926f984978a09a974b6c62e1
Diffstat (limited to 'src/com/android/settings/users/AutoSyncDataPreferenceController.java')
-rw-r--r-- | src/com/android/settings/users/AutoSyncDataPreferenceController.java | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/com/android/settings/users/AutoSyncDataPreferenceController.java b/src/com/android/settings/users/AutoSyncDataPreferenceController.java new file mode 100644 index 0000000000..5d9ec43a51 --- /dev/null +++ b/src/com/android/settings/users/AutoSyncDataPreferenceController.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.users; + +import android.app.ActivityManager; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.Fragment; +import android.content.ContentResolver; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.os.Process; +import android.os.UserHandle; +import android.os.UserManager; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.Preference; +import android.util.Log; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settingslib.core.AbstractPreferenceController; + +public class AutoSyncDataPreferenceController extends AbstractPreferenceController + implements PreferenceControllerMixin { + + private static final String TAG = "AutoSyncDataController"; + private static final String TAG_CONFIRM_AUTO_SYNC_CHANGE = "confirmAutoSyncChange"; + private static final String KEY_AUTO_SYNC_ACCOUNT = "auto_sync_account_data"; + + protected final UserManager mUserManager; + private final Fragment mParentFragment; + + protected UserHandle mUserHandle; + + public AutoSyncDataPreferenceController(Context context, Fragment parent) { + super(context); + mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + mParentFragment = parent; + mUserHandle = Process.myUserHandle(); + } + + @Override + public void updateState(Preference preference) { + SwitchPreference switchPreference = (SwitchPreference) preference; + switchPreference.setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser( + mUserHandle.getIdentifier())); + } + + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (getPreferenceKey().equals(preference.getKey())) { + SwitchPreference switchPreference = (SwitchPreference) preference; + boolean checked = switchPreference.isChecked(); + switchPreference.setChecked(!checked); + if (ActivityManager.isUserAMonkey()) { + Log.d(TAG, "ignoring monkey's attempt to flip sync state"); + } else { + ConfirmAutoSyncChangeFragment.show(mParentFragment, checked, mUserHandle, + switchPreference); + } + return true; + } + return false; + } + + @Override + public boolean isAvailable() { + return !mUserManager.isManagedProfile() + && (mUserManager.isLinkedUser() + || mUserManager.getProfiles(UserHandle.myUserId()).size() == 1); + } + + @Override + public String getPreferenceKey() { + return KEY_AUTO_SYNC_ACCOUNT; + } + + /** + * Dialog to inform user about changing auto-sync setting + */ + public static class ConfirmAutoSyncChangeFragment extends InstrumentedDialogFragment implements + DialogInterface.OnClickListener { + private static final String SAVE_ENABLING = "enabling"; + private static final String SAVE_USER_HANDLE = "userHandle"; + boolean mEnabling; + UserHandle mUserHandle; + SwitchPreference mPreference; + + public static void show(Fragment parent, boolean enabling, UserHandle userHandle, + SwitchPreference preference) { + if (!parent.isAdded()) return; + + final ConfirmAutoSyncChangeFragment dialog = new ConfirmAutoSyncChangeFragment(); + dialog.mEnabling = enabling; + dialog.mUserHandle = userHandle; + dialog.setTargetFragment(parent, 0); + dialog.mPreference = preference; + dialog.show(parent.getFragmentManager(), TAG_CONFIRM_AUTO_SYNC_CHANGE); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final Context context = getActivity(); + if (savedInstanceState != null) { + mEnabling = savedInstanceState.getBoolean(SAVE_ENABLING); + mUserHandle = (UserHandle) savedInstanceState.getParcelable(SAVE_USER_HANDLE); + } + + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + if (!mEnabling) { + builder.setTitle(R.string.data_usage_auto_sync_off_dialog_title); + builder.setMessage(R.string.data_usage_auto_sync_off_dialog); + } else { + builder.setTitle(R.string.data_usage_auto_sync_on_dialog_title); + builder.setMessage(R.string.data_usage_auto_sync_on_dialog); + } + + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, null); + + return builder.create(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(SAVE_ENABLING, mEnabling); + outState.putParcelable(SAVE_USER_HANDLE, mUserHandle); + } + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.DIALOG_CONFIRM_AUTO_SYNC_CHANGE; + } + + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + ContentResolver.setMasterSyncAutomaticallyAsUser(mEnabling, + mUserHandle.getIdentifier()); + if (mPreference != null) { + mPreference.setChecked(mEnabling); + } + } + } + } + +} |