From ee0141f82d74e2e6d62f4df3ef69ba599e6f202b Mon Sep 17 00:00:00 2001 From: andrew Date: Tue, 4 Jul 2023 14:09:40 +0930 Subject: [PATCH] Refactor to Components --- .../conversation/v2/MessageDetailActivity.kt | 76 ++++++++++--------- .../org/thoughtcrime/securesms/ui/Colors.kt | 2 + .../thoughtcrime/securesms/ui/Components.kt | 9 ++- 3 files changed, 46 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt index 0fddfd7ee..bf051a3b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt @@ -65,8 +65,9 @@ import org.thoughtcrime.securesms.ui.Cell import org.thoughtcrime.securesms.ui.CellNoMargin import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin import org.thoughtcrime.securesms.ui.Divider +import org.thoughtcrime.securesms.ui.HorizontalPagerIndicator import org.thoughtcrime.securesms.ui.ItemButton -import org.thoughtcrime.securesms.ui.SessionHorizontalPagerIndicator +import org.thoughtcrime.securesms.ui.blackAlpha40 import org.thoughtcrime.securesms.ui.colorDestructive import org.thoughtcrime.securesms.ui.destructiveButtonColors import java.util.* @@ -350,10 +351,7 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { } } - @OptIn( - ExperimentalFoundationApi::class, - ExperimentalGlideComposeApi::class, - ) + @OptIn(ExperimentalFoundationApi::class,) @Composable fun ImageAttachments(attachments: List, onClick: (Slide) -> Unit) { val imageAttachments = attachments.filter { it.slide.hasImage() } @@ -363,38 +361,9 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { Row { CarouselPrevButton(pagerState) Box(modifier = Modifier.weight(1f)) { - CellNoMargin { - HorizontalPager(state = pagerState) { i -> - val slide = imageAttachments[i].slide - slide.apply { - GlideImage( - contentScale = ContentScale.Crop, - modifier = Modifier - .aspectRatio(1f) - .clickable { onClick(slide) }, - model = uri, - contentDescription = fileName.orNull() ?: "image" - ) - } - } - } - if (imageAttachments.size >= 2) { - SessionHorizontalPagerIndicator( - modifier = Modifier.align(Alignment.BottomCenter), - pagerState = pagerState, - pageCount = imageAttachments.size, - ) - } - Surface( - shape = CircleShape, - color = Color.Black.copy(alpha = 0.4f), - modifier = Modifier.align(Alignment.BottomEnd).padding(8.dp) - ) { - Icon( - painter = painterResource(id = R.drawable.ic_expand), - contentDescription = "" - ) - } + CellPager(pagerState, imageAttachments) { onClick(it) } + HorizontalPagerIndicator(pagerState) + ExpandButton(modifier = Modifier.align(Alignment.BottomEnd).padding(8.dp)) } CarouselNextButton(pagerState) } @@ -402,7 +371,40 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { } } + @OptIn( + ExperimentalFoundationApi::class, + ExperimentalGlideComposeApi::class + ) + @Composable + private fun CellPager(pagerState: PagerState, imageAttachments: List, onClick: (Slide) -> Unit) { + CellNoMargin { + HorizontalPager(state = pagerState) { i -> + val slide = imageAttachments[i].slide + GlideImage( + contentScale = ContentScale.Crop, + modifier = Modifier + .aspectRatio(1f) + .clickable { onClick(slide) }, + model = slide.uri, + contentDescription = slide.fileName.orNull() ?: "image" + ) + } + } + } + @Composable + fun ExpandButton(modifier: Modifier) { + Surface( + shape = CircleShape, + color = blackAlpha40, + modifier = modifier + ) { + Icon( + painter = painterResource(id = R.drawable.ic_expand), + contentDescription = "" + ) + } + } @OptIn(ExperimentalFoundationApi::class, ExperimentalLayoutApi::class) @Composable diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt index dedff26cd..cace0c6af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt @@ -23,6 +23,8 @@ val classicLight4 = Color(0xffF0F0F0) val classicLight5 = Color(0xffF9F9F9) val classicLight6 = Color(0xffFFFFFF) +val blackAlpha40 = Color.Black.copy(alpha = 0.4f) + @Composable fun transparentButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt index c7720f239..c70b557ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.ui import androidx.annotation.DrawableRes import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight @@ -91,16 +92,16 @@ fun CellWithPaddingAndMargin( @OptIn(ExperimentalFoundationApi::class) @Composable -fun SessionHorizontalPagerIndicator(modifier: Modifier, pagerState: PagerState, pageCount: Int) { +fun BoxScope.HorizontalPagerIndicator(pagerState: PagerState) { Card(shape = RoundedCornerShape(50.dp), backgroundColor = Color.Black.copy(alpha = 0.4f), modifier = Modifier - .padding(8.dp) - .then(modifier)) { + .align(Alignment.BottomCenter) + .padding(8.dp)) { Box(modifier = Modifier.padding(8.dp)) { HorizontalPagerIndicator( pagerState = pagerState, - pageCount = pageCount, + pageCount = pagerState.pageCount, activeColor = Color.White, inactiveColor = classicDark5) }