diff --git a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt index c9d63d9497..f34462b7e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt @@ -13,6 +13,7 @@ import android.os.Bundle import android.view.View import android.view.ViewTreeObserver import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels @@ -121,6 +122,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner private var onFirstRender = false override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { + enableEdgeToEdge() AppStartup.getInstance().onCriticalRenderEventStart() super.onCreate(savedInstanceState, ready) conversationListTabsViewModel diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt index 7cb77638ff..da75476e6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt @@ -149,7 +149,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal binding.recycler.adapter = callLogAdapter this.callLogAdapter = callLogAdapter - requireListener().bindScrollHelper(binding.recycler) + requireListener().bindScrollHelper(binding.recycler, viewLifecycleOwner) binding.fab.setOnClickListener { startActivity(NewCallActivity.createIntent(requireContext())) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 1c56ac8a42..d2026c6cf3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -457,7 +457,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode } })); - requireCallback().bindScrollHelper(list, chatFolderList, color -> { + requireCallback().bindScrollHelper(list, getViewLifecycleOwner(), chatFolderList, color -> { for (int i = 0; i < chatFolderList.getChildCount(); i++) { View child = chatFolderList.getChildAt(i); if (child != null && child.isSelected()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt index c51142969b..7eb5b1329e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt @@ -7,6 +7,7 @@ import androidx.core.view.ViewCompat import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels +import androidx.lifecycle.LifecycleOwner import androidx.navigation.NavController import androidx.navigation.NavDestination import androidx.navigation.findNavController @@ -264,7 +265,7 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f } } - override fun bindScrollHelper(recyclerView: RecyclerView) { + override fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner) { Material3OnScrollHelper( activity = requireActivity(), views = listOf(), @@ -272,11 +273,12 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f onSetToolbarColor = { toolbarViewModel.setToolbarColor(it) }, - lifecycleOwner = viewLifecycleOwner + setStatusBarColor = {}, + lifecycleOwner = lifecycleOwner ).attach(recyclerView) } - override fun bindScrollHelper(recyclerView: RecyclerView, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit) { + override fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit) { Material3OnScrollHelper( activity = requireActivity(), views = listOf(chatFolders), @@ -284,7 +286,8 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f onSetToolbarColor = { toolbarViewModel.setToolbarColor(it) }, - lifecycleOwner = viewLifecycleOwner, + lifecycleOwner = lifecycleOwner, + setStatusBarColor = {}, setChatFolderColor = setChatFolder ).attach(recyclerView) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt index 29e36092a4..ac9c6b1d73 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt @@ -21,11 +21,15 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.layout.windowInsetsTopHeight import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ExperimentalMaterial3Api @@ -188,7 +192,9 @@ fun MainToolbar( SearchToolbar( state = state, callback = callback, - modifier = Modifier.circularReveal(visibility, revealOffset) + modifier = Modifier + .windowInsetsPadding(WindowInsets.statusBars) + .circularReveal(visibility, revealOffset) ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/Material3OnScrollHelperBinder.kt b/app/src/main/java/org/thoughtcrime/securesms/main/Material3OnScrollHelperBinder.kt index 468ff24f1b..4ed52c3b12 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/Material3OnScrollHelperBinder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/Material3OnScrollHelperBinder.kt @@ -1,8 +1,9 @@ package org.thoughtcrime.securesms.main +import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.RecyclerView interface Material3OnScrollHelperBinder { - fun bindScrollHelper(recyclerView: RecyclerView) - fun bindScrollHelper(recyclerView: RecyclerView, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit) + fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner) + fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index e9e362ffeb..fc5c8d2c9c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -148,7 +148,7 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l MyStoriesItem.register(adapter) ExpandHeader.register(adapter) - requireListener().bindScrollHelper(recyclerView!!) + requireListener().bindScrollHelper(recyclerView!!, viewLifecycleOwner) lifecycleDisposable.bindTo(viewLifecycleOwner) emptyNotice = requireView().findViewById(R.id.empty_notice) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt index 14e61d8635..86b6af7b74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Material3OnScrollHelper.kt @@ -59,6 +59,10 @@ open class Material3OnScrollHelper( init { lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + setColorImmediate() + } + override fun onDestroy(owner: LifecycleOwner) { animator?.cancel() setStatusBarColor(previousStatusBarColor) diff --git a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffold.kt b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffold.kt index 900a4f2afe..befb809875 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffold.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffold.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.material3.Text import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo @@ -133,7 +134,7 @@ fun AppScaffold( Row { Column( - modifier = Modifier.width(listWidth) + modifier = Modifier.width(listWidth).navigationBarsPadding() ) { Box(modifier = Modifier.weight(1f)) { listContent()