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

Side by Side Diff: blimp/client/app/android/java/src/org/chromium/blimp/BlimpView.java

Issue 2493333002: Move Java Blimp shell code to app subpackage (Closed)
Patch Set: Merge branch 'refs/heads/master' into blimp-shell-integration Created 4 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.blimp;
6
7 import android.content.Context;
8 import android.graphics.Color;
9 import android.graphics.Point;
10 import android.os.Build;
11 import android.util.AttributeSet;
12 import android.view.MotionEvent;
13 import android.view.Surface;
14 import android.view.SurfaceHolder;
15 import android.view.SurfaceView;
16 import android.view.View;
17 import android.view.WindowManager;
18
19 import org.chromium.base.annotations.CalledByNative;
20 import org.chromium.base.annotations.JNINamespace;
21 import org.chromium.blimp.session.BlimpClientSession;
22 import org.chromium.ui.UiUtils;
23
24 /**
25 * A {@link View} that will visually represent the Blimp rendered content. This {@link View} starts
26 * a native compositor.
27 */
28 @JNINamespace("blimp::client::app")
29 public class BlimpView
30 extends SurfaceView implements SurfaceHolder.Callback, View.OnLayoutChan geListener {
31 private long mNativeBlimpViewPtr;
32
33 /**
34 * Builds a new {@link BlimpView}.
35 * @param context A {@link Context} instance.
36 * @param attrs An {@link AttributeSet} instance.
37 */
38 public BlimpView(Context context, AttributeSet attrs) {
39 super(context, attrs);
40 setFocusable(true);
41 setFocusableInTouchMode(true);
42 addOnLayoutChangeListener(this);
43 }
44
45 /**
46 * Starts up rendering for this {@link View}. This will start up the native compositor and will
47 * display it's contents.
48 * @param blimpClientSession The {@link BlimpClientSession} that contains th e content-lite
49 * features required by the native components of t he compositor.
50 */
51 public void initializeRenderer(BlimpClientSession blimpClientSession) {
52 assert mNativeBlimpViewPtr == 0;
53
54 WindowManager windowManager =
55 (WindowManager) getContext().getSystemService(Context.WINDOW_SER VICE);
56 Point displaySize = new Point();
57 windowManager.getDefaultDisplay().getSize(displaySize);
58 Point physicalSize = new Point();
59 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
60 windowManager.getDefaultDisplay().getRealSize(physicalSize);
61 }
62 float deviceScaleFactor = getContext().getResources().getDisplayMetrics( ).density;
63 mNativeBlimpViewPtr = nativeInit(blimpClientSession, physicalSize.x, phy sicalSize.y,
64 displaySize.x, displaySize.y, deviceScaleFactor);
65 getHolder().addCallback(this);
66 setBackgroundColor(Color.WHITE);
67 setVisibility(VISIBLE);
68 }
69
70 /**
71 * Stops rendering for this {@link View} and destroys all internal state. T his {@link View}
72 * should not be used after this.
73 */
74 public void destroyRenderer() {
75 getHolder().removeCallback(this);
76 if (mNativeBlimpViewPtr != 0) {
77 nativeDestroy(mNativeBlimpViewPtr);
78 mNativeBlimpViewPtr = 0;
79 }
80 }
81
82 // View.OnLayoutChangeListener implementation.
83 @Override
84 public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
85 int oldTop, int oldRight, int oldBottom) {
86 if (mNativeBlimpViewPtr == 0) return;
87 nativeOnContentAreaSizeChanged(mNativeBlimpViewPtr, right - left, bottom - top,
88 getContext().getResources().getDisplayMetrics().density);
89 }
90
91 // View overrides.
92 @Override
93 public boolean onTouchEvent(MotionEvent event) {
94 if (mNativeBlimpViewPtr == 0) return false;
95
96 int eventAction = event.getActionMasked();
97
98 // Close the IME. It might be open for typing URL into toolbar.
99 // TODO(shaktisahu): Detect if the IME was open and return immediately ( crbug/606977)
100 UiUtils.hideKeyboard(this);
101
102 if (!isValidTouchEventActionForNative(eventAction)) return false;
103
104 int pointerCount = event.getPointerCount();
105
106 float[] touchMajor = {event.getTouchMajor(), pointerCount > 1 ? event.ge tTouchMajor(1) : 0};
107 float[] touchMinor = {event.getTouchMinor(), pointerCount > 1 ? event.ge tTouchMinor(1) : 0};
108
109 for (int i = 0; i < 2; i++) {
110 if (touchMajor[i] < touchMinor[i]) {
111 float tmp = touchMajor[i];
112 touchMajor[i] = touchMinor[i];
113 touchMinor[i] = tmp;
114 }
115 }
116
117 boolean consumed = nativeOnTouchEvent(mNativeBlimpViewPtr, event,
118 event.getEventTime(), eventAction,
119 pointerCount, event.getHistorySize(), event.getActionIndex(),
120 event.getX(), event.getY(),
121 pointerCount > 1 ? event.getX(1) : 0,
122 pointerCount > 1 ? event.getY(1) : 0,
123 event.getPointerId(0), pointerCount > 1 ? event.getPointerId(1) : -1,
124 touchMajor[0], touchMajor[1],
125 touchMinor[0], touchMinor[1],
126 event.getOrientation(), pointerCount > 1 ? event.getOrientation( 1) : 0,
127 event.getAxisValue(MotionEvent.AXIS_TILT),
128 pointerCount > 1 ? event.getAxisValue(MotionEvent.AXIS_TILT, 1) : 0,
129 event.getRawX(), event.getRawY(),
130 event.getToolType(0),
131 pointerCount > 1 ? event.getToolType(1) : MotionEvent.TOOL_TYPE_ UNKNOWN,
132 event.getButtonState(),
133 event.getMetaState());
134
135 return consumed;
136 }
137
138 // SurfaceView overrides.
139 @Override
140 protected void onFinishInflate() {
141 super.onFinishInflate();
142
143 setZOrderMediaOverlay(true);
144 setVisibility(GONE);
145 }
146
147 // SurfaceHolder.Callback2 interface.
148 @Override
149 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
150 if (mNativeBlimpViewPtr == 0) return;
151 nativeOnSurfaceChanged(mNativeBlimpViewPtr, format, width, height, holde r.getSurface());
152 }
153
154 @Override
155 public void surfaceCreated(SurfaceHolder holder) {
156 if (mNativeBlimpViewPtr == 0) return;
157 nativeOnSurfaceCreated(mNativeBlimpViewPtr);
158 }
159
160 @Override
161 public void surfaceDestroyed(SurfaceHolder holder) {
162 if (mNativeBlimpViewPtr == 0) return;
163 nativeOnSurfaceDestroyed(mNativeBlimpViewPtr);
164 }
165
166 private static boolean isValidTouchEventActionForNative(int eventAction) {
167 // Only these actions have any effect on gesture detection. Other
168 // actions have no corresponding WebTouchEvent type and may confuse the
169 // touch pipline, so we ignore them entirely.
170 return eventAction == MotionEvent.ACTION_DOWN
171 || eventAction == MotionEvent.ACTION_UP
172 || eventAction == MotionEvent.ACTION_CANCEL
173 || eventAction == MotionEvent.ACTION_MOVE
174 || eventAction == MotionEvent.ACTION_POINTER_DOWN
175 || eventAction == MotionEvent.ACTION_POINTER_UP;
176 }
177
178 @CalledByNative
179 public void onSwapBuffersCompleted() {
180 if (getBackground() == null) return;
181
182 setBackgroundResource(0);
183 }
184
185 // Native Methods
186 private native long nativeInit(BlimpClientSession blimpClientSession, int ph ysicalWidth,
187 int physicalHeight, int displayWidth, int displayHeight, float dpToP ixel);
188 private native void nativeDestroy(long nativeBlimpView);
189 private native void nativeOnContentAreaSizeChanged(
190 long nativeBlimpView, int width, int height, float dpToPx);
191 private native void nativeOnSurfaceChanged(
192 long nativeBlimpView, int format, int width, int height, Surface sur face);
193 private native void nativeOnSurfaceCreated(long nativeBlimpView);
194 private native void nativeOnSurfaceDestroyed(long nativeBlimpView);
195 private native boolean nativeOnTouchEvent(
196 long nativeBlimpView, MotionEvent event,
197 long timeMs, int action, int pointerCount, int historySize, int acti onIndex,
198 float x0, float y0, float x1, float y1,
199 int pointerId0, int pointerId1,
200 float touchMajor0, float touchMajor1,
201 float touchMinor0, float touchMinor1,
202 float orientation0, float orientation1,
203 float tilt0, float tilt1,
204 float rawX, float rawY,
205 int androidToolType0, int androidToolType1,
206 int androidButtonState, int androidMetaState);
207 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698