• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.jme3.system.android;
2 
3 import android.app.Activity;
4 import android.content.res.Resources;
5 import android.os.Environment;
6 import com.jme3.asset.AndroidAssetManager;
7 import com.jme3.asset.AssetManager;
8 import com.jme3.audio.AudioRenderer;
9 import com.jme3.audio.android.AndroidAudioRenderer;
10 import com.jme3.system.AppSettings;
11 import com.jme3.system.JmeContext;
12 import com.jme3.system.JmeContext.Type;
13 import com.jme3.system.JmeSystemDelegate;
14 import com.jme3.system.Platform;
15 import com.jme3.util.AndroidLogHandler;
16 import com.jme3.util.JmeFormatter;
17 import java.io.File;
18 import java.net.URL;
19 import java.util.logging.Handler;
20 import java.util.logging.Level;
21 
22 public class JmeAndroidSystem extends JmeSystemDelegate {
23 
24     private static Resources res;
25     private static Activity activity;
26 
27     @Override
newAssetManager(URL configFile)28     public AssetManager newAssetManager(URL configFile) {
29         logger.log(Level.INFO, "newAssetManager({0})", configFile);
30         return new AndroidAssetManager(configFile);
31     }
32 
33     @Override
newAssetManager()34     public AssetManager newAssetManager() {
35         logger.log(Level.INFO, "newAssetManager()");
36         return new AndroidAssetManager(null);
37     }
38 
39     @Override
showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry)40     public boolean showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry) {
41         return true;
42     }
43 
44     @Override
newContext(AppSettings settings, Type contextType)45     public JmeContext newContext(AppSettings settings, Type contextType) {
46         initialize(settings);
47         return new OGLESContext();
48     }
49 
50     @Override
newAudioRenderer(AppSettings settings)51     public AudioRenderer newAudioRenderer(AppSettings settings) {
52         return new AndroidAudioRenderer(activity);
53     }
54 
55     @Override
initialize(AppSettings settings)56     public void initialize(AppSettings settings) {
57         if (initialized) {
58             return;
59         }
60 
61         initialized = true;
62         try {
63             JmeFormatter formatter = new JmeFormatter();
64 
65             Handler consoleHandler = new AndroidLogHandler();
66             consoleHandler.setFormatter(formatter);
67         } catch (SecurityException ex) {
68             logger.log(Level.SEVERE, "Security error in creating log file", ex);
69         }
70         logger.log(Level.INFO, "Running on {0}", getFullName());
71     }
72 
73     @Override
getPlatform()74     public Platform getPlatform() {
75         String arch = System.getProperty("os.arch").toLowerCase();
76         if (arch.contains("arm")) {
77             if (arch.contains("v5")) {
78                 return Platform.Android_ARM5;
79             } else if (arch.contains("v6")) {
80                 return Platform.Android_ARM6;
81             } else if (arch.contains("v7")) {
82                 return Platform.Android_ARM7;
83             } else {
84                 return Platform.Android_ARM5; // unknown ARM
85             }
86         } else {
87             throw new UnsupportedOperationException("Unsupported Android Platform");
88         }
89     }
90 
91     @Override
getStorageFolder()92     public synchronized File getStorageFolder() {
93         //http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir
94         //http://developer.android.com/guide/topics/data/data-storage.html
95 
96         boolean mExternalStorageWriteable = false;
97         String state = Environment.getExternalStorageState();
98         if (Environment.MEDIA_MOUNTED.equals(state)) {
99             mExternalStorageWriteable = true;
100         } else {
101             mExternalStorageWriteable = false;
102         }
103 
104         if (mExternalStorageWriteable) {
105             //getExternalFilesDir automatically creates the directory if necessary.
106             //directory structure should be: /mnt/sdcard/Android/data/<packagename>/files
107             //when created this way, the directory is automatically removed by the Android
108             //  system when the app is uninstalled
109             storageFolder = activity.getApplicationContext().getExternalFilesDir(null);
110             logger.log(Level.INFO, "Storage Folder Path: {0}", storageFolder.getAbsolutePath());
111 
112             return storageFolder;
113         } else {
114             return null;
115         }
116 
117     }
118 
setResources(Resources res)119     public static void setResources(Resources res) {
120         JmeAndroidSystem.res = res;
121     }
122 
getResources()123     public static Resources getResources() {
124         return res;
125     }
126 
setActivity(Activity activity)127     public static void setActivity(Activity activity) {
128         JmeAndroidSystem.activity = activity;
129     }
130 
getActivity()131     public static Activity getActivity() {
132         return activity;
133     }
134 }
135