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.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

View file

@ -149,7 +149,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal
binding.recycler.adapter = callLogAdapter
this.callLogAdapter = callLogAdapter
requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(binding.recycler)
requireListener<Material3OnScrollHelperBinder>().bindScrollHelper(binding.recycler, viewLifecycleOwner)
binding.fab.setOnClickListener {
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++) {
View child = chatFolderList.getChildAt(i);
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.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)
}

View file

@ -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)
)
}
}

View file

@ -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)
}

View file

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

View file

@ -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)

View file

@ -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()