I think this should work - need to test it out

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2025-05-22 13:08:53 -05:00
parent fdfa58dcdd
commit 8b11e7ee0e
No known key found for this signature in database
GPG Key ID: 3AA5FDFED7944099
4 changed files with 40 additions and 25 deletions

View File

@ -131,6 +131,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ONE_TO_ONE
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM
import com.nextcloud.talk.utils.bundle.BundleKeys.SILENT_FOR
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
import com.nextcloud.talk.utils.power.PowerManagerUtils
import com.nextcloud.talk.utils.registerPermissionHandlerBroadcastReceiver
@ -236,6 +237,7 @@ class CallActivity : CallBaseActivity() {
private var microphoneOn = false
private var isVoiceOnlyCall = false
private var isCallWithoutNotification = false
private var silentFor: Array<String>? = null
private var isIncomingCallFromNotification = false
private val callControlHandler = Handler()
private val callInfosHandler = Handler()
@ -383,9 +385,9 @@ class CallActivity : CallBaseActivity() {
conversationUser = currentUserProvider.currentUser.blockingGet()
credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
credentials = ApiUtils.getCredentials(conversationUser.username, conversationUser.token)
if (TextUtils.isEmpty(baseUrl)) {
baseUrl = conversationUser!!.baseUrl
baseUrl = conversationUser.baseUrl
}
powerManagerUtils = PowerManagerUtils()
@ -492,6 +494,7 @@ class CallActivity : CallBaseActivity() {
conversationName = extras.getString(KEY_CONVERSATION_NAME, "")
isVoiceOnlyCall = extras.getBoolean(KEY_CALL_VOICE_ONLY, false)
isCallWithoutNotification = extras.getBoolean(KEY_CALL_WITHOUT_NOTIFICATION, false)
silentFor = extras.getStringArray(SILENT_FOR)
canPublishAudioStream = extras.getBoolean(KEY_PARTICIPANT_PERMISSION_CAN_PUBLISH_AUDIO)
canPublishVideoStream = extras.getBoolean(KEY_PARTICIPANT_PERMISSION_CAN_PUBLISH_VIDEO)
isModerator = extras.getBoolean(KEY_IS_MODERATOR, false)
@ -530,12 +533,12 @@ class CallActivity : CallBaseActivity() {
)
}
when (CapabilitiesUtil.getRecordingConsentType(conversationUser!!.capabilities!!.spreedCapability!!)) {
when (CapabilitiesUtil.getRecordingConsentType(conversationUser.capabilities!!.spreedCapability!!)) {
CapabilitiesUtil.RECORDING_CONSENT_NOT_REQUIRED -> initiateCall()
CapabilitiesUtil.RECORDING_CONSENT_REQUIRED -> askForRecordingConsent()
CapabilitiesUtil.RECORDING_CONSENT_DEPEND_ON_CONVERSATION -> {
val getRoomApiVersion = ApiUtils.getConversationApiVersion(
conversationUser!!,
conversationUser,
intArrayOf(ApiUtils.API_V4, 1)
)
ncApi!!.getRoom(credentials, ApiUtils.getUrlForRoom(getRoomApiVersion, baseUrl, roomToken))
@ -583,7 +586,7 @@ class CallActivity : CallBaseActivity() {
}
fun sendReaction(emoji: String?) {
addReactionForAnimation(emoji, conversationUser!!.displayName)
addReactionForAnimation(emoji, conversationUser.displayName)
if (isConnectionEstablished) {
for (peerConnectionWrapper in peerConnectionWrapperList) {
peerConnectionWrapper.sendReaction(emoji)
@ -1497,20 +1500,20 @@ class CallActivity : CallBaseActivity() {
}
Log.d(TAG, " hasExternalSignalingServer: $hasExternalSignalingServer")
if ("?" != conversationUser!!.userId && conversationUser!!.id != null) {
if ("?" != conversationUser.userId && conversationUser.id != null) {
Log.d(
TAG,
"Update externalSignalingServer for: " + conversationUser!!.id +
" / " + conversationUser!!.userId
"Update externalSignalingServer for: " + conversationUser.id +
" / " + conversationUser.userId
)
userManager!!.updateExternalSignalingServer(
conversationUser!!.id!!,
conversationUser.id!!,
externalSignalingServer!!
)
.subscribeOn(Schedulers.io())
.subscribe()
} else {
conversationUser!!.externalSignalingServer = externalSignalingServer
conversationUser.externalSignalingServer = externalSignalingServer
}
addIceServers(signalingSettingsOverall, apiVersion)
@ -1698,7 +1701,7 @@ class CallActivity : CallBaseActivity() {
if (!TextUtils.isEmpty(roomToken)) {
cancelExistingNotificationsForRoom(
applicationContext,
conversationUser!!,
conversationUser,
roomToken!!
)
}
@ -1743,7 +1746,8 @@ class CallActivity : CallBaseActivity() {
ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken!!),
inCallFlag,
isCallWithoutNotification,
recordingConsentGiven
recordingConsentGiven,
silentFor ?: arrayOf()
)
.subscribeOn(Schedulers.io())
.retry(API_RETRIES)
@ -1780,7 +1784,7 @@ class CallActivity : CallBaseActivity() {
private fun startCallTimeCounter(callStartTime: Long) {
if (callStartTime != 0L &&
hasSpreedFeatureCapability(
conversationUser!!.capabilities!!.spreedCapability!!,
conversationUser.capabilities!!.spreedCapability!!,
SpreedFeatures.RECORDING_V1
)
) {
@ -2603,8 +2607,8 @@ class CallActivity : CallBaseActivity() {
val dataChannelMessage = DataChannelMessage()
dataChannelMessage.type = "nickChanged"
val nickChangedPayload: MutableMap<String, String> = HashMap()
nickChangedPayload["userid"] = conversationUser!!.userId!!
nickChangedPayload["name"] = conversationUser!!.displayName!!
nickChangedPayload["userid"] = conversationUser.userId!!
nickChangedPayload["name"] = conversationUser.displayName!!
dataChannelMessage.payloadMap = nickChangedPayload.toMap()
for (peerConnectionWrapper in peerConnectionWrapperList) {
if (peerConnectionWrapper.isMCUPublisher) {
@ -3100,7 +3104,7 @@ class CallActivity : CallBaseActivity() {
val payload = ncSignalingMessage.payload
?: // Broken message, this should not happen
return
payload.nick = conversationUser!!.displayName
payload.nick = conversationUser.displayName
}
}
@ -3251,7 +3255,7 @@ class CallActivity : CallBaseActivity() {
val isAllowedToStartOrStopRecording: Boolean
get() = (
isCallRecordingAvailable(conversationUser!!.capabilities!!.spreedCapability!!) &&
isCallRecordingAvailable(conversationUser.capabilities!!.spreedCapability!!) &&
isModerator
)
val isAllowedToRaiseHand: Boolean

View File

@ -25,7 +25,6 @@ import com.nextcloud.talk.models.json.notifications.NotificationOverall;
import com.nextcloud.talk.models.json.opengraph.OpenGraphOverall;
import com.nextcloud.talk.models.json.participants.AddParticipantOverall;
import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
import com.nextcloud.talk.models.json.participants.TalkBanOverall;
import com.nextcloud.talk.models.json.push.PushRegistrationOverall;
import com.nextcloud.talk.models.json.reactions.ReactionsOverall;
import com.nextcloud.talk.models.json.reminder.ReminderOverall;
@ -207,7 +206,8 @@ public interface NcApi {
@Url String url,
@Field("flags") Integer inCall,
@Field("silent") Boolean callWithoutNotification,
@Nullable @Field("recordingConsent") Boolean recordingConsent);
@Nullable @Field("recordingConsent") Boolean recordingConsent,
@Field("silentFor") String[] silentFor);
/*
Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken

View File

@ -53,6 +53,7 @@ import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.view.ContextThemeWrapper
import androidx.cardview.widget.CardView
@ -124,6 +125,7 @@ import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.chat.viewmodels.ChatViewModel
import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel
import com.nextcloud.talk.conversationinfo.ConversationInfoActivity
import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel
import com.nextcloud.talk.conversationlist.ConversationsListActivity
import com.nextcloud.talk.data.network.NetworkMonitor
import com.nextcloud.talk.data.user.model.User
@ -142,6 +144,7 @@ import com.nextcloud.talk.models.domain.ConversationModel
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.models.json.conversations.ConversationEnums
import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall
import com.nextcloud.talk.polls.ui.PollCreateDialogFragment
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
@ -187,6 +190,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_RECORDING_STATE
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM
import com.nextcloud.talk.utils.bundle.BundleKeys.SILENT_FOR
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
import com.nextcloud.talk.utils.rx.DisposableSet
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder
@ -224,9 +228,6 @@ import java.util.Locale
import java.util.concurrent.ExecutionException
import javax.inject.Inject
import kotlin.math.roundToInt
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel
import com.nextcloud.talk.models.json.participants.Participant
@AutoInjector(NextcloudTalkApplication::class)
class ChatActivity :
@ -327,6 +328,7 @@ class ChatActivity :
var pullChatMessagesPending = false
var startCallFromNotification: Boolean = false
var startCallFromRoomSwitch: Boolean = false
var silentFor: Array<String>? = null
var voiceOnly: Boolean = true
private lateinit var path: String
@ -510,7 +512,7 @@ class ChatActivity :
startCallFromNotification = extras?.getBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false) == true
startCallFromRoomSwitch = extras?.getBoolean(KEY_START_CALL_AFTER_ROOM_SWITCH, false) == true
silentFor = extras?.getStringArray(SILENT_FOR)
voiceOnly = extras?.getBoolean(KEY_CALL_VOICE_ONLY, false) == true
}
@ -678,7 +680,7 @@ class ChatActivity :
if (startCallFromRoomSwitch) {
startCallFromRoomSwitch = false
startACall(voiceOnly, true)
startACall(voiceOnly, true, silentFor)
}
}
@ -1636,6 +1638,13 @@ class ChatActivity :
bundle.putBoolean(KEY_CALL_VOICE_ONLY, isVoiceOnlyCall)
}
val previousParticipants = mutableListOf<String>()
if (currentConversation?.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) {
previousParticipants.add(currentConversation!!.name)
val silentFor = previousParticipants.toTypedArray()
bundle.putStringArray(SILENT_FOR, silentFor)
}
leaveRoom {
val chatIntent = Intent(context, ChatActivity::class.java)
chatIntent.putExtras(bundle)
@ -3245,7 +3254,7 @@ class ChatActivity :
private fun isPollVotedMessage(currentMessage: MutableMap.MutableEntry<String, ChatMessage>): Boolean =
currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.POLL_VOTED
private fun startACall(isVoiceOnlyCall: Boolean, callWithoutNotification: Boolean) {
private fun startACall(isVoiceOnlyCall: Boolean, callWithoutNotification: Boolean, silentFor: Array<String>? = null) {
currentConversation?.let {
if (conversationUser != null) {
val pp = ParticipantPermissions(spreedCapabilities, it)
@ -3290,6 +3299,7 @@ class ChatActivity :
if (it.objectType == ConversationEnums.ObjectType.ROOM) {
bundle.putBoolean(KEY_IS_BREAKOUT_ROOM, true)
bundle.putStringArray(SILENT_FOR, silentFor) // TODO should this go here?
}
val callIntent = Intent(this, CallActivity::class.java)

View File

@ -81,4 +81,5 @@ object BundleKeys {
const val KEY_FIELD_MAP: String = "KEY_FIELD_MAP"
const val KEY_CHAT_URL: String = "KEY_CHAT_URL"
const val KEY_SCROLL_TO_NOTIFICATION_CATEGORY: String = "KEY_SCROLL_TO_NOTIFICATION_CATEGORY"
const val SILENT_FOR: String = "SILENT_FOR"
}