diff options
Diffstat (limited to 'src/java/jogamp/android/launcher')
8 files changed, 272 insertions, 272 deletions
diff --git a/src/java/jogamp/android/launcher/ActivityLauncher.java b/src/java/jogamp/android/launcher/ActivityLauncher.java index 72b7c0a..99bead8 100644 --- a/src/java/jogamp/android/launcher/ActivityLauncher.java +++ b/src/java/jogamp/android/launcher/ActivityLauncher.java @@ -48,7 +48,7 @@ public class ActivityLauncher extends Activity { Object activityObject = null; @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { Log.d(TAG, "onCreate - S"); super.onCreate(savedInstanceState); @@ -57,7 +57,7 @@ public class ActivityLauncher extends Activity { data.setSystemProperties(); dataSet = true; - ClassLoader cl = ClassLoaderUtil.createClassLoader(this, data.getSysPackages(), data.getUsrPackages(), null); + final ClassLoader cl = ClassLoaderUtil.createClassLoader(this, data.getSysPackages(), data.getUsrPackages(), null); if(null != cl) { try { activityClazz = Class.forName(data.getActivityName(), true, cl); @@ -72,7 +72,7 @@ public class ActivityLauncher extends Activity { mSetRootActivity = activityClazz.getMethod("setRootActivity", Activity.class); activityObject = createInstance(activityClazz, null); Log.d(TAG, "Activity Object "+activityObject); - } catch (Exception e) { + } catch (final Exception e) { Log.d(TAG, "error: "+e, e); throw new RuntimeException(e); } @@ -81,7 +81,7 @@ public class ActivityLauncher extends Activity { if( null == mOnCreate || null == mOnDestroy || null == mOnPause || null == mOnRestart || null == mOnResume || null == mSetRootActivity ) { - RuntimeException e = new RuntimeException("XXX - incomplete method set"); + final RuntimeException e = new RuntimeException("XXX - incomplete method set"); Log.d(TAG, "error: "+e, e); throw e; } @@ -172,18 +172,18 @@ public class ActivityLauncher extends Activity { /** * @throws JogampRuntimeException if the instance can not be created. */ - public static final Object createInstance(Class<?> clazz, Class<?>[] cstrArgTypes, Object ... cstrArgs) + public static final Object createInstance(final Class<?> clazz, final Class<?>[] cstrArgTypes, final Object ... cstrArgs) throws RuntimeException { return createInstance(getConstructor(clazz, cstrArgTypes), cstrArgs); } - public static final Object createInstance(Constructor<?> cstr, Object ... cstrArgs) + public static final Object createInstance(final Constructor<?> cstr, final Object ... cstrArgs) throws RuntimeException { try { return cstr.newInstance(cstrArgs); - } catch (Exception e) { + } catch (final Exception e) { Throwable t = e; if (t instanceof InvocationTargetException) { t = ((InvocationTargetException) t).getTargetException(); @@ -201,22 +201,22 @@ public class ActivityLauncher extends Activity { /** * @throws JogampRuntimeException if the constructor can not be delivered. */ - protected static final Constructor<?> getConstructor(Class<?> clazz, Class<?> ... cstrArgTypes) + protected static final Constructor<?> getConstructor(final Class<?> clazz, Class<?> ... cstrArgTypes) throws RuntimeException { try { if(null == cstrArgTypes) { cstrArgTypes = zeroTypes; } return clazz.getDeclaredConstructor(cstrArgTypes); - } catch (NoSuchMethodException ex) { + } catch (final NoSuchMethodException ex) { throw new RuntimeException("Constructor: '" + clazz + "(" + asString(cstrArgTypes) + ")' not found", ex); } } protected static final Class<?>[] zeroTypes = new Class[0]; - protected static final String asString(Class<?>[] argTypes) { - StringBuilder args = new StringBuilder(); + protected static final String asString(final Class<?>[] argTypes) { + final StringBuilder args = new StringBuilder(); boolean coma = false; if(null != argTypes) { for (int i = 0; i < argTypes.length; i++) { @@ -230,12 +230,12 @@ public class ActivityLauncher extends Activity { return args.toString(); } - protected static final Object callMethod(Object instance, Method method, Object ... args) + protected static final Object callMethod(final Object instance, final Method method, final Object ... args) throws RuntimeException { try { return method.invoke(instance, args); - } catch (Exception e) { + } catch (final Exception e) { Throwable t = e; if (t instanceof InvocationTargetException) { t = ((InvocationTargetException) t).getTargetException(); diff --git a/src/java/jogamp/android/launcher/AssetDexClassLoader.java b/src/java/jogamp/android/launcher/AssetDexClassLoader.java index fb2d7d3..84e5318 100644 --- a/src/java/jogamp/android/launcher/AssetDexClassLoader.java +++ b/src/java/jogamp/android/launcher/AssetDexClassLoader.java @@ -9,11 +9,11 @@ import dalvik.system.DexClassLoader; public class AssetDexClassLoader extends DexClassLoader { private static final boolean DEBUG = false; private static final String assets_folder = "assets/"; - + private static int next_id = 1; private final int id; - - public AssetDexClassLoader(String dexPath, String dexOutputDir, String libPath, ClassLoader parent) { + + public AssetDexClassLoader(final String dexPath, final String dexOutputDir, final String libPath, final ClassLoader parent) { super(dexPath, dexOutputDir, libPath, parent); synchronized(AssetDexClassLoader.class) { id = next_id++; @@ -22,27 +22,27 @@ public class AssetDexClassLoader extends DexClassLoader { Log.d(getSimpleName(), getIdName()+".ctor: dexPath " + dexPath + ", dexOutputDir " + dexOutputDir + ", libPath " + libPath + ", parent " + parent); } } - + protected final String getSimpleName() { return AssetDexClassLoader.class.getSimpleName(); } protected final String getIdName() { return "ADCL["+id+"]"; } - + @Override - public String findLibrary(String libName) { - final String res = super.findLibrary(libName); + public String findLibrary(final String libName) { + final String res = super.findLibrary(libName); if(DEBUG) { Log.d(getSimpleName(), getIdName()+".findLibrary: " + libName + " -> " + res); } return res; } - + @Override - public URL findResource(String name) { + public URL findResource(final String name) { final String assetName = name.startsWith(assets_folder) ? name : assets_folder + name ; - URL url = super.findResource(assetName); + final URL url = super.findResource(assetName); if(DEBUG) { Log.d(getSimpleName(), getIdName()+".findResource: " + name + " -> " + assetName + " -> " + url); } diff --git a/src/java/jogamp/android/launcher/ClassLoaderUtil.java b/src/java/jogamp/android/launcher/ClassLoaderUtil.java index 76dbf53..5238fd4 100644 --- a/src/java/jogamp/android/launcher/ClassLoaderUtil.java +++ b/src/java/jogamp/android/launcher/ClassLoaderUtil.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. 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 JogAmp Community ``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 JogAmp Community OR @@ -20,7 +20,7 @@ * 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. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -40,33 +40,33 @@ import android.util.Log; public class ClassLoaderUtil { private static final String TAG = "JogampClassLoader"; - + private static HashMap<String, ClassLoader> cachedClassLoader = new HashMap<String, ClassLoader>(); - + // location where optimized dex files will be written private static final String dexPathName= "jogampDex"; - private static File dexPath = null; - - private static LauncherTempFileCache tmpFileCache = null; - + private static File dexPath = null; + + private static LauncherTempFileCache tmpFileCache = null; + private static final String PATH_SEP = "/"; private static final String ELEM_SEP = ":"; - - private static synchronized void init(Context ctx) { + + private static synchronized void init(final Context ctx) { if(null == tmpFileCache) { if(!LauncherTempFileCache.initSingleton(ctx)) { throw new InternalError("TempFileCache initialization error"); } tmpFileCache = new LauncherTempFileCache(); if(!tmpFileCache.isValid()) { - throw new InternalError("TempFileCache instantiation error"); - } + throw new InternalError("TempFileCache instantiation error"); + } dexPath = new File(tmpFileCache.getTempDir(), dexPathName); Log.d(TAG, "jogamp dexPath: " + dexPath.getAbsolutePath()); dexPath.mkdir(); - } + } } - + /** * @param ctx * @param cachedPackageName list of package names w/ native libraries for which a ClassLoader shall be cached, i.e. persistence. @@ -75,11 +75,11 @@ public class ClassLoaderUtil { * @param userAPKNames optional non-cached user APKs * @return */ - public static synchronized ClassLoader createClassLoader(Context ctx, List<String> cachedPackageName, - List<String> userPackageNames, List<String> userAPKNames) { - return createClassLoader(ctx, cachedPackageName, userPackageNames, userAPKNames, null); + public static synchronized ClassLoader createClassLoader(final Context ctx, final List<String> cachedPackageName, + final List<String> userPackageNames, final List<String> userAPKNames) { + return createClassLoader(ctx, cachedPackageName, userPackageNames, userAPKNames, null); } - + /** * @param ctx * @param cachedPackageNames list of package names w/ native libraries for which a ClassLoader shall be cached, i.e. persistence. @@ -89,11 +89,11 @@ public class ClassLoaderUtil { * @param parent * @return */ - public static synchronized ClassLoader createClassLoader(Context ctx, List<String> cachedPackageNames, - List<String> userPackageNames, List<String> userAPKNames, - ClassLoader parent) { + public static synchronized ClassLoader createClassLoader(final Context ctx, final List<String> cachedPackageNames, + final List<String> userPackageNames, final List<String> userAPKNames, + final ClassLoader parent) { init(ctx); - + final String cacheKey = cachedPackageNames.toString(); ClassLoader clCached = cachedClassLoader.get(cacheKey); if( null == clCached ) { @@ -101,12 +101,12 @@ public class ClassLoaderUtil { cachedClassLoader.put(cacheKey, clCached); Log.d(TAG, "NEW cached-CL: cachedPackageNames: "+cacheKey); } else { - Log.d(TAG, "REUSE cached-CL: cachedPackageNames: "+cacheKey); + Log.d(TAG, "REUSE cached-CL: cachedPackageNames: "+cacheKey); } - - return createClassLoaderImpl(ctx, userPackageNames, false, userAPKNames, clCached); + + return createClassLoaderImpl(ctx, userPackageNames, false, userAPKNames, clCached); } - + /** * @param ctx * @param packageNames list of package names @@ -115,33 +115,33 @@ public class ClassLoaderUtil { * @param parent * @return */ - private static synchronized ClassLoader createClassLoaderImpl(Context ctx, List<String> packageNames, boolean addLibPath, - List<String> apkNames, ClassLoader parent) { - + private static synchronized ClassLoader createClassLoaderImpl(final Context ctx, final List<String> packageNames, final boolean addLibPath, + final List<String> apkNames, final ClassLoader parent) { + final ApplicationInfo appInfoLauncher= ctx.getApplicationInfo(); final String appDirLauncher = new File(appInfoLauncher.dataDir).getParent(); final String libSubDef = "lib"; Log.d(TAG, "S: userPackageNames: "+packageNames+"; Launcher: appDir "+appDirLauncher+", dataDir: "+appInfoLauncher.dataDir+", nativeLibraryDir "+appInfoLauncher.nativeLibraryDir); - + final StringBuilder apks = new StringBuilder(); final StringBuilder libs = new StringBuilder(); int apkCount = 0; String lastUserPackageName = null; // the very last one reflects the Activity - + if( null != packageNames ) { - for(Iterator<String> i=packageNames.iterator(); i.hasNext(); ) { + for(final Iterator<String> i=packageNames.iterator(); i.hasNext(); ) { lastUserPackageName = i.next(); - + String userAPK = null; String nativeLibraryDir=null; try { final PackageManager pm = ctx.getPackageManager(); final ApplicationInfo appInfo = pm.getApplicationInfo(lastUserPackageName, 0); - final String appDir = new File(appInfoLauncher.dataDir).getParent(); + final String appDir = new File(appInfoLauncher.dataDir).getParent(); userAPK = appInfo.sourceDir; nativeLibraryDir = appInfo.nativeLibraryDir; Log.d(TAG, "S: userPackage: "+lastUserPackageName+", apk "+userAPK+", appDir "+appDir+", dataDir: "+appInfo.dataDir+", nativeLibraryDir "+nativeLibraryDir); - } catch (PackageManager.NameNotFoundException e) { + } catch (final PackageManager.NameNotFoundException e) { Log.d(TAG, "error: "+e, e); } if(null != userAPK) { @@ -173,10 +173,10 @@ public class ClassLoaderUtil { } } final int userAPKCount = apkCount; - + if( null != apkNames ) { - for(Iterator<String> i=apkNames.iterator(); i.hasNext(); ) { - String userAPK = i.next(); + for(final Iterator<String> i=apkNames.iterator(); i.hasNext(); ) { + final String userAPK = i.next(); if(apkCount>0) { apks.append(ELEM_SEP); } @@ -189,13 +189,13 @@ public class ClassLoaderUtil { return null; } } - + // return new TraceDexClassLoader(apks.toString(), dexPath.getAbsolutePath(), libs.toString(), parent); return new AssetDexClassLoader(apks.toString(), dexPath.getAbsolutePath(), libs.toString(), parent); } - + /*** - * + * public boolean setAPKClassLoader(String activityPackageName, ClassLoader classLoader) { try { @@ -212,9 +212,9 @@ public class ClassLoaderUtil { Field mClassLoader = getField(apkClass, "mClassLoader"); mClassLoader.set(apk, classLoader); - + Log.d(TAG, "setAPKClassLoader: OK"); - + return true; } catch (IllegalArgumentException e) { e.printStackTrace(); @@ -238,6 +238,6 @@ public class ClassLoaderUtil { } return null; } - */ + */ } diff --git a/src/java/jogamp/android/launcher/LauncherTempFileCache.java b/src/java/jogamp/android/launcher/LauncherTempFileCache.java index c7b9ad0..6836dd9 100644 --- a/src/java/jogamp/android/launcher/LauncherTempFileCache.java +++ b/src/java/jogamp/android/launcher/LauncherTempFileCache.java @@ -42,14 +42,14 @@ public class LauncherTempFileCache { // Lifecycle: For all JVMs, ClassLoader and times. private static final String tmpSubDir = "jogamp"; private static final String tmpDirPrefix = "file_cache"; - + // Get the value of the tmproot system property // Lifecycle: For all JVMs and ClassLoader /* package */ static final String tmpRootPropName = "jnlp.jogamp.tmp.cache.root"; // Flag indicating that we got a fatal error in the static initializer. private static boolean staticInitError = false; - + private static File tmpBaseDir; // String representing the name of the temp root directory relative to the @@ -66,26 +66,26 @@ public class LauncherTempFileCache { private boolean initError = false; private File individualTmpDir; - + /** * Documented way to kick off static initialization * @return true is static initialization was successful */ - public static synchronized boolean initSingleton(Context ctx) { + public static synchronized boolean initSingleton(final Context ctx) { if(null == tmpRootDir && !staticInitError) { // Create / initialize the temp root directory, starting the Reaper // thread to reclaim old installations if necessary. If we get an // exception, set an error code. try { initTmpRoot(ctx); - } catch (Exception ex) { + } catch (final Exception ex) { ex.printStackTrace(); staticInitError = true; } } - return !staticInitError; + return !staticInitError; } - + /** * This method is called by the static initializer to create / initialize * the temp root directory that will hold the temp directories for this @@ -136,7 +136,7 @@ public class LauncherTempFileCache { * * 6. Start the Reaper thread to cleanup old installations. */ - private static void initTmpRoot(Context ctx) throws IOException { + private static void initTmpRoot(final Context ctx) throws IOException { if (DEBUG) { System.err.println("TempFileCache: Static Initialization ----------------------------------------------"); System.err.println("TempFileCache: Thread: "+Thread.currentThread().getName()+", CL 0x"+Integer.toHexString(LauncherTempFileCache.class.getClassLoader().hashCode())); @@ -165,7 +165,7 @@ public class LauncherTempFileCache { tmpRootDir = new File(tmpBaseDir, tmpRootPropValue); if (DEBUG) { System.err.println("TempFileCache: Trying tmpRootDir = " + tmpRootDir.getAbsolutePath()); - } + } if (tmpRootDir.isDirectory()) { if (!tmpRootDir.canWrite()) { throw new IOException("Temp root directory is not writable: " + tmpRootDir.getAbsolutePath()); @@ -177,9 +177,9 @@ public class LauncherTempFileCache { tmpRootPropValue = null; tmpRootDir = null; System.clearProperty(tmpRootPropName); - } + } } - + if (tmpRootPropValue == null) { // Create the tmpbase directory if it doesn't already exist tmpBaseDir.mkdirs(); @@ -188,7 +188,7 @@ public class LauncherTempFileCache { } // Create ${tmpbase}/jlnNNNN.tmp then lock the file - File tmpFile = File.createTempFile("jln", ".tmp", tmpBaseDir); + final File tmpFile = File.createTempFile("jln", ".tmp", tmpBaseDir); if (DEBUG) { System.err.println("TempFileCache: tmpFile = " + tmpFile.getAbsolutePath()); } @@ -197,12 +197,12 @@ public class LauncherTempFileCache { final FileLock tmpLock = tmpChannel.lock(); // Strip off the ".tmp" to get the name of the tmprootdir - String tmpFileName = tmpFile.getAbsolutePath(); - String tmpRootName = tmpFileName.substring(0, tmpFileName.lastIndexOf(".tmp")); + final String tmpFileName = tmpFile.getAbsolutePath(); + final String tmpRootName = tmpFileName.substring(0, tmpFileName.lastIndexOf(".tmp")); // create ${tmpbase}/jlnNNNN.lck then lock the file - String lckFileName = tmpRootName + ".lck"; - File lckFile = new File(lckFileName); + final String lckFileName = tmpRootName + ".lck"; + final File lckFile = new File(lckFileName); if (DEBUG) { System.err.println("TempFileCache: lckFile = " + lckFile.getAbsolutePath()); } @@ -235,7 +235,7 @@ public class LauncherTempFileCache { tmpLock.release(); lckOut.close(); lckLock.release(); - } catch (IOException ex) { + } catch (final IOException ex) { // Do nothing } } @@ -249,7 +249,7 @@ public class LauncherTempFileCache { } // Start a new Reaper thread to do stuff... - Thread reaperThread = new Thread() { + final Thread reaperThread = new Thread() { /* @Override */ public void run() { deleteOldTempDirs(); @@ -276,9 +276,9 @@ public class LauncherTempFileCache { // enumerate list of jnl*.lck files, ignore our own jlnNNNN file final String ourLockFile = tmpRootPropValue + ".lck"; - FilenameFilter lckFilter = new FilenameFilter() { + final FilenameFilter lckFilter = new FilenameFilter() { /* @Override */ - public boolean accept(File dir, String name) { + public boolean accept(final File dir, final String name) { return name.endsWith(".lck") && !name.equals(ourLockFile); } }; @@ -288,16 +288,16 @@ public class LauncherTempFileCache { // (which should always succeed unless there is a problem). If we can // get the lock on both files, then it must be an old installation, and // we will delete it. - String[] fileNames = tmpBaseDir.list(lckFilter); + final String[] fileNames = tmpBaseDir.list(lckFilter); if (fileNames != null) { for (int i = 0; i < fileNames.length; i++) { - String lckFileName = fileNames[i]; - String tmpDirName = lckFileName.substring(0, lckFileName.lastIndexOf(".lck")); - String tmpFileName = tmpDirName + ".tmp"; + final String lckFileName = fileNames[i]; + final String tmpDirName = lckFileName.substring(0, lckFileName.lastIndexOf(".lck")); + final String tmpFileName = tmpDirName + ".tmp"; - File lckFile = new File(tmpBaseDir, lckFileName); - File tmpFile = new File(tmpBaseDir, tmpFileName); - File tmpDir = new File(tmpBaseDir, tmpDirName); + final File lckFile = new File(tmpBaseDir, lckFileName); + final File tmpFile = new File(tmpBaseDir, tmpFileName); + final File tmpDir = new File(tmpBaseDir, tmpDirName); if (lckFile.exists() && tmpFile.exists() && tmpDir.isDirectory()) { FileOutputStream tmpOut = null; @@ -308,7 +308,7 @@ public class LauncherTempFileCache { tmpOut = new FileOutputStream(tmpFile); tmpChannel = tmpOut.getChannel(); tmpLock = tmpChannel.tryLock(); - } catch (Exception ex) { + } catch (final Exception ex) { // Ignore exceptions if (DEBUG) { ex.printStackTrace(); @@ -324,7 +324,7 @@ public class LauncherTempFileCache { lckOut = new FileOutputStream(lckFile); lckChannel = lckOut.getChannel(); lckLock = lckChannel.tryLock(); - } catch (Exception ex) { + } catch (final Exception ex) { if (DEBUG) { ex.printStackTrace(); } @@ -344,12 +344,12 @@ public class LauncherTempFileCache { // occasional 0-byte .lck or .tmp file left around try { lckOut.close(); - } catch (IOException ex) { + } catch (final IOException ex) { } lckFile.delete(); try { tmpOut.close(); - } catch (IOException ex) { + } catch (final IOException ex) { } tmpFile.delete(); } else { @@ -362,7 +362,7 @@ public class LauncherTempFileCache { // on the *.tmp file tmpOut.close(); tmpLock.release(); - } catch (IOException ex) { + } catch (final IOException ex) { if (DEBUG) { ex.printStackTrace(); } @@ -382,14 +382,14 @@ public class LauncherTempFileCache { * Remove the specified file or directory. If "path" is a directory, then * recursively remove all entries, then remove the directory itself. */ - private static void removeAll(File path) { + private static void removeAll(final File path) { if (DEBUG) { System.err.println("TempFileCache: removeAll(" + path + ")"); } if (path.isDirectory()) { // Recursively remove all files/directories in this directory - File[] list = path.listFiles(); + final File[] list = path.listFiles(); if (list != null) { for (int i = 0; i < list.length; i++) { removeAll(list[i]); @@ -405,10 +405,10 @@ public class LauncherTempFileCache { System.err.println("TempFileCache: new TempFileCache() --------------------- (static ok: "+(!staticInitError)+")"); System.err.println("TempFileCache: Thread: "+Thread.currentThread().getName()+", CL 0x"+Integer.toHexString(LauncherTempFileCache.class.getClassLoader().hashCode())+", this 0x"+Integer.toHexString(hashCode())); } - if(!staticInitError) { + if(!staticInitError) { try { createTmpDir(); - } catch (Exception ex) { + } catch (final Exception ex) { ex.printStackTrace(); initError = true; } @@ -416,23 +416,23 @@ public class LauncherTempFileCache { if (DEBUG) { System.err.println("tempDir: "+individualTmpDir+" (ok: "+(!initError)+")"); System.err.println("----------------------------------------------------------"); - } + } } - + /** * @return true is static and object initialization was successful */ public boolean isValid() { return !staticInitError && !initError; } - + /** - * Base temp directory used by TempFileCache. + * Base temp directory used by TempFileCache. * Lifecycle: For all JVMs, ClassLoader and times. - * + * * This is set to: * * ${java.io.tmpdir}/<tmpDirPrefix> * - * + * * @return */ public File getBaseDir() { return tmpBaseDir; } @@ -445,16 +445,16 @@ public class LauncherTempFileCache { * * <tmpBaseDir>/<tmpRootPropValue> * - * Use Case: Per ClassLoader files, eg. native libraries. + * Use Case: Per ClassLoader files, eg. native libraries. * * Old temp directories are cleaned up the next time a JVM is launched that * uses TempFileCache. * - * + * * @return */ public File getRootDir() { return tmpRootDir; } - + /** * Temporary directory for individual files (eg. native libraries of one ClassLoader instance). * The directory name is: @@ -466,12 +466,12 @@ public class LauncherTempFileCache { * where jlnMMMMM is the unique filename created by File.createTempFile() * without the ".tmp" extension. * - * + * * @return */ public File getTempDir() { return individualTmpDir; } - - + + /** * Create the temp directory in tmpRootDir. To do this, we create a temp * file with a ".tmp" extension, and then create a directory of the @@ -480,9 +480,9 @@ public class LauncherTempFileCache { * We avoid deleteOnExit, because it doesn't work reliably. */ private void createTmpDir() throws IOException { - File tmpFile = File.createTempFile("jln", ".tmp", tmpRootDir); - String tmpFileName = tmpFile.getAbsolutePath(); - String tmpDirName = tmpFileName.substring(0, tmpFileName.lastIndexOf(".tmp")); + final File tmpFile = File.createTempFile("jln", ".tmp", tmpRootDir); + final String tmpFileName = tmpFile.getAbsolutePath(); + final String tmpDirName = tmpFileName.substring(0, tmpFileName.lastIndexOf(".tmp")); individualTmpDir = new File(tmpDirName); if (!individualTmpDir.mkdir()) { throw new IOException("Cannot create " + individualTmpDir); diff --git a/src/java/jogamp/android/launcher/LauncherUtil.java b/src/java/jogamp/android/launcher/LauncherUtil.java index 1dfc218..2b7bd79 100644 --- a/src/java/jogamp/android/launcher/LauncherUtil.java +++ b/src/java/jogamp/android/launcher/LauncherUtil.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. 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 JogAmp Community ``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 JogAmp Community OR @@ -20,7 +20,7 @@ * 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. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -43,45 +43,45 @@ import android.util.Log; * Helper class to parse Uri's and programmatically add package names and properties to create an Uri or Intend. * <p> * The order of the Uri segments (any arguments) is preserved. - * </p> + * </p> */ public class LauncherUtil { - + /** Default launch mode. */ public static final String LAUNCH_ACTIVITY_NORMAL = "org.jogamp.launcher.action.LAUNCH_ACTIVITY_NORMAL"; - + /** Transparent launch mode. Note: This seems to be required to achieve translucency, since setTheme(..) doesn't work. */ public static final String LAUNCH_ACTIVITY_TRANSPARENT = "org.jogamp.launcher.action.LAUNCH_ACTIVITY_TRANSPARENT"; - + /** FIXME: TODO */ public static final String LAUNCH_MAIN = "org.jogamp.launcher.action.LAUNCH_MAIN"; - + /** FIXME: TODO */ public static final String LAUNCH_JUNIT = "org.jogamp.launcher.action.LAUNCH_JUNIT"; - + /** The protocol <code>launch</code> */ public static final String SCHEME = "launch"; - + /** The host <code>jogamp.org</code> */ public static final String HOST = "jogamp.org"; - + static final String SYS_PKG = "sys"; - + static final String USR_PKG = "pkg"; - + static final String ARG = "arg"; - + public static abstract class BaseActivityLauncher extends Activity { final OrderedProperties props = new OrderedProperties(); final ArrayList<String> args = new ArrayList<String>(); - /** + /** * Returns the default {@link LauncherUtil#LAUNCH_ACTIVITY_NORMAL} action. * <p> * Should be overridden for other action, eg. {@link LauncherUtil#LAUNCH_ACTIVITY_TRANSPARENT}. * </p> */ public String getAction() { return LAUNCH_ACTIVITY_NORMAL; } - + /** * Returns the properties, which are being propagated to the target activity. * <p> @@ -89,58 +89,58 @@ public class LauncherUtil { * </p> */ public final OrderedProperties getProperties() { return props; } - + /** * Returns the commandline arguments, which are being propagated to the target activity. * <p> * Maybe be used to set custom commandline arguments. * </p> */ - public final ArrayList<String> getArguments() { return args; } - + public final ArrayList<String> getArguments() { return args; } + /** Custom initialization hook which can be overriden to setup data, e.g. fill the properties retrieved by {@link #getProperties()}. */ public void init() { } - + /** Returns true if this launcher activity shall end after starting the downstream activity. Defaults to <code>true</code>, override to change behavior. */ public boolean finishAfterDelegate() { return true; } - + /** Must return the downstream Activity class name */ public abstract String getActivityName(); - + /** Must return a list of required user packages, at least one containing the activity. */ public abstract List<String> getUsrPackages(); - + /** Return a list of required system packages w/ native libraries, may return null or a zero sized list. */ public abstract List<String> getSysPackages(); @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + init(); - + final DataSet data = new DataSet(); data.setActivityName(getActivityName()); data.addAllSysPackages(getSysPackages()); data.addAllUsrPackages(getUsrPackages()); data.addAllProperties(props); data.addAllArguments(args); - + final Intent intent = LauncherUtil.getIntent(getAction(), data); Log.d(getClass().getSimpleName(), "Launching Activity: "+intent); startActivity (intent); - + if(finishAfterDelegate()) { finish(); // done } - } + } } - + public static class OrderedProperties { HashMap<String, String> map = new HashMap<String, String>(); - ArrayList<String> keyList = new ArrayList<String>(); - - public final void setProperty(String key, String value) { + ArrayList<String> keyList = new ArrayList<String>(); + + public final void setProperty(final String key, final String value) { if(key.equals(SYS_PKG)) { throw new IllegalArgumentException("Illegal property key, '"+SYS_PKG+"' is reserved"); } @@ -157,36 +157,36 @@ public class LauncherUtil { } keyList.add(key); // new key } - - public final void addAll(OrderedProperties props) { - Iterator<String> argKeys = props.keyList.iterator(); + + public final void addAll(final OrderedProperties props) { + final Iterator<String> argKeys = props.keyList.iterator(); while(argKeys.hasNext()) { final String key = argKeys.next(); setProperty(key, props.map.get(key)); - } + } } - + public final void setSystemProperties() { - Iterator<String> argKeys = keyList.iterator(); + final Iterator<String> argKeys = keyList.iterator(); while(argKeys.hasNext()) { final String key = argKeys.next(); System.setProperty(key, map.get(key)); } } public final void clearSystemProperties() { - Iterator<String> argKeys = keyList.iterator(); + final Iterator<String> argKeys = keyList.iterator(); while(argKeys.hasNext()) { System.clearProperty(argKeys.next()); } } - - public final String getProperty(String key) { return map.get(key); } + + public final String getProperty(final String key) { return map.get(key); } public final Map<String, String> getProperties() { return map; } - + /** Returns the list of property keys in the order, as they were added. */ - public final List<String> getPropertyKeys() { return keyList; } + public final List<String> getPropertyKeys() { return keyList; } } - + /** * Data set to transfer from and to launch URI consisting out of: * <ul> @@ -205,56 +205,56 @@ public class LauncherUtil { static final char ASSIG = '='; static final String COLSLASH2 = "://"; static final String EMPTY = ""; - + String activityName = null; ArrayList<String> sysPackages = new ArrayList<String>(); ArrayList<String> usrPackages = new ArrayList<String>(); OrderedProperties properties = new OrderedProperties(); ArrayList<String> arguments = new ArrayList<String>(); - - public final void setActivityName(String name) { activityName = name; } + + public final void setActivityName(final String name) { activityName = name; } public final String getActivityName() { return activityName; } - - public final void addSysPackage(String p) { - sysPackages.add(p); - } - public final void addAllSysPackages(List<String> plist) { + + public final void addSysPackage(final String p) { + sysPackages.add(p); + } + public final void addAllSysPackages(final List<String> plist) { sysPackages.addAll(plist); - } + } public final List<String> getSysPackages() { return sysPackages; } - - public final void addUsrPackage(String p) { - usrPackages.add(p); - } - public final void addAllUsrPackages(List<String> plist) { + + public final void addUsrPackage(final String p) { + usrPackages.add(p); + } + public final void addAllUsrPackages(final List<String> plist) { usrPackages.addAll(plist); - } + } public final List<String> getUsrPackages() { return usrPackages; } - - public final void setProperty(String key, String value) { + + public final void setProperty(final String key, final String value) { properties.setProperty(key, value); } - public final void addAllProperties(OrderedProperties props) { + public final void addAllProperties(final OrderedProperties props) { properties.addAll(props); } public final void setSystemProperties() { properties.setSystemProperties(); - } + } public final void clearSystemProperties() { properties.clearSystemProperties(); - } - public final String getProperty(String key) { return properties.getProperty(key); } + } + public final String getProperty(final String key) { return properties.getProperty(key); } public final OrderedProperties getProperties() { return properties; } public final List<String> getPropertyKeys() { return properties.getPropertyKeys(); } - - public final void addArgument(String arg) { arguments.add(arg); } - public final void addAllArguments(List<String> args) { + + public final void addArgument(final String arg) { arguments.add(arg); } + public final void addAllArguments(final List<String> args) { arguments.addAll(args); } public final ArrayList<String> getArguments() { return arguments; } - + public final Uri getUri() { - StringBuilder sb = new StringBuilder(); + final StringBuilder sb = new StringBuilder(); sb.append(SCHEME).append(COLSLASH2).append(HOST).append(SLASH).append(getActivityName()); boolean needsQMark = true; boolean needsSep = false; @@ -284,7 +284,7 @@ public class LauncherUtil { needsSep = true; } } - Iterator<String> propKeys = properties.keyList.iterator(); + final Iterator<String> propKeys = properties.keyList.iterator(); while(propKeys.hasNext()) { if( needsQMark ) { sb.append(QMARK); @@ -297,7 +297,7 @@ public class LauncherUtil { sb.append(key).append(ASSIG).append(properties.map.get(key)); needsSep = true; } - Iterator<String> args = arguments.iterator(); + final Iterator<String> args = arguments.iterator(); while(args.hasNext()) { if( needsQMark ) { sb.append(QMARK); @@ -308,18 +308,18 @@ public class LauncherUtil { } sb.append(ARG).append(ASSIG).append(args.next()); needsSep = true; - } + } return Uri.parse(sb.toString()); } - - public static final DataSet create(Uri uri) { + + public static final DataSet create(final Uri uri) { if(!uri.getScheme().equals(SCHEME)) { return null; } if(!uri.getHost().equals(HOST)) { return null; } - DataSet data = new DataSet(); + final DataSet data = new DataSet(); { String an = uri.getPath(); if(SLASH == an.charAt(0)) { @@ -330,16 +330,16 @@ public class LauncherUtil { } data.setActivityName(an); } - + final String q = uri.getQuery(); final int q_l = null != q ? q.length() : -1; int q_e = -1; while(q_e < q_l) { - int q_b = q_e + 1; // next term + final int q_b = q_e + 1; // next term q_e = q.indexOf(AMPER, q_b); if(0 == q_e) { // single separator - continue; + continue; } if(0 > q_e) { // end @@ -381,41 +381,41 @@ public class LauncherUtil { data.validate(); return data; } - + public final void validate() { if(null == activityName) { throw new RuntimeException("Activity is not NULL"); } } } - - public final static Intent getIntent(String action, DataSet data) { + + public final static Intent getIntent(final String action, final DataSet data) { data.validate(); return new Intent(action, data.getUri()); } - + public static void main(String[] args) { if(args.length==0) { args = new String[] { - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+SYS_PKG+"=jogamp.pack1&"+SYS_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&"+USR_PKG+"=com.jogamp.pack4&jogamp.common.debug=true&com.jogamp.test=false", + SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+SYS_PKG+"=jogamp.pack1&"+SYS_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&"+USR_PKG+"=com.jogamp.pack4&jogamp.common.debug=true&com.jogamp.test=false", SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+SYS_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false", SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false", SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+USR_PKG+"=com.jogamp.pack2", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+USR_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3" + SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+USR_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", + SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", + SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3" }; } int errors = 0; for(int i=0; i<args.length; i++) { - String uri_s = args[i]; - Uri uri0 = Uri.parse(uri_s); - DataSet data = DataSet.create(uri0); + final String uri_s = args[i]; + final Uri uri0 = Uri.parse(uri_s); + final DataSet data = DataSet.create(uri0); if(null == data) { errors++; System.err.println("Error: NULL JogAmpLauncherUtil: <"+uri_s+"> -> "+uri0+" -> NULL"); } else { - Uri uri1 = data.getUri(); + final Uri uri1 = data.getUri(); if(!uri0.equals(uri1)) { errors++; System.err.println("Error: Not equal: <"+uri_s+"> -> "+uri0+" -> "+uri1); @@ -426,5 +426,5 @@ public class LauncherUtil { } System.err.println("LauncherUtil Self Test: Errors: "+errors); } - + } diff --git a/src/java/jogamp/android/launcher/LauncherVersionActivity.java b/src/java/jogamp/android/launcher/LauncherVersionActivity.java index de78f5d..d26981f 100644 --- a/src/java/jogamp/android/launcher/LauncherVersionActivity.java +++ b/src/java/jogamp/android/launcher/LauncherVersionActivity.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. 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 JogAmp Community ``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 JogAmp Community OR @@ -20,7 +20,7 @@ * 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. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -35,9 +35,9 @@ import android.util.Log; public class LauncherVersionActivity extends Activity { static final String TAG = "JogAmp-LauncherVersion"; TextView tv = null; - + @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { Log.d(TAG, "onCreate - S"); super.onCreate(savedInstanceState); tv = new TextView(this); @@ -47,14 +47,14 @@ public class LauncherVersionActivity extends Activity { setContentView(tv); Log.d(TAG, "onCreate - X"); } - + @Override public void onStart() { Log.d(TAG, "onStart - S"); super.onStart(); Log.d(TAG, "onStart - X"); } - + @Override public void onRestart() { Log.d(TAG, "onRestart - S"); @@ -79,14 +79,14 @@ public class LauncherVersionActivity extends Activity { @Override public void onStop() { Log.d(TAG, "onStop - S"); - super.onStop(); + super.onStop(); Log.d(TAG, "onStop - X"); } @Override public void onDestroy() { Log.d(TAG, "onDestroy - S"); - super.onDestroy(); + super.onDestroy(); Log.d(TAG, "onDestroy - X"); - } + } } diff --git a/src/java/jogamp/android/launcher/MainLauncher.java b/src/java/jogamp/android/launcher/MainLauncher.java index f37fa57..0dc6b4a 100644 --- a/src/java/jogamp/android/launcher/MainLauncher.java +++ b/src/java/jogamp/android/launcher/MainLauncher.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. 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 JogAmp Community ``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 JogAmp Community OR @@ -20,7 +20,7 @@ * 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. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -40,72 +40,72 @@ import android.util.Log; public class MainLauncher extends Activity { static final String TAG = "JogAmp-MainLauncher"; - + // private static final String[] frameworkAPKs = { "/system/framework/core-junit.jar", "/data/projects/gluegen/make/lib/ant-junit-all.apk" }; // private static final String[] frameworkAPKs = { "/data/projects/gluegen/make/lib/ant-junit-all.apk" }; private static final String[] frameworkAPKs = { "/sdcard/ant-junit-all.apk" }; - + LauncherUtil.DataSet data = null; - + Class<?> mainClazz = null; Method mainClazzMain = null; - + Class<?> staticContextClazz = null; Method mStaticContextInit = null; Method mStaticContextClear = null; String[] mainClassArgs = null; - + @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { Log.d(TAG, "onCreate - S"); super.onCreate(savedInstanceState); - + final Uri uri = getIntent().getData(); data = LauncherUtil.DataSet.create(uri); data.setSystemProperties(); - ClassLoader cl = ClassLoaderUtil.createClassLoader(this, data.getSysPackages(), data.getUsrPackages(), Arrays.asList(frameworkAPKs)); + final ClassLoader cl = ClassLoaderUtil.createClassLoader(this, data.getSysPackages(), data.getUsrPackages(), Arrays.asList(frameworkAPKs)); if(null != cl) { try { staticContextClazz = Class.forName("jogamp.common.os.android.StaticContext", true, cl); mStaticContextInit = staticContextClazz.getMethod("init", android.content.Context.class, android.view.ViewGroup.class); - mStaticContextClear = staticContextClazz.getMethod("clear"); - + mStaticContextClear = staticContextClazz.getMethod("clear"); + mainClazz = Class.forName(data.getActivityName(), true, cl); Log.d(TAG, "Main Clazz "+mainClazz); mainClazzMain = mainClazz.getDeclaredMethod("main", new Class[] { String[].class }); Log.d(TAG, "Main Clazz Main "+mainClazzMain); - } catch (Exception e) { + } catch (final Exception e) { Log.d(TAG, "error: "+e, e); throw new RuntimeException(e); } } if( null == mStaticContextInit || null == mStaticContextClear || null == mainClazzMain ) { - RuntimeException e = new RuntimeException("XXX - incomplete method set"); + final RuntimeException e = new RuntimeException("XXX - incomplete method set"); Log.d(TAG, "error: "+e, e); throw e; } - + final android.view.ViewGroup viewGroup = new android.widget.FrameLayout(getApplicationContext()); getWindow().setContentView(viewGroup); - + callMethod(null, mStaticContextInit, getApplicationContext(), viewGroup); - - List<String> args = data.getArguments(); + + final List<String> args = data.getArguments(); mainClassArgs=new String[args.size()]; - args.toArray(mainClassArgs); - + args.toArray(mainClassArgs); + Log.d(TAG, "onCreate - X"); } - + @Override public void onStart() { Log.d(TAG, "onStart - S"); super.onStart(); Log.d(TAG, "onStart - X"); } - + @Override public void onRestart() { Log.d(TAG, "onRestart - S"); @@ -122,9 +122,9 @@ public class MainLauncher extends Activity { try { Log.d(TAG, "onResume - main.0 - "+Thread.currentThread().getName()); mainClazzMain.invoke(null, new Object[] { mainClassArgs } ); - } catch (InvocationTargetException ite) { + } catch (final InvocationTargetException ite) { ite.getTargetException().printStackTrace(); - } catch (Throwable t) { + } catch (final Throwable t) { t.printStackTrace(); } Log.d(TAG, "onResume - main.X -> finish() - "+Thread.currentThread().getName()); @@ -144,7 +144,7 @@ public class MainLauncher extends Activity { @Override public void onStop() { Log.d(TAG, "onStop - S"); - super.onStop(); + super.onStop(); Log.d(TAG, "onStop - X"); } @@ -156,32 +156,32 @@ public class MainLauncher extends Activity { data = null; } callMethod(null, mStaticContextClear); - super.onDestroy(); + super.onDestroy(); Log.d(TAG, "onDestroy - X"); - } + } @Override public void finish() { Log.d(TAG, "finish - S"); - super.finish(); + super.finish(); Log.d(TAG, "finish - X"); - } + } /** * @throws JogampRuntimeException if the instance can not be created. */ - public static final Object createInstance(Class<?> clazz, Class<?>[] cstrArgTypes, Object ... cstrArgs) + public static final Object createInstance(final Class<?> clazz, final Class<?>[] cstrArgTypes, final Object ... cstrArgs) throws RuntimeException { return createInstance(getConstructor(clazz, cstrArgTypes), cstrArgs); } - public static final Object createInstance(Constructor<?> cstr, Object ... cstrArgs) + public static final Object createInstance(final Constructor<?> cstr, final Object ... cstrArgs) throws RuntimeException { try { return cstr.newInstance(cstrArgs); - } catch (Exception e) { + } catch (final Exception e) { Throwable t = e; if (t instanceof InvocationTargetException) { t = ((InvocationTargetException) t).getTargetException(); @@ -195,26 +195,26 @@ public class MainLauncher extends Activity { throw new RuntimeException("can not create instance of "+cstr.getName(), t); } } - + /** * @throws JogampRuntimeException if the constructor can not be delivered. */ - protected static final Constructor<?> getConstructor(Class<?> clazz, Class<?> ... cstrArgTypes) + protected static final Constructor<?> getConstructor(final Class<?> clazz, Class<?> ... cstrArgTypes) throws RuntimeException { try { if(null == cstrArgTypes) { cstrArgTypes = zeroTypes; } return clazz.getDeclaredConstructor(cstrArgTypes); - } catch (NoSuchMethodException ex) { + } catch (final NoSuchMethodException ex) { throw new RuntimeException("Constructor: '" + clazz + "(" + asString(cstrArgTypes) + ")' not found", ex); } } - + protected static final Class<?>[] zeroTypes = new Class[0]; - protected static final String asString(Class<?>[] argTypes) { - StringBuilder args = new StringBuilder(); + protected static final String asString(final Class<?>[] argTypes) { + final StringBuilder args = new StringBuilder(); boolean coma = false; if(null != argTypes) { for (int i = 0; i < argTypes.length; i++) { @@ -227,13 +227,13 @@ public class MainLauncher extends Activity { } return args.toString(); } - - protected static final Object callMethod(Object instance, Method method, Object ... args) + + protected static final Object callMethod(final Object instance, final Method method, final Object ... args) throws RuntimeException { try { return method.invoke(instance, args); - } catch (Exception e) { + } catch (final Exception e) { Throwable t = e; if (t instanceof InvocationTargetException) { t = ((InvocationTargetException) t).getTargetException(); diff --git a/src/java/jogamp/android/launcher/TraceDexClassLoader.java b/src/java/jogamp/android/launcher/TraceDexClassLoader.java index 0b00489..452120a 100644 --- a/src/java/jogamp/android/launcher/TraceDexClassLoader.java +++ b/src/java/jogamp/android/launcher/TraceDexClassLoader.java @@ -8,16 +8,16 @@ import dalvik.system.DexClassLoader; public class TraceDexClassLoader extends DexClassLoader { private static final boolean DEBUG = false; - - public TraceDexClassLoader(String dexPath, String dexOutputDir, String libPath, ClassLoader parent) { + + public TraceDexClassLoader(final String dexPath, final String dexOutputDir, final String libPath, final ClassLoader parent) { super(dexPath, dexOutputDir, libPath, parent); if(DEBUG) { Log.d(TraceDexClassLoader.class.getSimpleName(), "ctor: dexPath " + dexPath + ", dexOutputDir " + dexOutputDir + ", libPath " + libPath + ", parent " + parent); } } - + @Override - public URL findResource(String name) { + public URL findResource(final String name) { final URL url = super.findResource(name); if(DEBUG) { Log.d(TraceDexClassLoader.class.getSimpleName(), "findResource: " + name + " -> " + url); |