Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e94561ec authored by Clara Bayarri's avatar Clara Bayarri Committed by Android (Google) Code Review
Browse files

Merge "Fix Cancelling a text action activity deletes the selected text" into mnc-dev

parents aba6cccd 5b7665a1
Loading
Loading
Loading
Loading
+15 −9
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.Nullable;
import android.annotation.StringRes;
import android.annotation.StringRes;
import android.annotation.StyleRes;
import android.annotation.StyleRes;
import android.annotation.XmlRes;
import android.annotation.XmlRes;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Context;
@@ -1465,18 +1466,24 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @Override
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PROCESS_TEXT_REQUEST_CODE) {
        if (requestCode == PROCESS_TEXT_REQUEST_CODE) {
            CharSequence result = data != null
            if (resultCode == Activity.RESULT_OK && data != null) {
                    ? data.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT)
                CharSequence result = data.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
                    : "";
                if (result != null) {
                    if (isTextEditable()) {
                    if (isTextEditable()) {
                        replaceSelectionWithText(result);
                        replaceSelectionWithText(result);
                    } else {
                    } else {
                        if (result.length() > 0) {
                        if (result.length() > 0) {
                    Toast.makeText(getContext(), String.valueOf(result), Toast.LENGTH_LONG).show();
                            Toast.makeText(getContext(), String.valueOf(result), Toast.LENGTH_LONG)
                                .show();
                        }
                        }
                    }
                    }
                }
                }
            }
            }
            if (mEditor.hasSelectionController()) {
                mEditor.startSelectionActionModeWithSelection();
            }
        }
    }


    private void setTypefaceFromAttrs(String familyName, int typefaceIndex, int styleIndex) {
    private void setTypefaceFromAttrs(String familyName, int typefaceIndex, int styleIndex) {
        Typeface tf = null;
        Typeface tf = null;
@@ -9279,7 +9286,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener


    void replaceSelectionWithText(CharSequence text) {
    void replaceSelectionWithText(CharSequence text) {
        ((Editable) mText).replace(getSelectionStart(), getSelectionEnd(), text);
        ((Editable) mText).replace(getSelectionStart(), getSelectionEnd(), text);
        mEditor.startSelectionActionModeWithSelection();
    }
    }


    /**
    /**
+66 −0
Original line number Original line Diff line number Diff line
@@ -16,9 +16,13 @@


package android.widget;
package android.widget;


import android.app.Activity;
import android.content.Intent;
import android.test.AndroidTestCase;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.GetChars;
import android.text.GetChars;
import android.text.Selection;
import android.text.Spannable;


/**
/**
 * TextViewTest tests {@link TextView}.
 * TextViewTest tests {@link TextView}.
@@ -54,4 +58,66 @@ public class TextViewTest extends AndroidTestCase {
        assertEquals('o', c2[4]);
        assertEquals('o', c2[4]);
        assertEquals('\0', c2[5]);
        assertEquals('\0', c2[5]);
    }
    }

    public void testProcessTextActivityResultNonEditable() {
        TextView tv = new TextView(mContext);
        CharSequence originalText = "This is some text.";
        tv.setText(originalText, TextView.BufferType.SPANNABLE);
        assertEquals(originalText, tv.getText().toString());
        tv.setTextIsSelectable(true);
        Selection.setSelection((Spannable) tv.getText(), 0, tv.getText().length());

        CharSequence newText = "Text is replaced.";
        Intent data = new Intent();
        data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
        tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, data);

        // This is a TextView, which can't be modified. Hence no change should have been made.
        assertEquals(originalText, tv.getText().toString());
    }

    public void testProcessTextActivityResultEditable() {
        EditText tv = new EditText(mContext);
        CharSequence originalText = "This is some text.";
        tv.setText(originalText, TextView.BufferType.SPANNABLE);
        assertEquals(originalText, tv.getText().toString());
        tv.setTextIsSelectable(true);
        Selection.setSelection(tv.getText(), 0, tv.getText().length());

        CharSequence newText = "Text is replaced.";
        Intent data = new Intent();
        data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
        tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, data);

        assertEquals(newText, tv.getText().toString());
    }

    public void testProcessTextActivityResultCancel() {
        EditText tv = new EditText(mContext);
        CharSequence originalText = "This is some text.";
        tv.setText(originalText, TextView.BufferType.SPANNABLE);
        assertEquals(originalText, tv.getText().toString());
        tv.setTextIsSelectable(true);
        Selection.setSelection(tv.getText(), 0, tv.getText().length());

        CharSequence newText = "Text is replaced.";
        Intent data = new Intent();
        data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
        tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_CANCELED, data);

        assertEquals(originalText, tv.getText().toString());
    }

    public void testProcessTextActivityNoData() {
        EditText tv = new EditText(mContext);
        CharSequence originalText = "This is some text.";
        tv.setText(originalText, TextView.BufferType.SPANNABLE);
        assertEquals(originalText, tv.getText().toString());
        tv.setTextIsSelectable(true);
        Selection.setSelection(tv.getText(), 0, tv.getText().length());

        tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, null);

        assertEquals(originalText, tv.getText().toString());
    }
}
}