Loading core/java/android/widget/Editor.java +17 −18 Original line number Diff line number Diff line Loading @@ -4664,8 +4664,8 @@ public class Editor { // Otherwise the user inserted the composition. String newText = TextUtils.substring(source, start, end); EditOperation edit = new EditOperation(mEditor, false, "", dstart, newText); recordEdit(edit); EditOperation edit = new EditOperation(mEditor, "", dstart, newText); recordEdit(edit, false /* forceMerge */); return true; } Loading @@ -4684,11 +4684,15 @@ public class Editor { // Build a new operation with all the information from this edit. String newText = TextUtils.substring(source, start, end); String oldText = TextUtils.substring(dest, dstart, dend); EditOperation edit = new EditOperation(mEditor, forceMerge, oldText, dstart, newText); recordEdit(edit); EditOperation edit = new EditOperation(mEditor, oldText, dstart, newText); recordEdit(edit, forceMerge); } private void recordEdit(EditOperation edit) { /** * Fetches the last undo operation and checks to see if a new edit should be merged into it. * If forceMerge is true then the new edit is always merged. */ private void recordEdit(EditOperation edit, boolean forceMerge) { // Fetch the last edit operation and attempt to merge in the new edit. final UndoManager um = mEditor.mUndoManager; um.beginUpdate("Edit text"); Loading @@ -4698,6 +4702,11 @@ public class Editor { // Add this as the first edit. if (DEBUG_UNDO) Log.d(TAG, "filter: adding first op " + edit); um.addOperation(edit, UndoManager.MERGE_MODE_NONE); } else if (forceMerge) { // Forced merges take priority because they could be the result of a non-user-edit // change and this case should not create a new undo operation. if (DEBUG_UNDO) Log.d(TAG, "filter: force merge " + edit); lastEdit.forceMergeWith(edit); } else if (!mIsUserEdit) { // An application directly modified the Editable outside of a text edit. Treat this // as a new change and don't attempt to merge. Loading Loading @@ -4773,7 +4782,6 @@ public class Editor { private static final int TYPE_REPLACE = 2; private int mType; private boolean mForceMerge; private String mOldText; private int mOldTextStart; private String mNewText; Loading @@ -4784,13 +4792,10 @@ public class Editor { /** * Constructs an edit operation from a text input operation on editor that replaces the * oldText starting at dstart with newText. If forceMerge is true then always forcibly * merge this operation with any previous one. * oldText starting at dstart with newText. */ public EditOperation(Editor editor, boolean forceMerge, String oldText, int dstart, String newText) { public EditOperation(Editor editor, String oldText, int dstart, String newText) { super(editor.mUndoOwner); mForceMerge = forceMerge; mOldText = oldText; mNewText = newText; Loading @@ -4817,7 +4822,6 @@ public class Editor { public EditOperation(Parcel src, ClassLoader loader) { super(src, loader); mType = src.readInt(); mForceMerge = src.readInt() != 0; mOldText = src.readString(); mOldTextStart = src.readInt(); mNewText = src.readString(); Loading @@ -4829,7 +4833,6 @@ public class Editor { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mType); dest.writeInt(mForceMerge ? 1 : 0); dest.writeString(mOldText); dest.writeInt(mOldTextStart); dest.writeString(mNewText); Loading Loading @@ -4881,10 +4884,6 @@ public class Editor { Log.d(TAG, "mergeWith old " + this); Log.d(TAG, "mergeWith new " + edit); } if (edit.mForceMerge) { forceMergeWith(edit); return true; } switch (mType) { case TYPE_INSERT: return mergeInsertWith(edit); Loading Loading @@ -4942,7 +4941,7 @@ public class Editor { * Forcibly creates a single merged edit operation by simulating the entire text * contents being replaced. */ private void forceMergeWith(EditOperation edit) { public void forceMergeWith(EditOperation edit) { if (DEBUG_UNDO) Log.d(TAG, "forceMerge"); Editor editor = getOwnerData(); Loading Loading
core/java/android/widget/Editor.java +17 −18 Original line number Diff line number Diff line Loading @@ -4664,8 +4664,8 @@ public class Editor { // Otherwise the user inserted the composition. String newText = TextUtils.substring(source, start, end); EditOperation edit = new EditOperation(mEditor, false, "", dstart, newText); recordEdit(edit); EditOperation edit = new EditOperation(mEditor, "", dstart, newText); recordEdit(edit, false /* forceMerge */); return true; } Loading @@ -4684,11 +4684,15 @@ public class Editor { // Build a new operation with all the information from this edit. String newText = TextUtils.substring(source, start, end); String oldText = TextUtils.substring(dest, dstart, dend); EditOperation edit = new EditOperation(mEditor, forceMerge, oldText, dstart, newText); recordEdit(edit); EditOperation edit = new EditOperation(mEditor, oldText, dstart, newText); recordEdit(edit, forceMerge); } private void recordEdit(EditOperation edit) { /** * Fetches the last undo operation and checks to see if a new edit should be merged into it. * If forceMerge is true then the new edit is always merged. */ private void recordEdit(EditOperation edit, boolean forceMerge) { // Fetch the last edit operation and attempt to merge in the new edit. final UndoManager um = mEditor.mUndoManager; um.beginUpdate("Edit text"); Loading @@ -4698,6 +4702,11 @@ public class Editor { // Add this as the first edit. if (DEBUG_UNDO) Log.d(TAG, "filter: adding first op " + edit); um.addOperation(edit, UndoManager.MERGE_MODE_NONE); } else if (forceMerge) { // Forced merges take priority because they could be the result of a non-user-edit // change and this case should not create a new undo operation. if (DEBUG_UNDO) Log.d(TAG, "filter: force merge " + edit); lastEdit.forceMergeWith(edit); } else if (!mIsUserEdit) { // An application directly modified the Editable outside of a text edit. Treat this // as a new change and don't attempt to merge. Loading Loading @@ -4773,7 +4782,6 @@ public class Editor { private static final int TYPE_REPLACE = 2; private int mType; private boolean mForceMerge; private String mOldText; private int mOldTextStart; private String mNewText; Loading @@ -4784,13 +4792,10 @@ public class Editor { /** * Constructs an edit operation from a text input operation on editor that replaces the * oldText starting at dstart with newText. If forceMerge is true then always forcibly * merge this operation with any previous one. * oldText starting at dstart with newText. */ public EditOperation(Editor editor, boolean forceMerge, String oldText, int dstart, String newText) { public EditOperation(Editor editor, String oldText, int dstart, String newText) { super(editor.mUndoOwner); mForceMerge = forceMerge; mOldText = oldText; mNewText = newText; Loading @@ -4817,7 +4822,6 @@ public class Editor { public EditOperation(Parcel src, ClassLoader loader) { super(src, loader); mType = src.readInt(); mForceMerge = src.readInt() != 0; mOldText = src.readString(); mOldTextStart = src.readInt(); mNewText = src.readString(); Loading @@ -4829,7 +4833,6 @@ public class Editor { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mType); dest.writeInt(mForceMerge ? 1 : 0); dest.writeString(mOldText); dest.writeInt(mOldTextStart); dest.writeString(mNewText); Loading Loading @@ -4881,10 +4884,6 @@ public class Editor { Log.d(TAG, "mergeWith old " + this); Log.d(TAG, "mergeWith new " + edit); } if (edit.mForceMerge) { forceMergeWith(edit); return true; } switch (mType) { case TYPE_INSERT: return mergeInsertWith(edit); Loading Loading @@ -4942,7 +4941,7 @@ public class Editor { * Forcibly creates a single merged edit operation by simulating the entire text * contents being replaced. */ private void forceMergeWith(EditOperation edit) { public void forceMergeWith(EditOperation edit) { if (DEBUG_UNDO) Log.d(TAG, "forceMerge"); Editor editor = getOwnerData(); Loading