diff options
| author | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-29 23:09:30 +0000 |
|---|---|---|
| committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-29 23:09:30 +0000 |
| commit | 82ef763ef2e7bf7e61e047b95b08f11e81ae8ad4 (patch) | |
| tree | 4e34bd608d0f381deda9188476d7f72b4fb4bcaa | |
| parent | 8311d39f1aabd9099d044e9e374b2ee50620d554 (diff) | |
| parent | bb9649b3fa436ad2a940dcb781deb1f1a09635ba (diff) | |
| download | platform_packages_apps_WallpaperPicker2-android10-security-release.tar.gz platform_packages_apps_WallpaperPicker2-android10-security-release.tar.bz2 platform_packages_apps_WallpaperPicker2-android10-security-release.zip | |
Snap for 5698743 from bb9649b3fa436ad2a940dcb781deb1f1a09635ba to qt-releaseandroid-vts-10.0_r9android-vts-10.0_r8android-vts-10.0_r7android-vts-10.0_r6android-vts-10.0_r5android-vts-10.0_r4android-vts-10.0_r3android-vts-10.0_r2android-vts-10.0_r1android-security-10.0.0_r59android-security-10.0.0_r58android-security-10.0.0_r57android-security-10.0.0_r56android-security-10.0.0_r55android-security-10.0.0_r54android-security-10.0.0_r53android-security-10.0.0_r52android-security-10.0.0_r51android-security-10.0.0_r50android-security-10.0.0_r49android-security-10.0.0_r48android-cts-10.0_r9android-cts-10.0_r8android-cts-10.0_r7android-cts-10.0_r6android-cts-10.0_r5android-cts-10.0_r4android-cts-10.0_r3android-cts-10.0_r2android-cts-10.0_r1android-10.0.0_r6android-10.0.0_r5android-10.0.0_r47android-10.0.0_r46android-10.0.0_r4android-10.0.0_r3android-10.0.0_r2android-10.0.0_r17android-10.0.0_r11android-10.0.0_r10android-10.0.0_r1android10-tests-releaseandroid10-security-releaseandroid10-s3-releaseandroid10-s2-releaseandroid10-s1-releaseandroid10-release
Change-Id: Id4f39b9d0c1d1be7e01d527ba615e69889ae0f89
23 files changed, 267 insertions, 81 deletions
diff --git a/res/layout/grid_item_category.xml b/res/layout/grid_item_category.xml index 8d3df82..dbff1a1 100755 --- a/res/layout/grid_item_category.xml +++ b/res/layout/grid_item_category.xml @@ -53,6 +53,7 @@ android:paddingVertical="@dimen/grid_item_category_label_padding" android:textColor="@color/category_title_text_color" android:textSize="@dimen/abc_text_size_subhead_material" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title" tools:text="Wallpaper category" /> diff --git a/res/layout/grid_item_select_wallpaper_header.xml b/res/layout/grid_item_select_wallpaper_header.xml index 5167abc..faa3dbf 100755 --- a/res/layout/grid_item_select_wallpaper_header.xml +++ b/res/layout/grid_item_select_wallpaper_header.xml @@ -20,8 +20,9 @@ android:layout_marginLeft="@dimen/select_wallpaper_header_margin_left" android:layout_marginStart="@dimen/select_wallpaper_header_margin_left" android:contentDescription="@string/select_wallpaper_label" - android:gravity="center_vertical" + android:gravity="start|center_vertical" android:text="@string/select_wallpaper_label" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title" android:textColor="@color/select_wallpaper_header_text_color" android:textSize="@dimen/abc_text_size_subhead_material"/> diff --git a/res/layout/grid_item_single_metadata.xml b/res/layout/grid_item_single_metadata.xml index 8c4e67e..f5dea76 100755 --- a/res/layout/grid_item_single_metadata.xml +++ b/res/layout/grid_item_single_metadata.xml @@ -85,6 +85,7 @@ android:textSize="@dimen/abc_text_size_subhead_material" android:textAppearance="@style/HeaderTextAppearance" android:textStyle="bold" + android:textAlignment="viewStart" android:ellipsize="end" android:text="@string/wallpaper_destination_both"/> <TextView @@ -94,6 +95,7 @@ android:layout_alignParentStart="true" android:layout_below="@+id/wallpaper_presentation_mode" android:textColor="@color/currently_set_presentation_mode_text_color" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" android:textStyle="italic" /> <ImageButton @@ -124,6 +126,7 @@ android:layout_marginTop="@dimen/single_metadata_pane_wallpaper_title_margin_top" android:ellipsize="end" android:maxLines="2" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.TextView" /> <TextView @@ -135,6 +138,7 @@ android:layout_marginTop="@dimen/single_metadata_pane_wallpaper_subtitle_margin_top" android:ellipsize="end" android:maxLines="1" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small" android:textColor="@color/currently_set_subtitle_text_color" android:textSize="@dimen/single_metadata_pane_wallpaper_subtitle_text_size" /> @@ -149,6 +153,7 @@ android:layout_marginBottom="@dimen/single_metadata_pane_wallpaper_subtitle_margin_bottom" android:ellipsize="end" android:maxLines="1" + android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small" android:textColor="@color/currently_set_subtitle_text_color" android:textSize="@dimen/single_metadata_pane_wallpaper_subtitle_text_size" /> diff --git a/src/com/android/wallpaper/asset/ContentUriAsset.java b/src/com/android/wallpaper/asset/ContentUriAsset.java index ed0a368..a240420 100755 --- a/src/com/android/wallpaper/asset/ContentUriAsset.java +++ b/src/com/android/wallpaper/asset/ContentUriAsset.java @@ -30,6 +30,7 @@ import androidx.annotation.Nullable; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestListener; @@ -59,12 +60,43 @@ public final class ContentUriAsset extends StreamableAsset { * @param context The application's context. * @param uri Content URI locating the asset. * @param requestOptions {@link RequestOptions} to be applied when loading the asset. + * @param uncached If true, {@link #loadDrawable(Context, ImageView, int)} and + * {@link #loadDrawableWithTransition(Context, ImageView, int, DrawableLoadedListener, int)} + * will not cache data, and fetch it each time. */ - public ContentUriAsset(Context context, Uri uri, RequestOptions requestOptions) { + public ContentUriAsset(Context context, Uri uri, RequestOptions requestOptions, + boolean uncached) { mExifOrientation = ExifInterfaceCompat.EXIF_ORIENTATION_UNKNOWN; mContext = context.getApplicationContext(); mUri = uri; - mRequestOptions = requestOptions; + + if (uncached) { + mRequestOptions = requestOptions.apply(RequestOptions + .diskCacheStrategyOf(DiskCacheStrategy.NONE) + .skipMemoryCache(true)); + } else { + mRequestOptions = requestOptions; + } + } + + /** + * @param context The application's context. + * @param uri Content URI locating the asset. + * @param requestOptions {@link RequestOptions} to be applied when loading the asset. + */ + public ContentUriAsset(Context context, Uri uri, RequestOptions requestOptions) { + this(context, uri, requestOptions, /* uncached */ false); + } + + /** + * @param context The application's context. + * @param uri Content URI locating the asset. + * @param uncached If true, {@link #loadDrawable(Context, ImageView, int)} and + * {@link #loadDrawableWithTransition(Context, ImageView, int, DrawableLoadedListener, int)} + * will not cache data, and fetch it each time. + */ + public ContentUriAsset(Context context, Uri uri, boolean uncached) { + this(context, uri, RequestOptions.centerCropTransform(), uncached); } /** @@ -72,9 +104,11 @@ public final class ContentUriAsset extends StreamableAsset { * @param uri Content URI locating the asset. */ public ContentUriAsset(Context context, Uri uri) { - this(context, uri, RequestOptions.centerCropTransform()); + this(context, uri, /* uncached */ false); } + + @Override public void decodeBitmapRegion(final Rect rect, int targetWidth, int targetHeight, final BitmapReceiver receiver) { @@ -244,6 +278,10 @@ public final class ContentUriAsset extends StreamableAsset { .into(imageView); } + public Uri getUri() { + return mUri; + } + /** * Custom AsyncTask which crops a bitmap region from a larger bitmap. */ diff --git a/src/com/android/wallpaper/asset/StreamableAsset.java b/src/com/android/wallpaper/asset/StreamableAsset.java index d5b27b5..118581d 100755 --- a/src/com/android/wallpaper/asset/StreamableAsset.java +++ b/src/com/android/wallpaper/asset/StreamableAsset.java @@ -17,6 +17,7 @@ package com.android.wallpaper.asset; import android.app.Activity; import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Matrix; @@ -26,11 +27,11 @@ import android.media.ExifInterface; import android.os.AsyncTask; import android.util.Log; +import androidx.annotation.Nullable; + import java.io.IOException; import java.io.InputStream; -import androidx.annotation.Nullable; - /** * Represents Asset types for which bytes can be read directly, allowing for flexible bitmap * decoding. @@ -274,6 +275,7 @@ public abstract class StreamableAsset extends Asset { } options.inSampleSize = BitmapUtils.calculateInSampleSize( rawDimensions.x, rawDimensions.y, mTargetWidth, mTargetHeight); + options.inPreferredConfig = Config.HARDWARE; Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); closeInputStream( diff --git a/src/com/android/wallpaper/asset/WallpaperGlideModule.java b/src/com/android/wallpaper/asset/WallpaperGlideModule.java index 3572e00..6a5e560 100755 --- a/src/com/android/wallpaper/asset/WallpaperGlideModule.java +++ b/src/com/android/wallpaper/asset/WallpaperGlideModule.java @@ -8,12 +8,15 @@ import com.android.wallpaper.asset.LiveWallpaperThumbAssetLoader.LiveWallpaperTh import com.android.wallpaper.asset.NexusStaticAssetLoader.NexusStaticAssetLoaderFactory; import com.android.wallpaper.asset.ResourceAssetLoader.ResourceAssetLoaderFactory; import com.android.wallpaper.asset.WallpaperModelLoader.WallpaperModelLoaderFactory; + import com.bumptech.glide.Glide; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.Registry; +import com.bumptech.glide.load.DecodeFormat; import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; import com.bumptech.glide.load.engine.cache.MemorySizeCalculator; import com.bumptech.glide.module.GlideModule; +import com.bumptech.glide.request.RequestOptions; import java.io.InputStream; @@ -40,6 +43,8 @@ public class WallpaperGlideModule implements GlideModule { .setMemoryCacheScreens(1.2f) .build(); builder.setMemorySizeCalculator(calculator); + builder.setDefaultRequestOptions( + new RequestOptions().format(DecodeFormat.PREFER_ARGB_8888)); } @Override diff --git a/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java b/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java index eafbec9..e44e717 100755 --- a/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java +++ b/src/com/android/wallpaper/model/CurrentWallpaperInfoVN.java @@ -21,6 +21,9 @@ import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.util.Log; +import androidx.annotation.DrawableRes; +import androidx.annotation.StringRes; + import com.android.wallpaper.asset.Asset; import com.android.wallpaper.asset.BuiltInWallpaperAsset; import com.android.wallpaper.asset.CurrentWallpaperAssetVN; @@ -35,9 +38,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import androidx.annotation.DrawableRes; -import androidx.annotation.StringRes; - /** * Represents the currently set wallpaper on N+ devices. Should not be used to set a new wallpaper. */ @@ -134,6 +134,10 @@ public class CurrentWallpaperInfoVN extends WallpaperInfo { return mActionLabelRes != 0 ? mActionLabelRes : WallpaperInfo.getDefaultActionLabel(); } + public int getWallpaperManagerFlag() { + return mWallpaperManagerFlag; + } + /** * Constructs and returns an Asset instance representing the currently-set wallpaper asset. */ diff --git a/src/com/android/wallpaper/model/ImageWallpaperInfo.java b/src/com/android/wallpaper/model/ImageWallpaperInfo.java index fcc1276..e4e96ae 100755 --- a/src/com/android/wallpaper/model/ImageWallpaperInfo.java +++ b/src/com/android/wallpaper/model/ImageWallpaperInfo.java @@ -22,6 +22,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.Log; +import androidx.exifinterface.media.ExifInterface; + import com.android.wallpaper.R; import com.android.wallpaper.asset.Asset; import com.android.wallpaper.asset.ContentUriAsset; @@ -33,8 +35,6 @@ import java.util.Arrays; import java.util.Date; import java.util.List; -import androidx.exifinterface.media.ExifInterface; - /** * Represents a wallpaper image from the system's image picker. */ @@ -61,12 +61,18 @@ public class ImageWallpaperInfo extends WallpaperInfo { }; private Uri mUri; private ContentUriAsset mAsset; + private boolean mIsAssetUncached; public ImageWallpaperInfo(Uri uri) { mUri = uri; } - private ImageWallpaperInfo(Parcel in) { + public ImageWallpaperInfo(Uri uri, boolean uncachedAsset) { + mUri = uri; + mIsAssetUncached = uncachedAsset; + } + + protected ImageWallpaperInfo(Parcel in) { mUri = Uri.parse(in.readString()); } @@ -136,9 +142,17 @@ public class ImageWallpaperInfo extends WallpaperInfo { @Override public Asset getAsset(Context context) { - if (mAsset == null) { - mAsset = new ContentUriAsset(context, mUri); + if (mIsAssetUncached) { + mAsset = new ContentUriAsset( + context, + mUri, + /* uncached */ true); + } else { + if (mAsset == null) { + mAsset = new ContentUriAsset(context, mUri); + } } + return mAsset; } diff --git a/src/com/android/wallpaper/model/WallpaperMetadata.java b/src/com/android/wallpaper/model/WallpaperMetadata.java index 22c1044..cd24796 100755 --- a/src/com/android/wallpaper/model/WallpaperMetadata.java +++ b/src/com/android/wallpaper/model/WallpaperMetadata.java @@ -17,11 +17,12 @@ package com.android.wallpaper.model; import android.app.WallpaperInfo; -import java.util.List; - import androidx.annotation.DrawableRes; +import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import java.util.List; + /** * Lightweight wrapper for user-facing wallpaper metadata. */ @@ -30,6 +31,7 @@ public class WallpaperMetadata { private final List<String> mAttributions; private final String mActionUrl; private final String mCollectionId; + private final String mBackingFileName; private final android.app.WallpaperInfo mWallpaperComponent; @StringRes private final int mActionLabelRes; @DrawableRes private final int mActionIconRes; @@ -37,12 +39,14 @@ public class WallpaperMetadata { public WallpaperMetadata(List<String> attributions, String actionUrl, @StringRes int actionLabelRes, @DrawableRes int actionIconRes, String collectionId, + String backingFileName, android.app.WallpaperInfo wallpaperComponent) { mAttributions = attributions; mActionUrl = actionUrl; mActionLabelRes = actionLabelRes; mActionIconRes = actionIconRes; mCollectionId = collectionId; + mBackingFileName = backingFileName; mWallpaperComponent = wallpaperComponent; } @@ -84,6 +88,15 @@ public class WallpaperMetadata { } /** + * Returns the name of a private file corresponding to a copy of the full image used as + * wallpaper if this is a static wallpaper. + */ + @Nullable + public String getBackingFileName() { + return mBackingFileName; + } + + /** * Returns the {@link android.app.WallpaperInfo} if a live wallpaper, or null if the metadata * describes an image wallpaper. */ diff --git a/src/com/android/wallpaper/module/BaseWallpaperInjector.java b/src/com/android/wallpaper/module/BaseWallpaperInjector.java index 0904227..15ed84b 100755 --- a/src/com/android/wallpaper/module/BaseWallpaperInjector.java +++ b/src/com/android/wallpaper/module/BaseWallpaperInjector.java @@ -42,7 +42,7 @@ public abstract class BaseWallpaperInjector implements Injector { private RotatingWallpaperComponentChecker mRotatingWallpaperComponentChecker; private FormFactorChecker mFormFactorChecker; private PackageStatusNotifier mPackageStatusNotifier; - private IndividualPickerFragment mIndividualPickerFragment; + private LiveWallpaperInfoFactory mLiveWallpaperInfoFactory; @Override public synchronized BitmapCropper getBitmapCropper() { @@ -177,8 +177,14 @@ public abstract class BaseWallpaperInjector implements Injector { @Override public synchronized IndividualPickerFragment getIndividualPickerFragment(String collectionId) { - mIndividualPickerFragment = IndividualPickerFragment.newInstance(collectionId); + return IndividualPickerFragment.newInstance(collectionId); + } - return mIndividualPickerFragment; + @Override + public LiveWallpaperInfoFactory getLiveWallpaperInfoFactory(Context context) { + if (mLiveWallpaperInfoFactory == null) { + mLiveWallpaperInfoFactory = new DefaultLiveWallpaperInfoFactory(); + } + return mLiveWallpaperInfoFactory; } } diff --git a/src/com/android/wallpaper/module/DefaultCategoryProvider.java b/src/com/android/wallpaper/module/DefaultCategoryProvider.java index 721ccf1..ee7b0cb 100755 --- a/src/com/android/wallpaper/module/DefaultCategoryProvider.java +++ b/src/com/android/wallpaper/module/DefaultCategoryProvider.java @@ -75,7 +75,7 @@ public class DefaultCategoryProvider implements CategoryProvider { mFetchedCategories = false; } - doFetch(receiver); + doFetch(receiver, forceRefresh); } @Override @@ -103,7 +103,7 @@ public class DefaultCategoryProvider implements CategoryProvider { return null; } - protected void doFetch(final CategoryReceiver receiver) { + protected void doFetch(final CategoryReceiver receiver, boolean forceRefresh) { CategoryReceiver delegatingReceiver = new CategoryReceiver() { @Override public void onCategoryReceived(Category category) { diff --git a/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java b/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java index f4fb4ea..c74f9b2 100755 --- a/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java +++ b/src/com/android/wallpaper/module/DefaultCurrentWallpaperInfoFactory.java @@ -23,9 +23,7 @@ import com.android.wallpaper.model.CurrentWallpaperInfoV16; import com.android.wallpaper.model.CurrentWallpaperInfoVN; import com.android.wallpaper.model.LiveWallpaperInfo; import com.android.wallpaper.model.WallpaperInfo; -import com.android.wallpaper.model.WallpaperMetadata; import com.android.wallpaper.module.WallpaperPreferences.PresentationMode; -import com.android.wallpaper.module.WallpaperRefresher.RefreshListener; import androidx.annotation.Nullable; @@ -35,9 +33,10 @@ import androidx.annotation.Nullable; */ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoFactory { - private Context mAppContext; - private WallpaperRefresher mWallpaperRefresher; - private LiveWallpaperStatusChecker mLiveWallpaperStatusChecker; + private final Context mAppContext; + private final WallpaperRefresher mWallpaperRefresher; + private final LiveWallpaperStatusChecker mLiveWallpaperStatusChecker; + private final LiveWallpaperInfoFactory mLiveWallpaperInfoFactory; // Cached copies of the currently-set WallpaperInfo(s) and presentation mode. private WallpaperInfo mHomeWallpaper; @@ -48,9 +47,11 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF public DefaultCurrentWallpaperInfoFactory(Context context) { mAppContext = context.getApplicationContext(); - mWallpaperRefresher = InjectorProvider.getInjector().getWallpaperRefresher(mAppContext); + Injector injector = InjectorProvider.getInjector(); + mWallpaperRefresher = injector.getWallpaperRefresher(mAppContext); mLiveWallpaperStatusChecker = - InjectorProvider.getInjector().getLiveWallpaperStatusChecker(mAppContext); + injector.getLiveWallpaperStatusChecker(mAppContext); + mLiveWallpaperInfoFactory = injector.getLiveWallpaperInfoFactory(mAppContext); } @Override @@ -69,54 +70,52 @@ public class DefaultCurrentWallpaperInfoFactory implements CurrentWallpaperInfoF mLockWallpaper = null; } - mWallpaperRefresher.refresh(new RefreshListener() { - @Override - public void onRefreshed(WallpaperMetadata homeWallpaperMetadata, - @Nullable WallpaperMetadata lockWallpaperMetadata, - @PresentationMode int presentationMode) { - - WallpaperInfo homeWallpaper; - - if (homeWallpaperMetadata.getWallpaperComponent() == null - || mLiveWallpaperStatusChecker.isNoBackupImageWallpaperSet()) { // Image wallpaper - if (BuildCompat.isAtLeastN()) { - homeWallpaper = new CurrentWallpaperInfoVN( - homeWallpaperMetadata.getAttributions(), - homeWallpaperMetadata.getActionUrl(), - homeWallpaperMetadata.getActionLabelRes(), - homeWallpaperMetadata.getActionIconRes(), - homeWallpaperMetadata.getCollectionId(), - WallpaperManagerCompat.FLAG_SYSTEM); - } else { - homeWallpaper = new CurrentWallpaperInfoV16( - homeWallpaperMetadata.getAttributions(), - homeWallpaperMetadata.getActionUrl(), - homeWallpaperMetadata.getActionLabelRes(), - homeWallpaperMetadata.getActionIconRes(), - homeWallpaperMetadata.getCollectionId()); + mWallpaperRefresher.refresh( + (homeWallpaperMetadata, lockWallpaperMetadata, presentationMode) -> { + + WallpaperInfo homeWallpaper; + + if (homeWallpaperMetadata.getWallpaperComponent() == null + || mLiveWallpaperStatusChecker.isNoBackupImageWallpaperSet()) { + // Image wallpaper + if (BuildCompat.isAtLeastN()) { + homeWallpaper = new CurrentWallpaperInfoVN( + homeWallpaperMetadata.getAttributions(), + homeWallpaperMetadata.getActionUrl(), + homeWallpaperMetadata.getActionLabelRes(), + homeWallpaperMetadata.getActionIconRes(), + homeWallpaperMetadata.getCollectionId(), + WallpaperManagerCompat.FLAG_SYSTEM); + } else { + homeWallpaper = new CurrentWallpaperInfoV16( + homeWallpaperMetadata.getAttributions(), + homeWallpaperMetadata.getActionUrl(), + homeWallpaperMetadata.getActionLabelRes(), + homeWallpaperMetadata.getActionIconRes(), + homeWallpaperMetadata.getCollectionId()); + } + } else { // Live wallpaper + homeWallpaper = mLiveWallpaperInfoFactory.getLiveWallpaperInfo( + homeWallpaperMetadata.getWallpaperComponent()); } - } else { // Live wallpaper - homeWallpaper = new LiveWallpaperInfo(homeWallpaperMetadata.getWallpaperComponent()); - } - - WallpaperInfo lockWallpaper = null; - - if (lockWallpaperMetadata != null) { - lockWallpaper = new CurrentWallpaperInfoVN( - lockWallpaperMetadata.getAttributions(), - lockWallpaperMetadata.getActionUrl(), - lockWallpaperMetadata.getActionLabelRes(), - lockWallpaperMetadata.getActionIconRes(), - lockWallpaperMetadata.getCollectionId(), - WallpaperManagerCompat.FLAG_LOCK); - } - - mHomeWallpaper = homeWallpaper; - mLockWallpaper = lockWallpaper; - mPresentationMode = presentationMode; - - callback.onWallpaperInfoCreated(homeWallpaper, lockWallpaper, presentationMode); - } - }); + + WallpaperInfo lockWallpaper = null; + + if (lockWallpaperMetadata != null) { + lockWallpaper = new CurrentWallpaperInfoVN( + lockWallpaperMetadata.getAttributions(), + lockWallpaperMetadata.getActionUrl(), + lockWallpaperMetadata.getActionLabelRes(), + lockWallpaperMetadata.getActionIconRes(), + lockWallpaperMetadata.getCollectionId(), + WallpaperManagerCompat.FLAG_LOCK); + } + + mHomeWallpaper = homeWallpaper; + mLockWallpaper = lockWallpaper; + mPresentationMode = presentationMode; + + callback.onWallpaperInfoCreated(homeWallpaper, lockWallpaper, presentationMode); + }); } } diff --git a/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java b/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java new file mode 100644 index 0000000..4a06ce5 --- /dev/null +++ b/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java @@ -0,0 +1,16 @@ +package com.android.wallpaper.module; + +import com.android.wallpaper.model.LiveWallpaperInfo; +import com.android.wallpaper.model.WallpaperInfo; + +/** + * Default implementation of {@link LiveWallpaperInfoFactory} that just creates + * {@link LiveWallpaperInfo}. + */ +public class DefaultLiveWallpaperInfoFactory implements LiveWallpaperInfoFactory { + + @Override + public WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info) { + return new LiveWallpaperInfo(info); + } +} diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java index bd017ac..319276b 100755 --- a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java +++ b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java @@ -19,6 +19,7 @@ import android.app.backup.BackupManager; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.text.TextUtils; import android.util.Log; import androidx.annotation.Nullable; @@ -26,6 +27,7 @@ import androidx.annotation.Nullable; import org.json.JSONArray; import org.json.JSONException; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -175,6 +177,19 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { } @Override + @Nullable + public String getHomeWallpaperBackingFileName() { + return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_BACKING_FILE, + null); + } + + @Override + public void setHomeWallpaperBackingFileName(String fileName) { + mSharedPrefs.edit().putString( + WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_BACKING_FILE, fileName).apply(); + } + + @Override public long getHomeWallpaperHashCode() { return mSharedPrefs.getLong(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_HASH_CODE, 0); } @@ -187,6 +202,10 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { @Override public void clearHomeWallpaperMetadata() { + String homeWallpaperBackingFileName = getHomeWallpaperBackingFileName(); + if (!TextUtils.isEmpty(homeWallpaperBackingFileName)) { + new File(homeWallpaperBackingFileName).delete(); + } mSharedPrefs.edit() .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_1) .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_ATTRIB_2) @@ -199,6 +218,7 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_MANAGER_ID) .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_PACKAGE_NAME) .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_REMOTE_ID) + .remove(WallpaperPreferenceKeys.KEY_HOME_WALLPAPER_BACKING_FILE) .apply(); } @@ -309,6 +329,19 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { } @Override + @Nullable + public String getLockWallpaperBackingFileName() { + return mSharedPrefs.getString(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, + null); + } + + @Override + public void setLockWallpaperBackingFileName(String fileName) { + mSharedPrefs.edit().putString( + WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_BACKING_FILE, fileName).apply(); + } + + @Override public int getLockWallpaperId() { return mSharedPrefs.getInt(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_MANAGER_ID, 0); } @@ -333,6 +366,10 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { @Override public void clearLockWallpaperMetadata() { + String lockWallpaperBackingFileName = getLockWallpaperBackingFileName(); + if (!TextUtils.isEmpty(lockWallpaperBackingFileName)) { + new File(lockWallpaperBackingFileName).delete(); + } mSharedPrefs.edit() .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_1) .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ATTRIB_2) @@ -342,6 +379,7 @@ public class DefaultWallpaperPreferences implements WallpaperPreferences { .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES) .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE) .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_MANAGER_ID) + .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_BACKING_FILE) .apply(); } diff --git a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java index b5dc7bf..c97d2b9 100755 --- a/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java +++ b/src/com/android/wallpaper/module/DefaultWallpaperRefresher.java @@ -116,6 +116,7 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher { mWallpaperPreferences.getHomeWallpaperActionLabelRes(), mWallpaperPreferences.getHomeWallpaperActionIconRes(), mWallpaperPreferences.getHomeWallpaperCollectionId(), + mWallpaperPreferences.getHomeWallpaperBackingFileName(), mWallpaperManager.getWallpaperInfo())); return wallpaperMetadatas; } @@ -131,6 +132,7 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher { mWallpaperPreferences.getHomeWallpaperActionLabelRes(), mWallpaperPreferences.getHomeWallpaperActionIconRes(), mWallpaperPreferences.getHomeWallpaperCollectionId(), + mWallpaperPreferences.getHomeWallpaperBackingFileName(), mWallpaperManager.getWallpaperInfo())); wallpaperMetadatas.add(new WallpaperMetadata( @@ -139,6 +141,7 @@ public class DefaultWallpaperRefresher implements WallpaperRefresher { mWallpaperPreferences.getLockWallpaperActionLabelRes(), mWallpaperPreferences.getLockWallpaperActionIconRes(), mWallpaperPreferences.getLockWallpaperCollectionId(), + mWallpaperPreferences.getLockWallpaperBackingFileName(), null /* wallpaperComponent */)); return wallpaperMetadatas; diff --git a/src/com/android/wallpaper/module/Injector.java b/src/com/android/wallpaper/module/Injector.java index 746917e..6402496 100755 --- a/src/com/android/wallpaper/module/Injector.java +++ b/src/com/android/wallpaper/module/Injector.java @@ -81,4 +81,6 @@ public interface Injector { PackageStatusNotifier getPackageStatusNotifier(Context context); IndividualPickerFragment getIndividualPickerFragment(String collectionId); + + LiveWallpaperInfoFactory getLiveWallpaperInfoFactory(Context context); } diff --git a/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java b/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java new file mode 100644 index 0000000..0c9bfee --- /dev/null +++ b/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java @@ -0,0 +1,12 @@ +package com.android.wallpaper.module; + +import com.android.wallpaper.model.LiveWallpaperInfo; +import com.android.wallpaper.model.WallpaperInfo; + +/** + * Interface for factories which construct {@link WallpaperInfo} objects for LiveWallpapers. + */ +public interface LiveWallpaperInfoFactory { + + public WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info); +} diff --git a/src/com/android/wallpaper/module/NoOpUserEventLogger.java b/src/com/android/wallpaper/module/NoOpUserEventLogger.java index 1d780fe..b64beaf 100755 --- a/src/com/android/wallpaper/module/NoOpUserEventLogger.java +++ b/src/com/android/wallpaper/module/NoOpUserEventLogger.java @@ -23,7 +23,7 @@ import com.android.wallpaper.module.WallpaperPersister.WallpaperPosition; public class NoOpUserEventLogger implements UserEventLogger { @Override - public void logResumed() { + public void logResumed(boolean provisioned, boolean wallpaper) { } diff --git a/src/com/android/wallpaper/module/UserEventLogger.java b/src/com/android/wallpaper/module/UserEventLogger.java index 5952396..72e127c 100755 --- a/src/com/android/wallpaper/module/UserEventLogger.java +++ b/src/com/android/wallpaper/module/UserEventLogger.java @@ -44,7 +44,7 @@ public interface UserEventLogger { int DAILY_WALLPAPER_METADATA_FAILURE_SERVER_ERROR = 3; int DAILY_WALLPAPER_METADATA_FAILURE_TIMEOUT = 4; - void logResumed(); + void logResumed(boolean provisioned, boolean wallpaper); void logStopped(); diff --git a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java index 9f7acbf..f63506f 100755 --- a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java +++ b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java @@ -33,6 +33,7 @@ public class WallpaperPreferenceKeys { public static final String KEY_HOME_WALLPAPER_MANAGER_ID = "home_wallpaper_id"; public static final String KEY_HOME_WALLPAPER_PACKAGE_NAME = "home_wallpaper_package_name"; public static final String KEY_HOME_WALLPAPER_REMOTE_ID = "home_wallpaper_remote_id"; + public static final String KEY_HOME_WALLPAPER_BACKING_FILE = "home_wallpaper_backing_file"; public static final String KEY_LOCK_WALLPAPER_ATTRIB_1 = "lock_wallpaper_attribution_line_1"; public static final String KEY_LOCK_WALLPAPER_ATTRIB_2 = "lock_wallpaper_attribution_line_2"; @@ -43,6 +44,7 @@ public class WallpaperPreferenceKeys { public static final String KEY_LOCK_WALLPAPER_HASH_CODE = "lock_wallpaper_hash_code"; public static final String KEY_LOCK_WALLPAPER_COLLECTION_ID = "lock_wallpaper_collection_id"; public static final String KEY_LOCK_WALLPAPER_MANAGER_ID = "lock_wallpaper_id"; + public static final String KEY_LOCK_WALLPAPER_BACKING_FILE = "lock_wallpaper_backing_file"; public static final String KEY_DAILY_ROTATION_TIMESTAMPS = "daily_rotation_timestamps"; public static final String KEY_DAILY_WALLPAPER_ENABLED_TIMESTAMP = diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.java b/src/com/android/wallpaper/module/WallpaperPreferences.java index aa964cd..f009f59 100755 --- a/src/com/android/wallpaper/module/WallpaperPreferences.java +++ b/src/com/android/wallpaper/module/WallpaperPreferences.java @@ -18,11 +18,11 @@ package com.android.wallpaper.module; import android.annotation.TargetApi; import android.os.Build; -import java.util.List; - import androidx.annotation.IntDef; import androidx.annotation.Nullable; +import java.util.List; + /** * Interface for persisting and retrieving wallpaper specific preferences. */ @@ -108,6 +108,16 @@ public interface WallpaperPreferences { void setHomeWallpaperCollectionId(String collectionId); /** + * Returns the home wallpaper's backing file name if there's one or null. + */ + String getHomeWallpaperBackingFileName(); + + /** + * Sets the home wallpaper's backing file name + */ + void setHomeWallpaperBackingFileName(String fileName); + + /** * Removes all home metadata from SharedPreferences. */ void clearHomeWallpaperMetadata(); @@ -197,6 +207,16 @@ public interface WallpaperPreferences { void setLockWallpaperCollectionId(String collectionId); /** + * Returns the home wallpaper's backing file name if there's one or null. + */ + String getLockWallpaperBackingFileName(); + + /** + * Sets the home wallpaper's backing file name + */ + void setLockWallpaperBackingFileName(String fileName); + + /** * Returns the lock screen attributions as a list. */ List<String> getLockWallpaperAttributions(); diff --git a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java index 42e9081..ac6a13b 100755 --- a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java +++ b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java @@ -28,6 +28,7 @@ import android.os.AsyncTask; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Bundle; +import android.provider.Settings; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; @@ -185,7 +186,10 @@ public class TopLevelPickerActivity extends BaseActivity implements WallpapersUi @Override protected void onResume() { super.onResume(); - mUserEventLogger.logResumed(); + boolean provisioned = Settings.Global.getInt(getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 0) != 0; + + mUserEventLogger.logResumed(provisioned, true); // Show the staged 'load wallpaper' or 'set wallpaper' error dialog fragments if there is one // that was unable to be shown earlier when this fragment's hosting activity didn't allow // committing fragment transactions. diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java b/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java index 6c05983..1f5dc99 100755 --- a/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java +++ b/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java @@ -108,6 +108,7 @@ public class IndividualPickerActivity extends BaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.getNavigationIcon().setTint(getColor(R.color.toolbar_icon_color)); + toolbar.getNavigationIcon().setAutoMirrored(true); getWindow().getDecorView().setSystemUiVisibility( getWindow().getDecorView().getSystemUiVisibility() |
