1 // Copyright (c) 2013 Intel Corporation. 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.
5 package org.xwalk.core.internal.extension;
7 import android.content.Context;
8 import android.content.Intent;
9 import android.util.Log;
11 import java.lang.reflect.InvocationTargetException;
12 import java.lang.reflect.Method;
15 * The public base class of xwalk external extensions. It acts a bridge class from
16 * runtime to runtime client. The objects of class 'XWalkExtensionClient' in runtime
17 * client side will be passed into this class because we need to call its methods.
19 class XWalkExtensionClientImpl extends XWalkExtension {
21 private static final String TAG = XWalkExtensionClientImpl.class.getName();
22 private Object mExtensionClient;
23 private Method mOnMessage;
24 private Method mOnSyncMessage;
25 private Method mOnResume;
26 private Method mOnPause;
27 private Method mOnDestroy;
28 private Method mOnActivityResult;
30 public XWalkExtensionClientImpl(String name, String jsApi,
31 XWalkExtensionContextWrapper context, Object extensionClient) {
32 super(name, jsApi, context);
34 mExtensionClient = extensionClient;
35 mOnMessage = lookupMethod("onMessage", int.class, String.class);
36 mOnSyncMessage = lookupMethod("onSyncMessage", int.class, String.class);
37 mOnResume = lookupMethod("onResume");
38 mOnPause = lookupMethod("onPause");
39 mOnDestroy = lookupMethod("onDestroy");
40 mOnActivityResult = lookupMethod("onActivityResult", int.class, int.class, Intent.class);
44 public void onMessage(int extensionInstanceID, String message) {
45 invokeMethod(mOnMessage, mExtensionClient, extensionInstanceID, message);
49 public String onSyncMessage(int extensionInstanceID, String message) {
50 return (String) invokeMethod(mOnSyncMessage, mExtensionClient, extensionInstanceID, message);
54 public void onResume() {
55 invokeMethod(mOnResume, mExtensionClient);
59 public void onPause() {
60 invokeMethod(mOnPause, mExtensionClient);
64 public void onDestroy() {
65 invokeMethod(mOnDestroy, mExtensionClient);
69 public void onActivityResult(int requestCode, int resultCode, Intent data) {
70 invokeMethod(mOnActivityResult, mExtensionClient, requestCode, resultCode, data);
73 private Method lookupMethod(String method, Class<?>... parameters) {
74 Class<?> clientClass = mExtensionClient.getClass();
76 return clientClass.getMethod(method, parameters);
77 } catch (NoSuchMethodException e) {
83 private static Object invokeMethod(Method method, Object instance, Object... parameters) {
87 result = method.invoke(instance, parameters);
88 } catch (IllegalArgumentException e) {
90 } catch (IllegalAccessException e) {
92 } catch (InvocationTargetException e) {
94 } catch (NullPointerException e) {
101 private static void handleException(Exception e) {
102 Log.e(TAG, "Error in calling methods of external extensions. " + e.toString());