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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 2752113005: Let ImeAdapterAndroid have the same lifecycle as its Java peer (Closed)
Patch Set: fix tests Created 3 years, 8 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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; 5 package org.chromium.content.browser;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.annotation.TargetApi; 8 import android.annotation.TargetApi;
9 import android.app.assist.AssistStructure.ViewNode; 9 import android.app.assist.AssistStructure.ViewNode;
10 import android.content.ClipData; 10 import android.content.ClipData;
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 public void setImeAdapterForTest(ImeAdapter imeAdapter) { 476 public void setImeAdapterForTest(ImeAdapter imeAdapter) {
477 mImeAdapter = imeAdapter; 477 mImeAdapter = imeAdapter;
478 } 478 }
479 479
480 @VisibleForTesting 480 @VisibleForTesting
481 public ImeAdapter getImeAdapterForTest() { 481 public ImeAdapter getImeAdapterForTest() {
482 return mImeAdapter; 482 return mImeAdapter;
483 } 483 }
484 484
485 private ImeAdapter createImeAdapter() { 485 private ImeAdapter createImeAdapter() {
486 return new ImeAdapter( 486 return new ImeAdapter(mWebContents, new InputMethodManagerWrapper(mConte xt),
487 new InputMethodManagerWrapper(mContext), new ImeAdapter.ImeAdapt erDelegate() { 487 new ImeAdapter.ImeAdapterDelegate() {
488 @Override 488 @Override
489 public void onImeEvent() { 489 public void onImeEvent() {
490 mPopupZoomer.hide(true); 490 mPopupZoomer.hide(true);
491 getContentViewClient().onImeEvent(); 491 getContentViewClient().onImeEvent();
492 if (isFocusedNodeEditable()) mWebContents.dismissTextHan dles(); 492 if (isFocusedNodeEditable()) mWebContents.dismissTextHan dles();
493 } 493 }
494 494
495 @Override 495 @Override
496 public void onKeyboardBoundsUnchanged() { 496 public void onKeyboardBoundsUnchanged() {
497 assert mWebContents != null; 497 assert mWebContents != null;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 mRenderCoordinates.setDeviceScaleFactor(dipScale, windowAndroid.getConte xt()); 562 mRenderCoordinates.setDeviceScaleFactor(dipScale, windowAndroid.getConte xt());
563 563
564 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w indowNativePointer, 564 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w indowNativePointer,
565 dipScale, mRetainedJavaScriptObjects); 565 dipScale, mRetainedJavaScriptObjects);
566 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore); 566 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore);
567 567
568 setContainerViewInternals(internalDispatcher); 568 setContainerViewInternals(internalDispatcher);
569 569
570 initPopupZoomer(mContext); 570 initPopupZoomer(mContext);
571 mImeAdapter = createImeAdapter(); 571 mImeAdapter = createImeAdapter();
572 attachImeAdapter();
573 572
574 mSelectionPopupController = new SelectionPopupController(mContext, windo wAndroid, 573 mSelectionPopupController = new SelectionPopupController(mContext, windo wAndroid,
575 webContents, viewDelegate.getContainerView(), mRenderCoordinates , mImeAdapter); 574 webContents, viewDelegate.getContainerView(), mRenderCoordinates );
576 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL LBACK); 575 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL LBACK);
577 mSelectionPopupController.setContainerView(getContainerView()); 576 mSelectionPopupController.setContainerView(getContainerView());
578 577
579 mWebContentsObserver = new ContentViewWebContentsObserver(this); 578 mWebContentsObserver = new ContentViewWebContentsObserver(this);
580 579
581 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO N_CODES.LOLLIPOP 580 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO N_CODES.LOLLIPOP
582 && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUF FERED_DISPATCH); 581 && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUF FERED_DISPATCH);
583 } 582 }
584 583
585 /** 584 /**
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 } 1763 }
1765 1764
1766 mImeAdapter.onUpdateFrameInfo(mRenderCoordinates, hasInsertionMarker, 1765 mImeAdapter.onUpdateFrameInfo(mRenderCoordinates, hasInsertionMarker,
1767 isInsertionMarkerVisible, insertionMarkerHorizontal, insertionMa rkerTop, 1766 isInsertionMarkerVisible, insertionMarkerHorizontal, insertionMa rkerTop,
1768 insertionMarkerBottom); 1767 insertionMarkerBottom);
1769 1768
1770 TraceEvent.end("ContentViewCore:updateFrameInfo"); 1769 TraceEvent.end("ContentViewCore:updateFrameInfo");
1771 } 1770 }
1772 1771
1773 @CalledByNative 1772 @CalledByNative
1774 private void updateImeAdapter(long nativeImeAdapterAndroid, int textInputTyp e, 1773 private void updateImeAdapter(int textInputType, int textInputFlags, int tex tInputMode,
1775 int textInputFlags, int textInputMode, String text, int selectionSta rt, 1774 String text, int selectionStart, int selectionEnd, int compositionSt art,
1776 int selectionEnd, int compositionStart, int compositionEnd, boolean showImeIfNeeded, 1775 int compositionEnd, boolean showImeIfNeeded, boolean replyToRequest) {
1777 boolean replyToRequest) {
1778 try { 1776 try {
1779 TraceEvent.begin("ContentViewCore.updateImeAdapter"); 1777 TraceEvent.begin("ContentViewCore.updateImeAdapter");
1780 boolean focusedNodeEditable = (textInputType != TextInputType.NONE); 1778 boolean focusedNodeEditable = (textInputType != TextInputType.NONE);
1781 boolean focusedNodeIsPassword = (textInputType == TextInputType.PASS WORD); 1779 boolean focusedNodeIsPassword = (textInputType == TextInputType.PASS WORD);
1782 1780
1783 mImeAdapter.attach(nativeImeAdapterAndroid);
1784 mImeAdapter.updateState(textInputType, textInputFlags, textInputMode , showImeIfNeeded, 1781 mImeAdapter.updateState(textInputType, textInputFlags, textInputMode , showImeIfNeeded,
1785 text, selectionStart, selectionEnd, compositionStart, compos itionEnd, 1782 text, selectionStart, selectionEnd, compositionStart, compos itionEnd,
1786 replyToRequest); 1783 replyToRequest);
1787 1784
1788 boolean editableToggled = (focusedNodeEditable != isFocusedNodeEdita ble()); 1785 boolean editableToggled = (focusedNodeEditable != isFocusedNodeEdita ble());
1789 mSelectionPopupController.updateSelectionState(focusedNodeEditable, 1786 mSelectionPopupController.updateSelectionState(focusedNodeEditable,
1790 focusedNodeIsPassword); 1787 focusedNodeIsPassword);
1791 if (editableToggled) { 1788 if (editableToggled) {
1792 if (mJoystickScrollProvider != null) { 1789 if (mJoystickScrollProvider != null) {
1793 mJoystickScrollProvider.setEnabled(!focusedNodeEditable); 1790 mJoystickScrollProvider.setEnabled(!focusedNodeEditable);
1794 } 1791 }
1795 getContentViewClient().onFocusedNodeEditabilityChanged(focusedNo deEditable); 1792 getContentViewClient().onFocusedNodeEditabilityChanged(focusedNo deEditable);
1796 } 1793 }
1797 } finally { 1794 } finally {
1798 TraceEvent.end("ContentViewCore.updateImeAdapter"); 1795 TraceEvent.end("ContentViewCore.updateImeAdapter");
1799 } 1796 }
1800 } 1797 }
1801 1798
1802 @CalledByNative
1803 private void forceUpdateImeAdapter(long nativeImeAdapterAndroid) {
1804 mImeAdapter.attach(nativeImeAdapterAndroid);
1805 }
1806
1807 /** 1799 /**
1808 * Called (from native) when the <select> popup needs to be shown. 1800 * Called (from native) when the <select> popup needs to be shown.
1809 * @param anchorView View anchored for popup. 1801 * @param anchorView View anchored for popup.
1810 * @param nativeSelectPopupSourceFrame The native RenderFrameHost that owns the popup. 1802 * @param nativeSelectPopupSourceFrame The native RenderFrameHost that owns the popup.
1811 * @param items Items to show. 1803 * @param items Items to show.
1812 * @param enabled POPUP_ITEM_TYPEs for items. 1804 * @param enabled POPUP_ITEM_TYPEs for items.
1813 * @param multiple Whether the popup menu should support multi-select . 1805 * @param multiple Whether the popup menu should support multi-select .
1814 * @param selectedIndices Indices of selected items. 1806 * @param selectedIndices Indices of selected items.
1815 */ 1807 */
1816 @SuppressWarnings("unused") 1808 @SuppressWarnings("unused")
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 } 1899 }
1908 1900
1909 private boolean canPaste() { 1901 private boolean canPaste() {
1910 return ((ClipboardManager) mContext.getSystemService( 1902 return ((ClipboardManager) mContext.getSystemService(
1911 Context.CLIPBOARD_SERVICE)).hasPrimaryClip(); 1903 Context.CLIPBOARD_SERVICE)).hasPrimaryClip();
1912 } 1904 }
1913 1905
1914 @SuppressWarnings("unused") 1906 @SuppressWarnings("unused")
1915 @CalledByNative 1907 @CalledByNative
1916 private void onRenderProcessChange() { 1908 private void onRenderProcessChange() {
1917 attachImeAdapter();
1918 // Immediately sync closed caption settings to the new render process. 1909 // Immediately sync closed caption settings to the new render process.
1919 mSystemCaptioningBridge.syncToListener(this); 1910 mSystemCaptioningBridge.syncToListener(this);
1920 } 1911 }
1921 1912
1922 /** 1913 /**
1923 * Attaches the native ImeAdapter object to the java ImeAdapter to allow com munication via JNI.
1924 */
1925 public void attachImeAdapter() {
1926 if (mImeAdapter != null && mNativeContentViewCore != 0) {
1927 mImeAdapter.attach(nativeGetNativeImeAdapter(mNativeContentViewCore) );
1928 }
1929 }
1930
1931 /**
1932 * @see View#hasFocus() 1914 * @see View#hasFocus()
1933 */ 1915 */
1934 @CalledByNative 1916 @CalledByNative
1935 private boolean hasFocus() { 1917 private boolean hasFocus() {
1936 // If the container view is not focusable, we consider it always focused from 1918 // If the container view is not focusable, we consider it always focused from
1937 // Chromium's point of view. 1919 // Chromium's point of view.
1938 if (!mContainerView.isFocusable()) return true; 1920 if (!mContainerView.isFocusable()) return true;
1939 return mContainerView.hasFocus(); 1921 return mContainerView.hasFocus();
1940 } 1922 }
1941 1923
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
2642 2624
2643 private native void nativeSetDoubleTapSupportEnabled( 2625 private native void nativeSetDoubleTapSupportEnabled(
2644 long nativeContentViewCoreImpl, boolean enabled); 2626 long nativeContentViewCoreImpl, boolean enabled);
2645 2627
2646 private native void nativeSetMultiTouchZoomSupportEnabled( 2628 private native void nativeSetMultiTouchZoomSupportEnabled(
2647 long nativeContentViewCoreImpl, boolean enabled); 2629 long nativeContentViewCoreImpl, boolean enabled);
2648 2630
2649 private native void nativeSelectPopupMenuItems(long nativeContentViewCoreImp l, 2631 private native void nativeSelectPopupMenuItems(long nativeContentViewCoreImp l,
2650 long nativeSelectPopupSourceFrame, int[] indices); 2632 long nativeSelectPopupSourceFrame, int[] indices);
2651 2633
2652
2653 private native long nativeGetNativeImeAdapter(long nativeContentViewCoreImpl );
2654
2655 private native int nativeGetCurrentRenderProcessId(long nativeContentViewCor eImpl); 2634 private native int nativeGetCurrentRenderProcessId(long nativeContentViewCor eImpl);
2656 2635
2657 private native void nativeSetAllowJavascriptInterfacesInspection( 2636 private native void nativeSetAllowJavascriptInterfacesInspection(
2658 long nativeContentViewCoreImpl, boolean allow); 2637 long nativeContentViewCoreImpl, boolean allow);
2659 2638
2660 private native void nativeAddJavascriptInterface(long nativeContentViewCoreI mpl, Object object, 2639 private native void nativeAddJavascriptInterface(long nativeContentViewCoreI mpl, Object object,
2661 String name, Class requiredAnnotation); 2640 String name, Class requiredAnnotation);
2662 2641
2663 private native void nativeRemoveJavascriptInterface(long nativeContentViewCo reImpl, 2642 private native void nativeRemoveJavascriptInterface(long nativeContentViewCo reImpl,
2664 String name); 2643 String name);
2665 2644
2666 private native void nativeWasResized(long nativeContentViewCoreImpl); 2645 private native void nativeWasResized(long nativeContentViewCoreImpl);
2667 2646
2668 private native void nativeSetAccessibilityEnabled( 2647 private native void nativeSetAccessibilityEnabled(
2669 long nativeContentViewCoreImpl, boolean enabled); 2648 long nativeContentViewCoreImpl, boolean enabled);
2670 2649
2671 private native void nativeSetTextTrackSettings(long nativeContentViewCoreImp l, 2650 private native void nativeSetTextTrackSettings(long nativeContentViewCoreImp l,
2672 boolean textTracksEnabled, String textTrackBackgroundColor, String t extTrackFontFamily, 2651 boolean textTracksEnabled, String textTrackBackgroundColor, String t extTrackFontFamily,
2673 String textTrackFontStyle, String textTrackFontVariant, String textT rackTextColor, 2652 String textTrackFontStyle, String textTrackFontVariant, String textT rackTextColor,
2674 String textTrackTextShadow, String textTrackTextSize); 2653 String textTrackTextShadow, String textTrackTextSize);
2675 2654
2676 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); 2655 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque);
2677 private native boolean nativeIsTouchDragDropEnabled(long nativeContentViewCo reImpl); 2656 private native boolean nativeIsTouchDragDropEnabled(long nativeContentViewCo reImpl);
2678 private native void nativeOnDragEvent(long nativeContentViewCoreImpl, int ac tion, int x, int y, 2657 private native void nativeOnDragEvent(long nativeContentViewCoreImpl, int ac tion, int x, int y,
2679 int screenX, int screenY, String[] mimeTypes, String content); 2658 int screenX, int screenY, String[] mimeTypes, String content);
2680 } 2659 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698