Upstream version 8.36.161.0
[platform/framework/web/crosswalk.git] / src / xwalk / app / android / runtime_client_embedded_shell / src / org / xwalk / runtime / client / embedded / shell / XWalkRuntimeClientEmbeddedShellActivity.java
index 29e10aa..75a8cc0 100644 (file)
@@ -6,17 +6,22 @@ package org.xwalk.runtime.client.embedded.shell;
 
 import android.content.Context;
 import android.os.Bundle;
+import android.os.Looper;
+import android.os.MessageQueue;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.View.OnFocusChangeListener;
 import android.view.ViewGroup.LayoutParams;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
+import android.util.Log;
 import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
+import org.chromium.base.library_loader.LibraryLoader;
+import org.chromium.content.browser.TracingControllerAndroid;
 import org.xwalk.app.XWalkRuntimeActivityBase;
 
 public class XWalkRuntimeClientEmbeddedShellActivity extends XWalkRuntimeActivityBase {
@@ -24,21 +29,52 @@ public class XWalkRuntimeClientEmbeddedShellActivity extends XWalkRuntimeActivit
     private static final String TAG = XWalkRuntimeClientEmbeddedShellActivity.class.getName();
 
     private EditText mUrlTextView;
+    private TracingControllerAndroid mTracingController;
+
+    TracingControllerAndroid getTracingController() {
+        if (mTracingController == null) {
+            mTracingController = new TracingControllerAndroid(this);
+        }
+        return mTracingController;
+    }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        registerTracingReceiverWhenIdle();
     }
 
     @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        // Passdown the key-up event to runtime view.
-        if (getRuntimeView() != null &&
-                getRuntimeView().onKeyUp(keyCode, event)) {
-            return true;
-        }
+    public void onDestroy() {
+        super.onDestroy();
+        unregisterTracingReceiver();
+    }
+
+    private void registerTracingReceiverWhenIdle() {
+        // Delay tracing receiver registration until the main loop is idle.
+        Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
+            @Override
+            public boolean queueIdle() {
+                // Will retry if the native library is not initialized yet.
+                if (!LibraryLoader.isInitialized()) return true;
+                try {
+                    getTracingController().registerReceiver(XWalkRuntimeClientEmbeddedShellActivity.this);
+                } catch (SecurityException e) {
+                    Log.w(TAG, "failed to register tracing receiver: " + e.getMessage());
+                }
+                return false;
+            }
+        });
+    }
 
-        return super.onKeyUp(keyCode, event);
+    private void unregisterTracingReceiver() {
+        try {
+            getTracingController().unregisterReceiver(this);
+        } catch (SecurityException e) {
+            Log.w(TAG, "failed to unregister tracing receiver: " + e.getMessage());
+        } catch (IllegalArgumentException e) {
+            Log.w(TAG, "failed to unregister tracing receiver: " + e.getMessage());
+        }
     }
 
     private static String sanitizeUrl(String url) {