- Go to chat activity instead of main activity when message notification

is clicked.
This commit is contained in:
Juha Heinanen
2019-03-22 14:37:23 +02:00
parent 532bc23ebd
commit 757f640b2d
3 changed files with 79 additions and 59 deletions
@@ -18,6 +18,7 @@ import android.widget.RemoteViews
import android.support.v4.content.LocalBroadcastManager import android.support.v4.content.LocalBroadcastManager
import android.os.Build import android.os.Build
import android.support.v4.app.NotificationCompat.VISIBILITY_PRIVATE import android.support.v4.app.NotificationCompat.VISIBILITY_PRIVATE
import android.support.v4.content.ContextCompat
import java.io.File import java.io.File
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
@@ -32,7 +33,6 @@ class BaresipService: Service() {
internal lateinit var rt: Ringtone internal lateinit var rt: Ringtone
internal lateinit var nm: NotificationManager internal lateinit var nm: NotificationManager
internal lateinit var snb: NotificationCompat.Builder internal lateinit var snb: NotificationCompat.Builder
internal lateinit var npi: PendingIntent
internal lateinit var nr: BroadcastReceiver internal lateinit var nr: BroadcastReceiver
internal lateinit var wl: PowerManager.WakeLock internal lateinit var wl: PowerManager.WakeLock
internal lateinit var fl: WifiManager.WifiLock internal lateinit var fl: WifiManager.WifiLock
@@ -60,11 +60,6 @@ class BaresipService: Service() {
createNotificationChannels() createNotificationChannels()
snb = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID) snb = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID)
val ni = Intent(this, MainActivity::class.java)
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
npi = PendingIntent.getActivity(this, 0, ni, 0)
nr = object : BroadcastReceiver() { nr = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) { if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
@@ -205,31 +200,6 @@ class BaresipService: Service() {
sendBroadcast(broadcastIntent) sendBroadcast(broadcastIntent)
} }
private fun createNotificationChannels() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val defaultChannel = NotificationChannel(DEFAULT_CHANNEL_ID, "Default",
NotificationManager.IMPORTANCE_LOW)
defaultChannel.description = "Tells that baresip is running"
defaultChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
nm.createNotificationChannel(defaultChannel)
val highChannel = NotificationChannel(HIGH_CHANNEL_ID, "High",
NotificationManager.IMPORTANCE_HIGH)
highChannel.description = "Tells about incoming call or message"
highChannel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
highChannel.enableVibration(true)
nm.createNotificationChannel(highChannel)
}
}
private fun showStatusNotification() {
snb.setVisibility(VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat)
.setContentIntent(npi)
.setOngoing(true)
.setContent(RemoteViews(packageName, R.layout.status_notification))
startForeground(STATUS_NOTIFICATION_ID, snb.build())
}
@Keep @Keep
fun uaAdd(uap: String) { fun uaAdd(uap: String) {
Log.d(LOG_TAG, "uaAdd at BaresipService") Log.d(LOG_TAG, "uaAdd at BaresipService")
@@ -298,17 +268,23 @@ class BaresipService: Service() {
startRinging() startRinging()
} }
if ((newEvent == null) && !Utils.isVisible()) { if ((newEvent == null) && !Utils.isVisible()) {
val cnb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID) val intent = Intent(this, MainActivity::class.java)
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
val pi = PendingIntent.getActivity(this,
System.currentTimeMillis().toInt(), intent, 0)
val nb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID)
val caller = Utils.friendlyUri(ContactsActivity.contactName(peerUri), val caller = Utils.friendlyUri(ContactsActivity.contactName(peerUri),
Utils.aorDomain(aor)) Utils.aorDomain(aor))
val title = "Incoming call from $caller" val title = "Incoming call from $caller"
cnb.setSmallIcon(R.drawable.ic_stat) nb.setSmallIcon(R.drawable.ic_stat)
.setColor(0x0ca1fd) .setColor(ContextCompat.getColor(this,
.setContentIntent(npi) R.color.colorBaresip))
.setContentIntent(pi)
.setAutoCancel(true) .setAutoCancel(true)
.setContentTitle(title) .setContentTitle(title)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
cnb.setVibrate(LongArray(0)) nb.setVibrate(LongArray(0))
.setVisibility(VISIBILITY_PRIVATE) .setVisibility(VISIBILITY_PRIVATE)
.setPriority(Notification.PRIORITY_HIGH) .setPriority(Notification.PRIORITY_HIGH)
} }
@@ -326,9 +302,9 @@ class BaresipService: Service() {
rejectIntent.putExtra("callp", callp) rejectIntent.putExtra("callp", callp)
val rejectPendingIntent = PendingIntent.getActivity(this, val rejectPendingIntent = PendingIntent.getActivity(this,
2, rejectIntent, PendingIntent.FLAG_UPDATE_CURRENT) 2, rejectIntent, PendingIntent.FLAG_UPDATE_CURRENT)
cnb.addAction(R.drawable.ic_stat, "Answer", answerPendingIntent) nb.addAction(R.drawable.ic_stat, "Answer", answerPendingIntent)
cnb.addAction(R.drawable.ic_stat, "Reject", rejectPendingIntent) nb.addAction(R.drawable.ic_stat, "Reject", rejectPendingIntent)
nm.notify(CALL_NOTIFICATION_ID, cnb.build()) nm.notify(CALL_NOTIFICATION_ID, nb.build())
} }
} }
"call established" -> { "call established" -> {
@@ -356,18 +332,24 @@ class BaresipService: Service() {
return return
} }
if (!Utils.isVisible()) { if (!Utils.isVisible()) {
val cnb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID) val intent = Intent(this, MainActivity::class.java)
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
val pi = PendingIntent.getActivity(this,
System.currentTimeMillis().toInt(), intent, 0)
val nb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID)
val target = Utils.friendlyUri(ContactsActivity.contactName(ev[1]), val target = Utils.friendlyUri(ContactsActivity.contactName(ev[1]),
Utils.aorDomain(aor)) Utils.aorDomain(aor))
val title = "Call transfer request to $target" val title = "Call transfer request to $target"
cnb.setSmallIcon(R.drawable.ic_stat) nb.setSmallIcon(R.drawable.ic_stat)
.setColor(0x0ca1fd) .setColor(ContextCompat.getColor(this,
.setContentIntent(npi) R.color.colorBaresip))
.setContentIntent(pi)
.setDefaults(Notification.DEFAULT_SOUND) .setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true) .setAutoCancel(true)
.setContentTitle(title) .setContentTitle(title)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
cnb.setVibrate(LongArray(0)) nb.setVibrate(LongArray(0))
.setVisibility(VISIBILITY_PRIVATE) .setVisibility(VISIBILITY_PRIVATE)
.setPriority(Notification.PRIORITY_HIGH) .setPriority(Notification.PRIORITY_HIGH)
} }
@@ -387,9 +369,9 @@ class BaresipService: Service() {
rejectIntent.putExtra("callp", callp) rejectIntent.putExtra("callp", callp)
val rejectPendingIntent = PendingIntent.getActivity(this, val rejectPendingIntent = PendingIntent.getActivity(this,
4, rejectIntent, PendingIntent.FLAG_UPDATE_CURRENT) 4, rejectIntent, PendingIntent.FLAG_UPDATE_CURRENT)
cnb.addAction(R.drawable.ic_stat, "Accept", acceptPendingIntent) nb.addAction(R.drawable.ic_stat, "Accept", acceptPendingIntent)
cnb.addAction(R.drawable.ic_stat, "Deny", rejectPendingIntent) nb.addAction(R.drawable.ic_stat, "Deny", rejectPendingIntent)
nm.notify(CALL_NOTIFICATION_ID, cnb.build()) nm.notify(CALL_NOTIFICATION_ID, nb.build())
return return
} }
} }
@@ -449,18 +431,26 @@ class BaresipService: Service() {
} }
val timeStamp = System.currentTimeMillis().toString() val timeStamp = System.currentTimeMillis().toString()
if (!Utils.isVisible()) { if (!Utils.isVisible()) {
val cnb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID) val intent = Intent(this, MainActivity::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP)
.putExtra("action", "show")
.putExtra("uap", uap)
.putExtra("peer", peer)
val pi = PendingIntent.getActivity(this,
System.currentTimeMillis().toInt(), intent, 0)
val nb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID)
val sender = Utils.friendlyUri(ContactsActivity.contactName(peer), val sender = Utils.friendlyUri(ContactsActivity.contactName(peer),
Utils.aorDomain(ua.account.aor)) Utils.aorDomain(ua.account.aor))
cnb.setSmallIcon(R.drawable.ic_stat) nb.setSmallIcon(R.drawable.ic_stat)
.setColor(0x0ca1fd) .setColor(ContextCompat.getColor(this, R.color.colorBaresip))
.setContentIntent(npi) .setContentIntent(pi)
.setDefaults(Notification.DEFAULT_SOUND) .setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true) .setAutoCancel(true)
.setContentTitle("Message from $sender") .setContentTitle("Message from $sender")
.setContentText(s) .setContentText(s)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
cnb.setVibrate(LongArray(0)) nb.setVibrate(LongArray(0))
.setVisibility(VISIBILITY_PRIVATE) .setVisibility(VISIBILITY_PRIVATE)
.setPriority(Notification.PRIORITY_HIGH) .setPriority(Notification.PRIORITY_HIGH)
} }
@@ -488,10 +478,10 @@ class BaresipService: Service() {
deleteIntent.putExtra("time", timeStamp) deleteIntent.putExtra("time", timeStamp)
val deletePendingIntent = PendingIntent.getActivity(this, val deletePendingIntent = PendingIntent.getActivity(this,
7, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT) 7, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT)
cnb.addAction(R.drawable.ic_stat, "Reply", replyPendingIntent) nb.addAction(R.drawable.ic_stat, "Reply", replyPendingIntent)
cnb.addAction(R.drawable.ic_stat, "Save", savePendingIntent) nb.addAction(R.drawable.ic_stat, "Save", savePendingIntent)
cnb.addAction(R.drawable.ic_stat, "Delete", deletePendingIntent) nb.addAction(R.drawable.ic_stat, "Delete", deletePendingIntent)
nm.notify(MESSAGE_NOTIFICATION_ID, cnb.build()) nm.notify(MESSAGE_NOTIFICATION_ID, nb.build())
} }
val intent = Intent("service event") val intent = Intent("service event")
intent.putExtra("event", "message") intent.putExtra("event", "message")
@@ -521,6 +511,35 @@ class BaresipService: Service() {
stopSelf() stopSelf()
} }
private fun createNotificationChannels() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val defaultChannel = NotificationChannel(DEFAULT_CHANNEL_ID, "Default",
NotificationManager.IMPORTANCE_LOW)
defaultChannel.description = "Tells that baresip is running"
defaultChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
nm.createNotificationChannel(defaultChannel)
val highChannel = NotificationChannel(HIGH_CHANNEL_ID, "High",
NotificationManager.IMPORTANCE_HIGH)
highChannel.description = "Tells about incoming call or message"
highChannel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
highChannel.enableVibration(true)
nm.createNotificationChannel(highChannel)
}
}
private fun showStatusNotification() {
val intent = Intent(this, MainActivity::class.java)
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
val pi = PendingIntent.getActivity(this, 0, intent, 0)
snb.setVisibility(VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat)
.setContentIntent(pi)
.setOngoing(true)
.setContent(RemoteViews(packageName, R.layout.status_notification))
startForeground(STATUS_NOTIFICATION_ID, snb.build())
}
private fun updateStatusNotification() { private fun updateStatusNotification() {
val contentView = RemoteViews(getPackageName(), R.layout.status_notification) val contentView = RemoteViews(getPackageName(), R.layout.status_notification)
for (i: Int in 0..5) { for (i: Int in 0..5) {
@@ -749,7 +749,7 @@ class MainActivity : AppCompatActivity() {
Api.call_notify_sipfrag(callp, 603, "Decline") Api.call_notify_sipfrag(callp, 603, "Decline")
moveTaskToBack(true) moveTaskToBack(true)
} }
"reply", "save", "delete" -> { "show", "reply", "save", "delete" -> {
val uap = intent.getStringExtra("uap") val uap = intent.getStringExtra("uap")
val ua = UserAgent.find(uap) val ua = UserAgent.find(uap)
if (ua == null) { if (ua == null) {
@@ -758,14 +758,14 @@ class MainActivity : AppCompatActivity() {
} }
val aor = ua.account.aor val aor = ua.account.aor
when (action) { when (action) {
"reply" -> { "show", "reply" -> {
val i = Intent(this@MainActivity, ChatsActivity::class.java) val i = Intent(this@MainActivity, ChatsActivity::class.java)
val b = Bundle() val b = Bundle()
if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]) if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition])
spinToAor(aor) spinToAor(aor)
b.putString("aor", aor) b.putString("aor", aor)
b.putString("peer", intent.getStringExtra("peer")) b.putString("peer", intent.getStringExtra("peer"))
b.putBoolean("focus", true) b.putBoolean("focus", action == "reply")
i.putExtras(b) i.putExtras(b)
startActivityForResult(i, MESSAGES_CODE) startActivityForResult(i, MESSAGES_CODE)
} }
+1
View File
@@ -9,4 +9,5 @@
<color name="colorGray">#9e9e9e</color> <color name="colorGray">#9e9e9e</color>
<color name="colorGrayLight">#e0e0e0</color> <color name="colorGrayLight">#e0e0e0</color>
<color name="colorAccent">#b00020</color> <color name="colorAccent">#b00020</color>
<color name="colorBaresip">#0ca1fd</color>
</resources> </resources>