@ -16,6 +16,7 @@ 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.size
import androidx.compose.foundation.layout.size
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.itemsIndexed
import androidx.compose.foundation.lazy.itemsIndexed
@ -41,10 +42,18 @@ import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ModifierLocalBeyondBoundsLayout
import androidx.compose.ui.layout.ModifierLocalBeyondBoundsLayout
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
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.dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.text.HtmlCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.lifecycle.repeatOnLifecycle
@ -82,14 +91,6 @@ class ExpirationSettingsActivity: PassphraseRequiredActionBarActivity() {
viewModelFactory . create ( threadId )
viewModelFactory . create ( threadId )
}
}
// override fun onSaveInstanceState(outState: Bundle) {
// super.onSaveInstanceState(outState)
// val scrollParcelArray = SparseArray<Parcelable>()
// binding.scrollView.saveHierarchyState(scrollParcelArray)
// outState.putSparseParcelableArray(SCROLL_PARCEL, scrollParcelArray)
// }
override fun onCreate ( savedInstanceState : Bundle ? , ready : Boolean ) {
override fun onCreate ( savedInstanceState : Bundle ? , ready : Boolean ) {
super . onCreate ( savedInstanceState , ready )
super . onCreate ( savedInstanceState , ready )
binding = ActivityExpirationSettingsBinding . inflate ( layoutInflater )
binding = ActivityExpirationSettingsBinding . inflate ( layoutInflater )
@ -99,31 +100,10 @@ class ExpirationSettingsActivity: PassphraseRequiredActionBarActivity() {
binding . container . setContent { DisappearingMessagesScreen ( ) }
binding . container . setContent { DisappearingMessagesScreen ( ) }
// savedInstanceState?.let { bundle ->
// val scrollStateParcel = bundle.getSparseParcelableArray<Parcelable>(SCROLL_PARCEL)
// if (scrollStateParcel != null) {
// binding.scrollView.restoreHierarchyState(scrollStateParcel)
// }
// }
// val deleteTypeOptions = viewModel.getDeleteOptions()
// binding.buttonSet.setOnClickListener {
// viewModel.onSetClick()
// }
lifecycleScope . launch {
lifecycleScope . launch {
repeatOnLifecycle ( Lifecycle . State . STARTED ) {
repeatOnLifecycle ( Lifecycle . State . STARTED ) {
viewModel . state . collect { state ->
viewModel . state . collect { state ->
// actionBar?.subtitle = if (state.selectedExpirationType.value is ExpiryMode.AfterSend) {
actionBar ?. subtitle = state . subtitle ( this @ExpirationSettingsActivity )
// getString(R.string.activity_expiration_settings_subtitle_sent)
// } else {
// getString(R.string.activity_expiration_settings_subtitle)
// }
// binding.textViewDeleteType.isVisible = state.showExpirationTypeSelector
// binding.layoutDeleteTypes.isVisible = state.showExpirationTypeSelector
// binding.textViewFooter.isVisible = state.recipient?.isClosedGroupRecipient == true
// binding.textViewFooter.text = HtmlCompat.fromHtml(getString(R.string.activity_expiration_settings_group_footer), HtmlCompat.FROM_HTML_MODE_COMPACT)
when ( state . settingsSaved ) {
when ( state . settingsSaved ) {
true -> {
true -> {
@ -181,7 +161,6 @@ class ExpirationSettingsActivity: PassphraseRequiredActionBarActivity() {
}
}
companion object {
companion object {
private const val SCROLL _PARCEL = " scroll_parcel "
const val THREAD _ID = " thread_id "
const val THREAD _ID = " thread_id "
}
}
@ -215,6 +194,14 @@ fun DisappearingMessages(
state . cards . filter { it . options . isNotEmpty ( ) } . forEach {
state . cards . filter { it . options . isNotEmpty ( ) } . forEach {
OptionsCard ( it )
OptionsCard ( it )
}
}
if ( state . showGroupFooter ) Text ( text = stringResource ( R . string . activity _expiration _settings _group _footer ) ,
style = TextStyle (
fontSize = 11. sp ,
fontWeight = FontWeight ( 400 ) ,
color = Color ( 0xFFA1A2A1 ) ,
textAlign = TextAlign . Center ) ,
modifier = Modifier . fillMaxWidth ( ) )
}
}
}
}
@ -253,7 +240,8 @@ fun Modifier.fadingEdges(
val bottomColors = listOf ( Color . Black , Color . Transparent )
val bottomColors = listOf ( Color . Black , Color . Transparent )
val bottomEndY = size . height - scrollState . maxValue + scrollState . value
val bottomEndY = size . height - scrollState . maxValue + scrollState . value
val bottomGradientHeight = min ( bottomEdgeHeight . toPx ( ) , scrollState . maxValue . toFloat ( ) - scrollState . value )
val bottomGradientHeight =
min ( bottomEdgeHeight . toPx ( ) , scrollState . maxValue . toFloat ( ) - scrollState . value )
if ( bottomGradientHeight != 0f ) drawRect (
if ( bottomGradientHeight != 0f ) drawRect (
brush = Brush . verticalGradient (
brush = Brush . verticalGradient (
colors = bottomColors ,
colors = bottomColors ,
@ -280,22 +268,6 @@ fun OptionsCard(card: CardModel) {
}
}
}
}
@Composable
fun Gradient ( height : Dp , modifier : Modifier = Modifier ) {
Box (
modifier = modifier
. fillMaxWidth ( )
. height ( height )
// .background(
// brush = Brush.verticalGradient(
// colors = listOf(Color.Transparent, MaterialTheme.colors.primary),
// startY = 0f,
// endY = height.value
// )
// )
)
}
@Composable
@Composable
fun TitledRadioButton ( option : OptionModel ) {
fun TitledRadioButton ( option : OptionModel ) {
Row ( modifier = Modifier
Row ( modifier = Modifier
@ -341,8 +313,8 @@ fun PreviewMessageDetails(
DisappearingMessages (
DisappearingMessages (
UiState (
UiState (
cards = listOf (
cards = listOf (
CardModel ( GetString ( R . string . activity _expiration _settings _delete _type ) , t ypeOptions( ) ) ,
CardModel ( GetString ( R . string . activity _expiration _settings _delete _type ) , previewT ypeOptions( ) ) ,
CardModel ( GetString ( R . string . activity _expiration _settings _timer ) , t imeOptions( ) )
CardModel ( GetString ( R . string . activity _expiration _settings _timer ) , previewT imeOptions( ) )
)
)
) ,
) ,
modifier = Modifier . size ( 400. dp , 600. dp )
modifier = Modifier . size ( 400. dp , 600. dp )
@ -350,14 +322,14 @@ fun PreviewMessageDetails(
}
}
}
}
fun t ypeOptions( ) = listOf (
fun previewT ypeOptions( ) = listOf (
OptionModel ( GetString ( R . string . expiration _off ) ) ,
OptionModel ( GetString ( R . string . expiration _off ) ) ,
OptionModel ( GetString ( R . string . expiration _type _disappear _legacy ) ) ,
OptionModel ( GetString ( R . string . expiration _type _disappear _legacy ) ) ,
OptionModel ( GetString ( R . string . expiration _type _disappear _after _read ) ) ,
OptionModel ( GetString ( R . string . expiration _type _disappear _after _read ) ) ,
OptionModel ( GetString ( R . string . expiration _type _disappear _after _send ) )
OptionModel ( GetString ( R . string . expiration _type _disappear _after _send ) )
)
)
fun t imeOptions( ) = listOf (
fun previewT imeOptions( ) = listOf (
OptionModel ( GetString ( " 1 Minute " ) ) ,
OptionModel ( GetString ( " 1 Minute " ) ) ,
OptionModel ( GetString ( " 5 Minutes " ) ) ,
OptionModel ( GetString ( " 5 Minutes " ) ) ,
OptionModel ( GetString ( " 1 Week " ) ) ,
OptionModel ( GetString ( " 1 Week " ) ) ,