From f90b518f43c8571cf2be793264e3f347d5eb2748 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 16 May 2024 10:19:14 +0200 Subject: [PATCH] Added a setting to disable UI secure mode preventing screenshots & screen recording --- .../settings/fragment/SettingsFragment.kt | 7 +++++ .../settings/viewmodel/SettingsViewModel.kt | 18 ++++++++++++ app/src/main/res/layout/settings_security.xml | 28 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 55 insertions(+) diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt index b88f3cbd8..a4a5995b7 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/SettingsFragment.kt @@ -121,6 +121,13 @@ class SettingsFragment : GenericMainFragment() { } } + viewModel.recreateActivityEvent.observe(viewLifecycleOwner) { + it.consume { + Log.w("$TAG Recreate Activity") + requireActivity().recreate() + } + } + viewModel.addLdapServerEvent.observe(viewLifecycleOwner) { it.consume { val action = SettingsFragmentDirections.actionSettingsFragmentToLdapServerConfigurationFragment( diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt index 3cb78756f..a36d244ab 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt @@ -47,9 +47,15 @@ class SettingsViewModel @UiThread constructor() : GenericViewModel() { val expandNetwork = MutableLiveData() val expandUserInterface = MutableLiveData() + val recreateActivityEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + // Security settings val isVfsEnabled = MutableLiveData() + val isUiSecureModeEnabled = MutableLiveData() + // Calls settings val echoCancellerEnabled = MutableLiveData() val routeAudioToBluetooth = MutableLiveData() @@ -169,6 +175,8 @@ class SettingsViewModel @UiThread constructor() : GenericViewModel() { } coreContext.postOnCoreThread { core -> + isUiSecureModeEnabled.postValue(corePreferences.enableSecureMode) + echoCancellerEnabled.postValue(core.isEchoCancellationEnabled) routeAudioToBluetooth.postValue(corePreferences.routeAudioToBluetoothIfAvailable) videoEnabled.postValue(core.isVideoEnabled) @@ -211,6 +219,16 @@ class SettingsViewModel @UiThread constructor() : GenericViewModel() { } } + @UiThread + fun toggleUiSecureMode() { + val newValue = isUiSecureModeEnabled.value == false + coreContext.postOnCoreThread { + corePreferences.enableSecureMode = newValue + recreateActivityEvent.postValue(Event(true)) + isUiSecureModeEnabled.postValue(newValue) + } + } + @UiThread fun toggleCallsExpand() { expandCalls.value = expandCalls.value == false diff --git a/app/src/main/res/layout/settings_security.xml b/app/src/main/res/layout/settings_security.xml index fd7c14737..1fc31c692 100644 --- a/app/src/main/res/layout/settings_security.xml +++ b/app/src/main/res/layout/settings_security.xml @@ -57,6 +57,34 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 095ac29cf..7aa5a8f6a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -216,6 +216,7 @@ Securité Chiffrer tous les fichiers Attention, vous ne pourrez pas revenir en arrière ! + Empêcher l\'interface d\'être enregistrée Appels Utiliser l\'annulateur d\'écho Évite que de l\'écho soit entendu par votre correspondant diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a423827bc..4c485b076 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -251,6 +251,7 @@ Security Encrypt everything Warning: once enabled it can\'t be disabled! + Prevent interface from being recorded Calls Use echo canceller Prevents echo from being heard by remote end