diff options
author | Clara Bayarri <clarabayarri@google.com> | 2015-05-15 16:32:50 +0100 |
---|---|---|
committer | Clara Bayarri <clarabayarri@google.com> | 2015-05-15 16:32:50 +0100 |
commit | 5b7665a1f2403a03c1f9baf73a4aa8f5a66b1352 (patch) | |
tree | c5da08a64615f5b4329bdf8ea729dfceee71006a /core/tests | |
parent | be752b1f28f1f3724b235e3f0a77b4c07c40e631 (diff) | |
download | frameworks_base-5b7665a1f2403a03c1f9baf73a4aa8f5a66b1352.zip frameworks_base-5b7665a1f2403a03c1f9baf73a4aa8f5a66b1352.tar.gz frameworks_base-5b7665a1f2403a03c1f9baf73a4aa8f5a66b1352.tar.bz2 |
Fix Cancelling a text action activity deletes the selected text
The implementation of onActivityResult in TextView did not check the
result code, hence treating the cancelled activity result as a
replacement by empty text.
Also added tests to catch this case and basic usage.
Bug: 21183019
Change-Id: Ibdafe89474dd69c5b70c67ec98fed46656f9fdcf
Diffstat (limited to 'core/tests')
-rw-r--r-- | core/tests/coretests/src/android/widget/TextViewTest.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java index af6df1a..0b94f8b 100644 --- a/core/tests/coretests/src/android/widget/TextViewTest.java +++ b/core/tests/coretests/src/android/widget/TextViewTest.java @@ -16,9 +16,13 @@ package android.widget; +import android.app.Activity; +import android.content.Intent; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.text.GetChars; +import android.text.Selection; +import android.text.Spannable; /** * TextViewTest tests {@link TextView}. @@ -54,4 +58,66 @@ public class TextViewTest extends AndroidTestCase { assertEquals('o', c2[4]); 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()); + } } |