From a57d7d4578a0519d08a77fbcbd9fad7a571572c7 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 19 Jan 2021 17:17:46 +0100 Subject: [PATCH] Added back full screen mode for call activity --- .../linphone/activities/call/CallActivity.kt | 37 ++++++++++++++++++- .../call/fragments/ControlsFragment.kt | 8 +++- .../viewmodels/CallSettingsViewModel.kt | 8 ++++ .../java/org/linphone/core/CorePreferences.kt | 6 +++ .../res/layout/settings_call_fragment.xml | 6 +++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 8 +++- 7 files changed, 72 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/call/CallActivity.kt b/app/src/main/java/org/linphone/activities/call/CallActivity.kt index be3df64cd..2a38f1484 100644 --- a/app/src/main/java/org/linphone/activities/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/CallActivity.kt @@ -20,11 +20,14 @@ package org.linphone.activities.call import android.content.res.Configuration +import android.content.res.Resources import android.os.Bundle import android.view.Gravity import android.view.MotionEvent +import android.view.View import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import kotlinx.coroutines.* import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R @@ -83,7 +86,8 @@ class CallActivity : ProximitySensorActivity() { previewY = v.y - event.rawY } MotionEvent.ACTION_MOVE -> { - v.animate().x(event.rawX + previewX).y(event.rawY + previewY).setDuration(0).start() + v.animate().x(event.rawX + previewX).y(event.rawY + previewY).setDuration(0) + .start() } else -> { v.performClick() @@ -109,6 +113,20 @@ class CallActivity : ProximitySensorActivity() { } else { coreContext.removeCallOverlay() } + + if (corePreferences.fullScreenCallUI) { + hideSystemUI() + window.decorView.setOnSystemUiVisibilityChangeListener { visibility -> + if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) { + GlobalScope.launch { + delay(2000) + withContext(Dispatchers.Main) { + hideSystemUI() + } + } + } + } + } } override fun onPause() { @@ -142,4 +160,21 @@ class CallActivity : ProximitySensorActivity() { viewModel.isVideoPreviewResizedForPip.value = isInPictureInPictureMode } } + + override fun getTheme(): Resources.Theme { + val theme = super.getTheme() + if (corePreferences.fullScreenCallUI) { + theme.applyStyle(R.style.FullScreenTheme, true) + } + return theme + } + + private fun hideSystemUI() { + window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or + View.SYSTEM_UI_FLAG_IMMERSIVE or + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or + View.SYSTEM_UI_FLAG_LAYOUT_STABLE or + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + } } diff --git a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt index aa2ed20d5..b0e07ad23 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt @@ -27,6 +27,8 @@ import android.content.Intent import android.content.pm.PackageManager.PERMISSION_GRANTED import android.os.Bundle import android.os.SystemClock +import android.util.DisplayMetrics +import android.view.Display import androidx.lifecycle.ViewModelProvider import com.google.android.flexbox.FlexboxLayout import org.linphone.LinphoneApplication.Companion.coreContext @@ -173,7 +175,11 @@ class ControlsFragment : GenericFragment() { override fun onStart() { super.onStart() - val screenWidth = requireActivity().windowManager.defaultDisplay.width.toFloat() + + val metrics = DisplayMetrics() + val display: Display = requireActivity().getWindowManager().getDefaultDisplay() + display.getRealMetrics(metrics) + val screenWidth = metrics.widthPixels.toFloat() numpadAnimator = ValueAnimator.ofFloat(screenWidth, 0f).apply { addUpdateListener { val value = it.animatedValue as Float diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt index d1c4d4c46..c322f4f01 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt @@ -59,6 +59,13 @@ class CallSettingsViewModel : GenericSettingsViewModel() { } val encryptionMandatory = MutableLiveData() + val fullScreenListener = object : SettingListenerStub() { + override fun onBoolValueChanged(newValue: Boolean) { + prefs.fullScreenCallUI = newValue + } + } + val fullScreen = MutableLiveData() + val overlayListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) { @@ -146,6 +153,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { initEncryptionList() encryptionMandatory.value = core.isMediaEncryptionMandatory + fullScreen.value = prefs.fullScreenCallUI overlay.value = prefs.showCallOverlay sipInfoDtmf.value = core.useInfoForDtmf rfc2833Dtmf.value = core.useRfc2833ForDtmf diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 1514e1bc7..d5690174d 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -206,6 +206,12 @@ class CorePreferences constructor(private val context: Context) { config.setBool("app", "call_right_away", value) } + var fullScreenCallUI: Boolean + get() = config.getBool("app", "full_screen_call", true) + set(value) { + config.setBool("app", "full_screen_call", value) + } + /* Assistant */ var firstStart: Boolean diff --git a/app/src/main/res/layout/settings_call_fragment.xml b/app/src/main/res/layout/settings_call_fragment.xml index 7891290f1..2b3c9a706 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -95,6 +95,12 @@ linphone:checked="@={viewModel.encryptionMandatory}" linphone:enabled="@{viewModel.encryptionIndex != 0}" android:visibility="@{viewModel.encryptionIndex != 0 ? View.VISIBLE : View.GONE}"/> + DTLS Media encryption mandatory + Full screen app while in call + Hides status and navigation bars Overlay call notification You will be asked to grant overlay permission Send out-band DTMFs (SIP INFO) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 84286c7b3..03ef672d7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -46,10 +46,16 @@ @drawable/button_background_light - + +