From ffd90a51904e74d981151912c5fb36337fca7c3a Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sat, 14 Jul 2018 11:44:00 +0300 Subject: [PATCH] added notification channels for oreo (not tested due to lack of device) --- .../com/tutpro/baresip/BaresipService.kt | 67 ++++++---- .../kotlin/com/tutpro/baresip/MainActivity.kt | 2 - app/src/main/res/layout/call_notification.xml | 31 +++-- .../main/res/layout/status_notification.xml | 121 ++++++++---------- 4 files changed, 110 insertions(+), 111 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 0eec86da..b01d45b3 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -1,9 +1,7 @@ package com.tutpro.baresip +import android.app.* import android.app.Notification.VISIBILITY_PUBLIC -import android.app.NotificationManager -import android.app.PendingIntent -import android.app.Service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -21,6 +19,7 @@ import java.io.File import java.io.FileInputStream import java.io.ObjectInputStream import android.support.v4.content.LocalBroadcastManager +import android.os.Build class BaresipService: Service() { @@ -43,8 +42,9 @@ class BaresipService: Service() { intent.setPackage("com.tutpro.baresip") nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - snb = NotificationCompat.Builder(this) - cnb = NotificationCompat.Builder(this) + createNotificationChannels() + snb = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID) + cnb = NotificationCompat.Builder(this, HIGH_CHANNEL_ID) ni = Intent(this, MainActivity::class.java) .setAction(Intent.ACTION_MAIN) @@ -127,12 +127,12 @@ class BaresipService: Service() { Thread(Runnable { baresipStart(path) }).start() BaresipService.IS_SERVICE_RUNNING = true registerReceiver(nr, IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")) - showNotification() + showStatusNotification() if (!RUN_FOREGROUNG) super.onStartCommand(intent, flags, startId) } "UpdateNotification" -> { - updateNotification() + updateStatusNotification() } "Stop" -> { @@ -164,11 +164,26 @@ class BaresipService: Service() { } } - private fun showNotification() { + private fun createNotificationChannels() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val defaultChannel = NotificationChannel(DEFAULT_CHANNEL_ID, "Default", + NotificationManager.IMPORTANCE_DEFAULT) + 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_PUBLIC + highChannel.enableVibration(true) + nm.createNotificationChannel(highChannel) + } + } + + private fun showStatusNotification() { snb.setVisibility(VISIBILITY_PUBLIC) .setSmallIcon(R.drawable.ic_stat) .setContentIntent(npi) - .setPriority(NotificationManager.IMPORTANCE_HIGH) .setOngoing(true) .setContent(RemoteViews(packageName, R.layout.status_notification)) if (RUN_FOREGROUNG) @@ -195,7 +210,7 @@ class BaresipService: Service() { intent.putExtra("uap", uap) intent.putExtra("callp", "") LocalBroadcastManager.getInstance(this).sendBroadcast(intent) - updateNotification() + updateStatusNotification() } @Keep @@ -219,17 +234,17 @@ class BaresipService: Service() { MainActivity.images[account_index] = R.drawable.dot_yellow else MainActivity.images[account_index] = R.drawable.dot_green - updateNotification() + updateStatusNotification() if (!Utils.isVisible()) return } "registering failed" -> { MainActivity.images[account_index] = R.drawable.dot_red - updateNotification() + updateStatusNotification() if (!Utils.isVisible()) return } "unregistering" -> { MainActivity.images[account_index] = R.drawable.dot_yellow - updateNotification() + updateStatusNotification() if (!Utils.isVisible()) return } "call ringing" -> { @@ -237,15 +252,20 @@ class BaresipService: Service() { } "call incoming" -> { if (!Utils.isVisible()) { - snb.setVibrate(LongArray(0)) - val view = RemoteViews(getPackageName(), R.layout.status_notification) + cnb.setVisibility(VISIBILITY_PUBLIC) + .setSmallIcon(R.drawable.ic_stat) + .setContentIntent(npi) + .setAutoCancel(true) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + cnb.setVibrate(LongArray(0)) + .setPriority(Notification.PRIORITY_HIGH) + } + val view = RemoteViews(getPackageName(), R.layout.call_notification) view.setTextViewText(R.id.callFrom, "Call from ${Api.call_peeruri(callp)}") - view.setViewVisibility(R.id.callFrom, View.VISIBLE) - snb.setContent(view) - nm.notify(STATUS_NOTIFICATION_ID, snb.build()) + cnb.setContent(view) + nm.notify(CALL_NOTIFICATION_ID, cnb.build()) } /* if (!Utils.isVisible()) { - nm.cancel(STATUS_NOTIFICATION_ID) val cnb = NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_stat) .setContentIntent(npi) @@ -280,11 +300,6 @@ class BaresipService: Service() { } "call established", "call closed" -> { nm.cancel(CALL_NOTIFICATION_ID) - val view = RemoteViews(getPackageName(), R.layout.status_notification) - view.setViewVisibility(R.id.callFrom, View.GONE) - snb.setContent(view) - snb.setVibrate(null) - nm.notify(STATUS_NOTIFICATION_ID, snb.build()) } } } @@ -296,7 +311,7 @@ class BaresipService: Service() { LocalBroadcastManager.getInstance(this).sendBroadcast(intent) } - private fun updateNotification() { + private fun updateStatusNotification() { val contentView = RemoteViews(getPackageName(), R.layout.status_notification) for (i: Int in 0 .. 5) { val resID = resources.getIdentifier("status$i", "id", packageName) @@ -335,7 +350,9 @@ class BaresipService: Service() { var IS_SERVICE_RUNNING = false val STATUS_NOTIFICATION_ID = 101 + val DEFAULT_CHANNEL_ID = "com.tutpro.baresip.default" val CALL_NOTIFICATION_ID = 102 + val HIGH_CHANNEL_ID = "com.tutpro.baresip.high" var disconnected = false val RUN_FOREGROUNG = false diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 5e1a00f9..97dc05e9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -974,7 +974,5 @@ class MainActivity : AppCompatActivity() { const val HISTORY_SIZE = 100 const val ONE_CALL_ONLY = true - const val INCOMING_ID = 102 - } } diff --git a/app/src/main/res/layout/call_notification.xml b/app/src/main/res/layout/call_notification.xml index eb59f805..c0f9f184 100644 --- a/app/src/main/res/layout/call_notification.xml +++ b/app/src/main/res/layout/call_notification.xml @@ -1,49 +1,51 @@ - - - + + diff --git a/app/src/main/res/layout/status_notification.xml b/app/src/main/res/layout/status_notification.xml index ffeb9166..0c16b0aa 100644 --- a/app/src/main/res/layout/status_notification.xml +++ b/app/src/main/res/layout/status_notification.xml @@ -1,79 +1,60 @@ - + android:layout_height="wrap_content" + android:orientation="horizontal" > - + android:layout_gravity="center" + android:paddingLeft="10dp" + android:paddingRight="5dp" + android:src="@drawable/baresip" /> - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +