Show error dialogs over apps that dismiss keyguard
automerge: c08eab8 * commit 'c08eab81f30a3120ec0929d3508b4a78d498e1ff': Show error dialogs over apps that dismiss keyguard
This commit is contained in:
@@ -44,7 +44,6 @@ public final class InputWindowHandle {
|
|||||||
|
|
||||||
// Window layout params attributes. (WindowManager.LayoutParams)
|
// Window layout params attributes. (WindowManager.LayoutParams)
|
||||||
public int layoutParamsFlags;
|
public int layoutParamsFlags;
|
||||||
public int layoutParamsPrivateFlags;
|
|
||||||
public int layoutParamsType;
|
public int layoutParamsType;
|
||||||
|
|
||||||
// Dispatching timeout.
|
// Dispatching timeout.
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ class DragState {
|
|||||||
mDragWindowHandle.inputChannel = mServerChannel;
|
mDragWindowHandle.inputChannel = mServerChannel;
|
||||||
mDragWindowHandle.layer = getDragLayerLw();
|
mDragWindowHandle.layer = getDragLayerLw();
|
||||||
mDragWindowHandle.layoutParamsFlags = 0;
|
mDragWindowHandle.layoutParamsFlags = 0;
|
||||||
mDragWindowHandle.layoutParamsPrivateFlags = 0;
|
|
||||||
mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG;
|
mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG;
|
||||||
mDragWindowHandle.dispatchingTimeoutNanos =
|
mDragWindowHandle.dispatchingTimeoutNanos =
|
||||||
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
|
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public final class FakeWindowImpl implements WindowManagerPolicy.FakeWindow {
|
|||||||
|
|
||||||
public FakeWindowImpl(WindowManagerService service,
|
public FakeWindowImpl(WindowManagerService service,
|
||||||
Looper looper, InputEventReceiver.Factory inputEventReceiverFactory,
|
Looper looper, InputEventReceiver.Factory inputEventReceiverFactory,
|
||||||
String name, int windowType, int layoutParamsFlags, int layoutParamsPrivateFlags,
|
String name, int windowType, int layoutParamsFlags,
|
||||||
boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
|
boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
|
||||||
mService = service;
|
mService = service;
|
||||||
|
|
||||||
@@ -61,7 +61,6 @@ public final class FakeWindowImpl implements WindowManagerPolicy.FakeWindow {
|
|||||||
mWindowLayer = getLayerLw(windowType);
|
mWindowLayer = getLayerLw(windowType);
|
||||||
mWindowHandle.layer = mWindowLayer;
|
mWindowHandle.layer = mWindowLayer;
|
||||||
mWindowHandle.layoutParamsFlags = layoutParamsFlags;
|
mWindowHandle.layoutParamsFlags = layoutParamsFlags;
|
||||||
mWindowHandle.layoutParamsPrivateFlags = layoutParamsPrivateFlags;
|
|
||||||
mWindowHandle.layoutParamsType = windowType;
|
mWindowHandle.layoutParamsType = windowType;
|
||||||
mWindowHandle.dispatchingTimeoutNanos =
|
mWindowHandle.dispatchingTimeoutNanos =
|
||||||
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
|
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
|
||||||
|
|||||||
@@ -168,8 +168,8 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addInputWindowHandleLw(final InputWindowHandle inputWindowHandle,
|
private void addInputWindowHandleLw(final InputWindowHandle inputWindowHandle,
|
||||||
final WindowState child, int flags, int privateFlags, final int type,
|
final WindowState child, int flags, final int type, final boolean isVisible,
|
||||||
final boolean isVisible, final boolean hasFocus, final boolean hasWallpaper) {
|
final boolean hasFocus, final boolean hasWallpaper) {
|
||||||
// Add a window to our list of input windows.
|
// Add a window to our list of input windows.
|
||||||
inputWindowHandle.name = child.toString();
|
inputWindowHandle.name = child.toString();
|
||||||
final boolean modal = (flags & (WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
final boolean modal = (flags & (WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
||||||
@@ -184,7 +184,6 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
|
|||||||
child.getTouchableRegion(inputWindowHandle.touchableRegion);
|
child.getTouchableRegion(inputWindowHandle.touchableRegion);
|
||||||
}
|
}
|
||||||
inputWindowHandle.layoutParamsFlags = flags;
|
inputWindowHandle.layoutParamsFlags = flags;
|
||||||
inputWindowHandle.layoutParamsPrivateFlags = privateFlags;
|
|
||||||
inputWindowHandle.layoutParamsType = type;
|
inputWindowHandle.layoutParamsType = type;
|
||||||
inputWindowHandle.dispatchingTimeoutNanos = child.getInputDispatchingTimeoutNanos();
|
inputWindowHandle.dispatchingTimeoutNanos = child.getInputDispatchingTimeoutNanos();
|
||||||
inputWindowHandle.visible = isVisible;
|
inputWindowHandle.visible = isVisible;
|
||||||
@@ -298,15 +297,14 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
|
|||||||
final WindowState u = universeBackground.mWin;
|
final WindowState u = universeBackground.mWin;
|
||||||
if (u.mInputChannel != null && u.mInputWindowHandle != null) {
|
if (u.mInputChannel != null && u.mInputWindowHandle != null) {
|
||||||
addInputWindowHandleLw(u.mInputWindowHandle, u, u.mAttrs.flags,
|
addInputWindowHandleLw(u.mInputWindowHandle, u, u.mAttrs.flags,
|
||||||
u.mAttrs.privateFlags, u.mAttrs.type,
|
u.mAttrs.type, true, u == mInputFocus, false);
|
||||||
true, u == mInputFocus, false);
|
|
||||||
}
|
}
|
||||||
addedUniverse = true;
|
addedUniverse = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child.mWinAnimator != universeBackground) {
|
if (child.mWinAnimator != universeBackground) {
|
||||||
addInputWindowHandleLw(inputWindowHandle, child, flags, privateFlags, type,
|
addInputWindowHandleLw(inputWindowHandle, child, flags, type, isVisible,
|
||||||
isVisible, hasFocus, hasWallpaper);
|
hasFocus, hasWallpaper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
|
|||||||
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
|
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
|
||||||
|
|
||||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
|
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
|
||||||
|
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
|
||||||
import static com.android.server.wm.WindowManagerService.DEBUG_KEYGUARD;
|
import static com.android.server.wm.WindowManagerService.DEBUG_KEYGUARD;
|
||||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_UPDATE_ROTATION;
|
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_UPDATE_ROTATION;
|
||||||
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_MAY_CHANGE;
|
import static com.android.server.wm.WindowManagerService.LayoutFields.SET_WALLPAPER_MAY_CHANGE;
|
||||||
@@ -330,7 +331,9 @@ public class WindowAnimator {
|
|||||||
+ " anim=" + win.mWinAnimator.mAnimation);
|
+ " anim=" + win.mWinAnimator.mAnimation);
|
||||||
} else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
|
} else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
|
||||||
final boolean hideWhenLocked = !((win.mIsImWindow && showImeOverKeyguard) ||
|
final boolean hideWhenLocked = !((win.mIsImWindow && showImeOverKeyguard) ||
|
||||||
(appShowWhenLocked != null && appShowWhenLocked == win.mAppToken));
|
(appShowWhenLocked != null && (appShowWhenLocked == win.mAppToken ||
|
||||||
|
// Show error dialogs over apps that dismiss keyguard.
|
||||||
|
(win.mAttrs.privateFlags & PRIVATE_FLAG_SYSTEM_ERROR) != 0)));
|
||||||
if (((mForceHiding == KEYGUARD_ANIMATING_IN)
|
if (((mForceHiding == KEYGUARD_ANIMATING_IN)
|
||||||
&& (!winAnimator.isAnimating() || hideWhenLocked))
|
&& (!winAnimator.isAnimating() || hideWhenLocked))
|
||||||
|| ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
|
|| ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
|
||||||
|
|||||||
@@ -10791,9 +10791,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
|
boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
|
||||||
synchronized (mWindowMap) {
|
synchronized (mWindowMap) {
|
||||||
FakeWindowImpl fw = new FakeWindowImpl(this, looper, inputEventReceiverFactory,
|
FakeWindowImpl fw = new FakeWindowImpl(this, looper, inputEventReceiverFactory,
|
||||||
name, windowType,
|
name, windowType, layoutParamsFlags, canReceiveKeys, hasFocus, touchFullscreen);
|
||||||
layoutParamsFlags, layoutParamsPrivateFlags, canReceiveKeys,
|
|
||||||
hasFocus, touchFullscreen);
|
|
||||||
int i=0;
|
int i=0;
|
||||||
while (i<mFakeWindows.size()) {
|
while (i<mFakeWindows.size()) {
|
||||||
if (mFakeWindows.get(i).mWindowLayer <= fw.mWindowLayer) {
|
if (mFakeWindows.get(i).mWindowLayer <= fw.mWindowLayer) {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ static struct {
|
|||||||
jfieldID inputChannel;
|
jfieldID inputChannel;
|
||||||
jfieldID name;
|
jfieldID name;
|
||||||
jfieldID layoutParamsFlags;
|
jfieldID layoutParamsFlags;
|
||||||
jfieldID layoutParamsPrivateFlags;
|
|
||||||
jfieldID layoutParamsType;
|
jfieldID layoutParamsType;
|
||||||
jfieldID dispatchingTimeoutNanos;
|
jfieldID dispatchingTimeoutNanos;
|
||||||
jfieldID frameLeft;
|
jfieldID frameLeft;
|
||||||
@@ -113,8 +112,6 @@ bool NativeInputWindowHandle::updateInfo() {
|
|||||||
|
|
||||||
mInfo->layoutParamsFlags = env->GetIntField(obj,
|
mInfo->layoutParamsFlags = env->GetIntField(obj,
|
||||||
gInputWindowHandleClassInfo.layoutParamsFlags);
|
gInputWindowHandleClassInfo.layoutParamsFlags);
|
||||||
mInfo->layoutParamsPrivateFlags = env->GetIntField(obj,
|
|
||||||
gInputWindowHandleClassInfo.layoutParamsPrivateFlags);
|
|
||||||
mInfo->layoutParamsType = env->GetIntField(obj,
|
mInfo->layoutParamsType = env->GetIntField(obj,
|
||||||
gInputWindowHandleClassInfo.layoutParamsType);
|
gInputWindowHandleClassInfo.layoutParamsType);
|
||||||
mInfo->dispatchingTimeout = env->GetLongField(obj,
|
mInfo->dispatchingTimeout = env->GetLongField(obj,
|
||||||
@@ -251,9 +248,6 @@ int register_android_server_InputWindowHandle(JNIEnv* env) {
|
|||||||
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsFlags, clazz,
|
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsFlags, clazz,
|
||||||
"layoutParamsFlags", "I");
|
"layoutParamsFlags", "I");
|
||||||
|
|
||||||
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsPrivateFlags, clazz,
|
|
||||||
"layoutParamsPrivateFlags", "I");
|
|
||||||
|
|
||||||
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz,
|
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz,
|
||||||
"layoutParamsType", "I");
|
"layoutParamsType", "I");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user