Skip to content

Commit

Permalink
Add drawer to all main tabs and general drawer changes (#991)
Browse files Browse the repository at this point in the history
* Add drawer to all main tabs

* Add drawer item changes

* Update search icon

* Fix duplicate stuff

* Fix edgecase

* Remove annotation

* Fix formatting

* Fix issue due conflicts

* Fix changes
  • Loading branch information
MV-GH authored Jul 10, 2023
1 parent 59a5cbb commit 3d79c6d
Show file tree
Hide file tree
Showing 30 changed files with 703 additions and 773 deletions.
11 changes: 9 additions & 2 deletions app/src/main/java/com/jerboa/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import android.widget.Toast
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.material3.DrawerValue
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
Expand Down Expand Up @@ -94,7 +95,6 @@ class MainActivity : AppCompatActivity() {
AppSettingsViewModelFactory((application as JerboaApplication).appSettingsRepository)
}

@OptIn(ExperimentalAnimationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down Expand Up @@ -148,6 +148,8 @@ class MainActivity : AppCompatActivity() {
else -> {}
}

val drawerState = rememberDrawerState(DrawerValue.Closed)

NavHost(
route = Route.Graph.ROOT,
navController = navController,
Expand Down Expand Up @@ -177,6 +179,7 @@ class MainActivity : AppCompatActivity() {
siteViewModel = siteViewModel,
appSettingsViewModel = appSettingsViewModel,
appSettings = appSettings,
drawerState = drawerState,
)
}

Expand Down Expand Up @@ -306,6 +309,7 @@ class MainActivity : AppCompatActivity() {
useCustomTabs = appSettings.useCustomTabs,
usePrivateTabs = appSettings.usePrivateTabs,
blurNSFW = appSettings.blurNSFW,
drawerState = drawerState,
)
}

Expand Down Expand Up @@ -337,6 +341,7 @@ class MainActivity : AppCompatActivity() {
useCustomTabs = appSettings.useCustomTabs,
usePrivateTabs = appSettings.usePrivateTabs,
blurNSFW = appSettings.blurNSFW,
drawerState = drawerState,
)
}

Expand All @@ -356,6 +361,7 @@ class MainActivity : AppCompatActivity() {
siteViewModel = siteViewModel,
selectMode = args.select,
blurNSFW = appSettings.blurNSFW,
drawerState = drawerState,
)
}

Expand Down Expand Up @@ -408,6 +414,7 @@ class MainActivity : AppCompatActivity() {
accountViewModel = accountViewModel,
siteViewModel = siteViewModel,
blurNSFW = appSettings.blurNSFW,
drawerState = drawerState,
)
}

Expand Down
2 changes: 0 additions & 2 deletions app/src/main/java/com/jerboa/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.pager.PagerState
import androidx.compose.material3.DrawerState
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TabPosition
import androidx.compose.runtime.Stable
import androidx.compose.runtime.mutableStateListOf
Expand Down Expand Up @@ -470,7 +469,6 @@ val imageRegex = Regex(
)

