From 92d84ccb0fdb8a024abf145178674b093249bed8 Mon Sep 17 00:00:00 2001 From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> Date: Sat, 29 Nov 2025 23:00:53 -0500 Subject: [PATCH] Continue implementing copying multireddits. --- .../activities/CopyMultiRedditActivity.kt | 77 ++++++++----------- .../customviews/compose/CustomAppBar.kt | 49 ++++++++++++ 2 files changed, 82 insertions(+), 44 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAppBar.kt diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CopyMultiRedditActivity.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CopyMultiRedditActivity.kt index 48f0f4ae..bcade74f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CopyMultiRedditActivity.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CopyMultiRedditActivity.kt @@ -5,29 +5,31 @@ import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing 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.OutlinedTextFieldDefaults.contentPadding import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarDefaults.enterAlwaysScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -60,6 +62,7 @@ import ml.docilealligator.infinityforreddit.customviews.compose.LocalAppTheme import ml.docilealligator.infinityforreddit.customviews.compose.PrimaryIcon import ml.docilealligator.infinityforreddit.customviews.compose.PrimaryText import ml.docilealligator.infinityforreddit.customviews.compose.SwitchRow +import ml.docilealligator.infinityforreddit.customviews.compose.ThemedTopAppBar import ml.docilealligator.infinityforreddit.customviews.compose.ToolbarIcon import ml.docilealligator.infinityforreddit.multireddit.ExpandedSubredditInMultiReddit import ml.docilealligator.infinityforreddit.repositories.CopyMultiRedditActivityRepositoryImpl @@ -70,10 +73,6 @@ import java.util.concurrent.Executor import javax.inject.Inject import javax.inject.Named -fun startCopyMultiRedditActivity(context: Context) { - -} - @OptIn(ExperimentalMaterial3Api::class) class CopyMultiRedditActivity : BaseActivity() { @Inject @@ -109,6 +108,8 @@ class CopyMultiRedditActivity : BaseActivity() { super.onCreate(savedInstanceState) + enableEdgeToEdge() + val multipath = intent.getStringExtra(EXTRA_MULTIPATH) ?: "" copyMultiRedditActivityViewModel = ViewModelProvider.create( @@ -119,41 +120,26 @@ class CopyMultiRedditActivity : BaseActivity() { copyMultiRedditActivityViewModel.fetchMultiRedditInfo() setContent { - val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() - val multiRedditState by copyMultiRedditActivityViewModel.multiRedditState.collectAsStateWithLifecycle() - val name = rememberTextFieldState() - val description = rememberTextFieldState() - var isPrivate by remember { mutableStateOf(true) } - - LaunchedEffect(multiRedditState) { - if (multiRedditState is DataLoadState.Success) { - val multiReddit = (multiRedditState as DataLoadState.Success).data - name.setTextAndPlaceCursorAtEnd(multiReddit.name) - description.setTextAndPlaceCursorAtEnd(multiReddit.description) - } - } - AppTheme(customThemeWrapper.themeType) { + val scrollBehavior = enterAlwaysScrollBehavior() + val multiRedditState by copyMultiRedditActivityViewModel.multiRedditState.collectAsStateWithLifecycle() + val name = rememberTextFieldState() + val description = rememberTextFieldState() + var isPrivate by remember { mutableStateOf(true) } + + LaunchedEffect(multiRedditState) { + if (multiRedditState is DataLoadState.Success) { + val multiReddit = (multiRedditState as DataLoadState.Success).data + name.setTextAndPlaceCursorAtEnd(multiReddit.name) + description.setTextAndPlaceCursorAtEnd(multiReddit.description) + } + } + Scaffold( topBar = { - TopAppBar( - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color(LocalAppTheme.current.colorPrimary), - scrolledContainerColor = Color(LocalAppTheme.current.colorPrimary), - titleContentColor = Color(LocalAppTheme.current.toolbarPrimaryTextAndIconColor), - ), - title = { - Text(stringResource(R.string.copy_multireddit_activity_label)) - }, - navigationIcon = { - IconButton(onClick = { - finish() - }) { - ToolbarIcon( - contentDescription = stringResource(R.string.action_back_content_description) - ) - } - }, + ThemedTopAppBar( + titleStringResId = R.string.copy_multireddit_activity_label, + scrollBehavior = scrollBehavior, actions = { IconButton(onClick = { @@ -163,13 +149,16 @@ class CopyMultiRedditActivity : BaseActivity() { contentDescription = stringResource(R.string.action_copy_multi_reddit) ) } - }, - scrollBehavior = scrollBehavior - ) + } + ) { + finish() + } }, modifier = Modifier .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection) + .windowInsetsPadding(WindowInsets.safeDrawing.only( + WindowInsetsSides.Horizontal)) ) { innerPadding -> when(multiRedditState) { is DataLoadState.Loading -> { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAppBar.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAppBar.kt new file mode 100644 index 00000000..70a4f61e --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/customviews/compose/CustomAppBar.kt @@ -0,0 +1,49 @@ +package ml.docilealligator.infinityforreddit.customviews.compose + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.lerp +import androidx.compose.ui.res.stringResource +import ml.docilealligator.infinityforreddit.R + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ThemedTopAppBar( + titleStringResId: Int, + scrollBehavior: TopAppBarScrollBehavior, + actions: @Composable RowScope.() -> Unit = {}, + onBack: () -> Unit +) { + val appBarColor = lerp( + start = Color(LocalAppTheme.current.colorPrimary), + stop = Color.Transparent, + fraction = scrollBehavior.state.collapsedFraction + ) + + TopAppBar( + colors = TopAppBarDefaults.topAppBarColors( + containerColor = appBarColor, + scrolledContainerColor = appBarColor, + titleContentColor = Color(LocalAppTheme.current.toolbarPrimaryTextAndIconColor), + ), + title = { + Text(stringResource(titleStringResId)) + }, + navigationIcon = { + IconButton(onClick = onBack) { + ToolbarIcon( + contentDescription = stringResource(R.string.action_back_content_description) + ) + } + }, + actions = actions, + scrollBehavior = scrollBehavior + ) +} \ No newline at end of file