mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-15 19:48:30 +00:00
Fix tab theming
This commit is contained in:
parent
88f4f219f6
commit
9ceaa97978
@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.Row
|
|||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.aspectRatio
|
import androidx.compose.foundation.layout.aspectRatio
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.height
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
@ -37,15 +36,12 @@ import androidx.compose.material.LocalContentAlpha
|
|||||||
import androidx.compose.material.LocalContentColor
|
import androidx.compose.material.LocalContentColor
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.material.OutlinedTextField
|
import androidx.compose.material.OutlinedTextField
|
||||||
import androidx.compose.material.Tab
|
|
||||||
import androidx.compose.material.TabRow
|
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.material.TextFieldDefaults
|
import androidx.compose.material.TextFieldDefaults
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
@ -79,11 +75,14 @@ import org.thoughtcrime.securesms.ui.AppTheme
|
|||||||
import org.thoughtcrime.securesms.ui.OutlineButton
|
import org.thoughtcrime.securesms.ui.OutlineButton
|
||||||
import org.thoughtcrime.securesms.ui.baseBold
|
import org.thoughtcrime.securesms.ui.baseBold
|
||||||
import org.thoughtcrime.securesms.ui.colorDestructive
|
import org.thoughtcrime.securesms.ui.colorDestructive
|
||||||
|
import org.thoughtcrime.securesms.ui.components.SessionTabRow
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
private const val TAG = "LinkDeviceActivity"
|
private const val TAG = "LinkDeviceActivity"
|
||||||
|
|
||||||
|
private val TITLES = listOf(R.string.activity_recovery_password, R.string.activity_link_device_scan_qr_code)
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@androidx.annotation.OptIn(ExperimentalGetImage::class)
|
@androidx.annotation.OptIn(ExperimentalGetImage::class)
|
||||||
class LinkDeviceActivity : BaseActionBarActivity() {
|
class LinkDeviceActivity : BaseActionBarActivity() {
|
||||||
@ -122,29 +121,20 @@ class LinkDeviceActivity : BaseActionBarActivity() {
|
|||||||
}.let(::setContentView)
|
}.let(::setContentView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun LoadAccountScreen(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
|
fun LoadAccountScreen(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
|
||||||
val titles = listOf(R.string.activity_recovery_password, R.string.activity_link_device_scan_qr_code)
|
val pagerState = rememberPagerState { TITLES.size }
|
||||||
val pagerState = rememberPagerState { titles.size }
|
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
TabRow(
|
SessionTabRow(pagerState, TITLES)
|
||||||
selectedTabIndex = pagerState.currentPage,
|
|
||||||
modifier = Modifier.height(48.dp)
|
|
||||||
) {
|
|
||||||
val animationScope = rememberCoroutineScope()
|
|
||||||
titles.forEachIndexed { i, it ->
|
|
||||||
Tab(i == pagerState.currentPage, onClick = { animationScope.launch { pagerState.animateScrollToPage(i) } }) {
|
|
||||||
Text(stringResource(id = it))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HorizontalPager(
|
HorizontalPager(
|
||||||
state = pagerState,
|
state = pagerState,
|
||||||
modifier = Modifier.weight(1f)
|
modifier = Modifier.weight(1f)
|
||||||
) { page ->
|
) { page ->
|
||||||
val title = titles[page]
|
val title = TITLES[page]
|
||||||
val localContext = LocalContext.current
|
val localContext = LocalContext.current
|
||||||
val cameraProvider = remember { ProcessCameraProvider.getInstance(localContext) }
|
val cameraProvider = remember { ProcessCameraProvider.getInstance(localContext) }
|
||||||
|
|
||||||
@ -180,7 +170,8 @@ class LinkDeviceActivity : BaseActionBarActivity() {
|
|||||||
ScanQrCode(preview)
|
ScanQrCode(preview)
|
||||||
} else if (cameraPermissionState.status.shouldShowRationale) {
|
} else if (cameraPermissionState.status.shouldShowRationale) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.align(Alignment.Center)
|
modifier = Modifier
|
||||||
|
.align(Alignment.Center)
|
||||||
.padding(horizontal = 60.dp)
|
.padding(horizontal = 60.dp)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
@ -306,8 +297,8 @@ class Analyzer(
|
|||||||
image.imageInfo.rotationDegrees
|
image.imageInfo.rotationDegrees
|
||||||
).let(scanner::process).apply {
|
).let(scanner::process).apply {
|
||||||
addOnSuccessListener { barcodes ->
|
addOnSuccessListener { barcodes ->
|
||||||
barcodes.forEach {
|
barcodes.filter { it.valueType == Barcode.TYPE_TEXT }.forEach {
|
||||||
it.takeIf { it.valueType == Barcode.TYPE_TEXT }?.rawValue?.let(onBarcodeScanned)
|
it.rawValue?.let(onBarcodeScanned)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addOnCompleteListener {
|
addOnCompleteListener {
|
||||||
|
@ -4,6 +4,7 @@ import androidx.annotation.DrawableRes
|
|||||||
import androidx.compose.foundation.BorderStroke
|
import androidx.compose.foundation.BorderStroke
|
||||||
import androidx.compose.foundation.Canvas
|
import androidx.compose.foundation.Canvas
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.BoxScope
|
import androidx.compose.foundation.layout.BoxScope
|
||||||
import androidx.compose.foundation.layout.RowScope
|
import androidx.compose.foundation.layout.RowScope
|
||||||
@ -26,6 +27,9 @@ import androidx.compose.material.Icon
|
|||||||
import androidx.compose.material.IconButton
|
import androidx.compose.material.IconButton
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.material.OutlinedButton
|
import androidx.compose.material.OutlinedButton
|
||||||
|
import androidx.compose.material.Tab
|
||||||
|
import androidx.compose.material.TabRow
|
||||||
|
import androidx.compose.material.TabRowDefaults
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.material.TextButton
|
import androidx.compose.material.TextButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@ -38,6 +42,7 @@ import androidx.compose.ui.graphics.RectangleShape
|
|||||||
import androidx.compose.ui.graphics.StrokeCap
|
import androidx.compose.ui.graphics.StrokeCap
|
||||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.TextUnit
|
import androidx.compose.ui.unit.TextUnit
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
package org.thoughtcrime.securesms.ui.components
|
||||||
|
|
||||||
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.pager.PagerState
|
||||||
|
import androidx.compose.foundation.pager.rememberPagerState
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Tab
|
||||||
|
import androidx.compose.material.TabRow
|
||||||
|
import androidx.compose.material.TabRowDefaults
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import network.loki.messenger.R
|
||||||
|
import org.thoughtcrime.securesms.ui.LocalExtraColors
|
||||||
|
import org.thoughtcrime.securesms.ui.PreviewTheme
|
||||||
|
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
|
||||||
|
|
||||||
|
private val TITLES = listOf(R.string.activity_recovery_password, R.string.activity_link_device_scan_qr_code)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@Composable
|
||||||
|
fun SessionTabRow(pagerState: PagerState, titles: List<Int>) {
|
||||||
|
TabRow(
|
||||||
|
backgroundColor = Color.Unspecified,
|
||||||
|
selectedTabIndex = pagerState.currentPage,
|
||||||
|
contentColor = LocalExtraColors.current.prominentButtonColor,
|
||||||
|
divider = { TabRowDefaults.Divider(color = MaterialTheme.colors.onPrimary.copy(alpha = TabRowDefaults.DividerOpacity)) },
|
||||||
|
modifier = Modifier
|
||||||
|
.height(48.dp)
|
||||||
|
.background(color = Color.Unspecified)
|
||||||
|
) {
|
||||||
|
val animationScope = rememberCoroutineScope()
|
||||||
|
titles.forEachIndexed { i, it ->
|
||||||
|
Tab(
|
||||||
|
i == pagerState.currentPage,
|
||||||
|
onClick = { animationScope.launch { pagerState.animateScrollToPage(i) } },
|
||||||
|
selectedContentColor = MaterialTheme.colors.onPrimary,
|
||||||
|
unselectedContentColor = MaterialTheme.colors.onPrimary,
|
||||||
|
) {
|
||||||
|
Text(stringResource(id = it))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@androidx.compose.ui.tooling.preview.Preview
|
||||||
|
@Composable
|
||||||
|
fun PreviewSessionTabRow(
|
||||||
|
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
|
||||||
|
) {
|
||||||
|
PreviewTheme(themeResId) {
|
||||||
|
val pagerState = rememberPagerState { TITLES.size }
|
||||||
|
SessionTabRow(pagerState = pagerState, titles = TITLES)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user