fix: incoming ringer fix on receiving call, call notification priorities and notification channel update

This commit is contained in:
Harris
2021-11-17 15:46:45 +11:00
parent ad9cd8b231
commit 23e644150a
4 changed files with 18 additions and 20 deletions

View File

@@ -44,14 +44,15 @@ public class NotificationChannels {
private static final String TAG = NotificationChannels.class.getSimpleName(); private static final String TAG = NotificationChannels.class.getSimpleName();
private static final int VERSION_MESSAGES_CATEGORY = 2; private static final int VERSION_MESSAGES_CATEGORY = 2;
private static final int VERSION_SESSION_CALLS = 3;
private static final int VERSION = 2; private static final int VERSION = 3;
private static final String CATEGORY_MESSAGES = "messages"; private static final String CATEGORY_MESSAGES = "messages";
private static final String CONTACT_PREFIX = "contact_"; private static final String CONTACT_PREFIX = "contact_";
private static final String MESSAGES_PREFIX = "messages_"; private static final String MESSAGES_PREFIX = "messages_";
public static final String CALLS = "calls_v2"; public static final String CALLS = "calls_v3";
public static final String FAILURES = "failures"; public static final String FAILURES = "failures";
public static final String APP_UPDATES = "app_updates"; public static final String APP_UPDATES = "app_updates";
public static final String BACKUPS = "backups_v2"; public static final String BACKUPS = "backups_v2";
@@ -427,7 +428,7 @@ public class NotificationChannels {
notificationManager.createNotificationChannelGroup(messagesGroup); notificationManager.createNotificationChannelGroup(messagesGroup);
NotificationChannel messages = new NotificationChannel(getMessagesChannel(context), context.getString(R.string.NotificationChannel_messages), NotificationManager.IMPORTANCE_HIGH); NotificationChannel messages = new NotificationChannel(getMessagesChannel(context), context.getString(R.string.NotificationChannel_messages), NotificationManager.IMPORTANCE_HIGH);
NotificationChannel calls = new NotificationChannel(CALLS, context.getString(R.string.NotificationChannel_calls), NotificationManager.IMPORTANCE_DEFAULT); NotificationChannel calls = new NotificationChannel(CALLS, context.getString(R.string.NotificationChannel_calls), NotificationManager.IMPORTANCE_HIGH);
NotificationChannel failures = new NotificationChannel(FAILURES, context.getString(R.string.NotificationChannel_failures), NotificationManager.IMPORTANCE_HIGH); NotificationChannel failures = new NotificationChannel(FAILURES, context.getString(R.string.NotificationChannel_failures), NotificationManager.IMPORTANCE_HIGH);
NotificationChannel backups = new NotificationChannel(BACKUPS, context.getString(R.string.NotificationChannel_backups), NotificationManager.IMPORTANCE_LOW); NotificationChannel backups = new NotificationChannel(BACKUPS, context.getString(R.string.NotificationChannel_backups), NotificationManager.IMPORTANCE_LOW);
NotificationChannel lockedStatus = new NotificationChannel(LOCKED_STATUS, context.getString(R.string.NotificationChannel_locked_status), NotificationManager.IMPORTANCE_LOW); NotificationChannel lockedStatus = new NotificationChannel(LOCKED_STATUS, context.getString(R.string.NotificationChannel_locked_status), NotificationManager.IMPORTANCE_LOW);
@@ -439,6 +440,7 @@ public class NotificationChannels {
setLedPreference(messages, TextSecurePreferences.getNotificationLedColor(context)); setLedPreference(messages, TextSecurePreferences.getNotificationLedColor(context));
calls.setShowBadge(false); calls.setShowBadge(false);
calls.setSound(null, null);
backups.setShowBadge(false); backups.setShowBadge(false);
lockedStatus.setShowBadge(false); lockedStatus.setShowBadge(false);
other.setShowBadge(false); other.setShowBadge(false);
@@ -463,6 +465,8 @@ public class NotificationChannels {
notificationManager.deleteNotificationChannel("locked_status"); notificationManager.deleteNotificationChannel("locked_status");
notificationManager.deleteNotificationChannel("backups"); notificationManager.deleteNotificationChannel("backups");
notificationManager.deleteNotificationChannel("other"); notificationManager.deleteNotificationChannel("other");
} if (oldVersion < VERSION_SESSION_CALLS) {
notificationManager.deleteNotificationChannel("calls_v2");
} }
} }

View File

