mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-16 17:25:01 +01:00
I think this should work - need to test it out
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
parent
fdfa58dcdd
commit
8b11e7ee0e
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user