summaryrefslogtreecommitdiff
path: root/android/src/org/rockbox/RockboxService.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/src/org/rockbox/RockboxService.java')
-rw-r--r--android/src/org/rockbox/RockboxService.java45
1 files changed, 20 insertions, 25 deletions
diff --git a/android/src/org/rockbox/RockboxService.java b/android/src/org/rockbox/RockboxService.java
index de90999783..4f5df62280 100644
--- a/android/src/org/rockbox/RockboxService.java
+++ b/android/src/org/rockbox/RockboxService.java
@@ -31,6 +31,7 @@ import java.util.TimerTask;
31import java.util.zip.ZipEntry; 31import java.util.zip.ZipEntry;
32import java.util.zip.ZipFile; 32import java.util.zip.ZipFile;
33 33
34import org.rockbox.Helper.MediaButtonReceiver;
34import org.rockbox.Helper.RunForegroundManager; 35import org.rockbox.Helper.RunForegroundManager;
35 36
36import android.app.Activity; 37import android.app.Activity;
@@ -59,20 +60,21 @@ public class RockboxService extends Service
59 60
60 /* locals needed for the c code and rockbox state */ 61 /* locals needed for the c code and rockbox state */
61 private RockboxFramebuffer fb = null; 62 private RockboxFramebuffer fb = null;
62 private boolean mRockboxRunning = false; 63 private volatile boolean rockbox_running;
63 private volatile boolean rbLibLoaded;
64 private Activity current_activity = null; 64 private Activity current_activity = null;
65 private IntentFilter itf; 65 private IntentFilter itf;
66 private BroadcastReceiver batt_monitor; 66 private BroadcastReceiver batt_monitor;
67 private RunForegroundManager fg_runner; 67 private RunForegroundManager fg_runner;
68 private MediaButtonReceiver mMediaButtonReceiver;
68 @SuppressWarnings("unused") 69 @SuppressWarnings("unused")
69 private int battery_level; 70 private int battery_level;
70 private ResultReceiver resultReceiver; 71 private ResultReceiver resultReceiver;
71 72
72 public static final int RESULT_LIB_LOADED = 0; 73 public static final int RESULT_INVOKING_MAIN = 0;
73 public static final int RESULT_LIB_LOAD_PROGRESS = 1; 74 public static final int RESULT_LIB_LOAD_PROGRESS = 1;
74 public static final int RESULT_FB_INITIALIZED = 2; 75 public static final int RESULT_FB_INITIALIZED = 2;
75 public static final int RESULT_ERROR_OCCURED = 3; 76 public static final int RESULT_SERVICE_RUNNING = 3;
77 public static final int RESULT_ERROR_OCCURED = 4;
76 78
77 @Override 79 @Override
78 public void onCreate() 80 public void onCreate()
@@ -89,14 +91,6 @@ public class RockboxService extends Service
89 { 91 {
90 return fb; 92 return fb;
91 } 93 }
92 /* framebuffer is initialised by the native code(!) so this is needed */
93 public void set_fb(RockboxFramebuffer newfb)
94 {
95 fb = newfb;
96 mRockboxRunning = true;
97 if (resultReceiver != null)
98 resultReceiver.send(RESULT_FB_INITIALIZED, null);
99 }
100 94
101 public Activity get_activity() 95 public Activity get_activity()
102 { 96 {
@@ -113,7 +107,7 @@ public class RockboxService extends Service
113 107
114 if (intent != null && intent.hasExtra("callback")) 108 if (intent != null && intent.hasExtra("callback"))
115 resultReceiver = (ResultReceiver) intent.getParcelableExtra("callback"); 109 resultReceiver = (ResultReceiver) intent.getParcelableExtra("callback");
116 if (!rbLibLoaded) 110 if (!rockbox_running)
117 startservice(); 111 startservice();
118 112
119 if (intent != null && intent.getAction() != null) 113 if (intent != null && intent.getAction() != null)
@@ -151,6 +145,8 @@ public class RockboxService extends Service
151 e.printStackTrace(); 145 e.printStackTrace();
152 } 146 }
153 } 147 }
148 if (resultReceiver != null)
149 resultReceiver.send(RESULT_SERVICE_RUNNING, null);
154 } 150 }
155 151
156 private void LOG(CharSequence text) 152 private void LOG(CharSequence text)
@@ -176,6 +172,11 @@ public class RockboxService extends Service
176 private void startservice() 172 private void startservice()
177 { 173 {
178 final int BUFFER = 8*1024; 174 final int BUFFER = 8*1024;
175 fb = new RockboxFramebuffer(this);
176 if (resultReceiver != null)
177 resultReceiver.send(RESULT_FB_INITIALIZED, null);
178 mMediaButtonReceiver = new MediaButtonReceiver(this);
179 mMediaButtonReceiver.register();
179 Thread rb = new Thread(new Runnable() 180 Thread rb = new Thread(new Runnable()
180 { 181 {
181 public void run() 182 public void run()
@@ -247,10 +248,11 @@ public class RockboxService extends Service
247 } 248 }
248 } 249 }
249 250
250 System.loadLibrary("rockbox"); 251 System.loadLibrary("rockbox");
251 rbLibLoaded = true; 252
253 rockbox_running = true;
252 if (resultReceiver != null) 254 if (resultReceiver != null)
253 resultReceiver.send(RESULT_LIB_LOADED, null); 255 resultReceiver.send(RESULT_INVOKING_MAIN, null);
254 256
255 main(); 257 main();
256 throw new IllegalStateException("native main() returned!"); 258 throw new IllegalStateException("native main() returned!");
@@ -259,15 +261,8 @@ public class RockboxService extends Service
259 rb.setDaemon(false); 261 rb.setDaemon(false);
260 rb.start(); 262 rb.start();
261 } 263 }
264
262 private native void main(); 265 private native void main();
263
264 /* returns true once rockbox is up and running.
265 * This is considered done once the framebuffer is initialised
266 */
267 public boolean isRockboxRunning()
268 {
269 return mRockboxRunning;
270 }
271 266
272 @Override 267 @Override
273 public IBinder onBind(Intent intent) 268 public IBinder onBind(Intent intent)
@@ -329,7 +324,7 @@ public class RockboxService extends Service
329 public void onDestroy() 324 public void onDestroy()
330 { 325 {
331 super.onDestroy(); 326 super.onDestroy();
332 fb.destroy(); 327 mMediaButtonReceiver.unregister();
333 /* Make sure our notification is gone. */ 328 /* Make sure our notification is gone. */
334 stopForeground(); 329 stopForeground();
335 } 330 }