@@ -15,7 +15,6 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.session.libsession.utilities.Address import org.session.libsession.utilities.Address
import org.session.libsession.utilities.FutureTaskListener import org.session.libsession.utilities.FutureTaskListener
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.Util import org.session.libsession.utilities.Util
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
@@ -310,9 +309,8 @@ class WebRtcCallService: Service(), PeerConnection.Observer {
callManager.onIncomingRing(offer, callId, recipient, timestamp) callManager.onIncomingRing(offer, callId, recipient, timestamp)
callManager.postConnectionEvent(STATE_LOCAL_RINGING) callManager.postConnectionEvent(STATE_LOCAL_RINGING)
callManager.postViewModelState(CallViewModel.State.CALL_RINGING) callManager.postViewModelState(CallViewModel.State.CALL_RINGING)
if (TextSecurePreferences.isCallNotificationsEnabled(this)) { callManager.initializeAudioForCall()
callManager.startIncomingRinger() callManager.startIncomingRinger()
}
registerPowerButtonReceiver() registerPowerButtonReceiver()
} }

View File

@@ -28,12 +28,14 @@ class CallNotificationBuilder {
val contentIntent = Intent(context, WebRtcCallActivity::class.java) val contentIntent = Intent(context, WebRtcCallActivity::class.java)
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
val pendingIntent = PendingIntent.getActivity(context, 0, contentIntent, 0) val pendingIntent = PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS) val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS)
.setSmallIcon(R.drawable.ic_baseline_call_24) .setSound(null)
.setContentIntent(pendingIntent) .setSmallIcon(R.drawable.ic_baseline_call_24)
.setOngoing(true) .setContentIntent(pendingIntent)
.setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_LOW)
recipient?.name?.let { name -> recipient?.name?.let { name ->
builder.setContentTitle(name) builder.setContentTitle(name)
@@ -42,7 +44,7 @@ class CallNotificationBuilder {
when (type) { when (type) {
TYPE_INCOMING_CONNECTING -> { TYPE_INCOMING_CONNECTING -> {
builder.setContentText(context.getString(R.string.CallNotificationBuilder_connecting)) builder.setContentText(context.getString(R.string.CallNotificationBuilder_connecting))
builder.priority = NotificationCompat.PRIORITY_MIN builder.priority = NotificationCompat.PRIORITY_LOW
} }
TYPE_INCOMING_RINGING -> { TYPE_INCOMING_RINGING -> {
builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call)) builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call))
@@ -89,7 +91,7 @@ class CallNotificationBuilder {
val intent = Intent(context, WebRtcCallService::class.java) val intent = Intent(context, WebRtcCallService::class.java)
.setAction(action) .setAction(action)
val pendingIntent = PendingIntent.getService(context, 0, intent, 0) val pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent) return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent)
} }
@@ -100,7 +102,7 @@ class CallNotificationBuilder {
val intent = Intent(context, WebRtcCallActivity::class.java) val intent = Intent(context, WebRtcCallActivity::class.java)
.setAction(action) .setAction(action)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0) val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent) return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent)
} }

View File

@@ -4,18 +4,13 @@ import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.media.AudioFocusRequest
import android.media.AudioManager import android.media.AudioManager
import android.media.SoundPool import android.media.SoundPool
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.HandlerThread import android.os.HandlerThread
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsession.utilities.ServiceUtil
import org.session.libsession.utilities.concurrent.SignalExecutors
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.webrtc.AudioManagerCommand import org.thoughtcrime.securesms.webrtc.AudioManagerCommand
import org.thoughtcrime.securesms.webrtc.audio.SignalBluetoothManager.State
private val TAG = Log.tag(SignalAudioManager::class.java) private val TAG = Log.tag(SignalAudioManager::class.java)
@@ -347,7 +342,6 @@ class SignalAudioManager(private val context: Context,
private fun startIncomingRinger(vibrate: Boolean) { private fun startIncomingRinger(vibrate: Boolean) {
Log.i(TAG, "startIncomingRinger(): vibrate: $vibrate") Log.i(TAG, "startIncomingRinger(): vibrate: $vibrate")
androidAudioManager.mode = AudioManager.MODE_RINGTONE androidAudioManager.mode = AudioManager.MODE_RINGTONE
setMicrophoneMute(false)
setDefaultAudioDevice(AudioDevice.SPEAKER_PHONE, false) setDefaultAudioDevice(AudioDevice.SPEAKER_PHONE, false)
incomingRinger.start(vibrate) incomingRinger.start(vibrate)