From a95c6fb287f7f22db9c80bf84dd649c03a366d07 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 29 May 2024 11:50:42 +0200 Subject: [PATCH] Android 15 will force edge-to-edge, starting supporting it now --- app/src/main/AndroidManifest.xml | 5 ++ .../java/org/linphone/ui/GenericActivity.kt | 3 - .../ui/assistant/AssistantActivity.kt | 19 +++++- .../java/org/linphone/ui/call/CallActivity.kt | 47 +++++++++------ .../AudioDevicesMenuDialogFragment.kt | 4 -- .../ui/call/viewmodel/CallsViewModel.kt | 12 ---- .../ui/file_viewer/FileViewerActivity.kt | 3 +- .../ui/file_viewer/MediaViewerActivity.kt | 12 +++- .../java/org/linphone/ui/main/MainActivity.kt | 58 +++++++++++++------ .../fragment/ConversationsListFragment.kt | 4 +- ...EndToEndEncryptionDetailsDialogFragment.kt | 4 -- ...UnsafeConversationDetailsDialogFragment.kt | 4 -- .../contacts/fragment/ContactsListFragment.kt | 4 +- .../ui/main/fragment/AbstractMainFragment.kt | 10 ++-- .../ui/main/fragment/DrawerMenuFragment.kt | 1 + .../history/fragment/HistoryListFragment.kt | 4 +- .../fragment/MeetingWaitingRoomFragment.kt | 14 ----- .../meetings/fragment/MeetingsListFragment.kt | 4 +- .../ui/main/viewmodel/MainViewModel.kt | 9 +-- .../linphone/ui/welcome/WelcomeActivity.kt | 11 ++++ app/src/main/res/layout/call_activity.xml | 2 +- .../call_activity_other_calls_top_bar.xml | 6 +- app/src/main/res/layout/main_activity.xml | 5 +- .../main_activity_notification_top_bar.xml | 9 ++- app/src/main/res/values-night-v33/themes.xml | 1 - app/src/main/res/values-night/themes.xml | 6 +- app/src/main/res/values/dimen.xml | 2 +- app/src/main/res/values/themes.xml | 29 +++------- 28 files changed, 155 insertions(+), 137 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 725570566..71102cd00 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -106,26 +106,31 @@ + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + val keyboard = windowInsets.getInsets(WindowInsetsCompat.Type.ime()) + v.updatePadding( + insets.left, + insets.top, + insets.right, + max(insets.bottom, keyboard.bottom) + ) + WindowInsetsCompat.CONSUMED + } + coreContext.postOnCoreThread { core -> if (core.accountList.isEmpty()) { Log.i("$TAG No account configured, disabling back gesture") diff --git a/app/src/main/java/org/linphone/ui/call/CallActivity.kt b/app/src/main/java/org/linphone/ui/call/CallActivity.kt index 5e2272130..d651e26a7 100644 --- a/app/src/main/java/org/linphone/ui/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/ui/call/CallActivity.kt @@ -24,13 +24,17 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.res.Resources +import android.graphics.Color import android.os.Bundle import android.os.PowerManager +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.UiThread -import androidx.core.view.WindowCompat +import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -39,6 +43,7 @@ import androidx.window.layout.FoldingFeature import androidx.window.layout.WindowInfoTracker import androidx.window.layout.WindowLayoutInfo import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import kotlin.math.max import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.linphone.LinphoneApplication.Companion.coreContext @@ -116,8 +121,30 @@ class CallActivity : GenericActivity() { } override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT) { + true // Force dark mode + } + ) super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.call_activity) + binding.lifecycleOwner = this + setUpToastsArea(binding.toastsArea) + + ViewCompat.setOnApplyWindowInsetsListener(binding.otherCallsTopBar.root) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(0, insets.top, 0, 0) + WindowInsetsCompat.CONSUMED + } + + ViewCompat.setOnApplyWindowInsetsListener(binding.callNavContainer) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + val keyboard = windowInsets.getInsets(WindowInsetsCompat.Type.ime()) + v.updatePadding(insets.left, 0, insets.right, max(insets.bottom, keyboard.bottom)) + WindowInsetsCompat.CONSUMED + } + val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager if (!powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) { Log.w("$TAG PROXIMITY_SCREEN_OFF_WAKE_LOCK isn't supported on this device!") @@ -128,11 +155,6 @@ class CallActivity : GenericActivity() { "$packageName;proximity_sensor" ) - binding = DataBindingUtil.setContentView(this, R.layout.call_activity) - binding.lifecycleOwner = this - - setUpToastsArea(binding.toastsArea) - lifecycleScope.launch(Dispatchers.Main) { WindowInfoTracker .getOrCreate(this@CallActivity) @@ -269,17 +291,6 @@ class CallActivity : GenericActivity() { } } - callsViewModel.changeSystemTopBarColorToMultipleCallsEvent.observe(this) { - it.consume { useInCallColor -> - val color = if (useInCallColor) { - getColor(R.color.success_500) - } else { - getColor(R.color.main1_500) - } - window.statusBarColor = color - } - } - sharedViewModel.toggleFullScreenEvent.observe(this) { it.consume { hide -> hideUI(hide) @@ -442,7 +453,6 @@ class CallActivity : GenericActivity() { Log.i("$TAG Switching full screen mode to ${if (hide) "ON" else "OFF"}") val windowInsetsCompat = WindowInsetsControllerCompat(window, window.decorView) if (hide) { - WindowCompat.setDecorFitsSystemWindows(window, false) windowInsetsCompat.let { it.hide(WindowInsetsCompat.Type.systemBars()) it.systemBarsBehavior = @@ -450,7 +460,6 @@ class CallActivity : GenericActivity() { } } else { windowInsetsCompat.show(WindowInsetsCompat.Type.systemBars()) - WindowCompat.setDecorFitsSystemWindows(window, true) } } diff --git a/app/src/main/java/org/linphone/ui/call/fragment/AudioDevicesMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/AudioDevicesMenuDialogFragment.kt index 7816fe9d9..6d3ebdc7f 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/AudioDevicesMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/AudioDevicesMenuDialogFragment.kt @@ -29,7 +29,6 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.R import org.linphone.databinding.CallAudioDevicesBottomSheetBinding import org.linphone.ui.call.model.AudioDeviceModel @@ -57,9 +56,6 @@ class AudioDevicesMenuDialogFragment( // Makes sure all menu entries are visible, // required for landscape mode (otherwise only first item is visible) dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED - - // Force this navigation bar color - dialog.window?.navigationBarColor = requireContext().getColor(R.color.gray_600) return dialog } diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt index 6c3b80096..d2d8fe85b 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt @@ -63,10 +63,6 @@ class CallsViewModel @UiThread constructor() : GenericViewModel() { MutableLiveData>() } - val changeSystemTopBarColorToMultipleCallsEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - private val coreListener = object : CoreListenerStub() { @WorkerThread override fun onCallStateChanged( @@ -270,9 +266,6 @@ class CallsViewModel @UiThread constructor() : GenericViewModel() { ) callsTopBarStatus.postValue("") // TODO: improve ? } - - Log.i("$TAG At least one other call, asking activity to change status bar color") - changeSystemTopBarColorToMultipleCallsEvent.postValue(Event(true)) } else { if (core.callsNb == 1) { callsTopBarIcon.postValue(R.drawable.phone) @@ -291,11 +284,6 @@ class CallsViewModel @UiThread constructor() : GenericViewModel() { } callsTopBarStatus.postValue(LinphoneUtils.callStateToString(call.state)) } - - Log.i( - "$TAG No more than one call, asking activity to change status bar color back to primary" - ) - changeSystemTopBarColorToMultipleCallsEvent.postValue(Event(false)) } } } diff --git a/app/src/main/java/org/linphone/ui/file_viewer/FileViewerActivity.kt b/app/src/main/java/org/linphone/ui/file_viewer/FileViewerActivity.kt index 85f617cb1..77186f8b6 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/FileViewerActivity.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/FileViewerActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.util.DisplayMetrics +import androidx.activity.enableEdgeToEdge import androidx.annotation.UiThread import androidx.core.content.FileProvider import androidx.databinding.DataBindingUtil @@ -42,8 +43,8 @@ class FileViewerActivity : GenericActivity() { } override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) - window.navigationBarColor = getColor(R.color.gray_900) binding = DataBindingUtil.setContentView(this, R.layout.file_viewer_activity) binding.lifecycleOwner = this diff --git a/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt b/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt index 21c8d91a2..a57c8db0e 100644 --- a/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt +++ b/app/src/main/java/org/linphone/ui/file_viewer/MediaViewerActivity.kt @@ -3,8 +3,12 @@ package org.linphone.ui.file_viewer import android.content.Intent import android.net.Uri import android.os.Bundle +import androidx.activity.enableEdgeToEdge import androidx.annotation.UiThread import androidx.core.content.FileProvider +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -49,13 +53,19 @@ class MediaViewerActivity : GenericActivity() { } override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) - window.navigationBarColor = getColor(R.color.gray_900) binding = DataBindingUtil.setContentView(this, R.layout.file_media_viewer_activity) binding.lifecycleOwner = this setUpToastsArea(binding.toastsArea) + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(insets.left, insets.top, insets.right, insets.bottom) + WindowInsetsCompat.CONSUMED + } + viewModel = ViewModelProvider(this)[MediaListViewModel::class.java] binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/ui/main/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt index 73f79cdb8..bc658112b 100644 --- a/app/src/main/java/org/linphone/ui/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt @@ -25,15 +25,22 @@ import android.app.Dialog import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.graphics.Color import android.net.Uri import android.os.Bundle import android.os.Parcelable import android.view.Gravity +import android.view.ViewGroup import android.view.ViewTreeObserver +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge import androidx.annotation.UiThread import androidx.car.app.connection.CarConnection import androidx.core.os.bundleOf import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -41,6 +48,7 @@ import androidx.navigation.NavController import androidx.navigation.NavDestination import androidx.navigation.NavOptions import androidx.navigation.findNavController +import kotlin.math.max import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -103,13 +111,42 @@ class MainActivity : GenericActivity() { // Must be done before the setContentView installSplashScreen() + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT) { + true // Force dark mode to always have white icons in status bar + } + ) + super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.main_activity) binding.lifecycleOwner = this - setUpToastsArea(binding.toastsArea) + ViewCompat.setOnApplyWindowInsetsListener(binding.inCallTopBar.root) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(0, insets.top, 0, 0) + WindowInsetsCompat.CONSUMED + } + + ViewCompat.setOnApplyWindowInsetsListener(binding.mainNavContainer) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + val keyboard = windowInsets.getInsets(WindowInsetsCompat.Type.ime()) + v.updatePadding(insets.left, 0, insets.right, max(insets.bottom, keyboard.bottom)) + WindowInsetsCompat.CONSUMED + } + + ViewCompat.setOnApplyWindowInsetsListener(binding.drawerMenuContent) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + val mlp = v.layoutParams as ViewGroup.MarginLayoutParams + mlp.leftMargin = insets.left + mlp.topMargin = insets.top + mlp.rightMargin = insets.right + mlp.bottomMargin = insets.bottom + v.layoutParams = mlp + WindowInsetsCompat.CONSUMED + } + while (!coreContext.isReady()) { Thread.sleep(50) } @@ -123,23 +160,6 @@ class MainActivity : GenericActivity() { ViewModelProvider(this)[SharedMainViewModel::class.java] } - viewModel.changeSystemTopBarColorEvent.observe(this) { - it.consume { mode -> - window.statusBarColor = when (mode) { - MainViewModel.SINGLE_CALL, MainViewModel.MULTIPLE_CALLS -> { - getColor(R.color.success_500) - } - MainViewModel.NETWORK_NOT_REACHABLE, MainViewModel.NON_DEFAULT_ACCOUNT_NOT_CONNECTED -> { - getColor(R.color.danger_500) - } - MainViewModel.NON_DEFAULT_ACCOUNT_NOTIFICATIONS -> { - getColor(R.color.main2_500) - } - else -> getColor(R.color.main1_500) - } - } - } - viewModel.goBackToCallEvent.observe(this) { it.consume { coreContext.showCallActivity() @@ -333,7 +353,7 @@ class MainActivity : GenericActivity() { } fun findNavController(): NavController { - return findNavController(R.id.main_nav_host_fragment) + return findNavController(R.id.main_nav_container) } fun loadContacts() { diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt index 7bf1cd67d..5b85e010c 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt @@ -299,8 +299,8 @@ class ConversationsListFragment : AbstractMainFragment() { setViewModel(listViewModel) initViews( binding.slidingPaneLayout, - binding.topBar.search, - binding.bottomNavBar.root, + binding.topBar, + binding.bottomNavBar, R.id.conversationsListFragment ) diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt index 55f5f7441..482491b0d 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt @@ -29,7 +29,6 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.R import org.linphone.databinding.ChatConversationE2eDetailsBottomSheetBinding @UiThread @@ -55,9 +54,6 @@ class EndToEndEncryptionDetailsDialogFragment( // Makes sure all menu entries are visible, // required for landscape mode (otherwise only first item is visible) dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED - - // Force this navigation bar color - dialog.window?.navigationBarColor = requireContext().getColor(R.color.gray_600) return dialog } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt index 30de06821..597120f99 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt @@ -29,7 +29,6 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.R import org.linphone.databinding.ChatConversationUnsafeDetailsBottomSheetBinding @UiThread @@ -55,9 +54,6 @@ class UnsafeConversationDetailsDialogFragment( // Makes sure all menu entries are visible, // required for landscape mode (otherwise only first item is visible) dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED - - // Force this navigation bar color - dialog.window?.navigationBarColor = requireContext().getColor(R.color.gray_600) return dialog } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt index bf454c040..1700b92b0 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt @@ -206,8 +206,8 @@ class ContactsListFragment : AbstractMainFragment() { setViewModel(listViewModel) initViews( binding.slidingPaneLayout, - binding.topBar.search, - binding.bottomNavBar.root, + binding.topBar, + binding.bottomNavBar, R.id.contactsListFragment ) } diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt index 179b59bf3..827ce3322 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt @@ -32,6 +32,8 @@ import androidx.slidingpanelayout.widget.SlidingPaneLayout import com.google.android.material.textfield.TextInputLayout import org.linphone.R import org.linphone.core.tools.Log +import org.linphone.databinding.BottomNavBarBinding +import org.linphone.databinding.TopBarBinding import org.linphone.ui.main.MainActivity import org.linphone.ui.main.chat.fragment.ConversationsListFragmentDirections import org.linphone.ui.main.contacts.fragment.ContactsListFragmentDirections @@ -142,13 +144,13 @@ abstract class AbstractMainFragment : GenericMainFragment() { fun initViews( slidingPane: SlidingPaneLayout, - searchBar: TextInputLayout, - navBar: View, + topBar: TopBarBinding, + navBar: BottomNavBarBinding, @IdRes fragmentId: Int ) { initSlidingPane(slidingPane) - initSearchBar(searchBar) - initBottomNavBar(navBar) + initSearchBar(topBar.search) + initBottomNavBar(navBar.root) initNavigation(fragmentId) } diff --git a/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt index 80244bbb0..fe664d75f 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/DrawerMenuFragment.kt @@ -25,6 +25,7 @@ import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams import android.widget.PopupWindow import androidx.annotation.UiThread import androidx.databinding.DataBindingUtil diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt index 8798edbe3..5e54d7a2e 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt @@ -243,8 +243,8 @@ class HistoryListFragment : AbstractMainFragment() { setViewModel(listViewModel) initViews( binding.slidingPaneLayout, - binding.topBar.search, - binding.bottomNavBar.root, + binding.topBar, + binding.bottomNavBar, R.id.historyListFragment ) } diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt index 745dbc964..b195c494b 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt @@ -69,8 +69,6 @@ class MeetingWaitingRoomFragment : GenericMainFragment() { private var bottomSheetDialog: BottomSheetDialogFragment? = null - private var navBarDefaultColor: Int = -1 - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -88,8 +86,6 @@ class MeetingWaitingRoomFragment : GenericMainFragment() { postponeEnterTransition() super.onViewCreated(view, savedInstanceState) - navBarDefaultColor = requireActivity().window.navigationBarColor - binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this)[MeetingWaitingRoomViewModel::class.java] @@ -153,9 +149,6 @@ class MeetingWaitingRoomFragment : GenericMainFragment() { } override fun onResume() { - // Force this navigation bar color - requireActivity().window.navigationBarColor = requireContext().getColor(R.color.gray_900) - super.onResume() if (isCameraPermissionGranted()) { @@ -180,13 +173,6 @@ class MeetingWaitingRoomFragment : GenericMainFragment() { super.onPause() } - override fun onDestroy() { - // Reset default navigation bar color - requireActivity().window.navigationBarColor = navBarDefaultColor - - super.onDestroy() - } - private fun isCameraPermissionGranted(): Boolean { val granted = ContextCompat.checkSelfPermission( requireContext(), diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt index 8a7782b9f..b82ed7341 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt @@ -205,8 +205,8 @@ class MeetingsListFragment : AbstractMainFragment() { setViewModel(listViewModel) initViews( binding.slidingPaneLayout, - binding.topBar.search, - binding.bottomNavBar.root, + binding.topBar, + binding.bottomNavBar, R.id.meetingsListFragment ) } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/MainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/MainViewModel.kt index 3b8fb4a6e..086b03206 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/MainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/MainViewModel.kt @@ -76,10 +76,6 @@ class MainViewModel @UiThread constructor() : ViewModel() { MutableLiveData>() } - val changeSystemTopBarColorEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - val goBackToCallEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -449,7 +445,6 @@ class MainViewModel @UiThread constructor() : ViewModel() { if (maxedPriorityAlert == null) { Log.i("$TAG No alert to display") showAlert.postValue(false) - changeSystemTopBarColorEvent.postValue(Event(NONE)) maxAlertLevel.postValue(NONE) } else { val type = maxedPriorityAlert.first @@ -470,8 +465,7 @@ class MainViewModel @UiThread constructor() : ViewModel() { alertLabel.postValue(label) if (showAlert.value == true) { - Log.i("$TAG Alert top-bar is already visible, updating color if needed") - changeSystemTopBarColorEvent.postValue(Event(type)) + Log.i("$TAG Alert top-bar is already visible") } else { Log.i("$TAG Alert top-bar is currently invisible, starting job to display it") coreContext.postOnMainThread { @@ -481,7 +475,6 @@ class MainViewModel @UiThread constructor() : ViewModel() { delay(delayMs) withContext(Dispatchers.Main) { showAlert.value = true - changeSystemTopBarColorEvent.value = Event(type) } } } diff --git a/app/src/main/java/org/linphone/ui/welcome/WelcomeActivity.kt b/app/src/main/java/org/linphone/ui/welcome/WelcomeActivity.kt index 1dba5e4c9..8dddeaa27 100644 --- a/app/src/main/java/org/linphone/ui/welcome/WelcomeActivity.kt +++ b/app/src/main/java/org/linphone/ui/welcome/WelcomeActivity.kt @@ -23,6 +23,10 @@ import android.content.Intent import android.os.Bundle import android.view.View import androidx.activity.addCallback +import androidx.activity.enableEdgeToEdge +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity @@ -51,6 +55,7 @@ class WelcomeActivity : GenericActivity() { private val pageChangedCallback = PageChangedCallback() override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) // Disable back gesture / button @@ -59,6 +64,12 @@ class WelcomeActivity : GenericActivity() { binding = DataBindingUtil.setContentView(this, R.layout.welcome_activity) binding.lifecycleOwner = this + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding(insets.left, insets.top, insets.right, insets.bottom) + WindowInsetsCompat.CONSUMED + } + viewPager = binding.pager val pagerAdapter = ScreenSlidePagerAdapter(this) viewPager.adapter = pagerAdapter diff --git a/app/src/main/res/layout/call_activity.xml b/app/src/main/res/layout/call_activity.xml index 53e2fe6a6..937629afe 100644 --- a/app/src/main/res/layout/call_activity.xml +++ b/app/src/main/res/layout/call_activity.xml @@ -28,7 +28,7 @@ layout="@layout/call_activity_other_calls_top_bar" android:layout_width="0dp" android:layout_height="wrap_content" - android:visibility="@{callsViewModel.callsCount > 1 || callsViewModel.showTopBar ? View.VISIBLE : View.GONE, default=gone}" + android:visibility="@{callViewModel.fullScreenMode ? View.GONE : View.VISIBLE}" app:viewModel="@{callsViewModel}" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/call_activity_other_calls_top_bar.xml b/app/src/main/res/layout/call_activity_other_calls_top_bar.xml index 470830395..c1940276b 100644 --- a/app/src/main/res/layout/call_activity_other_calls_top_bar.xml +++ b/app/src/main/res/layout/call_activity_other_calls_top_bar.xml @@ -13,7 +13,8 @@ diff --git a/app/src/main/res/layout/main_activity_notification_top_bar.xml b/app/src/main/res/layout/main_activity_notification_top_bar.xml index eb5e44a4f..7660015e9 100644 --- a/app/src/main/res/layout/main_activity_notification_top_bar.xml +++ b/app/src/main/res/layout/main_activity_notification_top_bar.xml @@ -13,7 +13,8 @@ diff --git a/app/src/main/res/values-night-v33/themes.xml b/app/src/main/res/values-night-v33/themes.xml index c11068bc4..8148be937 100644 --- a/app/src/main/res/values-night-v33/themes.xml +++ b/app/src/main/res/values-night-v33/themes.xml @@ -1,6 +1,5 @@ - \ No newline at end of file