From 4bb6b751fbbb218e8a298db4aa008472a0aa8d31 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 22 May 2015 16:34:44 -0700 Subject: [PATCH] Revert "resolved conflicts for merge of 47249f2a to mnc-dev" This reverts commit c7becb7ee78881646251ff4846e63eb6b96bf7ec, reversing changes made to 8562b08f04c1309cf40db1e749d612b6824f1d12. --- .../service/wallpaper/WallpaperService.java | 34 ++++--------- core/java/android/view/IWindow.aidl | 2 +- core/java/android/view/IWindowSession.aidl | 6 +-- core/java/android/view/SurfaceView.java | 6 +-- core/java/android/view/View.java | 15 ------ core/java/android/view/ViewRootImpl.java | 27 ++--------- core/java/android/view/WindowManagerPolicy.java | 4 +- core/java/com/android/internal/os/SomeArgs.java | 2 - .../com/android/internal/policy/PhoneWindow.java | 56 ++++++++++++---------- .../android/internal/util/ScreenShapeHelper.java | 12 +++-- .../com/android/internal/view/BaseIWindow.java | 4 +- core/res/res/values/config.xml | 5 -- core/res/res/values/symbols.xml | 1 - .../android/server/policy/PhoneWindowManager.java | 38 ++------------- .../core/java/com/android/server/wm/Session.java | 7 ++- .../android/server/wm/WindowManagerService.java | 4 +- .../java/com/android/server/wm/WindowState.java | 40 ++-------------- .../layoutlib/bridge/android/BridgeWindow.java | 4 +- 18 files changed, 76 insertions(+), 191 deletions(-) diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 8952807f9a02..b93a4a541552 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -18,6 +18,7 @@ package android.service.wallpaper; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.os.SystemProperties; import android.view.WindowInsets; import com.android.internal.R; @@ -160,11 +161,9 @@ public abstract class WallpaperService extends Service { final Rect mOverscanInsets = new Rect(); final Rect mContentInsets = new Rect(); final Rect mStableInsets = new Rect(); - final Rect mOutsets = new Rect(); final Rect mDispatchedOverscanInsets = new Rect(); final Rect mDispatchedContentInsets = new Rect(); final Rect mDispatchedStableInsets = new Rect(); - final Rect mDispatchedOutsets = new Rect(); final Rect mFinalSystemInsets = new Rect(); final Rect mFinalStableInsets = new Rect(); final Configuration mConfiguration = new Configuration(); @@ -269,7 +268,7 @@ public abstract class WallpaperService extends Service { final BaseIWindow mWindow = new BaseIWindow() { @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, - Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, + Rect visibleInsets, Rect stableInsets, boolean reportDraw, Configuration newConfig) { Message msg = mCaller.obtainMessageI(MSG_WINDOW_RESIZED, reportDraw ? 1 : 0); @@ -659,35 +658,30 @@ public abstract class WallpaperService extends Service { mInputEventReceiver = new WallpaperInputEventReceiver( mInputChannel, Looper.myLooper()); } - + mSurfaceHolder.mSurfaceLock.lock(); mDrawingAllowed = true; if (!fixedSize) { mLayout.surfaceInsets.set(mIWallpaperEngine.mDisplayPadding); - mLayout.surfaceInsets.left += mOutsets.left; - mLayout.surfaceInsets.top += mOutsets.top; - mLayout.surfaceInsets.right += mOutsets.right; - mLayout.surfaceInsets.bottom += mOutsets.bottom; } else { mLayout.surfaceInsets.set(0, 0, 0, 0); } final int relayoutResult = mSession.relayout( mWindow, mWindow.mSeq, mLayout, mWidth, mHeight, View.VISIBLE, 0, mWinFrame, mOverscanInsets, mContentInsets, - mVisibleInsets, mStableInsets, mOutsets, mConfiguration, - mSurfaceHolder.mSurface); + mVisibleInsets, mStableInsets, mConfiguration, mSurfaceHolder.mSurface); if (DEBUG) Log.v(TAG, "New surface: " + mSurfaceHolder.mSurface + ", frame=" + mWinFrame); - + int w = mWinFrame.width(); int h = mWinFrame.height(); if (!fixedSize) { final Rect padding = mIWallpaperEngine.mDisplayPadding; - w += padding.left + padding.right + mOutsets.left + mOutsets.right; - h += padding.top + padding.bottom + mOutsets.top + mOutsets.bottom; + w += padding.left + padding.right; + h += padding.top + padding.bottom; mOverscanInsets.left += padding.left; mOverscanInsets.top += padding.top; mOverscanInsets.right += padding.right; @@ -711,14 +705,9 @@ public abstract class WallpaperService extends Service { mCurHeight = h; } - if (DEBUG) { - Log.v(TAG, "Wallpaper size has changed: (" + mCurWidth + ", " + mCurHeight); - } - insetsChanged |= !mDispatchedOverscanInsets.equals(mOverscanInsets); insetsChanged |= !mDispatchedContentInsets.equals(mContentInsets); insetsChanged |= !mDispatchedStableInsets.equals(mStableInsets); - insetsChanged |= !mDispatchedOutsets.equals(mOutsets); mSurfaceHolder.setSurfaceFrameSize(w, h); mSurfaceHolder.mSurfaceLock.unlock(); @@ -778,21 +767,14 @@ public abstract class WallpaperService extends Service { if (insetsChanged) { mDispatchedOverscanInsets.set(mOverscanInsets); - mDispatchedOverscanInsets.left += mOutsets.left; - mDispatchedOverscanInsets.top += mOutsets.top; - mDispatchedOverscanInsets.right += mOutsets.right; - mDispatchedOverscanInsets.bottom += mOutsets.bottom; mDispatchedContentInsets.set(mContentInsets); mDispatchedStableInsets.set(mStableInsets); - mDispatchedOutsets.set(mOutsets); mFinalSystemInsets.set(mDispatchedOverscanInsets); mFinalStableInsets.set(mDispatchedStableInsets); + mFinalSystemInsets.bottom = mIWallpaperEngine.mDisplayPadding.bottom; WindowInsets insets = new WindowInsets(mFinalSystemInsets, null, mFinalStableInsets, getResources().getConfiguration().isScreenRound()); - if (DEBUG) { - Log.v(TAG, "dispatching insets=" + insets); - } onApplyWindowInsets(insets); } diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl index 9cf37595c2ec..0fefdc77367a 100644 --- a/core/java/android/view/IWindow.aidl +++ b/core/java/android/view/IWindow.aidl @@ -46,7 +46,7 @@ oneway interface IWindow { void executeCommand(String command, String parameters, in ParcelFileDescriptor descriptor); void resized(in Rect frame, in Rect overscanInsets, in Rect contentInsets, - in Rect visibleInsets, in Rect stableInsets, in Rect outsets, boolean reportDraw, + in Rect visibleInsets, in Rect stableInsets, boolean reportDraw, in Configuration newConfig); void moved(int newX, int newY); void dispatchAppVisibility(boolean visible); diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 19253dd47f49..fc0148f4b3c6 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -79,13 +79,11 @@ interface IWindowSession { * contents to make sure the user can see it. This is different than * outContentInsets in that these insets change transiently, * so complex relayout of the window should not happen based on them. - * @param outOutsets Rect in which is placed the dead area of the screen that we would like to - * treat as real display. Example of such area is a chin in some models of wearable devices. * @param outConfiguration New configuration of window, if it is now * becoming visible and the global configuration has changed since it * was last displayed. * @param outSurface Object in which is placed the new display surface. - * + * * @return int Result flags: {@link WindowManagerGlobal#RELAYOUT_SHOW_FOCUS}, * {@link WindowManagerGlobal#RELAYOUT_FIRST_TIME}. */ @@ -93,7 +91,7 @@ interface IWindowSession { int requestedWidth, int requestedHeight, int viewVisibility, int flags, out Rect outFrame, out Rect outOverscanInsets, out Rect outContentInsets, out Rect outVisibleInsets, out Rect outStableInsets, - out Rect outOutsets, out Configuration outConfig, out Surface outSurface); + out Configuration outConfig, out Surface outSurface); /** * If a call to relayout() asked to have the surface destroy deferred, diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 160c66208e7f..49be57d1bc0a 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -106,7 +106,6 @@ public class SurfaceView extends View { final Rect mOverscanInsets = new Rect(); final Rect mContentInsets = new Rect(); final Rect mStableInsets = new Rect(); - final Rect mOutsets = new Rect(); final Configuration mConfiguration = new Configuration(); static final int KEEP_SCREEN_ON_MSG = 1; @@ -520,8 +519,7 @@ public class SurfaceView extends View { visible ? VISIBLE : GONE, WindowManagerGlobal.RELAYOUT_DEFER_SURFACE_DESTROY, mWinFrame, mOverscanInsets, mContentInsets, - mVisibleInsets, mStableInsets, mOutsets, mConfiguration, - mNewSurface); + mVisibleInsets, mStableInsets, mConfiguration, mNewSurface); if ((relayoutResult & WindowManagerGlobal.RELAYOUT_RES_FIRST_TIME) != 0) { mReportDrawNeeded = true; } @@ -656,7 +654,7 @@ public class SurfaceView extends View { @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, - Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, + Rect visibleInsets, Rect stableInsets, boolean reportDraw, Configuration newConfig) { SurfaceView surfaceView = mSurfaceView.get(); if (surfaceView != null) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 4e3c3f158cde..3962b70dfe38 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -7363,15 +7363,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * Returns the outsets, which areas of the device that aren't a surface, but we would like to - * treat them as such. - * @hide - */ - public void getOutsets(Rect outOutsetRect) { - outOutsetRect.set(mAttachInfo.mOutsets); - } - - /** * Returns the visibility status for this view. * * @return One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}. @@ -21557,12 +21548,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final Rect mStableInsets = new Rect(); /** - * For windows that include areas that are not covered by real surface these are the outsets - * for real surface. - */ - final Rect mOutsets = new Rect(); - - /** * The internal insets given by this window. This value is * supplied by the client (through * {@link ViewTreeObserver.OnComputeInternalInsetsListener}) and will diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 7aae572b30b2..41f906aeae16 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -267,7 +267,6 @@ public final class ViewRootImpl implements ViewParent, final Rect mPendingVisibleInsets = new Rect(); final Rect mPendingStableInsets = new Rect(); final Rect mPendingContentInsets = new Rect(); - final Rect mPendingOutsets = new Rect(); final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets = new ViewTreeObserver.InternalInsetsInfo(); @@ -1267,12 +1266,6 @@ public final class ViewRootImpl implements ViewParent, contentInsets = mPendingContentInsets; stableInsets = mPendingStableInsets; } - Rect outsets = mAttachInfo.mOutsets; - if (outsets.left > 0 || outsets.top > 0 || outsets.right > 0 || outsets.bottom > 0) { - contentInsets = new Rect(contentInsets.left + outsets.left, - contentInsets.top + outsets.top, contentInsets.right + outsets.right, - contentInsets.bottom + outsets.bottom); - } mLastWindowInsets = new WindowInsets(contentInsets, null /* windowDecorInsets */, stableInsets, mContext.getResources().getConfiguration().isScreenRound()); @@ -1431,9 +1424,6 @@ public final class ViewRootImpl implements ViewParent, if (DEBUG_LAYOUT) Log.v(TAG, "Visible insets changing to: " + mAttachInfo.mVisibleInsets); } - if (!mPendingOutsets.equals(mAttachInfo.mOutsets)) { - insetsChanged = true; - } if (lp.width == ViewGroup.LayoutParams.WRAP_CONTENT || lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { windowSizeMayChange = true; @@ -1607,7 +1597,6 @@ public final class ViewRootImpl implements ViewParent, mAttachInfo.mVisibleInsets); final boolean stableInsetsChanged = !mPendingStableInsets.equals( mAttachInfo.mStableInsets); - final boolean outsetsChanged = !mPendingOutsets.equals(mAttachInfo.mOutsets); if (contentInsetsChanged) { if (mWidth > 0 && mHeight > 0 && lp != null && ((lp.systemUiVisibility|lp.subtreeSystemUiVisibility) @@ -1691,11 +1680,9 @@ public final class ViewRootImpl implements ViewParent, } if (contentInsetsChanged || mLastSystemUiVisibility != mAttachInfo.mSystemUiVisibility || mApplyInsetsRequested - || mLastOverscanRequested != mAttachInfo.mOverscanRequested - || outsetsChanged) { + || mLastOverscanRequested != mAttachInfo.mOverscanRequested) { mLastSystemUiVisibility = mAttachInfo.mSystemUiVisibility; mLastOverscanRequested = mAttachInfo.mOverscanRequested; - mAttachInfo.mOutsets.set(mPendingOutsets); mApplyInsetsRequested = false; dispatchApplyInsets(host); } @@ -3269,7 +3256,6 @@ public final class ViewRootImpl implements ViewParent, && mPendingContentInsets.equals(args.arg2) && mPendingStableInsets.equals(args.arg6) && mPendingVisibleInsets.equals(args.arg3) - && mPendingOutsets.equals(args.arg7) && args.arg4 == null) { break; } @@ -3288,7 +3274,6 @@ public final class ViewRootImpl implements ViewParent, mPendingContentInsets.set((Rect) args.arg2); mPendingStableInsets.set((Rect) args.arg6); mPendingVisibleInsets.set((Rect) args.arg3); - mPendingOutsets.set((Rect) args.arg7); args.recycle(); @@ -5399,7 +5384,7 @@ public final class ViewRootImpl implements ViewParent, (int) (mView.getMeasuredHeight() * appScale + 0.5f), viewVisibility, insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0, mWinFrame, mPendingOverscanInsets, mPendingContentInsets, mPendingVisibleInsets, - mPendingStableInsets, mPendingOutsets, mPendingConfiguration, mSurface); + mPendingStableInsets, mPendingConfiguration, mSurface); //Log.d(TAG, "<<<<<< BACK FROM relayout"); if (restore) { params.restore(); @@ -5668,8 +5653,7 @@ public final class ViewRootImpl implements ViewParent, } public void dispatchResized(Rect frame, Rect overscanInsets, Rect contentInsets, - Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, - Configuration newConfig) { + Rect visibleInsets, Rect stableInsets, boolean reportDraw, Configuration newConfig) { if (DEBUG_LAYOUT) Log.v(TAG, "Resizing " + this + ": frame=" + frame.toShortString() + " contentInsets=" + contentInsets.toShortString() + " visibleInsets=" + visibleInsets.toShortString() @@ -5689,7 +5673,6 @@ public final class ViewRootImpl implements ViewParent, args.arg4 = sameProcessCall && newConfig != null ? new Configuration(newConfig) : newConfig; args.arg5 = sameProcessCall ? new Rect(overscanInsets) : overscanInsets; args.arg6 = sameProcessCall ? new Rect(stableInsets) : stableInsets; - args.arg7 = sameProcessCall ? new Rect(outsets) : outsets; msg.obj = args; mHandler.sendMessage(msg); } @@ -6649,12 +6632,12 @@ public final class ViewRootImpl implements ViewParent, @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, - Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, + Rect visibleInsets, Rect stableInsets, boolean reportDraw, Configuration newConfig) { final ViewRootImpl viewAncestor = mViewAncestor.get(); if (viewAncestor != null) { viewAncestor.dispatchResized(frame, overscanInsets, contentInsets, - visibleInsets, stableInsets, outsets, reportDraw, newConfig); + visibleInsets, stableInsets, reportDraw, newConfig); } } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 463e6c188129..1b759a33de56 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -158,12 +158,10 @@ public interface WindowManagerPolicy { * @param decorFrame The decor frame specified by policy specific to this window, * to use for proper cropping during animation. * @param stableFrame The frame around which stable system decoration is positioned. - * @param outsetFrame The frame that includes areas that aren't part of the surface but we - * want to treat them as such. */ public void computeFrameLw(Rect parentFrame, Rect displayFrame, Rect overlayFrame, Rect contentFrame, Rect visibleFrame, Rect decorFrame, - Rect stableFrame, Rect outsetFrame); + Rect stableFrame); /** * Retrieve the current frame of the window that has been assigned by diff --git a/core/java/com/android/internal/os/SomeArgs.java b/core/java/com/android/internal/os/SomeArgs.java index b0d24fd311e5..c977997a6b0d 100644 --- a/core/java/com/android/internal/os/SomeArgs.java +++ b/core/java/com/android/internal/os/SomeArgs.java @@ -46,7 +46,6 @@ public final class SomeArgs { public Object arg4; public Object arg5; public Object arg6; - public Object arg7; public int argi1; public int argi2; public int argi3; @@ -98,7 +97,6 @@ public final class SomeArgs { arg4 = null; arg5 = null; arg6 = null; - arg7 = null; argi1 = 0; argi2 = 0; argi3 = 0; diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index a04218a3353a..bc64373ea661 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -56,6 +56,7 @@ import android.view.Window; import android.view.WindowInsets; import android.view.WindowManager; import com.android.internal.R; +import com.android.internal.util.ScreenShapeHelper; import com.android.internal.view.FloatingActionMode; import com.android.internal.view.RootViewSurfaceTaker; import com.android.internal.view.StandaloneActionMode; @@ -155,6 +156,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { TypedValue mFixedWidthMinor; TypedValue mFixedHeightMajor; TypedValue mFixedHeightMinor; + int mOutsetBottomPx; // This is the top-level view of the window, containing the window decor. private DecorView mDecor; @@ -287,7 +289,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private Boolean mSharedElementsUseOverlay; private Rect mTempRect; - private Rect mOutsets = new Rect(); static class WindowManagerHolder { static final IWindowManager sWindowManager = IWindowManager.Stub.asInterface( @@ -2400,6 +2401,19 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } @Override + public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) { + if (mOutsetBottomPx != 0) { + WindowInsets newInsets = insets.replaceSystemWindowInsets( + insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), + insets.getSystemWindowInsetRight(), mOutsetBottomPx); + return super.dispatchApplyWindowInsets(newInsets); + } else { + return super.dispatchApplyWindowInsets(insets); + } + } + + + @Override public boolean onTouchEvent(MotionEvent event) { return onInterceptTouchEvent(event); } @@ -2610,21 +2624,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } - getOutsets(mOutsets); - if (mOutsets.top > 0 || mOutsets.bottom > 0) { + if (mOutsetBottomPx != 0) { int mode = MeasureSpec.getMode(heightMeasureSpec); if (mode != MeasureSpec.UNSPECIFIED) { int height = MeasureSpec.getSize(heightMeasureSpec); - heightMeasureSpec = MeasureSpec.makeMeasureSpec( - height + mOutsets.top + mOutsets.bottom, mode); - } - } - if (mOutsets.left > 0 || mOutsets.right > 0) { - int mode = MeasureSpec.getMode(widthMeasureSpec); - if (mode != MeasureSpec.UNSPECIFIED) { - int width = MeasureSpec.getSize(widthMeasureSpec); - widthMeasureSpec = MeasureSpec.makeMeasureSpec( - width + mOutsets.left + mOutsets.right, mode); + heightMeasureSpec = MeasureSpec.makeMeasureSpec(height + mOutsetBottomPx, mode); } } @@ -2662,18 +2666,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - getOutsets(mOutsets); - if (mOutsets.left > 0) { - offsetLeftAndRight(-mOutsets.left); - } - if (mOutsets.top > 0) { - offsetTopAndBottom(-mOutsets.top); - } - } - - @Override public void draw(Canvas canvas) { super.draw(canvas); @@ -2682,6 +2674,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } + @Override public boolean showContextMenuForChild(View originalView) { // Reuse the context menu builder @@ -3590,6 +3583,19 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { requestFeature(FEATURE_ACTIVITY_TRANSITIONS); } + final WindowManager windowService = (WindowManager) getContext().getSystemService( + Context.WINDOW_SERVICE); + if (windowService != null) { + final Display display = windowService.getDefaultDisplay(); + final boolean shouldUseBottomOutset = + display.getDisplayId() == Display.DEFAULT_DISPLAY + || (getForcedWindowFlags() & FLAG_FULLSCREEN) != 0; + if (shouldUseBottomOutset) { + mOutsetBottomPx = ScreenShapeHelper.getWindowOutsetBottomPx( + getContext().getResources().getDisplayMetrics(), a); + } + } + final Context context = getContext(); final int targetSdk = context.getApplicationInfo().targetSdkVersion; final boolean targetPreHoneycomb = targetSdk < android.os.Build.VERSION_CODES.HONEYCOMB; diff --git a/core/java/com/android/internal/util/ScreenShapeHelper.java b/core/java/com/android/internal/util/ScreenShapeHelper.java index 4a196f8c9a3e..58ae85348cb2 100644 --- a/core/java/com/android/internal/util/ScreenShapeHelper.java +++ b/core/java/com/android/internal/util/ScreenShapeHelper.java @@ -18,13 +18,19 @@ public class ScreenShapeHelper { /** * Return the bottom pixel window outset of a window given its style attributes. + * @param displayMetrics Display metrics of the current device + * @param windowStyle Window style attributes for the window. * @return An outset dimension in pixels or 0 if no outset should be applied. */ - public static int getWindowOutsetBottomPx(Resources resources) { + public static int getWindowOutsetBottomPx(DisplayMetrics displayMetrics, + TypedArray windowStyle) { if (IS_EMULATOR) { return SystemProperties.getInt(ViewRootImpl.PROPERTY_EMULATOR_WIN_OUTSET_BOTTOM_PX, 0); - } else { - return resources.getInteger(com.android.internal.R.integer.config_windowOutsetBottom); + } else if (windowStyle.hasValue(R.styleable.Window_windowOutsetBottom)) { + TypedValue outsetBottom = new TypedValue(); + windowStyle.getValue(R.styleable.Window_windowOutsetBottom, outsetBottom); + return (int) outsetBottom.getDimension(displayMetrics); } + return 0; } } diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java index 3eeabcddb3c7..e27ba137ae5f 100644 --- a/core/java/com/android/internal/view/BaseIWindow.java +++ b/core/java/com/android/internal/view/BaseIWindow.java @@ -34,8 +34,8 @@ public class BaseIWindow extends IWindow.Stub { } @Override - public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, - Rect stableInsets, Rect outsets, boolean reportDraw, Configuration newConfig) { + public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, + Rect visibleInsets, Rect stableInsets, boolean reportDraw, Configuration newConfig) { if (reportDraw) { try { mSession.finishDrawing(this); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 8066d9f2b216..c71565299e2b 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1861,11 +1861,6 @@ false - - 0 - diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index fdb9aa43c0ac..4b57a4776a04 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -383,7 +383,6 @@ - diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 9cf19b7b0740..17368aade9a7 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -108,7 +108,6 @@ import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import com.android.internal.R; import com.android.internal.statusbar.IStatusBarService; -import com.android.internal.util.ScreenShapeHelper; import com.android.internal.widget.PointerLocationView; import com.android.server.LocalServices; import com.android.server.policy.keyguard.KeyguardServiceDelegate; @@ -473,7 +472,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final Rect mTmpDecorFrame = new Rect(); static final Rect mTmpStableFrame = new Rect(); static final Rect mTmpNavigationFrame = new Rect(); - static final Rect mTmpOutsetFrame = new Rect(); WindowState mTopFullscreenOpaqueWindowState; WindowState mTopFullscreenOpaqueOrDimmingWindowState; @@ -3364,7 +3362,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { final Rect of = mTmpOverscanFrame; final Rect vf = mTmpVisibleFrame; final Rect dcf = mTmpDecorFrame; - final Rect osf = mTmpOutsetFrame; pf.left = df.left = of.left = vf.left = mDockLeft; pf.top = df.top = of.top = vf.top = mDockTop; pf.right = df.right = of.right = vf.right = mDockRight; @@ -3474,7 +3471,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // And compute the final frame. mNavigationBar.computeFrameLw(mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame, dcf, - mTmpNavigationFrame, mTmpNavigationFrame); + mTmpNavigationFrame); if (DEBUG_LAYOUT) Slog.i(TAG, "mNavigationBar frame: " + mTmpNavigationFrame); if (mNavigationBarController.checkHiddenLw()) { updateSysUiVisibility = true; @@ -3499,7 +3496,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mStatusBarLayer = mStatusBar.getSurfaceLayer(); // Let the status bar determine its size. - mStatusBar.computeFrameLw(pf, df, vf, vf, vf, dcf, vf, osf); + mStatusBar.computeFrameLw(pf, df, vf, vf, vf, dcf, vf); // For layout, the status bar is always at the top with our fixed height. mStableTop = mUnrestrictedScreenTop + mStatusBarHeight; @@ -3673,7 +3670,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { final Rect vf = mTmpVisibleFrame; final Rect dcf = mTmpDecorFrame; final Rect sf = mTmpStableFrame; - final Rect osf = mTmpOutsetFrame; dcf.setEmpty(); final boolean hasNavBar = (isDefaultDisplay && mHasNavigationBar @@ -3686,7 +3682,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { } else { sf.set(mOverscanLeft, mOverscanTop, mOverscanRight, mOverscanBottom); } - osf.set(mStableLeft, mStableTop, mStableRight, mStableBottom); if (!isDefaultDisplay) { if (attached != null) { @@ -4068,30 +4063,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } - // If the device has a chin (e.g. some watches), a dead area at the bottom of the screen we - // need to provide information to the clients that want to pretend that you can draw there. - if (isDefaultDisplay) { - int outset = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources()); - if (outset > 0) { - int rotation = Surface.ROTATION_0; - try { - rotation = mWindowManager.getRotation(); - } catch (RemoteException e) { - } - if (rotation == Surface.ROTATION_0) { - osf.bottom += outset; - } else if (rotation == Surface.ROTATION_90) { - osf.right += outset; - } else if (rotation == Surface.ROTATION_180) { - osf.top -= outset; - } else if (rotation == Surface.ROTATION_270) { - osf.left -= outset; - } - if (DEBUG_LAYOUT) Slog.v(TAG, "applying bottom outset of " + outset - + " with rotation " + rotation + ", result: " + osf); - } - } - if (DEBUG_LAYOUT) Slog.v(TAG, "Compute frame " + attrs.getTitle() + ": sim=#" + Integer.toHexString(sim) + " attach=" + attached + " type=" + attrs.type @@ -4100,10 +4071,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { + " of=" + of.toShortString() + " cf=" + cf.toShortString() + " vf=" + vf.toShortString() + " dcf=" + dcf.toShortString() - + " sf=" + sf.toShortString() - + " osf=" + osf.toShortString()); + + " sf=" + sf.toShortString()); - win.computeFrameLw(pf, df, of, cf, vf, dcf, sf, osf); + win.computeFrameLw(pf, df, of, cf, vf, dcf, sf); // Dock windows carve out the bottom of the screen, so normal windows // can't appear underneath them. diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index e9c5ac7033b5..487483e9b825 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -190,15 +190,14 @@ final class Session extends IWindowSession.Stub public int relayout(IWindow window, int seq, WindowManager.LayoutParams attrs, int requestedWidth, int requestedHeight, int viewFlags, int flags, Rect outFrame, Rect outOverscanInsets, Rect outContentInsets, - Rect outVisibleInsets, Rect outStableInsets, Rect outsets, Configuration - outConfig, + Rect outVisibleInsets, Rect outStableInsets, Configuration outConfig, Surface outSurface) { if (false) Slog.d(WindowManagerService.TAG, ">>>>>> ENTERED relayout from " + Binder.getCallingPid()); int res = mService.relayoutWindow(this, window, seq, attrs, requestedWidth, requestedHeight, viewFlags, flags, outFrame, outOverscanInsets, outContentInsets, outVisibleInsets, - outStableInsets, outsets, outConfig, outSurface); + outStableInsets, outConfig, outSurface); if (false) Slog.d(WindowManagerService.TAG, "<<<<<< EXITING relayout to " + Binder.getCallingPid()); return res; @@ -523,4 +522,4 @@ final class Session extends IWindowSession.Stub public String toString() { return mStringName; } -} +} \ No newline at end of file diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 28f511cf6767..cebb909e5678 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3043,7 +3043,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowManager.LayoutParams attrs, int requestedWidth, int requestedHeight, int viewVisibility, int flags, Rect outFrame, Rect outOverscanInsets, Rect outContentInsets, - Rect outVisibleInsets, Rect outStableInsets, Rect outOutsets, Configuration outConfig, + Rect outVisibleInsets, Rect outStableInsets, Configuration outConfig, Surface outSurface) { boolean toBeDisplayed = false; boolean inTouchMode; @@ -3331,7 +3331,6 @@ public class WindowManagerService extends IWindowManager.Stub outContentInsets.set(win.mContentInsets); outVisibleInsets.set(win.mVisibleInsets); outStableInsets.set(win.mStableInsets); - outOutsets.set(win.mOutsets); if (localLOGV) Slog.v( TAG, "Relayout given client " + client.asBinder() + ", requestedWidth=" + requestedWidth @@ -9618,7 +9617,6 @@ public class WindowManagerService extends IWindowManager.Stub w.mLastContentInsets.set(w.mContentInsets); w.mLastVisibleInsets.set(w.mVisibleInsets); w.mLastStableInsets.set(w.mStableInsets); - w.mLastOutsets.set(w.mOutsets); makeWindowFreezingScreenIfNeededLocked(w); // If the orientation is changing, then we need to // hold off on unfreezing the display until this diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 3e305ac1d7ca..ad2546296e39 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -180,14 +180,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { boolean mStableInsetsChanged; /** - * Outsets determine the area outside of the surface where we want to pretend that it's possible - * to draw anyway. - */ - final Rect mOutsets = new Rect(); - final Rect mLastOutsets = new Rect(); - boolean mOutsetsChanged = false; - - /** * Set to true if we are waiting for this window to receive its * given internal insets before laying out other windows based on it. */ @@ -269,10 +261,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { // displays hint text. final Rect mVisibleFrame = new Rect(); - // Frame that includes dead area outside of the surface but where we want to pretend that it's - // possible to draw. - final Rect mOutsetFrame = new Rect(); - boolean mContentChanged; // If a window showing a wallpaper: the requested offset for the @@ -531,8 +519,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { } @Override - public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf, Rect dcf, Rect sf, - Rect osf) { + public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf, Rect dcf, Rect sf) { mHaveFrame = true; final TaskStack stack = mAppToken != null ? getStack() : null; @@ -607,7 +594,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { mVisibleFrame.set(vf); mDecorFrame.set(dcf); mStableFrame.set(sf); - mOutsetFrame.set(osf); final int fw = mFrame.width(); final int fh = mFrame.height(); @@ -672,11 +658,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { Math.max(mFrame.right - mStableFrame.right, 0), Math.max(mFrame.bottom - mStableFrame.bottom, 0)); - mOutsets.set(Math.max(mContentFrame.left - mOutsetFrame.left, 0), - Math.max(mContentFrame.top - mOutsetFrame.top, 0), - Math.max(mOutsetFrame.right - mContentFrame.right, 0), - Math.max(mOutsetFrame.bottom - mContentFrame.bottom, 0)); - mCompatFrame.set(mFrame); if (mEnforceSizeCompat) { // If there is a size compatibility scale being applied to the @@ -686,7 +667,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { mContentInsets.scale(mInvGlobalScale); mVisibleInsets.scale(mInvGlobalScale); mStableInsets.scale(mInvGlobalScale); - mOutsets.scale(mInvGlobalScale); // Also the scaled frame that we report to the app needs to be // adjusted to be in its coordinate space. @@ -709,8 +689,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { + "): frame=" + mFrame.toShortString() + " ci=" + mContentInsets.toShortString() + " vi=" + mVisibleInsets.toShortString() - + " vi=" + mStableInsets.toShortString() - + " of=" + mOutsets.toShortString()); + + " vi=" + mStableInsets.toShortString()); } @Override @@ -816,9 +795,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { mContentInsetsChanged |= !mLastContentInsets.equals(mContentInsets); mVisibleInsetsChanged |= !mLastVisibleInsets.equals(mVisibleInsets); mStableInsetsChanged |= !mLastStableInsets.equals(mStableInsets); - mOutsetsChanged |= !mLastOutsets.equals(mOutsets); - return mOverscanInsetsChanged || mContentInsetsChanged || mVisibleInsetsChanged - || mOutsetsChanged; + return mOverscanInsetsChanged || mContentInsetsChanged || mVisibleInsetsChanged; } public DisplayContent getDisplayContent() { @@ -1486,7 +1463,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { final Rect contentInsets = mLastContentInsets; final Rect visibleInsets = mLastVisibleInsets; final Rect stableInsets = mLastStableInsets; - final Rect outsets = mLastOutsets; final boolean reportDraw = mWinAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING; final Configuration newConfig = configChanged ? mConfiguration : null; if (mAttrs.type != WindowManager.LayoutParams.TYPE_APPLICATION_STARTING @@ -1497,7 +1473,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { public void run() { try { mClient.resized(frame, overscanInsets, contentInsets, - visibleInsets, stableInsets, outsets, reportDraw, newConfig); + visibleInsets, stableInsets, reportDraw, newConfig); } catch (RemoteException e) { // Not a remote call, RemoteException won't be raised. } @@ -1505,7 +1481,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { }); } else { mClient.resized(frame, overscanInsets, contentInsets, visibleInsets, stableInsets, - outsets, reportDraw, newConfig); + reportDraw, newConfig); } //TODO (multidisplay): Accessibility supported only for the default display. @@ -1518,7 +1494,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { mContentInsetsChanged = false; mVisibleInsetsChanged = false; mStableInsetsChanged = false; - mOutsetsChanged = false; mWinAnimator.mSurfaceResized = false; } catch (RemoteException e) { mOrientationChanging = false; @@ -1680,22 +1655,17 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.println(); pw.print(prefix); pw.print(" decor="); mDecorFrame.printShortString(pw); pw.println(); - pw.print(prefix); pw.print(" outset="); mOutsetFrame.printShortString(pw); - pw.println(); pw.print(prefix); pw.print("Cur insets: overscan="); mOverscanInsets.printShortString(pw); pw.print(" content="); mContentInsets.printShortString(pw); pw.print(" visible="); mVisibleInsets.printShortString(pw); pw.print(" stable="); mStableInsets.printShortString(pw); - pw.print(" outsets="); mOutsets.printShortString(pw); pw.println(); pw.print(prefix); pw.print("Lst insets: overscan="); mLastOverscanInsets.printShortString(pw); pw.print(" content="); mLastContentInsets.printShortString(pw); pw.print(" visible="); mLastVisibleInsets.printShortString(pw); pw.print(" stable="); mLastStableInsets.printShortString(pw); - pw.print(" physical="); mLastOutsets.printShortString(pw); - pw.print(" outset="); mLastOutsets.printShortString(pw); pw.println(); } pw.print(prefix); pw.print(mWinAnimator); pw.println(":"); diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java index 771c3c85d2f5..66092fcc97c4 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java @@ -47,8 +47,8 @@ public final class BridgeWindow implements IWindow { } @Override - public void resized(Rect rect, Rect rect2, Rect rect3, Rect rect4, Rect rect5, Rect rect6, - boolean b, Configuration configuration) throws RemoteException { + public void resized(Rect rect, Rect rect2, Rect rect3, Rect rect4, Rect rect5, boolean b, + Configuration configuration) throws RemoteException { // pass for now. } -- 2.11.0