Skip to content

Commit 758143e

Browse files
committed
Window position not reported if the window is not moved.
1.If a window is shown but never moved the window window is never notified for its current location. Therefore, accessibility nodes do not contain correct bounds in screen coordinates. bug:6926295 Change-Id: I7df18b095d33ecafffced75aba9e4f4693b0c393
1 parent 4cb3384 commit 758143e

File tree

13 files changed

+201
-198
lines changed

13 files changed

+201
-198
lines changed

core/java/android/inputmethodservice/IInputMethodSessionWrapper.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package android.inputmethodservice;
1818

1919
import com.android.internal.os.HandlerCaller;
20+
import com.android.internal.os.SomeArgs;
2021
import com.android.internal.view.IInputMethodCallback;
2122
import com.android.internal.view.IInputMethodSession;
2223

@@ -91,39 +92,39 @@ public void executeMessage(Message msg) {
9192
(ExtractedText)msg.obj);
9293
return;
9394
case DO_DISPATCH_KEY_EVENT: {
94-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
95+
SomeArgs args = (SomeArgs)msg.obj;
9596
mInputMethodSession.dispatchKeyEvent(msg.arg1,
9697
(KeyEvent)args.arg1,
9798
new InputMethodEventCallbackWrapper(
9899
(IInputMethodCallback)args.arg2));
99-
mCaller.recycleArgs(args);
100+
args.recycle();
100101
return;
101102
}
102103
case DO_DISPATCH_TRACKBALL_EVENT: {
103-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
104+
SomeArgs args = (SomeArgs)msg.obj;
104105
mInputMethodSession.dispatchTrackballEvent(msg.arg1,
105106
(MotionEvent)args.arg1,
106107
new InputMethodEventCallbackWrapper(
107108
(IInputMethodCallback)args.arg2));
108-
mCaller.recycleArgs(args);
109+
args.recycle();
109110
return;
110111
}
111112
case DO_UPDATE_SELECTION: {
112-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
113+
SomeArgs args = (SomeArgs)msg.obj;
113114
mInputMethodSession.updateSelection(args.argi1, args.argi2,
114115
args.argi3, args.argi4, args.argi5, args.argi6);
115-
mCaller.recycleArgs(args);
116+
args.recycle();
116117
return;
117118
}
118119
case DO_UPDATE_CURSOR: {
119120
mInputMethodSession.updateCursor((Rect)msg.obj);
120121
return;
121122
}
122123
case DO_APP_PRIVATE_COMMAND: {
123-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
124+
SomeArgs args = (SomeArgs)msg.obj;
124125
mInputMethodSession.appPrivateCommand((String)args.arg1,
125126
(Bundle)args.arg2);
126-
mCaller.recycleArgs(args);
127+
args.recycle();
127128
return;
128129
}
129130
case DO_TOGGLE_SOFT_INPUT: {

core/java/android/inputmethodservice/IInputMethodWrapper.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package android.inputmethodservice;
1818

1919
import com.android.internal.os.HandlerCaller;
20+
import com.android.internal.os.SomeArgs;
2021
import com.android.internal.view.IInputContext;
2122
import com.android.internal.view.IInputMethod;
2223
import com.android.internal.view.IInputMethodCallback;
@@ -124,7 +125,7 @@ public void executeMessage(Message msg) {
124125
if (target == null) {
125126
return;
126127
}
127-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
128+
SomeArgs args = (SomeArgs)msg.obj;
128129
try {
129130
target.dump((FileDescriptor)args.arg1,
130131
(PrintWriter)args.arg2, (String[])args.arg3);
@@ -134,6 +135,7 @@ public void executeMessage(Message msg) {
134135
synchronized (args.arg4) {
135136
((CountDownLatch)args.arg4).countDown();
136137
}
138+
args.recycle();
137139
return;
138140
}
139141

@@ -149,23 +151,25 @@ public void executeMessage(Message msg) {
149151
inputMethod.unbindInput();
150152
return;
151153
case DO_START_INPUT: {
152-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
154+
SomeArgs args = (SomeArgs)msg.obj;
153155
IInputContext inputContext = (IInputContext)args.arg1;
154156
InputConnection ic = inputContext != null
155157
? new InputConnectionWrapper(inputContext) : null;
156158
EditorInfo info = (EditorInfo)args.arg2;
157159
info.makeCompatible(mTargetSdkVersion);
158160
inputMethod.startInput(ic, info);
161+
args.recycle();
159162
return;
160163
}
161164
case DO_RESTART_INPUT: {
162-
HandlerCaller.SomeArgs args = (HandlerCaller.SomeArgs)msg.obj;
165+
SomeArgs args = (SomeArgs)msg.obj;
163166
IInputContext inputContext = (IInputContext)args.arg1;
164167
InputConnection ic = inputContext != null
165168
? new InputConnectionWrapper(inputContext) : null;
166169
EditorInfo info = (EditorInfo)args.arg2;
167170
info.makeCompatible(mTargetSdkVersion);
168171
inputMethod.restartInput(ic, info);
172+
args.recycle();
169173
return;
170174
}
171175
case DO_CREATE_SESSION: {

core/java/android/service/wallpaper/WallpaperService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public void onInputEvent(InputEvent event) {
255255

256256
final BaseIWindow mWindow = new BaseIWindow() {
257257
@Override
258-
public void resized(int w, int h, Rect contentInsets,
258+
public void resized(Rect frame, Rect contentInsets,
259259
Rect visibleInsets, boolean reportDraw, Configuration newConfig) {
260260
Message msg = mCaller.obtainMessageI(MSG_WINDOW_RESIZED,
261261
reportDraw ? 1 : 0);

core/java/android/view/AccessibilityInteractionController.java

Lines changed: 14 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,14 @@
2525
import android.os.Message;
2626
import android.os.Process;
2727
import android.os.RemoteException;
28-
import android.util.Pool;
29-
import android.util.Poolable;
30-
import android.util.PoolableManager;
31-
import android.util.Pools;
3228
import android.util.SparseLongArray;
3329
import android.view.accessibility.AccessibilityInteractionClient;
3430
import android.view.accessibility.AccessibilityNodeInfo;
3531
import android.view.accessibility.AccessibilityNodeProvider;
3632
import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
3733

34+
import com.android.internal.os.SomeArgs;
35+
3836
import java.util.ArrayList;
3937
import java.util.HashMap;
4038
import java.util.List;
@@ -48,7 +46,6 @@
4846
* UI thread.
4947
*/
5048
final class AccessibilityInteractionController {
51-
private static final int POOL_SIZE = 5;
5249

5350
private ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList =
5451
new ArrayList<AccessibilityNodeInfo>();
@@ -76,60 +73,6 @@ public AccessibilityInteractionController(ViewRootImpl viewRootImpl) {
7673
mPrefetcher = new AccessibilityNodePrefetcher();
7774
}
7875

79-
// Reusable poolable arguments for interacting with the view hierarchy
80-
// to fit more arguments than Message and to avoid sharing objects between
81-
// two messages since several threads can send messages concurrently.
82-
private final Pool<SomeArgs> mPool = Pools.synchronizedPool(Pools.finitePool(
83-
new PoolableManager<SomeArgs>() {
84-
public SomeArgs newInstance() {
85-
return new SomeArgs();
86-
}
87-
88-
public void onAcquired(SomeArgs info) {
89-
/* do nothing */
90-
}
91-
92-
public void onReleased(SomeArgs info) {
93-
info.clear();
94-
}
95-
}, POOL_SIZE)
96-
);
97-
98-
private class SomeArgs implements Poolable<SomeArgs> {
99-
private SomeArgs mNext;
100-
private boolean mIsPooled;
101-
102-
public Object arg1;
103-
public Object arg2;
104-
public int argi1;
105-
public int argi2;
106-
public int argi3;
107-
108-
public SomeArgs getNextPoolable() {
109-
return mNext;
110-
}
111-
112-
public boolean isPooled() {
113-
return mIsPooled;
114-
}
115-
116-
public void setNextPoolable(SomeArgs args) {
117-
mNext = args;
118-
}
119-
120-
public void setPooled(boolean isPooled) {
121-
mIsPooled = isPooled;
122-
}
123-
124-
private void clear() {
125-
arg1 = null;
126-
arg2 = null;
127-
argi1 = 0;
128-
argi2 = 0;
129-
argi3 = 0;
130-
}
131-
}
132-
13376
private boolean isShown(View view) {
13477
// The first two checks are made also made by isShown() which
13578
// however traverses the tree up to the parent to catch that.
@@ -148,7 +91,7 @@ public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
14891
message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID;
14992
message.arg1 = flags;
15093

151-
SomeArgs args = mPool.acquire();
94+
SomeArgs args = SomeArgs.obtain();
15295
args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
15396
args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
15497
args.argi3 = interactionId;
@@ -177,7 +120,7 @@ private void findAccessibilityNodeInfoByAccessibilityIdUiThread(Message message)
177120
final IAccessibilityInteractionConnectionCallback callback =
178121
(IAccessibilityInteractionConnectionCallback) args.arg1;
179122

180-
mPool.release(args);
123+
args.recycle();
181124

182125
List<AccessibilityNodeInfo> infos = mTempAccessibilityNodeInfoList;
183126
infos.clear();
@@ -216,7 +159,7 @@ public void findAccessibilityNodeInfoByViewIdClientThread(long accessibilityNode
216159
message.arg1 = flags;
217160
message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
218161

219-
SomeArgs args = mPool.acquire();
162+
SomeArgs args = SomeArgs.obtain();
220163
args.argi1 = viewId;
221164
args.argi2 = interactionId;
222165
args.arg1 = callback;
@@ -245,7 +188,7 @@ private void findAccessibilityNodeInfoByViewIdUiThread(Message message) {
245188
final IAccessibilityInteractionConnectionCallback callback =
246189
(IAccessibilityInteractionConnectionCallback) args.arg1;
247190

248-
mPool.release(args);
191+
args.recycle();
249192

250193
AccessibilityNodeInfo info = null;
251194
try {
@@ -284,7 +227,7 @@ public void findAccessibilityNodeInfosByTextClientThread(long accessibilityNodeI
284227
message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT;
285228
message.arg1 = flags;
286229

287-
SomeArgs args = mPool.acquire();
230+
SomeArgs args = SomeArgs.obtain();
288231
args.arg1 = text;
289232
args.arg2 = callback;
290233
args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
@@ -315,7 +258,7 @@ private void findAccessibilityNodeInfosByTextUiThread(Message message) {
315258
final int accessibilityViewId = args.argi1;
316259
final int virtualDescendantId = args.argi2;
317260
final int interactionId = args.argi3;
318-
mPool.release(args);
261+
args.recycle();
319262

320263
List<AccessibilityNodeInfo> infos = null;
321264
try {
@@ -383,7 +326,7 @@ public void findFocusClientThread(long accessibilityNodeId, int focusType, int i
383326
message.arg1 = flags;
384327
message.arg2 = focusType;
385328

386-
SomeArgs args = mPool.acquire();
329+
SomeArgs args = SomeArgs.obtain();
387330
args.argi1 = interactionId;
388331
args.argi2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
389332
args.argi3 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
@@ -414,7 +357,7 @@ private void findFocusUiThread(Message message) {
414357
final IAccessibilityInteractionConnectionCallback callback =
415358
(IAccessibilityInteractionConnectionCallback) args.arg1;
416359

417-
mPool.release(args);
360+
args.recycle();
418361

419362
AccessibilityNodeInfo focused = null;
420363
try {
@@ -480,8 +423,7 @@ public void focusSearchClientThread(long accessibilityNodeId, int direction, int
480423
message.arg1 = flags;
481424
message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
482425

483-
SomeArgs args = mPool.acquire();
484-
args.argi1 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
426+
SomeArgs args = SomeArgs.obtain();
485427
args.argi2 = direction;
486428
args.argi3 = interactionId;
487429
args.arg1 = callback;
@@ -505,13 +447,12 @@ private void focusSearchUiThread(Message message) {
505447
final int accessibilityViewId = message.arg2;
506448

507449
SomeArgs args = (SomeArgs) message.obj;
508-
final int virtualDescendantId = args.argi1;
509450
final int direction = args.argi2;
510451
final int interactionId = args.argi3;
511452
final IAccessibilityInteractionConnectionCallback callback =
512453
(IAccessibilityInteractionConnectionCallback) args.arg1;
513454

514-
mPool.release(args);
455+
args.recycle();
515456

516457
AccessibilityNodeInfo next = null;
517458
try {
@@ -552,7 +493,7 @@ public void performAccessibilityActionClientThread(long accessibilityNodeId, int
552493
message.arg1 = flags;
553494
message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
554495

555-
SomeArgs args = mPool.acquire();
496+
SomeArgs args = SomeArgs.obtain();
556497
args.argi1 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
557498
args.argi2 = action;
558499
args.argi3 = interactionId;
@@ -585,7 +526,7 @@ private void perfromAccessibilityActionUiThread(Message message) {
585526
(IAccessibilityInteractionConnectionCallback) args.arg1;
586527
Bundle arguments = (Bundle) args.arg2;
587528

588-
mPool.release(args);
529+
args.recycle();
589530

590531
boolean succeeded = false;
591532
try {

core/java/android/view/IWindow.aidl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ oneway interface IWindow {
4545
*/
4646
void executeCommand(String command, String parameters, in ParcelFileDescriptor descriptor);
4747

48-
void resized(int w, int h, in Rect contentInsets,
48+
void resized(in Rect frame, in Rect contentInsets,
4949
in Rect visibleInsets, boolean reportDraw, in Configuration newConfig);
5050
void moved(int newX, int newY);
5151
void dispatchAppVisibility(boolean visible);

0 commit comments

Comments
 (0)