Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d148c4b authored by Doris Ling's avatar Doris Ling Committed by Android (Google) Code Review
Browse files

Merge "Add Auto sync account data to account dashboard."

parents d7359a83 86e1df9b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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>
+18 −6
Original line number Diff line number Diff line
@@ -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>
+3 −66
Original line number Diff line number Diff line
@@ -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;
@@ -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.
         */
@@ -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;
        }
@@ -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
+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);
                }
            }
        }
    }

}
+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