From a3bb54d67f36b246354e217fad684aae040ff418 Mon Sep 17 00:00:00 2001 From: "maarten.vercruysse" Date: Thu, 31 Aug 2023 21:50:31 +0200 Subject: [PATCH 1/3] Add connect on matrix --- .../main/java/com/jerboa/feat/UserActions.kt | 8 ++++++ .../ui/components/common/DropdownMenu.kt | 23 +++++++++++++++ .../ui/components/person/PersonProfile.kt | 28 +++++++++++++++++++ .../person/PersonProfileActivity.kt | 6 ++-- app/src/main/res/drawable/matrix_icon.xml | 15 ++++++++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/matrix_icon.xml diff --git a/app/src/main/java/com/jerboa/feat/UserActions.kt b/app/src/main/java/com/jerboa/feat/UserActions.kt index 2bc8f1df2..17fbff10f 100644 --- a/app/src/main/java/com/jerboa/feat/UserActions.kt +++ b/app/src/main/java/com/jerboa/feat/UserActions.kt @@ -127,3 +127,11 @@ fun shareLink(url: String, ctx: Context) { val shareIntent = Intent.createChooser(intent, ctx.getString(R.string.share)) ctx.startActivitySafe(shareIntent) } + +/** + * Opens matrix for that user + */ +fun openMatrix(matrixId: String, ctx: Context) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://matrix.to/#/$matrixId")) + ctx.startActivitySafe(intent) +} diff --git a/app/src/main/java/com/jerboa/ui/components/common/DropdownMenu.kt b/app/src/main/java/com/jerboa/ui/components/common/DropdownMenu.kt index d440fe237..2babf9789 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/DropdownMenu.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/DropdownMenu.kt @@ -40,6 +40,29 @@ fun MenuItem( ) } +@Composable +fun MenuItem( + text: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, + textModifier: Modifier = Modifier, + icon: @Composable (() -> Unit), + textStyle: TextStyle = MaterialTheme.typography.bodyMedium, +) { + DropdownMenuItem( + text = { + Text( + text = text, + style = textStyle, + modifier = textModifier, + ) + }, + leadingIcon = icon, + onClick = onClick, + modifier = modifier, + ) +} + @Composable fun MenuItem( text: String, diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt index 33ccfacea..148e23f10 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt @@ -8,8 +8,10 @@ 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.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* +import androidx.compose.material3.Divider import androidx.compose.material3.DropdownMenu import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -27,12 +29,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.jerboa.R import com.jerboa.datatypes.samplePersonView import com.jerboa.datatypes.types.PersonView import com.jerboa.datatypes.types.SortType +import com.jerboa.feat.openMatrix import com.jerboa.personNameShown import com.jerboa.ui.components.common.DotSpacer import com.jerboa.ui.components.common.LargerCircularIcon @@ -42,6 +46,7 @@ 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.MARKDOWN_BAR_ICON_SIZE import com.jerboa.ui.theme.MEDIUM_PADDING import com.jerboa.ui.theme.PROFILE_BANNER_SIZE import com.jerboa.ui.theme.muted @@ -155,7 +160,10 @@ fun PersonProfileHeader( onBack: (() -> Unit)? = null, isLoggedIn: () -> Boolean, siteVersion: String, + matrixId: String?, ) { + val ctx = LocalContext.current + var showSortOptions by remember { mutableStateOf(false) } var showTopOptions by remember { mutableStateOf(false) } var showMoreOptions by remember { mutableStateOf(false) } @@ -247,6 +255,9 @@ fun PersonProfileHeader( showMoreOptions = false onMessagePersonClick() }, + openMatrix = matrixId?.let { + { openMatrix(matrixId, ctx) } + }, ) } } @@ -278,6 +289,7 @@ fun PersonProfileMoreDropdown( onBlockPersonClick: () -> Unit, onReportPersonClick: () -> Unit, onMessagePersonClick: () -> Unit, + openMatrix: (() -> Unit)?, ) { DropdownMenu( expanded = expanded, @@ -288,6 +300,22 @@ fun PersonProfileMoreDropdown( onClick = onMessagePersonClick, icon = Icons.Outlined.Message, ) + + if (openMatrix != null) { + MenuItem( + text = stringResource(R.string.matrix_send_msg), + icon = { + Icon( + painter = painterResource(R.drawable.matrix_icon), + contentDescription = stringResource(R.string.markdownHelper_insertSpoiler), + modifier = Modifier.size(MARKDOWN_BAR_ICON_SIZE), + ) + }, + onClick = openMatrix, + ) + } + + Divider() MenuItem( text = stringResource(R.string.person_profile_block_person), onClick = onBlockPersonClick, diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt index b4f883ab1..695622036 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt @@ -190,18 +190,19 @@ fun PersonProfileActivity( ApiState.Loading, ApiState.Refreshing -> { // Prevents tabs from jumping around during loading/refreshing PersonProfileHeader( - scrollBehavior = scrollBehavior, personName = ctx.getString(R.string.loading), myProfile = false, - selectedSortType = personProfileViewModel.sortType, onClickSortType = {}, onBlockPersonClick = {}, onReportPersonClick = {}, onMessagePersonClick = {}, + selectedSortType = personProfileViewModel.sortType, openDrawer = ::openDrawer, + scrollBehavior = scrollBehavior, onBack = onBack, isLoggedIn = { false }, siteVersion = siteViewModel.siteVersion(), + matrixId = null, ) } is ApiState.Holder -> { @@ -267,6 +268,7 @@ fun PersonProfileActivity( onBack = onBack, isLoggedIn = { !account.isAnon() }, siteVersion = siteViewModel.siteVersion(), + matrixId = person.matrix_user_id, ) } else -> {} diff --git a/app/src/main/res/drawable/matrix_icon.xml b/app/src/main/res/drawable/matrix_icon.xml new file mode 100644 index 000000000..2a0a59d61 --- /dev/null +++ b/app/src/main/res/drawable/matrix_icon.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25b51a078..ce81cd4d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -412,4 +412,5 @@ Open link in external No activity (app) found that can open this link Insert spoiler + Connect on Matrix From 009c43d9c7ce4b327ada2e1223800fbd9d8d48b5 Mon Sep 17 00:00:00 2001 From: "maarten.vercruysse" Date: Thu, 31 Aug 2023 22:06:10 +0200 Subject: [PATCH 2/3] Use faster perf icon --- .../jerboa/ui/components/person/PersonProfile.kt | 2 +- app/src/main/res/drawable/matrix_favicon.xml | 6 ++++++ app/src/main/res/drawable/matrix_icon.xml | 15 --------------- 3 files changed, 7 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/drawable/matrix_favicon.xml delete mode 100644 app/src/main/res/drawable/matrix_icon.xml diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt index 148e23f10..9b95555fe 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt @@ -306,7 +306,7 @@ fun PersonProfileMoreDropdown( text = stringResource(R.string.matrix_send_msg), icon = { Icon( - painter = painterResource(R.drawable.matrix_icon), + painter = painterResource(R.drawable.matrix_favicon), contentDescription = stringResource(R.string.markdownHelper_insertSpoiler), modifier = Modifier.size(MARKDOWN_BAR_ICON_SIZE), ) diff --git a/app/src/main/res/drawable/matrix_favicon.xml b/app/src/main/res/drawable/matrix_favicon.xml new file mode 100644 index 000000000..3edab4cbc --- /dev/null +++ b/app/src/main/res/drawable/matrix_favicon.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/matrix_icon.xml b/app/src/main/res/drawable/matrix_icon.xml deleted file mode 100644 index 2a0a59d61..000000000 --- a/app/src/main/res/drawable/matrix_icon.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - From 30982fdf06724b4831cda9b8ca9c5d3a41c028e7 Mon Sep 17 00:00:00 2001 From: "maarten.vercruysse" Date: Thu, 31 Aug 2023 22:11:23 +0200 Subject: [PATCH 3/3] Fix contentDescription --- .../main/java/com/jerboa/ui/components/person/PersonProfile.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt index 9b95555fe..6bee16e34 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt @@ -307,7 +307,7 @@ fun PersonProfileMoreDropdown( icon = { Icon( painter = painterResource(R.drawable.matrix_favicon), - contentDescription = stringResource(R.string.markdownHelper_insertSpoiler), + contentDescription = null, modifier = Modifier.size(MARKDOWN_BAR_ICON_SIZE), ) },