Disassociate system windows from apps
With the original logic, if an app creates a system window, when the user goes to home screen, the system window will be still there and become unable to receive input events, because the system window will be also changed to the stopped state with the app window, and the current logic of ViewRootImpl forbid a stopped window receiving input events. This change prevents assigning the token of the app window to system windows created by the app, so that when the app goes to the stopped state, its system windows won't be affected (can still receive input events). This change is related to the following changes:a5d29971f815ed2754a3c3672cd3f741725dedc3Bug: 24967303 Bug: https://code.google.com/p/android/issues/detail?id=189710 Change-Id: I515e47bafcf39a2b1bdf92f11f623bef8fb6263c
This commit is contained in:
committed by
Wale Ogunwale
parent
a636be6c9a
commit
20ebb4c2d4
@@ -578,7 +578,7 @@ public abstract class Window {
|
||||
void adjustLayoutParamsForSubWindow(WindowManager.LayoutParams wp) {
|
||||
CharSequence curTitle = wp.getTitle();
|
||||
if (wp.type >= WindowManager.LayoutParams.FIRST_SUB_WINDOW &&
|
||||
wp.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
|
||||
wp.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
|
||||
if (wp.token == null) {
|
||||
View decor = peekDecorView();
|
||||
if (decor != null) {
|
||||
@@ -588,25 +588,38 @@ public abstract class Window {
|
||||
if (curTitle == null || curTitle.length() == 0) {
|
||||
String title;
|
||||
if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA) {
|
||||
title="Media";
|
||||
title = "Media";
|
||||
} else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY) {
|
||||
title="MediaOvr";
|
||||
title = "MediaOvr";
|
||||
} else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) {
|
||||
title="Panel";
|
||||
title = "Panel";
|
||||
} else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL) {
|
||||
title="SubPanel";
|
||||
title = "SubPanel";
|
||||
} else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL) {
|
||||
title="AboveSubPanel";
|
||||
title = "AboveSubPanel";
|
||||
} else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG) {
|
||||
title="AtchDlg";
|
||||
title = "AtchDlg";
|
||||
} else {
|
||||
title=Integer.toString(wp.type);
|
||||
title = Integer.toString(wp.type);
|
||||
}
|
||||
if (mAppName != null) {
|
||||
title += ":" + mAppName;
|
||||
}
|
||||
wp.setTitle(title);
|
||||
}
|
||||
} else if (wp.type >= WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW &&
|
||||
wp.type <= WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) {
|
||||
// We don't set the app token to this system window because the life cycles should be
|
||||
// independent. If an app creates a system window and then the app goes to the stopped
|
||||
// state, the system window should not be affected (can still show and receive input
|
||||
// events).
|
||||
if (curTitle == null || curTitle.length() == 0) {
|
||||
String title = "Sys" + Integer.toString(wp.type);
|
||||
if (mAppName != null) {
|
||||
title += ":" + mAppName;
|
||||
}
|
||||
wp.setTitle(title);
|
||||
}
|
||||
} else {
|
||||
if (wp.token == null) {
|
||||
wp.token = mContainer == null ? mAppToken : mContainer.mAppToken;
|
||||
|
||||
Reference in New Issue
Block a user