Fix toolbar coloring behavior.

This commit is contained in:
Alex Hart
2025-04-03 12:49:29 -03:00
committed by Greyson Parrelli
parent 117c2ad5dd
commit a3166a8c73
9 changed files with 28 additions and 11 deletions

View File

@@ -13,6 +13,7 @@ import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewTreeObserver import android.view.ViewTreeObserver
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
@@ -121,6 +122,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
private var onFirstRender = false private var onFirstRender = false
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
enableEdgeToEdge()
AppStartup.getInstance().onCriticalRenderEventStart() AppStartup.getInstance().onCriticalRenderEventStart()
super.onCreate(savedInstanceState, ready) super.onCreate(savedInstanceState, ready)
conversationListTabsViewModel conversationListTabsViewModel

View File

@@ -149,7 +149,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
binding.recycler.adapter = callLogAdapter binding.recycler.adapter = callLogAdapter
this.callLogAdapter = callLogAdapter this.callLogAdapter = callLogAdapter
requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(binding.recycler) requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(binding.recycler, viewLifecycleOwner)
binding.fab.setOnClickListener { binding.fab.setOnClickListener {
startActivity(NewCallActivity.createIntent(requireContext())) startActivity(NewCallActivity.createIntent(requireContext()))
} }

View File

@@ -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++) { for (int i = 0; i < chatFolderList.getChildCount(); i++) {
View child = chatFolderList.getChildAt(i); View child = chatFolderList.getChildAt(i);
if (child != null && child.isSelected()) { if (child != null && child.isSelected()) {

View File

@@ -7,6 +7,7 @@ import androidx.core.view.ViewCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.LifecycleOwner
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavDestination import androidx.navigation.NavDestination
import androidx.navigation.findNavController 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( Material3OnScrollHelper(
activity = requireActivity(), activity = requireActivity(),
views = listOf(), views = listOf(),
@@ -272,11 +273,12 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f
onSetToolbarColor = { onSetToolbarColor = {
toolbarViewModel.setToolbarColor(it) toolbarViewModel.setToolbarColor(it)
}, },
lifecycleOwner = viewLifecycleOwner setStatusBarColor = {},
lifecycleOwner = lifecycleOwner
).attach(recyclerView) ).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( Material3OnScrollHelper(
activity = requireActivity(), activity = requireActivity(),
views = listOf(chatFolders), views = listOf(chatFolders),
@@ -284,7 +286,8 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f
onSetToolbarColor = { onSetToolbarColor = {
toolbarViewModel.setToolbarColor(it) toolbarViewModel.setToolbarColor(it)
}, },
lifecycleOwner = viewLifecycleOwner, lifecycleOwner = lifecycleOwner,
setStatusBarColor = {},
setChatFolderColor = setChatFolder setChatFolderColor = setChatFolder
).attach(recyclerView) ).attach(recyclerView)
} }

View File

@@ -21,11 +21,15 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size 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.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -188,7 +192,9 @@ fun MainToolbar(
SearchToolbar( SearchToolbar(
state = state, state = state,
callback = callback, callback = callback,
modifier = Modifier.circularReveal(visibility, revealOffset) modifier = Modifier
.windowInsetsPadding(WindowInsets.statusBars)
.circularReveal(visibility, revealOffset)
) )
} }
} }

View File

@@ -1,8 +1,9 @@
package org.thoughtcrime.securesms.main package org.thoughtcrime.securesms.main
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
interface Material3OnScrollHelperBinder { interface Material3OnScrollHelperBinder {
fun bindScrollHelper(recyclerView: RecyclerView) fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner)
fun bindScrollHelper(recyclerView: RecyclerView, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit) fun bindScrollHelper(recyclerView: RecyclerView, lifecycleOwner: LifecycleOwner, chatFolders: RecyclerView, setChatFolder: (Int) -> Unit)
} }

View File

@@ -148,7 +148,7 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l
MyStoriesItem.register(adapter) MyStoriesItem.register(adapter)
ExpandHeader.register(adapter) ExpandHeader.register(adapter)
requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(recyclerView!!) requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(recyclerView!!, viewLifecycleOwner)
lifecycleDisposable.bindTo(viewLifecycleOwner) lifecycleDisposable.bindTo(viewLifecycleOwner)
emptyNotice = requireView().findViewById(R.id.empty_notice) emptyNotice = requireView().findViewById(R.id.empty_notice)

View File

@@ -59,6 +59,10 @@ open class Material3OnScrollHelper(
init { init {
lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver { lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
setColorImmediate()
}
override fun onDestroy(owner: LifecycleOwner) { override fun onDestroy(owner: LifecycleOwner) {
animator?.cancel() animator?.cancel()
setStatusBarColor(previousStatusBarColor) setStatusBarColor(previousStatusBarColor)

View File

@@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
@@ -133,7 +134,7 @@ fun AppScaffold(
Row { Row {
Column( Column(
modifier = Modifier.width(listWidth) modifier = Modifier.width(listWidth).navigationBarsPadding()
) { ) {
Box(modifier = Modifier.weight(1f)) { Box(modifier = Modifier.weight(1f)) {
listContent() listContent()