Rename LoadAccount

This commit is contained in:
Andrew 2024-06-17 18:56:14 +09:30
parent d6a659025d
commit a1882b83f9
6 changed files with 85 additions and 86 deletions

View File

@ -108,7 +108,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" /> android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity <activity
android:name="org.thoughtcrime.securesms.onboarding.LinkDeviceActivity" android:name="org.thoughtcrime.securesms.onboarding.LoadAccountActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" /> android:theme="@style/Theme.Session.DayNight.FlatActionBar" />

View File

@ -1,6 +0,0 @@
package org.thoughtcrime.securesms.onboarding
data class LinkDeviceState(
val recoveryPhrase: String = "",
val error: String? = null
)

View File

@ -7,7 +7,7 @@ import dagger.hilt.android.AndroidEntryPoint
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.BaseActionBarActivity import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.onboarding.LinkDeviceActivity import org.thoughtcrime.securesms.onboarding.loadaccount.LoadAccountActivity
import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.service.KeyCachingService
import org.thoughtcrime.securesms.ui.setComposeContent import org.thoughtcrime.securesms.ui.setComposeContent
@ -35,7 +35,7 @@ class LandingActivity: BaseActionBarActivity() {
prefs.setHasViewedSeed(false) prefs.setHasViewedSeed(false)
startPickDisplayNameActivity() startPickDisplayNameActivity()
}, },
loadAccount = { start<LinkDeviceActivity>() }, loadAccount = { start<LoadAccountActivity>() },
openTerms = { open("https://getsession.org/terms-of-service") }, openTerms = { open("https://getsession.org/terms-of-service") },
openPrivacyPolicy = { open("https://getsession.org/privacy-policy") } openPrivacyPolicy = { open("https://getsession.org/privacy-policy") }
) )

View File

