mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-27 12:05:22 +00:00
Reinstate landing chat animation
This commit is contained in:
parent
d331df6334
commit
d0ebd3533b
@ -3,18 +3,33 @@ package org.thoughtcrime.securesms.onboarding
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.animation.core.tween
|
||||||
|
import androidx.compose.animation.fadeIn
|
||||||
|
import androidx.compose.animation.slideInVertically
|
||||||
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
|
import androidx.compose.foundation.lazy.items
|
||||||
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
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.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
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
|
||||||
@ -25,6 +40,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import org.session.libsession.utilities.TextSecurePreferences
|
import org.session.libsession.utilities.TextSecurePreferences
|
||||||
import org.thoughtcrime.securesms.BaseActionBarActivity
|
import org.thoughtcrime.securesms.BaseActionBarActivity
|
||||||
@ -40,9 +56,21 @@ import org.thoughtcrime.securesms.ui.OutlineButton
|
|||||||
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
|
||||||
import org.thoughtcrime.securesms.ui.contentDescription
|
|
||||||
import org.thoughtcrime.securesms.ui.session_accent
|
import org.thoughtcrime.securesms.ui.session_accent
|
||||||
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
|
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
|
||||||
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
|
private data class TextData(
|
||||||
|
@StringRes val stringId: Int,
|
||||||
|
val isOutgoing: Boolean = false
|
||||||
|
)
|
||||||
|
|
||||||
|
private val MESSAGES = listOf(
|
||||||
|
TextData(R.string.onboardingBubbleWelcomeToSession),
|
||||||
|
TextData(R.string.onboardingBubbleSessionIsEngineered, isOutgoing = true),
|
||||||
|
TextData(R.string.onboardingBubbleNoPhoneNumber),
|
||||||
|
TextData(R.string.onboardingBubbleCreatingAnAccountIsEasy, isOutgoing = true)
|
||||||
|
)
|
||||||
|
|
||||||
class LandingActivity : BaseActionBarActivity() {
|
class LandingActivity : BaseActionBarActivity() {
|
||||||
|
|
||||||
@ -75,19 +103,51 @@ class LandingActivity : BaseActionBarActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun LandingScreen() {
|
private fun LandingScreen() {
|
||||||
|
|
||||||
|
var count by remember { mutableStateOf(0) }
|
||||||
|
val listState = rememberLazyListState()
|
||||||
|
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
delay(500.milliseconds)
|
||||||
|
while(count < MESSAGES.size) {
|
||||||
|
count += 1
|
||||||
|
listState.animateScrollToItem(0.coerceAtLeast((count - 1)))
|
||||||
|
delay(1500L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Column(modifier = Modifier.padding(horizontal = 36.dp)) {
|
Column(modifier = Modifier.padding(horizontal = 36.dp)) {
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
Text(stringResource(R.string.onboardingBubblePrivacyInYourPocket), modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
|
Text(
|
||||||
|
stringResource(R.string.onboardingBubblePrivacyInYourPocket),
|
||||||
|
modifier = Modifier.align(Alignment.CenterHorizontally),
|
||||||
|
style = MaterialTheme.typography.h4,
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.height(24.dp))
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
IncomingText(stringResource(R.string.onboardingBubbleWelcomeToSession))
|
|
||||||
Spacer(modifier = Modifier.height(14.dp))
|
LazyColumn(
|
||||||
OutgoingText(stringResource(R.string.onboardingBubbleSessionIsEngineered))
|
state = listState,
|
||||||
Spacer(modifier = Modifier.height(14.dp))
|
modifier = Modifier
|
||||||
IncomingText(stringResource(R.string.onboardingBubbleNoPhoneNumber))
|
.fillMaxWidth()
|
||||||
Spacer(modifier = Modifier.height(14.dp))
|
.weight(1f),
|
||||||
OutgoingText(stringResource(R.string.onboardingBubbleCreatingAnAccountIsEasy))
|
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||||
|
) {
|
||||||
|
items(
|
||||||
|
MESSAGES.take(count),
|
||||||
|
key = { it.stringId }
|
||||||
|
) { item ->
|
||||||
|
MessageText(
|
||||||
|
stringResource(item.stringId),
|
||||||
|
item.isOutgoing,
|
||||||
|
modifier = Modifier.animateItemPlacement()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
OutlineButton(
|
OutlineButton(
|
||||||
@ -139,21 +199,29 @@ class LandingActivity : BaseActionBarActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun IncomingText(text: String) {
|
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) {
|
||||||
ChatText(
|
ChatText(
|
||||||
text,
|
text,
|
||||||
color = classicDarkColors[2]
|
color = classicDarkColors[2],
|
||||||
|
modifier = modifier
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun ColumnScope.OutgoingText(text: String) {
|
private fun OutgoingText(text: String, modifier: Modifier) {
|
||||||
ChatText(
|
Box(modifier = modifier then Modifier.fillMaxWidth()) {
|
||||||
text,
|
ChatText(
|
||||||
color = session_accent,
|
text,
|
||||||
textColor = MaterialTheme.colors.primary,
|
color = session_accent,
|
||||||
modifier = Modifier.align(Alignment.End)
|
textColor = MaterialTheme.colors.primary,
|
||||||
)
|
modifier = Modifier.align(Alignment.TopEnd)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
Loading…
Reference in New Issue
Block a user