Snap for 6374687 from 04750a8212ef5f3a96686fcc6b963e641dd61444 to rvc-release
Change-Id: I5bf26b0d12b38c51671fa87b6bbce823ddfd0b7f
diff --git a/res/layout/wallpaper_preview_card.xml b/res/layout/wallpaper_preview_card.xml
index 4432880..f9e36da 100644
--- a/res/layout/wallpaper_preview_card.xml
+++ b/res/layout/wallpaper_preview_card.xml
@@ -28,4 +28,9 @@
android:id="@+id/workspace_surface"
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
+ <SurfaceView
+ android:id="@+id/wallpaper_surface"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index 5187d27..13ebef0 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -15,6 +15,9 @@
*/
package com.android.wallpaper.picker;
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
+
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
@@ -36,6 +39,7 @@
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
+import android.view.SurfaceControlViewHost;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
@@ -52,6 +56,7 @@
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.cardview.widget.CardView;
+import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
@@ -133,6 +138,7 @@
private boolean mTestingMode;
private ImageView mHomePreview;
private SurfaceView mWorkspaceSurface;
+ private SurfaceView mWallpaperSurface;
private ImageView mLockscreenPreview;
private PreviewPager mPreviewPager;
private List<View> mWallPaperPreviews;
@@ -142,6 +148,10 @@
private BottomSheetBehavior mBottomSheetBehavior;
private PreviewUtils mPreviewUtils;
+ // Home workspace surface is behind the app window, and so must the home image wallpaper like
+ // the live wallpaper. This view is rendered on mWallpaperSurface for home image wallpaper.
+ private ImageView mHomeImageWallpaper;
+
public CategoryFragment() {
mCategorySelectorFragment = new CategorySelectorFragment();
}
@@ -159,6 +169,7 @@
R.layout.wallpaper_preview_card, null);
mHomePreview = homePreviewCard.findViewById(R.id.wallpaper_preview_image);
mWorkspaceSurface = homePreviewCard.findViewById(R.id.workspace_surface);
+ mWallpaperSurface = homePreviewCard.findViewById(R.id.wallpaper_surface);
mWallPaperPreviews.add(homePreviewCard);
if (LockWallpaperStatusChecker.isLockWallpaperSet(getContext())) {
@@ -166,6 +177,7 @@
R.layout.wallpaper_preview_card, null);
mLockscreenPreview = lockscreenPreviewCard.findViewById(R.id.wallpaper_preview_image);
lockscreenPreviewCard.findViewById(R.id.workspace_surface).setVisibility(View.GONE);
+ lockscreenPreviewCard.findViewById(R.id.wallpaper_surface).setVisibility(View.GONE);
mWallPaperPreviews.add(lockscreenPreviewCard);
}
@@ -221,6 +233,12 @@
}
@Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ updateWallpaperSurface();
+ updateWorkspaceSurface();
+ }
+
+ @Override
public CharSequence getDefaultTitle() {
return getContext().getString(R.string.app_name);
}
@@ -244,7 +262,6 @@
if (mWallpaperConnection != null) {
mWallpaperConnection.setVisibility(true);
}
- updateWorkspaceSurface();
}
@Override
@@ -647,8 +664,12 @@
}
UserEventLogger eventLogger = InjectorProvider.getInjector().getUserEventLogger(activity);
+
+ boolean renderInImageWallpaperSurface =
+ !(wallpaperInfo instanceof LiveWallpaperInfo) && isHomeWallpaper;
wallpaperInfo.getThumbAsset(activity.getApplicationContext())
- .loadDrawable(activity, thumbnailView,
+ .loadDrawable(activity,
+ renderInImageWallpaperSurface ? mHomeImageWallpaper : thumbnailView,
getResources().getColor(R.color.secondary_color));
if (isHomeWallpaper) {
LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
@@ -669,25 +690,60 @@
});
}
- private void updateWorkspaceSurface() {
- mWorkspaceSurface.setZOrderOnTop(true);
- mWorkspaceSurface.getHolder().addCallback(new SurfaceHolder.Callback() {
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- Bundle bundle = SurfaceViewRequestUtils.createSurfaceBundle(mWorkspaceSurface);
- if (mPreviewUtils.supportsPreview()) {
- mPreviewUtils.renderPreview(bundle);
- }
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
-
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) { }
- });
+ private void updateWallpaperSurface() {
+ mWallpaperSurface.getHolder().addCallback(mWallpaperSurfaceCallback);
}
+ private void updateWorkspaceSurface() {
+ mWorkspaceSurface.setZOrderMediaOverlay(true);
+ mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
+ }
+
+ private final SurfaceHolder.Callback mWallpaperSurfaceCallback = new SurfaceHolder.Callback() {
+
+ @Override
+ public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
+ if (mHomeImageWallpaper == null) {
+ mHomeImageWallpaper = new ImageView(getContext());
+ mHomeImageWallpaper.setBackgroundColor(
+ ContextCompat.getColor(getContext(), R.color.primary_color));
+ mHomeImageWallpaper.measure(makeMeasureSpec(mHomePreview.getWidth(), EXACTLY),
+ makeMeasureSpec(mHomePreview.getHeight(), EXACTLY));
+ mHomeImageWallpaper.layout(0, 0, mHomePreview.getWidth(), mHomePreview.getHeight());
+
+ SurfaceControlViewHost host = new SurfaceControlViewHost(getContext(),
+ getContext().getDisplay(), mWallpaperSurface.getHostToken());
+ host.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
+ mHomeImageWallpaper.getHeight());
+ mWallpaperSurface.setChildSurfacePackage(host.getSurfacePackage());
+ }
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+ }
+
+ @Override
+ public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
+ }
+ };
+
+ private final SurfaceHolder.Callback mWorkspaceSurfaceCallback = new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ Bundle bundle = SurfaceViewRequestUtils.createSurfaceBundle(mWorkspaceSurface);
+ if (mPreviewUtils.supportsPreview()) {
+ mPreviewUtils.renderPreview(bundle);
+ }
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) { }
+ };
+
private interface MetadataHolder {
/**
* Binds {@link WallpaperInfo} objects representing the currently-set wallpapers to the