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

Commit 19084d07 authored by Sandeep Siddhartha's avatar Sandeep Siddhartha
Browse files

Cleanup LoginAccountUtils

Bug: 17464068
Change-Id: Icf994a7582491afebc5db522c127a30d079ce05c
parent d9015233
Loading
Loading
Loading
Loading
+6 −7
Original line number Original line Diff line number Diff line
@@ -16,16 +16,20 @@


package com.android.inputmethod.latin.accounts;
package com.android.inputmethod.latin.accounts;


import android.accounts.Account;
import android.content.Context;
import android.content.Context;


import javax.annotation.Nonnull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;


/**
/**
 * Utility class for retrieving accounts that may be used for login.
 * Utility class for retrieving accounts that may be used for login.
 */
 */
public class LoginAccountUtils {
public class LoginAccountUtils {
    /**
     * This defines the type of account this class deals with.
     * This account type is used when listing the accounts available on the device for login.
     */
    public static final String ACCOUNT_TYPE = "";

    private LoginAccountUtils() {
    private LoginAccountUtils() {
        // This utility class is not publicly instantiable.
        // This utility class is not publicly instantiable.
    }
    }
@@ -39,9 +43,4 @@ public class LoginAccountUtils {
    public static String[] getAccountsForLogin(final Context context) {
    public static String[] getAccountsForLogin(final Context context) {
        return new String[0];
        return new String[0];
    }
    }

    @Nullable
    public static Account getCurrentAccount(final Context context) {
        return null;
    }
}
}
+16 −10
Original line number Original line Diff line number Diff line
@@ -101,7 +101,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
    @Override
    @Override
    public void onResume() {
    public void onResume() {
        super.onResume();
        super.onResume();
        refreshAccountAndDependentPreferences(getCurrentlySelectedAccount());
        refreshAccountAndDependentPreferences(getSignedInAccountName());
    }
    }


    @Override
    @Override
@@ -111,7 +111,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
                    prefs.getString(PREF_ACCOUNT_NAME, null));
                    prefs.getString(PREF_ACCOUNT_NAME, null));
        } else if (TextUtils.equals(key, PREF_ENABLE_CLOUD_SYNC)) {
        } else if (TextUtils.equals(key, PREF_ENABLE_CLOUD_SYNC)) {
            final boolean syncEnabled = prefs.getBoolean(PREF_ENABLE_CLOUD_SYNC, false);
            final boolean syncEnabled = prefs.getBoolean(PREF_ENABLE_CLOUD_SYNC, false);
            updateSyncPolicy(syncEnabled, LoginAccountUtils.getCurrentAccount(getActivity()));
            updateSyncPolicy(syncEnabled, getSignedInAccountName());
        }
        }
    }
    }


@@ -182,16 +182,22 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
     * set or unset the syncable property of the sync authority.
     * set or unset the syncable property of the sync authority.
     * If the account is null, this method is a no-op currently, but we may want
     * If the account is null, this method is a no-op currently, but we may want
     * to perform some cleanup in the future.
     * to perform some cleanup in the future.
     *
     * @param enabled indicates whether the sync preference is enabled or not.
     * @param accountToUse indicaes the account to be used for sync, or null if the user
     *        is not logged in.
     */
     */
    @UsedForTesting
    @UsedForTesting
    void updateSyncPolicy(boolean enabled, Account accountToUse) {
    void updateSyncPolicy(boolean enabled, @Nullable String accountToUse) {
        if (!ProductionFlags.ENABLE_PERSONAL_DICTIONARY_SYNC) {
        if (!ProductionFlags.ENABLE_PERSONAL_DICTIONARY_SYNC) {
            return;
            return;
        }
        }


        if (accountToUse != null) {
        if (accountToUse != null) {
            final int syncable = enabled ? 1 : 0;
            final int syncable = enabled ? 1 : 0;
            ContentResolver.setIsSyncable(accountToUse, AUTHORITY, syncable);
            ContentResolver.setIsSyncable(
                    new Account(accountToUse, LoginAccountUtils.ACCOUNT_TYPE),
                    AUTHORITY, syncable);
            // TODO: Also add a periodic sync here.
            // TODO: Also add a periodic sync here.
            // See ContentResolver.addPeriodicSync
            // See ContentResolver.addPeriodicSync
        } else {
        } else {
@@ -202,11 +208,11 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
    }
    }


    @Nullable
    @Nullable
    private String getCurrentlySelectedAccount() {
    String getSignedInAccountName() {
        return getSharedPreferences().getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, null);
        return getSharedPreferences().getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, null);
    }
    }


    private boolean isSyncEnabled() {
    boolean isSyncEnabled() {
        return getSharedPreferences().getBoolean(PREF_ENABLE_CLOUD_SYNC, false);
        return getSharedPreferences().getBoolean(PREF_ENABLE_CLOUD_SYNC, false);
    }
    }


@@ -266,12 +272,11 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
                    // Attempt starting sync for the new account if sync was
                    // Attempt starting sync for the new account if sync was
                    // previously enabled.
                    // previously enabled.
                    // If not, stop it.
                    // If not, stop it.
                    updateSyncPolicy(isSyncEnabled(),
                    updateSyncPolicy(isSyncEnabled(), getSignedInAccountName());
                            LoginAccountUtils.getCurrentAccount(getActivity()));
                    break;
                    break;
                case DialogInterface.BUTTON_NEUTRAL: // Signed out
                case DialogInterface.BUTTON_NEUTRAL: // Signed out
                    // Stop sync for the account that's being signed out of.
                    // Stop sync for the account that's being signed out of.
                    updateSyncPolicy(false, LoginAccountUtils.getCurrentAccount(getActivity()));
                    updateSyncPolicy(false, getSignedInAccountName());
                    getSharedPreferences()
                    getSharedPreferences()
                            .edit()
                            .edit()
                            .remove(PREF_ACCOUNT_NAME)
                            .remove(PREF_ACCOUNT_NAME)
@@ -288,7 +293,8 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
        @Override
        @Override
        public boolean onPreferenceClick(final Preference preference) {
        public boolean onPreferenceClick(final Preference preference) {
            ContentResolver.requestSync(
            ContentResolver.requestSync(
                    LoginAccountUtils.getCurrentAccount(getActivity()), AUTHORITY, Bundle.EMPTY);
                    new Account(getSignedInAccountName(), LoginAccountUtils.ACCOUNT_TYPE),
                    AUTHORITY, Bundle.EMPTY);
            return true;
            return true;
        }
        }
    }
    }
+8 −5
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import android.test.suitebuilder.annotation.MediumTest;
import android.view.View;
import android.view.View;
import android.widget.ListView;
import android.widget.ListView;


import com.android.inputmethod.latin.accounts.LoginAccountUtils;
import com.android.inputmethod.latin.define.ProductionFlags;
import com.android.inputmethod.latin.define.ProductionFlags;


import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CountDownLatch;
@@ -38,7 +39,9 @@ public class AccountsSettingsFragmentTests
        extends ActivityInstrumentationTestCase2<TestFragmentActivity> {
        extends ActivityInstrumentationTestCase2<TestFragmentActivity> {
    private static final String FRAG_NAME = AccountsSettingsFragment.class.getName();
    private static final String FRAG_NAME = AccountsSettingsFragment.class.getName();
    private static final long TEST_TIMEOUT_MILLIS = 5000;
    private static final long TEST_TIMEOUT_MILLIS = 5000;
    private static final Account TEST_ACCOUNT = new Account("account-for-test", "account-type");
    private static final String TEST_ACCOUNT_NAME = "AccountsSettingsFragmentTests";
    private static final Account TEST_ACCOUNT =
            new Account(TEST_ACCOUNT_NAME, LoginAccountUtils.ACCOUNT_TYPE);


    private AlertDialog mDialog;
    private AlertDialog mDialog;


@@ -154,7 +157,7 @@ public class AccountsSettingsFragmentTests


        final AccountsSettingsFragment fragment =
        final AccountsSettingsFragment fragment =
                (AccountsSettingsFragment) getActivity().mFragment;
                (AccountsSettingsFragment) getActivity().mFragment;
        fragment.updateSyncPolicy(true, TEST_ACCOUNT);
        fragment.updateSyncPolicy(true, TEST_ACCOUNT_NAME);


        // Should be syncable now.
        // Should be syncable now.
        assertEquals(1, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
        assertEquals(1, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
@@ -170,7 +173,7 @@ public class AccountsSettingsFragmentTests


        final AccountsSettingsFragment fragment =
        final AccountsSettingsFragment fragment =
                (AccountsSettingsFragment) getActivity().mFragment;
                (AccountsSettingsFragment) getActivity().mFragment;
        fragment.updateSyncPolicy(false, TEST_ACCOUNT);
        fragment.updateSyncPolicy(false, TEST_ACCOUNT_NAME);


        // Should not be syncable now.
        // Should not be syncable now.
        assertEquals(0, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
        assertEquals(0, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
@@ -186,12 +189,12 @@ public class AccountsSettingsFragmentTests


        final AccountsSettingsFragment fragment =
        final AccountsSettingsFragment fragment =
                (AccountsSettingsFragment) getActivity().mFragment;
                (AccountsSettingsFragment) getActivity().mFragment;
        fragment.updateSyncPolicy(true, TEST_ACCOUNT);
        fragment.updateSyncPolicy(true, TEST_ACCOUNT_NAME);


        // Should be syncable now.
        // Should be syncable now.
        assertEquals(1, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
        assertEquals(1, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));


        fragment.updateSyncPolicy(false, TEST_ACCOUNT);
        fragment.updateSyncPolicy(false, TEST_ACCOUNT_NAME);


        // Should not be syncable now.
        // Should not be syncable now.
        assertEquals(0, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));
        assertEquals(0, ContentResolver.getIsSyncable(TEST_ACCOUNT, AUTHORITY));