summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java66
1 files changed, 10 insertions, 56 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 74ab7095d392..77bbeb59927a 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -112,7 +112,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
/**
@@ -432,7 +431,6 @@ public abstract class WallpaperService extends Service {
Message msg = mCaller.obtainMessageIO(MSG_WINDOW_RESIZED,
reportDraw ? 1 : 0,
mergedConfiguration);
- mIWallpaperEngine.mPendingResizeCount.incrementAndGet();
mCaller.sendMessage(msg);
}
@@ -512,7 +510,6 @@ public abstract class WallpaperService extends Service {
public Engine(Supplier<Long> clockFunction, Handler handler) {
mClockFunction = clockFunction;
mHandler = handler;
- mMergedConfiguration.setOverrideConfiguration(getResources().getConfiguration());
}
/**
@@ -1054,10 +1051,6 @@ public abstract class WallpaperService extends Service {
out.print(prefix); out.print("mZoom="); out.println(mZoom);
out.print(prefix); out.print("mPreviewSurfacePosition=");
out.println(mPreviewSurfacePosition);
- final int pendingCount = mIWallpaperEngine.mPendingResizeCount.get();
- if (pendingCount != 0) {
- out.print(prefix); out.print("mPendingResizeCount="); out.println(pendingCount);
- }
synchronized (mLock) {
out.print(prefix); out.print("mPendingXOffset="); out.print(mPendingXOffset);
out.print(" mPendingXOffset="); out.println(mPendingXOffset);
@@ -1120,6 +1113,10 @@ public abstract class WallpaperService extends Service {
}
}
+ private void updateConfiguration(MergedConfiguration mergedConfiguration) {
+ mMergedConfiguration.setTo(mergedConfiguration);
+ }
+
void updateSurface(boolean forceRelayout, boolean forceReport, boolean redrawNeeded) {
if (mDestroyed) {
Log.w(TAG, "Ignoring updateSurface due to destroyed");
@@ -1168,7 +1165,7 @@ public abstract class WallpaperService extends Service {
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
final Configuration config = mMergedConfiguration.getMergedConfiguration();
- final Rect maxBounds = new Rect(config.windowConfiguration.getMaxBounds());
+ final Rect maxBounds = config.windowConfiguration.getMaxBounds();
if (myWidth == ViewGroup.LayoutParams.MATCH_PARENT
&& myHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
mLayout.width = myWidth;
@@ -1224,17 +1221,6 @@ public abstract class WallpaperService extends Service {
final int relayoutResult = mSession.relayout(mWindow, mLayout, mWidth, mHeight,
View.VISIBLE, 0, 0, 0, mWinFrames, mMergedConfiguration,
mSurfaceControl, mInsetsState, mTempControls, mSyncSeqIdBundle);
- final Rect outMaxBounds = mMergedConfiguration.getMergedConfiguration()
- .windowConfiguration.getMaxBounds();
- if (!outMaxBounds.equals(maxBounds)) {
- Log.i(TAG, "Retry updateSurface because bounds changed from relayout: "
- + maxBounds + " -> " + outMaxBounds);
- mSurfaceHolder.mSurfaceLock.unlock();
- mDrawingAllowed = false;
- mCaller.sendMessage(mCaller.obtainMessageI(MSG_WINDOW_RESIZED,
- redrawNeeded ? 1 : 0));
- return;
- }
final int transformHint = SurfaceControl.rotationToBufferTransform(
(mDisplay.getInstallOrientation() + mDisplay.getRotation()) % 4);
@@ -2338,8 +2324,6 @@ public abstract class WallpaperService extends Service {
final IBinder mWindowToken;
final int mWindowType;
final boolean mIsPreview;
- final AtomicInteger mPendingResizeCount = new AtomicInteger();
- boolean mReportDraw;
boolean mShownReported;
int mReqWidth;
int mReqHeight;
@@ -2595,7 +2579,11 @@ public abstract class WallpaperService extends Service {
mEngine.doCommand(cmd);
} break;
case MSG_WINDOW_RESIZED: {
- handleResized((MergedConfiguration) message.obj, message.arg1 != 0);
+ final boolean reportDraw = message.arg1 != 0;
+ mEngine.updateConfiguration(((MergedConfiguration) message.obj));
+ mEngine.updateSurface(true, false, reportDraw);
+ mEngine.doOffsetsChanged(true);
+ mEngine.scaleAndCropScreenshot();
} break;
case MSG_WINDOW_MOVED: {
// Do nothing. What does it mean for a Wallpaper to move?
@@ -2643,40 +2631,6 @@ public abstract class WallpaperService extends Service {
Log.w(TAG, "Unknown message type " + message.what);
}
}
-
- /**
- * In general this performs relayout for IWindow#resized. If there are several pending
- * (in the message queue) MSG_WINDOW_RESIZED from server side, only the last one will be
- * handled (ignore intermediate states). Note that this procedure cannot be skipped if the
- * configuration is not changed because this is also used to dispatch insets changes.
- */
- private void handleResized(MergedConfiguration config, boolean reportDraw) {
- // The config can be null when retrying for a changed config from relayout, otherwise
- // it is from IWindow#resized which always sends non-null config.
- final int pendingCount = config != null ? mPendingResizeCount.decrementAndGet() : -1;
- if (reportDraw) {
- mReportDraw = true;
- }
- if (pendingCount > 0) {
- if (DEBUG) {
- Log.d(TAG, "Skip outdated resize, bounds="
- + config.getMergedConfiguration().windowConfiguration.getMaxBounds()
- + " pendingCount=" + pendingCount);
- }
- return;
- }
- if (config != null) {
- if (DEBUG) {
- Log.d(TAG, "Update config from resized, bounds="
- + config.getMergedConfiguration().windowConfiguration.getMaxBounds());
- }
- mEngine.mMergedConfiguration.setTo(config);
- }
- mEngine.updateSurface(true /* forceRelayout */, false /* forceReport */, mReportDraw);
- mReportDraw = false;
- mEngine.doOffsetsChanged(true);
- mEngine.scaleAndCropScreenshot();
- }
}
/**