Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 521123e0 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I9e28c4ce into eclair-mr2

* changes:
  Allow plugins to load java classes from their apk.
parents 9882f385 9e28c4ce
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -19,9 +19,6 @@ import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

class PluginUtil {

    private static final String LOGTAG = "PluginUtil";
@@ -35,12 +32,7 @@ class PluginUtil {
    static PluginStub getPluginStub(Context context, String packageName, 
            String className) {
        try {
            Context pluginContext = context.createPackageContext(packageName,
                    Context.CONTEXT_INCLUDE_CODE |
                    Context.CONTEXT_IGNORE_SECURITY);
            ClassLoader pluginCL = pluginContext.getClassLoader();

            Class<?> stubClass = pluginCL.loadClass(className);
            Class<?> stubClass = getPluginClass(context, packageName, className);
            Object stubObject = stubClass.newInstance();

            if (stubObject instanceof PluginStub) {
@@ -56,4 +48,14 @@ class PluginUtil {
        }
        return null;
    }
    
    /* package */
    static Class<?> getPluginClass(Context context, String packageName,
            String className) throws NameNotFoundException, ClassNotFoundException {
        Context pluginContext = context.createPackageContext(packageName,
                Context.CONTEXT_INCLUDE_CODE |
                Context.CONTEXT_IGNORE_SECURITY);
        ClassLoader pluginCL = pluginContext.getClassLoader();
        return pluginCL.loadClass(className);
    }
}
+27 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.webkit;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.graphics.Canvas;
import android.graphics.DrawFilter;
@@ -2167,6 +2168,32 @@ final class WebViewCore {
        }
    }

    // called by JNI
    private Class<?> getPluginClass(String libName, String clsName) {
        
        if (mWebView == null) {
            return null;
        }
        
        String pkgName = PluginManager.getInstance(null).getPluginsAPKName(libName);
        if (pkgName == null) {
            Log.w(LOGTAG, "Unable to resolve " + libName + " to a plugin APK");
            return null;
        }
        
        Class<?> pluginClass = null;
        try {
            pluginClass = PluginUtil.getPluginClass(mWebView.getContext(), pkgName, clsName);
        } catch (NameNotFoundException e) {
            Log.e(LOGTAG, "Unable to find plugin classloader for the apk (" + pkgName + ")");
        } catch (ClassNotFoundException e) {
            Log.e(LOGTAG, "Unable to find plugin class (" + clsName +
                    ") in the apk (" + pkgName + ")");
        }

        return pluginClass;
    }
    
    // called by JNI. PluginWidget function to launch an activity and overlays
    // the activity with the View provided by the plugin class.
    private void startFullScreenPluginActivity(String libName, String clsName, int npp) {
+0 −1
Original line number Diff line number Diff line
@@ -65,7 +65,6 @@ ANPCanvasInterfaceV0 gCanvasI;
ANPLogInterfaceV0           gLogI;
ANPPaintInterfaceV0         gPaintI;
ANPPathInterfaceV0          gPathI;
ANPSystemInterfaceV0        gSystemI;
ANPTypefaceInterfaceV0      gTypefaceI;
ANPWindowInterfaceV0        gWindowI;