Loading services/java/com/android/server/wm/AppWindowToken.java +9 −5 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ class AppWindowToken extends WindowToken { // application token. Note this list is NOT sorted! final ArrayList<WindowState> allAppWindows = new ArrayList<WindowState>(); final WindowAnimator mAnimator; int groupId = -1; boolean appFullscreen; int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; Loading Loading @@ -88,6 +90,7 @@ class AppWindowToken extends WindowToken { boolean removed; // Have we been asked to have this token keep the screen frozen? // Protect with mAnimator. boolean freezingScreen; boolean animating; Loading Loading @@ -126,6 +129,7 @@ class AppWindowToken extends WindowToken { appWindowToken = this; appToken = _token; mInputApplicationHandle = new InputApplicationHandle(this); mAnimator = service.mAnimator; } public void setAnimation(Animation anim, boolean initialized) { Loading Loading @@ -235,11 +239,11 @@ class AppWindowToken extends WindowToken { thumbnailTransformation.clear(); thumbnailAnimation.getTransformation(currentTime, thumbnailTransformation); thumbnailTransformation.getMatrix().preTranslate(thumbnailX, thumbnailY); final boolean screenAnimation = service.mAnimator.mScreenRotationAnimation != null && service.mAnimator.mScreenRotationAnimation.isAnimating(); final boolean screenAnimation = mAnimator.mScreenRotationAnimation != null && mAnimator.mScreenRotationAnimation.isAnimating(); if (screenAnimation) { thumbnailTransformation.postCompose( service.mAnimator.mScreenRotationAnimation.getEnterTransformation()); mAnimator.mScreenRotationAnimation.getEnterTransformation()); } // cache often used attributes locally final float tmpFloats[] = service.mTmpFloats; Loading Loading @@ -336,9 +340,9 @@ class AppWindowToken extends WindowToken { return false; } service.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { service.debugLayoutRepeats("AppWindowToken"); service.debugLayoutRepeats("AppWindowToken", mAnimator.mPendingLayoutChanges); } clearAnimation(); Loading services/java/com/android/server/wm/DimAnimator.java +23 −12 Original line number Diff line number Diff line Loading @@ -57,12 +57,17 @@ class DimAnimator { } /** * Show the dim surface. * Set's the dim surface's layer and update dim parameters that will be used in * {@link #updateSurface} after all windows are examined. */ void show(int dw, int dh) { void updateParameters(final Resources res, final Parameters params, final long currentTime) { final int dw = params.mDimWidth; final int dh = params.mDimHeight; final WindowStateAnimator winAnimator = params.mDimWinAnimator; final float target = params.mDimTarget; if (!mDimShown) { if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + dw + "x" + dh + ")"); if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + dw + "x" + dh + ")"); mDimShown = true; try { mLastDimWidth = dw; Loading @@ -78,17 +83,9 @@ class DimAnimator { mLastDimHeight = dh; mDimSurface.setSize(dw, dh); } } /** * Set's the dim surface's layer and update dim parameters that will be used in * {@link #updateSurface} after all windows are examined. */ void updateParameters(Resources res, WindowState w, long currentTime) { final WindowStateAnimator winAnimator = w.mWinAnimator; mDimSurface.setLayer(winAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM); final float target = w.mExiting ? 0 : w.mAttrs.dimAmount; if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": layer=" + (winAnimator.mAnimLayer-1) + " target=" + target); if (mDimTargetAlpha != target) { Loading Loading @@ -189,4 +186,18 @@ class DimAnimator { pw.print(" delta="); pw.print(mDimDeltaPerMs); pw.print(" lastAnimTime="); pw.println(mLastDimAnimTime); } static class Parameters { final WindowStateAnimator mDimWinAnimator; final int mDimWidth; final int mDimHeight; final float mDimTarget; Parameters(final WindowStateAnimator dimWinAnimator, final int dimWidth, final int dimHeight, final float dimTarget) { mDimWinAnimator = dimWinAnimator; mDimWidth = dimWidth; mDimHeight = dimHeight; mDimTarget = dimTarget; } } } No newline at end of file services/java/com/android/server/wm/WindowAnimator.java +59 −23 Original line number Diff line number Diff line Loading @@ -6,6 +6,9 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; 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.H.SET_DIM_PARAMETERS; import android.content.Context; import android.os.SystemClock; Loading Loading @@ -67,6 +70,9 @@ public class WindowAnimator { int mBulkUpdateParams = 0; DimAnimator mDimAnimator = null; DimAnimator.Parameters mDimParams = null; WindowAnimator(final WindowManagerService service, final Context context, final WindowManagerPolicy policy) { mService = service; Loading @@ -91,7 +97,8 @@ public class WindowAnimator { if (mService.mWallpaperTarget == target || mService.mLowerWallpaperTarget == target || mService.mUpperWallpaperTarget == target) { for (int i=0; i<mService.mWindows.size(); i++) { final int N = mService.mWindows.size(); for (int i = 0; i < N; i++) { WindowState w = mService.mWindows.get(i); if (w.mIsWallpaper) { target = w; Loading Loading @@ -125,7 +132,8 @@ public class WindowAnimator { // stopped animating, do one more pass through the layout mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("appToken " + appToken + " done"); mService.debugLayoutRepeats("appToken " + appToken + " done", mPendingLayoutChanges); } } } Loading @@ -141,7 +149,8 @@ public class WindowAnimator { // stopped animating, do one more pass through the layout mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("exiting appToken " + appToken + " done"); mService.debugLayoutRepeats("exiting appToken " + appToken + " done", mPendingLayoutChanges); } } } Loading Loading @@ -185,13 +194,13 @@ public class WindowAnimator { && winAnimator.mAnimation.getDetachWallpaper()) { mDetachedWallpaper = w; } if (winAnimator.mAnimation.getBackgroundColor() != 0) { final int backgroundColor = winAnimator.mAnimation.getBackgroundColor(); if (backgroundColor != 0) { if (mWindowAnimationBackground == null || (winAnimator.mAnimLayer < mWindowAnimationBackground.mWinAnimator.mAnimLayer)) { mWindowAnimationBackground = w; mWindowAnimationBackgroundColor = winAnimator.mAnimation.getBackgroundColor(); mWindowAnimationBackgroundColor = backgroundColor; } } } Loading @@ -207,13 +216,13 @@ public class WindowAnimator { && w.mAppToken.animation.getDetachWallpaper()) { mDetachedWallpaper = w; } if (w.mAppToken.animation.getBackgroundColor() != 0) { final int backgroundColor = w.mAppToken.animation.getBackgroundColor(); if (backgroundColor != 0) { if (mWindowAnimationBackground == null || (winAnimator.mAnimLayer < mWindowAnimationBackground.mWinAnimator.mAnimLayer)) { mWindowAnimationBackground = w; mWindowAnimationBackgroundColor = w.mAppToken.animation.getBackgroundColor(); mWindowAnimationBackgroundColor = backgroundColor; } } } Loading @@ -222,7 +231,8 @@ public class WindowAnimator { mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2", mPendingLayoutChanges); } } Loading @@ -231,17 +241,18 @@ public class WindowAnimator { if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "Animation started that could impact force hide: " + w); mService.mInnerFields.mWallpaperForceHidingChanged = true; mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3", mPendingLayoutChanges); } mService.mFocusMayChange = true; } else if (w.isReadyForDisplay() && winAnimator.mAnimation == null) { mForceHiding = true; } } else if (mPolicy.canBeForceHidden(w, attrs)) { boolean changed; final boolean changed; if (mForceHiding) { changed = w.hideLw(false, false); if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, Loading @@ -251,7 +262,7 @@ public class WindowAnimator { if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, "Now policy shown: " + w); if (changed) { if (mService.mInnerFields.mWallpaperForceHidingChanged if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0 && w.isVisibleNow() /*w.isReadyForDisplay()*/) { // Assume we will need to animate. If // we don't (because the wallpaper will Loading @@ -275,7 +286,8 @@ public class WindowAnimator { mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4", mPendingLayoutChanges); } } } Loading Loading @@ -326,7 +338,8 @@ public class WindowAnimator { if (winAnimator.performShowLocked()) { mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5", mPendingLayoutChanges); } } } Loading Loading @@ -361,7 +374,6 @@ public class WindowAnimator { "Setting mOrientationChangeComplete=true because wtoken " + wtoken + " numInteresting=" + numInteresting + " numDrawn=" + wtoken.numDrawnWindows); mService.mInnerFields.mOrientationChangeComplete = true; } } else if (!wtoken.allDrawn) { int numInteresting = wtoken.numInterestingWindows; Loading @@ -373,7 +385,8 @@ public class WindowAnimator { wtoken.allDrawn = true; mPendingLayoutChanges |= PhoneWindowManager.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("testTokenMayBeDrawnLocked"); mService.debugLayoutRepeats("testTokenMayBeDrawnLocked", mPendingLayoutChanges); } // We can now show all of the drawn windows! Loading Loading @@ -419,14 +432,13 @@ public class WindowAnimator { mScreenRotationAnimation.updateSurfaces(); } final int N = mService.mWindows.size(); for (int i=N-1; i>=0; i--) { for (int i = mService.mWindows.size() - 1; i >= 0; i--) { WindowState w = mService.mWindows.get(i); w.mWinAnimator.prepareSurfaceLocked(true); } if (mService.mDimAnimator != null && mService.mDimAnimator.mDimShown) { mAnimating |= mService.mDimAnimator.updateSurface(mService.mInnerFields.mDimming, if (mDimAnimator != null && mDimAnimator.mDimShown) { mAnimating |= mDimAnimator.updateSurface(mService.mInnerFields.mDimming, mCurrentTime, !mService.okToDisplay()); } Loading @@ -438,6 +450,10 @@ public class WindowAnimator { mService.mBlackFrame.clearMatrix(); } } if (mDimParams != null) { mDimAnimator.updateParameters(mContext.getResources(), mDimParams, mCurrentTime); } } catch (RuntimeException e) { Log.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { Loading @@ -450,7 +466,7 @@ public class WindowAnimator { } WindowState mCurrentFocus; void setCurrentFocus(WindowState currentFocus) { void setCurrentFocus(final WindowState currentFocus) { mCurrentFocus = currentFocus; } Loading @@ -462,6 +478,20 @@ public class WindowAnimator { mInnerDh = appHeight; } void startDimming(final WindowStateAnimator winAnimator, final float target, final int width, final int height) { if (mDimAnimator == null) { mDimAnimator = new DimAnimator(mService.mFxSession); } mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, new DimAnimator.Parameters(winAnimator, width, height, target))); } // TODO(cmautner): Move into Handler void stopDimming() { mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, null)); } public void dump(PrintWriter pw, String prefix, boolean dumpAll) { if (mWindowDetachedWallpaper != null) { pw.print(" mWindowDetachedWallpaper="); pw.println(mWindowDetachedWallpaper); Loading @@ -470,5 +500,11 @@ public class WindowAnimator { pw.println(" mWindowAnimationBackgroundSurface:"); mWindowAnimationBackgroundSurface.printTo(" ", pw); } if (mDimAnimator != null) { pw.println(" mDimAnimator:"); mDimAnimator.printTo(" ", pw); } else { pw.println( " no DimAnimator "); } } } services/java/com/android/server/wm/WindowManagerService.java +127 −54 File changed.Preview size limit exceeded, changes collapsed. Show changes services/java/com/android/server/wm/WindowState.java +3 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { WindowToken mRootToken; AppWindowToken mAppToken; AppWindowToken mTargetAppToken; // mAttrs.flags is tested in animation without being locked. If the bits tested are ever // modified they will need to be locked. final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); final DeathRecipient mDeathRecipient; final WindowState mAttachedWindow; Loading Loading
services/java/com/android/server/wm/AppWindowToken.java +9 −5 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ class AppWindowToken extends WindowToken { // application token. Note this list is NOT sorted! final ArrayList<WindowState> allAppWindows = new ArrayList<WindowState>(); final WindowAnimator mAnimator; int groupId = -1; boolean appFullscreen; int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; Loading Loading @@ -88,6 +90,7 @@ class AppWindowToken extends WindowToken { boolean removed; // Have we been asked to have this token keep the screen frozen? // Protect with mAnimator. boolean freezingScreen; boolean animating; Loading Loading @@ -126,6 +129,7 @@ class AppWindowToken extends WindowToken { appWindowToken = this; appToken = _token; mInputApplicationHandle = new InputApplicationHandle(this); mAnimator = service.mAnimator; } public void setAnimation(Animation anim, boolean initialized) { Loading Loading @@ -235,11 +239,11 @@ class AppWindowToken extends WindowToken { thumbnailTransformation.clear(); thumbnailAnimation.getTransformation(currentTime, thumbnailTransformation); thumbnailTransformation.getMatrix().preTranslate(thumbnailX, thumbnailY); final boolean screenAnimation = service.mAnimator.mScreenRotationAnimation != null && service.mAnimator.mScreenRotationAnimation.isAnimating(); final boolean screenAnimation = mAnimator.mScreenRotationAnimation != null && mAnimator.mScreenRotationAnimation.isAnimating(); if (screenAnimation) { thumbnailTransformation.postCompose( service.mAnimator.mScreenRotationAnimation.getEnterTransformation()); mAnimator.mScreenRotationAnimation.getEnterTransformation()); } // cache often used attributes locally final float tmpFloats[] = service.mTmpFloats; Loading Loading @@ -336,9 +340,9 @@ class AppWindowToken extends WindowToken { return false; } service.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; mAnimator.mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { service.debugLayoutRepeats("AppWindowToken"); service.debugLayoutRepeats("AppWindowToken", mAnimator.mPendingLayoutChanges); } clearAnimation(); Loading
services/java/com/android/server/wm/DimAnimator.java +23 −12 Original line number Diff line number Diff line Loading @@ -57,12 +57,17 @@ class DimAnimator { } /** * Show the dim surface. * Set's the dim surface's layer and update dim parameters that will be used in * {@link #updateSurface} after all windows are examined. */ void show(int dw, int dh) { void updateParameters(final Resources res, final Parameters params, final long currentTime) { final int dw = params.mDimWidth; final int dh = params.mDimHeight; final WindowStateAnimator winAnimator = params.mDimWinAnimator; final float target = params.mDimTarget; if (!mDimShown) { if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + dw + "x" + dh + ")"); if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + dw + "x" + dh + ")"); mDimShown = true; try { mLastDimWidth = dw; Loading @@ -78,17 +83,9 @@ class DimAnimator { mLastDimHeight = dh; mDimSurface.setSize(dw, dh); } } /** * Set's the dim surface's layer and update dim parameters that will be used in * {@link #updateSurface} after all windows are examined. */ void updateParameters(Resources res, WindowState w, long currentTime) { final WindowStateAnimator winAnimator = w.mWinAnimator; mDimSurface.setLayer(winAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM); final float target = w.mExiting ? 0 : w.mAttrs.dimAmount; if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": layer=" + (winAnimator.mAnimLayer-1) + " target=" + target); if (mDimTargetAlpha != target) { Loading Loading @@ -189,4 +186,18 @@ class DimAnimator { pw.print(" delta="); pw.print(mDimDeltaPerMs); pw.print(" lastAnimTime="); pw.println(mLastDimAnimTime); } static class Parameters { final WindowStateAnimator mDimWinAnimator; final int mDimWidth; final int mDimHeight; final float mDimTarget; Parameters(final WindowStateAnimator dimWinAnimator, final int dimWidth, final int dimHeight, final float dimTarget) { mDimWinAnimator = dimWinAnimator; mDimWidth = dimWidth; mDimHeight = dimHeight; mDimTarget = dimTarget; } } } No newline at end of file
services/java/com/android/server/wm/WindowAnimator.java +59 −23 Original line number Diff line number Diff line Loading @@ -6,6 +6,9 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; 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.H.SET_DIM_PARAMETERS; import android.content.Context; import android.os.SystemClock; Loading Loading @@ -67,6 +70,9 @@ public class WindowAnimator { int mBulkUpdateParams = 0; DimAnimator mDimAnimator = null; DimAnimator.Parameters mDimParams = null; WindowAnimator(final WindowManagerService service, final Context context, final WindowManagerPolicy policy) { mService = service; Loading @@ -91,7 +97,8 @@ public class WindowAnimator { if (mService.mWallpaperTarget == target || mService.mLowerWallpaperTarget == target || mService.mUpperWallpaperTarget == target) { for (int i=0; i<mService.mWindows.size(); i++) { final int N = mService.mWindows.size(); for (int i = 0; i < N; i++) { WindowState w = mService.mWindows.get(i); if (w.mIsWallpaper) { target = w; Loading Loading @@ -125,7 +132,8 @@ public class WindowAnimator { // stopped animating, do one more pass through the layout mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("appToken " + appToken + " done"); mService.debugLayoutRepeats("appToken " + appToken + " done", mPendingLayoutChanges); } } } Loading @@ -141,7 +149,8 @@ public class WindowAnimator { // stopped animating, do one more pass through the layout mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("exiting appToken " + appToken + " done"); mService.debugLayoutRepeats("exiting appToken " + appToken + " done", mPendingLayoutChanges); } } } Loading Loading @@ -185,13 +194,13 @@ public class WindowAnimator { && winAnimator.mAnimation.getDetachWallpaper()) { mDetachedWallpaper = w; } if (winAnimator.mAnimation.getBackgroundColor() != 0) { final int backgroundColor = winAnimator.mAnimation.getBackgroundColor(); if (backgroundColor != 0) { if (mWindowAnimationBackground == null || (winAnimator.mAnimLayer < mWindowAnimationBackground.mWinAnimator.mAnimLayer)) { mWindowAnimationBackground = w; mWindowAnimationBackgroundColor = winAnimator.mAnimation.getBackgroundColor(); mWindowAnimationBackgroundColor = backgroundColor; } } } Loading @@ -207,13 +216,13 @@ public class WindowAnimator { && w.mAppToken.animation.getDetachWallpaper()) { mDetachedWallpaper = w; } if (w.mAppToken.animation.getBackgroundColor() != 0) { final int backgroundColor = w.mAppToken.animation.getBackgroundColor(); if (backgroundColor != 0) { if (mWindowAnimationBackground == null || (winAnimator.mAnimLayer < mWindowAnimationBackground.mWinAnimator.mAnimLayer)) { mWindowAnimationBackground = w; mWindowAnimationBackgroundColor = w.mAppToken.animation.getBackgroundColor(); mWindowAnimationBackgroundColor = backgroundColor; } } } Loading @@ -222,7 +231,8 @@ public class WindowAnimator { mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 2", mPendingLayoutChanges); } } Loading @@ -231,17 +241,18 @@ public class WindowAnimator { if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "Animation started that could impact force hide: " + w); mService.mInnerFields.mWallpaperForceHidingChanged = true; mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 3", mPendingLayoutChanges); } mService.mFocusMayChange = true; } else if (w.isReadyForDisplay() && winAnimator.mAnimation == null) { mForceHiding = true; } } else if (mPolicy.canBeForceHidden(w, attrs)) { boolean changed; final boolean changed; if (mForceHiding) { changed = w.hideLw(false, false); if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, Loading @@ -251,7 +262,7 @@ public class WindowAnimator { if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG, "Now policy shown: " + w); if (changed) { if (mService.mInnerFields.mWallpaperForceHidingChanged if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0 && w.isVisibleNow() /*w.isReadyForDisplay()*/) { // Assume we will need to animate. If // we don't (because the wallpaper will Loading @@ -275,7 +286,8 @@ public class WindowAnimator { mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE; mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 4", mPendingLayoutChanges); } } } Loading Loading @@ -326,7 +338,8 @@ public class WindowAnimator { if (winAnimator.performShowLocked()) { mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5"); mService.debugLayoutRepeats("updateWindowsAndWallpaperLocked 5", mPendingLayoutChanges); } } } Loading Loading @@ -361,7 +374,6 @@ public class WindowAnimator { "Setting mOrientationChangeComplete=true because wtoken " + wtoken + " numInteresting=" + numInteresting + " numDrawn=" + wtoken.numDrawnWindows); mService.mInnerFields.mOrientationChangeComplete = true; } } else if (!wtoken.allDrawn) { int numInteresting = wtoken.numInterestingWindows; Loading @@ -373,7 +385,8 @@ public class WindowAnimator { wtoken.allDrawn = true; mPendingLayoutChanges |= PhoneWindowManager.FINISH_LAYOUT_REDO_ANIM; if (WindowManagerService.DEBUG_LAYOUT_REPEATS) { mService.debugLayoutRepeats("testTokenMayBeDrawnLocked"); mService.debugLayoutRepeats("testTokenMayBeDrawnLocked", mPendingLayoutChanges); } // We can now show all of the drawn windows! Loading Loading @@ -419,14 +432,13 @@ public class WindowAnimator { mScreenRotationAnimation.updateSurfaces(); } final int N = mService.mWindows.size(); for (int i=N-1; i>=0; i--) { for (int i = mService.mWindows.size() - 1; i >= 0; i--) { WindowState w = mService.mWindows.get(i); w.mWinAnimator.prepareSurfaceLocked(true); } if (mService.mDimAnimator != null && mService.mDimAnimator.mDimShown) { mAnimating |= mService.mDimAnimator.updateSurface(mService.mInnerFields.mDimming, if (mDimAnimator != null && mDimAnimator.mDimShown) { mAnimating |= mDimAnimator.updateSurface(mService.mInnerFields.mDimming, mCurrentTime, !mService.okToDisplay()); } Loading @@ -438,6 +450,10 @@ public class WindowAnimator { mService.mBlackFrame.clearMatrix(); } } if (mDimParams != null) { mDimAnimator.updateParameters(mContext.getResources(), mDimParams, mCurrentTime); } } catch (RuntimeException e) { Log.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { Loading @@ -450,7 +466,7 @@ public class WindowAnimator { } WindowState mCurrentFocus; void setCurrentFocus(WindowState currentFocus) { void setCurrentFocus(final WindowState currentFocus) { mCurrentFocus = currentFocus; } Loading @@ -462,6 +478,20 @@ public class WindowAnimator { mInnerDh = appHeight; } void startDimming(final WindowStateAnimator winAnimator, final float target, final int width, final int height) { if (mDimAnimator == null) { mDimAnimator = new DimAnimator(mService.mFxSession); } mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, new DimAnimator.Parameters(winAnimator, width, height, target))); } // TODO(cmautner): Move into Handler void stopDimming() { mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, null)); } public void dump(PrintWriter pw, String prefix, boolean dumpAll) { if (mWindowDetachedWallpaper != null) { pw.print(" mWindowDetachedWallpaper="); pw.println(mWindowDetachedWallpaper); Loading @@ -470,5 +500,11 @@ public class WindowAnimator { pw.println(" mWindowAnimationBackgroundSurface:"); mWindowAnimationBackgroundSurface.printTo(" ", pw); } if (mDimAnimator != null) { pw.println(" mDimAnimator:"); mDimAnimator.printTo(" ", pw); } else { pw.println( " no DimAnimator "); } } }
services/java/com/android/server/wm/WindowManagerService.java +127 −54 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/java/com/android/server/wm/WindowState.java +3 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { WindowToken mRootToken; AppWindowToken mAppToken; AppWindowToken mTargetAppToken; // mAttrs.flags is tested in animation without being locked. If the bits tested are ever // modified they will need to be locked. final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); final DeathRecipient mDeathRecipient; final WindowState mAttachedWindow; Loading