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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java

Issue 2773903003: Add way to get native VR UI information from Java (Closed)
Patch Set: Cleanup Created 3 years, 9 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: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
index 6112be34e224d80e8ea6d69d70165874a9ea9491..7e99903b2f6904967f123e14a6c936f932b5bbe3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
@@ -8,6 +8,7 @@ import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.graphics.Point;
import android.os.StrictMode;
+import android.util.SparseArray;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
@@ -20,9 +21,13 @@ import android.widget.FrameLayout.LayoutParams;
import com.google.vr.ndk.base.AndroidCompat;
import com.google.vr.ndk.base.GvrLayout;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import org.chromium.base.CommandLine;
import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.browser.ChromeActivity;
@@ -56,6 +61,8 @@ import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.display.DisplayAndroid;
import org.chromium.ui.display.VirtualDisplayAndroid;
+import java.util.Iterator;
+
/**
* This view extends from GvrLayout which wraps a GLSurfaceView that renders VR shell.
*/
@@ -97,6 +104,10 @@ public class VrShellImpl
private Surface mSurface;
private View mPresentationView;
+ private SparseArray<Runnable> mUiElementInfoReplyCallbacks;
+ private SparseArray<JSONObject> mUiElementInfoJson;
+ private int mCallbackCounter;
+
// The tab that holds the main ContentViewCore.
private Tab mTab;
private NativePage mNativePage;
@@ -628,6 +639,55 @@ public class VrShellImpl
@Override
public void removeWindowAndroidChangedObserver(WindowAndroidChangedObserver observer) {}
+ @VisibleForTesting
+ public WebContents getUiContentsForTesting() {
+ return mUiContents;
+ }
+
+ // Lazily instantiate since we don't need it in most cases
tiborg 2017/03/27 15:14:32 Nit: end sentence with full stop.
bsheedy 2017/03/27 17:49:09 Done.
+ private SparseArray<Runnable> getUiElementInfoReplyCallbacks() {
tiborg 2017/03/27 15:14:33 Should we append ForTesting to make sure it is onl
bsheedy 2017/03/27 17:49:09 If this is only ever going to be used for testing
tiborg 2017/03/27 19:59:59 I'm not aware of any plans to use this functionali
+ if (mUiElementInfoReplyCallbacks == null) {
+ mUiElementInfoReplyCallbacks = new SparseArray<Runnable>();
+ }
+ return mUiElementInfoReplyCallbacks;
+ }
+
+ // Lazily instantiate since we don't need it in most cases
tiborg 2017/03/27 15:14:33 Nit: end sentence with full stop.
bsheedy 2017/03/27 17:49:09 Done.
+ @VisibleForTesting
+ public SparseArray<JSONObject> getUiElementInfoJson() {
tiborg 2017/03/27 15:14:33 Here, too, append ForTesting?
bsheedy 2017/03/27 17:49:09 Same as above.
+ if (mUiElementInfoJson == null) mUiElementInfoJson = new SparseArray<JSONObject>();
+ return mUiElementInfoJson;
+ }
+
+ /**
+ * Sends an asynchronous request for native UI element information.
+ * @param elementIds The unique IDs of all the elements you want info on
+ * @param onReply The runnable that will be run when native replies
+ */
+ @VisibleForTesting
+ public void requestUiElementInfoFromNative(int[] elementIds, Runnable onReply) {
tiborg 2017/03/27 15:14:33 Here, too, append ForTesting?
bsheedy 2017/03/27 17:49:09 Same as above.
+ getUiElementInfoReplyCallbacks().append(mCallbackCounter, onReply);
+ nativeRequestUiElementInfo(mNativeVrShell, elementIds, mCallbackCounter);
+ mCallbackCounter++;
+ }
+
+ @CalledByNative
+ public void replyToUiElementInfoRequest(String jsonString, int callbackId)
tiborg 2017/03/27 15:14:33 Here, too, append ForTesting?
bsheedy 2017/03/27 17:49:09 Same as above.
+ throws JSONException {
+ JSONObject reply = new JSONObject(jsonString);
+ SparseArray<JSONObject> uiElementInfo = getUiElementInfoJson();
+ for (Iterator<String> iter = reply.keys(); iter.hasNext();) {
+ String key = iter.next();
+ uiElementInfo.put(Integer.parseInt(key), reply.optJSONObject(key));
+ }
+ SparseArray<Runnable> callbacks = getUiElementInfoReplyCallbacks();
+ Runnable callback = callbacks.get(callbackId);
+ if (callback != null) {
+ callback.run();
+ }
+ callbacks.remove(callbackId);
+ }
+
private native long nativeInit(WebContents uiWebContents, long nativeContentWindowAndroid,
long nativeUiWindowAndroid, boolean forWebVR, VrShellDelegate delegate, long gvrApi,
boolean reprojectedRendering);
@@ -654,4 +714,6 @@ public class VrShellImpl
private native void nativeRestoreContentSurface(long nativeVrShell);
private native void nativeSetHistoryButtonsEnabled(
long nativeVrShell, boolean canGoBack, boolean canGoForward);
+ private native void nativeRequestUiElementInfo(
+ long nativeVrShell, int[] elementIds, int callbackId);
}

Powered by Google App Engine
This is Rietveld 408576698