kopia lustrzana https://github.com/ge0rg/aprsdroid
API: implement MESSAGE / MESSAGETX events
rodzic
4b8a845410
commit
693fd45361
|
@ -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])
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue