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

Unified Diff: services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java

Issue 1280613003: Allow native_viewport to create new native windows on demand on Android. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Refactor Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
diff --git a/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java b/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
index fabcb081c574382ffe5c7e927eaa4b3ae52e4914..92b45c47e33a031fbb0109c3e3fa566d7d2d602c 100644
--- a/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
+++ b/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
@@ -5,7 +5,6 @@
package org.chromium.mojo;
import android.app.Activity;
-import android.content.Context;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
@@ -14,39 +13,68 @@ import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
-import org.chromium.base.ApplicationStatus;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.mojo.keyboard.KeyboardServiceImpl;
+import java.util.ArrayDeque;
+
/**
* Exposes SurfaceView to native code.
*/
@JNINamespace("native_viewport")
public class PlatformViewportAndroid extends SurfaceView {
+ private static final ArrayDeque<Long> PENDING_NATIVE_VIEWPORTS =
+ new ArrayDeque<Long>();
private long mNativeMojoViewport;
+ private final Activity mActivity;
private final SurfaceHolder.Callback mSurfaceCallback;
+
+ @CalledByNative
+ public static void createRequest(long nativeViewport) {
+ PENDING_NATIVE_VIEWPORTS.add(nativeViewport);
+ }
+
@CalledByNative
- public static PlatformViewportAndroid create(long nativeViewport) {
- Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
+ public static void withdrawRequest(long nativeViewport) {
+ PENDING_NATIVE_VIEWPORTS.remove(nativeViewport);
+ }
+
+ public static PlatformViewportAndroid newActivityStarted(Activity activity) {
+ if (PENDING_NATIVE_VIEWPORTS.isEmpty()) {
+ return null;
+ }
+ Long nativeViewport = PENDING_NATIVE_VIEWPORTS.remove();
PlatformViewportAndroid rv = new PlatformViewportAndroid(activity, nativeViewport);
KeyboardServiceImpl.setActiveView(rv);
activity.setContentView(rv);
return rv;
}
- public PlatformViewportAndroid(Context context, long nativeViewport) {
- super(context);
+ /*
+ @CalledByNative
+ public static void createNativeWindow() {
+ final Context context = ApplicationStatus.getApplicationContext();
+ final Intent newDocumentIntent = new Intent(context, ViewportActivity.class);
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(newDocumentIntent);
+ }*/
+
+ public PlatformViewportAndroid(Activity activity, long nativeViewport) {
+ super(activity);
setFocusable(true);
setFocusableInTouchMode(true);
+ mActivity = activity;
mNativeMojoViewport = nativeViewport;
assert mNativeMojoViewport != 0;
- final float density = context.getResources().getDisplayMetrics().density;
+ final float density = activity.getResources().getDisplayMetrics().density;
mSurfaceCallback = new SurfaceHolder.Callback() {
@Override
@@ -69,12 +97,14 @@ public class PlatformViewportAndroid extends SurfaceView {
};
getHolder().addCallback(mSurfaceCallback);
+ nativeSurfaceAttached(mNativeMojoViewport, this);
}
@CalledByNative
public void detach() {
getHolder().removeCallback(mSurfaceCallback);
mNativeMojoViewport = 0;
+ mActivity.finishAndRemoveTask();
}
@Override
@@ -117,6 +147,9 @@ public class PlatformViewportAndroid extends SurfaceView {
event.getAxisValue(MotionEvent.AXIS_VSCROLL, index));
}
+ private static native void nativeSurfaceAttached(long nativePlatformViewportAndroid,
+ PlatformViewportAndroid platformViewport);
+
private static native void nativeDestroy(long nativePlatformViewportAndroid);
private static native void nativeSurfaceCreated(

Powered by Google App Engine
This is Rietveld 408576698