System bar scrim improvements

pull/3823/head
Alex Baker 3 months ago
parent 655cdc1a9d
commit 5a1560e513

@ -123,10 +123,11 @@ class MainActivity : AppCompatActivity() {
lightScrim = Color.TRANSPARENT, lightScrim = Color.TRANSPARENT,
darkScrim = Color.TRANSPARENT darkScrim = Color.TRANSPARENT
), ),
navigationBarStyle = SystemBarStyle.auto( navigationBarStyle = if (theme.themeBase.isDarkTheme(this)) {
lightScrim = Color.TRANSPARENT, SystemBarStyle.dark(Color.TRANSPARENT)
darkScrim = Color.TRANSPARENT } else {
) SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT)
}
) )
setContent { setContent {

@ -22,7 +22,6 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.LAYOUT_DIRECTION_LTR import android.view.ViewGroup.LAYOUT_DIRECTION_LTR
import android.view.ViewGroup.MarginLayoutParams
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
@ -338,7 +337,9 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
right = endInset, right = endInset,
) )
binding.bottomAppBar.updatePadding(bottom = bottomInset) binding.bottomAppBar.updatePadding(bottom = bottomInset)
(binding.fab.layoutParams as MarginLayoutParams).bottomMargin = bottomInset / 2 val scrimLayoutParams = binding.systemBarScrim.layoutParams
scrimLayoutParams.height = bottomInset
binding.systemBarScrim.layoutParams = scrimLayoutParams
} }
@OptIn(ExperimentalPermissionsApi::class) @OptIn(ExperimentalPermissionsApi::class)
@ -365,6 +366,14 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
listViewModel.setFilter(filter) listViewModel.setFilter(filter)
(recyclerView.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false (recyclerView.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false
recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.layoutManager = LinearLayoutManager(context)
val baseFooterHeight = resources.getDimensionPixelSize(R.dimen.task_list_footer_height)
val additionalFabSpace = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
56f,
resources.displayMetrics
).toInt()
recyclerView.updatePadding(bottom = baseFooterHeight + additionalFabSpace)
lifecycleScope.launch { lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
listViewModel.updateBannerState() listViewModel.updateBannerState()
@ -394,6 +403,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
binding.bottomAppBar.performShow() binding.bottomAppBar.performShow()
} }
} }
val typedValue = TypedValue()
requireContext().theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true)
val scrimColor = typedValue.data
binding.systemBarScrim.setBackgroundColor((scrimColor and 0x00FFFFFF) or 0xCC000000.toInt()) // 80% opacity
with (binding.fab) { with (binding.fab) {
backgroundTintList = ColorStateList.valueOf(themeColor.primaryColor) backgroundTintList = ColorStateList.valueOf(themeColor.primaryColor)
imageTintList = ColorStateList.valueOf(themeColor.colorOnPrimary) imageTintList = ColorStateList.valueOf(themeColor.colorOnPrimary)

@ -20,6 +20,8 @@ import androidx.compose.foundation.layout.imePadding
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.systemBars import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsBottomHeight
import androidx.compose.foundation.layout.windowInsetsTopHeight
import androidx.compose.material3.DrawerState import androidx.compose.material3.DrawerState
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -121,6 +123,7 @@ fun HomeScreen(
) { ) {
val context = LocalContext.current val context = LocalContext.current
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
Box(modifier = Modifier.fillMaxSize()) {
TaskListDrawer( TaskListDrawer(
arrangement = if (state.menuQuery.isBlank()) Arrangement.Top else Arrangement.Bottom, arrangement = if (state.menuQuery.isBlank()) Arrangement.Top else Arrangement.Bottom,
filters = if (state.menuQuery.isNotEmpty()) state.searchItems else state.drawerItems, filters = if (state.menuQuery.isNotEmpty()) state.searchItems else state.drawerItems,
@ -208,9 +211,22 @@ fun HomeScreen(
) )
}, },
) )
SystemBarScrim(
modifier = Modifier
.windowInsetsTopHeight(WindowInsets.systemBars)
.align(Alignment.TopCenter)
)
SystemBarScrim(
modifier = Modifier
.windowInsetsBottomHeight(WindowInsets.systemBars)
.align(Alignment.BottomCenter),
)
}
} }
} }
) { ) {
Box(modifier = Modifier.fillMaxSize()) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
ListDetailPaneScaffold( ListDetailPaneScaffold(
directive = navigator.scaffoldDirective, directive = navigator.scaffoldDirective,
@ -288,6 +304,13 @@ fun HomeScreen(
} }
}, },
) )
SystemBarScrim(
modifier = Modifier
.windowInsetsTopHeight(WindowInsets.systemBars)
.align(Alignment.TopCenter),
)
}
} }
} }
} }

@ -0,0 +1,22 @@
package org.tasks.compose.home
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@Composable
fun SystemBarScrim(
modifier: Modifier = Modifier,
color: Color = MaterialTheme.colorScheme.background,
) {
Box(
modifier = Modifier
.fillMaxWidth()
.background(color.copy(alpha = 0.8f))
.then(modifier)
)
}

@ -68,6 +68,13 @@
</LinearLayout> </LinearLayout>
<View
android:id="@+id/systemBarScrim"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
android:visibility="visible" />
<com.google.android.material.bottomappbar.BottomAppBar <com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottomAppBar" android:id="@+id/bottomAppBar"
style="@style/Widget.Material3.BottomAppBar" style="@style/Widget.Material3.BottomAppBar"

@ -108,7 +108,7 @@ fun TaskListDrawer(
placeable.place(0, 0) placeable.place(0, 0)
} }
}, },
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.background,
scrollBehavior = bottomAppBarScrollBehavior scrollBehavior = bottomAppBarScrollBehavior
) { ) {
searchBar() searchBar()

Loading…
Cancel
Save