Loading res/values/strings.xml +7 −0 Original line number Diff line number Diff line Loading @@ -7939,4 +7939,11 @@ <!-- Configure section header [CHAR LIMIT=30] --> <string name="configure_section_header">Configure</string> <!-- Switch label to enable auto sync account [CHAR LIMIT=30] --> <string name="auto_sync_account_title">Auto sync account data</string> <!-- Switch label to enable auto sync personal account [CHAR LIMIT=30] --> <string name="auto_sync_personal_account_title">Auto sync personal account data</string> <!-- Switch label to enable auto sync work account [CHAR LIMIT=30] --> <string name="auto_sync_work_account_title">Auto sync work account data</string> </resources> res/xml/user_and_accounts_settings.xml +18 −6 Original line number Diff line number Diff line Loading @@ -32,12 +32,24 @@ android:key="account_configuration_header" android:title="@string/configure_section_header"> </PreferenceCategory> <SwitchPreference android:key="auto_sync_account_data" android:title="@string/auto_sync_account_title" /> <SwitchPreference android:key="auto_sync_work_account_data" android:title="@string/account_settings_menu_auto_sync_work" /> <SwitchPreference android:key="auto_sync_personal_account_data" android:title="@string/account_settings_menu_auto_sync_personal" /> <com.android.settingslib.RestrictedSwitchPreference android:key="add_users_when_locked" android:title="@string/user_add_on_lockscreen_menu" android:summary="@string/user_add_on_lockscreen_menu_summary" settings:useAdditionalSummary="true" /> </PreferenceCategory> </PreferenceScreen> src/com/android/settings/accounts/AccountSettings.java +3 −66 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ package com.android.settings.accounts; import android.accounts.Account; import android.accounts.AccountManager; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; Loading Loading @@ -107,7 +105,7 @@ public class AccountSettings extends SettingsPreferenceFragment /** * Holds data related to the accounts belonging to one profile. */ private static class ProfileData { public static class ProfileData { /** * The preference that displays the accounts. */ Loading Loading @@ -619,8 +617,8 @@ public class AccountSettings extends SettingsPreferenceFragment if (ActivityManager.isUserAMonkey()) { Log.d(TAG, "ignoring monkey's attempt to flip sync state"); } else { ConfirmAutoSyncChangeFragment.show(AccountSettings.this, !item.isChecked(), mUserHandle); AutoSyncDataPreferenceController.ConfirmAutoSyncChangeFragment.show( AccountSettings.this, !item.isChecked(), mUserHandle, /*preference*/null); } return true; } Loading Loading @@ -657,67 +655,6 @@ public class AccountSettings extends SettingsPreferenceFragment } } /** * Dialog to inform user about changing auto-sync setting */ public static class ConfirmAutoSyncChangeFragment extends InstrumentedDialogFragment { private static final String SAVE_ENABLING = "enabling"; private static final String SAVE_USER_HANDLE = "userHandle"; private boolean mEnabling; private UserHandle mUserHandle; public static void show(AccountSettings parent, boolean enabling, UserHandle userHandle) { if (!parent.isAdded()) return; final ConfirmAutoSyncChangeFragment dialog = new ConfirmAutoSyncChangeFragment(); dialog.mEnabling = enabling; dialog.mUserHandle = userHandle; dialog.setTargetFragment(parent, 0); 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, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ContentResolver.setMasterSyncAutomaticallyAsUser(mEnabling, mUserHandle.getIdentifier()); } }); 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 MetricsEvent.DIALOG_CONFIRM_AUTO_SYNC_CHANGE; } } public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override Loading src/com/android/settings/accounts/AutoSyncDataPreferenceController.java 0 → 100644 +161 −0 Original line number Diff line number Diff line /* * 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.accounts; 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.MetricsProto; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; public class AutoSyncDataPreferenceController extends PreferenceController { 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 UserManager mUserManager; private UserHandle mUserHandle; private Fragment mParentFragment; 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); } } } } } src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceController.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * 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.accounts; import android.app.Fragment; import android.content.Context; import android.os.UserHandle; public class AutoSyncPersonalDataPreferenceController extends AutoSyncDataPreferenceController { private static final String TAG = "AutoSyncPersonalData"; private static final String KEY_AUTO_SYNC_PERSONAL_ACCOUNT = "auto_sync_personal_account_data"; public AutoSyncPersonalDataPreferenceController(Context context, Fragment parent) { super(context, parent); } @Override public boolean isAvailable() { return !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser() && mUserManager.getProfiles(UserHandle.myUserId()).size() > 1; } @Override public String getPreferenceKey() { return KEY_AUTO_SYNC_PERSONAL_ACCOUNT; } } Loading
res/values/strings.xml +7 −0 Original line number Diff line number Diff line Loading @@ -7939,4 +7939,11 @@ <!-- Configure section header [CHAR LIMIT=30] --> <string name="configure_section_header">Configure</string> <!-- Switch label to enable auto sync account [CHAR LIMIT=30] --> <string name="auto_sync_account_title">Auto sync account data</string> <!-- Switch label to enable auto sync personal account [CHAR LIMIT=30] --> <string name="auto_sync_personal_account_title">Auto sync personal account data</string> <!-- Switch label to enable auto sync work account [CHAR LIMIT=30] --> <string name="auto_sync_work_account_title">Auto sync work account data</string> </resources>
res/xml/user_and_accounts_settings.xml +18 −6 Original line number Diff line number Diff line Loading @@ -32,12 +32,24 @@ android:key="account_configuration_header" android:title="@string/configure_section_header"> </PreferenceCategory> <SwitchPreference android:key="auto_sync_account_data" android:title="@string/auto_sync_account_title" /> <SwitchPreference android:key="auto_sync_work_account_data" android:title="@string/account_settings_menu_auto_sync_work" /> <SwitchPreference android:key="auto_sync_personal_account_data" android:title="@string/account_settings_menu_auto_sync_personal" /> <com.android.settingslib.RestrictedSwitchPreference android:key="add_users_when_locked" android:title="@string/user_add_on_lockscreen_menu" android:summary="@string/user_add_on_lockscreen_menu_summary" settings:useAdditionalSummary="true" /> </PreferenceCategory> </PreferenceScreen>
src/com/android/settings/accounts/AccountSettings.java +3 −66 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ package com.android.settings.accounts; import android.accounts.Account; import android.accounts.AccountManager; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; Loading Loading @@ -107,7 +105,7 @@ public class AccountSettings extends SettingsPreferenceFragment /** * Holds data related to the accounts belonging to one profile. */ private static class ProfileData { public static class ProfileData { /** * The preference that displays the accounts. */ Loading Loading @@ -619,8 +617,8 @@ public class AccountSettings extends SettingsPreferenceFragment if (ActivityManager.isUserAMonkey()) { Log.d(TAG, "ignoring monkey's attempt to flip sync state"); } else { ConfirmAutoSyncChangeFragment.show(AccountSettings.this, !item.isChecked(), mUserHandle); AutoSyncDataPreferenceController.ConfirmAutoSyncChangeFragment.show( AccountSettings.this, !item.isChecked(), mUserHandle, /*preference*/null); } return true; } Loading Loading @@ -657,67 +655,6 @@ public class AccountSettings extends SettingsPreferenceFragment } } /** * Dialog to inform user about changing auto-sync setting */ public static class ConfirmAutoSyncChangeFragment extends InstrumentedDialogFragment { private static final String SAVE_ENABLING = "enabling"; private static final String SAVE_USER_HANDLE = "userHandle"; private boolean mEnabling; private UserHandle mUserHandle; public static void show(AccountSettings parent, boolean enabling, UserHandle userHandle) { if (!parent.isAdded()) return; final ConfirmAutoSyncChangeFragment dialog = new ConfirmAutoSyncChangeFragment(); dialog.mEnabling = enabling; dialog.mUserHandle = userHandle; dialog.setTargetFragment(parent, 0); 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, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ContentResolver.setMasterSyncAutomaticallyAsUser(mEnabling, mUserHandle.getIdentifier()); } }); 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 MetricsEvent.DIALOG_CONFIRM_AUTO_SYNC_CHANGE; } } public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override Loading
src/com/android/settings/accounts/AutoSyncDataPreferenceController.java 0 → 100644 +161 −0 Original line number Diff line number Diff line /* * 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.accounts; 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.MetricsProto; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; public class AutoSyncDataPreferenceController extends PreferenceController { 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 UserManager mUserManager; private UserHandle mUserHandle; private Fragment mParentFragment; 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); } } } } }
src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceController.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * 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.accounts; import android.app.Fragment; import android.content.Context; import android.os.UserHandle; public class AutoSyncPersonalDataPreferenceController extends AutoSyncDataPreferenceController { private static final String TAG = "AutoSyncPersonalData"; private static final String KEY_AUTO_SYNC_PERSONAL_ACCOUNT = "auto_sync_personal_account_data"; public AutoSyncPersonalDataPreferenceController(Context context, Fragment parent) { super(context, parent); } @Override public boolean isAvailable() { return !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser() && mUserManager.getProfiles(UserHandle.myUserId()).size() > 1; } @Override public String getPreferenceKey() { return KEY_AUTO_SYNC_PERSONAL_ACCOUNT; } }