mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-02-04 18:55:33 +00:00
Continue implementing copying multireddits.
This commit is contained in:
@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.text.input.rememberTextFieldState
|
||||
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Scaffold
|
||||
@ -130,22 +128,14 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
val scrollBehavior = enterAlwaysScrollBehavior()
|
||||
val multiRedditState by copyMultiRedditActivityViewModel.multiRedditState.collectAsStateWithLifecycle()
|
||||
val copyMultiRedditState by copyMultiRedditActivityViewModel.copyMultiRedditState.collectAsStateWithLifecycle()
|
||||
val name = rememberTextFieldState()
|
||||
val description = rememberTextFieldState()
|
||||
val name by copyMultiRedditActivityViewModel.name.collectAsStateWithLifecycle()
|
||||
val description by copyMultiRedditActivityViewModel.description.collectAsStateWithLifecycle()
|
||||
var isPrivate by remember { mutableStateOf(true) }
|
||||
|
||||
val scope = rememberCoroutineScope()
|
||||
val snackbarHostState = remember { SnackbarHostState() }
|
||||
val copyingMultiRedditMessage = stringResource(R.string.copying_multi_reddit)
|
||||
|
||||
LaunchedEffect(multiRedditState) {
|
||||
if (multiRedditState is DataLoadState.Success) {
|
||||
val multiReddit = (multiRedditState as DataLoadState.Success).data
|
||||
name.setTextAndPlaceCursorAtEnd(multiReddit.name)
|
||||
description.setTextAndPlaceCursorAtEnd(multiReddit.description)
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(copyMultiRedditState) {
|
||||
when (copyMultiRedditState) {
|
||||
is ActionState.Error -> {
|
||||
@ -178,10 +168,7 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
actions = {
|
||||
IconButton(onClick = {
|
||||
if (multiRedditState is DataLoadState.Success) {
|
||||
copyMultiRedditActivityViewModel.copyMultiRedditInfo(
|
||||
name.text.toString(),
|
||||
description.text.toString()
|
||||
)
|
||||
copyMultiRedditActivityViewModel.copyMultiRedditInfo()
|
||||
}
|
||||
}) {
|
||||
ToolbarIcon(
|
||||
@ -254,9 +241,11 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp)
|
||||
.padding(top = 16.dp, bottom = 8.dp),
|
||||
state = name,
|
||||
value = name,
|
||||
placeholder = stringResource(R.string.multi_reddit_name_hint)
|
||||
)
|
||||
) {
|
||||
copyMultiRedditActivityViewModel.setName(it)
|
||||
}
|
||||
}
|
||||
|
||||
item {
|
||||
@ -265,9 +254,11 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp)
|
||||
.padding(top = 8.dp, bottom = 8.dp),
|
||||
state = description,
|
||||
value = description,
|
||||
placeholder = stringResource(R.string.multi_reddit_description_hint)
|
||||
)
|
||||
) {
|
||||
copyMultiRedditActivityViewModel.setDescription(it)
|
||||
}
|
||||
}
|
||||
|
||||
item {
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package ml.docilealligator.infinityforreddit.customviews.compose
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.text.input.TextFieldLineLimits
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
@ -36,4 +34,37 @@ fun CustomTextField(
|
||||
cursorColor = Color(LocalAppTheme.current.colorPrimary)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CustomTextField(
|
||||
modifier: Modifier = Modifier,
|
||||
value: String,
|
||||
placeholder: String,
|
||||
singleLine: Boolean = false,
|
||||
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
|
||||
minLines: Int = 1,
|
||||
onValueChange: (String) -> Unit
|
||||
) {
|
||||
OutlinedTextField(
|
||||
value = value,
|
||||
modifier = modifier,
|
||||
placeholder = {
|
||||
Text(
|
||||
text = placeholder,
|
||||
color = Color(LocalAppTheme.current.secondaryTextColor)
|
||||
)
|
||||
},
|
||||
singleLine = singleLine,
|
||||
maxLines = maxLines,
|
||||
minLines = minLines,
|
||||
colors = OutlinedTextFieldDefaults.colors(
|
||||
focusedTextColor = Color(LocalAppTheme.current.primaryTextColor),
|
||||
unfocusedTextColor = Color(LocalAppTheme.current.primaryTextColor),
|
||||
focusedBorderColor = Color(LocalAppTheme.current.primaryTextColor),
|
||||
unfocusedBorderColor = Color(LocalAppTheme.current.secondaryTextColor),
|
||||
cursorColor = Color(LocalAppTheme.current.colorPrimary)
|
||||
),
|
||||
onValueChange = onValueChange
|
||||
)
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
package ml.docilealligator.infinityforreddit.viewmodels
|
||||
|
||||
import android.app.Notification
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@ -14,29 +13,50 @@ import ml.docilealligator.infinityforreddit.ActionState
|
||||
import ml.docilealligator.infinityforreddit.DataLoadState
|
||||
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit
|
||||
import ml.docilealligator.infinityforreddit.repositories.CopyMultiRedditActivityRepository
|
||||
import ml.docilealligator.infinityforreddit.repositories.EditCommentActivityRepository
|
||||
|
||||
class CopyMultiRedditActivityViewModel(
|
||||
val multipath: String,
|
||||
val copyMultiRedditActivityRepository: CopyMultiRedditActivityRepository
|
||||
): ViewModel() {
|
||||
private val _name = MutableStateFlow("")
|
||||
val name = _name.asStateFlow()
|
||||
|
||||
private val _description = MutableStateFlow("")
|
||||
val description = _description.asStateFlow()
|
||||
|
||||
private val _multiRedditState = MutableStateFlow<DataLoadState<MultiReddit>>(DataLoadState.Loading)
|
||||
val multiRedditState: StateFlow<DataLoadState<MultiReddit>> = _multiRedditState.asStateFlow()
|
||||
|
||||
private val _copyMultiRedditState = MutableStateFlow<ActionState>(ActionState.Idle)
|
||||
val copyMultiRedditState: StateFlow<ActionState> = _copyMultiRedditState.asStateFlow()
|
||||
|
||||
fun setName(name: String) {
|
||||
_name.value = name
|
||||
}
|
||||
|
||||
fun setDescription(description: String) {
|
||||
_description.value = description
|
||||
}
|
||||
|
||||
fun fetchMultiRedditInfo() {
|
||||
if (_multiRedditState.value is DataLoadState.Success) {
|
||||
return
|
||||
}
|
||||
|
||||
_multiRedditState.value = DataLoadState.Loading
|
||||
|
||||
viewModelScope.launch {
|
||||
_multiRedditState.value = DataLoadState.Loading
|
||||
val multiReddit = copyMultiRedditActivityRepository.fetchMultiRedditInfo(multipath)
|
||||
_multiRedditState.value = multiReddit?.let {
|
||||
_name.value = it.name
|
||||
_description.value = it.description
|
||||
|
||||
DataLoadState.Success(it)
|
||||
} ?: DataLoadState.Error("Failed to load multiReddit")
|
||||
}
|
||||
}
|
||||
|
||||
fun copyMultiRedditInfo(name: String, description: String) {
|
||||
fun copyMultiRedditInfo() {
|
||||
if (_copyMultiRedditState.value == ActionState.Running) {
|
||||
return
|
||||
}
|
||||
@ -44,7 +64,7 @@ class CopyMultiRedditActivityViewModel(
|
||||
_copyMultiRedditState.value = ActionState.Running
|
||||
|
||||
viewModelScope.launch {
|
||||
when (val result = copyMultiRedditActivityRepository.copyMultiReddit(multipath, name, description)) {
|
||||
when (val result = copyMultiRedditActivityRepository.copyMultiReddit(multipath, _name.value, _description.value)) {
|
||||
is APIResult.Success -> {
|
||||
_copyMultiRedditState.value = ActionState.Success(result.data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user