Skip to content

Commit

Permalink
Adding copy post link. Fixes #168 (#247)
Browse files Browse the repository at this point in the history
  • Loading branch information
dessalines committed Dec 18, 2022
1 parent cbc7a5f commit 218d0eb
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 93 deletions.
Expand Up @@ -28,10 +28,10 @@ import com.jerboa.datatypes.*
import com.jerboa.db.Account
import com.jerboa.ui.components.common.ActionBarButton
import com.jerboa.ui.components.common.CommentOrPostNodeHeader
import com.jerboa.ui.components.common.IconAndTextDrawerItem
import com.jerboa.ui.components.common.MyMarkdownText
import com.jerboa.ui.components.common.VoteGeneric
import com.jerboa.ui.components.community.CommunityLink
import com.jerboa.ui.components.home.IconAndTextDrawerItem
import com.jerboa.ui.theme.LARGE_PADDING
import com.jerboa.ui.theme.SMALL_PADDING
import com.jerboa.ui.theme.XXL_PADDING
Expand Down
Expand Up @@ -9,7 +9,6 @@ import androidx.compose.ui.tooling.preview.Preview
import com.jerboa.UnreadOrAll
import com.jerboa.datatypes.ListingType
import com.jerboa.datatypes.SortType
import com.jerboa.ui.components.home.IconAndTextDrawerItem

val topSortTypes = listOf(
SortType.TopDay,
Expand Down
98 changes: 98 additions & 0 deletions app/src/main/java/com/jerboa/ui/components/common/DrawerItems.kt
@@ -0,0 +1,98 @@
package com.jerboa.ui.components.common

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowRight
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.jerboa.ui.theme.DRAWER_ITEM_SPACING
import com.jerboa.ui.theme.LARGE_PADDING
import com.jerboa.ui.theme.colorShade

@Composable
fun IconAndTextDrawerItem(
text: String,
icon: ImageVector? = null,
iconBadgeCount: Int? = null,
onClick: () -> Unit,
more: Boolean = false,
highlight: Boolean = false
) {
val spacingMod = Modifier
.padding(LARGE_PADDING)

Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = onClick)
.background(
color = if (highlight) {
colorShade(
MaterialTheme.colors.background,
2f
)
} else {
Color.Transparent
}
)
) {
Row {
icon?.also { ico ->
InboxIconAndBadge(
iconBadgeCount = iconBadgeCount,
modifier = spacingMod.size(DRAWER_ITEM_SPACING),
icon = ico,
tint = MaterialTheme.colors.onSurface
)
}
Text(
text = text,
style = MaterialTheme.typography.subtitle1,
modifier = spacingMod
)
}
if (more) {
Icon(
imageVector = Icons.Default.ArrowRight,
contentDescription = "TODO",
tint = MaterialTheme.colors.onSurface,
modifier = Modifier.size(24.dp)
)
}
}
}

@Preview
@Composable
fun IconAndTextDrawerItemPreview() {
IconAndTextDrawerItem(
text = "A test item",
onClick = {}
)
}

@Preview
@Composable
fun IconAndTextDrawerItemWithMorePreview() {
IconAndTextDrawerItem(
text = "A test item",
onClick = {},
more = true
)
}
Expand Up @@ -15,11 +15,11 @@ import androidx.navigation.compose.rememberNavController
import com.jerboa.datatypes.CommunityView
import com.jerboa.datatypes.SortType
import com.jerboa.datatypes.sampleCommunityView
import com.jerboa.ui.components.common.IconAndTextDrawerItem
import com.jerboa.ui.components.common.LargerCircularIcon
import com.jerboa.ui.components.common.PictrsBannerImage
import com.jerboa.ui.components.common.SortOptionsDialog
import com.jerboa.ui.components.common.SortTopOptionsDialog
import com.jerboa.ui.components.home.IconAndTextDrawerItem
import com.jerboa.ui.theme.*

@Composable
Expand Down
77 changes: 0 additions & 77 deletions app/src/main/java/com/jerboa/ui/components/home/Home.kt
Expand Up @@ -3,7 +3,6 @@ package com.jerboa.ui.components.home
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
Expand All @@ -17,9 +16,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
import com.jerboa.datatypes.*
Expand Down Expand Up @@ -354,80 +351,6 @@ fun DrawerHeaderPreview() {
)
}

