Return the default touch mode for dead displays
Certain race conditions may lead to client code trying to manipulate (like adding an window) an already gone virtual display. This CL changes WMS#isInTouchMode to return the default touch mode in case the display passed as argument is already gone. Fix: 280671905 Test: atest FrameworksCoreTests Test: atest WmTests:WindowManagerServiceTests Test: atest CtsInputTestCases:android.input.cts.TouchModeTest Change-Id: Iea61f82ec1945ba0b65ce8af4896b5fb9923af6e
This commit is contained in:
@@ -3922,15 +3922,17 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|
||||
/**
|
||||
* Returns the touch mode state for the display id passed as argument.
|
||||
*
|
||||
* This method will return the default touch mode state (represented by
|
||||
* {@code com.android.internal.R.bool.config_defaultInTouchMode}) if the display passed as
|
||||
* argument is no longer registered in {@RootWindowContainer}).
|
||||
*/
|
||||
@Override // Binder call
|
||||
public boolean isInTouchMode(int displayId) {
|
||||
synchronized (mGlobalLock) {
|
||||
final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
|
||||
if (displayContent == null) {
|
||||
throw new IllegalStateException("Failed to retrieve the touch mode state for"
|
||||
+ "display {" + displayId + "}: display is not registered in "
|
||||
+ "WindowRootContainer");
|
||||
return mContext.getResources().getBoolean(R.bool.config_defaultInTouchMode);
|
||||
}
|
||||
return displayContent.isInTouchMode();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user