summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-02-24 10:23:06 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-02-24 10:23:06 -0800
commit88c6d6e19c71d5d0ee8347bb9aba68b564ac482d (patch)
tree5b3ebf10dcea163b7021942865e1e47d0e1cef6b /core/java/android
parent0d4134834eeceffa6b75e02d2c8a1ffce1deffea (diff)
parentafd5fab3ab001e90269dfef37d87e69e0e261826 (diff)
Merge "AccessibilityNodeInfos node properly cached."
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfoCache.java34
1 files changed, 21 insertions, 13 deletions
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
index 4fb0046ffe12..dfbfc7091acf 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
@@ -16,7 +16,6 @@
package android.view.accessibility;
-import android.os.Process;
import android.util.Log;
import android.util.LongSparseArray;
@@ -81,14 +80,16 @@ public class AccessibilityNodeInfoCache {
public AccessibilityNodeInfo get(long accessibilityNodeId) {
if (ENABLED) {
synchronized(mLock) {
+ AccessibilityNodeInfo info = mCacheImpl.get(accessibilityNodeId);
+ if (info != null) {
+ // Return a copy since the client calls to AccessibilityNodeInfo#recycle()
+ // will wipe the data of the cached info.
+ info = AccessibilityNodeInfo.obtain(info);
+ }
if (DEBUG) {
- AccessibilityNodeInfo info = mCacheImpl.get(accessibilityNodeId);
- Log.i(LOG_TAG, "Process: " + Process.myPid() +
- " get(" + accessibilityNodeId + ") = " + info);
- return info;
- } else {
- return mCacheImpl.get(accessibilityNodeId);
+ Log.i(LOG_TAG, "get(" + accessibilityNodeId + ") = " + info);
}
+ return info;
}
} else {
return null;
@@ -105,10 +106,12 @@ public class AccessibilityNodeInfoCache {
if (ENABLED) {
synchronized(mLock) {
if (DEBUG) {
- Log.i(LOG_TAG, "Process: " + Process.myPid()
- + " put(" + accessibilityNodeId + ", " + info + ")");
+ Log.i(LOG_TAG, "put(" + accessibilityNodeId + ", " + info + ")");
}
- mCacheImpl.put(accessibilityNodeId, info);
+ // Cache a copy since the client calls to AccessibilityNodeInfo#recycle()
+ // will wipe the data of the cached info.
+ AccessibilityNodeInfo clone = AccessibilityNodeInfo.obtain(info);
+ mCacheImpl.put(accessibilityNodeId, clone);
}
}
}
@@ -138,8 +141,7 @@ public class AccessibilityNodeInfoCache {
if (ENABLED) {
synchronized(mLock) {
if (DEBUG) {
- Log.i(LOG_TAG, "Process: " + Process.myPid()
- + " remove(" + accessibilityNodeId + ")");
+ Log.i(LOG_TAG, "remove(" + accessibilityNodeId + ")");
}
mCacheImpl.remove(accessibilityNodeId);
}
@@ -153,7 +155,13 @@ public class AccessibilityNodeInfoCache {
if (ENABLED) {
synchronized(mLock) {
if (DEBUG) {
- Log.i(LOG_TAG, "Process: " + Process.myPid() + "clear()");
+ Log.i(LOG_TAG, "clear()");
+ }
+ // Recycle the nodes before clearing the cache.
+ final int nodeCount = mCacheImpl.size();
+ for (int i = 0; i < nodeCount; i++) {
+ AccessibilityNodeInfo info = mCacheImpl.valueAt(i);
+ info.recycle();
}
mCacheImpl.clear();
}