Migrating to edge to edge in preparation for Android 15
This commit is contained in:
@@ -30,6 +30,7 @@ import android.os.Build
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
@@ -72,6 +73,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.R)
|
@RequiresApi(Build.VERSION_CODES.R)
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
enableEdgeToEdge()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
Log.d("Lifetime Event", "MainActivity.onCreate")
|
Log.d("Lifetime Event", "MainActivity.onCreate")
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ import androidx.compose.foundation.Canvas
|
|||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.RowScope
|
import androidx.compose.foundation.layout.RowScope
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||||
|
import androidx.compose.material3.BottomAppBarDefaults.windowInsets
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@@ -43,11 +47,11 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import androidx.navigation.NavBackStackEntry
|
import androidx.navigation.NavBackStackEntry
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.amethyst.ui.theme.BottomTopHeight
|
|
||||||
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size0dp
|
import com.vitorpamplona.amethyst.ui.theme.Size0dp
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size10Modifier
|
import com.vitorpamplona.amethyst.ui.theme.Size10Modifier
|
||||||
@@ -126,11 +130,17 @@ private fun RenderBottomMenu(
|
|||||||
navEntryState: State<NavBackStackEntry?>,
|
navEntryState: State<NavBackStackEntry?>,
|
||||||
nav: (Route, Boolean) -> Unit,
|
nav: (Route, Boolean) -> Unit,
|
||||||
) {
|
) {
|
||||||
Column(modifier = BottomTopHeight) {
|
Column(
|
||||||
|
modifier =
|
||||||
|
Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.windowInsetsPadding(windowInsets)
|
||||||
|
.height(50.dp),
|
||||||
|
) {
|
||||||
HorizontalDivider(
|
HorizontalDivider(
|
||||||
thickness = DividerThickness,
|
thickness = DividerThickness,
|
||||||
)
|
)
|
||||||
NavigationBar(tonalElevation = Size0dp, containerColor = Color.Transparent) {
|
NavigationBar(tonalElevation = Size0dp) {
|
||||||
bottomNavigationItems.forEach { item ->
|
bottomNavigationItems.forEach { item ->
|
||||||
HasNewItemsIcon(item, accountViewModel, navEntryState, nav)
|
HasNewItemsIcon(item, accountViewModel, navEntryState, nav)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,8 +114,8 @@ fun AppNavigation(
|
|||||||
NavHost(
|
NavHost(
|
||||||
navController,
|
navController,
|
||||||
startDestination = Route.Home.route,
|
startDestination = Route.Home.route,
|
||||||
enterTransition = { fadeIn(animationSpec = tween(200)) },
|
enterTransition = { fadeIn(animationSpec = tween(400)) },
|
||||||
exitTransition = { fadeOut(animationSpec = tween(200)) },
|
exitTransition = { fadeOut(animationSpec = tween(400)) },
|
||||||
) {
|
) {
|
||||||
Route.Home.let { route ->
|
Route.Home.let { route ->
|
||||||
composable(
|
composable(
|
||||||
@@ -219,7 +219,6 @@ fun AppNavigation(
|
|||||||
|
|
||||||
composable(Route.BlockedUsers.route, content = { HiddenUsersScreen(accountViewModel, nav) })
|
composable(Route.BlockedUsers.route, content = { HiddenUsersScreen(accountViewModel, nav) })
|
||||||
composable(Route.Bookmarks.route, content = { BookmarkListScreen(accountViewModel, nav) })
|
composable(Route.Bookmarks.route, content = { BookmarkListScreen(accountViewModel, nav) })
|
||||||
|
|
||||||
composable(Route.Drafts.route, content = { DraftListScreen(accountViewModel, nav) })
|
composable(Route.Drafts.route, content = { DraftListScreen(accountViewModel, nav) })
|
||||||
|
|
||||||
Route.ContentDiscovery.let { route ->
|
Route.ContentDiscovery.let { route ->
|
||||||
|
|||||||
@@ -130,7 +130,6 @@ import com.vitorpamplona.amethyst.ui.stringRes
|
|||||||
import com.vitorpamplona.amethyst.ui.theme.BottomTopHeight
|
import com.vitorpamplona.amethyst.ui.theme.BottomTopHeight
|
||||||
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
||||||
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
|
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
|
||||||
import com.vitorpamplona.amethyst.ui.theme.HalfVertSpacer
|
|
||||||
import com.vitorpamplona.amethyst.ui.theme.HeaderPictureModifier
|
import com.vitorpamplona.amethyst.ui.theme.HeaderPictureModifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
|
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size22Modifier
|
import com.vitorpamplona.amethyst.ui.theme.Size22Modifier
|
||||||
@@ -987,7 +986,6 @@ fun FlexibleTopBarWithBackButton(
|
|||||||
navigationIcon = { IconButton(onClick = popBack) { ArrowBackIcon() } },
|
navigationIcon = { IconButton(onClick = popBack) { ArrowBackIcon() } },
|
||||||
actions = {},
|
actions = {},
|
||||||
)
|
)
|
||||||
Spacer(modifier = HalfVertSpacer)
|
|
||||||
HorizontalDivider(thickness = DividerThickness)
|
HorizontalDivider(thickness = DividerThickness)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -485,13 +485,7 @@ private fun MainScaffold(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(modifier = Modifier.padding(it)) {
|
||||||
modifier =
|
|
||||||
Modifier.padding(
|
|
||||||
top = it.calculateTopPadding(),
|
|
||||||
bottom = it.calculateBottomPadding(),
|
|
||||||
),
|
|
||||||
) {
|
|
||||||
AppNavigation(
|
AppNavigation(
|
||||||
homeFeedViewModel = homeFeedViewModel,
|
homeFeedViewModel = homeFeedViewModel,
|
||||||
repliesFeedViewModel = repliesFeedViewModel,
|
repliesFeedViewModel = repliesFeedViewModel,
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ private val DarkColorPalette =
|
|||||||
primary = Purple200,
|
primary = Purple200,
|
||||||
secondary = Teal200,
|
secondary = Teal200,
|
||||||
tertiary = Teal200,
|
tertiary = Teal200,
|
||||||
background = Color(0xFF000000),
|
background = Color(red = 0, green = 0, blue = 0),
|
||||||
surface = Color(0xFF000000),
|
surface = Color(red = 0, green = 0, blue = 0),
|
||||||
surfaceVariant = Color(red = 29, green = 26, blue = 34),
|
surfaceVariant = Color(red = 29, green = 26, blue = 34),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -451,14 +451,13 @@ fun AmethystTheme(
|
|||||||
if (!view.isInEditMode) {
|
if (!view.isInEditMode) {
|
||||||
SideEffect {
|
SideEffect {
|
||||||
val window = (view.context as Activity).window
|
val window = (view.context as Activity).window
|
||||||
val insetsController = WindowCompat.getInsetsController(window, view)
|
val insets = WindowCompat.getInsetsController(window, view)
|
||||||
if (darkTheme) {
|
|
||||||
|
insets.isAppearanceLightNavigationBars = !darkTheme
|
||||||
|
insets.isAppearanceLightStatusBars = !darkTheme
|
||||||
|
|
||||||
window.statusBarColor = colors.background.toArgb()
|
window.statusBarColor = colors.background.toArgb()
|
||||||
} else {
|
|
||||||
window.statusBarColor = colors.primary.toArgb()
|
|
||||||
}
|
|
||||||
window.navigationBarColor = colors.background.toArgb()
|
window.navigationBarColor = colors.background.toArgb()
|
||||||
insetsController.isAppearanceLightNavigationBars = !darkTheme
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<style name="Theme.Amethyst" parent="Theme.AppCompat.Light.NoActionBar">
|
<style name="Theme.Amethyst" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
||||||
<item name="android:statusBarColor">@color/purple_700</item>
|
<item name="android:statusBarColor">@color/purple_700</item>
|
||||||
<item name="android:windowBackground">@color/black</item>
|
<item name="android:windowBackground">@color/black</item>
|
||||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>
|
<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>
|
||||||
|
|||||||
Reference in New Issue
Block a user