| Index: shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
|
| diff --git a/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java b/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
|
| index 2503eb087476c5a510515aa22595e90e80c352c8..e2dbc61c3dadb64e5d06e868ba4755aa23b3c7b9 100644
|
| --- a/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
|
| +++ b/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
|
| @@ -5,9 +5,11 @@
|
| package org.chromium.mojo_shell_apk;
|
|
|
| import android.content.Context;
|
| +import android.util.Log;
|
|
|
| import org.chromium.base.JNINamespace;
|
|
|
| +import java.io.File;
|
| import java.util.ArrayList;
|
| import java.util.Arrays;
|
| import java.util.List;
|
| @@ -17,25 +19,52 @@ import java.util.List;
|
| **/
|
| @JNINamespace("mojo")
|
| public class MojoMain {
|
| + private static final String TAG = "MojoMain";
|
| +
|
| + // Directory where applications bundled with the shell will be extracted.
|
| + private static final String LOCAL_APP_DIRECTORY = "local_apps";
|
| + // Individual applications bundled with the shell as assets.
|
| + private static final String NETWORK_LIBRARY_APP = "network_service.mojo";
|
| +
|
| /**
|
| * A guard flag for calling nativeInit() only once.
|
| **/
|
| private static boolean sInitialized = false;
|
|
|
| /**
|
| + * Deletes directories holding the temporary files. This should be called early on shell startup
|
| + * to clean up after the previous run.
|
| + */
|
| + static void clearTemporaryFiles(Context context) {
|
| + FileHelper.deleteRecursively(getLocalAppsDir(context));
|
| + }
|
| +
|
| + /**
|
| * Initializes the native system.
|
| **/
|
| static void ensureInitialized(Context applicationContext, String[] parameters) {
|
| if (sInitialized)
|
| return;
|
| - List<String> parametersList = new ArrayList<String>();
|
| - // Program name.
|
| - parametersList.add("mojo_shell");
|
| - if (parameters != null) {
|
| - parametersList.addAll(Arrays.asList(parameters));
|
| +
|
| + try {
|
| + FileHelper.extractFromAssets(applicationContext, NETWORK_LIBRARY_APP,
|
| + getLocalAppsDir(applicationContext), false);
|
| +
|
| + List<String> parametersList = new ArrayList<String>();
|
| + // Program name.
|
| + parametersList.add("mojo_shell");
|
| + if (parameters != null) {
|
| + parametersList.addAll(Arrays.asList(parameters));
|
| + }
|
| +
|
| + nativeInit(applicationContext,
|
| + parametersList.toArray(new String[parametersList.size()]),
|
| + getLocalAppsDir(applicationContext).getAbsolutePath());
|
| + sInitialized = true;
|
| + } catch (Exception e) {
|
| + Log.e(TAG, "MojoMain initialization failed.", e);
|
| + throw new RuntimeException(e);
|
| }
|
| - nativeInit(applicationContext, parametersList.toArray(new String[parametersList.size()]));
|
| - sInitialized = true;
|
| }
|
|
|
| /**
|
| @@ -45,10 +74,15 @@ public class MojoMain {
|
| nativeStart(appUrl);
|
| }
|
|
|
| + private static File getLocalAppsDir(Context context) {
|
| + return context.getDir(LOCAL_APP_DIRECTORY, Context.MODE_PRIVATE);
|
| + }
|
| +
|
| /**
|
| * Initializes the native system. This API should be called only once per process.
|
| **/
|
| - private static native void nativeInit(Context context, String[] parameters);
|
| + private static native void nativeInit(Context context, String[] parameters,
|
| + String bundledAppsDirectory);
|
|
|
| private static native void nativeStart(String appUrl);
|
| }
|
|
|