Loading policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +52 −31 Original line number Diff line number Diff line Loading @@ -256,8 +256,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } }; // The current size of the screen. int mW, mH; // The current size of the screen; these may be different than (0,0)-(dw,dh) // if the status bar can't be hidden; in that case it effectively carves out // that area of the display from all other windows. int mScreenLeft, mScreenTop, mScreenWidth, mScreenHeight; // During layout, the current screen borders with all outer decoration // (status bar, input method dock) accounted for. int mCurLeft, mCurTop, mCurRight, mCurBottom; Loading Loading @@ -1316,10 +1318,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset) { final int fl = attrs.flags; if (mStatusBarCanHide && (fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { contentInset.set(mCurLeft, mCurTop, mW - mCurRight, mH - mCurBottom); contentInset.set(mCurLeft, mCurTop, (mScreenLeft+mScreenWidth) - mCurRight, (mScreenTop+mScreenHeight) - mCurBottom); } else { contentInset.setEmpty(); } Loading @@ -1327,8 +1330,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void beginLayoutLw(int displayWidth, int displayHeight) { mW = displayWidth; mH = displayHeight; mScreenLeft = mScreenTop = 0; mScreenWidth = displayWidth; mScreenHeight = displayHeight; mDockLeft = mContentLeft = mCurLeft = 0; mDockTop = mContentTop = mCurTop = 0; mDockRight = mContentRight = mCurRight = displayWidth; Loading @@ -1350,6 +1354,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { // If the status bar is hidden, we don't want to cause // windows behind it to scroll. final Rect r = mStatusBar.getFrameLw(); if (mStatusBarCanHide) { // Status bar may go away, so the screen area it occupies // is available to apps but just covering them when the // status bar is visible. if (mDockTop == r.top) mDockTop = r.bottom; else if (mDockBottom == r.bottom) mDockBottom = r.top; mContentTop = mCurTop = mDockTop; Loading @@ -1360,6 +1368,20 @@ public class PhoneWindowManager implements WindowManagerPolicy { + " mDockBottom=" + mDockBottom + " mContentBottom=" + mContentBottom + " mCurBottom=" + mCurBottom); } else { // Status bar can't go away; the part of the screen it // covers does not exist for anything behind it. if (mScreenTop == r.top) { mScreenTop = r.bottom; mScreenHeight -= (r.bottom-r.top); } else if ((mScreenHeight-mScreenTop) == r.bottom) { mScreenHeight -= (r.bottom-r.top); } mContentTop = mCurTop = mDockTop = mScreenTop; mContentBottom = mCurBottom = mDockBottom = mScreenTop+mScreenHeight; if (DEBUG_LAYOUT) Log.v(TAG, "Status bar: mScreenTop=" + mScreenTop + " mScreenHeight=" + mScreenHeight); } } } } Loading Loading @@ -1444,8 +1466,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { attrs.gravity = Gravity.BOTTOM; mDockLayer = win.getSurfaceLayer(); } else { if (mStatusBarCanHide && (fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { // This is the case for a normal activity window: we want it // to cover all of the screen space, and it can take care of Loading @@ -1456,10 +1477,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { // frame is the same as the one we are attached to. setAttachedWindowFrames(win, fl, sim, attached, true, pf, df, cf, vf); } else { pf.left = df.left = 0; pf.top = df.top = 0; pf.right = df.right = mW; pf.bottom = df.bottom = mH; pf.left = df.left = mScreenLeft; pf.top = df.top = mScreenTop; pf.right = df.right = mScreenLeft+mScreenWidth; pf.bottom = df.bottom = mScreenTop+mScreenHeight; if ((sim & SOFT_INPUT_MASK_ADJUST) != SOFT_INPUT_ADJUST_RESIZE) { cf.left = mDockLeft; cf.top = mDockTop; Loading @@ -1476,13 +1497,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { vf.right = mCurRight; vf.bottom = mCurBottom; } } else if (mStatusBarCanHide && (fl & FLAG_LAYOUT_IN_SCREEN) != 0) { } else if ((fl & FLAG_LAYOUT_IN_SCREEN) != 0) { // A window that has requested to fill the entire screen just // gets everything, period. pf.left = df.left = cf.left = 0; pf.top = df.top = cf.top = 0; pf.right = df.right = cf.right = mW; pf.bottom = df.bottom = cf.bottom = mH; pf.left = df.left = cf.left = mScreenLeft; pf.top = df.top = cf.top = mScreenTop; pf.right = df.right = cf.right = mScreenLeft+mScreenWidth; pf.bottom = df.bottom = cf.bottom = mScreenTop+mScreenHeight; vf.left = mCurLeft; vf.top = mCurTop; vf.right = mCurRight; Loading Loading @@ -1743,9 +1764,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { rect.union(w.getShownFrameLw()); } } final int insetw = mW/10; final int inseth = mH/10; if (rect.contains(insetw, inseth, mW-insetw, mH-inseth)) { final int insetw = mScreenWidth/10; final int inseth = mScreenHeight/10; if (rect.contains(insetw, inseth, mScreenWidth-insetw, mScreenHeight-inseth)) { // All of the status bar windows put together cover the // screen, so the app can't be seen. (Note this test doesn't // work if the rects of these windows are at off offsets or Loading Loading
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +52 −31 Original line number Diff line number Diff line Loading @@ -256,8 +256,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } }; // The current size of the screen. int mW, mH; // The current size of the screen; these may be different than (0,0)-(dw,dh) // if the status bar can't be hidden; in that case it effectively carves out // that area of the display from all other windows. int mScreenLeft, mScreenTop, mScreenWidth, mScreenHeight; // During layout, the current screen borders with all outer decoration // (status bar, input method dock) accounted for. int mCurLeft, mCurTop, mCurRight, mCurBottom; Loading Loading @@ -1316,10 +1318,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset) { final int fl = attrs.flags; if (mStatusBarCanHide && (fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { contentInset.set(mCurLeft, mCurTop, mW - mCurRight, mH - mCurBottom); contentInset.set(mCurLeft, mCurTop, (mScreenLeft+mScreenWidth) - mCurRight, (mScreenTop+mScreenHeight) - mCurBottom); } else { contentInset.setEmpty(); } Loading @@ -1327,8 +1330,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void beginLayoutLw(int displayWidth, int displayHeight) { mW = displayWidth; mH = displayHeight; mScreenLeft = mScreenTop = 0; mScreenWidth = displayWidth; mScreenHeight = displayHeight; mDockLeft = mContentLeft = mCurLeft = 0; mDockTop = mContentTop = mCurTop = 0; mDockRight = mContentRight = mCurRight = displayWidth; Loading @@ -1350,6 +1354,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { // If the status bar is hidden, we don't want to cause // windows behind it to scroll. final Rect r = mStatusBar.getFrameLw(); if (mStatusBarCanHide) { // Status bar may go away, so the screen area it occupies // is available to apps but just covering them when the // status bar is visible. if (mDockTop == r.top) mDockTop = r.bottom; else if (mDockBottom == r.bottom) mDockBottom = r.top; mContentTop = mCurTop = mDockTop; Loading @@ -1360,6 +1368,20 @@ public class PhoneWindowManager implements WindowManagerPolicy { + " mDockBottom=" + mDockBottom + " mContentBottom=" + mContentBottom + " mCurBottom=" + mCurBottom); } else { // Status bar can't go away; the part of the screen it // covers does not exist for anything behind it. if (mScreenTop == r.top) { mScreenTop = r.bottom; mScreenHeight -= (r.bottom-r.top); } else if ((mScreenHeight-mScreenTop) == r.bottom) { mScreenHeight -= (r.bottom-r.top); } mContentTop = mCurTop = mDockTop = mScreenTop; mContentBottom = mCurBottom = mDockBottom = mScreenTop+mScreenHeight; if (DEBUG_LAYOUT) Log.v(TAG, "Status bar: mScreenTop=" + mScreenTop + " mScreenHeight=" + mScreenHeight); } } } } Loading Loading @@ -1444,8 +1466,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { attrs.gravity = Gravity.BOTTOM; mDockLayer = win.getSurfaceLayer(); } else { if (mStatusBarCanHide && (fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { // This is the case for a normal activity window: we want it // to cover all of the screen space, and it can take care of Loading @@ -1456,10 +1477,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { // frame is the same as the one we are attached to. setAttachedWindowFrames(win, fl, sim, attached, true, pf, df, cf, vf); } else { pf.left = df.left = 0; pf.top = df.top = 0; pf.right = df.right = mW; pf.bottom = df.bottom = mH; pf.left = df.left = mScreenLeft; pf.top = df.top = mScreenTop; pf.right = df.right = mScreenLeft+mScreenWidth; pf.bottom = df.bottom = mScreenTop+mScreenHeight; if ((sim & SOFT_INPUT_MASK_ADJUST) != SOFT_INPUT_ADJUST_RESIZE) { cf.left = mDockLeft; cf.top = mDockTop; Loading @@ -1476,13 +1497,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { vf.right = mCurRight; vf.bottom = mCurBottom; } } else if (mStatusBarCanHide && (fl & FLAG_LAYOUT_IN_SCREEN) != 0) { } else if ((fl & FLAG_LAYOUT_IN_SCREEN) != 0) { // A window that has requested to fill the entire screen just // gets everything, period. pf.left = df.left = cf.left = 0; pf.top = df.top = cf.top = 0; pf.right = df.right = cf.right = mW; pf.bottom = df.bottom = cf.bottom = mH; pf.left = df.left = cf.left = mScreenLeft; pf.top = df.top = cf.top = mScreenTop; pf.right = df.right = cf.right = mScreenLeft+mScreenWidth; pf.bottom = df.bottom = cf.bottom = mScreenTop+mScreenHeight; vf.left = mCurLeft; vf.top = mCurTop; vf.right = mCurRight; Loading Loading @@ -1743,9 +1764,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { rect.union(w.getShownFrameLw()); } } final int insetw = mW/10; final int inseth = mH/10; if (rect.contains(insetw, inseth, mW-insetw, mH-inseth)) { final int insetw = mScreenWidth/10; final int inseth = mScreenHeight/10; if (rect.contains(insetw, inseth, mScreenWidth-insetw, mScreenHeight-inseth)) { // All of the status bar windows put together cover the // screen, so the app can't be seen. (Note this test doesn't // work if the rects of these windows are at off offsets or Loading