diff options
| author | Michael Kolb <kolby@google.com> | 2014-04-16 22:51:32 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-04-16 22:51:33 +0000 |
| commit | cc9d2766726a1335ed178b4fdcea7ee2ba59b152 (patch) | |
| tree | de7303ab01dd8e26880d499257f362b00a39b1a8 /core/java/android/view | |
| parent | e731a4ed3a0c7fa4d1e151f029a18c26091bceb1 (diff) | |
| parent | e5244b5638535964103ca1dfc867442a64243db1 (diff) | |
| download | frameworks_base-cc9d2766726a1335ed178b4fdcea7ee2ba59b152.zip frameworks_base-cc9d2766726a1335ed178b4fdcea7ee2ba59b152.tar.gz frameworks_base-cc9d2766726a1335ed178b4fdcea7ee2ba59b152.tar.bz2 | |
Merge "Add isRound to WindowInsets"
Diffstat (limited to 'core/java/android/view')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 14 | ||||
| -rw-r--r-- | core/java/android/view/WindowInsets.java | 27 |
2 files changed, 32 insertions, 9 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index ef22def..eec4354 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1171,6 +1171,11 @@ public final class ViewRootImpl implements ViewParent, m.preTranslate(-attachInfo.mWindowLeft, -attachInfo.mWindowTop); } + void dispatchApplyInsets(View host) { + mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets); + host.dispatchApplyWindowInsets(new WindowInsets(mFitSystemWindowsInsets)); + } + private void performTraversals() { // cache mView since it is used so much below... final View host = mView; @@ -1257,8 +1262,7 @@ public final class ViewRootImpl implements ViewParent, } host.dispatchAttachedToWindow(attachInfo, 0); attachInfo.mTreeObserver.dispatchOnWindowAttachedChange(true); - mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets); - host.fitSystemWindows(mFitSystemWindowsInsets); + dispatchApplyInsets(host); //Log.i(TAG, "Screen on initialized: " + attachInfo.mKeepScreenOn); } else { @@ -1383,9 +1387,8 @@ public final class ViewRootImpl implements ViewParent, if (mFitSystemWindowsRequested) { mFitSystemWindowsRequested = false; - mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets); mLastOverscanRequested = mAttachInfo.mOverscanRequested; - host.fitSystemWindows(mFitSystemWindowsInsets); + dispatchApplyInsets(host); if (mLayoutRequested) { // Short-circuit catching a new layout request here, so // we don't need to go through two layout passes when things @@ -1559,8 +1562,7 @@ public final class ViewRootImpl implements ViewParent, mLastSystemUiVisibility = mAttachInfo.mSystemUiVisibility; mLastOverscanRequested = mAttachInfo.mOverscanRequested; mFitSystemWindowsRequested = false; - mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets); - host.fitSystemWindows(mFitSystemWindowsInsets); + dispatchApplyInsets(host); } if (visibleInsetsChanged) { mAttachInfo.mVisibleInsets.set(mPendingVisibleInsets); diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java index cdfcb43..f8cc793 100644 --- a/core/java/android/view/WindowInsets.java +++ b/core/java/android/view/WindowInsets.java @@ -33,6 +33,7 @@ public class WindowInsets { private Rect mSystemWindowInsets; private Rect mWindowDecorInsets; private Rect mTempRect; + private boolean mIsRound; private static final Rect EMPTY_RECT = new Rect(0, 0, 0, 0); @@ -46,8 +47,14 @@ public class WindowInsets { /** @hide */ public WindowInsets(Rect systemWindowInsets, Rect windowDecorInsets) { + this(systemWindowInsets, windowDecorInsets, false); + } + + /** @hide */ + public WindowInsets(Rect systemWindowInsets, Rect windowDecorInsets, boolean isRound) { mSystemWindowInsets = systemWindowInsets; mWindowDecorInsets = windowDecorInsets; + mIsRound = isRound; } /** @@ -58,12 +65,12 @@ public class WindowInsets { public WindowInsets(WindowInsets src) { mSystemWindowInsets = src.mSystemWindowInsets; mWindowDecorInsets = src.mWindowDecorInsets; + mIsRound = src.mIsRound; } /** @hide */ public WindowInsets(Rect systemWindowInsets) { - mSystemWindowInsets = systemWindowInsets; - mWindowDecorInsets = EMPTY_RECT; + this(systemWindowInsets, EMPTY_RECT); } /** @@ -220,6 +227,20 @@ public class WindowInsets { return hasSystemWindowInsets() || hasWindowDecorInsets(); } + /** + * Returns true if the associated window has a round shape. + * + * <p>A round window's left, top, right and bottom edges reach all the way to the + * associated edges of the window but the corners may not be visible. Views responding + * to round insets should take care to not lay out critical elements within the corners + * where they may not be accessible.</p> + * + * @return True if the window is round + */ + public boolean isRound() { + return mIsRound; + } + public WindowInsets cloneWithSystemWindowInsetsConsumed() { final WindowInsets result = new WindowInsets(this); result.mSystemWindowInsets = new Rect(0, 0, 0, 0); @@ -273,6 +294,6 @@ public class WindowInsets { @Override public String toString() { return "WindowInsets{systemWindowInsets=" + mSystemWindowInsets + " windowDecorInsets=" + - mWindowDecorInsets + "}"; + mWindowDecorInsets + (isRound() ? "round}" : "}"); } } |
