summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author James Cook <jamescook@google.com> 2015-03-02 13:27:51 -0800
committer James Cook <jamescook@google.com> 2015-03-02 13:27:51 -0800
commitf143ace3aa80227b7612c0a9428b2de996c4920a (patch)
tree559751567baddb7d4d3540180e4227cbc220922b
parentf63a665f92fe13f8f9d8eb58cf0987616cade9b5 (diff)
Fix crash in UndoManager after parceling TextView
UndoOwner maintains a manual reference count of the number of undo operations it is associated with, but this count is not restored (and hence becomes zero) when UndoManager is parceled and unparceled. This can cause the count to underflow on subsequent text editing. A test for this will land separately in CTS. Bug: 19568283 Change-Id: Ic50890828db9679c7cef805388957d66dc75422d
-rw-r--r--core/java/android/content/UndoManager.java3
-rw-r--r--core/java/android/content/UndoOwner.java11
2 files changed, 14 insertions, 0 deletions
diff --git a/core/java/android/content/UndoManager.java b/core/java/android/content/UndoManager.java
index 559b01c3bd9e..1d5ed8a77fa9 100644
--- a/core/java/android/content/UndoManager.java
+++ b/core/java/android/content/UndoManager.java
@@ -162,6 +162,7 @@ public class UndoManager {
owner.mSavedIdx = mNextSavedIdx;
out.writeInt(owner.mSavedIdx);
out.writeString(owner.mTag);
+ out.writeInt(owner.mOpCount);
mNextSavedIdx++;
}
}
@@ -200,7 +201,9 @@ public class UndoManager {
UndoOwner owner = mStateOwners[idx];
if (owner == null) {
String tag = in.readString();
+ int opCount = in.readInt();
owner = new UndoOwner(tag, this);
+ owner.mOpCount = opCount;
mStateOwners[idx] = owner;
mOwners.put(tag, owner);
}
diff --git a/core/java/android/content/UndoOwner.java b/core/java/android/content/UndoOwner.java
index 9106588866bd..fd257abf3398 100644
--- a/core/java/android/content/UndoOwner.java
+++ b/core/java/android/content/UndoOwner.java
@@ -61,4 +61,15 @@ public class UndoOwner {
public Object getData() {
return mData;
}
+
+ @Override
+ public String toString() {
+ return "UndoOwner:[mTag=" + mTag +
+ " mManager=" + mManager +
+ " mData=" + mData +
+ " mData=" + mData +
+ " mOpCount=" + mOpCount +
+ " mStateSeq=" + mStateSeq +
+ " mSavedIdx=" + mSavedIdx + "]";
+ }
}