diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java index ec74cd842b4..a652056cf33 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -42,12 +42,14 @@ 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; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.widget.EntityHeaderController; +import com.android.settingslib.widget.FooterPreference; import com.google.android.collect.Lists; @@ -458,8 +460,7 @@ public class AccountSyncSettings extends AccountPreferenceBase { syncPref.setChecked(oneTimeSyncMode || syncEnabled); } if (syncIsFailing) { - mFooterPreferenceMixin.createFooterPreference() - .setTitle(R.string.sync_is_failing); + createFooterPreference(); } } @@ -552,4 +553,11 @@ public class AccountSyncSettings extends AccountPreferenceBase { | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_TIME); } + + @VisibleForTesting + void createFooterPreference() { + final FooterPreference footerPreference = new FooterPreference(getActivity()); + footerPreference.setTitle(R.string.sync_is_failing); + getPreferenceScreen().addPreference(footerPreference); + } } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java index 50814ee7c40..8fb40bfdaa2 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java @@ -36,7 +36,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settingslib.accounts.AuthenticatorHelper; +import com.android.settings.testutils.shadow.ShadowAuthenticationHelper; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.widget.LayoutPreference; @@ -48,11 +48,9 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; @RunWith(RobolectricTestRunner.class) -@Config(shadows = AccountHeaderPreferenceControllerTest.ShadowAuthenticatorHelper.class) +@Config(shadows = ShadowAuthenticationHelper.class) public class AccountHeaderPreferenceControllerTest { @Mock @@ -109,12 +107,4 @@ public class AccountHeaderPreferenceControllerTest { assertThat(label).isEqualTo(account.name); } - - @Implements(AuthenticatorHelper.class) - public static class ShadowAuthenticatorHelper { - @Implementation - protected void onAccountsUpdated(Account[] accounts) { - - } - } } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java b/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java index dd1778f95fc..59d1f60afbb 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java @@ -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,7 +26,9 @@ import android.content.Context; import android.os.UserHandle; import androidx.fragment.app.FragmentActivity; +import androidx.preference.Preference; +import com.android.settings.testutils.shadow.ShadowAuthenticationHelper; import com.android.settings.testutils.shadow.ShadowContentResolver; import org.junit.After; @@ -33,6 +37,7 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.shadows.androidx.fragment.FragmentController; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) @@ -57,4 +62,18 @@ public class AccountSyncSettingsTest { settings.onPreferenceTreeClick(preference); // no crash } + + @Test + @Config(shadows = {ShadowAuthenticationHelper.class}) + public void createFooterPreference_shouldReturnFooter() { + final AccountSyncSettings settings = FragmentController.of(new AccountSyncSettings()) + .create() + .get(); + + settings.createFooterPreference(); + + final Preference footer = settings.getPreferenceScreen().findPreference( + "footer_preference"); + assertThat(footer).isNotNull(); + } } diff --git a/tests/robotests/src/com/android/settings/accounts/TopLevelAccountEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/TopLevelAccountEntryPreferenceControllerTest.java index ced3db18ae6..8fe8e190eff 100644 --- a/tests/robotests/src/com/android/settings/accounts/TopLevelAccountEntryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/TopLevelAccountEntryPreferenceControllerTest.java @@ -16,19 +16,12 @@ package com.android.settings.accounts; -import static com.android.settings.accounts.TopLevelAccountEntryPreferenceControllerTest - .ShadowAuthenticationHelper.LABELS; -import static com.android.settings.accounts.TopLevelAccountEntryPreferenceControllerTest - .ShadowAuthenticationHelper.TYPES; - import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import android.os.UserHandle; -import android.text.TextUtils; import com.android.settings.R; -import com.android.settingslib.accounts.AuthenticatorHelper; +import com.android.settings.testutils.shadow.ShadowAuthenticationHelper; import org.junit.After; import org.junit.Before; @@ -37,21 +30,22 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.Resetter; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {TopLevelAccountEntryPreferenceControllerTest.ShadowAuthenticationHelper.class}) +@Config(shadows = {ShadowAuthenticationHelper.class}) public class TopLevelAccountEntryPreferenceControllerTest { private TopLevelAccountEntryPreferenceController mController; private Context mContext; + private String[] LABELS; + private String[] TYPES; @Before public void setUp() { mContext = RuntimeEnvironment.application; mController = new TopLevelAccountEntryPreferenceController(mContext, "test_key"); + LABELS = ShadowAuthenticationHelper.getLabels(); + TYPES = ShadowAuthenticationHelper.getTypes(); } @After @@ -60,7 +54,6 @@ public class TopLevelAccountEntryPreferenceControllerTest { } @Test - public void updateSummary_hasAccount_shouldDisplayUpTo3AccountTypes() { assertThat(mController.getSummary()) .isEqualTo(LABELS[0] + ", " + LABELS[1] + ", and " + LABELS[2]); @@ -83,44 +76,4 @@ public class TopLevelAccountEntryPreferenceControllerTest { // should only show the 2 accounts with labels assertThat(mController.getSummary()).isEqualTo(LABELS[0] + " and " + LABELS[1]); } - - @Implements(AuthenticatorHelper.class) - public static class ShadowAuthenticationHelper { - - static final String[] TYPES = {"type1", "type2", "type3", "type4"}; - static final String[] LABELS = {"LABEL1", "LABEL2", "LABEL3", "LABEL4"}; - private static String[] sEnabledAccount = TYPES; - - protected void __constructor__(Context context, UserHandle userHandle, - AuthenticatorHelper.OnAccountsUpdateListener listener) { - } - - private static void setEnabledAccount(String[] enabledAccount) { - sEnabledAccount = enabledAccount; - } - - @Resetter - public static void reset() { - sEnabledAccount = TYPES; - } - - @Implementation - protected String[] getEnabledAccountTypes() { - return sEnabledAccount; - } - - @Implementation - protected CharSequence getLabelForType(Context context, final String accountType) { - if (TextUtils.equals(accountType, TYPES[0])) { - return LABELS[0]; - } else if (TextUtils.equals(accountType, TYPES[1])) { - return LABELS[1]; - } else if (TextUtils.equals(accountType, TYPES[2])) { - return LABELS[2]; - } else if (TextUtils.equals(accountType, TYPES[3])) { - return LABELS[3]; - } - return null; - } - } } diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAuthenticationHelper.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAuthenticationHelper.java new file mode 100644 index 00000000000..cb7da5658b3 --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAuthenticationHelper.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2019 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.testutils.shadow; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.UserHandle; +import android.text.TextUtils; + +import com.android.settingslib.accounts.AuthenticatorHelper; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.annotation.Resetter; + +@Implements(AuthenticatorHelper.class) +public class ShadowAuthenticationHelper { + static final String[] TYPES = {"type1", "type2", "type3", "type4"}; + static final String[] LABELS = {"LABEL1", "LABEL2", "LABEL3", "LABEL4"}; + private static String[] sEnabledAccount = TYPES; + + protected void __constructor__(Context context, UserHandle userHandle, + AuthenticatorHelper.OnAccountsUpdateListener listener) { + } + + public static void setEnabledAccount(String[] enabledAccount) { + sEnabledAccount = enabledAccount; + } + + @Resetter + public static void reset() { + sEnabledAccount = TYPES; + } + + @Implementation + protected String[] getEnabledAccountTypes() { + return sEnabledAccount; + } + + @Implementation + protected CharSequence getLabelForType(Context context, final String accountType) { + if (TextUtils.equals(accountType, TYPES[0])) { + return LABELS[0]; + } else if (TextUtils.equals(accountType, TYPES[1])) { + return LABELS[1]; + } else if (TextUtils.equals(accountType, TYPES[2])) { + return LABELS[2]; + } else if (TextUtils.equals(accountType, TYPES[3])) { + return LABELS[3]; + } + return null; + } + + @Implementation + protected Drawable getDrawableForType(Context context, final String accountType) { + return context.getPackageManager().getDefaultActivityIcon(); + } + + public static String[] getTypes() { + return TYPES; + } + + public static String[] getLabels() { + return LABELS; + } +}