From fc24ce18e1b6c3f14486ebbd24ae463017b55014 Mon Sep 17 00:00:00 2001 From: Felix Bechstein Date: Sun, 17 Jan 2010 15:39:09 +0100 Subject: [PATCH] service working. need foreground. sms broken. --- AndroidManifest.xml | 4 ++ src/de/ub0r/android/andGMXsms/WebSMS.java | 6 +++ src/de/ub0r/android/andGMXsms/WebSMSReceiver.java | 15 ++++-- .../websms/connector/common/CommandReceiver.java | 14 +++--- .../websms/connector/common/ConnectorService.java | 1 + .../websms/connector/common/ConnectorSpec.java | 42 +++++++++++++++++ .../websms/connector/common/ConnectorTask.java | 2 +- .../websms/connector/gmx/CommandReceiverGMX.java | 55 +++++++++------------- .../websms/connector/sms/CommandReceiverSMS.java | 1 + 9 files changed, 97 insertions(+), 43 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a2d71e3..039c604 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -60,6 +60,10 @@ + + + diff --git a/src/de/ub0r/android/andGMXsms/WebSMS.java b/src/de/ub0r/android/andGMXsms/WebSMS.java index 6dd6622..5b94377 100644 --- a/src/de/ub0r/android/andGMXsms/WebSMS.java +++ b/src/de/ub0r/android/andGMXsms/WebSMS.java @@ -1182,6 +1182,9 @@ public class WebSMS extends Activity implements OnClickListener, */ public static final ConnectorSpec getConnectorByID(final String id) { synchronized (CONNECTORS) { + if (id == null) { + return null; + } final int l = CONNECTORS.size(); for (int i = 0; i < l; i++) { final ConnectorSpec c = CONNECTORS.get(i); @@ -1202,6 +1205,9 @@ public class WebSMS extends Activity implements OnClickListener, */ public static final ConnectorSpec getConnectorByName(final String name) { synchronized (CONNECTORS) { + if (name == null) { + return null; + } final int l = CONNECTORS.size(); for (int i = 0; i < l; i++) { final ConnectorSpec c = CONNECTORS.get(i); diff --git a/src/de/ub0r/android/andGMXsms/WebSMSReceiver.java b/src/de/ub0r/android/andGMXsms/WebSMSReceiver.java index a6d2027..f86afdc 100644 --- a/src/de/ub0r/android/andGMXsms/WebSMSReceiver.java +++ b/src/de/ub0r/android/andGMXsms/WebSMSReceiver.java @@ -78,10 +78,19 @@ public final class WebSMSReceiver extends BroadcastReceiver { if (CommandReceiver.ACTION_INFO.equals(action)) { final ConnectorSpec specs = new ConnectorSpec(intent); final ConnectorCommand command = new ConnectorCommand(intent); - WebSMS.addConnector(specs); + if (specs == null) { + return; + } + try { + WebSMS.addConnector(specs); + } catch (Exception e) { + Log.e(TAG, "error while receiving broadcast", e); + } // save send messages - if (command != null - && command.getType() == ConnectorCommand.TYPE_SEND) { + if (command == null) { + return; + } + if (command.getType() == ConnectorCommand.TYPE_SEND) { if (!specs.hasStatus(ConnectorSpec.STATUS_ERROR)) { this.saveMessage(context, command); } else { diff --git a/src/de/ub0r/android/websms/connector/common/CommandReceiver.java b/src/de/ub0r/android/websms/connector/common/CommandReceiver.java index a8c5a60..e281b01 100644 --- a/src/de/ub0r/android/websms/connector/common/CommandReceiver.java +++ b/src/de/ub0r/android/websms/connector/common/CommandReceiver.java @@ -163,13 +163,11 @@ public abstract class CommandReceiver extends BroadcastReceiver { if (c == null) { c = this.getSpecs(context); } - final Intent i = new Intent(CommandReceiver.ACTION_INFO); - c.setToIntent(i); + final Intent i = c.setToIntent(null); if (command != null) { command.setToIntent(i); } - Log.d("WebSMS." + this.getSpecs(context), "-> broadcast: " - + i.getAction()); + Log.d("WebSMS." + this.getSpecs(context), "-> bc: " + i.getAction()); context.sendBroadcast(i); } @@ -183,7 +181,7 @@ public abstract class CommandReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { final String action = intent.getAction(); - Log.d(TAG, "action: " + action); + Log.d("WebSMS." + this.getSpecs(context), "action: " + action); if (action == null) { return; } @@ -203,7 +201,11 @@ public abstract class CommandReceiver extends BroadcastReceiver { // command type is set. // if command == send: this receiver is the wanted one. registerInstance(this); // this instance will be run by service - context.startService(intent); // start service + final Intent i = new Intent(context, ConnectorService.class); + i.setAction(intent.getAction()); + command.setToIntent(i); + origSpecs.setToIntent(i); + context.startService(i); // start service } } } diff --git a/src/de/ub0r/android/websms/connector/common/ConnectorService.java b/src/de/ub0r/android/websms/connector/common/ConnectorService.java index e8bff4c..50ae473 100644 --- a/src/de/ub0r/android/websms/connector/common/ConnectorService.java +++ b/src/de/ub0r/android/websms/connector/common/ConnectorService.java @@ -94,6 +94,7 @@ public final class ConnectorService extends Service { public void onStart(final Intent intent, final int startId) { if (intent != null) { final String a = intent.getAction(); + Log.d("WebSMS.service", "action: " + a); if (a != null && // . (a.equals(CommandReceiver.ACTION_RUN_BOOSTRAP) || a.equals(CommandReceiver.ACTION_RUN_UPDATE) || a diff --git a/src/de/ub0r/android/websms/connector/common/ConnectorSpec.java b/src/de/ub0r/android/websms/connector/common/ConnectorSpec.java index 1191036..fbec735 100644 --- a/src/de/ub0r/android/websms/connector/common/ConnectorSpec.java +++ b/src/de/ub0r/android/websms/connector/common/ConnectorSpec.java @@ -278,6 +278,9 @@ public final class ConnectorSpec { * @return ID */ public String getID() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(ID); } @@ -285,6 +288,9 @@ public final class ConnectorSpec { * @return Name */ public String getName() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(NAME); } @@ -302,6 +308,9 @@ public final class ConnectorSpec { * @return status */ public short getStatus() { + if (this.bundle == null) { + return STATUS_INACTIVE; + } return this.bundle.getShort(STATUS, STATUS_INACTIVE); } @@ -348,6 +357,9 @@ public final class ConnectorSpec { * @return true if connector has given status */ public boolean hasStatus(final short status) { + if (this.bundle == null) { + return false; + } final short s = this.bundle.getShort(STATUS, STATUS_INACTIVE); return (s & status) == status; } @@ -356,6 +368,9 @@ public final class ConnectorSpec { * @return author */ public String getAuthor() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(AUTHOR); } @@ -373,6 +388,9 @@ public final class ConnectorSpec { * @return prefs intent uri */ public String getPrefsIntent() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(PREFSINTENT); } @@ -390,6 +408,9 @@ public final class ConnectorSpec { * @return prefs title */ public String getPrefsTitle() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(PREFSTITLE); } @@ -407,6 +428,9 @@ public final class ConnectorSpec { * @return balance */ public String getBalance() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(BALANCE); } @@ -424,6 +448,9 @@ public final class ConnectorSpec { * @return capabilities */ public short getCapabilities() { + if (this.bundle == null) { + return CAPABILITIES_NONE; + } return this.bundle.getShort(CAPABILITIES, CAPABILITIES_NONE); } @@ -453,6 +480,9 @@ public final class ConnectorSpec { * @return true if connector has given capabilities */ public boolean hasCapabilities(final short capabilities) { + if (this.bundle == null) { + return false; + } final short c = this.bundle.getShort(CAPABILITIES, CAPABILITIES_NONE); return (c & capabilities) == capabilities; } @@ -463,6 +493,9 @@ public final class ConnectorSpec { * @return error message */ public String getErrorMessage() { + if (this.bundle == null) { + return null; + } return this.bundle.getString(ERRORMESSAGE); } @@ -483,6 +516,9 @@ public final class ConnectorSpec { * @return all SubConnectors */ public SubConnectorSpec[] getSubConnectors() { + if (this.bundle == null) { + return null; + } final int c = this.bundle.getInt(SUB_COUNT, 0); final SubConnectorSpec[] ret = new SubConnectorSpec[c]; for (int i = 0; i < c; i++) { @@ -500,6 +536,9 @@ public final class ConnectorSpec { * @return SubConnector */ public SubConnectorSpec getSubConnector(final String id) { + if (this.bundle == null) { + return null; + } final int c = this.bundle.getInt(SUB_COUNT, 0); for (int i = 0; i < c; i++) { final SubConnectorSpec sc = new SubConnectorSpec(this.bundle @@ -523,6 +562,9 @@ public final class ConnectorSpec { */ public void addSubConnector(final String id, final String name, final short features) { + if (this.bundle == null) { + return; + } final int c = this.bundle.getInt(SUB_COUNT, 0); this.bundle.putBundle(SUB_PREFIX + c, new SubConnectorSpec(id, name, features).getBundle()); diff --git a/src/de/ub0r/android/websms/connector/common/ConnectorTask.java b/src/de/ub0r/android/websms/connector/common/ConnectorTask.java index d99a03b..421b658 100644 --- a/src/de/ub0r/android/websms/connector/common/ConnectorTask.java +++ b/src/de/ub0r/android/websms/connector/common/ConnectorTask.java @@ -71,7 +71,7 @@ public final class ConnectorTask extends AsyncTask { this.receiver.doBootstrap(this.intent); break; case ConnectorCommand.TYPE_UPDATE: - this.receiver.doSend(this.intent); + this.receiver.doUpdate(this.intent); break; case ConnectorCommand.TYPE_SEND: this.receiver.doSend(this.intent); diff --git a/src/de/ub0r/android/websms/connector/gmx/CommandReceiverGMX.java b/src/de/ub0r/android/websms/connector/gmx/CommandReceiverGMX.java index f35e510..0e6d164 100644 --- a/src/de/ub0r/android/websms/connector/gmx/CommandReceiverGMX.java +++ b/src/de/ub0r/android/websms/connector/gmx/CommandReceiverGMX.java @@ -23,10 +23,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; -import android.widget.Toast; import de.ub0r.android.andGMXsms.R; import de.ub0r.android.websms.connector.common.CommandReceiver; -import de.ub0r.android.websms.connector.common.ConnectorCommand; import de.ub0r.android.websms.connector.common.ConnectorSpec; import de.ub0r.android.websms.connector.common.WebSMSException; import de.ub0r.android.websms.connector.common.ConnectorSpec.SubConnectorSpec; @@ -92,36 +90,27 @@ public class CommandReceiverGMX extends CommandReceiver { * {@inheritDoc} */ @Override - public final void onReceive(final Context context, final Intent intent) { - final String action = intent.getAction(); - Log.d(TAG, "action: " + action); - if (action == null) { - return; - } - if (ACTION_CONNECTOR_UPDATE.equals(action)) { - this.sendInfo(context, null, null); - } else if (ACTION_RUN_SEND.equals(action)) { - final ConnectorCommand command = new ConnectorCommand(intent); - if (command.getType() == ConnectorCommand.TYPE_SEND) { - final ConnectorSpec origSpecs = new ConnectorSpec(intent); - final ConnectorSpec specs = this.getSpecs(context); - if (specs.getID().equals(origSpecs.getID()) - && specs.hasStatus(ConnectorSpec.STATUS_READY)) { - // check internal status - try { - // FIXME: this.send(command); - throw new WebSMSException("fixme"); - } catch (WebSMSException e) { - Log.e(TAG, null, e); - Toast.makeText(context, - specs.getName() + ": " + e.getMessage(), - Toast.LENGTH_LONG).show(); - specs.setErrorMessage(e.getMessage()); - this.sendInfo(context, specs, command); - } - // if nothing went wrong, info was send from inside. - } - } - } + protected final void doBootstrap(final Intent intent) + throws WebSMSException { + // do nothing by default + Log.d(TAG, "bootstrap"); + } + + /** + * {@inheritDoc} + */ + @Override + protected final void doUpdate(final Intent intent) throws WebSMSException { + // do nothing by default + Log.d(TAG, "update"); + } + + /** + * {@inheritDoc} + */ + @Override + protected final void doSend(final Intent intent) throws WebSMSException { + // do nothing by default + Log.d(TAG, "send"); } } diff --git a/src/de/ub0r/android/websms/connector/sms/CommandReceiverSMS.java b/src/de/ub0r/android/websms/connector/sms/CommandReceiverSMS.java index 3e27729..25442d1 100644 --- a/src/de/ub0r/android/websms/connector/sms/CommandReceiverSMS.java +++ b/src/de/ub0r/android/websms/connector/sms/CommandReceiverSMS.java @@ -116,6 +116,7 @@ public class CommandReceiverSMS extends CommandReceiver { return; } if (ACTION_CONNECTOR_UPDATE.equals(action)) { + // FIXME: somthing goes wrong here this.sendInfo(context, null, null); } else if (ACTION_RUN_SEND.equals(action)) { final ConnectorCommand command = new ConnectorCommand(intent); -- 2.11.4.GIT