mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Register notification channels on app start-up (Oreo or later)
Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
This commit is contained in:
parent
2e4130c2c4
commit
2f4aa35c53
@ -23,14 +23,12 @@ import android.annotation.SuppressLint
|
|||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.media.AudioAttributes
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
|
||||||
import androidx.emoji.text.EmojiCompat
|
import androidx.emoji.text.EmojiCompat
|
||||||
import androidx.work.Data
|
import androidx.work.Data
|
||||||
import androidx.work.OneTimeWorkRequest
|
import androidx.work.OneTimeWorkRequest
|
||||||
@ -55,7 +53,6 @@ import com.nextcloud.talk.utils.ApiUtils
|
|||||||
import com.nextcloud.talk.utils.NotificationUtils
|
import com.nextcloud.talk.utils.NotificationUtils
|
||||||
import com.nextcloud.talk.utils.NotificationUtils.cancelAllNotificationsForAccount
|
import com.nextcloud.talk.utils.NotificationUtils.cancelAllNotificationsForAccount
|
||||||
import com.nextcloud.talk.utils.NotificationUtils.cancelExistingNotificationWithId
|
import com.nextcloud.talk.utils.NotificationUtils.cancelExistingNotificationWithId
|
||||||
import com.nextcloud.talk.utils.NotificationUtils.createNotificationChannel
|
|
||||||
import com.nextcloud.talk.utils.NotificationUtils.getCallRingtoneUri
|
import com.nextcloud.talk.utils.NotificationUtils.getCallRingtoneUri
|
||||||
import com.nextcloud.talk.utils.PushUtils
|
import com.nextcloud.talk.utils.PushUtils
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||||
@ -200,27 +197,8 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
|
|||||||
PendingIntent.FLAG_UPDATE_CURRENT
|
PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
)
|
)
|
||||||
|
|
||||||
val audioAttributesBuilder =
|
val soundUri = getCallRingtoneUri(applicationContext!!, appPreferences!!)
|
||||||
AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
||||||
audioAttributesBuilder.setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST)
|
|
||||||
|
|
||||||
val soundUri = getCallRingtoneUri(applicationContext!!, appPreferences)
|
|
||||||
val notificationChannelId = NotificationUtils.NOTIFICATION_CHANNEL_CALLS_V4
|
val notificationChannelId = NotificationUtils.NOTIFICATION_CHANNEL_CALLS_V4
|
||||||
createNotificationChannel(
|
|
||||||
applicationContext!!,
|
|
||||||
notificationChannelId,
|
|
||||||
applicationContext.resources
|
|
||||||
.getString(R.string.nc_notification_channel_calls),
|
|
||||||
applicationContext.resources
|
|
||||||
.getString(R.string.nc_notification_channel_calls_description),
|
|
||||||
true,
|
|
||||||
NotificationManagerCompat.IMPORTANCE_HIGH,
|
|
||||||
soundUri!!,
|
|
||||||
audioAttributesBuilder.build(),
|
|
||||||
null,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
val uri = Uri.parse(signatureVerification!!.userEntity.baseUrl)
|
val uri = Uri.parse(signatureVerification!!.userEntity.baseUrl)
|
||||||
val baseUrl = uri.host
|
val baseUrl = uri.host
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ import com.nextcloud.talk.jobs.SignalingSettingsWorker
|
|||||||
import com.nextcloud.talk.utils.ClosedInterfaceImpl
|
import com.nextcloud.talk.utils.ClosedInterfaceImpl
|
||||||
import com.nextcloud.talk.utils.DeviceUtils
|
import com.nextcloud.talk.utils.DeviceUtils
|
||||||
import com.nextcloud.talk.utils.DisplayUtils
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
|
import com.nextcloud.talk.utils.NotificationUtils
|
||||||
import com.nextcloud.talk.utils.OkHttpNetworkFetcherWithCache
|
import com.nextcloud.talk.utils.OkHttpNetworkFetcherWithCache
|
||||||
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageModule
|
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageModule
|
||||||
import com.nextcloud.talk.utils.database.user.UserModule
|
import com.nextcloud.talk.utils.database.user.UserModule
|
||||||
@ -188,6 +189,8 @@ class NextcloudTalkApplication : MultiDexApplication(), LifecycleObserver {
|
|||||||
val emojiCompat = EmojiCompat.init(config)
|
val emojiCompat = EmojiCompat.init(config)
|
||||||
|
|
||||||
EmojiManager.install(GoogleCompatEmojiProvider(emojiCompat))
|
EmojiManager.install(GoogleCompatEmojiProvider(emojiCompat))
|
||||||
|
|
||||||
|
NotificationUtils.registerNotificationChannels(applicationContext, appPreferences)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTerminate() {
|
override fun onTerminate() {
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
package com.nextcloud.talk.jobs;
|
package com.nextcloud.talk.jobs;
|
||||||
|
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.app.NotificationManager;
|
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -332,34 +331,9 @@ public class NotificationWorker extends Worker {
|
|||||||
notificationBuilder.setExtras(notificationInfo);
|
notificationBuilder.setExtras(notificationInfo);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
|
||||||
/*NotificationUtils.createNotificationChannelGroup(context,
|
|
||||||
Long.toString(crc32.getValue()),
|
|
||||||
groupName);*/
|
|
||||||
|
|
||||||
if (CHAT.equals(decryptedPushMessage.getType()) || ROOM.equals(decryptedPushMessage.getType())) {
|
if (CHAT.equals(decryptedPushMessage.getType()) || ROOM.equals(decryptedPushMessage.getType())) {
|
||||||
AudioAttributes.Builder audioAttributesBuilder = new AudioAttributes.Builder().setContentType
|
|
||||||
(AudioAttributes.CONTENT_TYPE_SONIFICATION);
|
|
||||||
audioAttributesBuilder.setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT);
|
|
||||||
Uri soundUri = NotificationUtils.INSTANCE.getMessageRingtoneUri(getApplicationContext(),
|
|
||||||
appPreferences);
|
|
||||||
NotificationUtils.INSTANCE.createNotificationChannel(context,
|
|
||||||
NotificationUtils.INSTANCE.getNOTIFICATION_CHANNEL_MESSAGES_V3(), context.getResources()
|
|
||||||
.getString(R.string.nc_notification_channel_messages), context.getResources()
|
|
||||||
.getString(R.string.nc_notification_channel_messages), true,
|
|
||||||
NotificationManager.IMPORTANCE_HIGH, soundUri, audioAttributesBuilder.build(), null, false);
|
|
||||||
|
|
||||||
notificationBuilder.setChannelId(NotificationUtils.INSTANCE.getNOTIFICATION_CHANNEL_MESSAGES_V3());
|
notificationBuilder.setChannelId(NotificationUtils.INSTANCE.getNOTIFICATION_CHANNEL_MESSAGES_V3());
|
||||||
} else {
|
|
||||||
/*NotificationUtils.INSTANCE.createNotificationChannel(context,
|
|
||||||
NotificationUtils.INSTANCE.getNOTIFICATION_CHANNEL_CALLS_V3(), context.getResources()
|
|
||||||
.getString(R.string.nc_notification_channel_calls), context.getResources()
|
|
||||||
.getString(R.string.nc_notification_channel_calls_description), true,
|
|
||||||
NotificationManager.IMPORTANCE_HIGH);
|
|
||||||
|
|
||||||
notificationBuilder.setChannelId(NotificationUtils.INSTANCE.getNOTIFICATION_CHANNEL_CALLS_V3());*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// red color for the lights
|
// red color for the lights
|
||||||
notificationBuilder.setLights(0xFFFF0000, 200, 200);
|
notificationBuilder.setLights(0xFFFF0000, 200, 200);
|
||||||
|
@ -30,6 +30,7 @@ import android.net.Uri
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.service.notification.StatusBarNotification
|
import android.service.notification.StatusBarNotification
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import com.bluelinelabs.logansquare.LoganSquare
|
import com.bluelinelabs.logansquare.LoganSquare
|
||||||
import com.nextcloud.talk.BuildConfig
|
import com.nextcloud.talk.BuildConfig
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
@ -54,7 +55,7 @@ object NotificationUtils {
|
|||||||
"android.resource://" + BuildConfig.APPLICATION_ID + "/raw/librem_by_feandesign_message"
|
"android.resource://" + BuildConfig.APPLICATION_ID + "/raw/librem_by_feandesign_message"
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.O)
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
fun createNotificationChannel(
|
private fun createNotificationChannel(
|
||||||
context: Context,
|
context: Context,
|
||||||
channelId: String,
|
channelId: String,
|
||||||
channelName: String,
|
channelName: String,
|
||||||
@ -95,8 +96,66 @@ object NotificationUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createCallsNotificationChannel(
|
||||||
|
context: Context,
|
||||||
|
appPreferences: AppPreferences
|
||||||
|
) {
|
||||||
|
val audioAttributes =
|
||||||
|
AudioAttributes.Builder()
|
||||||
|
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
||||||
|
.setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST)
|
||||||
|
.build()
|
||||||
|
val soundUri = getCallRingtoneUri(context, appPreferences)
|
||||||
|
|
||||||
|
createNotificationChannel(
|
||||||
|
context,
|
||||||
|
NOTIFICATION_CHANNEL_CALLS_V4,
|
||||||
|
context.resources.getString(R.string.nc_notification_channel_calls),
|
||||||
|
context.resources.getString(R.string.nc_notification_channel_calls_description),
|
||||||
|
true,
|
||||||
|
NotificationManagerCompat.IMPORTANCE_HIGH,
|
||||||
|
soundUri,
|
||||||
|
audioAttributes,
|
||||||
|
null,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createMessagesNotificationChannel(
|
||||||
|
context: Context,
|
||||||
|
appPreferences: AppPreferences
|
||||||
|
) {
|
||||||
|
val audioAttributes =
|
||||||
|
AudioAttributes.Builder()
|
||||||
|
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
||||||
|
.setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT)
|
||||||
|
.build()
|
||||||
|
val soundUri = getMessageRingtoneUri(context, appPreferences)
|
||||||
|
|
||||||
|
createNotificationChannel(
|
||||||
|
context,
|
||||||
|
NOTIFICATION_CHANNEL_MESSAGES_V3,
|
||||||
|
context.resources.getString(R.string.nc_notification_channel_messages),
|
||||||
|
context.resources.getString(R.string.nc_notification_channel_messages),
|
||||||
|
true,
|
||||||
|
NotificationManager.IMPORTANCE_HIGH,
|
||||||
|
soundUri,
|
||||||
|
audioAttributes,
|
||||||
|
null,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun registerNotificationChannels(
|
||||||
|
context: Context,
|
||||||
|
appPreferences: AppPreferences
|
||||||
|
) {
|
||||||
|
createCallsNotificationChannel(context, appPreferences)
|
||||||
|
createMessagesNotificationChannel(context, appPreferences)
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.O)
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
fun getNotificationChannel(
|
private fun getNotificationChannel(
|
||||||
context: Context,
|
context: Context,
|
||||||
channelId: String
|
channelId: String
|
||||||
): NotificationChannel? {
|
): NotificationChannel? {
|
||||||
@ -214,17 +273,22 @@ object NotificationUtils {
|
|||||||
ringtonePreferencesString: String?,
|
ringtonePreferencesString: String?,
|
||||||
defaultRingtoneUri: String,
|
defaultRingtoneUri: String,
|
||||||
channelId: String
|
channelId: String
|
||||||
): Uri? {
|
): Uri {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
val channel = getNotificationChannel(context, channelId)
|
val channel = getNotificationChannel(context, channelId)
|
||||||
return channel!!.sound
|
if (channel != null) {
|
||||||
} else if (TextUtils.isEmpty(ringtonePreferencesString)) {
|
return channel.sound
|
||||||
|
}
|
||||||
|
// Notification channel will not be available when starting the application for the first time.
|
||||||
|
// Ringtone uris are required to register the notification channels -> get uri from preferences.
|
||||||
|
}
|
||||||
|
if (TextUtils.isEmpty(ringtonePreferencesString)) {
|
||||||
return Uri.parse(defaultRingtoneUri)
|
return Uri.parse(defaultRingtoneUri)
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
val ringtoneSettings =
|
val ringtoneSettings =
|
||||||
LoganSquare.parse(ringtonePreferencesString, RingtoneSettings::class.java)
|
LoganSquare.parse(ringtonePreferencesString, RingtoneSettings::class.java)
|
||||||
return ringtoneSettings.ringtoneUri
|
return ringtoneSettings.ringtoneUri!!
|
||||||
} catch (exception: IOException) {
|
} catch (exception: IOException) {
|
||||||
return Uri.parse(defaultRingtoneUri)
|
return Uri.parse(defaultRingtoneUri)
|
||||||
}
|
}
|
||||||
@ -233,21 +297,21 @@ object NotificationUtils {
|
|||||||
|
|
||||||
fun getCallRingtoneUri(
|
fun getCallRingtoneUri(
|
||||||
context: Context,
|
context: Context,
|
||||||
appPreferences: AppPreferences?
|
appPreferences: AppPreferences
|
||||||
): Uri? {
|
): Uri {
|
||||||
return getRingtoneUri(
|
return getRingtoneUri(
|
||||||
context,
|
context,
|
||||||
appPreferences!!.callRingtoneUri, DEFAULT_CALL_RINGTONE_URI, NOTIFICATION_CHANNEL_CALLS_V4
|
appPreferences.callRingtoneUri, DEFAULT_CALL_RINGTONE_URI, NOTIFICATION_CHANNEL_CALLS_V4
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getMessageRingtoneUri(
|
fun getMessageRingtoneUri(
|
||||||
context: Context,
|
context: Context,
|
||||||
appPreferences: AppPreferences?
|
appPreferences: AppPreferences
|
||||||
): Uri? {
|
): Uri {
|
||||||
return getRingtoneUri(
|
return getRingtoneUri(
|
||||||
context,
|
context,
|
||||||
appPreferences!!.messageRingtoneUri, DEFAULT_MESSAGE_RINGTONE_URI, NOTIFICATION_CHANNEL_MESSAGES_V3
|
appPreferences.messageRingtoneUri, DEFAULT_MESSAGE_RINGTONE_URI, NOTIFICATION_CHANNEL_MESSAGES_V3
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user