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

Commit cdaf5d38 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Disable the sync now menu while no any synced item" into rvc-dev

parents 781ca586 0030d78b
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;

@@ -221,9 +222,8 @@ public class AccountSyncSettings extends AccountPreferenceBase {
        // Note that this also counts accounts that are not currently displayed
        boolean syncActive = !ContentResolver.getCurrentSyncsAsUser(
                mUserHandle.getIdentifier()).isEmpty();
        menu.findItem(MENU_SYNC_NOW_ID).setVisible(!syncActive);
        menu.findItem(MENU_SYNC_NOW_ID).setVisible(!syncActive).setEnabled(enabledSyncNowMenu());
        menu.findItem(MENU_SYNC_CANCEL_ID).setVisible(syncActive);

    }

    @Override
@@ -562,6 +562,23 @@ public class AccountSyncSettings extends AccountPreferenceBase {
        return R.string.help_url_accounts;
    }

    @VisibleForTesting
    boolean enabledSyncNowMenu() {
        boolean enabled = false;
        for (int i = 0, count = getPreferenceScreen().getPreferenceCount(); i < count; i++) {
            final Preference pref = getPreferenceScreen().getPreference(i);
            if (!(pref instanceof SyncStateSwitchPreference)) {
                continue;
            }
            final SyncStateSwitchPreference syncPref = (SyncStateSwitchPreference) pref;
            if (syncPref.isChecked()) {
                enabled = true;
                break;
            }
        }
        return enabled;
    }

    private static String formatSyncDate(Context context, Date date) {
        return DateUtils.formatDateTime(context, date.getTime(),
                DateUtils.FORMAT_SHOW_DATE
+56 −6
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.settings.accounts;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -24,10 +26,13 @@ import android.content.Context;
import android.os.UserHandle;

import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;

import com.android.settings.testutils.shadow.ShadowContentResolver;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -38,6 +43,14 @@ import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowContentResolver.class})
public class AccountSyncSettingsTest {
    private Context mContext;
    private AccountSyncSettings mAccountSyncSettings;

    @Before
    public void setUp() {
        mContext = RuntimeEnvironment.application;
        mAccountSyncSettings = spy(new TestAccountSyncSettings(mContext));
    }

    @After
    public void tearDown() {
@@ -46,15 +59,52 @@ public class AccountSyncSettingsTest {

    @Test
    public void onPreferenceTreeClick_nullAuthority_shouldNotCrash() {
        final Context context = RuntimeEnvironment.application;
        final AccountSyncSettings settings = spy(new AccountSyncSettings());
        when(settings.getActivity()).thenReturn(mock(FragmentActivity.class));
        final SyncStateSwitchPreference preference = new SyncStateSwitchPreference(context,
        when(mAccountSyncSettings.getActivity()).thenReturn(mock(FragmentActivity.class));
        final SyncStateSwitchPreference preference = new SyncStateSwitchPreference(mContext,
                new Account("acct1", "type1"), "" /* authority */, "testPackage", 1 /* uid */);
        preference.setOneTimeSyncMode(false);
        ReflectionHelpers.setField(settings, "mUserHandle", UserHandle.CURRENT);
        ReflectionHelpers.setField(mAccountSyncSettings, "mUserHandle", UserHandle.CURRENT);

        settings.onPreferenceTreeClick(preference);
        mAccountSyncSettings.onPreferenceTreeClick(preference);
        // no crash
    }

    @Test
    public void enabledSyncNowMenu_noSyncStateSwitchPreference_returnFalse() {
        assertThat(mAccountSyncSettings.enabledSyncNowMenu()).isFalse();
    }

    @Test
    public void enabledSyncNowMenu_addSyncStateSwitchPreferenceAndSwitchOn_returnTrue() {
        final SyncStateSwitchPreference preference = new SyncStateSwitchPreference(mContext,
                new Account("acct1", "type1"), "" /* authority */, "testPackage", 1 /* uid */);
        preference.setChecked(true);
        mAccountSyncSettings.getPreferenceScreen().addPreference(preference);

        assertThat(mAccountSyncSettings.enabledSyncNowMenu()).isTrue();
    }

    @Test
    public void enabledSyncNowMenu_addSyncStateSwitchPreferenceAndSwitchOff_returnFalse() {
        final SyncStateSwitchPreference preference = new SyncStateSwitchPreference(mContext,
                new Account("acct1", "type1"), "" /* authority */, "testPackage", 1 /* uid */);
        preference.setChecked(false);
        mAccountSyncSettings.getPreferenceScreen().addPreference(preference);

        assertThat(mAccountSyncSettings.enabledSyncNowMenu()).isFalse();
    }

    public static class TestAccountSyncSettings extends AccountSyncSettings {
        private PreferenceScreen mScreen;

        public TestAccountSyncSettings(Context context) {
            final PreferenceManager preferenceManager = new PreferenceManager(context);
            mScreen = preferenceManager.createPreferenceScreen(context);
        }

        @Override
        public PreferenceScreen getPreferenceScreen() {
            return mScreen;
        }
    }
}
+2 −2

File changed.

Contains only whitespace changes.