Add strings and make qr scan call callback

This commit is contained in:
Andrew 2024-05-08 21:09:06 +09:30
parent 853c165949
commit a054fae758
8 changed files with 31 additions and 24 deletions

View File

@ -122,12 +122,12 @@ private fun NewMessage(
val pagerState = rememberPagerState { TITLES.size } val pagerState = rememberPagerState { TITLES.size }
Column(modifier = Modifier.background(MaterialTheme.colors.primarySurface)) { Column(modifier = Modifier.background(MaterialTheme.colors.primarySurface)) {
AppBar(stringResource(R.string.messageNew), onClose = { onClose() }, onBack = { onBack() }) AppBar(stringResource(R.string.messageNew), onClose = onClose, onBack = onBack)
SessionTabRow(pagerState, TITLES) SessionTabRow(pagerState, TITLES)
HorizontalPager(pagerState) { HorizontalPager(pagerState) {
when (TITLES[it]) { when (TITLES[it]) {
R.string.enter_account_id -> EnterAccountId(state, callbacks, onHelp) R.string.enter_account_id -> EnterAccountId(state, callbacks, onHelp)
R.string.qrScan -> MaybeScanQrCode() R.string.qrScan -> MaybeScanQrCode(onScan = callbacks::onScan)
} }
} }
} }

View File

@ -10,6 +10,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
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
@ -78,7 +79,7 @@ class LinkDeviceActivity : BaseActionBarActivity() {
setContent { setContent {
val state by viewModel.stateFlow.collectAsState() val state by viewModel.stateFlow.collectAsState()
AppTheme { AppTheme {
LoadAccountScreen(state, viewModel::onChange, viewModel::onContinue) LoadAccountScreen(state, viewModel::onChange, viewModel::onContinue, viewModel::scan)
} }
} }
}.let(::setContentView) }.let(::setContentView)
@ -86,7 +87,12 @@ class LinkDeviceActivity : BaseActionBarActivity() {
@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 = {},
onScan: (String) -> Unit = {}
) {
val pagerState = rememberPagerState { TITLES.size } val pagerState = rememberPagerState { TITLES.size }
Column { Column {
@ -99,7 +105,7 @@ class LinkDeviceActivity : BaseActionBarActivity() {
when (title) { when (title) {
R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue) R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue)
R.string.qrScan -> MaybeScanQrCode(viewModel.qrErrorsFlow) R.string.qrScan -> MaybeScanQrCode(viewModel.qrErrorsFlow, onScan = onScan)
} }
} }
} }
@ -128,14 +134,15 @@ fun RecoveryPassword(state: LinkDeviceState, onChange: (String) -> Unit = {}, on
Text(stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings)) Text(stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings))
Spacer(Modifier.size(24.dp)) Spacer(Modifier.size(24.dp))
SessionOutlinedTextField( SessionOutlinedTextField(
text = state.recoveryPhrase, text = state.recoveryPhrase,
modifier = Modifier modifier = Modifier
.contentDescription(R.string.AccessibilityId_recovery_phrase_input) .fillMaxWidth()
.padding(horizontal = 64.dp), .contentDescription(R.string.AccessibilityId_recovery_phrase_input)
placeholder = stringResource(R.string.recoveryPasswordEnter), .padding(horizontal = 64.dp),
onChange = onChange, placeholder = stringResource(R.string.recoveryPasswordEnter),
onContinue = onContinue, onChange = onChange,
error = state.error onContinue = onContinue,
error = state.error
) )
Spacer(Modifier.size(12.dp)) Spacer(Modifier.size(12.dp))
state.error?.let { state.error?.let {

View File

@ -17,8 +17,6 @@ import androidx.compose.foundation.verticalScroll
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
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -36,12 +34,10 @@ import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.showSessionDialog import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.ui.AppTheme import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin
import org.thoughtcrime.securesms.ui.LocalButtonColor
import org.thoughtcrime.securesms.ui.PreviewTheme import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.SessionShieldIcon import org.thoughtcrime.securesms.ui.SessionShieldIcon
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.classicDarkColors import org.thoughtcrime.securesms.ui.classicDarkColors
import org.thoughtcrime.securesms.ui.colorDestructive
import org.thoughtcrime.securesms.ui.components.DestructiveButtons import org.thoughtcrime.securesms.ui.components.DestructiveButtons
import org.thoughtcrime.securesms.ui.components.OutlineButton import org.thoughtcrime.securesms.ui.components.OutlineButton
import org.thoughtcrime.securesms.ui.components.QrImage import org.thoughtcrime.securesms.ui.components.QrImage

View File

@ -32,18 +32,18 @@ import org.thoughtcrime.securesms.util.start
private val TITLES = listOf(R.string.view, R.string.scan) private val TITLES = listOf(R.string.view, R.string.scan)
class QRCodeActivity : PassphraseRequiredActionBarActivity(), ScanQRCodeWrapperFragmentDelegate { class QRCodeActivity : PassphraseRequiredActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
supportActionBar!!.title = resources.getString(R.string.activity_qr_code_title) supportActionBar!!.title = resources.getString(R.string.activity_qr_code_title)
setComposeContent { setComposeContent {
Tabs(TextSecurePreferences.getLocalNumber(this)!!) Tabs(TextSecurePreferences.getLocalNumber(this)!!, onScan = ::handleQRCodeScanned)
} }
} }
override fun handleQRCodeScanned(string: String) { fun handleQRCodeScanned(string: String) {
if (!PublicKeyValidation.isValid(string)) { if (!PublicKeyValidation.isValid(string)) {
return Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show()
} }
@ -60,7 +60,7 @@ class QRCodeActivity : PassphraseRequiredActionBarActivity(), ScanQRCodeWrapperF
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun Tabs(sessionId: String) { fun Tabs(sessionId: String, onScan: (String) -> Unit) {
val pagerState = rememberPagerState { TITLES.size } val pagerState = rememberPagerState { TITLES.size }
Column { Column {
@ -71,7 +71,7 @@ fun Tabs(sessionId: String) {
) { page -> ) { page ->
when (TITLES[page]) { when (TITLES[page]) {
R.string.view -> QrPage(sessionId) R.string.view -> QrPage(sessionId)
R.string.scan -> MaybeScanQrCode() R.string.scan -> MaybeScanQrCode(onScan = onScan)
} }
} }
} }

View File

@ -64,7 +64,6 @@ import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.truncateIdForDisplay import org.session.libsession.utilities.truncateIdForDisplay
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.session.libsignal.utilities.getProperty
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.avatar.AvatarSelection import org.thoughtcrime.securesms.avatar.AvatarSelection
import org.thoughtcrime.securesms.components.ProfilePictureView import org.thoughtcrime.securesms.components.ProfilePictureView

View File

@ -67,7 +67,7 @@ fun MaybeScanQrCode(
data = Uri.fromParts("package", packageName, null) data = Uri.fromParts("package", packageName, null)
}.let(::startActivity) }.let(::startActivity)
} }, } },
onScan: (String) -> Unit = {} onScan: (String) -> Unit
) { ) {
Box(modifier = Modifier.fillMaxSize()) { Box(modifier = Modifier.fillMaxSize()) {
LocalSoftwareKeyboardController.current?.hide() LocalSoftwareKeyboardController.current?.hide()

View File

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.ui.components package org.thoughtcrime.securesms.ui.components
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
@ -26,6 +27,7 @@ fun SessionOutlinedTextField(
Column(modifier = modifier) { Column(modifier = modifier) {
OutlinedTextField( OutlinedTextField(
value = text, value = text,
modifier = Modifier.fillMaxWidth(),
onValueChange = { onChange(it) }, onValueChange = { onChange(it) },
placeholder = { Text(placeholder) }, placeholder = { Text(placeholder) },
colors = outlinedTextFieldColors(error != null), colors = outlinedTextFieldColors(error != null),

View File

@ -1122,4 +1122,7 @@
<string name="accountIdOrOnsEnter">Enter account ID or ONS</string> <string name="accountIdOrOnsEnter">Enter account ID or ONS</string>
<string name="messageNewDescription">Start a new conversation by entering your friend\'s Account ID, ONS or scanning their QR code.</string> <string name="messageNewDescription">Start a new conversation by entering your friend\'s Account ID, ONS or scanning their QR code.</string>
<string name="messageNew">New Message</string> <string name="messageNew">New Message</string>
<string name="unknown">Unknown</string>
<string name="contacts">Contacts</string>
<string name="conversations">Conversations</string>
</resources> </resources>