diff options
-rw-r--r-- | core/java/android/webkit/PluginFullScreenHolder.java | 13 | ||||
-rw-r--r-- | core/java/android/webkit/PluginManager.java | 76 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewCore.java | 48 | ||||
-rw-r--r-- | core/java/android/webkit/plugin/NativePlugin.java | 37 | ||||
-rw-r--r-- | core/java/android/webkit/plugin/SurfaceDrawingModel.java | 37 | ||||
-rw-r--r-- | core/java/android/webkit/plugin/WebkitPlugin.java | 36 |
6 files changed, 39 insertions, 208 deletions
diff --git a/core/java/android/webkit/PluginFullScreenHolder.java b/core/java/android/webkit/PluginFullScreenHolder.java index 6a0b145371e2..b6418031c4c1 100644 --- a/core/java/android/webkit/PluginFullScreenHolder.java +++ b/core/java/android/webkit/PluginFullScreenHolder.java @@ -30,6 +30,7 @@ import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; class PluginFullScreenHolder extends Dialog { @@ -37,6 +38,7 @@ class PluginFullScreenHolder extends Dialog { private final WebView mWebView; private final int mNpp; + private View mContentView; private int mX; private int mY; private int mWidth; @@ -64,6 +66,12 @@ class PluginFullScreenHolder extends Dialog { } @Override + public void setContentView(View contentView) { + super.setContentView(contentView); + mContentView = contentView; + } + + @Override public void onBackPressed() { mWebView.mPrivateHandler.obtainMessage(WebView.HIDE_FULLSCREEN) .sendToTarget(); @@ -113,6 +121,11 @@ class PluginFullScreenHolder extends Dialog { @Override protected void onStop() { super.onStop(); + // manually remove the contentView's parent since the dialog does not + if (mContentView != null && mContentView.getParent() != null) { + ViewGroup vg = (ViewGroup) mContentView.getParent(); + vg.removeView(mContentView); + } mWebView.getWebViewCore().sendMessage( WebViewCore.EventHub.HIDE_FULLSCREEN, mNpp, 0); } diff --git a/core/java/android/webkit/PluginManager.java b/core/java/android/webkit/PluginManager.java index 141984a7fd84..cdcb662e057c 100644 --- a/core/java/android/webkit/PluginManager.java +++ b/core/java/android/webkit/PluginManager.java @@ -21,6 +21,7 @@ import java.util.List; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; @@ -31,8 +32,6 @@ import android.content.pm.Signature; import android.content.pm.PackageManager.NameNotFoundException; import android.os.SystemProperties; import android.util.Log; -import android.webkit.plugin.NativePlugin; -import android.webkit.plugin.WebkitPlugin; /** * Class for managing the relationship between the {@link WebView} and installed @@ -43,12 +42,6 @@ import android.webkit.plugin.WebkitPlugin; */ public class PluginManager { - private class PluginInfo { - public PackageInfo packageInfo; - public boolean isNative; - public Class<? extends WebkitPlugin> pluginClass; - } - /** * Service Action: A plugin wishes to be loaded in the WebView must provide * {@link android.content.IntentFilter IntentFilter} that accepts this @@ -75,7 +68,7 @@ public class PluginManager { private final Context mContext; - private ArrayList<PluginInfo> mPluginInfoCache; + private ArrayList<PackageInfo> mPackageInfoCache; // Only plugin matches one of the signatures in the list can be loaded // inside the WebView process @@ -87,7 +80,7 @@ public class PluginManager { private PluginManager(Context context) { mContext = context; - mPluginInfoCache = new ArrayList<PluginInfo>(); + mPackageInfoCache = new ArrayList<PackageInfo>(); } public static synchronized PluginManager getInstance(Context context) { @@ -122,10 +115,10 @@ public class PluginManager { PLUGIN_ACTION), PackageManager.GET_SERVICES | PackageManager.GET_META_DATA); - synchronized(mPluginInfoCache) { + synchronized(mPackageInfoCache) { // clear the list of existing packageInfo objects - mPluginInfoCache.clear(); + mPackageInfoCache.clear(); for (ResolveInfo info : plugins) { @@ -192,9 +185,6 @@ public class PluginManager { } } - PluginInfo pluginInfo = new PluginInfo(); - pluginInfo.packageInfo = pkgInfo; - // determine the type of plugin from the manifest if (serviceInfo.metaData == null) { Log.e(LOGTAG, "The plugin '" + serviceInfo.name + "' has no type defined"); @@ -202,9 +192,7 @@ public class PluginManager { } String pluginType = serviceInfo.metaData.getString(PLUGIN_TYPE); - if (TYPE_NATIVE.equals(pluginType)) { - pluginInfo.isNative = true; - } else { + if (!TYPE_NATIVE.equals(pluginType)) { Log.e(LOGTAG, "Unrecognized plugin type: " + pluginType); continue; } @@ -212,17 +200,11 @@ public class PluginManager { try { Class<?> cls = getPluginClass(serviceInfo.packageName, serviceInfo.name); - boolean classFound = false; - for(Class<?> implemented : cls.getInterfaces()) { - if (pluginInfo.isNative && implemented.equals(NativePlugin.class)) { - pluginInfo.pluginClass = cls.asSubclass(WebkitPlugin.class); - classFound = true; - break; - } - } + //TODO implement any requirements of the plugin class here! + boolean classFound = true; if (!classFound) { - Log.e(LOGTAG, "The plugin's class'" + serviceInfo.name + "' does not extend the appropriate interface."); + Log.e(LOGTAG, "The plugin's class' " + serviceInfo.name + "' does not extend the appropriate class."); continue; } @@ -235,7 +217,7 @@ public class PluginManager { } // if all checks have passed then make the plugin available - mPluginInfoCache.add(pluginInfo); + mPackageInfoCache.add(pkgInfo); directories.add(directory); } } @@ -252,9 +234,8 @@ public class PluginManager { } // must be synchronized to ensure the consistency of the cache - synchronized(mPluginInfoCache) { - for (PluginInfo pluginInfo : mPluginInfoCache) { - PackageInfo pkgInfo = pluginInfo.packageInfo; + synchronized(mPackageInfoCache) { + for (PackageInfo pkgInfo : mPackageInfoCache) { if (pluginLib.startsWith(pkgInfo.applicationInfo.dataDir)) { return pkgInfo.packageName; } @@ -270,39 +251,6 @@ public class PluginManager { } /* package */ - WebkitPlugin getPluginInstance(String pkgName, int npp) { - - // must be synchronized to ensure the consistency of the cache - synchronized(mPluginInfoCache) { - - // lookup plugin based on pkgName and instantiate if possible. - for (PluginInfo pluginInfo : mPluginInfoCache) { - - if (pluginInfo.packageInfo.packageName.equals(pkgName)) { - - try { - WebkitPlugin webkitPlugin = pluginInfo.pluginClass.newInstance(); - - if (pluginInfo.isNative) { - NativePlugin nativePlugin = (NativePlugin) webkitPlugin; - nativePlugin.initializePlugin(npp, mContext); - } - - return webkitPlugin; - } catch (Exception e) { - // Any number of things could have happened. Log the exception and - // return null. Careful not to use Log.e(LOGTAG, "String", e) - // because that reports the exception to the checkin service. - Log.e(LOGTAG, Log.getStackTraceString(e)); - } - break; - } - } - } - return null; - } - - /* package */ Class<?> getPluginClass(String packageName, String className) throws NameNotFoundException, ClassNotFoundException { Context pluginContext = mContext.createPackageContext(packageName, diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 38cb88337e19..4602fa8fa043 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -2255,6 +2255,11 @@ final class WebViewCore { } // called by JNI + private Context getContext() { + return mContext; + } + + // called by JNI private Class<?> getPluginClass(String libName, String clsName) { if (mWebView == null) { @@ -2281,40 +2286,17 @@ final class WebViewCore { return null; } - private WebkitPlugin createPluginJavaInstance(String libName, int npp) { - - if (mWebView == null) { - return null; - } - - PluginManager pluginManager = PluginManager.getInstance(null); - - String pkgName = pluginManager.getPluginsAPKName(libName); - if (pkgName == null) { - Log.w(LOGTAG, "Unable to resolve " + libName + " to a plugin APK"); - return null; - } - - return pluginManager.getPluginInstance(pkgName, npp); - } - // called by JNI. PluginWidget function to launch a full-screen view using a // View object provided by the plugin class. - private void showFullScreenPlugin(WebkitPlugin webkitPlugin, final int npp, - int x, int y, int width, int height) { - if (mWebView == null) { - return; - } + private void showFullScreenPlugin(ViewManager.ChildView childView, + final int npp, int x, int y, int width, int height) { - final SurfaceDrawingModel surface = webkitPlugin.getFullScreenSurface(); - if(surface == null) { - Log.e(LOGTAG, "Attempted to create an full-screen surface with a " + - "null drawing model"); + if (mWebView == null) { return; } PluginFullScreenData data = new PluginFullScreenData(); - data.mView = surface.getSurface(); + data.mView = childView.mView; data.mNpp = npp; data.mDocX = x; data.mDocY = y; @@ -2351,20 +2333,18 @@ final class WebViewCore { // called by JNI. PluginWidget functions for creating an embedded View for // the surface drawing model. - private ViewManager.ChildView createSurface(WebkitPlugin webkitPlugin, - int x, int y, int width, int height) { - + private ViewManager.ChildView addSurface(View pluginView, int x, int y, + int width, int height) { if (mWebView == null) { return null; } - SurfaceDrawingModel embeddedSurface = webkitPlugin.getEmbeddedSurface(); - if(embeddedSurface == null) { - Log.e(LOGTAG, "Attempted to create an embedded surface with a null drawing model"); + if (pluginView == null) { + Log.e(LOGTAG, "Attempted to add an empty plugin view to the view hierarchy"); return null; } - View pluginView = embeddedSurface.getSurface(); + // ensures the view system knows the view can redraw itself pluginView.setWillNotDraw(false); ViewManager.ChildView view = mWebView.mViewManager.createView(); diff --git a/core/java/android/webkit/plugin/NativePlugin.java b/core/java/android/webkit/plugin/NativePlugin.java deleted file mode 100644 index 5019c35e74ef..000000000000 --- a/core/java/android/webkit/plugin/NativePlugin.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2009, The Android Open Source Project - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package android.webkit.plugin; - -import android.content.Context; - -/** - * - * @hide pending API solidification - */ -public interface NativePlugin extends WebkitPlugin { - - void initializePlugin(int npp, Context context); - -} diff --git a/core/java/android/webkit/plugin/SurfaceDrawingModel.java b/core/java/android/webkit/plugin/SurfaceDrawingModel.java deleted file mode 100644 index 93ba46667f27..000000000000 --- a/core/java/android/webkit/plugin/SurfaceDrawingModel.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2009, The Android Open Source Project - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package android.webkit.plugin; - -import android.view.View; - -/** - * - * @hide pending API solidification - */ -public interface SurfaceDrawingModel { - - public View getSurface(); - -} diff --git a/core/java/android/webkit/plugin/WebkitPlugin.java b/core/java/android/webkit/plugin/WebkitPlugin.java deleted file mode 100644 index 3d13c1cbe086..000000000000 --- a/core/java/android/webkit/plugin/WebkitPlugin.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2009, The Android Open Source Project - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package android.webkit.plugin; - -/** - * - * @hide pending API solidification - */ -public interface WebkitPlugin { - - SurfaceDrawingModel getEmbeddedSurface(); - SurfaceDrawingModel getFullScreenSurface(); - -} |