Added a setting to force secure chat rooms
This commit is contained in:
parent
05718aa749
commit
02304cdd18
11 changed files with 38 additions and 15 deletions
|
@ -36,6 +36,7 @@ import org.linphone.contact.ContactsSelectionAdapter
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.ChatRoomCreationFragmentBinding
|
||||
import org.linphone.utils.AppUtils
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
import org.linphone.utils.PermissionHelper
|
||||
|
||||
class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() {
|
||||
|
@ -174,6 +175,12 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
|
|||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
viewModel.secureChatAvailable.value = LinphoneUtils.isEndToEndEncryptedChatAvailable()
|
||||
}
|
||||
|
||||
private fun addParticipantsFromSharedViewModel() {
|
||||
val participants = sharedViewModel.chatRoomParticipants.value
|
||||
if (participants != null && participants.size > 0) {
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.os.Bundle
|
|||
import android.view.View
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
import org.linphone.activities.main.MainActivity
|
||||
import org.linphone.activities.main.chat.GroupChatRoomMember
|
||||
|
@ -132,7 +133,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
|
|||
}
|
||||
|
||||
binding.setParticipantsClickListener {
|
||||
sharedViewModel.createEncryptedChatRoom = viewModel.isEncrypted.value == true
|
||||
sharedViewModel.createEncryptedChatRoom = corePreferences.forceEndToEndEncryptedChat || viewModel.isEncrypted.value == true
|
||||
|
||||
val list = arrayListOf<Address>()
|
||||
for (participant in viewModel.participants.value.orEmpty()) {
|
||||
|
|
|
@ -41,7 +41,9 @@ class ChatRoomCreationViewModel : ContactsSelectionViewModel() {
|
|||
|
||||
val waitForChatRoomCreation = MutableLiveData<Boolean>()
|
||||
|
||||
val secureChatAvailable: Boolean = LinphoneUtils.isEndToEndEncryptedChatAvailable()
|
||||
val secureChatAvailable = MutableLiveData<Boolean>()
|
||||
|
||||
val secureChatMandatory: Boolean = corePreferences.forceEndToEndEncryptedChat
|
||||
|
||||
private val listener = object : ChatRoomListenerStub() {
|
||||
override fun onStateChanged(room: ChatRoom, state: ChatRoom.State) {
|
||||
|
@ -59,11 +61,16 @@ class ChatRoomCreationViewModel : ContactsSelectionViewModel() {
|
|||
|
||||
init {
|
||||
createGroupChat.value = false
|
||||
isEncrypted.value = false
|
||||
isEncrypted.value = secureChatMandatory
|
||||
waitForChatRoomCreation.value = false
|
||||
secureChatAvailable.value = LinphoneUtils.isEndToEndEncryptedChatAvailable()
|
||||
}
|
||||
|
||||
fun updateEncryption(encrypted: Boolean) {
|
||||
if (!encrypted && secureChatMandatory) {
|
||||
Log.w("[Chat Room Creation] Something tries to force plain text chat room even if secureChatMandatory is enabled!")
|
||||
return
|
||||
}
|
||||
isEncrypted.value = encrypted
|
||||
}
|
||||
|
||||
|
@ -80,7 +87,7 @@ class ChatRoomCreationViewModel : ContactsSelectionViewModel() {
|
|||
return
|
||||
}
|
||||
|
||||
val encrypted = isEncrypted.value == true
|
||||
val encrypted = secureChatMandatory || isEncrypted.value == true
|
||||
val params: ChatRoomParams = coreContext.core.createDefaultChatRoomParams()
|
||||
params.backend = ChatRoomBackend.Basic
|
||||
params.isGroupEnabled = false
|
||||
|
|
|
@ -99,7 +99,7 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : MessageNotifierViewModel() {
|
|||
subject.value = chatRoom?.subject
|
||||
isMeAdmin.value = chatRoom == null || (chatRoom.me?.isAdmin == true && !chatRoom.isReadOnly)
|
||||
canLeaveGroup.value = chatRoom != null && !chatRoom.isReadOnly
|
||||
isEncrypted.value = chatRoom?.hasCapability(ChatRoomCapabilities.Encrypted.toInt())
|
||||
isEncrypted.value = corePreferences.forceEndToEndEncryptedChat || chatRoom?.hasCapability(ChatRoomCapabilities.Encrypted.toInt()) == true
|
||||
|
||||
if (chatRoom != null) updateParticipants()
|
||||
|
||||
|
@ -117,9 +117,9 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : MessageNotifierViewModel() {
|
|||
fun createChatRoom() {
|
||||
waitForChatRoomCreation.value = true
|
||||
val params: ChatRoomParams = coreContext.core.createDefaultChatRoomParams()
|
||||
params.isEncryptionEnabled = isEncrypted.value == true
|
||||
params.isEncryptionEnabled = corePreferences.forceEndToEndEncryptedChat || isEncrypted.value == true
|
||||
params.isGroupEnabled = true
|
||||
if (isEncrypted.value == true) {
|
||||
if (params.isEncryptionEnabled) {
|
||||
params.ephemeralMode = if (corePreferences.useEphemeralPerDeviceMode)
|
||||
ChatRoomEphemeralMode.DeviceManaged
|
||||
else
|
||||
|
|
|
@ -35,6 +35,8 @@ class ContactNumberOrAddressData(
|
|||
|
||||
val chatAllowed = !corePreferences.disableChat
|
||||
|
||||
val hidePlainChat = corePreferences.forceEndToEndEncryptedChat
|
||||
|
||||
fun startCall() {
|
||||
address ?: return
|
||||
listener.onCall(address)
|
||||
|
|
|
@ -99,6 +99,8 @@ class CallLogViewModel(val callLog: CallLog, private val isRelated: Boolean = fa
|
|||
|
||||
val chatAllowed = !corePreferences.disableChat
|
||||
|
||||
val hidePlainChat = corePreferences.forceEndToEndEncryptedChat
|
||||
|
||||
val secureChatAllowed = LinphoneUtils.isEndToEndEncryptedChatAvailable() && (contact.value?.getPresenceModelForUriOrTel(peerSipUri)?.hasCapability(FriendCapability.LimeX3Dh) ?: false)
|
||||
|
||||
val relatedCallLogs = MutableLiveData<ArrayList<CallLogViewModel>>()
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.linphone.activities.main.viewmodels
|
|||
import android.net.Uri
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.activities.main.history.data.GroupedCallLogData
|
||||
import org.linphone.core.*
|
||||
import org.linphone.utils.Event
|
||||
|
@ -59,7 +60,7 @@ class SharedMainViewModel : ViewModel() {
|
|||
|
||||
val contentToOpen = MutableLiveData<Content>()
|
||||
|
||||
var createEncryptedChatRoom: Boolean = false
|
||||
var createEncryptedChatRoom: Boolean = corePreferences.forceEndToEndEncryptedChat
|
||||
|
||||
val chatRoomParticipants = MutableLiveData<ArrayList<Address>>()
|
||||
|
||||
|
|
|
@ -455,6 +455,9 @@ class CorePreferences constructor(private val context: Context) {
|
|||
val disableChat: Boolean
|
||||
get() = config.getBool("app", "disable_chat_feature", false)
|
||||
|
||||
val forceEndToEndEncryptedChat: Boolean
|
||||
get() = config.getBool("app", "force_lime_chat_rooms", false)
|
||||
|
||||
// This will prevent UI from showing up, except for the launcher & the foreground service notification
|
||||
val preventInterfaceFromShowingUp: Boolean
|
||||
get() = config.getBool("app", "keep_app_invisible", false)
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
android:src="@drawable/back" />
|
||||
|
||||
<LinearLayout
|
||||
android:visibility="@{viewModel.secureChatAvailable ? View.VISIBLE : View.INVISIBLE}"
|
||||
android:visibility="@{viewModel.secureChatAvailable && !viewModel.secureChatMandatory ? View.VISIBLE : View.INVISIBLE}"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="5dp"
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
<ImageView
|
||||
android:onClick="@{() -> data.startChat(false)}"
|
||||
android:enabled="@{data.address != null}"
|
||||
android:visibility="@{data.chatAllowed ? View.VISIBLE : View.GONE}"
|
||||
android:visibility="@{data.chatAllowed && !data.hidePlainChat ? View.VISIBLE : View.GONE}"
|
||||
android:contentDescription="@string/content_description_start_chat"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
|
|
|
@ -122,14 +122,14 @@
|
|||
android:src="@drawable/call_start_default" />
|
||||
|
||||
<ImageView
|
||||
android:onClick="@{() -> viewModel.startChat(false)}"
|
||||
android:visibility="@{viewModel.chatAllowed ? View.VISIBLE : View.GONE}"
|
||||
android:contentDescription="@string/content_description_start_chat"
|
||||
android:layout_width="60dp"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_margin="10dp"
|
||||
android:background="@drawable/round_orange_button_background"
|
||||
android:src="@drawable/chat_start_default" />
|
||||
android:contentDescription="@string/content_description_start_chat"
|
||||
android:onClick="@{() -> viewModel.startChat(false)}"
|
||||
android:src="@drawable/chat_start_default"
|
||||
android:visibility="@{viewModel.chatAllowed && !viewModel.hidePlainChat ? View.VISIBLE : View.GONE}" />
|
||||
|
||||
<RelativeLayout
|
||||
android:onClick="@{() -> viewModel.startChat(true)}"
|
||||
|
|
Loading…
Reference in a new issue