From 693fd4536115f43df985390f318c11f30e302f14 Mon Sep 17 00:00:00 2001 From: Georg Lukas Date: Fri, 20 Mar 2015 16:24:44 +0100 Subject: [PATCH] API: implement MESSAGE / MESSAGETX events --- src/AprsService.scala | 8 ++++++++ src/MessageActivity.scala | 8 ++++---- src/MessageService.scala | 13 +++++++++---- src/UIHelper.scala | 10 +++++++++- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/AprsService.scala b/src/AprsService.scala index 507ed27..b5741a4 100644 --- a/src/AprsService.scala +++ b/src/AprsService.scala @@ -37,10 +37,18 @@ object AprsService { val LOCATION = "location" // Location object val SOURCE = "source" // sender callsign val PACKET = "packet" // raw packet content + // MESSAGE + // +- SOURCE + val DEST = "dest" // destination callsign + val BODY = "body" // body of the message // APRSdroid API version val API_VERSION_CODE = 1 + // private intents for message handling + lazy val MSG_PRIV_INTENT = new Intent(MESSAGE).setPackage("org.aprsdroid.app") + lazy val MSG_TX_PRIV_INTENT = new Intent(MESSAGETX).setPackage("org.aprsdroid.app") + def intent(ctx : Context, action : String) : Intent = { new Intent(action, null, ctx, classOf[AprsService]) } diff --git a/src/MessageActivity.scala b/src/MessageActivity.scala index 74dc0c6..fe1e119 100644 --- a/src/MessageActivity.scala +++ b/src/MessageActivity.scala @@ -79,7 +79,7 @@ class MessageActivity extends StationHelper(R.string.app_messages) case R.id.abort => if (msg_type == TYPE_OUT_NEW) { storage.updateMessageType(msg_id, TYPE_OUT_ABORTED) - sendBroadcast(new Intent(AprsService.MESSAGE)) + sendBroadcast(AprsService.MSG_PRIV_INTENT) } true case R.id.resend => @@ -89,7 +89,7 @@ class MessageActivity extends StationHelper(R.string.app_messages) cv.put(RETRYCNT, 0.asInstanceOf[java.lang.Integer]) cv.put(TS, System.currentTimeMillis.asInstanceOf[java.lang.Long]) storage.updateMessage(msg_id, cv) - sendBroadcast(new Intent(AprsService.MESSAGETX)) + sendBroadcast(AprsService.MSG_TX_PRIV_INTENT) } true case _ => false @@ -150,9 +150,9 @@ class MessageActivity extends StationHelper(R.string.app_messages) cv.put(TEXT, msg) storage.addMessage(cv) // notify backend - sendBroadcast(new Intent(AprsService.MESSAGETX)) + sendMessageBroadcast(targetcall, msg) // notify UI about new message - sendBroadcast(new Intent(AprsService.MESSAGE)) + sendBroadcast(AprsService.MSG_PRIV_INTENT) // if not connected, notify user about postponed message if (!AprsService.running) Toast.makeText(this, R.string.msg_stored_offline, Toast.LENGTH_SHORT).show() diff --git a/src/MessageService.scala b/src/MessageService.scala index 3dce74b..3f0859a 100644 --- a/src/MessageService.scala +++ b/src/MessageService.scala @@ -22,6 +22,12 @@ class MessageService(s : AprsService) { val is_new = s.db.addMessage(ts, srccall, msg) if (is_new) ServiceNotifier.instance.notifyMessage(s, s.prefs, srccall, msg.getMessageBody()) + + s.sendBroadcast(new Intent(AprsService.MESSAGE) + .putExtra(AprsService.SOURCE, srccall) + .putExtra(AprsService.DEST, msg.getTargetCallsign()) + .putExtra(AprsService.BODY, msg.getMessageBody()) + ) } def handleMessage(ts : Long, ap : APRSPacket, msg : MessagePacket) { @@ -33,6 +39,7 @@ class MessageService(s : AprsService) { else StorageDatabase.Message.TYPE_OUT_REJECTED s.db.updateMessageAcked(ap.getSourceCall(), msg.getMessageNumber(), new_type) + s.sendBroadcast(AprsService.MSG_PRIV_INTENT) } else { storeNotifyMessage(ts, ap.getSourceCall(), msg) if (msg.getMessageNumber() != "") { @@ -41,13 +48,11 @@ class MessageService(s : AprsService) { s.sendPacket(ack) } } - s.sendBroadcast(new Intent(AprsService.MESSAGE).putExtra(AprsService.STATUS, ap.toString)) } else if (msg.getTargetCallsign().split("-")(0).equalsIgnoreCase( s.prefs.getCallsign()) && !msg.isAck() && !msg.isRej()) { // incoming message for a different ssid of our callsign Log.d(TAG, "incoming message for " + msg.getTargetCallsign()) storeNotifyMessage(ts, ap.getSourceCall(), msg) - s.sendBroadcast(new Intent(AprsService.MESSAGE).putExtra(AprsService.STATUS, ap.toString)) } } @@ -89,7 +94,7 @@ class MessageService(s : AprsService) { if (retrycnt == NUM_OF_RETRIES && t_send <= 0) { // this message timed out s.db.updateMessageType(c.getLong(/* COLUMN_ID */ 0), TYPE_OUT_ABORTED) - s.sendBroadcast(new Intent(AprsService.MESSAGE)) + s.sendBroadcast(AprsService.MSG_PRIV_INTENT) } else if (retrycnt < NUM_OF_RETRIES && t_send <= 0) { // this message needs to be transmitted val msg = s.newPacket(new MessagePacket(call, text, msgid)) @@ -99,7 +104,7 @@ class MessageService(s : AprsService) { cv.put(TS, System.currentTimeMillis.asInstanceOf[java.lang.Long]) // XXX: do not ack until acked s.db.updateMessage(c.getLong(/* COLUMN_ID */ 0), cv) - s.sendBroadcast(new Intent(AprsService.MESSAGE).putExtra(AprsService.STATUS, msg.toString)) + s.sendBroadcast(AprsService.MSG_PRIV_INTENT) // schedule potential re-transmission next_run = math.min(next_run, getRetryDelayMS(retrycnt + 1)) } else if (retrycnt < NUM_OF_RETRIES) { diff --git a/src/UIHelper.scala b/src/UIHelper.scala index fa538a6..a40f2b1 100644 --- a/src/UIHelper.scala +++ b/src/UIHelper.scala @@ -213,6 +213,14 @@ trait UIHelper extends Activity .create.show } + def sendMessageBroadcast(dest : String, body : String) { + sendBroadcast(new Intent(AprsService.MESSAGETX) + .putExtra(AprsService.SOURCE, prefs.getCallSsid()) + .putExtra(AprsService.DEST, dest) + .putExtra(AprsService.BODY, body) + ) + } + abstract override def onCreateOptionsMenu(menu : Menu) : Boolean = { getMenuInflater().inflate(R.menu.options_activities, menu); getMenuInflater().inflate(R.menu.options_map, menu); @@ -359,7 +367,7 @@ trait UIHelper extends Activity } override def onPostExecute(x : Unit) { Log.d("MessageCleaner", "broadcasting...") - sendBroadcast(new Intent(AprsService.MESSAGE)) + sendBroadcast(AprsService.MSG_PRIV_INTENT) } } }