diff options
author | Filip Gruszczynski <gruszczy@google.com> | 2015-06-30 15:03:30 -0700 |
---|---|---|
committer | Filip Gruszczynski <gruszczy@google.com> | 2015-06-30 15:03:30 -0700 |
commit | 2987f616faca534a792686a53304c9932634310c (patch) | |
tree | d8c9e6872ab64f1519f6cdd82d720fa549f586f0 | |
parent | 1aaad610dfc7445ec29fd906974677515c3a9f87 (diff) | |
parent | 300ccf4ab53e074fa5dfbac7c8eb7a4818b3ff74 (diff) | |
download | frameworks_base-2987f616faca534a792686a53304c9932634310c.tar.gz frameworks_base-2987f616faca534a792686a53304c9932634310c.tar.bz2 frameworks_base-2987f616faca534a792686a53304c9932634310c.zip |
resolved conflicts for merge of 300ccf4a to mnc-dev
Change-Id: Ia315e314bfde0c066a2c25d93f8cbdc71fee0a14
7 files changed, 45 insertions, 21 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 8952807f9a0..bbdb0e192af 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -649,7 +649,7 @@ public abstract class WallpaperService extends Service { com.android.internal.R.style.Animation_Wallpaper; mInputChannel = new InputChannel(); if (mSession.addToDisplay(mWindow, mWindow.mSeq, mLayout, View.VISIBLE, - Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets, + Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets, mOutsets, mInputChannel) < 0) { Log.w(TAG, "Failed to add window while updating wallpaper surface."); return; diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 19253dd47f4..73b4a6ed8ea 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -40,7 +40,7 @@ interface IWindowSession { out InputChannel outInputChannel); int addToDisplay(IWindow window, int seq, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, out Rect outContentInsets, - out Rect outStableInsets, out InputChannel outInputChannel); + out Rect outStableInsets, out Rect outOutsets, out InputChannel outInputChannel); int addWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs, in int viewVisibility, out Rect outContentInsets, out Rect outStableInsets); int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs, diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 8b57d969f23..6d0d7886fbe 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -531,7 +531,8 @@ public final class ViewRootImpl implements ViewParent, collectViewAttributes(); res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes, getHostVisibility(), mDisplay.getDisplayId(), - mAttachInfo.mContentInsets, mAttachInfo.mStableInsets, mInputChannel); + mAttachInfo.mContentInsets, mAttachInfo.mStableInsets, + mAttachInfo.mOutsets, mInputChannel); } catch (RemoteException e) { mAdded = false; mView = null; @@ -1590,6 +1591,7 @@ public final class ViewRootImpl implements ViewParent, + " content=" + mPendingContentInsets.toShortString() + " visible=" + mPendingVisibleInsets.toShortString() + " visible=" + mPendingStableInsets.toShortString() + + " outsets=" + mPendingOutsets.toShortString() + " surface=" + mSurface); if (mPendingConfiguration.seq != 0) { diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index ca5f5ad02dc..eed917453b7 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -879,13 +879,15 @@ public interface WindowManagerPolicy { * be correct. * * @param attrs The LayoutParams of the window. + * @param rotation Rotation of the display. * @param outContentInsets The areas covered by system windows, expressed as positive insets. * @param outStableInsets The areas covered by stable system windows irrespective of their * current visibility. Expressed as positive insets. + * @param outOutsets The areas that are not real display, but we would like to treat as such. * */ - public void getInsetHintLw(WindowManager.LayoutParams attrs, Rect outContentInsets, - Rect outStableInsets); + public void getInsetHintLw(WindowManager.LayoutParams attrs, int rotation, + Rect outContentInsets, Rect outStableInsets, Rect outOutsets); /** * Called when layout of the windows is finished. After this function has diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 764e4d3da00..689141a89f1 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -549,6 +549,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { Display mDisplay; + private int mDisplayRotation; + int mLandscapeRotation = 0; // default landscape rotation int mSeascapeRotation = 0; // "other" landscape rotation, 180 degrees from mLandscapeRotation int mPortraitRotation = 0; // default portrait rotation @@ -3304,12 +3306,28 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override - public void getInsetHintLw(WindowManager.LayoutParams attrs, Rect outContentInsets, - Rect outStableInsets) { + public void getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation, + Rect outContentInsets, Rect outStableInsets, Rect outOutsets) { final int fl = PolicyControl.getWindowFlags(null, attrs); final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs); final int systemUiVisibility = (sysuiVis | attrs.subtreeSystemUiVisibility); + final boolean useOutsets = outOutsets != null && shouldUseOutsets(attrs, fl); + if (useOutsets) { + int outset = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources()); + if (outset > 0) { + if (displayRotation == Surface.ROTATION_0) { + outOutsets.bottom += outset; + } else if (displayRotation == Surface.ROTATION_90) { + outOutsets.right += outset; + } else if (displayRotation == Surface.ROTATION_180) { + outOutsets.top += outset; + } else if (displayRotation == Surface.ROTATION_270) { + outOutsets.left += outset; + } + } + } + if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { int availRight, availBottom; @@ -3349,10 +3367,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { outStableInsets.setEmpty(); } + private boolean shouldUseOutsets(WindowManager.LayoutParams attrs, int fl) { + return attrs.type == TYPE_WALLPAPER || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0; + } + /** {@inheritDoc} */ @Override public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight, int displayRotation) { + mDisplayRotation = displayRotation; final int overscanLeft, overscanTop, overscanRight, overscanBottom; if (isDefaultDisplay) { switch (displayRotation) { @@ -4139,19 +4163,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { // need to provide information to the clients that want to pretend that you can draw there. // We only want to apply outsets to certain types of windows. For example, we never want to // apply the outsets to floating dialogs, because they wouldn't make sense there. - final boolean useOutsets = attrs.type == TYPE_WALLPAPER - || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN - | WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0; + final boolean useOutsets = shouldUseOutsets(attrs, fl); if (isDefaultDisplay && useOutsets) { osf = mTmpOutsetFrame; osf.set(cf.left, cf.top, cf.right, cf.bottom); int outset = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources()); if (outset > 0) { - int rotation = Surface.ROTATION_0; - try { - rotation = mWindowManager.getRotation(); - } catch (RemoteException e) { - } + int rotation = mDisplayRotation; if (rotation == Surface.ROTATION_0) { osf.bottom += outset; } else if (rotation == Surface.ROTATION_90) { diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index e9c5ac7033b..a8ba0f9ce6d 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -158,15 +158,15 @@ final class Session extends IWindowSession.Stub int viewVisibility, Rect outContentInsets, Rect outStableInsets, InputChannel outInputChannel) { return addToDisplay(window, seq, attrs, viewVisibility, Display.DEFAULT_DISPLAY, - outContentInsets, outStableInsets, outInputChannel); + outContentInsets, outStableInsets, null /* outOutsets */, outInputChannel); } @Override public int addToDisplay(IWindow window, int seq, WindowManager.LayoutParams attrs, int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets, - InputChannel outInputChannel) { + Rect outOutsets, InputChannel outInputChannel) { return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId, - outContentInsets, outStableInsets, outInputChannel); + outContentInsets, outStableInsets, outOutsets, outInputChannel); } @Override @@ -180,7 +180,7 @@ final class Session extends IWindowSession.Stub public int addToDisplayWithoutInputChannel(IWindow window, int seq, WindowManager.LayoutParams attrs, int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets) { return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId, - outContentInsets, outStableInsets, null); + outContentInsets, outStableInsets, null /* outOutsets */, null); } public void remove(IWindow window) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index b285b663bd1..88a19778d46 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2357,7 +2357,8 @@ public class WindowManagerService extends IWindowManager.Stub public int addWindow(Session session, IWindow client, int seq, WindowManager.LayoutParams attrs, int viewVisibility, int displayId, - Rect outContentInsets, Rect outStableInsets, InputChannel outInputChannel) { + Rect outContentInsets, Rect outStableInsets, Rect outOutsets, + InputChannel outInputChannel) { int[] appOp = new int[1]; int res = mPolicy.checkAddPermission(attrs, appOp); if (res != WindowManagerGlobal.ADD_OKAY) { @@ -2594,7 +2595,8 @@ public class WindowManagerService extends IWindowManager.Stub winAnimator.mEnteringAnimation = true; if (displayContent.isDefaultDisplay) { - mPolicy.getInsetHintLw(win.mAttrs, outContentInsets, outStableInsets); + mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets, + outOutsets); } else { outContentInsets.setEmpty(); outStableInsets.setEmpty(); |