summaryrefslogtreecommitdiffstats
path: root/core/java/android/content
diff options
context:
space:
mode:
authorJames Cook <jamescook@google.com>2015-02-26 18:03:58 -0800
committerJames Cook <jamescook@google.com>2015-02-27 10:04:08 -0800
commitf59152cf00520d1bd36949b44faca2e1fcf6d28f (patch)
tree13343a7f5d90fb2448be52f42901e3ed940798f2 /core/java/android/content
parent39df5fea2281161246cce37587d2a3c34f3dcf32 (diff)
downloadframeworks_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.java6
-rw-r--r--core/java/android/content/UndoOwner.java11
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;
}
/**