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

Side by Side Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 1410333012: Update WebView visibility during attach/detach (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use post task to fix the visibility flip Created 5 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.android_webview; 5 package org.chromium.android_webview;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.content.ComponentCallbacks2; 9 import android.content.ComponentCallbacks2;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 mContentViewCore = createAndInitializeContentViewCore(mContainerView, mC ontext, 965 mContentViewCore = createAndInitializeContentViewCore(mContainerView, mC ontext,
966 mInternalAccessAdapter, webContents, new AwGestureStateListener( ), 966 mInternalAccessAdapter, webContents, new AwGestureStateListener( ),
967 mContentViewClient, mZoomControls, mWindowAndroid.getWindowAndro id()); 967 mContentViewClient, mZoomControls, mWindowAndroid.getWindowAndro id());
968 nativeSetJavaPeers(mNativeAwContents, this, mWebContentsDelegate, mConte ntsClientBridge, 968 nativeSetJavaPeers(mNativeAwContents, this, mWebContentsDelegate, mConte ntsClientBridge,
969 mIoThreadClient, mInterceptNavigationDelegate); 969 mIoThreadClient, mInterceptNavigationDelegate);
970 mWebContents = mContentViewCore.getWebContents(); 970 mWebContents = mContentViewCore.getWebContents();
971 mNavigationController = mWebContents.getNavigationController(); 971 mNavigationController = mWebContents.getNavigationController();
972 installWebContentsObserver(); 972 installWebContentsObserver();
973 mSettings.setWebContents(webContents); 973 mSettings.setWebContents(webContents);
974 nativeSetDipScale(mNativeAwContents, (float) mDIPScale); 974 nativeSetDipScale(mNativeAwContents, (float) mDIPScale);
975 updateContentViewCoreVisibility(); 975 postUpdateContentViewCoreVisibility();
976 976
977 // The native side object has been bound to this java instance, so now i s the time to 977 // The native side object has been bound to this java instance, so now i s the time to
978 // bind all the native->java relationships. 978 // bind all the native->java relationships.
979 mCleanupReference = 979 mCleanupReference =
980 new CleanupReference(this, new DestroyRunnable(mNativeAwContents )); 980 new CleanupReference(this, new DestroyRunnable(mNativeAwContents ));
981 } 981 }
982 982
983 private void installWebContentsObserver() { 983 private void installWebContentsObserver() {
984 if (mWebContentsObserver != null) { 984 if (mWebContentsObserver != null) {
985 mWebContentsObserver.destroy(); 985 mWebContentsObserver.destroy();
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 } 1791 }
1792 1792
1793 /** 1793 /**
1794 * @see android.webkit.WebView#onPause() 1794 * @see android.webkit.WebView#onPause()
1795 */ 1795 */
1796 public void onPause() { 1796 public void onPause() {
1797 if (TRACE) Log.d(TAG, "onPause"); 1797 if (TRACE) Log.d(TAG, "onPause");
1798 if (mIsPaused || isDestroyed(NO_WARN)) return; 1798 if (mIsPaused || isDestroyed(NO_WARN)) return;
1799 mIsPaused = true; 1799 mIsPaused = true;
1800 nativeSetIsPaused(mNativeAwContents, mIsPaused); 1800 nativeSetIsPaused(mNativeAwContents, mIsPaused);
1801 updateContentViewCoreVisibility(); 1801 postUpdateContentViewCoreVisibility();
1802 } 1802 }
1803 1803
1804 /** 1804 /**
1805 * @see android.webkit.WebView#onResume() 1805 * @see android.webkit.WebView#onResume()
1806 */ 1806 */
1807 public void onResume() { 1807 public void onResume() {
1808 if (TRACE) Log.d(TAG, "onResume"); 1808 if (TRACE) Log.d(TAG, "onResume");
1809 if (!mIsPaused || isDestroyed(NO_WARN)) return; 1809 if (!mIsPaused || isDestroyed(NO_WARN)) return;
1810 mIsPaused = false; 1810 mIsPaused = false;
1811 nativeSetIsPaused(mNativeAwContents, mIsPaused); 1811 nativeSetIsPaused(mNativeAwContents, mIsPaused);
1812 updateContentViewCoreVisibility(); 1812 postUpdateContentViewCoreVisibility();
1813 } 1813 }
1814 1814
1815 /** 1815 /**
1816 * @see android.webkit.WebView#isPaused() 1816 * @see android.webkit.WebView#isPaused()
1817 */ 1817 */
1818 public boolean isPaused() { 1818 public boolean isPaused() {
1819 return isDestroyed(WARN) ? false : mIsPaused; 1819 return isDestroyed(WARN) ? false : mIsPaused;
1820 } 1820 }
1821 1821
1822 /** 1822 /**
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2341 /** 2341 /**
2342 * @see android.view.View#onWindowVisibilityChanged() 2342 * @see android.view.View#onWindowVisibilityChanged()
2343 */ 2343 */
2344 public void onWindowVisibilityChanged(int visibility) { 2344 public void onWindowVisibilityChanged(int visibility) {
2345 mAwViewMethods.onWindowVisibilityChanged(visibility); 2345 mAwViewMethods.onWindowVisibilityChanged(visibility);
2346 } 2346 }
2347 2347
2348 private void setViewVisibilityInternal(boolean visible) { 2348 private void setViewVisibilityInternal(boolean visible) {
2349 mIsViewVisible = visible; 2349 mIsViewVisible = visible;
2350 if (!isDestroyed(NO_WARN)) nativeSetViewVisibility(mNativeAwContents, mI sViewVisible); 2350 if (!isDestroyed(NO_WARN)) nativeSetViewVisibility(mNativeAwContents, mI sViewVisible);
2351 updateContentViewCoreVisibility(); 2351 postUpdateContentViewCoreVisibility();
2352 } 2352 }
2353 2353
2354 private void setWindowVisibilityInternal(boolean visible) { 2354 private void setWindowVisibilityInternal(boolean visible) {
2355 mInvalidateRootViewOnNextDraw |= Build.VERSION.SDK_INT <= Build.VERSION_ CODES.LOLLIPOP 2355 mInvalidateRootViewOnNextDraw |= Build.VERSION.SDK_INT <= Build.VERSION_ CODES.LOLLIPOP
2356 && visible && !mIsWindowVisible; 2356 && visible && !mIsWindowVisible;
2357 mIsWindowVisible = visible; 2357 mIsWindowVisible = visible;
2358 if (!isDestroyed(NO_WARN)) nativeSetWindowVisibility(mNativeAwContents, mIsWindowVisible); 2358 if (!isDestroyed(NO_WARN)) nativeSetWindowVisibility(mNativeAwContents, mIsWindowVisible);
2359 updateContentViewCoreVisibility(); 2359 postUpdateContentViewCoreVisibility();
2360 }
2361
2362 private void postUpdateContentViewCoreVisibility() {
2363 // When WebView is attached to a visible window, WebView will be
2364 // attached to a window whose visibility is initially invisible, then
2365 // the window visibility will be updated to true. This means CVC
2366 // visibility will be set to false then true immediately, in the same
2367 // function call of View#dispatchAttachedToWindow. To prevent this flip
2368 // of CVC visibility, post the task to update CVC visibility.
2369 mHandler.post(new Runnable() {
boliu 2015/11/03 22:05:46 Can you not post more than you need to? Also don'
2370 @Override
2371 public void run() {
2372 updateContentViewCoreVisibility();
2373 }
2374 });
2360 } 2375 }
2361 2376
2362 private void updateContentViewCoreVisibility() { 2377 private void updateContentViewCoreVisibility() {
2363 if (isDestroyed(NO_WARN)) return; 2378 if (isDestroyed(NO_WARN)) return;
2364 boolean contentViewCoreVisible = nativeIsVisible(mNativeAwContents); 2379 boolean contentViewCoreVisible = nativeIsVisible(mNativeAwContents);
2365 2380
2366 if (contentViewCoreVisible && !mIsContentViewCoreVisible) { 2381 if (contentViewCoreVisible && !mIsContentViewCoreVisible) {
2367 mContentViewCore.onShow(); 2382 mContentViewCore.onShow();
2368 } else if (!contentViewCoreVisible && mIsContentViewCoreVisible) { 2383 } else if (!contentViewCoreVisible && mIsContentViewCoreVisible) {
2369 mContentViewCore.onHide(); 2384 mContentViewCore.onHide();
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
2998 if (mIsAttachedToWindow) { 3013 if (mIsAttachedToWindow) {
2999 Log.w(TAG, "onAttachedToWindow called when already attached. Ign oring"); 3014 Log.w(TAG, "onAttachedToWindow called when already attached. Ign oring");
3000 return; 3015 return;
3001 } 3016 }
3002 mIsAttachedToWindow = true; 3017 mIsAttachedToWindow = true;
3003 3018
3004 mContentViewCore.onAttachedToWindow(); 3019 mContentViewCore.onAttachedToWindow();
3005 nativeOnAttachedToWindow(mNativeAwContents, mContainerView.getWidth( ), 3020 nativeOnAttachedToWindow(mNativeAwContents, mContainerView.getWidth( ),
3006 mContainerView.getHeight()); 3021 mContainerView.getHeight());
3007 updateHardwareAcceleratedFeaturesToggle(); 3022 updateHardwareAcceleratedFeaturesToggle();
3023 postUpdateContentViewCoreVisibility();
3008 3024
3009 setLocale(LocaleUtils.getDefaultLocale()); 3025 setLocale(LocaleUtils.getDefaultLocale());
3010 3026
3011 if (mComponentCallbacks != null) return; 3027 if (mComponentCallbacks != null) return;
3012 mComponentCallbacks = new AwComponentCallbacks(); 3028 mComponentCallbacks = new AwComponentCallbacks();
3013 mContext.registerComponentCallbacks(mComponentCallbacks); 3029 mContext.registerComponentCallbacks(mComponentCallbacks);
3014 } 3030 }
3015 3031
3016 @Override 3032 @Override
3017 public void onDetachedFromWindow() { 3033 public void onDetachedFromWindow() {
3018 if (isDestroyed(NO_WARN)) return; 3034 if (isDestroyed(NO_WARN)) return;
3019 if (!mIsAttachedToWindow) { 3035 if (!mIsAttachedToWindow) {
3020 Log.w(TAG, "onDetachedFromWindow called when already detached. I gnoring"); 3036 Log.w(TAG, "onDetachedFromWindow called when already detached. I gnoring");
3021 return; 3037 return;
3022 } 3038 }
3023 mIsAttachedToWindow = false; 3039 mIsAttachedToWindow = false;
3024 hideAutofillPopup(); 3040 hideAutofillPopup();
3025 nativeOnDetachedFromWindow(mNativeAwContents); 3041 nativeOnDetachedFromWindow(mNativeAwContents);
3026 3042
3027 mContentViewCore.onDetachedFromWindow(); 3043 mContentViewCore.onDetachedFromWindow();
3028 updateHardwareAcceleratedFeaturesToggle(); 3044 updateHardwareAcceleratedFeaturesToggle();
3045 postUpdateContentViewCoreVisibility();
3029 3046
3030 if (mComponentCallbacks != null) { 3047 if (mComponentCallbacks != null) {
3031 mContext.unregisterComponentCallbacks(mComponentCallbacks); 3048 mContext.unregisterComponentCallbacks(mComponentCallbacks);
3032 mComponentCallbacks = null; 3049 mComponentCallbacks = null;
3033 } 3050 }
3034 3051
3035 mScrollAccessibilityHelper.removePostedCallbacks(); 3052 mScrollAccessibilityHelper.removePostedCallbacks();
3036 } 3053 }
3037 3054
3038 @Override 3055 @Override
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
3229 private native void nativePreauthorizePermission(long nativeAwContents, Stri ng origin, 3246 private native void nativePreauthorizePermission(long nativeAwContents, Stri ng origin,
3230 long resources); 3247 long resources);
3231 3248
3232 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId, 3249 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId,
3233 String message, String targetOrigin, int[] msgPorts); 3250 String message, String targetOrigin, int[] msgPorts);
3234 3251
3235 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports); 3252 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports);
3236 3253
3237 private native void nativeGrantFileSchemeAccesstoChildProcess(long nativeAwC ontents); 3254 private native void nativeGrantFileSchemeAccesstoChildProcess(long nativeAwC ontents);
3238 } 3255 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698