@ -1,8 +1,5 @@
package org.thoughtcrime.securesms.onboarding package org.thoughtcrime.securesms.onboarding.loadaccount
import android.os.Bundle
import androidx.activity.viewModels
import androidx.camera.core.ExperimentalGetImage
import androidx.compose.foundation.ExperimentalFoundationApi 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
@ -16,74 +13,31 @@ import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.flow.Flow
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.onboarding.loading.LoadingManager
import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
import org.thoughtcrime.securesms.onboarding.ui.ContinueButton import org.thoughtcrime.securesms.onboarding.ui.ContinueButton
import org.thoughtcrime.securesms.ui.LocalDimensions import org.thoughtcrime.securesms.ui.LocalDimensions
import org.thoughtcrime.securesms.ui.PreviewTheme import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.base import org.thoughtcrime.securesms.ui.base
import org.thoughtcrime.securesms.ui.components.MaybeScanQrCode import org.thoughtcrime.securesms.ui.components.MaybeScanQrCode
import org.thoughtcrime.securesms.ui.components.OutlineButton
import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField
import org.thoughtcrime.securesms.ui.components.SessionTabRow import org.thoughtcrime.securesms.ui.components.SessionTabRow
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.h4 import org.thoughtcrime.securesms.ui.h4
import org.thoughtcrime.securesms.ui.setComposeContent
import javax.inject.Inject
private const val TAG = "LinkDeviceActivity"
private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan) private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
@AndroidEntryPoint
@androidx.annotation.OptIn(ExperimentalGetImage::class)
class LinkDeviceActivity : BaseActionBarActivity() {
@Inject lateinit var prefs: TextSecurePreferences
@Inject lateinit var loadingManager: LoadingManager
val viewModel: LinkDeviceViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.setTitle(R.string.activity_link_load_account)
prefs.setHasViewedSeed(true)
prefs.setConfigurationMessageSynced(false)
prefs.setRestorationTime(System.currentTimeMillis())
prefs.setLastProfileUpdateTime(0)
lifecycleScope.launch {
viewModel.eventFlow.collect {
loadingManager.load(it.mnemonic)
startMessageNotificationsActivity()
finish()
}
}
setComposeContent {
val state by viewModel.stateFlow.collectAsState()
LoadAccountScreen(state, viewModel::onChange, viewModel::onContinue, viewModel::onScanQrCode)
}
}
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun LoadAccountScreen( internal fun LoadAccountScreen(
state: LinkDeviceState, state: State,
qrErrors: Flow<String>,
onChange: (String) -> Unit = {}, onChange: (String) -> Unit = {},
onContinue: () -> Unit = {}, onContinue: () -> Unit = {},
onScan: (String) -> Unit = {} onScan: (String) -> Unit = {}
@ -96,12 +50,9 @@ class LinkDeviceActivity : BaseActionBarActivity() {
state = pagerState, state = pagerState,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
) { page -> ) { page ->
val title = TITLES[page] when (TITLES[page]) {
when (title) {
R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue) R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue)
R.string.qrScan -> MaybeScanQrCode(viewModel.qrErrorsFlow, onScan = onScan) R.string.qrScan -> MaybeScanQrCode(qrErrors, onScan = onScan)
}
} }
} }
} }
@ -109,14 +60,14 @@ class LinkDeviceActivity : BaseActionBarActivity() {
@Preview @Preview
@Composable @Composable
fun PreviewRecoveryPassword() { private fun PreviewRecoveryPassword() {
PreviewTheme { PreviewTheme {
RecoveryPassword(state = LinkDeviceState()) RecoveryPassword(state = State())
} }
} }
@Composable @Composable
fun RecoveryPassword(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) { private fun RecoveryPassword(state: State, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
Column { Column {
Column( Column(
modifier = Modifier.padding(horizontal = LocalDimensions.current.marginLarge) modifier = Modifier.padding(horizontal = LocalDimensions.current.marginLarge)

View File

@ -0,0 +1,49 @@
package org.thoughtcrime.securesms.onboarding.loadaccount
import android.os.Bundle
import androidx.activity.viewModels
import androidx.camera.core.ExperimentalGetImage
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.onboarding.loading.LoadingManager
import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
import org.thoughtcrime.securesms.ui.setComposeContent
import javax.inject.Inject
@AndroidEntryPoint
@androidx.annotation.OptIn(ExperimentalGetImage::class)
class LoadAccountActivity : BaseActionBarActivity() {
@Inject lateinit var prefs: TextSecurePreferences
@Inject lateinit var loadingManager: LoadingManager
private val viewModel: LinkDeviceViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.setTitle(R.string.activity_link_load_account)
prefs.setHasViewedSeed(true)
prefs.setConfigurationMessageSynced(false)
prefs.setRestorationTime(System.currentTimeMillis())
prefs.setLastProfileUpdateTime(0)
lifecycleScope.launch {
viewModel.eventFlow.collect {
loadingManager.load(it.mnemonic)
startMessageNotificationsActivity()
finish()
}
}
setComposeContent {
val state by viewModel.stateFlow.collectAsState()
LoadAccountScreen(state, viewModel.qrErrorsFlow, viewModel::onChange, viewModel::onContinue, viewModel::onScanQrCode)
}
}
}

View File

@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.onboarding package org.thoughtcrime.securesms.onboarding.loadaccount
import android.app.Application import android.app.Application
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
@ -22,11 +22,16 @@ import javax.inject.Inject
class LinkDeviceEvent(val mnemonic: ByteArray) class LinkDeviceEvent(val mnemonic: ByteArray)
internal data class State(
val recoveryPhrase: String = "",
val error: String? = null
)
@HiltViewModel @HiltViewModel
class LinkDeviceViewModel @Inject constructor( internal class LinkDeviceViewModel @Inject constructor(
private val application: Application private val application: Application
): AndroidViewModel(application) { ): AndroidViewModel(application) {
private val state = MutableStateFlow(LinkDeviceState()) private val state = MutableStateFlow(State())
val stateFlow = state.asStateFlow() val stateFlow = state.asStateFlow()
private val event = Channel<LinkDeviceEvent>() private val event = Channel<LinkDeviceEvent>()
@ -56,7 +61,7 @@ class LinkDeviceViewModel @Inject constructor(
} }
fun onChange(recoveryPhrase: String) { fun onChange(recoveryPhrase: String) {
state.value = LinkDeviceState(recoveryPhrase) state.value = State(recoveryPhrase)
} }
private fun onSuccess(seed: ByteArray) { private fun onSuccess(seed: ByteArray) {
viewModelScope.launch { event.send(LinkDeviceEvent(seed)) } viewModelScope.launch { event.send(LinkDeviceEvent(seed)) }