1 package android.app; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.junit.Assume.assumeTrue; 5 6 import android.content.Context; 7 import androidx.test.core.app.ActivityScenario; 8 import androidx.test.core.app.ApplicationProvider; 9 import androidx.test.ext.junit.runners.AndroidJUnit4; 10 import org.junit.Before; 11 import org.junit.Test; 12 import org.junit.runner.RunWith; 13 import org.robolectric.testapp.TestActivity; 14 15 /** Compatibility test for {@link WallpaperManager}. */ 16 @RunWith(AndroidJUnit4.class) 17 public class WallpaperManagerTest { 18 private WallpaperManager wallpaperManager; 19 private boolean isWallpaperSupported = false; 20 21 @Before setUp()22 public void setUp() { 23 // Test code can't access com.android.internal config value to check whether the current running 24 // Android 25 // supports WallpaperManagerService, and it uses returned WallpaperManager's flag to check it. 26 Object manager = 27 ApplicationProvider.getApplicationContext().getSystemService(Context.WALLPAPER_SERVICE); 28 if (manager != null) { 29 wallpaperManager = (WallpaperManager) manager; 30 } 31 32 isWallpaperSupported = wallpaperManager != null && wallpaperManager.isWallpaperSupported(); 33 } 34 35 @Test wallpaperManager_applicationInstance_matchesExpectedBehavior()36 public void wallpaperManager_applicationInstance_matchesExpectedBehavior() { 37 try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) { 38 scenario.onActivity( 39 activity -> { 40 WallpaperManager activityWallpaperManager = 41 (WallpaperManager) activity.getSystemService(Context.WALLPAPER_SERVICE); 42 // If WallpaperManagerService is not supported by the device, it returns a special 43 // WindowManager implementation called DisabledWallpaperManager, and it uses 44 // singleton for all Context instances. 45 if (isWallpaperSupported) { 46 assertThat(wallpaperManager).isNotSameInstanceAs(activityWallpaperManager); 47 } else { 48 assertThat(wallpaperManager).isSameInstanceAs(activityWallpaperManager); 49 } 50 }); 51 } 52 } 53 54 @Test wallpaperManager_activityInstance_isSameAsActivityInstance()55 public void wallpaperManager_activityInstance_isSameAsActivityInstance() { 56 assumeTrue(isWallpaperSupported); 57 try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) { 58 scenario.onActivity( 59 activity -> { 60 WallpaperManager activityWallpaperManager = 61 (WallpaperManager) activity.getSystemService(Context.WALLPAPER_SERVICE); 62 WallpaperManager anotherActivityWallpaperManager = 63 (WallpaperManager) activity.getSystemService(Context.WALLPAPER_SERVICE); 64 assertThat(anotherActivityWallpaperManager).isSameInstanceAs(activityWallpaperManager); 65 }); 66 } 67 } 68 69 @Test wallpaperManager_instance_retrievesSameWallpaper()70 public void wallpaperManager_instance_retrievesSameWallpaper() { 71 assumeTrue(isWallpaperSupported); 72 try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) { 73 scenario.onActivity( 74 activity -> { 75 WallpaperManager activityWallpaperManager = 76 (WallpaperManager) activity.getSystemService(Context.WALLPAPER_SERVICE); 77 78 WallpaperInfo applicationWallpaper = wallpaperManager.getWallpaperInfo(); 79 WallpaperInfo activityWallpaper = activityWallpaperManager.getWallpaperInfo(); 80 81 assertThat(activityWallpaper).isEqualTo(applicationWallpaper); 82 }); 83 } 84 } 85 } 86