summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ahan Wu <ahanwu@google.com> 2019-02-20 19:15:04 +0800
committer Ahan Wu <ahanwu@google.com> 2019-02-20 20:37:06 +0800
commitb4924521663f0c1f90100d43d6c8b7b66a3c85b4 (patch)
tree833b5d71a5c4e39155c093c8cc1d66d57b3b28b7
parentb30e8b8ae7990e0c40d2a0f389394bb1d5d55466 (diff)
Remove DrawableEngine and related logics
We will always render image wallpaper with GLEngine so the DrawableEnigne is no longer necessary. Remove DrawableEngine and related code including tests makes the code more clean. Bug: 123617158 Test: Manually set wallpaper by Photos and rotate home Test: runtest systemui Change-Id: I630112e755b74217e44518ec93273c99fb173f24
-rw-r--r--packages/SystemUI/res/layout/super_status_bar.xml8
-rw-r--r--packages/SystemUI/res/values/ids.xml5
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java527
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpaper/AodMaskView.java224
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperFilter.java81
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperTransformer.java173
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpaper/ScrimFilter.java67
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpaper/VignetteFilter.java124
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java113
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wallpaper/AodMaskViewTest.java128
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wallpaper/ImageWallpaperTransformerTest.java93
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java5
14 files changed, 4 insertions, 1589 deletions
diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml
index 02062bb7b2c4..34c208ab81aa 100644
--- a/packages/SystemUI/res/layout/super_status_bar.xml
+++ b/packages/SystemUI/res/layout/super_status_bar.xml
@@ -43,14 +43,6 @@
android:visibility="invisible" />
</com.android.systemui.statusbar.BackDropView>
- <com.android.systemui.wallpaper.AodMaskView
- android:id="@+id/aod_mask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:importantForAccessibility="no"
- android:visibility="invisible"
- sysui:ignoreRightInset="true" />
-
<com.android.systemui.statusbar.ScrimView
android:id="@+id/scrim_behind"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 6a6845742788..05cf040a3772 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -111,11 +111,6 @@
<!-- Optional cancel button on Keyguard -->
<item type="id" name="cancel_button"/>
- <!-- AodMaskView transition tag -->
- <item type="id" name="aod_mask_transition_progress_tag" />
- <item type="id" name="aod_mask_transition_progress_end_tag" />
- <item type="id" name="aod_mask_transition_progress_start_tag" />
-
<!-- For saving DynamicAnimation physics animations as view tags. -->
<item type="id" name="translation_x_dynamicanimation_tag"/>
<item type="id" name="translation_y_dynamicanimation_tag"/>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 7e645ab77a63..0113d0560764 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -16,62 +16,26 @@
package com.android.systemui;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.app.WallpaperManager;
-import android.content.ComponentCallbacks2;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.RecordingCanvas;
import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region.Op;
-import android.hardware.display.DisplayManager;
import android.opengl.GLSurfaceView;
-import android.os.AsyncTask;
import android.os.Build;
-import android.os.Handler;
-import android.os.Trace;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
-import android.view.Display;
-import android.view.DisplayInfo;
-import android.view.Surface;
import android.view.SurfaceHolder;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.glwallpaper.ImageWallpaperRenderer;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-
/**
* Default built-in wallpaper that simply shows a static image.
*/
@SuppressWarnings({"UnusedDeclaration"})
public class ImageWallpaper extends WallpaperService {
- private static final String TAG = "ImageWallpaper";
- private static final String GL_LOG_TAG = "ImageWallpaperGL";
- private static final boolean DEBUG = false;
- private static final String PROPERTY_KERNEL_QEMU = "ro.kernel.qemu";
- private static final long DELAY_FORGET_WALLPAPER = 5000;
-
- private WallpaperManager mWallpaperManager;
- private DrawableEngine mEngine;
+ private static final String TAG = ImageWallpaper.class.getSimpleName();
@Override
public void onCreate() {
super.onCreate();
- mWallpaperManager = getSystemService(WallpaperManager.class);
- }
-
- @Override
- public void onTrimMemory(int level) {
- if (mEngine != null) {
- mEngine.trimMemory(level);
- }
}
@Override
@@ -147,495 +111,6 @@ public class ImageWallpaper extends WallpaperService {
}
}
- // TODO: Remove this engine, tracking on b/123617158.
- class DrawableEngine extends Engine {
- private final Runnable mUnloadWallpaperCallback = () -> {
- unloadWallpaper(false /* forgetSize */);
- };
-
- // Surface is rejected if size below a threshold on some devices (ie. 8px on elfin)
- // set min to 64 px (CTS covers this)
- @VisibleForTesting
- static final int MIN_BACKGROUND_WIDTH = 64;
- @VisibleForTesting
- static final int MIN_BACKGROUND_HEIGHT = 64;
-
- Bitmap mBackground;
- int mBackgroundWidth = -1, mBackgroundHeight = -1;
- int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1;
- int mLastRotation = -1;
- float mXOffset = 0f;
- float mYOffset = 0f;
- float mScale = 1f;
-
- private Display mDisplay;
- private final DisplayInfo mTmpDisplayInfo = new DisplayInfo();
-
- boolean mVisible = true;
- boolean mOffsetsChanged;
- int mLastXTranslation;
- int mLastYTranslation;
-
- private int mRotationAtLastSurfaceSizeUpdate = -1;
- private int mDisplayWidthAtLastSurfaceSizeUpdate = -1;
- private int mDisplayHeightAtLastSurfaceSizeUpdate = -1;
-
- private int mLastRequestedWidth = -1;
- private int mLastRequestedHeight = -1;
- private AsyncTask<Void, Void, Bitmap> mLoader;
- private boolean mNeedsDrawAfterLoadingWallpaper;
- private boolean mSurfaceValid;
- private boolean mSurfaceRedrawNeeded;
-
- DrawableEngine() {
- super();
- setFixedSizeAllowed(true);
- }
-
- void trimMemory(int level) {
- if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW
- && level <= ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL
- && mBackground != null) {
- if (DEBUG) {
- Log.d(TAG, "trimMemory");
- }
- unloadWallpaper(true /* forgetSize */);
- }
- }
-
- @Override
- public void onCreate(SurfaceHolder surfaceHolder) {
- if (DEBUG) {
- Log.d(TAG, "onCreate");
- }
-
- super.onCreate(surfaceHolder);
-
- //noinspection ConstantConditions
- final Context displayContext = getDisplayContext();
- final int displayId = displayContext == null ? DEFAULT_DISPLAY :
- displayContext.getDisplayId();
- DisplayManager dm = getSystemService(DisplayManager.class);
- if (dm != null) {
- mDisplay = dm.getDisplay(displayId);
- if (mDisplay == null) {
- Log.e(TAG, "Cannot find display! Fallback to default.");
- mDisplay = dm.getDisplay(DEFAULT_DISPLAY);
- }
- }
- setOffsetNotificationsEnabled(false);
-
- updateSurfaceSize(surfaceHolder, getDisplayInfo(), false /* forDraw */);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- mBackground = null;
- unloadWallpaper(true /* forgetSize */);
- }
-
- boolean updateSurfaceSize(SurfaceHolder surfaceHolder, DisplayInfo displayInfo,
- boolean forDraw) {
- boolean hasWallpaper = true;
-
- // Load background image dimensions, if we haven't saved them yet
- if (mBackgroundWidth <= 0 || mBackgroundHeight <= 0) {
- // Need to load the image to get dimensions
- loadWallpaper(forDraw);
- if (DEBUG) {
- Log.d(TAG, "Reloading, redoing updateSurfaceSize later.");
- }
- hasWallpaper = false;
- }
-
- // Expected surface size.
- int surfaceWidth = Math.max(displayInfo.logicalWidth, mBackgroundWidth);
- int surfaceHeight = Math.max(displayInfo.logicalHeight, mBackgroundHeight);
-
- // Calculate the minimum drawing area of the surface, which saves memory and does not
- // distort the image.
- final float scale = Math.min(
- (float) mBackgroundHeight / (float) surfaceHeight,
- (float) mBackgroundWidth / (float) surfaceWidth);
- surfaceHeight = (int) (scale * surfaceHeight);
- surfaceWidth = (int) (scale * surfaceWidth);
-
- // Set surface size to at least MIN size.
- if (surfaceWidth < MIN_BACKGROUND_WIDTH || surfaceHeight < MIN_BACKGROUND_HEIGHT) {
- final float scaleUp = Math.max(
- (float) MIN_BACKGROUND_WIDTH / (float) surfaceWidth,
- (float) MIN_BACKGROUND_HEIGHT / (float) surfaceHeight);
- surfaceWidth = (int) ((float) surfaceWidth * scaleUp);
- surfaceHeight = (int) ((float) surfaceHeight * scaleUp);
- }
-
- // Used a fixed size surface, because we are special. We can do
- // this because we know the current design of window animations doesn't
- // cause this to break.
- surfaceHolder.setFixedSize(surfaceWidth, surfaceHeight);
- mLastRequestedWidth = surfaceWidth;
- mLastRequestedHeight = surfaceHeight;
-
- return hasWallpaper;
- }
-
- @Override
- public void onVisibilityChanged(boolean visible) {
- if (DEBUG) {
- Log.d(TAG, "onVisibilityChanged: mVisible, visible=" + mVisible + ", " + visible);
- }
-
- if (mVisible != visible) {
- if (DEBUG) {
- Log.d(TAG, "Visibility changed to visible=" + visible);
- }
- mVisible = visible;
- if (visible) {
- drawFrame();
- }
- }
- }
-
- @Override
- public void onOffsetsChanged(float xOffset, float yOffset,
- float xOffsetStep, float yOffsetStep,
- int xPixels, int yPixels) {
- if (DEBUG) {
- Log.d(TAG, "onOffsetsChanged: xOffset=" + xOffset + ", yOffset=" + yOffset
- + ", xOffsetStep=" + xOffsetStep + ", yOffsetStep=" + yOffsetStep
- + ", xPixels=" + xPixels + ", yPixels=" + yPixels);
- }
-
- if (mXOffset != xOffset || mYOffset != yOffset) {
- if (DEBUG) {
- Log.d(TAG, "Offsets changed to (" + xOffset + "," + yOffset + ").");
- }
- mXOffset = xOffset;
- mYOffset = yOffset;
- mOffsetsChanged = true;
- }
- drawFrame();
- }
-
- @Override
- public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- if (DEBUG) {
- Log.d(TAG, "onSurfaceChanged: width=" + width + ", height=" + height);
- }
-
- super.onSurfaceChanged(holder, format, width, height);
-
- drawFrame();
- }
-
- @Override
- public void onSurfaceDestroyed(SurfaceHolder holder) {
- super.onSurfaceDestroyed(holder);
- if (DEBUG) {
- Log.i(TAG, "onSurfaceDestroyed");
- }
-
- mLastSurfaceWidth = mLastSurfaceHeight = -1;
- mSurfaceValid = false;
- }
-
- @Override
- public void onSurfaceCreated(SurfaceHolder holder) {
- super.onSurfaceCreated(holder);
- if (DEBUG) {
- Log.i(TAG, "onSurfaceCreated");
- }
-
- mLastSurfaceWidth = mLastSurfaceHeight = -1;
- mSurfaceValid = true;
- }
-
- @Override
- public void onSurfaceRedrawNeeded(SurfaceHolder holder) {
- if (DEBUG) {
- Log.d(TAG, "onSurfaceRedrawNeeded");
- }
- super.onSurfaceRedrawNeeded(holder);
- // At the end of this method we should have drawn into the surface.
- // This means that the bitmap should be loaded synchronously if
- // it was already unloaded.
- if (mBackground == null) {
- updateBitmap(mWallpaperManager.getBitmap(true /* hardware */));
- }
- mSurfaceRedrawNeeded = true;
- drawFrame();
- }
-
- @VisibleForTesting
- DisplayInfo getDisplayInfo() {
- mDisplay.getDisplayInfo(mTmpDisplayInfo);
- return mTmpDisplayInfo;
- }
-
- void drawFrame() {
- if (!mSurfaceValid) {
- return;
- }
- try {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawWallpaper");
- DisplayInfo displayInfo = getDisplayInfo();
- int newRotation = displayInfo.rotation;
-
- // Sometimes a wallpaper is not large enough to cover the screen in one dimension.
- // Call updateSurfaceSize -- it will only actually do the update if the dimensions
- // should change
- if (newRotation != mLastRotation
- || mDisplayWidthAtLastSurfaceSizeUpdate != displayInfo.logicalWidth
- || mDisplayHeightAtLastSurfaceSizeUpdate != displayInfo.logicalHeight) {
- // Update surface size (if necessary)
- if (!updateSurfaceSize(getSurfaceHolder(), displayInfo, true /* forDraw */)) {
- return; // had to reload wallpaper, will retry later
- }
- mRotationAtLastSurfaceSizeUpdate = newRotation;
- mDisplayWidthAtLastSurfaceSizeUpdate = displayInfo.logicalWidth;
- mDisplayHeightAtLastSurfaceSizeUpdate = displayInfo.logicalHeight;
- }
- SurfaceHolder sh = getSurfaceHolder();
- final Rect frame = sh.getSurfaceFrame();
- final int dw = frame.width();
- final int dh = frame.height();
- boolean surfaceDimensionsChanged = dw != mLastSurfaceWidth
- || dh != mLastSurfaceHeight;
-
- boolean redrawNeeded = surfaceDimensionsChanged || newRotation != mLastRotation
- || mSurfaceRedrawNeeded || mNeedsDrawAfterLoadingWallpaper;
- if (!redrawNeeded && !mOffsetsChanged) {
- if (DEBUG) {
- Log.d(TAG, "Suppressed drawFrame since redraw is not needed "
- + "and offsets have not changed.");
- }
- return;
- }
- mLastRotation = newRotation;
- mSurfaceRedrawNeeded = false;
-
- // Load bitmap if it is not yet loaded
- if (mBackground == null) {
- loadWallpaper(true);
- if (DEBUG) {
- Log.d(TAG, "Reloading, resuming draw later");
- }
- return;
- }
-
- // Left align the scaled image
- mScale = Math.max(1f, Math.max(dw / (float) mBackground.getWidth(),
- dh / (float) mBackground.getHeight()));
- final int availw = (int) (mBackground.getWidth() * mScale) - dw;
- final int availh = (int) (mBackground.getHeight() * mScale) - dh;
- int xPixels = (int) (availw * mXOffset);
- int yPixels = (int) (availh * mYOffset);
-
- mOffsetsChanged = false;
- if (surfaceDimensionsChanged) {
- mLastSurfaceWidth = dw;
- mLastSurfaceHeight = dh;
- }
- if (!redrawNeeded && xPixels == mLastXTranslation && yPixels == mLastYTranslation) {
- if (DEBUG) {
- Log.d(TAG, "Suppressed drawFrame since the image has not "
- + "actually moved an integral number of pixels.");
- }
- return;
- }
- mLastXTranslation = xPixels;
- mLastYTranslation = yPixels;
-
- if (DEBUG) {
- Log.d(TAG, "Redrawing wallpaper");
- }
-
- drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
- scheduleUnloadWallpaper();
- } finally {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
- }
-
- /**
- * Loads the wallpaper on background thread and schedules updating the surface frame,
- * and if {@param needsDraw} is set also draws a frame.
- *
- * If loading is already in-flight, subsequent loads are ignored (but needDraw is or-ed to
- * the active request).
- *
- * If {@param needsReset} is set also clears the cache in WallpaperManager first.
- */
- private void loadWallpaper(boolean needsDraw) {
- mNeedsDrawAfterLoadingWallpaper |= needsDraw;
- if (mLoader != null) {
- if (DEBUG) {
- Log.d(TAG, "Skipping loadWallpaper, already in flight ");
- }
- return;
- }
- mLoader = new AsyncTask<Void, Void, Bitmap>() {
- @Override
- protected Bitmap doInBackground(Void... params) {
- Throwable exception;
- try {
- Bitmap wallpaper = mWallpaperManager.getBitmap(true /* hardware */);
- if (wallpaper != null
- && wallpaper.getByteCount() > RecordingCanvas.MAX_BITMAP_SIZE) {
- throw new RuntimeException("Wallpaper is too large to draw!");
- }
- return wallpaper;
- } catch (RuntimeException | OutOfMemoryError e) {
- exception = e;
- }
-
- if (isCancelled()) {
- return null;
- }
-
- // Note that if we do fail at this, and the default wallpaper can't
- // be loaded, we will go into a cycle. Don't do a build where the
- // default wallpaper can't be loaded.
- Log.w(TAG, "Unable to load wallpaper!", exception);
- try {
- mWallpaperManager.clear();
- } catch (IOException ex) {
- // now we're really screwed.
- Log.w(TAG, "Unable reset to default wallpaper!", ex);
- }
-
- if (isCancelled()) {
- return null;
- }
-
- try {
- return mWallpaperManager.getBitmap(true /* hardware */);
- } catch (RuntimeException | OutOfMemoryError e) {
- Log.w(TAG, "Unable to load default wallpaper!", e);
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(Bitmap b) {
- updateBitmap(b);
-
- if (mNeedsDrawAfterLoadingWallpaper) {
- drawFrame();
- }
-
- mLoader = null;
- mNeedsDrawAfterLoadingWallpaper = false;
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- @VisibleForTesting
- void updateBitmap(Bitmap bitmap) {
- mBackground = null;
- mBackgroundWidth = -1;
- mBackgroundHeight = -1;
-
- if (bitmap != null) {
- mBackground = bitmap;
- mBackgroundWidth = mBackground.getWidth();
- mBackgroundHeight = mBackground.getHeight();
- }
-
- if (DEBUG) {
- Log.d(TAG, "Wallpaper loaded: " + mBackground);
- }
- updateSurfaceSize(getSurfaceHolder(), getDisplayInfo(),
- false /* forDraw */);
- }
-
- private void unloadWallpaper(boolean forgetSize) {
- if (mLoader != null) {
- mLoader.cancel(false);
- mLoader = null;
- }
- mBackground = null;
- if (forgetSize) {
- mBackgroundWidth = -1;
- mBackgroundHeight = -1;
- }
-
- final Surface surface = getSurfaceHolder().getSurface();
- surface.hwuiDestroy();
-
- mWallpaperManager.forgetLoadedWallpaper();
- }
-
- private void scheduleUnloadWallpaper() {
- Handler handler = getMainThreadHandler();
- handler.removeCallbacks(mUnloadWallpaperCallback);
- handler.postDelayed(mUnloadWallpaperCallback, DELAY_FORGET_WALLPAPER);
- }
-
- @Override
- protected void dump(String prefix, FileDescriptor fd, PrintWriter out, String[] args) {
- super.dump(prefix, fd, out, args);
-
- out.print(prefix); out.println("ImageWallpaper.DrawableEngine:");
- out.print(prefix); out.print(" mBackground="); out.print(mBackground);
- out.print(" mBackgroundWidth="); out.print(mBackgroundWidth);
- out.print(" mBackgroundHeight="); out.println(mBackgroundHeight);
-
- out.print(prefix); out.print(" mLastRotation="); out.print(mLastRotation);
- out.print(" mLastSurfaceWidth="); out.print(mLastSurfaceWidth);
- out.print(" mLastSurfaceHeight="); out.println(mLastSurfaceHeight);
-
- out.print(prefix); out.print(" mXOffset="); out.print(mXOffset);
- out.print(" mYOffset="); out.println(mYOffset);
-
- out.print(prefix); out.print(" mVisible="); out.print(mVisible);
- out.print(" mOffsetsChanged="); out.println(mOffsetsChanged);
-
- out.print(prefix); out.print(" mLastXTranslation="); out.print(mLastXTranslation);
- out.print(" mLastYTranslation="); out.print(mLastYTranslation);
- out.print(" mScale="); out.println(mScale);
-
- out.print(prefix); out.print(" mLastRequestedWidth="); out.print(mLastRequestedWidth);
- out.print(" mLastRequestedHeight="); out.println(mLastRequestedHeight);
-
- out.print(prefix); out.println(" DisplayInfo at last updateSurfaceSize:");
- out.print(prefix);
- out.print(" rotation="); out.print(mRotationAtLastSurfaceSizeUpdate);
- out.print(" width="); out.print(mDisplayWidthAtLastSurfaceSizeUpdate);
- out.print(" height="); out.println(mDisplayHeightAtLastSurfaceSizeUpdate);
- }
-
- private void drawWallpaperWithCanvas(SurfaceHolder sh, int w, int h, int left, int top) {
- Canvas c = sh.lockHardwareCanvas();
- if (c != null) {
- try {
- if (DEBUG) {
- Log.d(TAG, "Redrawing: left=" + left + ", top=" + top);
- }
-
- final float right = left + mBackground.getWidth() * mScale;
- final float bottom = top + mBackground.getHeight() * mScale;
- if (w < 0 || h < 0) {
- c.save(Canvas.CLIP_SAVE_FLAG);
- c.clipRect(left, top, right, bottom,
- Op.DIFFERENCE);
- c.drawColor(0xff000000);
- c.restore();
- }
- if (mBackground != null) {
- RectF dest = new RectF(left, top, right, bottom);
- Log.i(TAG, "Redrawing in rect: " + dest + " with surface size: "
- + mLastRequestedWidth + "x" + mLastRequestedHeight);
- c.drawBitmap(mBackground, null, dest, null);
- }
- } finally {
- sh.unlockCanvasAndPost(c);
- }
- }
- }
- }
-
/**
* A listener to trace status of image wallpaper.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
index 0f85c187ab7e..bbeebd654b4e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
@@ -214,14 +214,6 @@ public enum ScrimState {
public void prepare(ScrimState previousState) {
}
- /**
- * Check if lockscreen wallpaper or music album art exists.
- * @return true if lockscreen wallpaper or music album art exists.
- */
- public boolean hasBackdrop() {
- return mHasBackdrop;
- }
-
public int getIndex() {
return mIndex;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 51ffc1dd98cc..13d448922ab1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -70,7 +70,6 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.database.ContentObserver;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
@@ -99,7 +98,6 @@ import android.service.dreams.IDreamManager;
import android.service.notification.StatusBarNotification;
import android.util.DisplayMetrics;
import android.util.EventLog;
-import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.Slog;
import android.view.Display;
@@ -474,9 +472,6 @@ public class StatusBar extends SystemUI implements DemoMode,
WallpaperInfo info = wallpaperManager.getWallpaperInfo(UserHandle.USER_CURRENT);
final boolean deviceSupportsAodWallpaper = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_dozeSupportsAodWallpaper);
- final boolean aodImageWallpaperEnabled = FeatureFlagUtils.isEnabled(mContext,
- FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED);
- updateAodMaskVisibility(deviceSupportsAodWallpaper && aodImageWallpaperEnabled);
// If WallpaperInfo is null, it must be ImageWallpaper.
final boolean supportsAmbientMode = deviceSupportsAodWallpaper
&& (info == null || info.supportsAmbientMode());
@@ -580,7 +575,6 @@ public class StatusBar extends SystemUI implements DemoMode,
protected NotificationPresenter mPresenter;
private NotificationActivityStarter mNotificationActivityStarter;
private boolean mPulsing;
- private ContentObserver mFeatureFlagObserver;
protected BubbleController mBubbleController;
private final BubbleController.BubbleExpandListener mBubbleExpandListener =
(isExpanding, key) -> {
@@ -705,9 +699,6 @@ public class StatusBar extends SystemUI implements DemoMode,
mContext.registerReceiverAsUser(mWallpaperChangedReceiver, UserHandle.ALL,
wallpaperChangedFilter, null /* broadcastPermission */, null /* scheduler */);
mWallpaperChangedReceiver.onReceive(mContext, null);
- mFeatureFlagObserver = new FeatureFlagObserver(
- FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED /* feature */,
- () -> mWallpaperChangedReceiver.onReceive(mContext, null) /* callback */);
// Set up the initial notification state. This needs to happen before CommandQueue.disable()
setUpPresenter();
@@ -4426,32 +4417,4 @@ public class StatusBar extends SystemUI implements DemoMode,
return mStatusBarMode;
}
- private void updateAodMaskVisibility(boolean supportsAodWallpaper) {
- View mask = mStatusBarWindow.findViewById(R.id.aod_mask);
- if (mask != null) {
- mask.setVisibility(supportsAodWallpaper ? View.VISIBLE : View.INVISIBLE);
- }
- }
-
- private final class FeatureFlagObserver extends ContentObserver {
- private final Runnable mCallback;
-
- FeatureFlagObserver(String feature, Runnable callback) {
- this(null, feature, callback);
- }
-
- private FeatureFlagObserver(Handler handler, String feature, Runnable callback) {
- super(handler);
- mCallback = callback;
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(feature), false, this);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- if (mCallback != null) {
- mStatusBarWindow.post(mCallback);
- }
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpaper/AodMaskView.java b/packages/SystemUI/src/com/android/systemui/wallpaper/AodMaskView.java
deleted file mode 100644
index f446cefb7b6f..000000000000
--- a/packages/SystemUI/src/com/android/systemui/wallpaper/AodMaskView.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.app.WallpaperManager;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.RectF;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.util.AttributeSet;
-import android.util.FeatureFlagUtils;
-import android.util.Log;
-import android.view.Display;
-import android.view.DisplayInfo;
-import android.widget.ImageView;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.Dependency;
-import com.android.systemui.R;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.AnimatableProperty;
-import com.android.systemui.statusbar.notification.PropertyAnimator;
-import com.android.systemui.statusbar.notification.stack.AnimationProperties;
-import com.android.systemui.statusbar.phone.ScrimState;
-
-/**
- * A view that draws mask upon either image wallpaper or music album art in AOD.
- */
-public class AodMaskView extends ImageView implements StatusBarStateController.StateListener,
- ImageWallpaperTransformer.TransformationListener {
- private static final String TAG = AodMaskView.class.getSimpleName();
- private static final int TRANSITION_DURATION = 1000;
-
- private static final AnimatableProperty TRANSITION_PROGRESS = AnimatableProperty.from(
- "transition_progress",
- AodMaskView::setTransitionAmount,
- AodMaskView::getTransitionAmount,
- R.id.aod_mask_transition_progress_tag,
- R.id.aod_mask_transition_progress_start_tag,
- R.id.aod_mask_transition_progress_end_tag
- );
-
- private final AnimationProperties mTransitionProperties = new AnimationProperties();
- private final ImageWallpaperTransformer mTransformer;
- private final RectF mBounds = new RectF();
- private boolean mChangingStates;
- private boolean mNeedMask;
- private float mTransitionAmount;
- private final WallpaperManager mWallpaperManager;
- private final DisplayManager mDisplayManager;
- private DisplayListener mDisplayListener = new DisplayListener() {
- @Override
- public void onDisplayAdded(int displayId) {
- }
-
- @Override
- public void onDisplayRemoved(int displayId) {
- }
-
- @Override
- public void onDisplayChanged(int displayId) {
- // We just support DEFAULT_DISPLAY currently.
- if (displayId == Display.DEFAULT_DISPLAY) {
- mTransformer.updateDisplayInfo(getDisplayInfo(displayId));
- }
- }
- };
-
- public AodMaskView(Context context) {
- this(context, null);
- }
-
- public AodMaskView(Context context, AttributeSet attrs) {
- this(context, attrs, null);
- }
-
- @VisibleForTesting
- public AodMaskView(Context context, AttributeSet attrs, ImageWallpaperTransformer transformer) {
- super(context, attrs);
- setClickable(false);
-
- StatusBarStateController controller = Dependency.get(StatusBarStateController.class);
- if (controller != null) {
- controller.addCallback(this);
- } else {
- Log.d(TAG, "Can not get StatusBarStateController!");
- }
-
- mDisplayManager = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
- mDisplayManager.registerDisplayListener(mDisplayListener, null);
- mWallpaperManager =
- (WallpaperManager) getContext().getSystemService(Context.WALLPAPER_SERVICE);
-
- if (transformer == null) {
- mTransformer = new ImageWallpaperTransformer(this);
- mTransformer.addFilter(new ScrimFilter());
- mTransformer.addFilter(new VignetteFilter());
- mTransformer.updateOffsets();
- mTransformer.updateDisplayInfo(getDisplayInfo(Display.DEFAULT_DISPLAY));
-
- mTransitionProperties.setDuration(TRANSITION_DURATION);
- mTransitionProperties.setAnimationFinishListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mTransformer.setIsTransiting(false);
- }
-
- @Override
- public void onAnimationStart(Animator animation) {
- mTransformer.setIsTransiting(true);
- }
- });
- } else {
- // This part should only be hit by test cases.
- mTransformer = transformer;
- }
- }
-
- private DisplayInfo getDisplayInfo(int displayId) {
- DisplayInfo displayInfo = new DisplayInfo();
- mDisplayManager.getDisplay(displayId).getDisplayInfo(displayInfo);
- return displayInfo;
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- mBounds.set(0, 0, w, h);
- mTransformer.updateOffsets();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- if (mNeedMask) {
- mTransformer.drawTransformedImage(canvas, null /* target */, null /* src */, mBounds);
- }
- }
-
- private boolean checkIfNeedMask() {
- // We need mask for ImageWallpaper / LockScreen Wallpaper (Music album art).
- // Because of conflicting with another wallpaper feature,
- // we only support LockScreen wallpaper currently.
- return mWallpaperManager.getWallpaperInfo() == null || ScrimState.AOD.hasBackdrop();
- }
-
- @Override
- public void onStatePreChange(int oldState, int newState) {
- mChangingStates = oldState != newState;
- mNeedMask = checkIfNeedMask();
- }
-
- @Override
- public void onStatePostChange() {
- mChangingStates = false;
- }
-
- @Override
- public void onStateChanged(int newState) {
- }
-
- @Override
- public void onDozingChanged(boolean isDozing) {
- if (!mNeedMask) {
- return;
- }
-
- boolean enabled = checkFeatureIsEnabled();
- mTransformer.updateAmbientModeState(enabled && isDozing);
-
- if (enabled && !mChangingStates) {
- setAnimatorProperty(isDozing);
- } else {
- invalidate();
- }
- }
-
- private boolean checkFeatureIsEnabled() {
- return FeatureFlagUtils.isEnabled(
- getContext(), FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED);
- }
-
- @VisibleForTesting
- void setAnimatorProperty(boolean isDozing) {
- PropertyAnimator.setProperty(
- this,
- TRANSITION_PROGRESS,
- isDozing ? 1f : 0f /* newEndValue */,
- mTransitionProperties,
- true /* animated */);
- }
-
- @Override
- public void onTransformationUpdated() {
- invalidate();
- }
-
- private void setTransitionAmount(float amount) {
- mTransitionAmount = amount;
- mTransformer.updateTransitionAmount(amount);
- }
-
- private float getTransitionAmount() {
- return mTransitionAmount;
- }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperFilter.java b/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperFilter.java
deleted file mode 100644
index d457dac3e14f..000000000000
--- a/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperFilter.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import android.animation.ValueAnimator;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.RectF;
-
-/**
- * Abstract filter used by static image wallpaper.
- */
-abstract class ImageWallpaperFilter {
- protected static final boolean DEBUG = false;
-
- private ImageWallpaperTransformer mTransformer;
-
- /**
- * Apply this filter to the bitmap before drawing on canvas.
- * @param c The canvas that will draw to.
- * @param bitmap The bitmap to apply this filter.
- * @param src The subset of the bitmap to be drawn.
- * @param dest The rectangle that the bitmap will be scaled/translated to fit into.
- */
- public abstract void apply(@NonNull Canvas c, @Nullable Bitmap bitmap,
- @Nullable Rect src, @NonNull RectF dest);
-
- /**
- * Notifies the occurrence of built-in transition of the animation.
- * @param animator The animator which was animated.
- */
- public abstract void onAnimatorUpdate(ValueAnimator animator);
-
- /**
- * Notifies the occurrence of another transition of the animation.
- * @param amount The transition amount.
- */
- public abstract void onTransitionAmountUpdate(float amount);
-
- /**
- * To set the associated transformer.
- * @param transformer The transformer that is associated with this filter.
- */
- public void setTransformer(ImageWallpaperTransformer transformer) {
- if (transformer != null) {
- mTransformer = transformer;
- }
- }
-
- protected ImageWallpaperTransformer getTransformer() {
- return mTransformer;
- }
-
- /**
- * Notifies the changing of the offset value of the ImageWallpaper.
- * @param force True to force re-evaluate offsets.
- * @param xOffset X offset of the ImageWallpaper in percentage.
- * @param yOffset Y offset of the ImageWallpaper in percentage.
- */
- public void onOffsetsUpdate(boolean force, float xOffset, float yOffset) {
- // No-op
- }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperTransformer.java b/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperTransformer.java
deleted file mode 100644
index 25b0b0aaf60b..000000000000
--- a/packages/SystemUI/src/com/android/systemui/wallpaper/ImageWallpaperTransformer.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.view.DisplayInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class is used to manage the filters that will be applied.
- */
-public class ImageWallpaperTransformer {
- private static final String TAG = ImageWallpaperTransformer.class.getSimpleName();
-
- private DisplayInfo mDisplayInfo;
- private final List<ImageWallpaperFilter> mFilters;
- private final TransformationListener mListener;
- private boolean mIsInAmbientMode;
- private boolean mIsTransiting;
-
- /**
- * Constructor.
- * @param listener A listener to inform you the transformation has updated.
- */
- public ImageWallpaperTransformer(TransformationListener listener) {
- mFilters = new ArrayList<>();
- mListener = listener;
- }
-
- /**
- * Claim that we want to use the specified filter.
- * @param filter The filter will be used.
- */
- public void addFilter(ImageWallpaperFilter filter) {
- if (filter != null) {
- filter.setTransformer(this);
- mFilters.add(filter);
- }
- }
-
- /**
- * Check if any transition is running.
- * @return True if the transition is running, false otherwise.
- */
- boolean isTransiting() {
- return mIsTransiting;
- }
-
- /**
- * Indicate if any transition is running. <br/>
- * @param isTransiting True if the transition is running.
- */
- void setIsTransiting(boolean isTransiting) {
- mIsTransiting = isTransiting;
- }
-
- /**
- * Check if the device is in ambient mode.
- * @return True if the device is in ambient mode, false otherwise.
- */
- public boolean isInAmbientMode() {
- return mIsInAmbientMode;
- }
-
- /**
- * Update current state of ambient mode.
- * @param isInAmbientMode Current ambient mode state.
- */
- public void updateAmbientModeState(boolean isInAmbientMode) {
- mIsInAmbientMode = isInAmbientMode;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- int idx = 0;
- for (ImageWallpaperFilter filter : mFilters) {
- sb.append(idx++).append(": ").append(filter.getClass().getSimpleName()).append("\n");
- }
- if (sb.length() == 0) {
- sb.append("No filters applied");
- }
- return sb.toString();
- }
-
- /**
- * Set a new display info.
- * @param displayInfo New display info.
- */
- public void updateDisplayInfo(DisplayInfo displayInfo) {
- mDisplayInfo = displayInfo;
- }
-
- /**
- * To get current display info.
- * @return Current display info.
- */
- public DisplayInfo getDisplayInfo() {
- return mDisplayInfo;
- }
-
- /**
- * Update the offsets with default value.
- */
- public void updateOffsets() {
- this.updateOffsets(true, 0f, .5f);
- }
-
- /**
- * To notify the filters that the offset of the ImageWallpaper changes.
- * @param force True to force re-evaluate offsets.
- * @param offsetX X offset of the ImageWallpaper in percentage.
- * @param offsetY Y offset of the ImageWallpaper in percentage.
- */
- public void updateOffsets(boolean force, float offsetX, float offsetY) {
- mFilters.forEach(filter -> filter.onOffsetsUpdate(force, offsetX, offsetY));
- }
-
- /**
- * Apply all specified filters to the bitmap then draw to the canvas.
- * @param c The canvas that will draw to.
- * @param target The bitmap to apply filters.
- * @param src The subset of the bitmap to be drawn
- * @param dest The rectangle that the bitmap will be scaled/translated to fit into.
- */
- void drawTransformedImage(@NonNull Canvas c, @Nullable Bitmap target,
- @Nullable Rect src, @NonNull RectF dest) {
- mFilters.forEach(filter -> filter.apply(c, target, src, dest));
- }
-
- /**
- * Update the transition amount. <br/>
- * Must invoke this to update transition amount if not running built-in transition.
- * @param amount The transition amount.
- */
- void updateTransitionAmount(float amount) {
- mFilters.forEach(filter -> filter.onTransitionAmountUpdate(amount));
- if (mListener != null) {
- mListener.onTransformationUpdated();
- }
- }
-
- /**
- * An interface that informs the transformation status.
- */
- public interface TransformationListener {
- /**
- * Notifies the update of the transformation.
- */
- void onTransformationUpdated();
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpaper/ScrimFilter.java b/packages/SystemUI/src/com/android/systemui/wallpaper/ScrimFilter.java
deleted file mode 100644
index 637e48e67de6..000000000000
--- a/packages/SystemUI/src/com/android/systemui/wallpaper/ScrimFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import android.animation.ValueAnimator;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.RectF;
-
-/**
- * A filter that implements 70% black scrim effect.
- */
-public class ScrimFilter extends ImageWallpaperFilter {
- private static final int MAX_ALPHA = (int) (255 * .7f);
- private static final int MIN_ALPHA = 0;
-
- private final Paint mPaint;
-
- public ScrimFilter() {
- mPaint = new Paint();
- mPaint.setColor(Color.BLACK);
- mPaint.setAlpha(MAX_ALPHA);
- }
-
- @Override
- public void apply(Canvas c, Bitmap bitmap, Rect src, RectF dest) {
- ImageWallpaperTransformer transformer = getTransformer();
-
- // If it is not in the transition, we need to set the property according to aod state.
- if (!transformer.isTransiting()) {
- mPaint.setAlpha(transformer.isInAmbientMode() ? MAX_ALPHA : MIN_ALPHA);
- }
-
- c.drawRect(dest, mPaint);
- }
-
- @Override
- public void onAnimatorUpdate(ValueAnimator animator) {
- ImageWallpaperTransformer transformer = getTransformer();
- float fraction = animator.getAnimatedFraction();
- float factor = transformer.isInAmbientMode() ? fraction : 1f - fraction;
- mPaint.setAlpha((int) (factor * MAX_ALPHA));
- }
-
- @Override
- public void onTransitionAmountUpdate(float amount) {
- mPaint.setAlpha((int) (amount * MAX_ALPHA));
- }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpaper/VignetteFilter.java b/packages/SystemUI/src/com/android/systemui/wallpaper/VignetteFilter.java
deleted file mode 100644
index ad0b98b67e68..000000000000
--- a/packages/SystemUI/src/com/android/systemui/wallpaper/VignetteFilter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import android.animation.ValueAnimator;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.PointF;
-import android.graphics.RadialGradient;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader;
-import android.util.Log;
-import android.view.DisplayInfo;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-/**
- * A filter that implements vignette effect.
- */
-public class VignetteFilter extends ImageWallpaperFilter {
- private static final String TAG = VignetteFilter.class.getSimpleName();
- private static final int MAX_ALPHA = 255;
- private static final int MIN_ALPHA = 0;
-
- private final Paint mPaint;
- private final Matrix mMatrix;
- private final Shader mShader;
-
- private float mXOffset;
- private float mYOffset;
- private float mCenterX;
- private float mCenterY;
- private float mStretchX;
- private float mStretchY;
- private boolean mCalculateOffsetNeeded;
-
- public VignetteFilter() {
- mPaint = new Paint();
- mMatrix = new Matrix();
- mShader = new RadialGradient(0, 0, 1,
- Color.TRANSPARENT, Color.BLACK, Shader.TileMode.CLAMP);
- }
-
- @Override
- public void apply(Canvas c, Bitmap bitmap, Rect src, RectF dest) {
- DisplayInfo info = getTransformer().getDisplayInfo();
-
- if (mCalculateOffsetNeeded) {
- int lw = info.logicalWidth;
- int lh = info.logicalHeight;
- mCenterX = lw / 2 + (dest.width() - lw) * mXOffset;
- mCenterY = lh / 2 + (dest.height() - lh) * mYOffset;
- mStretchX = info.logicalWidth / 2;
- mStretchY = info.logicalHeight / 2;
- mCalculateOffsetNeeded = false;
- }
-
- if (DEBUG) {
- Log.d(TAG, "apply: lw=" + info.logicalWidth + ", lh=" + info.logicalHeight
- + ", center=(" + mCenterX + "," + mCenterY + ")"
- + ", stretch=(" + mStretchX + "," + mStretchY + ")");
- }
-
- mMatrix.reset();
- mMatrix.postTranslate(mCenterX, mCenterY);
- mMatrix.postScale(mStretchX, mStretchY, mCenterX, mCenterY);
- mShader.setLocalMatrix(mMatrix);
- mPaint.setShader(mShader);
-
- ImageWallpaperTransformer transformer = getTransformer();
-
- // If it is not in the transition, we need to set the property according to aod state.
- if (!transformer.isTransiting()) {
- mPaint.setAlpha(transformer.isInAmbientMode() ? MAX_ALPHA : MIN_ALPHA);
- }
-
- c.drawRect(dest, mPaint);
- }
-
- @Override
- public void onAnimatorUpdate(ValueAnimator animator) {
- ImageWallpaperTransformer transformer = getTransformer();
- float fraction = animator.getAnimatedFraction();
- float factor = transformer.isInAmbientMode() ? fraction : 1f - fraction;
- mPaint.setAlpha((int) (factor * MAX_ALPHA));
- }
-
- @Override
- public void onTransitionAmountUpdate(float amount) {
- mPaint.setAlpha((int) (amount * MAX_ALPHA));
- }
-
- @Override
- public void onOffsetsUpdate(boolean force, float xOffset, float yOffset) {
- if (force || mXOffset != xOffset || mYOffset != yOffset) {
- mXOffset = xOffset;
- mYOffset = yOffset;
- mCalculateOffsetNeeded = true;
- }
- }
-
- @VisibleForTesting
- public PointF getCenterPoint() {
- return new PointF(mCenterX, mCenterY);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
index fc57909f42b7..e4d56d756c87 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
@@ -16,24 +16,12 @@
package com.android.systemui;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.graphics.Bitmap;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
-import android.view.DisplayInfo;
-import android.view.SurfaceHolder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.concurrent.CountDownLatch;
@@ -42,115 +30,20 @@ import java.util.concurrent.CountDownLatch;
@RunWith(AndroidJUnit4.class)
public class ImageWallpaperTest extends SysuiTestCase {
- private static final int BMP_WIDTH = 128;
- private static final int BMP_HEIGHT = 128;
-
- private static final int INVALID_BMP_WIDTH = 1;
- private static final int INVALID_BMP_HEIGHT = 1;
-
- private ImageWallpaper mImageWallpaper;
-
- @Mock private SurfaceHolder mSurfaceHolder;
- @Mock private DisplayInfo mDisplayInfo;
-
private CountDownLatch mEventCountdown;
private CountDownLatch mAmbientEventCountdown;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
-
mEventCountdown = new CountDownLatch(1);
mAmbientEventCountdown = new CountDownLatch(2);
-
- mImageWallpaper = new ImageWallpaper() {
- @Override
- public Engine onCreateEngine() {
- return new DrawableEngine() {
- @Override
- DisplayInfo getDisplayInfo() {
- return mDisplayInfo;
- }
-
- @Override
- public SurfaceHolder getSurfaceHolder() {
- return mSurfaceHolder;
- }
-
- @Override
- public void setFixedSizeAllowed(boolean allowed) {
- super.setFixedSizeAllowed(allowed);
- assertTrue("mFixedSizeAllowed should be true", allowed);
- mEventCountdown.countDown();
- }
-
- @Override
- public void onAmbientModeChanged(boolean inAmbientMode, long duration) {
- mAmbientEventCountdown.countDown();
- }
- };
- }
- };
- }
-
- @Test
- public void testSetValidBitmapWallpaper() {
- ImageWallpaper.DrawableEngine wallpaperEngine =
- (ImageWallpaper.DrawableEngine) mImageWallpaper.onCreateEngine();
-
- assertEquals("setFixedSizeAllowed should have been called.",
- 0, mEventCountdown.getCount());
-
- Bitmap mockedBitmap = mock(Bitmap.class);
- when(mockedBitmap.getWidth()).thenReturn(BMP_WIDTH);
- when(mockedBitmap.getHeight()).thenReturn(BMP_HEIGHT);
-
- wallpaperEngine.updateBitmap(mockedBitmap);
-
- assertEquals(BMP_WIDTH, wallpaperEngine.mBackgroundWidth);
- assertEquals(BMP_HEIGHT, wallpaperEngine.mBackgroundHeight);
-
- verify(mSurfaceHolder, times(1)).setFixedSize(BMP_WIDTH, BMP_HEIGHT);
-
- }
-
- @Test
- public void testSetTooSmallBitmapWallpaper() {
- ImageWallpaper.DrawableEngine wallpaperEngine =
- (ImageWallpaper.DrawableEngine) mImageWallpaper.onCreateEngine();
-
- assertEquals("setFixedSizeAllowed should have been called.",
- 0, mEventCountdown.getCount());
-
- Bitmap mockedBitmap = mock(Bitmap.class);
- when(mockedBitmap.getWidth()).thenReturn(INVALID_BMP_WIDTH);
- when(mockedBitmap.getHeight()).thenReturn(INVALID_BMP_HEIGHT);
-
- wallpaperEngine.updateBitmap(mockedBitmap);
-
- assertEquals(INVALID_BMP_WIDTH, wallpaperEngine.mBackgroundWidth);
- assertEquals(INVALID_BMP_HEIGHT, wallpaperEngine.mBackgroundHeight);
-
- verify(mSurfaceHolder, times(1)).setFixedSize(ImageWallpaper.DrawableEngine.MIN_BACKGROUND_WIDTH, ImageWallpaper.DrawableEngine.MIN_BACKGROUND_HEIGHT);
}
@Test
public void testDeliversAmbientModeChanged() {
- ImageWallpaper.DrawableEngine wallpaperEngine =
- (ImageWallpaper.DrawableEngine) mImageWallpaper.onCreateEngine();
-
- assertEquals("setFixedSizeAllowed should have been called.",
- 0, mEventCountdown.getCount());
-
- wallpaperEngine.setCreated(true);
- wallpaperEngine.doAmbientModeChanged(false, 1000);
- assertFalse("ambient mode should be false", wallpaperEngine.isInAmbientMode());
- assertEquals("onAmbientModeChanged should have been called.",
- 1, mAmbientEventCountdown.getCount());
-
- wallpaperEngine.doAmbientModeChanged(true, 1000);
- assertTrue("ambient mode should be true", wallpaperEngine.isInAmbientMode());
- assertEquals("onAmbientModeChanged should have been called.",
- 0, mAmbientEventCountdown.getCount());
+ //TODO: We need add tests for GLEngine.
}
+
+ // TODO: Add more test cases for GLEngine, tracing in b/124838911.
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallpaper/AodMaskViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallpaper/AodMaskViewTest.java
deleted file mode 100644
index c44a366e683c..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/wallpaper/AodMaskViewTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2018 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.systemui.wallpaper;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.app.WallpaperManager;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.RectF;
-import android.hardware.display.DisplayManager;
-import android.support.test.runner.AndroidJUnit4;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.FeatureFlagUtils;
-import android.view.DisplayInfo;
-import android.view.WindowManager;
-
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AodMaskViewTest extends SysuiTestCase {
- private AodMaskView mMaskView;
- private DisplayInfo mDisplayInfo;
- private ImageWallpaperTransformer mTransformer;
-
- @Before
- public void setUp() throws Exception {
- DisplayManager displayManager =
- spy((DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE));
- doNothing().when(displayManager).registerDisplayListener(any(), any());
- mContext.addMockSystemService(DisplayManager.class, displayManager);
-
- WallpaperManager wallpaperManager =
- spy((WallpaperManager) mContext.getSystemService(Context.WALLPAPER_SERVICE));
- doReturn(null).when(wallpaperManager).getWallpaperInfo();
- mContext.addMockSystemService(WallpaperManager.class, wallpaperManager);
-
- mTransformer = spy(new ImageWallpaperTransformer(null /* listener */));
- mMaskView = spy(new AodMaskView(getContext(), null /* attrs */, mTransformer));
- mDisplayInfo = new DisplayInfo();
-
- ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
- .getDefaultDisplay().getDisplayInfo(mDisplayInfo);
-
- FeatureFlagUtils.setEnabled(
- mContext, FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED, true);
- }
-
- @After
- public void tearDown() {
- FeatureFlagUtils.setEnabled(
- mContext, FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED, false);
- }
-
- @Test
- public void testCreateMaskView_TransformerIsNotNull() {
- assertNotNull("mTransformer should not be null", mTransformer);
- }
-
- @Test
- public void testAodMaskView_ShouldNotClickable() {
- assertFalse("MaskView should not be clickable", mMaskView.isClickable());
- }
-
- @Test
- public void testAodMaskView_OnSizeChange_ShouldUpdateTransformerOffsets() {
- mMaskView.onSizeChanged(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, 0, 0);
- verify(mTransformer, times(1)).updateOffsets();
- }
-
- @Test
- public void testAodMaskView_OnDraw_ShouldDrawTransformedImage() {
- Canvas c = new Canvas();
- RectF bounds = new RectF(0, 0, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
- mMaskView.onSizeChanged(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, 0, 0);
- mMaskView.onStatePreChange(0, 1);
- mMaskView.onDraw(c);
- verify(mTransformer, times(1)).drawTransformedImage(c, null, null, bounds);
- }
-
- @Test
- public void testAodMaskView_IsDozing_ShouldUpdateAmbientModeState() {
- doNothing().when(mMaskView).setAnimatorProperty(anyBoolean());
- mMaskView.onStatePreChange(0, 1);
- mMaskView.onDozingChanged(true);
- verify(mTransformer, times(1)).updateAmbientModeState(true);
- }
-
- @Test
- public void testAodMaskView_IsDozing_ShouldDoTransitionOrDrawFinalFrame() {
- doNothing().when(mMaskView).setAnimatorProperty(anyBoolean());
- mMaskView.onStatePreChange(0, 1);
- mMaskView.onDozingChanged(true);
- mMaskView.onStatePostChange();
- mMaskView.onDozingChanged(false);
- verify(mMaskView, times(1)).invalidate();
- verify(mMaskView, times(1)).setAnimatorProperty(false);
- }
-
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallpaper/ImageWallpaperTransformerTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallpaper/ImageWallpaperTransformerTest.java
deleted file mode 100644
index 55b0aaefff51..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/wallpaper/ImageWallpaperTransformerTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2009 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.systemui.wallpaper;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.support.test.runner.AndroidJUnit4;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.DisplayInfo;
-import android.view.WindowManager;
-
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class ImageWallpaperTransformerTest extends SysuiTestCase {
- private DisplayInfo mDisplayInfo;
- private Bitmap mBitmap;
- private Canvas mCanvas;
- private RectF mDestination;
-
- @Before
- public void setUp() throws Exception {
- mDisplayInfo = new DisplayInfo();
- ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE))
- .getDefaultDisplay().getDisplayInfo(mDisplayInfo);
- int dimension = Math.max(mDisplayInfo.logicalHeight, mDisplayInfo.logicalWidth);
- mBitmap = Bitmap.createBitmap(dimension, dimension, Bitmap.Config.ARGB_8888);
- mCanvas = new Canvas(mBitmap);
- mCanvas.drawColor(Color.RED);
- mDestination = new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
- }
-
- @Test
- public void testVignetteFilter() {
- VignetteFilter vignette = new VignetteFilter();
-
- ImageWallpaperTransformer transformer = getTransformer(vignette);
- transformer.drawTransformedImage(mCanvas, mBitmap, null, mDestination);
-
- PointF center = vignette.getCenterPoint();
- int p1 = mBitmap.getPixel((int) center.x, (int) center.y);
- int p2 = mBitmap.getPixel(0, 0);
- int p3 = mBitmap.getPixel(mBitmap.getWidth() - 1, mBitmap.getHeight() - 1);
-
- assertThat(p1).isEqualTo(Color.RED);
- assertThat(p2 | p3).isEqualTo(Color.BLACK);
- }
-
- @Test
- public void testScrimFilter() {
- getTransformer(new ScrimFilter())
- .drawTransformedImage(mCanvas, mBitmap, null, mDestination);
-
- int pixel = mBitmap.getPixel(0, 0);
-
- // 0xff4d0000 is the result of 70% alpha pre-multiplied which is 0.7*(0,0,0)+0.3*(255,0,0).
- assertThat(pixel).isEqualTo(0xff4d0000);
- }
-
- private ImageWallpaperTransformer getTransformer(ImageWallpaperFilter filter) {
- ImageWallpaperTransformer transformer = new ImageWallpaperTransformer(null);
- transformer.addFilter(filter);
- transformer.updateDisplayInfo(mDisplayInfo);
- transformer.updateOffsets();
- transformer.updateAmbientModeState(true);
- return transformer;
- }
-}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 071dde74f103..4aeba153cc68 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -84,7 +84,6 @@ import android.service.wallpaper.WallpaperService;
import android.system.ErrnoException;
import android.system.Os;
import android.util.EventLog;
-import android.util.FeatureFlagUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -2262,10 +2261,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
}
}
- private boolean isAodImageWallpaperEnabled() {
- return FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.AOD_IMAGEWALLPAPER_ENABLED);
- }
-
@Override
public boolean setLockWallpaperCallback(IWallpaperManagerCallback cb) {
checkPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW);