Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java

Issue 2617443002: Implement ThreadedInputConnection.deleteSurroundingTextInCodePoints() (Closed)
Patch Set: Add more comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser.input; 5 package org.chromium.content.browser.input;
6 6
7 import android.annotation.TargetApi;
7 import android.app.Activity; 8 import android.app.Activity;
8 import android.content.ClipData; 9 import android.content.ClipData;
9 import android.content.ClipboardManager; 10 import android.content.ClipboardManager;
10 import android.content.Context; 11 import android.content.Context;
11 import android.content.res.Configuration; 12 import android.content.res.Configuration;
12 import android.os.Handler; 13 import android.os.Handler;
13 import android.support.test.filters.MediumTest; 14 import android.support.test.filters.MediumTest;
14 import android.support.test.filters.SmallTest; 15 import android.support.test.filters.SmallTest;
15 import android.text.InputType; 16 import android.text.InputType;
16 import android.text.TextUtils; 17 import android.text.TextUtils;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 208
208 deleteSurroundingText(0, 10); 209 deleteSurroundingText(0, 10);
209 assertTextsAroundCursor("", null, ""); 210 assertTextsAroundCursor("", null, "");
210 211
211 deleteSurroundingText(10, 10); 212 deleteSurroundingText(10, 10);
212 assertTextsAroundCursor("", null, ""); 213 assertTextsAroundCursor("", null, "");
213 } 214 }
214 215
215 @SmallTest 216 @SmallTest
216 @Feature({"TextInput", "Main"}) 217 @Feature({"TextInput", "Main"})
218 public void testDeleteSurroundingTextInCodePointsWithRangeSelection() throws Throwable {
219 commitText("hello", 1);
Changwan Ryu 2017/01/11 02:00:27 could you use an example where the text contains a
yabinh 2017/01/24 11:39:56 Done.
220 waitAndVerifyUpdateSelection(0, 5, 5, -1, -1);
221
222 setSelection(1, 4);
223 waitAndVerifyUpdateSelection(1, 1, 4, -1, -1);
224
225 deleteSurroundingTextInCodePoints(0, 0);
226 assertTextsAroundCursor("h", "ell", "o");
227
228 deleteSurroundingTextInCodePoints(1, 1);
229 assertTextsAroundCursor("", "ell", "");
230
231 deleteSurroundingTextInCodePoints(1, 0);
232 assertTextsAroundCursor("", "ell", "");
233
234 deleteSurroundingTextInCodePoints(0, 1);
235 assertTextsAroundCursor("", "ell", "");
236 }
237
238 @SmallTest
239 @Feature({"TextInput", "Main"})
240 public void testDeleteSurroundingTextInCodePointsWithCursorSelection() throw s Throwable {
241 commitText("hello", 1);
242 waitAndVerifyUpdateSelection(0, 5, 5, -1, -1);
243
244 setSelection(2, 2);
245 waitAndVerifyUpdateSelection(1, 2, 2, -1, -1);
246
247 deleteSurroundingTextInCodePoints(0, 0);
248 assertTextsAroundCursor("he", null, "llo");
249
250 deleteSurroundingTextInCodePoints(1, 1);
251 assertTextsAroundCursor("h", null, "lo");
252
253 deleteSurroundingTextInCodePoints(1, 0);
254 assertTextsAroundCursor("", null, "lo");
255
256 deleteSurroundingTextInCodePoints(0, 10);
257 assertTextsAroundCursor("", null, "");
258
259 deleteSurroundingTextInCodePoints(10, 10);
260 assertTextsAroundCursor("", null, "");
261 }
262
263 @SmallTest
264 @Feature({"TextInput", "Main"})
217 public void testSetComposingTextForNewCursorPositions() throws Throwable { 265 public void testSetComposingTextForNewCursorPositions() throws Throwable {
218 // Cursor is on the right of composing text when newCursorPosition > 0. 266 // Cursor is on the right of composing text when newCursorPosition > 0.
219 setComposingText("ab", 1); 267 setComposingText("ab", 1);
220 waitAndVerifyUpdateSelection(0, 2, 2, 0, 2); 268 waitAndVerifyUpdateSelection(0, 2, 2, 0, 2);
221 269
222 finishComposingText(); 270 finishComposingText();
223 waitAndVerifyUpdateSelection(1, 2, 2, -1, -1); 271 waitAndVerifyUpdateSelection(1, 2, 2, -1, -1);
224 272
225 // Cursor exceeds the left boundary. 273 // Cursor exceeds the left boundary.
226 setComposingText("cdef", -100); 274 setComposingText("cdef", -100);
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 1343
1296 deleteSurroundingText(1, 1); 1344 deleteSurroundingText(1, 1);
1297 waitAndVerifyUpdateSelection(2, 1, 1, -1, -1); 1345 waitAndVerifyUpdateSelection(2, 1, 1, -1, -1);
1298 // TODO(yabinh): It should only fire 1 input and 1 selectionchange event s. 1346 // TODO(yabinh): It should only fire 1 input and 1 selectionchange event s.
1299 waitForEventLogs("keydown(229),input,input,keyup(229),selectionchange,se lectionchange," 1347 waitForEventLogs("keydown(229),input,input,keyup(229),selectionchange,se lectionchange,"
1300 + "selectionchange,selectionchange"); 1348 + "selectionchange,selectionchange");
1301 } 1349 }
1302 1350
1303 @MediumTest 1351 @MediumTest
1304 @Feature({"TextInput"}) 1352 @Feature({"TextInput"})
1353 public void testContentEditableEvents_DeleteSurroundingTextInCodePoints() th rows Throwable {
1354 focusElementAndWaitForStateUpdate("contenteditable_event");
1355 waitForEventLogs("selectionchange,selectionchange");
1356 clearEventLogs();
1357
1358 commitText("hello", 1);
1359 waitAndVerifyUpdateSelection(0, 5, 5, -1, -1);
1360 waitForEventLogs("keydown(229),input,keyup(229),selectionchange");
1361 clearEventLogs();
1362
1363 setSelection(2, 2);
1364 waitAndVerifyUpdateSelection(1, 2, 2, -1, -1);
1365 waitForEventLogs("selectionchange");
1366 clearEventLogs();
1367
1368 deleteSurroundingTextInCodePoints(1, 1);
1369 waitAndVerifyUpdateSelection(2, 1, 1, -1, -1);
1370 // TODO(yabinh): It should only fire 1 input and 1 selectionchange event s.
1371 waitForEventLogs("keydown(229),input,input,keyup(229),selectionchange,se lectionchange,"
1372 + "selectionchange,selectionchange");
1373 }
1374
1375 @MediumTest
1376 @Feature({"TextInput"})
1377 public void testInputTextEvents_DeleteSurroundingTextInCodePoints() throws T hrowable {
1378 commitText("hello", 1);
1379 waitAndVerifyUpdateSelection(0, 5, 5, -1, -1);
1380 waitForEventLogs("keydown(229),input,keyup(229),selectionchange");
1381 clearEventLogs();
1382
1383 setSelection(2, 2);
1384 waitAndVerifyUpdateSelection(1, 2, 2, -1, -1);
1385 waitForEventLogs("selectionchange");
1386 clearEventLogs();
1387
1388 deleteSurroundingTextInCodePoints(1, 1);
1389 waitAndVerifyUpdateSelection(2, 1, 1, -1, -1);
1390 // TODO(yabinh): It should only fire 1 input and 1 selectionchange event s.
1391 waitForEventLogs("keydown(229),input,input,keyup(229),selectionchange,se lectionchange,"
1392 + "selectionchange,selectionchange");
1393 }
1394
1395 @MediumTest
1396 @Feature({"TextInput"})
1305 public void testGetCursorCapsMode() throws Throwable { 1397 public void testGetCursorCapsMode() throws Throwable {
1306 focusElementAndWaitForStateUpdate("contenteditable_event"); 1398 focusElementAndWaitForStateUpdate("contenteditable_event");
1307 commitText("Hello World", 1); 1399 commitText("Hello World", 1);
1308 waitAndVerifyUpdateSelection(0, 11, 11, -1, -1); 1400 waitAndVerifyUpdateSelection(0, 11, 11, -1, -1);
1309 assertEquals(0, 1401 assertEquals(0,
1310 getCursorCapsMode(InputType.TYPE_TEXT_FLAG_CAP_WORDS)); 1402 getCursorCapsMode(InputType.TYPE_TEXT_FLAG_CAP_WORDS));
1311 setSelection(6, 6); 1403 setSelection(6, 6);
1312 waitAndVerifyUpdateSelection(1, 6, 6, -1, -1); 1404 waitAndVerifyUpdateSelection(1, 6, 6, -1, -1);
1313 assertEquals(InputType.TYPE_TEXT_FLAG_CAP_WORDS, 1405 assertEquals(InputType.TYPE_TEXT_FLAG_CAP_WORDS,
1314 getCursorCapsMode(InputType.TYPE_TEXT_FLAG_CAP_WORDS)); 1406 getCursorCapsMode(InputType.TYPE_TEXT_FLAG_CAP_WORDS));
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
1669 private boolean deleteSurroundingText(final int before, final int after) thr ows Exception { 1761 private boolean deleteSurroundingText(final int before, final int after) thr ows Exception {
1670 final ChromiumBaseInputConnection connection = mConnection; 1762 final ChromiumBaseInputConnection connection = mConnection;
1671 return runBlockingOnImeThread(new Callable<Boolean>() { 1763 return runBlockingOnImeThread(new Callable<Boolean>() {
1672 @Override 1764 @Override
1673 public Boolean call() { 1765 public Boolean call() {
1674 return connection.deleteSurroundingText(before, after); 1766 return connection.deleteSurroundingText(before, after);
1675 } 1767 }
1676 }); 1768 });
1677 } 1769 }
1678 1770
1771 // Note that deleteSurroundingTextInCodePoints() was introduced in Android N (Api level 24), but
aelias_OOO_until_Jul13 2017/01/04 23:18:13 As of https://chromium-review.googlesource.com/#/c
yabinh 2017/01/05 01:38:50 There is no deleteSurroundingTextInCodePoints() in
yabinh 2017/01/05 02:04:55 It seems that only 'sdk/build-tools' was updated t
1772 // the Android repository used in Chrome is behind that (level 23). So this function can't be
1773 // called by keyboard apps currently.
1774 @TargetApi(24)
1775 private boolean deleteSurroundingTextInCodePoints(final int before, final in t after)
1776 throws Exception {
1777 final ThreadedInputConnection connection = (ThreadedInputConnection) mCo nnection;
1778 return runBlockingOnImeThread(new Callable<Boolean>() {
1779 @Override
1780 public Boolean call() {
1781 return connection.deleteSurroundingTextInCodePoints(before, afte r);
1782 }
1783 });
1784 }
1785
1679 private CharSequence getTextBeforeCursor(final int length, final int flags) throws Exception { 1786 private CharSequence getTextBeforeCursor(final int length, final int flags) throws Exception {
1680 final ChromiumBaseInputConnection connection = mConnection; 1787 final ChromiumBaseInputConnection connection = mConnection;
1681 return runBlockingOnImeThread(new Callable<CharSequence>() { 1788 return runBlockingOnImeThread(new Callable<CharSequence>() {
1682 @Override 1789 @Override
1683 public CharSequence call() { 1790 public CharSequence call() {
1684 return connection.getTextBeforeCursor(length, flags); 1791 return connection.getTextBeforeCursor(length, flags);
1685 } 1792 }
1686 }); 1793 });
1687 } 1794 }
1688 1795
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 public void onViewAttachedToWindow() { 1914 public void onViewAttachedToWindow() {
1808 mFactory.onViewAttachedToWindow(); 1915 mFactory.onViewAttachedToWindow();
1809 } 1916 }
1810 1917
1811 @Override 1918 @Override
1812 public void onViewDetachedFromWindow() { 1919 public void onViewDetachedFromWindow() {
1813 mFactory.onViewDetachedFromWindow(); 1920 mFactory.onViewDetachedFromWindow();
1814 } 1921 }
1815 } 1922 }
1816 } 1923 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698