// Todo is the scope.launch still necessary?
@OptIn(ExperimentalMaterial3Api::class)
fun closeDrawer(
scope: CoroutineScope,
drawerState: DrawerState,
Expand Down
118 changes: 40 additions & 78 deletions app/src/main/java/com/jerboa/ui/components/common/AppBars.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,8 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Bookmarks
import androidx.compose.material.icons.filled.Email
import androidx.compose.material.icons.filled.Home
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.KeyboardArrowUp
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
Expand Down Expand Up @@ -53,7 +48,7 @@ import com.jerboa.loginFirstToast
import com.jerboa.scrollToNextParentComment
import com.jerboa.scrollToPreviousParentComment
import com.jerboa.siFormat
import com.jerboa.ui.components.home.BottomNavTab
import com.jerboa.ui.components.home.NavTab
import com.jerboa.ui.components.person.PersonProfileLink
import com.jerboa.ui.theme.*
import kotlinx.coroutines.CoroutineScope
Expand Down Expand Up @@ -85,85 +80,53 @@ fun SimpleTopAppBar(

@Composable
fun BottomAppBarAll(
selectedTab: BottomNavTab,
onSelect: (BottomNavTab) -> Unit,
selectedTab: NavTab,
onSelect: (NavTab) -> Unit,
unreadCounts: Int,
showTextDescriptionsInNavbar: Boolean,
showBottomNav: Boolean? = true,
) {
if (showBottomNav == true) {
// Check for preview mode
if (LocalContext.current is Activity) {
val window = (LocalContext.current as Activity).window
val colorScheme = MaterialTheme.colorScheme
// Check for preview mode
if (LocalContext.current is Activity) {
val window = (LocalContext.current as Activity).window
val colorScheme = MaterialTheme.colorScheme

DisposableEffect(Unit) {
window.navigationBarColor = colorScheme.surfaceColorAtElevation(3.dp).toArgb()
DisposableEffect(Unit) {
window.navigationBarColor = colorScheme.surfaceColorAtElevation(3.dp).toArgb()

onDispose {
window.navigationBarColor = colorScheme.background.toArgb()
}
onDispose {
window.navigationBarColor = colorScheme.background.toArgb()
}
}
}

NavigationBar {
for (tab in BottomNavTab.values()) {
val selected = tab == selectedTab
NavigationBarItem(
icon = {
InboxIconAndBadge(
iconBadgeCount = if (tab == BottomNavTab.Inbox) unreadCounts else null,
icon = if (selected) {
when (tab) {
BottomNavTab.Home -> Icons.Filled.Home
BottomNavTab.Search -> Icons.Filled.Search
BottomNavTab.Inbox -> Icons.Filled.Email
BottomNavTab.Saved -> Icons.Filled.Bookmarks
BottomNavTab.Profile -> Icons.Filled.Person
}
} else {
when (tab) {
BottomNavTab.Home -> Icons.Outlined.Home
BottomNavTab.Search -> Icons.Outlined.Search
BottomNavTab.Inbox -> Icons.Outlined.Email
BottomNavTab.Saved -> Icons.Outlined.Bookmarks
BottomNavTab.Profile -> Icons.Outlined.Person
}
},
contentDescription = stringResource(
when (tab) {
BottomNavTab.Home -> R.string.bottomBar_home
BottomNavTab.Search -> R.string.bottomBar_search
BottomNavTab.Inbox -> R.string.bottomBar_inbox
BottomNavTab.Saved -> R.string.bottomBar_bookmarks
BottomNavTab.Profile -> R.string.bottomBar_profile
},
),
NavigationBar {
for (tab in NavTab.values()) {
val selected = tab == selectedTab
NavigationBarItem(
icon = {
InboxIconAndBadge(
iconBadgeCount = if (tab == NavTab.Inbox) unreadCounts else null,
icon = if (selected) {
tab.iconFilled
} else {
tab.iconOutlined
},
contentDescription = stringResource(tab.contentDescriptionId),
)
},
label = {
if (showTextDescriptionsInNavbar) {
Text(
text = stringResource(tab.textId),
color = MaterialTheme.colorScheme.onSurface,
)
},
label =
{
if (showTextDescriptionsInNavbar) {
Text(
text = stringResource(
when (tab) {
BottomNavTab.Home -> R.string.bottomBar_label_home
BottomNavTab.Search -> R.string.bottomBar_label_search
BottomNavTab.Inbox -> R.string.bottomBar_label_inbox
BottomNavTab.Saved -> R.string.bottomBar_label_bookmarks
BottomNavTab.Profile -> R.string.bottomBar_label_profile
},
),
color = MaterialTheme.colorScheme.onSurface,
)
}
},
selected = selected,
onClick = {
onSelect(tab)
},
)
}
}
},
selected = selected,
onClick = {
onSelect(tab)
},
)
}
}
}
Expand All @@ -172,11 +135,10 @@ fun BottomAppBarAll(
@Composable
fun BottomAppBarAllPreview() {
BottomAppBarAll(
selectedTab = BottomNavTab.Home,
selectedTab = NavTab.Home,
onSelect = {},
unreadCounts = 30,
showTextDescriptionsInNavbar = true,
showBottomNav = true,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ fun IconAndTextDrawerItem(
onClick: () -> Unit,
more: Boolean = false,
highlight: Boolean = false,
contentDescription: String? = null,
) {
val spacingMod = Modifier
.padding(LARGE_PADDING)
Expand All @@ -57,7 +58,7 @@ fun IconAndTextDrawerItem(
iconBadgeCount = iconBadgeCount,
modifier = spacingMod.size(DRAWER_ITEM_SPACING),
icon = ico,
contentDescription = null,
contentDescription = contentDescription,
tint = MaterialTheme.colorScheme.onSurface,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,17 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
import com.jerboa.R
import com.jerboa.datatypes.sampleCommunityView
import com.jerboa.datatypes.types.*
import com.jerboa.ui.components.common.DefaultBackButton
import com.jerboa.ui.components.common.simpleVerticalScrollbar
import com.jerboa.ui.components.community.CommunityLinkLarger
import com.jerboa.ui.components.community.CommunityLinkLargerWithUserCount

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CommunityListHeader(
navController: NavController = rememberNavController(),
openDrawer: () -> Unit,
search: String,
onSearchChange: (search: String) -> Unit,
) {
Expand All @@ -56,7 +53,14 @@ fun CommunityListHeader(
)
}
},
navigationIcon = { DefaultBackButton(navController) },
navigationIcon = {
IconButton(onClick = openDrawer) {
Icon(
Icons.Outlined.Menu,
contentDescription = stringResource(R.string.home_menu),
)
}
},
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.jerboa.ui.components.community.list
import android.util.Log
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.DrawerState
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
Expand Down Expand Up @@ -47,6 +48,7 @@ fun CommunityListActivity(
selectMode: Boolean = false,
siteViewModel: SiteViewModel,
blurNSFW: Boolean,
drawerState: DrawerState,
) {
Log.d("jerboa", "got to community list activity")

Expand All @@ -66,7 +68,11 @@ fun CommunityListActivity(
Scaffold(
topBar = {
CommunityListHeader(
navController = navController,
openDrawer = {
scope.launch {
drawerState.open()
}
},
search = search,
onSearchChange = {
search = it
Expand Down
Loading

0 comments on commit 3d79c6d

Please sign in to comment.