diff options
| author | 2015-03-02 13:27:51 -0800 | |
|---|---|---|
| committer | 2015-03-02 13:27:51 -0800 | |
| commit | f143ace3aa80227b7612c0a9428b2de996c4920a (patch) | |
| tree | 559751567baddb7d4d3540180e4227cbc220922b | |
| parent | f63a665f92fe13f8f9d8eb58cf0987616cade9b5 (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.java | 3 | ||||
| -rw-r--r-- | core/java/android/content/UndoOwner.java | 11 |
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 + "]"; + } } |