diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2019-11-20 00:22:33 -0800 |
---|---|---|
committer | Hyunyoung Song <hyunyoungs@google.com> | 2019-11-20 08:43:12 +0000 |
commit | 9734f7414149c6fc9f0a704576ad17e4c09ec2d8 (patch) | |
tree | f1225c36792ebf211f4f90937fa4092dfd0fd3db /tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java | |
parent | d6b718de5f6bd24410087482a7687bb1fd09536b (diff) | |
parent | 6fc434eb5a3a3f2de222dd155b584adf0611353e (diff) | |
download | android_packages_apps_WallpaperPicker2-9734f7414149c6fc9f0a704576ad17e4c09ec2d8.tar.gz android_packages_apps_WallpaperPicker2-9734f7414149c6fc9f0a704576ad17e4c09ec2d8.tar.bz2 android_packages_apps_WallpaperPicker2-9734f7414149c6fc9f0a704576ad17e4c09ec2d8.zip |
Merging from ub-launcher3-qt-future-dev @ build 6018744
Test: manual, presubmit on the source branch
http://x20/teams/android-launcher/merge/ub-launcher3-qt-future-dev_6018744.html
Change-Id: I619b51952d3d8577b9929d81ca3ce2ca8cc2fac9
Merged-In: Ied2409b3978f5f0429bd05a9f2c855f46a5f0bfc
Diffstat (limited to 'tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java')
-rw-r--r-- | tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java b/tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java new file mode 100644 index 0000000..5fc9421 --- /dev/null +++ b/tests/src/com/android/wallpaper/testing/TestWallpaperPersister.java @@ -0,0 +1,223 @@ +/* + * 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.wallpaper.testing; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; + +import androidx.annotation.Nullable; + +import com.android.wallpaper.asset.Asset; +import com.android.wallpaper.asset.Asset.BitmapReceiver; +import com.android.wallpaper.model.WallpaperInfo; +import com.android.wallpaper.module.InjectorProvider; +import com.android.wallpaper.module.WallpaperChangedNotifier; +import com.android.wallpaper.module.WallpaperPersister; +import com.android.wallpaper.module.WallpaperPreferences; + +import java.util.List; + +/** + * Test double for {@link WallpaperPersister}. + */ +public class TestWallpaperPersister implements WallpaperPersister { + + private Context mAppContext; + private WallpaperPreferences mPrefs; + private WallpaperChangedNotifier mWallpaperChangedNotifier; + private Bitmap mCurrentHomeWallpaper; + private Bitmap mCurrentLockWallpaper; + private Bitmap mPendingHomeWallpaper; + private Bitmap mPendingLockWallpaper; + private List<String> mHomeAttributions; + private String mHomeActionUrl; + @Destination + private int mDestination; + private WallpaperPersister.SetWallpaperCallback mCallback; + private boolean mFailNextCall; + private Rect mCropRect; + private float mScale; + @WallpaperPosition + private int mWallpaperPosition; + + public TestWallpaperPersister(Context appContext) { + mAppContext = appContext; + mPrefs = InjectorProvider.getInjector().getPreferences(appContext); + mWallpaperChangedNotifier = WallpaperChangedNotifier.getInstance(); + + mCurrentHomeWallpaper = null; + mCurrentLockWallpaper = null; + mPendingHomeWallpaper = null; + mPendingLockWallpaper = null; + mFailNextCall = false; + mScale = -1.0f; + } + + @Override + public void setIndividualWallpaper(final WallpaperInfo wallpaperInfo, Asset asset, + @Nullable final Rect cropRect, final float scale, final @Destination int destination, + final WallpaperPersister.SetWallpaperCallback callback) { + asset.decodeBitmap(50, 50, bitmap -> { + if (destination == DEST_HOME_SCREEN || destination == DEST_BOTH) { + mPendingHomeWallpaper = bitmap; + mPrefs.setHomeWallpaperAttributions(wallpaperInfo.getAttributions(mAppContext)); + mPrefs.setWallpaperPresentationMode( + WallpaperPreferences.PRESENTATION_MODE_STATIC); + mPrefs.setHomeWallpaperRemoteId(wallpaperInfo.getWallpaperId()); + } + if (destination == DEST_LOCK_SCREEN || destination == DEST_BOTH) { + mPendingLockWallpaper = bitmap; + mPrefs.setLockWallpaperAttributions(wallpaperInfo.getAttributions(mAppContext)); + } + mDestination = destination; + mCallback = callback; + mCropRect = cropRect; + mScale = scale; + }); + } + + @Override + public void setIndividualWallpaperWithPosition(Activity activity, WallpaperInfo wallpaper, + @WallpaperPosition int wallpaperPosition, SetWallpaperCallback callback) { + wallpaper.getAsset(activity).decodeBitmap(50, 50, new BitmapReceiver() { + @Override + public void onBitmapDecoded(@Nullable Bitmap bitmap) { + mPendingHomeWallpaper = bitmap; + mPrefs.setHomeWallpaperAttributions(wallpaper.getAttributions(mAppContext)); + mPrefs.setHomeWallpaperBaseImageUrl(wallpaper.getBaseImageUrl()); + mPrefs.setHomeWallpaperActionUrl(wallpaper.getActionUrl(mAppContext)); + mPrefs.setHomeWallpaperCollectionId(wallpaper.getCollectionId(mAppContext)); + mPrefs.setHomeWallpaperRemoteId(wallpaper.getWallpaperId()); + mPrefs.setWallpaperPresentationMode(WallpaperPreferences.PRESENTATION_MODE_STATIC); + mPendingLockWallpaper = bitmap; + mPrefs.setLockWallpaperAttributions(wallpaper.getAttributions(mAppContext)); + + mDestination = WallpaperPersister.DEST_BOTH; + mCallback = callback; + mWallpaperPosition = wallpaperPosition; + } + }); + } + + @Override + public boolean setWallpaperInRotation(Bitmap wallpaperBitmap, List<String> attributions, + int actionLabelRes, int actionIconRes, String actionUrl, String collectionId) { + if (mFailNextCall) { + return false; + } + + mCurrentHomeWallpaper = wallpaperBitmap; + mCurrentLockWallpaper = wallpaperBitmap; + mHomeAttributions = attributions; + mHomeActionUrl = actionUrl; + return true; + } + + @Override + public int setWallpaperBitmapInNextRotation(Bitmap wallpaperBitmap) { + mCurrentHomeWallpaper = wallpaperBitmap; + mCurrentLockWallpaper = wallpaperBitmap; + return 1; + } + + @Override + public boolean finalizeWallpaperForNextRotation(List<String> attributions, String actionUrl, + int actionLabelRes, int actionIconRes, String collectionId, int wallpaperId) { + mHomeAttributions = attributions; + mHomeActionUrl = actionUrl; + return true; + } + + /** Returns mock system wallpaper bitmap. */ + public Bitmap getCurrentHomeWallpaper() { + return mCurrentHomeWallpaper; + } + + /** Returns mock lock screen wallpaper bitmap. */ + public Bitmap getCurrentLockWallpaper() { + return mCurrentLockWallpaper; + } + + /** Returns mock home attributions. */ + public List<String> getHomeAttributions() { + return mHomeAttributions; + } + + /** Returns the home wallpaper action URL. */ + public String getHomeActionUrl() { + return mHomeActionUrl; + } + + /** Returns the Destination a wallpaper was most recently set on. */ + @Destination + public int getLastDestination() { + return mDestination; + } + + /** + * Sets whether the next "set wallpaper" operation should fail or succeed. + */ + public void setFailNextCall(Boolean failNextCall) { + mFailNextCall = failNextCall; + } + + /** + * Implemented so synchronous test methods can control the completion of what would otherwise be + * an asynchronous operation. + */ + public void finishSettingWallpaper() { + if (mFailNextCall) { + mCallback.onError(null /* throwable */); + } else { + if (mDestination == DEST_HOME_SCREEN || mDestination == DEST_BOTH) { + mCurrentHomeWallpaper = mPendingHomeWallpaper; + mPendingHomeWallpaper = null; + } + if (mDestination == DEST_LOCK_SCREEN || mDestination == DEST_BOTH) { + mCurrentLockWallpaper = mPendingLockWallpaper; + mPendingLockWallpaper = null; + } + mCallback.onSuccess(); + mWallpaperChangedNotifier.notifyWallpaperChanged(); + } + } + + @Override + public void setWallpaperInfoInPreview(WallpaperInfo wallpaperInfo) { + } + + @Override + public void onLiveWallpaperSet() { + } + + /** Returns the last requested wallpaper bitmap scale. */ + public float getScale() { + return mScale; + } + + /** Returns the last requested wallpaper crop. */ + public Rect getCropRect() { + return mCropRect; + } + + /** Returns the last selected wallpaper position option. */ + @WallpaperPosition + public int getWallpaperPosition() { + return mWallpaperPosition; + } +} |