aboutsummaryrefslogtreecommitdiff
path: root/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/android/com/jme3/system/android/JmeAndroidSystem.java')
-rw-r--r--engine/src/android/com/jme3/system/android/JmeAndroidSystem.java134
1 files changed, 134 insertions, 0 deletions
diff --git a/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java b/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
new file mode 100644
index 0000000..6550101
--- /dev/null
+++ b/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
@@ -0,0 +1,134 @@
+package com.jme3.system.android;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.os.Environment;
+import com.jme3.asset.AndroidAssetManager;
+import com.jme3.asset.AssetManager;
+import com.jme3.audio.AudioRenderer;
+import com.jme3.audio.android.AndroidAudioRenderer;
+import com.jme3.system.AppSettings;
+import com.jme3.system.JmeContext;
+import com.jme3.system.JmeContext.Type;
+import com.jme3.system.JmeSystemDelegate;
+import com.jme3.system.Platform;
+import com.jme3.util.AndroidLogHandler;
+import com.jme3.util.JmeFormatter;
+import java.io.File;
+import java.net.URL;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+
+public class JmeAndroidSystem extends JmeSystemDelegate {
+
+ private static Resources res;
+ private static Activity activity;
+
+ @Override
+ public AssetManager newAssetManager(URL configFile) {
+ logger.log(Level.INFO, "newAssetManager({0})", configFile);
+ return new AndroidAssetManager(configFile);
+ }
+
+ @Override
+ public AssetManager newAssetManager() {
+ logger.log(Level.INFO, "newAssetManager()");
+ return new AndroidAssetManager(null);
+ }
+
+ @Override
+ public boolean showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry) {
+ return true;
+ }
+
+ @Override
+ public JmeContext newContext(AppSettings settings, Type contextType) {
+ initialize(settings);
+ return new OGLESContext();
+ }
+
+ @Override
+ public AudioRenderer newAudioRenderer(AppSettings settings) {
+ return new AndroidAudioRenderer(activity);
+ }
+
+ @Override
+ public void initialize(AppSettings settings) {
+ if (initialized) {
+ return;
+ }
+
+ initialized = true;
+ try {
+ JmeFormatter formatter = new JmeFormatter();
+
+ Handler consoleHandler = new AndroidLogHandler();
+ consoleHandler.setFormatter(formatter);
+ } catch (SecurityException ex) {
+ logger.log(Level.SEVERE, "Security error in creating log file", ex);
+ }
+ logger.log(Level.INFO, "Running on {0}", getFullName());
+ }
+
+ @Override
+ public Platform getPlatform() {
+ String arch = System.getProperty("os.arch").toLowerCase();
+ if (arch.contains("arm")) {
+ if (arch.contains("v5")) {
+ return Platform.Android_ARM5;
+ } else if (arch.contains("v6")) {
+ return Platform.Android_ARM6;
+ } else if (arch.contains("v7")) {
+ return Platform.Android_ARM7;
+ } else {
+ return Platform.Android_ARM5; // unknown ARM
+ }
+ } else {
+ throw new UnsupportedOperationException("Unsupported Android Platform");
+ }
+ }
+
+ @Override
+ public synchronized File getStorageFolder() {
+ //http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir
+ //http://developer.android.com/guide/topics/data/data-storage.html
+
+ boolean mExternalStorageWriteable = false;
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ mExternalStorageWriteable = true;
+ } else {
+ mExternalStorageWriteable = false;
+ }
+
+ if (mExternalStorageWriteable) {
+ //getExternalFilesDir automatically creates the directory if necessary.
+ //directory structure should be: /mnt/sdcard/Android/data/<packagename>/files
+ //when created this way, the directory is automatically removed by the Android
+ // system when the app is uninstalled
+ storageFolder = activity.getApplicationContext().getExternalFilesDir(null);
+ logger.log(Level.INFO, "Storage Folder Path: {0}", storageFolder.getAbsolutePath());
+
+ return storageFolder;
+ } else {
+ return null;
+ }
+
+ }
+
+ public static void setResources(Resources res) {
+ JmeAndroidSystem.res = res;
+ }
+
+ public static Resources getResources() {
+ return res;
+ }
+
+ public static void setActivity(Activity activity) {
+ JmeAndroidSystem.activity = activity;
+ }
+
+ public static Activity getActivity() {
+ return activity;
+ }
+}