Loading src/com/android/customization/picker/CustomizationPickerActivity.java +5 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.MenuItem; import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; Loading Loading @@ -86,9 +87,10 @@ public class CustomizationPickerActivity extends FragmentActivity implements Wal CategoryFragmentHost, ThemeFragmentHost, GridFragmentHost, ClockFragmentHost { private static final String TAG = "CustomizationPickerActivity"; private static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR"; private static final String WALLPAPER_FOCUS = "focus_wallpaper"; private static final String WALLPAPER_ONLY = "wallpaper_only"; @VisibleForTesting static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR"; @VisibleForTesting static final String WALLPAPER_FOCUS = "focus_wallpaper"; @VisibleForTesting static final String WALLPAPER_ONLY = "wallpaper_only"; private WallpaperPickerDelegate mDelegate; private UserEventLogger mUserEventLogger; Loading tests/src/com/android/customization/picker/CustomizationPickerActivityTest.java 0 → 100644 +160 −0 Original line number Diff line number Diff line package com.android.customization.picker; import static android.content.Intent.ACTION_SET_WALLPAPER; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.intent.matcher.IntentMatchers.filterEquals; import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isSelected; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FLAVOR_EXTRA; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FOCUS; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_ONLY; import static org.junit.Assert.assertTrue; import android.content.Intent; import android.text.TextUtils; import androidx.fragment.app.Fragment; import androidx.test.espresso.intent.Intents; import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner; import androidx.test.rule.ActivityTestRule; import com.android.customization.picker.theme.ThemeFragment; import com.android.customization.testing.TestCustomizationInjector; import com.android.customization.testing.TestThemeManager; import com.android.wallpaper.R; import com.android.wallpaper.module.InjectorProvider; import com.android.wallpaper.picker.CategoryFragment; import com.android.wallpaper.picker.TopLevelPickerActivity; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests for {@link CustomizationPickerActivity}. */ @RunWith(AndroidJUnit4ClassRunner.class) public class CustomizationPickerActivityTest { @Rule public ActivityTestRule<CustomizationPickerActivity> mActivityRule = new ActivityTestRule<>(CustomizationPickerActivity.class, false, false); @Before public void setUp() { Intents.init(); } @After public void tearDown() { mActivityRule.finishActivity(); Intents.release(); } @Test public void launchActivity_doesNotSupportCustomization_launchesTopLevelPickerActivity() { TestThemeManager.setAvailable(false); launchActivity(); Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(), TopLevelPickerActivity.class))); } // ---------------------------------------------------------------------- // Tests for customization supports. // ---------------------------------------------------------------------- @Test public void launchActivity_themeManagerIsAvailable_NavBarShowsStyleAndWallpaperItem() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).check(matches(isCompletelyDisplayed())); onView(withId(R.id.nav_wallpaper)).check(matches(isCompletelyDisplayed())); onView(withId(R.id.nav_clock)).check(doesNotExist()); onView(withId(R.id.nav_grid)).check(doesNotExist()); } @Test public void launchActivity_navigateToTheStyleTabByDefault() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof ThemeFragment); } @Test public void launchActivity_withExtraWallpaperOnly_launchesTopLevelPickerActivity() { TestThemeManager.setAvailable(true); launchActivityWithFlavorExtra(WALLPAPER_ONLY); // While receiving WALLPAPER_ONLY extra, it should launch TopLevelPickerActivity whatever it // supports customization. Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(), TopLevelPickerActivity.class))); } @Test public void clickStyleButton_showsThemeFragment() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).perform(click()); onView(withId(R.id.nav_theme)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof ThemeFragment); } @Test public void clickWallpaperButton_showsCategoryFragment() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_wallpaper)).perform(click()); onView(withId(R.id.nav_wallpaper)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof CategoryFragment); } @Test public void launchActivity_withExtraWallpaperFocus_navigateToTheWallpaperTab() { TestThemeManager.setAvailable(true); launchActivityWithFlavorExtra(WALLPAPER_FOCUS); onView(withId(R.id.nav_wallpaper)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof CategoryFragment); } private void launchActivity() { launchActivityWithFlavorExtra(""); } private void launchActivityWithFlavorExtra(String extra) { InjectorProvider.setInjector(new TestCustomizationInjector()); Intent intent = new Intent(ACTION_SET_WALLPAPER); if (!TextUtils.isEmpty(extra)) { intent.putExtra(WALLPAPER_FLAVOR_EXTRA, extra); } mActivityRule.launchActivity(intent); } private Fragment getCurrentShowingFragment() { return mActivityRule.getActivity().getSupportFragmentManager() .findFragmentById(R.id.fragment_container); } } tests/src/com/android/customization/testing/TestCustomizationInjector.java 0 → 100644 +74 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.content.Context; import androidx.fragment.app.FragmentActivity; import com.android.customization.model.theme.OverlayManagerCompat; import com.android.customization.model.theme.ThemeBundleProvider; import com.android.customization.model.theme.ThemeManager; import com.android.customization.module.CustomizationInjector; import com.android.customization.module.CustomizationPreferences; import com.android.customization.module.ThemesUserEventLogger; import com.android.wallpaper.module.DrawableLayerResolver; import com.android.wallpaper.module.PackageStatusNotifier; import com.android.wallpaper.module.UserEventLogger; import com.android.wallpaper.module.WallpaperSetter; import com.android.wallpaper.testing.TestInjector; /** * Test implementation of the dependency injector. */ public class TestCustomizationInjector extends TestInjector implements CustomizationInjector { private CustomizationPreferences mCustomizationPreferences; private ThemeManager mThemeManager; private PackageStatusNotifier mPackageStatusNotifier; private DrawableLayerResolver mDrawableLayerResolver; private UserEventLogger mUserEventLogger; @Override public CustomizationPreferences getCustomizationPreferences(Context context) { if (mCustomizationPreferences == null) { mCustomizationPreferences = new TestDefaultCustomizationPreferences(context); } return mCustomizationPreferences; } @Override public ThemeManager getThemeManager( ThemeBundleProvider provider, FragmentActivity activity, WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger) { if (mThemeManager == null) { mThemeManager = new TestThemeManager(provider, activity, wallpaperSetter, overlayManagerCompat, logger); } return mThemeManager; } @Override public PackageStatusNotifier getPackageStatusNotifier(Context context) { if (mPackageStatusNotifier == null) { mPackageStatusNotifier = new TestPackageStatusNotifier(); } return mPackageStatusNotifier; } @Override public DrawableLayerResolver getDrawableLayerResolver() { if (mDrawableLayerResolver == null) { mDrawableLayerResolver = new TestDrawableLayerResolver(); } return mDrawableLayerResolver; } @Override public UserEventLogger getUserEventLogger(Context unused) { if (mUserEventLogger == null) { mUserEventLogger = new TestThemesUserEventLogger(); } return mUserEventLogger; } } tests/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java 0 → 100644 +41 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.content.Context; import com.android.customization.module.DefaultCustomizationPreferences; import java.util.HashSet; import java.util.Set; /** * Test implementation of {@link DefaultCustomizationPreferences}. */ public class TestDefaultCustomizationPreferences extends DefaultCustomizationPreferences { private String mCustomThemes; private final Set<String> mTabVisited = new HashSet<>(); public TestDefaultCustomizationPreferences(Context context) { super(context); } @Override public String getSerializedCustomThemes() { return mCustomThemes; } @Override public void storeCustomThemes(String serializedCustomThemes) { mCustomThemes = serializedCustomThemes; } @Override public boolean getTabVisited(String id) { return mTabVisited.contains(id); } @Override public void setTabVisited(String id) { mTabVisited.add(id); } } tests/src/com/android/customization/testing/TestDrawableLayerResolver.java 0 → 100644 +16 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import com.android.wallpaper.module.DrawableLayerResolver; /** * Test implementation of {@link DrawableLayerResolver}. */ public class TestDrawableLayerResolver implements DrawableLayerResolver { @Override public Drawable resolveLayer(LayerDrawable layerDrawable) { return layerDrawable.getDrawable(0); } } Loading
src/com/android/customization/picker/CustomizationPickerActivity.java +5 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.MenuItem; import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; Loading Loading @@ -86,9 +87,10 @@ public class CustomizationPickerActivity extends FragmentActivity implements Wal CategoryFragmentHost, ThemeFragmentHost, GridFragmentHost, ClockFragmentHost { private static final String TAG = "CustomizationPickerActivity"; private static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR"; private static final String WALLPAPER_FOCUS = "focus_wallpaper"; private static final String WALLPAPER_ONLY = "wallpaper_only"; @VisibleForTesting static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR"; @VisibleForTesting static final String WALLPAPER_FOCUS = "focus_wallpaper"; @VisibleForTesting static final String WALLPAPER_ONLY = "wallpaper_only"; private WallpaperPickerDelegate mDelegate; private UserEventLogger mUserEventLogger; Loading
tests/src/com/android/customization/picker/CustomizationPickerActivityTest.java 0 → 100644 +160 −0 Original line number Diff line number Diff line package com.android.customization.picker; import static android.content.Intent.ACTION_SET_WALLPAPER; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.intent.matcher.IntentMatchers.filterEquals; import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isSelected; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FLAVOR_EXTRA; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FOCUS; import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_ONLY; import static org.junit.Assert.assertTrue; import android.content.Intent; import android.text.TextUtils; import androidx.fragment.app.Fragment; import androidx.test.espresso.intent.Intents; import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner; import androidx.test.rule.ActivityTestRule; import com.android.customization.picker.theme.ThemeFragment; import com.android.customization.testing.TestCustomizationInjector; import com.android.customization.testing.TestThemeManager; import com.android.wallpaper.R; import com.android.wallpaper.module.InjectorProvider; import com.android.wallpaper.picker.CategoryFragment; import com.android.wallpaper.picker.TopLevelPickerActivity; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests for {@link CustomizationPickerActivity}. */ @RunWith(AndroidJUnit4ClassRunner.class) public class CustomizationPickerActivityTest { @Rule public ActivityTestRule<CustomizationPickerActivity> mActivityRule = new ActivityTestRule<>(CustomizationPickerActivity.class, false, false); @Before public void setUp() { Intents.init(); } @After public void tearDown() { mActivityRule.finishActivity(); Intents.release(); } @Test public void launchActivity_doesNotSupportCustomization_launchesTopLevelPickerActivity() { TestThemeManager.setAvailable(false); launchActivity(); Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(), TopLevelPickerActivity.class))); } // ---------------------------------------------------------------------- // Tests for customization supports. // ---------------------------------------------------------------------- @Test public void launchActivity_themeManagerIsAvailable_NavBarShowsStyleAndWallpaperItem() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).check(matches(isCompletelyDisplayed())); onView(withId(R.id.nav_wallpaper)).check(matches(isCompletelyDisplayed())); onView(withId(R.id.nav_clock)).check(doesNotExist()); onView(withId(R.id.nav_grid)).check(doesNotExist()); } @Test public void launchActivity_navigateToTheStyleTabByDefault() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof ThemeFragment); } @Test public void launchActivity_withExtraWallpaperOnly_launchesTopLevelPickerActivity() { TestThemeManager.setAvailable(true); launchActivityWithFlavorExtra(WALLPAPER_ONLY); // While receiving WALLPAPER_ONLY extra, it should launch TopLevelPickerActivity whatever it // supports customization. Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(), TopLevelPickerActivity.class))); } @Test public void clickStyleButton_showsThemeFragment() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_theme)).perform(click()); onView(withId(R.id.nav_theme)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof ThemeFragment); } @Test public void clickWallpaperButton_showsCategoryFragment() { TestThemeManager.setAvailable(true); launchActivity(); onView(withId(R.id.nav_wallpaper)).perform(click()); onView(withId(R.id.nav_wallpaper)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof CategoryFragment); } @Test public void launchActivity_withExtraWallpaperFocus_navigateToTheWallpaperTab() { TestThemeManager.setAvailable(true); launchActivityWithFlavorExtra(WALLPAPER_FOCUS); onView(withId(R.id.nav_wallpaper)).check(matches(isSelected())); assertTrue(getCurrentShowingFragment() instanceof CategoryFragment); } private void launchActivity() { launchActivityWithFlavorExtra(""); } private void launchActivityWithFlavorExtra(String extra) { InjectorProvider.setInjector(new TestCustomizationInjector()); Intent intent = new Intent(ACTION_SET_WALLPAPER); if (!TextUtils.isEmpty(extra)) { intent.putExtra(WALLPAPER_FLAVOR_EXTRA, extra); } mActivityRule.launchActivity(intent); } private Fragment getCurrentShowingFragment() { return mActivityRule.getActivity().getSupportFragmentManager() .findFragmentById(R.id.fragment_container); } }
tests/src/com/android/customization/testing/TestCustomizationInjector.java 0 → 100644 +74 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.content.Context; import androidx.fragment.app.FragmentActivity; import com.android.customization.model.theme.OverlayManagerCompat; import com.android.customization.model.theme.ThemeBundleProvider; import com.android.customization.model.theme.ThemeManager; import com.android.customization.module.CustomizationInjector; import com.android.customization.module.CustomizationPreferences; import com.android.customization.module.ThemesUserEventLogger; import com.android.wallpaper.module.DrawableLayerResolver; import com.android.wallpaper.module.PackageStatusNotifier; import com.android.wallpaper.module.UserEventLogger; import com.android.wallpaper.module.WallpaperSetter; import com.android.wallpaper.testing.TestInjector; /** * Test implementation of the dependency injector. */ public class TestCustomizationInjector extends TestInjector implements CustomizationInjector { private CustomizationPreferences mCustomizationPreferences; private ThemeManager mThemeManager; private PackageStatusNotifier mPackageStatusNotifier; private DrawableLayerResolver mDrawableLayerResolver; private UserEventLogger mUserEventLogger; @Override public CustomizationPreferences getCustomizationPreferences(Context context) { if (mCustomizationPreferences == null) { mCustomizationPreferences = new TestDefaultCustomizationPreferences(context); } return mCustomizationPreferences; } @Override public ThemeManager getThemeManager( ThemeBundleProvider provider, FragmentActivity activity, WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger) { if (mThemeManager == null) { mThemeManager = new TestThemeManager(provider, activity, wallpaperSetter, overlayManagerCompat, logger); } return mThemeManager; } @Override public PackageStatusNotifier getPackageStatusNotifier(Context context) { if (mPackageStatusNotifier == null) { mPackageStatusNotifier = new TestPackageStatusNotifier(); } return mPackageStatusNotifier; } @Override public DrawableLayerResolver getDrawableLayerResolver() { if (mDrawableLayerResolver == null) { mDrawableLayerResolver = new TestDrawableLayerResolver(); } return mDrawableLayerResolver; } @Override public UserEventLogger getUserEventLogger(Context unused) { if (mUserEventLogger == null) { mUserEventLogger = new TestThemesUserEventLogger(); } return mUserEventLogger; } }
tests/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java 0 → 100644 +41 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.content.Context; import com.android.customization.module.DefaultCustomizationPreferences; import java.util.HashSet; import java.util.Set; /** * Test implementation of {@link DefaultCustomizationPreferences}. */ public class TestDefaultCustomizationPreferences extends DefaultCustomizationPreferences { private String mCustomThemes; private final Set<String> mTabVisited = new HashSet<>(); public TestDefaultCustomizationPreferences(Context context) { super(context); } @Override public String getSerializedCustomThemes() { return mCustomThemes; } @Override public void storeCustomThemes(String serializedCustomThemes) { mCustomThemes = serializedCustomThemes; } @Override public boolean getTabVisited(String id) { return mTabVisited.contains(id); } @Override public void setTabVisited(String id) { mTabVisited.add(id); } }
tests/src/com/android/customization/testing/TestDrawableLayerResolver.java 0 → 100644 +16 −0 Original line number Diff line number Diff line package com.android.customization.testing; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import com.android.wallpaper.module.DrawableLayerResolver; /** * Test implementation of {@link DrawableLayerResolver}. */ public class TestDrawableLayerResolver implements DrawableLayerResolver { @Override public Drawable resolveLayer(LayerDrawable layerDrawable) { return layerDrawable.getDrawable(0); } }