Add new window type TYPE_DRAWN_APPLICATION
This type behaves like a normal TYPE_APPLICATION, except that WM will always wait for it to be drawn before starting a transition. WM always waits for TYPE_BASE_APPLICATION (main window), but for TYPE_APPLICATION, it only waits if the window relayouts to visible and gets a surface before the main window is drawn. If main window itself is ready very fast, transition could start without the other window. bug: 30830849 Change-Id: Ife71a9812db7c8eba6ee4ead10ce4f31d9e93b40
This commit is contained in:
@@ -43913,6 +43913,7 @@ package android.view {
|
||||
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
|
||||
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
|
||||
field public static final int TYPE_CHANGED = 2; // 0x2
|
||||
field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
|
||||
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
|
||||
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
|
||||
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
|
||||
|
||||
@@ -47093,6 +47093,7 @@ package android.view {
|
||||
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
|
||||
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
|
||||
field public static final int TYPE_CHANGED = 2; // 0x2
|
||||
field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
|
||||
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
|
||||
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
|
||||
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
|
||||
|
||||
@@ -43994,6 +43994,7 @@ package android.view {
|
||||
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
|
||||
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
|
||||
field public static final int TYPE_CHANGED = 2; // 0x2
|
||||
field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
|
||||
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
|
||||
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
|
||||
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
|
||||
|
||||
@@ -221,6 +221,7 @@ public interface WindowManager extends ViewManager {
|
||||
* @see #TYPE_BASE_APPLICATION
|
||||
* @see #TYPE_APPLICATION
|
||||
* @see #TYPE_APPLICATION_STARTING
|
||||
* @see #TYPE_DRAWN_APPLICATION
|
||||
* @see #TYPE_APPLICATION_PANEL
|
||||
* @see #TYPE_APPLICATION_MEDIA
|
||||
* @see #TYPE_APPLICATION_SUB_PANEL
|
||||
@@ -244,6 +245,7 @@ public interface WindowManager extends ViewManager {
|
||||
@ViewDebug.IntToString(from = TYPE_BASE_APPLICATION, to = "TYPE_BASE_APPLICATION"),
|
||||
@ViewDebug.IntToString(from = TYPE_APPLICATION, to = "TYPE_APPLICATION"),
|
||||
@ViewDebug.IntToString(from = TYPE_APPLICATION_STARTING, to = "TYPE_APPLICATION_STARTING"),
|
||||
@ViewDebug.IntToString(from = TYPE_DRAWN_APPLICATION, to = "TYPE_DRAWN_APPLICATION"),
|
||||
@ViewDebug.IntToString(from = TYPE_APPLICATION_PANEL, to = "TYPE_APPLICATION_PANEL"),
|
||||
@ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA, to = "TYPE_APPLICATION_MEDIA"),
|
||||
@ViewDebug.IntToString(from = TYPE_APPLICATION_SUB_PANEL, to = "TYPE_APPLICATION_SUB_PANEL"),
|
||||
@@ -314,6 +316,13 @@ public interface WindowManager extends ViewManager {
|
||||
*/
|
||||
public static final int TYPE_APPLICATION_STARTING = 3;
|
||||
|
||||
/**
|
||||
* Window type: a variation on TYPE_APPLICATION that ensures the window
|
||||
* manager will wait for this window to be drawn before the app is shown.
|
||||
* In multiuser systems shows only on the owning user's window.
|
||||
*/
|
||||
public static final int TYPE_DRAWN_APPLICATION = 4;
|
||||
|
||||
/**
|
||||
* End of types of application windows.
|
||||
*/
|
||||
|
||||
@@ -101,6 +101,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATIO
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
|
||||
import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL;
|
||||
|
||||
/** @hide */
|
||||
@@ -1860,7 +1861,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
}
|
||||
final WindowManager.LayoutParams attrs = mWindow.getAttributes();
|
||||
final boolean isApplication = attrs.type == TYPE_BASE_APPLICATION ||
|
||||
attrs.type == TYPE_APPLICATION;
|
||||
attrs.type == TYPE_APPLICATION || attrs.type == TYPE_DRAWN_APPLICATION;
|
||||
// Only a non floating application window on one of the allowed workspaces can get a caption
|
||||
if (!mWindow.isFloating() && isApplication && StackId.hasWindowDecor(mStackId)) {
|
||||
// Dependent on the brightness of the used title we either use the
|
||||
|
||||
@@ -3568,6 +3568,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL:
|
||||
case WindowManager.LayoutParams.TYPE_BASE_APPLICATION:
|
||||
case WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION:
|
||||
case WindowManager.LayoutParams.TYPE_PHONE:
|
||||
case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
|
||||
case WindowManager.LayoutParams.TYPE_TOAST:
|
||||
|
||||
@@ -348,6 +348,7 @@ final class AccessibilityController {
|
||||
}
|
||||
switch (type) {
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION:
|
||||
case WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION:
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
|
||||
case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
|
||||
|
||||
@@ -624,8 +624,8 @@ class Task implements DimLayer.DimLayerUser {
|
||||
//
|
||||
// As we use this flag as a hint to freeze surface boundary updates,
|
||||
// we'd like to only apply this to TYPE_BASE_APPLICATION,
|
||||
// windows of TYPE_APPLICATION like dialogs, could appear
|
||||
// to not be drag resizing while they resize, but we'd
|
||||
// windows of TYPE_APPLICATION (or TYPE_DRAWN_APPLICATION) like dialogs,
|
||||
// could appear to not be drag resizing while they resize, but we'd
|
||||
// still like to manipulate their frame to update crop, etc...
|
||||
//
|
||||
// Anyway we don't need to synchronize position and content updates for these
|
||||
|
||||
@@ -191,6 +191,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
|
||||
@@ -5886,7 +5887,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
if (w.isDrawnLw()) {
|
||||
if (w.mAttrs.type == TYPE_BOOT_PROGRESS) {
|
||||
haveBootMsg = true;
|
||||
} else if (w.mAttrs.type == TYPE_APPLICATION) {
|
||||
} else if (w.mAttrs.type == TYPE_APPLICATION
|
||||
|| w.mAttrs.type == TYPE_DRAWN_APPLICATION) {
|
||||
haveApp = true;
|
||||
} else if (w.mAttrs.type == TYPE_WALLPAPER) {
|
||||
haveWallpaper = true;
|
||||
|
||||
@@ -87,6 +87,7 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
|
||||
@@ -1289,7 +1290,8 @@ final class WindowState implements WindowManagerPolicy.WindowState {
|
||||
final boolean isViewVisible = (mAppToken == null || !mAppToken.clientHidden)
|
||||
&& (mViewVisibility == View.VISIBLE) && !mWindowRemovalAllowed;
|
||||
return (isOnScreenIgnoringKeyguard() && (!visibleOnly || isViewVisible)
|
||||
|| mWinAnimator.mAttrType == TYPE_BASE_APPLICATION)
|
||||
|| mWinAnimator.mAttrType == TYPE_BASE_APPLICATION
|
||||
|| mWinAnimator.mAttrType == TYPE_DRAWN_APPLICATION)
|
||||
&& !mAnimatingExit && !mDestroying;
|
||||
}
|
||||
|
||||
@@ -2925,12 +2927,13 @@ final class WindowState implements WindowManagerPolicy.WindowState {
|
||||
// for only child windows (as the main window is handled by window preservation)
|
||||
// and the big surface.
|
||||
//
|
||||
// Though windows of TYPE_APPLICATION (as opposed to TYPE_BASE_APPLICATION)
|
||||
// are not children in the sense of an attached window, we also want to replace
|
||||
// them at such phases, as they won't be covered by window preservation,
|
||||
// and in general we expect them to return following relaunch.
|
||||
// Though windows of TYPE_APPLICATION or TYPE_DRAWN_APPLICATION (as opposed to
|
||||
// TYPE_BASE_APPLICATION) are not children in the sense of an attached window,
|
||||
// we also want to replace them at such phases, as they won't be covered by window
|
||||
// preservation, and in general we expect them to return following relaunch.
|
||||
boolean shouldBeReplacedWithChildren() {
|
||||
return isChildWindow() || mAttrs.type == TYPE_APPLICATION;
|
||||
return isChildWindow() || mAttrs.type == TYPE_APPLICATION
|
||||
|| mAttrs.type == TYPE_DRAWN_APPLICATION;
|
||||
}
|
||||
|
||||
public int getRotationAnimationHint() {
|
||||
|
||||
Reference in New Issue
Block a user