Skip to content

Commit

Permalink
[optimize] Re-implementing the Transmission screen and Player configu…
Browse files Browse the repository at this point in the history
…ration screen with Compose; optimize Article1Proxy.kt dataWrapper
  • Loading branch information
SkyD666 committed Jul 9, 2024
1 parent d09a11b commit 6d54a32
Show file tree
Hide file tree
Showing 17 changed files with 303 additions and 245 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ android {
minSdk = 24
targetSdk = 34
versionCode = 18
versionName = "1.1-beta51"
versionName = "1.1-beta52"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/skyd/anivu/ext/PreferenceExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.skyd.anivu.model.preference.player.HardwareDecodePreference
import com.skyd.anivu.model.preference.player.PlayerDoubleTapPreference
import com.skyd.anivu.model.preference.player.PlayerShow85sButtonPreference
import com.skyd.anivu.model.preference.player.PlayerShowScreenshotButtonPreference
import com.skyd.anivu.model.preference.transmission.SeedingWhenCompletePreference

fun Preferences.toSettings(): Settings {
return Settings(
Expand Down Expand Up @@ -80,5 +81,8 @@ fun Preferences.toSettings(): Settings {
autoDeleteArticleBefore = AutoDeleteArticleBeforePreference.fromPreferences(this),
opmlExportDir = OpmlExportDirPreference.fromPreferences(this),
mediaLibLocation = MediaLibLocationPreference.fromPreferences(this),

// Transmission
seedingWhenComplete = SeedingWhenCompletePreference.fromPreferences(this),
)
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/skyd/anivu/model/preference/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import com.skyd.anivu.model.preference.player.HardwareDecodePreference
import com.skyd.anivu.model.preference.player.PlayerDoubleTapPreference
import com.skyd.anivu.model.preference.player.PlayerShow85sButtonPreference
import com.skyd.anivu.model.preference.player.PlayerShowScreenshotButtonPreference
import com.skyd.anivu.model.preference.transmission.SeedingWhenCompletePreference
import com.skyd.anivu.ui.local.LocalArticleItemMinWidth
import com.skyd.anivu.ui.local.LocalArticleItemTonalElevation
import com.skyd.anivu.ui.local.LocalArticleListTonalElevation
Expand Down Expand Up @@ -68,6 +69,7 @@ import com.skyd.anivu.ui.local.LocalPlayerShowScreenshotButton
import com.skyd.anivu.ui.local.LocalSearchItemMinWidth
import com.skyd.anivu.ui.local.LocalSearchListTonalElevation
import com.skyd.anivu.ui.local.LocalSearchTopBarTonalElevation
import com.skyd.anivu.ui.local.LocalSeedingWhenComplete
import com.skyd.anivu.ui.local.LocalShowArticlePullRefresh
import com.skyd.anivu.ui.local.LocalShowArticleTopBarRefresh
import com.skyd.anivu.ui.local.LocalTextFieldStyle
Expand Down Expand Up @@ -115,6 +117,8 @@ data class Settings(
val autoDeleteArticleBefore: Long = AutoDeleteArticleBeforePreference.default,
val opmlExportDir: String = OpmlExportDirPreference.default,
val mediaLibLocation: String = MediaLibLocationPreference.default,
// Transmission
val seedingWhenComplete: Boolean = SeedingWhenCompletePreference.default,
)

@Composable
Expand Down Expand Up @@ -164,6 +168,8 @@ fun SettingsProvider(
LocalAutoDeleteArticleBefore provides settings.autoDeleteArticleBefore,
LocalOpmlExportDir provides settings.opmlExportDir,
LocalMediaLibLocation provides settings.mediaLibLocation,
// Transmission
LocalSeedingWhenComplete provides settings.seedingWhenComplete,
) {
content()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.skyd.anivu.ui.component.lazyverticalgrid.adapter.proxy

import android.content.Context
import android.os.Bundle
import android.os.Parcelable
import androidx.compose.animation.Animatable
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
Expand Down Expand Up @@ -48,6 +47,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
Expand Down Expand Up @@ -91,7 +91,6 @@ import com.skyd.anivu.ui.local.LocalArticleSwipeRightAction
import com.skyd.anivu.ui.local.LocalArticleTapAction
import com.skyd.anivu.ui.local.LocalDeduplicateTitleInDesc
import com.skyd.anivu.ui.local.LocalNavController
import kotlinx.parcelize.Parcelize

class Article1Proxy(
private val onFavorite: (ArticleWithFeed, Boolean) -> Unit,
Expand All @@ -103,18 +102,6 @@ class Article1Proxy(
}
}

/**
* SwipeToDismissBoxState doesn't recompose,
* so we need to pass in a "variable" that points to an object that doesn't change,
* hence the need to wrap the data (DataWrapper).
* When the data changes, we only change the fields inside the DataWrapper object,
* which ensures that SwipeToDismissBoxState gets the latest data from the DataWrapper object.
*/
@Parcelize
private class DataWrapper(
var data: ArticleWithFeed
) : Parcelable

@Composable
fun Article1Item(
data: ArticleWithFeed,
Expand All @@ -124,9 +111,7 @@ fun Article1Item(
val navController = LocalNavController.current
val context = LocalContext.current
var expandMenu by rememberSaveable { mutableStateOf(false) }

val dataWrapper = rememberSaveable { DataWrapper(data) }
LaunchedEffect(data) { dataWrapper.data = data }
val dataWrapper by rememberUpdatedState(newValue = data)

val swipeToDismissBoxState = rememberSwipeToDismissBoxState(
confirmValueChange = { dismissValue ->
Expand All @@ -139,17 +124,17 @@ fun Article1Item(
)
when (dismissValue) {
SwipeToDismissBoxValue.EndToStart, SwipeToDismissBoxValue.StartToEnd -> {
val articleWithEnclosure = dataWrapper.data.articleWithEnclosure
val articleWithEnclosure = dataWrapper.articleWithEnclosure
swipeAction(
articleSwipeAction = articleSwipeAction,
context = context,
navController = navController,
data = articleWithEnclosure,
onMarkAsRead = {
onRead(dataWrapper.data, !articleWithEnclosure.article.isRead)
onRead(dataWrapper, !articleWithEnclosure.article.isRead)
},
onMarkAsFavorite = {
onFavorite(dataWrapper.data, !articleWithEnclosure.article.isFavorite)
onFavorite(dataWrapper, !articleWithEnclosure.article.isFavorite)
},
)
}
Expand All @@ -160,6 +145,7 @@ fun Article1Item(
},
positionalThreshold = { it * 0.15f },
)
LaunchedEffect(data) { swipeToDismissBoxState.reset() }
var isSwipeToDismissActive by remember(data) { mutableStateOf(false) }

LaunchedEffect(swipeToDismissBoxState.progress > 0.15f) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ private fun LicenseItem(data: LicenseBean) {
val context = LocalContext.current
Card(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 7.dp),
shape = RoundedCornerShape(20)
shape = RoundedCornerShape(20.dp)
) {
Column(
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ fun SettingsScreen() {
item {
BaseSettingsItem(
icon = rememberVectorPainter(Icons.Outlined.SmartDisplay),
text = stringResource(id = R.string.player_config_fragment_name),
text = stringResource(id = R.string.player_config_screen_name),
descriptionText = stringResource(id = R.string.player_config_fragment_description),
onClick = { navController.navigate(R.id.action_to_player_config_fragment) }
)
Expand All @@ -101,7 +101,7 @@ fun SettingsScreen() {
item {
BaseSettingsItem(
icon = rememberVectorPainter(Icons.Outlined.SwapVert),
text = stringResource(id = R.string.transmission_fragment_name),
text = stringResource(id = R.string.transmission_screen_name),
descriptionText = stringResource(id = R.string.transmission_fragment_description),
onClick = { navController.navigate(R.id.action_to_transmission_fragment) }
)
Expand Down
Loading

0 comments on commit 6d54a32

Please sign in to comment.