summaryrefslogtreecommitdiffstats
path: root/android/src
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2011-07-18 21:02:47 +0000
committerThomas Martitz <kugel@rockbox.org>2011-07-18 21:02:47 +0000
commit33de9cdaefd8684e3411486612e68c0c2bd6be3d (patch)
treef1219711bfc0c1333ad8ec611a45f7ab0c416216 /android/src
parent788e246c996c9ac6e8efae87d13b14af001fd354 (diff)
downloadrockbox-33de9cdaefd8684e3411486612e68c0c2bd6be3d.tar.gz
rockbox-33de9cdaefd8684e3411486612e68c0c2bd6be3d.tar.bz2
rockbox-33de9cdaefd8684e3411486612e68c0c2bd6be3d.zip
Android: Refactor some of the glue code.
* Cleanup RockboxService.java by moving the battery and headphone monitors to separate classes and detaching their instances * Move those monitors and RockboxTelephony.java into a new monitors subdirectory * Call those monitors all the same from native code by creating the objects there git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30160 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'android/src')
-rw-r--r--android/src/org/rockbox/RockboxService.java81
-rw-r--r--android/src/org/rockbox/monitors/BatteryMonitor.java74
-rw-r--r--android/src/org/rockbox/monitors/HeadphoneMonitor.java60
-rw-r--r--android/src/org/rockbox/monitors/TelephonyMonitor.java (renamed from android/src/org/rockbox/RockboxTelephony.java)6
4 files changed, 137 insertions, 84 deletions
diff --git a/android/src/org/rockbox/RockboxService.java b/android/src/org/rockbox/RockboxService.java
index 49abb52dd5..20b8d0c806 100644
--- a/android/src/org/rockbox/RockboxService.java
+++ b/android/src/org/rockbox/RockboxService.java
@@ -27,20 +27,13 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Enumeration;
-import java.util.Timer;
-import java.util.TimerTask;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
-
import org.rockbox.Helper.MediaButtonReceiver;
import org.rockbox.Helper.RunForegroundManager;
-
import android.app.Activity;
import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
@@ -63,17 +56,9 @@ public class RockboxService extends Service
/* locals needed for the c code and rockbox state */
private static volatile boolean rockbox_running;
private Activity current_activity = null;
- private IntentFilter itf;
- private IntentFilter ifh;
- private BroadcastReceiver batt_monitor;
- private BroadcastReceiver headphone_monitor;
- private BroadcastReceiver noisy_monitor;
private RunForegroundManager fg_runner;
private MediaButtonReceiver mMediaButtonReceiver;
- private int battery_level;
- private int headphone_state;
private ResultReceiver resultReceiver;
- private RockboxService rbservice;
public static final int RESULT_INVOKING_MAIN = 0;
public static final int RESULT_LIB_LOAD_PROGRESS = 1;
@@ -314,72 +299,6 @@ public class RockboxService extends Service
return null;
}
-
- private void initBatteryMonitor()
- {
- itf = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
- batt_monitor = new BroadcastReceiver()
- {
- @Override
- public void onReceive(Context context, Intent intent)
- {
- /* we get literally spammed with battery statuses
- * if we don't delay the re-attaching
- */
- TimerTask tk = new TimerTask()
- {
- public void run()
- {
- registerReceiver(batt_monitor, itf);
- }
- };
- Timer t = new Timer();
- context.unregisterReceiver(this);
- int rawlevel = intent.getIntExtra("level", -1);
- int scale = intent.getIntExtra("scale", -1);
- if (rawlevel >= 0 && scale > 0)
- battery_level = (rawlevel * 100) / scale;
- else
- battery_level = -1;
- /* query every 30s should be sufficient */
- t.schedule(tk, 30000);
- }
- };
- registerReceiver(batt_monitor, itf);
- }
-
-
- private void initHeadphoneMonitor()
- {
- ifh = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
- headphone_monitor = new BroadcastReceiver()
- {
- @Override
- public void onReceive(Context context, Intent intent)
- {
- int state = intent.getIntExtra("state", -1);
- LOG("headphone state:" + state);
- headphone_state = state;
- }
- };
- registerReceiver(headphone_monitor, ifh);
- noisy_monitor = new BroadcastReceiver()
- {
- @Override
- public void onReceive(Context context, Intent intent)
- {
- LOG("audio becoming noisy");
- headphone_state = 0;
- }
- };
- rbservice = RockboxService.get_instance();
- /* We're relying on internal API's here,
- this can break in the future! */
- rbservice.registerReceiver(noisy_monitor,
- new IntentFilter("android.media.AUDIO_BECOMING_NOISY"));
- }
-
-
void startForeground()
{
fg_runner.startForeground();
diff --git a/android/src/org/rockbox/monitors/BatteryMonitor.java b/android/src/org/rockbox/monitors/BatteryMonitor.java
new file mode 100644
index 0000000000..0896a58242
--- /dev/null
+++ b/android/src/org/rockbox/monitors/BatteryMonitor.java
@@ -0,0 +1,74 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2011 Thomas Martitz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+package org.rockbox.monitors;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+public class BatteryMonitor extends BroadcastReceiver
+{
+ private final IntentFilter mBattFilter;
+ private final Context mContext;
+ @SuppressWarnings("unused")
+ private int mBattLevel; /* read by native code */
+
+ /*
+ * We get literally spammed with battery status updates
+ * Therefore we actually unregister after each onReceive() and
+ * setup a timer to re-register in 30s */
+ public BatteryMonitor(Context c)
+ {
+ mBattFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ mContext = c;
+ Timer t = new Timer();
+ TimerTask task = new TimerTask()
+ {
+ public void run()
+ {
+ attach();
+ }
+ };
+ t.schedule(task, 5000, 30000);
+ attach();
+ }
+
+ @Override
+ public void onReceive(Context arg0, Intent intent)
+ {
+ int rawlevel = intent.getIntExtra("level", -1);
+ int scale = intent.getIntExtra("scale", -1);
+ if (rawlevel >= 0 && scale > 0)
+ mBattLevel = (rawlevel * 100) / scale;
+ else
+ mBattLevel = -1;
+ mContext.unregisterReceiver(this);
+ }
+
+ void attach()
+ {
+ mContext.registerReceiver(this, mBattFilter);
+ }
+}
diff --git a/android/src/org/rockbox/monitors/HeadphoneMonitor.java b/android/src/org/rockbox/monitors/HeadphoneMonitor.java
new file mode 100644
index 0000000000..99d2f7ab8a
--- /dev/null
+++ b/android/src/org/rockbox/monitors/HeadphoneMonitor.java
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2011 Thomas Martitz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+package org.rockbox.monitors;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+public class HeadphoneMonitor extends BroadcastReceiver
+{
+ @SuppressWarnings("unused")
+ private int mHpState; /* read by native code */
+
+ public HeadphoneMonitor(Context c)
+ {
+ IntentFilter hpFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
+ /* caution: hidden API; might break */
+ IntentFilter noisyFilter = new IntentFilter("android.media.AUDIO_BECOMING_NOISY");
+
+ c.registerReceiver(this, hpFilter);
+ c.registerReceiver(new NoisyMonitor(), noisyFilter);
+ }
+
+ @Override
+ public void onReceive(Context arg0, Intent intent)
+ {
+ int state = intent.getIntExtra("state", -1);
+ mHpState = state;
+ }
+
+ /* audio becoming noise acts as headphones extracted */
+ private class NoisyMonitor extends BroadcastReceiver
+ {
+ @Override
+ public void onReceive(Context arg0, Intent arg1)
+ {
+ mHpState = 0;
+ }
+ }
+}
diff --git a/android/src/org/rockbox/RockboxTelephony.java b/android/src/org/rockbox/monitors/TelephonyMonitor.java
index faaf0c36b7..6881f243af 100644
--- a/android/src/org/rockbox/RockboxTelephony.java
+++ b/android/src/org/rockbox/monitors/TelephonyMonitor.java
@@ -19,16 +19,16 @@
*
****************************************************************************/
-package org.rockbox;
+package org.rockbox.monitors;
import android.content.Context;
import android.os.Handler;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
-public class RockboxTelephony
+public class TelephonyMonitor
{
- public RockboxTelephony(Context c)
+ public TelephonyMonitor(Context c)
{
final Handler handler = new Handler(c.getMainLooper());
final TelephonyManager tm = (TelephonyManager)