diff options
author | James Cook <jamescook@google.com> | 2015-02-26 18:03:58 -0800 |
---|---|---|
committer | James Cook <jamescook@google.com> | 2015-02-27 10:04:08 -0800 |
commit | f59152cf00520d1bd36949b44faca2e1fcf6d28f (patch) | |
tree | 13343a7f5d90fb2448be52f42901e3ed940798f2 /core/java/android/content | |
parent | 39df5fea2281161246cce37587d2a3c34f3dcf32 (diff) | |
download | frameworks_base-f59152cf00520d1bd36949b44faca2e1fcf6d28f.zip frameworks_base-f59152cf00520d1bd36949b44faca2e1fcf6d28f.tar.gz frameworks_base-f59152cf00520d1bd36949b44faca2e1fcf6d28f.tar.bz2 |
Reland: Add basic support for Ctrl-Z to editable TextViews
Reland 9201e797833f35b9afb219f88c10d3b6fda02a4e which was reverted in
c8f08e07a47cc259a25caed3f731ee7044328635.
Original description:
* Add an UndoManager to the Editor for each editable TextView
* Record operations as being owned by that Editor
* Parcel the undo state
* Wire hardware keyboard shortcuts Ctrl-Z for undo and Ctrl-Shift-Z
for redo into TextView shortcut handling.
* Expose IDs for "undo" and "redo" for symmetry with cut/copy/paste.
Additional fix:
* Ensure each UndoOwner always has a valid mManager, even after the
UndoManager is parceled and restored.
Bug: 19332904
Bug: 19505388
Change-Id: Iad4476e6e9ca952281e69bf22c07cca915dfa7bd
Diffstat (limited to 'core/java/android/content')
-rw-r--r-- | core/java/android/content/UndoManager.java | 6 | ||||
-rw-r--r-- | core/java/android/content/UndoOwner.java | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/core/java/android/content/UndoManager.java b/core/java/android/content/UndoManager.java index e3bc238..559b01c 100644 --- a/core/java/android/content/UndoManager.java +++ b/core/java/android/content/UndoManager.java @@ -105,8 +105,7 @@ public class UndoManager { return owner; } - owner = new UndoOwner(tag); - owner.mManager = this; + owner = new UndoOwner(tag, this); owner.mData = data; mOwners.put(tag, owner); return owner; @@ -116,7 +115,6 @@ public class UndoManager { // XXX need to figure out how to prune. if (false) { mOwners.remove(owner.mTag); - owner.mManager = null; } } @@ -202,7 +200,7 @@ public class UndoManager { UndoOwner owner = mStateOwners[idx]; if (owner == null) { String tag = in.readString(); - owner = new UndoOwner(tag); + owner = new UndoOwner(tag, this); mStateOwners[idx] = owner; mOwners.put(tag, owner); } diff --git a/core/java/android/content/UndoOwner.java b/core/java/android/content/UndoOwner.java index d0cdc95..9106588 100644 --- a/core/java/android/content/UndoOwner.java +++ b/core/java/android/content/UndoOwner.java @@ -23,8 +23,8 @@ package android.content; */ public class UndoOwner { final String mTag; + final UndoManager mManager; - UndoManager mManager; Object mData; int mOpCount; @@ -32,8 +32,15 @@ public class UndoOwner { int mStateSeq; int mSavedIdx; - UndoOwner(String tag) { + UndoOwner(String tag, UndoManager manager) { + if (tag == null) { + throw new NullPointerException("tag can't be null"); + } + if (manager == null) { + throw new NullPointerException("manager can't be null"); + } mTag = tag; + mManager = manager; } /** |