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

Side by Side Diff: ui/android/java/src/org/chromium/ui/base/WindowAndroid.java

Issue 2428383006: Decouple VR Shell DPR and CSS size from Physical Displays. (Closed)
Patch Set: Address bshe comments + minor fix Created 4 years 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 | « ui/android/delegated_frame_host_android.cc ('k') | ui/snapshot/snapshot_android.cc » ('j') | 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.ui.base; 5 package org.chromium.ui.base;
6 6
7 import android.animation.Animator; 7 import android.animation.Animator;
8 import android.animation.AnimatorListenerAdapter; 8 import android.animation.AnimatorListenerAdapter;
9 import android.annotation.SuppressLint; 9 import android.annotation.SuppressLint;
10 import android.annotation.TargetApi; 10 import android.annotation.TargetApi;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 protected SparseArray<IntentCallback> mOutstandingIntents; 84 protected SparseArray<IntentCallback> mOutstandingIntents;
85 // We use a weak reference here to prevent this from leaking in WebView. 85 // We use a weak reference here to prevent this from leaking in WebView.
86 private WeakReference<Context> mContextRef; 86 private WeakReference<Context> mContextRef;
87 87
88 // Ideally, this would be a SparseArray<String>, but there's no easy way to store a 88 // Ideally, this would be a SparseArray<String>, but there's no easy way to store a
89 // SparseArray<String> in a bundle during saveInstanceState(). So we use a H ashMap and suppress 89 // SparseArray<String> in a bundle during saveInstanceState(). So we use a H ashMap and suppress
90 // the Android lint warning "UseSparseArrays". 90 // the Android lint warning "UseSparseArrays".
91 protected HashMap<Integer, String> mIntentErrors; 91 protected HashMap<Integer, String> mIntentErrors;
92 92
93 // We track all animations over content and provide a drawing placeholder fo r them. 93 // We track all animations over content and provide a drawing placeholder fo r them.
94 private HashSet<Animator> mAnimationsOverContent = new HashSet<Animator>(); 94 private HashSet<Animator> mAnimationsOverContent = new HashSet<>();
95 private View mAnimationPlaceholderView; 95 private View mAnimationPlaceholderView;
96 96
97 private ViewGroup mKeyboardAccessoryView; 97 private ViewGroup mKeyboardAccessoryView;
98 98
99 protected boolean mIsKeyboardShowing = false; 99 protected boolean mIsKeyboardShowing = false;
100 100
101 // System accessibility service. 101 // System accessibility service.
102 private final AccessibilityManager mAccessibilityManager; 102 private final AccessibilityManager mAccessibilityManager;
103 103
104 // Whether touch exploration is enabled. 104 // Whether touch exploration is enabled.
105 private boolean mIsTouchExplorationEnabled; 105 private boolean mIsTouchExplorationEnabled;
106 106
107 // On KitKat and higher, a class that monitors the touch exploration state. 107 // On KitKat and higher, a class that monitors the touch exploration state.
108 private TouchExplorationMonitor mTouchExplorationMonitor; 108 private TouchExplorationMonitor mTouchExplorationMonitor;
109 109
110 private AndroidPermissionDelegate mPermissionDelegate; 110 private AndroidPermissionDelegate mPermissionDelegate;
111 111
112 /** 112 /**
113 * An interface to notify listeners of changes in the soft keyboard's visibi lity. 113 * An interface to notify listeners of changes in the soft keyboard's visibi lity.
114 */ 114 */
115 public interface KeyboardVisibilityListener { 115 public interface KeyboardVisibilityListener {
116 public void keyboardVisibilityChanged(boolean isShowing); 116 public void keyboardVisibilityChanged(boolean isShowing);
117 } 117 }
118 private LinkedList<KeyboardVisibilityListener> mKeyboardVisibilityListeners = 118 private LinkedList<KeyboardVisibilityListener> mKeyboardVisibilityListeners =
119 new LinkedList<KeyboardVisibilityListener>(); 119 new LinkedList<>();
120 120
121 private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listen er() { 121 private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listen er() {
122 @Override 122 @Override
123 public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { 123 public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) {
124 if (mNativeWindowAndroid != 0) { 124 if (mNativeWindowAndroid != 0) {
125 nativeOnVSync(mNativeWindowAndroid, 125 nativeOnVSync(mNativeWindowAndroid,
126 vsyncTimeMicros, 126 vsyncTimeMicros,
127 mVSyncMonitor.getVSyncPeriodInMicroseconds()); 127 mVSyncMonitor.getVSyncPeriodInMicroseconds());
128 } 128 }
129 } 129 }
(...skipping 29 matching lines...) Expand all
159 /** 159 /**
160 * @return The time interval between two consecutive vsync pulses in millise conds. 160 * @return The time interval between two consecutive vsync pulses in millise conds.
161 */ 161 */
162 public long getVsyncPeriodInMillis() { 162 public long getVsyncPeriodInMillis() {
163 return mVSyncMonitor.getVSyncPeriodInMicroseconds() / 1000; 163 return mVSyncMonitor.getVSyncPeriodInMicroseconds() / 1000;
164 } 164 }
165 165
166 /** 166 /**
167 * @param context The application context. 167 * @param context The application context.
168 */ 168 */
169 public WindowAndroid(Context context) {
170 this(context, DisplayAndroid.getNonMultiDisplay(context));
171 }
172
173 /**
174 * @param context The application context.
175 * @param display
176 */
169 @SuppressLint("UseSparseArrays") 177 @SuppressLint("UseSparseArrays")
170 public WindowAndroid(Context context) { 178 protected WindowAndroid(Context context, DisplayAndroid display) {
171 mApplicationContext = context.getApplicationContext(); 179 mApplicationContext = context.getApplicationContext();
172 // context does not have the same lifetime guarantees as an application context so we can't 180 // context does not have the same lifetime guarantees as an application context so we can't
173 // hold a strong reference to it. 181 // hold a strong reference to it.
174 mContextRef = new WeakReference<Context>(context); 182 mContextRef = new WeakReference<>(context);
175 mOutstandingIntents = new SparseArray<IntentCallback>(); 183 mOutstandingIntents = new SparseArray<>();
176 mIntentErrors = new HashMap<Integer, String>(); 184 mIntentErrors = new HashMap<>();
177 mVSyncMonitor = new VSyncMonitor(context, mVSyncListener); 185 mVSyncMonitor = new VSyncMonitor(context, mVSyncListener);
178 mAccessibilityManager = (AccessibilityManager) mApplicationContext.getSy stemService( 186 mAccessibilityManager = (AccessibilityManager) mApplicationContext.getSy stemService(
179 Context.ACCESSIBILITY_SERVICE); 187 Context.ACCESSIBILITY_SERVICE);
180 mDisplayAndroid = DisplayAndroid.getNonMultiDisplay(context); 188 mDisplayAndroid = display;
181 } 189 }
182 190
183 @CalledByNative 191 @CalledByNative
184 private static long createForTesting(Context context) { 192 private static long createForTesting(Context context) {
185 WindowAndroid windowAndroid = new WindowAndroid(context); 193 WindowAndroid windowAndroid = new WindowAndroid(context);
186 // |windowAndroid.getNativePointer()| creates native WindowAndroid objec t 194 // |windowAndroid.getNativePointer()| creates native WindowAndroid objec t
187 // which stores a global ref to |windowAndroid|. Therefore |windowAndroi d| 195 // which stores a global ref to |windowAndroid|. Therefore |windowAndroi d|
188 // is not immediately eligible for gc. 196 // is not immediately eligible for gc.
189 return windowAndroid.getNativePointer(); 197 return windowAndroid.getNativePointer();
190 } 198 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 public DisplayAndroid getDisplay() { 412 public DisplayAndroid getDisplay() {
405 return mDisplayAndroid; 413 return mDisplayAndroid;
406 } 414 }
407 415
408 /** 416 /**
409 * @return A reference to owning Activity. The returned WeakReference will never be null, but 417 * @return A reference to owning Activity. The returned WeakReference will never be null, but
410 * the contained Activity can be null (either if it has been garbage collected or if 418 * the contained Activity can be null (either if it has been garbage collected or if
411 * this is in the context of a WebView that was not created using an Activity). 419 * this is in the context of a WebView that was not created using an Activity).
412 */ 420 */
413 public WeakReference<Activity> getActivity() { 421 public WeakReference<Activity> getActivity() {
414 return new WeakReference<Activity>(null); 422 return new WeakReference<>(null);
415 } 423 }
416 424
417 /** 425 /**
418 * @return The application context for this activity. 426 * @return The application context for this activity.
419 */ 427 */
420 public Context getApplicationContext() { 428 public Context getApplicationContext() {
421 return mApplicationContext; 429 return mApplicationContext;
422 } 430 }
423 431
424 /** 432 /**
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 * To be called when the keyboard visibility state might have changed. Infor ms listeners of the 615 * To be called when the keyboard visibility state might have changed. Infor ms listeners of the
608 * state change IFF there actually was a change. 616 * state change IFF there actually was a change.
609 * @param isShowing The current (guesstimated) state of the keyboard. 617 * @param isShowing The current (guesstimated) state of the keyboard.
610 */ 618 */
611 protected void keyboardVisibilityPossiblyChanged(boolean isShowing) { 619 protected void keyboardVisibilityPossiblyChanged(boolean isShowing) {
612 if (mIsKeyboardShowing == isShowing) return; 620 if (mIsKeyboardShowing == isShowing) return;
613 mIsKeyboardShowing = isShowing; 621 mIsKeyboardShowing = isShowing;
614 622
615 // Clone the list in case a listener tries to remove itself during the c allback. 623 // Clone the list in case a listener tries to remove itself during the c allback.
616 LinkedList<KeyboardVisibilityListener> listeners = 624 LinkedList<KeyboardVisibilityListener> listeners =
617 new LinkedList<KeyboardVisibilityListener>(mKeyboardVisibilityLi steners); 625 new LinkedList<>(mKeyboardVisibilityListeners);
618 for (KeyboardVisibilityListener listener : listeners) { 626 for (KeyboardVisibilityListener listener : listeners) {
619 listener.keyboardVisibilityChanged(isShowing); 627 listener.keyboardVisibilityChanged(isShowing);
620 } 628 }
621 } 629 }
622 630
623 /** 631 /**
624 * Start a post-layout animation on top of web content. 632 * Start a post-layout animation on top of web content.
625 * 633 *
626 * By default, Android optimizes what it shows on top of SurfaceViews (saves power). 634 * By default, Android optimizes what it shows on top of SurfaceViews (saves power).
627 * Effectively, layouts determine what gets drawn and post-layout animations outside 635 * Effectively, layouts determine what gets drawn and post-layout animations outside
(...skipping 28 matching lines...) Expand all
656 }); 664 });
657 } 665 }
658 666
659 /** 667 /**
660 * Getter for the current context (not necessarily the application context). 668 * Getter for the current context (not necessarily the application context).
661 * Make no assumptions regarding what type of Context is returned here, it c ould be for example 669 * Make no assumptions regarding what type of Context is returned here, it c ould be for example
662 * an Activity or a Context created specifically to target an external displ ay. 670 * an Activity or a Context created specifically to target an external displ ay.
663 */ 671 */
664 public WeakReference<Context> getContext() { 672 public WeakReference<Context> getContext() {
665 // Return a new WeakReference to prevent clients from releasing our inte rnal WeakReference. 673 // Return a new WeakReference to prevent clients from releasing our inte rnal WeakReference.
666 return new WeakReference<Context>(mContextRef.get()); 674 return new WeakReference<>(mContextRef.get());
667 } 675 }
668 676
669 /** 677 /**
670 * Update whether the placeholder is 'drawn' based on whether an animation i s running 678 * Update whether the placeholder is 'drawn' based on whether an animation i s running
671 * or touch exploration is enabled - if either of those are true, we call 679 * or touch exploration is enabled - if either of those are true, we call
672 * setWillNotDraw(false) to ensure that the animation is drawn over the Surf aceView, 680 * setWillNotDraw(false) to ensure that the animation is drawn over the Surf aceView,
673 * and otherwise we call setWillNotDraw(true). 681 * and otherwise we call setWillNotDraw(true).
674 */ 682 */
675 private void refreshWillNotDraw() { 683 private void refreshWillNotDraw() {
676 boolean willNotDraw = !mIsTouchExplorationEnabled && mAnimationsOverCont ent.isEmpty(); 684 boolean willNotDraw = !mIsTouchExplorationEnabled && mAnimationsOverCont ent.isEmpty();
677 if (mAnimationPlaceholderView.willNotDraw() != willNotDraw) { 685 if (mAnimationPlaceholderView.willNotDraw() != willNotDraw) {
678 mAnimationPlaceholderView.setWillNotDraw(willNotDraw); 686 mAnimationPlaceholderView.setWillNotDraw(willNotDraw);
679 } 687 }
680 } 688 }
681 689
682 private native long nativeInit(int displayId); 690 private native long nativeInit(int displayId);
683 private native void nativeOnVSync(long nativeWindowAndroid, 691 private native void nativeOnVSync(long nativeWindowAndroid,
684 long vsyncTimeMicros, 692 long vsyncTimeMicros,
685 long vsyncPeriodMicros); 693 long vsyncPeriodMicros);
686 private native void nativeOnVisibilityChanged(long nativeWindowAndroid, bool ean visible); 694 private native void nativeOnVisibilityChanged(long nativeWindowAndroid, bool ean visible);
687 private native void nativeOnActivityStopped(long nativeWindowAndroid); 695 private native void nativeOnActivityStopped(long nativeWindowAndroid);
688 private native void nativeOnActivityStarted(long nativeWindowAndroid); 696 private native void nativeOnActivityStarted(long nativeWindowAndroid);
689 private native void nativeDestroy(long nativeWindowAndroid); 697 private native void nativeDestroy(long nativeWindowAndroid);
690 698
691 } 699 }
OLDNEW
« no previous file with comments | « ui/android/delegated_frame_host_android.cc ('k') | ui/snapshot/snapshot_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698