Merge "Revert "Fix issue in attached layouting"" into qt-dev
am: 0a510f8bbf
Change-Id: If31e0ec393905ba24e26af0d7e1f035b4fd813ab
This commit is contained in:
@@ -28,7 +28,6 @@ import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
|
|||||||
import static android.view.InsetsState.TYPE_TOP_BAR;
|
import static android.view.InsetsState.TYPE_TOP_BAR;
|
||||||
import static android.view.InsetsState.TYPE_TOP_GESTURES;
|
import static android.view.InsetsState.TYPE_TOP_GESTURES;
|
||||||
import static android.view.InsetsState.TYPE_TOP_TAPPABLE_ELEMENT;
|
import static android.view.InsetsState.TYPE_TOP_TAPPABLE_ELEMENT;
|
||||||
import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
|
|
||||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
||||||
import static android.view.ViewRootImpl.NEW_INSETS_MODE_NONE;
|
import static android.view.ViewRootImpl.NEW_INSETS_MODE_NONE;
|
||||||
import static android.view.WindowManager.INPUT_CONSUMER_NAVIGATION;
|
import static android.view.WindowManager.INPUT_CONSUMER_NAVIGATION;
|
||||||
@@ -1231,7 +1230,7 @@ public class DisplayPolicy {
|
|||||||
final boolean screenDecor = (pfl & PRIVATE_FLAG_IS_SCREEN_DECOR) != 0;
|
final boolean screenDecor = (pfl & PRIVATE_FLAG_IS_SCREEN_DECOR) != 0;
|
||||||
|
|
||||||
if (layoutInScreenAndInsetDecor && !screenDecor) {
|
if (layoutInScreenAndInsetDecor && !screenDecor) {
|
||||||
if ((sysUiVis & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0) {
|
if ((sysUiVis & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0) {
|
||||||
outFrame.set(displayFrames.mUnrestricted);
|
outFrame.set(displayFrames.mUnrestricted);
|
||||||
} else {
|
} else {
|
||||||
outFrame.set(displayFrames.mRestricted);
|
outFrame.set(displayFrames.mRestricted);
|
||||||
@@ -1291,7 +1290,7 @@ public class DisplayPolicy {
|
|||||||
&& attrs.height == MATCH_PARENT && attrs.width == MATCH_PARENT;
|
&& attrs.height == MATCH_PARENT && attrs.width == MATCH_PARENT;
|
||||||
if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
|
if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
|
||||||
|| forceWindowDrawsBarBackgrounds) {
|
|| forceWindowDrawsBarBackgrounds) {
|
||||||
impliedFlags |= SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
|
impliedFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
|
||||||
impliedFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
impliedFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
||||||
}
|
}
|
||||||
return impliedFlags;
|
return impliedFlags;
|
||||||
@@ -1723,20 +1722,6 @@ public class DisplayPolicy {
|
|||||||
of.set(displayFrames.mDock);
|
of.set(displayFrames.mDock);
|
||||||
df.set(displayFrames.mDock);
|
df.set(displayFrames.mDock);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// In case we forced the window to draw behind the navigation bar, restrict df/of to
|
|
||||||
// DF.RestrictedOverscan to simulate old compat behavior.
|
|
||||||
final Rect parentDisplayFrame = attached.getDisplayFrameLw();
|
|
||||||
final Rect parentOverscan = attached.getOverscanFrameLw();
|
|
||||||
final WindowManager.LayoutParams attachedAttrs = attached.mAttrs;
|
|
||||||
if ((attachedAttrs.privateFlags & PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS) != 0
|
|
||||||
&& (attachedAttrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0
|
|
||||||
&& (attachedAttrs.systemUiVisibility
|
|
||||||
& SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0) {
|
|
||||||
parentOverscan.intersect(displayFrames.mRestrictedOverscan);
|
|
||||||
parentDisplayFrame.intersect(displayFrames.mRestrictedOverscan);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The effective display frame of the attached window depends on whether it is taking
|
// The effective display frame of the attached window depends on whether it is taking
|
||||||
// care of insetting its content. If not, we need to use the parent's content frame so
|
// care of insetting its content. If not, we need to use the parent's content frame so
|
||||||
// that the entire window is positioned within that content. Otherwise we can use the
|
// that the entire window is positioned within that content. Otherwise we can use the
|
||||||
@@ -1748,7 +1733,7 @@ public class DisplayPolicy {
|
|||||||
// setting {@link WindowManager.LayoutParams#FLAG_LAYOUT_ATTACHED_IN_DECOR} flag.
|
// setting {@link WindowManager.LayoutParams#FLAG_LAYOUT_ATTACHED_IN_DECOR} flag.
|
||||||
// Otherwise, use the overscan frame.
|
// Otherwise, use the overscan frame.
|
||||||
cf.set((fl & FLAG_LAYOUT_ATTACHED_IN_DECOR) != 0
|
cf.set((fl & FLAG_LAYOUT_ATTACHED_IN_DECOR) != 0
|
||||||
? attached.getContentFrameLw() : parentOverscan);
|
? attached.getContentFrameLw() : attached.getOverscanFrameLw());
|
||||||
} else {
|
} else {
|
||||||
// If the window is resizing, then we want to base the content frame on our attached
|
// If the window is resizing, then we want to base the content frame on our attached
|
||||||
// content frame to resize...however, things can be tricky if the attached window is
|
// content frame to resize...however, things can be tricky if the attached window is
|
||||||
@@ -1762,8 +1747,8 @@ public class DisplayPolicy {
|
|||||||
cf.intersectUnchecked(displayFrames.mContent);
|
cf.intersectUnchecked(displayFrames.mContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
df.set(insetDecors ? parentDisplayFrame : cf);
|
df.set(insetDecors ? attached.getDisplayFrameLw() : cf);
|
||||||
of.set(insetDecors ? parentOverscan : cf);
|
of.set(insetDecors ? attached.getOverscanFrameLw() : cf);
|
||||||
vf.set(attached.getVisibleFrameLw());
|
vf.set(attached.getVisibleFrameLw());
|
||||||
}
|
}
|
||||||
// The LAYOUT_IN_SCREEN flag is used to determine whether the attached window should be
|
// The LAYOUT_IN_SCREEN flag is used to determine whether the attached window should be
|
||||||
@@ -1971,7 +1956,7 @@ public class DisplayPolicy {
|
|||||||
of.set(displayFrames.mOverscan);
|
of.set(displayFrames.mOverscan);
|
||||||
df.set(displayFrames.mOverscan);
|
df.set(displayFrames.mOverscan);
|
||||||
pf.set(displayFrames.mOverscan);
|
pf.set(displayFrames.mOverscan);
|
||||||
} else if ((sysUiFl & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0
|
} else if ((sysUiFl & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0
|
||||||
&& (type >= FIRST_APPLICATION_WINDOW && type <= LAST_SUB_WINDOW
|
&& (type >= FIRST_APPLICATION_WINDOW && type <= LAST_SUB_WINDOW
|
||||||
|| type == TYPE_VOLUME_OVERLAY)) {
|
|| type == TYPE_VOLUME_OVERLAY)) {
|
||||||
// Asking for layout as if the nav bar is hidden, lets the application
|
// Asking for layout as if the nav bar is hidden, lets the application
|
||||||
@@ -2021,7 +2006,7 @@ public class DisplayPolicy {
|
|||||||
}
|
}
|
||||||
} else if (layoutInScreen || (sysUiFl
|
} else if (layoutInScreen || (sysUiFl
|
||||||
& (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
& (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
| SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)) != 0) {
|
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)) != 0) {
|
||||||
if (DEBUG_LAYOUT) Slog.v(TAG, "layoutWindowLw(" + attrs.getTitle()
|
if (DEBUG_LAYOUT) Slog.v(TAG, "layoutWindowLw(" + attrs.getTitle()
|
||||||
+ "): IN_SCREEN");
|
+ "): IN_SCREEN");
|
||||||
// A window that has requested to fill the entire screen just
|
// A window that has requested to fill the entire screen just
|
||||||
@@ -2066,7 +2051,7 @@ public class DisplayPolicy {
|
|||||||
of.set(displayFrames.mOverscan);
|
of.set(displayFrames.mOverscan);
|
||||||
df.set(displayFrames.mOverscan);
|
df.set(displayFrames.mOverscan);
|
||||||
pf.set(displayFrames.mOverscan);
|
pf.set(displayFrames.mOverscan);
|
||||||
} else if ((sysUiFl & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0
|
} else if ((sysUiFl & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0
|
||||||
&& (type == TYPE_STATUS_BAR
|
&& (type == TYPE_STATUS_BAR
|
||||||
|| type == TYPE_TOAST
|
|| type == TYPE_TOAST
|
||||||
|| type == TYPE_DOCK_DIVIDER
|
|| type == TYPE_DOCK_DIVIDER
|
||||||
|
|||||||
Reference in New Issue
Block a user