diff options
Diffstat (limited to 'android/src/org/rockbox/RockboxService.java')
-rw-r--r-- | android/src/org/rockbox/RockboxService.java | 45 |
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; | |||
31 | import java.util.zip.ZipEntry; | 31 | import java.util.zip.ZipEntry; |
32 | import java.util.zip.ZipFile; | 32 | import java.util.zip.ZipFile; |
33 | 33 | ||
34 | import org.rockbox.Helper.MediaButtonReceiver; | ||
34 | import org.rockbox.Helper.RunForegroundManager; | 35 | import org.rockbox.Helper.RunForegroundManager; |
35 | 36 | ||
36 | import android.app.Activity; | 37 | import 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 | } |