Refactor layout and surface placement into a separate class.
OMG, WindowManagerService below 10kLOC. Barely. Change-Id: I7062c10c767c01c08466b3903736ee35b341f2a5
This commit is contained in:
@@ -750,7 +750,7 @@ class WallpaperController {
|
||||
}
|
||||
|
||||
boolean adjustWallpaperWindows() {
|
||||
mService.mInnerFields.mWallpaperMayChange = false;
|
||||
mService.mWindowPlacerLocked.mWallpaperMayChange = false;
|
||||
|
||||
final WindowList windows = mService.getDefaultWindowListLocked();
|
||||
// First find top-most window that has asked to be on top of the wallpaper;
|
||||
|
||||
@@ -23,11 +23,11 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||
import static com.android.server.wm.WindowManagerService.DEBUG_KEYGUARD;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_UPDATE_ROTATION;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_MAY_CHANGE;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_FORCE_HIDING_CHANGED;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_ACTION_PENDING;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.RemoteException;
|
||||
@@ -41,8 +41,6 @@ import android.view.animation.AlphaAnimation;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.Choreographer;
|
||||
|
||||
import com.android.server.wm.WindowManagerService.LayoutFields;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -84,8 +82,7 @@ public class WindowAnimator {
|
||||
int mBulkUpdateParams = 0;
|
||||
Object mLastWindowFreezeSource;
|
||||
|
||||
SparseArray<DisplayContentsAnimator> mDisplayContentsAnimators =
|
||||
new SparseArray<DisplayContentsAnimator>(2);
|
||||
SparseArray<DisplayContentsAnimator> mDisplayContentsAnimators = new SparseArray<>(2);
|
||||
|
||||
boolean mInitialized = false;
|
||||
|
||||
@@ -179,10 +176,12 @@ public class WindowAnimator {
|
||||
mAnimating = mAppWindowAnimating = true;
|
||||
} else if (appAnimator.wasAnimating) {
|
||||
// stopped animating, do one more pass through the layout
|
||||
setAppLayoutChanges(appAnimator, WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER,
|
||||
"exiting appToken " + appAnimator.mAppToken + " done", displayId);
|
||||
setAppLayoutChanges(appAnimator,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER,
|
||||
"exiting appToken " + appAnimator.mAppToken + " done", displayId);
|
||||
if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG,
|
||||
"updateWindowsApps...: done animating exiting " + appAnimator.mAppToken);
|
||||
"updateWindowsApps...: done animating exiting "
|
||||
+ appAnimator.mAppToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -301,7 +300,8 @@ public class WindowAnimator {
|
||||
setPendingLayoutChanges(Display.DEFAULT_DISPLAY,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
|
||||
mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2",
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(
|
||||
"updateWindowsAndWallpaperLocked 2",
|
||||
getPendingLayoutChanges(Display.DEFAULT_DISPLAY));
|
||||
}
|
||||
}
|
||||
@@ -315,7 +315,8 @@ public class WindowAnimator {
|
||||
setPendingLayoutChanges(displayId,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
|
||||
mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3",
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(
|
||||
"updateWindowsAndWallpaperLocked 3",
|
||||
getPendingLayoutChanges(displayId));
|
||||
}
|
||||
mService.mFocusMayChange = true;
|
||||
@@ -409,7 +410,8 @@ public class WindowAnimator {
|
||||
setPendingLayoutChanges(Display.DEFAULT_DISPLAY,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
|
||||
mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4",
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(
|
||||
"updateWindowsAndWallpaperLocked 4",
|
||||
getPendingLayoutChanges(Display.DEFAULT_DISPLAY));
|
||||
}
|
||||
}
|
||||
@@ -433,7 +435,8 @@ public class WindowAnimator {
|
||||
setPendingLayoutChanges(displayId,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
|
||||
mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5",
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(
|
||||
"updateWindowsAndWallpaperLocked 5",
|
||||
getPendingLayoutChanges(displayId));
|
||||
}
|
||||
}
|
||||
@@ -607,7 +610,8 @@ public class WindowAnimator {
|
||||
"Setting mOrientationChangeComplete=true because wtoken "
|
||||
+ wtoken + " numInteresting=" + wtoken.numInterestingWindows
|
||||
+ " numDrawn=" + wtoken.numDrawnWindows);
|
||||
// This will set mOrientationChangeComplete and cause a pass through layout.
|
||||
// This will set mOrientationChangeComplete and cause a pass through
|
||||
// layout.
|
||||
setAppLayoutChanges(appAnimator,
|
||||
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER,
|
||||
"testTokenMayBeDrawnLocked: freezingScreen", displayId);
|
||||
@@ -737,7 +741,7 @@ public class WindowAnimator {
|
||||
|
||||
boolean doRequest = false;
|
||||
if (mBulkUpdateParams != 0) {
|
||||
doRequest = mService.copyAnimToLayoutParamsLocked();
|
||||
doRequest = mService.mWindowPlacerLocked.copyAnimToLayoutParamsLocked();
|
||||
}
|
||||
|
||||
if (hasPendingLayoutChanges || doRequest) {
|
||||
@@ -755,21 +759,21 @@ public class WindowAnimator {
|
||||
}
|
||||
}
|
||||
|
||||
static String bulkUpdateParamsToString(int bulkUpdateParams) {
|
||||
private static String bulkUpdateParamsToString(int bulkUpdateParams) {
|
||||
StringBuilder builder = new StringBuilder(128);
|
||||
if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) {
|
||||
if ((bulkUpdateParams & WindowSurfacePlacer.SET_UPDATE_ROTATION) != 0) {
|
||||
builder.append(" UPDATE_ROTATION");
|
||||
}
|
||||
if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) {
|
||||
if ((bulkUpdateParams & WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE) != 0) {
|
||||
builder.append(" WALLPAPER_MAY_CHANGE");
|
||||
}
|
||||
if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) {
|
||||
if ((bulkUpdateParams & WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED) != 0) {
|
||||
builder.append(" FORCE_HIDING_CHANGED");
|
||||
}
|
||||
if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) != 0) {
|
||||
if ((bulkUpdateParams & WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE) != 0) {
|
||||
builder.append(" ORIENTATION_CHANGE_COMPLETE");
|
||||
}
|
||||
if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) {
|
||||
if ((bulkUpdateParams & WindowSurfacePlacer.SET_TURN_ON_SCREEN) != 0) {
|
||||
builder.append(" TURN_ON_SCREEN");
|
||||
}
|
||||
return builder.toString();
|
||||
@@ -846,7 +850,8 @@ public class WindowAnimator {
|
||||
if (displayId == windows.get(i).getDisplayId()) {
|
||||
setPendingLayoutChanges(displayId, changes);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
|
||||
mService.debugLayoutRepeats(reason, getPendingLayoutChanges(displayId));
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(reason,
|
||||
getPendingLayoutChanges(displayId));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,7 @@ package com.android.server.wm;
|
||||
|
||||
import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID;
|
||||
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
|
||||
import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
|
||||
@@ -1255,6 +1256,20 @@ final class WindowState implements WindowManagerPolicy.WindowState {
|
||||
mInputWindowHandle.inputChannel = null;
|
||||
}
|
||||
|
||||
void handleFlagDimBehind() {
|
||||
if ((mAttrs.flags & FLAG_DIM_BEHIND) != 0 && isDisplayedLw() && !mExiting) {
|
||||
final Task task = getTask();
|
||||
if (task == null) {
|
||||
return;
|
||||
}
|
||||
task.setContinueDimming();
|
||||
if (!task.isDimming(mWinAnimator)) {
|
||||
if (WindowManagerService.localLOGV) Slog.v(TAG, "Win " + this + " start dimming.");
|
||||
task.startDimmingIfNeeded(mWinAnimator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class DeathRecipient implements IBinder.DeathRecipient {
|
||||
@Override
|
||||
public void binderDied() {
|
||||
|
||||
@@ -27,8 +27,8 @@ import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
|
||||
import static com.android.server.wm.WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
|
||||
import static com.android.server.wm.WindowManagerService.SHOW_SURFACE_ALLOC;
|
||||
import static com.android.server.wm.WindowManagerService.localLOGV;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE;
|
||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_TURN_ON_SCREEN;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
|
||||
import static com.android.server.wm.WindowSurfacePlacer.SET_TURN_ON_SCREEN;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Matrix;
|
||||
@@ -424,8 +424,9 @@ class WindowStateAnimator {
|
||||
finishExit();
|
||||
final int displayId = mWin.getDisplayId();
|
||||
mAnimator.setPendingLayoutChanges(displayId, WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM);
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) mService.debugLayoutRepeats(
|
||||
"WindowStateAnimator", mAnimator.getPendingLayoutChanges(displayId));
|
||||
if (WindowManagerService.DEBUG_LAYOUT_REPEATS)
|
||||
mService.mWindowPlacerLocked.debugLayoutRepeats(
|
||||
"WindowStateAnimator", mAnimator.getPendingLayoutChanges(displayId));
|
||||
|
||||
if (mWin.mAppToken != null) {
|
||||
mWin.mAppToken.updateReportedVisibilityLocked();
|
||||
@@ -1184,7 +1185,7 @@ class WindowStateAnimator {
|
||||
+ " screen=" + (screenAnimation ?
|
||||
screenRotationAnimation.getEnterTransformation().getAlpha() : "null"));
|
||||
return;
|
||||
} else if (mIsWallpaper && mService.mInnerFields.mWallpaperActionPending) {
|
||||
} else if (mIsWallpaper && mService.mWindowPlacerLocked.mWallpaperActionPending) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
1523
services/core/java/com/android/server/wm/WindowSurfacePlacer.java
Normal file
1523
services/core/java/com/android/server/wm/WindowSurfacePlacer.java
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user