Skip to content

Commit

Permalink
Replace messages tab with profile
Browse files Browse the repository at this point in the history
  • Loading branch information
wingio committed Nov 29, 2023
1 parent b28a382 commit e66e5d4
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 45 deletions.
68 changes: 36 additions & 32 deletions app/src/main/java/xyz/wingio/dimett/ui/screens/main/MainScreen.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package xyz.wingio.dimett.ui.screens.main

import androidx.activity.compose.BackHandler
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
Expand Down Expand Up @@ -42,6 +40,7 @@ class MainScreen : Screen {
@Composable
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPagerApi::class)
private fun Screen() {
val viewModel: MainViewModel = getScreenModel()
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
val pagerState = rememberPagerState()
val coroutineScope = rememberCoroutineScope()
Expand All @@ -58,15 +57,15 @@ class MainScreen : Screen {
LocalPager provides pagerState
) {
Scaffold(
bottomBar = { TabBar(pagerState) },
topBar = { TopBar(RootTab.values()[pagerState.currentPage].tab, scrollBehavior) }
bottomBar = { TabBar(pagerState, viewModel) },
topBar = { TopBar(RootTab.entries[pagerState.currentPage].tab, scrollBehavior) }
) { pv ->
HorizontalPager(
count = RootTab.values().size,
count = RootTab.entries.size,
state = pagerState,
modifier = Modifier.fillMaxSize()
) {
val tab = RootTab.values()[it]
val tab = RootTab.entries[it]

Box(
Modifier
Expand All @@ -85,28 +84,19 @@ class MainScreen : Screen {
@OptIn(ExperimentalMaterial3Api::class)
private fun TopBar(
tab: Tab,
scrollBehavior: TopAppBarScrollBehavior,
viewModel: MainViewModel = getScreenModel()
scrollBehavior: TopAppBarScrollBehavior
) {
LargeTopAppBar(
title = { Text(tab.options.title) },
navigationIcon = {
Row {
Spacer(Modifier.width(8.dp))
AsyncImage(
model = viewModel.account?.avatar,
contentDescription = stringResource(
R.string.cd_avatar,
viewModel.account?.username ?: ""
),
modifier = Modifier
.size(33.dp)
.clip(CircleShape)
.clickable { }
IconButton(
onClick = { /* TODO: Open some menu */ }
) {
Icon(
imageVector = Icons.Filled.Menu,
contentDescription = stringResource(R.string.action_open_menu)
)
Spacer(Modifier.width(12.dp))
}

},
scrollBehavior = scrollBehavior
)
Expand All @@ -115,26 +105,40 @@ class MainScreen : Screen {
@OptIn(ExperimentalPagerApi::class)
@Composable
private fun TabBar(
pagerState: PagerState
pagerState: PagerState,
viewModel: MainViewModel
) {
val tab = RootTab.values()[pagerState.currentPage].tab
val tab = RootTab.entries[pagerState.currentPage].tab
val coroutineScope = rememberCoroutineScope()

NavigationBar {
RootTab.values().forEach {
RootTab.entries.forEach {
NavigationBarItem(
selected = tab == it.tab,
onClick = {
val page = RootTab.values().indexOf(it)
val page = RootTab.entries.indexOf(it)
coroutineScope.launch {
pagerState.animateScrollToPage(page)
}
},
icon = {
Icon(
painter = it.tab.options.icon!!,
contentDescription = it.tab.options.title
)
if(it == RootTab.PROFILE && viewModel.account != null) {
AsyncImage(
model = viewModel.account!!.avatar,
contentDescription = stringResource(
R.string.cd_avatar,
viewModel.account!!.username
),
modifier = Modifier
.size(24.dp)
.clip(CircleShape)
)
} else {
Icon(
painter = it.tab.options.icon!!,
contentDescription = it.tab.options.title
)
}
},
label = { Text(text = it.tab.options.title) }
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package xyz.wingio.dimett.ui.screens.messages
package xyz.wingio.dimett.ui.screens.profile

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
Expand All @@ -7,8 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Mail
import androidx.compose.material.icons.outlined.Mail
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
Expand All @@ -17,20 +17,15 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.tab.Tab
import cafe.adriel.voyager.navigator.tab.TabOptions
import xyz.wingio.dimett.R
import xyz.wingio.dimett.ui.components.Text
import xyz.wingio.dimett.utils.TabOptions
import xyz.wingio.dimett.utils.getString

class MessagesTab : Tab {
override val options: TabOptions
@Composable get() = TabOptions(
R.string.title_messages,
icon = Icons.Outlined.Mail,
iconSelected = Icons.Filled.Mail
)
open class ProfileScreen: Screen {

@Composable
override fun Content() {
Expand All @@ -54,4 +49,15 @@ class MessagesTab : Tab {
}
}

}

class ProfileTab : ProfileScreen(), Tab {

override val options: TabOptions
@Composable get() = TabOptions(
R.string.title_profile,
icon = Icons.Outlined.Person,
iconSelected = Icons.Filled.Person
)

}
6 changes: 3 additions & 3 deletions app/src/main/java/xyz/wingio/dimett/utils/NavUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import com.google.accompanist.pager.ExperimentalPagerApi
import xyz.wingio.dimett.ui.screens.explore.ExploreTab
import xyz.wingio.dimett.ui.screens.feed.FeedTab
import xyz.wingio.dimett.ui.screens.main.LocalPager
import xyz.wingio.dimett.ui.screens.messages.MessagesTab
import xyz.wingio.dimett.ui.screens.profile.ProfileTab
import xyz.wingio.dimett.ui.screens.notifications.NotificationsTab

enum class RootTab(val tab: Tab) {
FEED(FeedTab()),
EXPLORE(ExploreTab()),
NOTIFICATIONS(NotificationsTab()),
MESSAGES(MessagesTab()),
PROFILE(ProfileTab()),
}

tailrec fun Navigator.navigate(screen: Screen) {
Expand All @@ -42,7 +42,7 @@ fun Tab.TabOptions(
iconSelected: ImageVector
): TabOptions {
val pager = LocalPager.currentOrThrow
val selected = RootTab.values()[pager.currentPage].tab == this
val selected = RootTab.entries[pager.currentPage].tab == this

return TabOptions(
0u,
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<string name="action_vote">Vote</string>
<string name="action_retry">Retry</string>
<string name="action_share">Share</string>
<string name="action_open_menu">Open menu</string>

<string name="label_instance">Instance</string>

Expand All @@ -15,6 +16,7 @@
<string name="title_explore">Explore</string>
<string name="title_inbox">Inbox</string>
<string name="title_messages">Messages</string>
<string name="title_profile">Profile</string>

<string name="cd_avatar">%1$s\'s avatar</string>
<string name="cd_boosted">Boosted</string>
Expand Down

0 comments on commit e66e5d4

Please sign in to comment.