@Composable
fun IconAndTextDrawerItem(
text: String,
icon: ImageVector? = null,
iconBadgeCount: Int? = null,
onClick: () -> Unit,
more: Boolean = false,
highlight: Boolean = false
) {
val spacingMod = Modifier
.padding(LARGE_PADDING)

Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = onClick)
.background(
color = if (highlight) {
colorShade(
MaterialTheme.colors.background,
2f
)
} else {
Color.Transparent
}
)
) {
Row {
icon?.also { ico ->
InboxIconAndBadge(
iconBadgeCount = iconBadgeCount,
modifier = spacingMod.size(DRAWER_ITEM_SPACING),
icon = ico,
tint = MaterialTheme.colors.onSurface
)
}
Text(
text = text,
style = MaterialTheme.typography.subtitle1,
modifier = spacingMod
)
}
if (more) {
Icon(
imageVector = Icons.Default.ArrowRight,
contentDescription = "TODO",
tint = MaterialTheme.colors.onSurface,
modifier = Modifier.size(24.dp)
)
}
}
}

@Preview
@Composable
fun IconAndTextDrawerItemPreview() {
IconAndTextDrawerItem(
text = "A test item",
onClick = {}
)
}

@Preview
@Composable
fun IconAndTextDrawerItemWithMorePreview() {
IconAndTextDrawerItem(
text = "A test item",
onClick = {},
more = true
)
}

@Composable
fun HomeHeaderTitle(
selectedSortType: SortType,
Expand Down
45 changes: 38 additions & 7 deletions app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt
@@ -1,10 +1,31 @@
package com.jerboa.ui.components.person

import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.AlertDialog
import androidx.compose.material.Card
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.contentColorFor
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.*
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Block
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Sort
import androidx.compose.material.primarySurface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
Expand All @@ -14,9 +35,19 @@ import com.jerboa.datatypes.PersonViewSafe
import com.jerboa.datatypes.SortType
import com.jerboa.datatypes.samplePersonView
import com.jerboa.personNameShown
import com.jerboa.ui.components.common.*
import com.jerboa.ui.components.home.IconAndTextDrawerItem
import com.jerboa.ui.theme.*
import com.jerboa.ui.components.common.DotSpacer
import com.jerboa.ui.components.common.IconAndTextDrawerItem
import com.jerboa.ui.components.common.LargerCircularIcon
import com.jerboa.ui.components.common.MyMarkdownText
import com.jerboa.ui.components.common.PictrsBannerImage
import com.jerboa.ui.components.common.SortOptionsDialog
import com.jerboa.ui.components.common.SortTopOptionsDialog
import com.jerboa.ui.components.common.TimeAgo
import com.jerboa.ui.theme.APP_BAR_ELEVATION
import com.jerboa.ui.theme.MEDIUM_PADDING
import com.jerboa.ui.theme.PROFILE_BANNER_SIZE
import com.jerboa.ui.theme.SMALL_PADDING
import com.jerboa.ui.theme.muted

@Composable
fun PersonProfileTopSection(
Expand Down
23 changes: 17 additions & 6 deletions app/src/main/java/com/jerboa/ui/components/post/PostListing.kt
Expand Up @@ -23,8 +23,6 @@ import com.jerboa.datatypes.*
import com.jerboa.db.Account
import com.jerboa.ui.components.common.*
import com.jerboa.ui.components.community.CommunityLink
import com.jerboa.ui.components.community.CommunityLinkLarger
import com.jerboa.ui.components.home.IconAndTextDrawerItem
import com.jerboa.ui.components.person.PersonProfileLink
import com.jerboa.ui.theme.*

Expand Down Expand Up @@ -671,11 +669,24 @@ fun PostOptionsDialog(
onDismissRequest = onDismissRequest,
text = {
Column {
// TODO maybe add Go To?
CommunityLinkLarger(
community = postView.community,
onClick = { onCommunityClick() }
IconAndTextDrawerItem(
text = "Go to ${communityNameShown(postView.community)}",
icon = Icons.Default.Forum,
onClick = {
onCommunityClick()
}
)
postView.post.url?.also {
IconAndTextDrawerItem(
text = "Copy link",
icon = Icons.Default.Link,
onClick = {
localClipboardManager.setText(AnnotatedString(it))
Toast.makeText(ctx, "Link Copied", Toast.LENGTH_SHORT).show()
onDismissRequest()
}
)
}
IconAndTextDrawerItem(
text = "Copy Permalink",
icon = Icons.Default.Link,
Expand Down

0 comments on commit 218d0eb

Please sign in to comment.