mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-16 03:41:25 +00:00
Use LocalDimensions in LandingActivity
This commit is contained in:
parent
9ee2b9207b
commit
50f9864a8b
@ -24,6 +24,7 @@ import network.loki.messenger.R
|
|||||||
import org.session.libsession.utilities.TextSecurePreferences
|
import org.session.libsession.utilities.TextSecurePreferences
|
||||||
import org.thoughtcrime.securesms.ui.AppTheme
|
import org.thoughtcrime.securesms.ui.AppTheme
|
||||||
import org.thoughtcrime.securesms.ui.ItemButton
|
import org.thoughtcrime.securesms.ui.ItemButton
|
||||||
|
import org.thoughtcrime.securesms.ui.LocalDimensions
|
||||||
import org.thoughtcrime.securesms.ui.classicDarkColors
|
import org.thoughtcrime.securesms.ui.classicDarkColors
|
||||||
import org.thoughtcrime.securesms.ui.components.AppBar
|
import org.thoughtcrime.securesms.ui.components.AppBar
|
||||||
import org.thoughtcrime.securesms.ui.components.QrImage
|
import org.thoughtcrime.securesms.ui.components.QrImage
|
||||||
@ -57,20 +58,20 @@ class NewConversationHomeFragment : Fragment() {
|
|||||||
Column(modifier = Modifier.background(MaterialTheme.colors.primarySurface)) {
|
Column(modifier = Modifier.background(MaterialTheme.colors.primarySurface)) {
|
||||||
AppBar(stringResource(R.string.dialog_new_conversation_title), onClose = { delegate.onDialogClosePressed() })
|
AppBar(stringResource(R.string.dialog_new_conversation_title), onClose = { delegate.onDialogClosePressed() })
|
||||||
ItemButton(textId = R.string.messageNew, icon = R.drawable.ic_message) { delegate.onNewMessageSelected() }
|
ItemButton(textId = R.string.messageNew, icon = R.drawable.ic_message) { delegate.onNewMessageSelected() }
|
||||||
Divider(modifier = Modifier.padding(start = 80.dp))
|
Divider(startIndent = LocalDimensions.current.dividerIndent)
|
||||||
ItemButton(textId = R.string.activity_create_group_title, icon = R.drawable.ic_group) { delegate.onCreateGroupSelected() }
|
ItemButton(textId = R.string.activity_create_group_title, icon = R.drawable.ic_group) { delegate.onCreateGroupSelected() }
|
||||||
Divider(modifier = Modifier.padding(start = 80.dp))
|
Divider(startIndent = LocalDimensions.current.dividerIndent)
|
||||||
ItemButton(textId = R.string.dialog_join_community_title, icon = R.drawable.ic_globe) { delegate.onJoinCommunitySelected() }
|
ItemButton(textId = R.string.dialog_join_community_title, icon = R.drawable.ic_globe) { delegate.onJoinCommunitySelected() }
|
||||||
Divider(modifier = Modifier.padding(start = 80.dp))
|
Divider(startIndent = LocalDimensions.current.dividerIndent)
|
||||||
ItemButton(textId = R.string.activity_settings_invite_button_title, icon = R.drawable.ic_invite_friend, contentDescription = R.string.AccessibilityId_invite_friend_button) { delegate.onInviteFriend() }
|
ItemButton(textId = R.string.activity_settings_invite_button_title, icon = R.drawable.ic_invite_friend, contentDescription = R.string.AccessibilityId_invite_friend_button) { delegate.onInviteFriend() }
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(horizontal = 32.dp)
|
.padding(horizontal = LocalDimensions.current.marginMedium)
|
||||||
.padding(top = 20.dp)) {
|
.padding(top = LocalDimensions.current.itemSpacingMedium)) {
|
||||||
Text(text = stringResource(R.string.accountIdYours), style = MaterialTheme.typography.medium)
|
Text(text = stringResource(R.string.accountIdYours), style = MaterialTheme.typography.medium)
|
||||||
Spacer(modifier = Modifier.height(4.dp))
|
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacingTiny))
|
||||||
Text(text = stringResource(R.string.qrYoursDescription), color = classicDarkColors[5], style = MaterialTheme.typography.small)
|
Text(text = stringResource(R.string.qrYoursDescription), color = classicDarkColors[5], style = MaterialTheme.typography.small)
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacingSmall))
|
||||||
QrImage(string = TextSecurePreferences.getLocalNumber(requireContext())!!, Modifier.contentDescription(R.string.AccessibilityId_qr_code))
|
QrImage(string = TextSecurePreferences.getLocalNumber(requireContext())!!, Modifier.contentDescription(R.string.AccessibilityId_qr_code))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.heightIn
|
import androidx.compose.foundation.layout.heightIn
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
import androidx.compose.material.Card
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@ -49,6 +49,8 @@ import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivi
|
|||||||
import org.thoughtcrime.securesms.service.KeyCachingService
|
import org.thoughtcrime.securesms.service.KeyCachingService
|
||||||
import org.thoughtcrime.securesms.showOpenUrlDialog
|
import org.thoughtcrime.securesms.showOpenUrlDialog
|
||||||
import org.thoughtcrime.securesms.ui.AppTheme
|
import org.thoughtcrime.securesms.ui.AppTheme
|
||||||
|
import org.thoughtcrime.securesms.ui.Cell
|
||||||
|
import org.thoughtcrime.securesms.ui.LocalDimensions
|
||||||
import org.thoughtcrime.securesms.ui.PreviewTheme
|
import org.thoughtcrime.securesms.ui.PreviewTheme
|
||||||
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
|
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
|
||||||
import org.thoughtcrime.securesms.ui.classicDarkColors
|
import org.thoughtcrime.securesms.ui.classicDarkColors
|
||||||
@ -119,63 +121,68 @@ class LandingActivity : BaseActionBarActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column(modifier = Modifier.padding(horizontal = 36.dp)) {
|
Column {
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Column(modifier = Modifier
|
||||||
Text(
|
.weight(1f)
|
||||||
stringResource(R.string.onboardingBubblePrivacyInYourPocket),
|
.padding(horizontal = LocalDimensions.current.marginMedium)) {
|
||||||
modifier = Modifier.align(Alignment.CenterHorizontally),
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
style = MaterialTheme.typography.h4,
|
Text(
|
||||||
textAlign = TextAlign.Center
|
stringResource(R.string.onboardingBubblePrivacyInYourPocket),
|
||||||
)
|
modifier = Modifier.align(Alignment.CenterHorizontally),
|
||||||
Spacer(modifier = Modifier.height(24.dp))
|
style = MaterialTheme.typography.h4,
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacingMedium))
|
||||||
|
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
state = listState,
|
state = listState,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.heightIn(min = 200.dp)
|
.heightIn(min = 200.dp)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.weight(2f),
|
.weight(3f),
|
||||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.itemSpacingSmall)
|
||||||
) {
|
) {
|
||||||
items(
|
items(
|
||||||
MESSAGES.take(count),
|
MESSAGES.take(count),
|
||||||
key = { it.stringId }
|
key = { it.stringId }
|
||||||
) { item ->
|
) { item ->
|
||||||
AnimateMessageText(
|
AnimateMessageText(
|
||||||
stringResource(item.stringId),
|
stringResource(item.stringId),
|
||||||
item.isOutgoing
|
item.isOutgoing
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
}
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Column(modifier = Modifier.padding(horizontal = LocalDimensions.current.marginLarge)) {
|
||||||
|
FilledButton(
|
||||||
OutlineButton(
|
text = stringResource(R.string.onboardingAccountCreate),
|
||||||
text = stringResource(R.string.onboardingAccountCreate),
|
modifier = Modifier
|
||||||
modifier = Modifier
|
.fillMaxWidth()
|
||||||
.contentDescription(R.string.AccessibilityId_create_account_button)
|
.align(Alignment.CenterHorizontally)
|
||||||
.width(262.dp)
|
.contentDescription(R.string.AccessibilityId_create_account_button),
|
||||||
.align(Alignment.CenterHorizontally),
|
onClick = ::startPickDisplayNameActivity
|
||||||
onClick = ::startPickDisplayNameActivity
|
)
|
||||||
)
|
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacingSmall))
|
||||||
Spacer(modifier = Modifier.height(14.dp))
|
OutlineButton(
|
||||||
FilledButton(
|
text = stringResource(R.string.onboardingAccountExists),
|
||||||
text = stringResource(R.string.onboardingAccountExists),
|
modifier = Modifier
|
||||||
modifier = Modifier
|
.fillMaxWidth()
|
||||||
.width(262.dp)
|
.align(Alignment.CenterHorizontally)
|
||||||
.align(Alignment.CenterHorizontally)
|
.contentDescription(R.string.AccessibilityId_restore_account_button)
|
||||||
.contentDescription(R.string.AccessibilityId_restore_account_button)
|
) { start<LinkDeviceActivity>() }
|
||||||
) { start<LinkDeviceActivity>() }
|
BorderlessButton(
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
text = stringResource(R.string.onboardingTosPrivacy),
|
||||||
BorderlessButton(
|
modifier = Modifier
|
||||||
text = stringResource(R.string.onboardingTosPrivacy),
|
.fillMaxWidth()
|
||||||
modifier = Modifier
|
.align(Alignment.CenterHorizontally)
|
||||||
.width(262.dp)
|
.contentDescription(R.string.AccessibilityId_open_url),
|
||||||
.align(Alignment.CenterHorizontally)
|
onClick = ::openDialog
|
||||||
.contentDescription(R.string.AccessibilityId_open_url),
|
)
|
||||||
onClick = ::openDialog
|
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacingExtraSmall))
|
||||||
)
|
}
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,47 +225,34 @@ private fun AnimateMessageText(text: String, isOutgoing: Boolean, modifier: Modi
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun MessageText(text: String, isOutgoing: Boolean, modifier: Modifier) {
|
private fun MessageText(text: String, isOutgoing: Boolean, modifier: Modifier) {
|
||||||
if (isOutgoing) OutgoingText(text, modifier) else IncomingText(text, modifier)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun IncomingText(text: String, modifier: Modifier = Modifier) {
|
|
||||||
ChatText(
|
|
||||||
text,
|
|
||||||
color = classicDarkColors[2],
|
|
||||||
modifier = modifier
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun OutgoingText(text: String, modifier: Modifier = Modifier) {
|
|
||||||
Box(modifier = modifier then Modifier.fillMaxWidth()) {
|
Box(modifier = modifier then Modifier.fillMaxWidth()) {
|
||||||
ChatText(
|
MessageText(
|
||||||
text,
|
text,
|
||||||
color = session_accent,
|
color = if (isOutgoing) session_accent else classicDarkColors[2],
|
||||||
textColor = MaterialTheme.colors.primary,
|
textColor = if (isOutgoing) MaterialTheme.colors.primary else Color.Unspecified,
|
||||||
modifier = Modifier.align(Alignment.TopEnd)
|
modifier = Modifier.align(if (isOutgoing) Alignment.TopEnd else Alignment.TopStart)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun ChatText(
|
private fun MessageText(
|
||||||
text: String,
|
text: String,
|
||||||
color: Color,
|
color: Color,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
textColor: Color = Color.Unspecified
|
textColor: Color = Color.Unspecified
|
||||||
) {
|
) {
|
||||||
Text(
|
Card(
|
||||||
text,
|
modifier = modifier.fillMaxWidth(0.666f),
|
||||||
style = MaterialTheme.typography.large,
|
shape = RoundedCornerShape(size = 13.dp),
|
||||||
color = textColor,
|
backgroundColor = color,
|
||||||
modifier = modifier
|
elevation = 0.dp
|
||||||
.fillMaxWidth(0.666f)
|
) {
|
||||||
.background(
|
Text(
|
||||||
color = color,
|
text,
|
||||||
shape = RoundedCornerShape(size = 13.dp)
|
style = MaterialTheme.typography.large,
|
||||||
)
|
color = textColor,
|
||||||
.padding(horizontal = 16.dp, vertical = 12.dp)
|
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp)
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import androidx.annotation.AttrRes
|
|||||||
import androidx.appcompat.view.ContextThemeWrapper
|
import androidx.appcompat.view.ContextThemeWrapper
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
|
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
|
||||||
import androidx.compose.foundation.text.selection.TextSelectionColors
|
import androidx.compose.foundation.text.selection.TextSelectionColors
|
||||||
import androidx.compose.material.LocalContentColor
|
import androidx.compose.material.LocalContentColor
|
||||||
@ -21,7 +22,9 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.TextUnit
|
import androidx.compose.ui.unit.TextUnit
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import com.google.accompanist.themeadapter.appcompat.createAppCompatTheme
|
import com.google.accompanist.themeadapter.appcompat.createAppCompatTheme
|
||||||
import com.google.android.material.color.MaterialColors
|
import com.google.android.material.color.MaterialColors
|
||||||
@ -32,6 +35,20 @@ val LocalButtonColor = staticCompositionLocalOf { Color.Black }
|
|||||||
val LocalLightCell = staticCompositionLocalOf { Color.Black }
|
val LocalLightCell = staticCompositionLocalOf { Color.Black }
|
||||||
val LocalOnLightCell = staticCompositionLocalOf { Color.Black }
|
val LocalOnLightCell = staticCompositionLocalOf { Color.Black }
|
||||||
|
|
||||||
|
val LocalDimensions = staticCompositionLocalOf { Dimensions() }
|
||||||
|
|
||||||
|
data class Dimensions(
|
||||||
|
val itemSpacingTiny: Dp = 4.dp,
|
||||||
|
val itemSpacingExtraSmall: Dp = 8.dp,
|
||||||
|
val itemSpacingSmall: Dp = 16.dp,
|
||||||
|
val itemSpacingMedium: Dp = 24.dp,
|
||||||
|
val marginTiny: Dp = 8.dp,
|
||||||
|
val marginSmall: Dp = 16.dp,
|
||||||
|
val marginMedium: Dp = 32.dp,
|
||||||
|
val marginLarge: Dp = 64.dp,
|
||||||
|
val dividerIndent: Dp = 80.dp,
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts current Theme to Compose Theme.
|
* Converts current Theme to Compose Theme.
|
||||||
*/
|
*/
|
||||||
@ -85,7 +102,9 @@ fun AppCompatTheme(
|
|||||||
surface = surface ?: colors.surface
|
surface = surface ?: colors.surface
|
||||||
),
|
),
|
||||||
typography = typography,
|
typography = typography,
|
||||||
shapes = shapes,
|
shapes = shapes.copy(
|
||||||
|
small = RoundedCornerShape(50)
|
||||||
|
),
|
||||||
) {
|
) {
|
||||||
// We update the LocalContentColor to match our onBackground. This allows the default
|
// We update the LocalContentColor to match our onBackground. This allows the default
|
||||||
// content color to be more appropriate to the theme background
|
// content color to be more appropriate to the theme background
|
||||||
|
@ -23,6 +23,7 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.runtime.staticCompositionLocalOf
|
import androidx.compose.runtime.staticCompositionLocalOf
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
@ -41,7 +42,6 @@ import org.thoughtcrime.securesms.ui.extraSmall
|
|||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
val LocalButtonSize = staticCompositionLocalOf { mediumButton }
|
val LocalButtonSize = staticCompositionLocalOf { mediumButton }
|
||||||
val LocalButtonShape = staticCompositionLocalOf<Shape> { RoundedCornerShape(percent = 50) }
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Modifier.applyButtonSize() = then(LocalButtonSize.current)
|
fun Modifier.applyButtonSize() = then(LocalButtonSize.current)
|
||||||
@ -56,7 +56,10 @@ fun OutlineButton(@StringRes textId: Int, modifier: Modifier = Modifier, onClick
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun OutlineButton(text: String, modifier: Modifier = Modifier, onClick: () -> Unit) {
|
fun OutlineButton(text: String, modifier: Modifier = Modifier, onClick: () -> Unit) {
|
||||||
OutlineButton(modifier.contentDescription(text), onClick = onClick) { Text(text) }
|
OutlineButton(
|
||||||
|
modifier.contentDescription(text),
|
||||||
|
onClick = onClick
|
||||||
|
) { Text(text) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -71,7 +74,6 @@ fun OutlineButton(
|
|||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
border = BorderStroke(1.dp, LocalButtonColor.current),
|
border = BorderStroke(1.dp, LocalButtonColor.current),
|
||||||
shape = LocalButtonShape.current,
|
|
||||||
colors = ButtonDefaults.outlinedButtonColors(
|
colors = ButtonDefaults.outlinedButtonColors(
|
||||||
contentColor = LocalButtonColor.current,
|
contentColor = LocalButtonColor.current,
|
||||||
backgroundColor = Color.Unspecified
|
backgroundColor = Color.Unspecified
|
||||||
@ -125,7 +127,7 @@ fun FilledButton(
|
|||||||
onClick: () -> Unit
|
onClick: () -> Unit
|
||||||
) {
|
) {
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
modifier = modifier.size(108.dp, 34.dp),
|
modifier = modifier,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
shape = RoundedCornerShape(50),
|
shape = RoundedCornerShape(50),
|
||||||
colors = ButtonDefaults.outlinedButtonColors(
|
colors = ButtonDefaults.outlinedButtonColors(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user