fix: compose content can't be previewed due to accessing preferences in compose functions

- Access preferences in Activities instead
- Fetch the dark theme status from the framework
This commit is contained in:
proletarius101 2024-03-18 21:52:18 +08:00
parent a226dac725
commit 33e2ab5262
5 changed files with 45 additions and 37 deletions

View File

@ -1,6 +1,5 @@
package org.fdroid.fdroid.compose
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
@ -23,24 +22,14 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import org.fdroid.fdroid.Preferences
import org.fdroid.fdroid.ui.theme.AppTheme
import java.util.Locale
object ComposeUtils {
@Composable
fun FDroidContent(content: @Composable () -> Unit) {
val darkTheme = when (Preferences.get().theme) {
Preferences.Theme.light -> false
Preferences.Theme.dark -> true
Preferences.Theme.followSystem -> isSystemInDarkTheme()
Preferences.Theme.night -> true
Preferences.Theme.lightWithDarkActionBar -> false
}
val pureBlack = Preferences.get().isPureBlack
AppTheme(darkTheme = darkTheme, pureBlack = pureBlack) {
Surface(content = content)
}
Surface(content = content)
}
@Composable

View File

@ -41,14 +41,17 @@ import org.fdroid.fdroid.Preferences
import org.fdroid.fdroid.R
import org.fdroid.fdroid.compose.ComposeUtils
import org.fdroid.fdroid.compose.ComposeUtils.FDroidContent
import org.fdroid.fdroid.ui.theme.AppTheme
class IpfsGatewayAddActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val pureBlack = Preferences.get().isPureBlack
setContent {
FDroidContent {
AppTheme(pureBlack = pureBlack) {
IpfsGatewayAddScreen(onBackClicked = { onBackPressedDispatcher.onBackPressed() },
onAddUserGateway = { url ->
// don't allow adding default gateways to the user gateways list

View File

@ -46,6 +46,7 @@ import org.fdroid.fdroid.R
import org.fdroid.fdroid.compose.ComposeUtils
import org.fdroid.fdroid.compose.ComposeUtils.FDroidContent
import org.fdroid.fdroid.compose.ComposeUtils.LifecycleEventListener
import org.fdroid.fdroid.ui.theme.AppTheme
class IpfsGatewaySettingsActivity : AppCompatActivity() {
@ -55,11 +56,14 @@ class IpfsGatewaySettingsActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
prefs = Preferences.get()
val pureBlack = prefs.isPureBlack
setContent {
FDroidContent {
IpfsGatewaySettingsScreen(prefs = prefs,
onBackClicked = { onBackPressedDispatcher.onBackPressed() })
AppTheme(pureBlack = pureBlack) {
FDroidContent {
IpfsGatewaySettingsScreen(prefs = prefs,
onBackClicked = { onBackPressedDispatcher.onBackPressed() })
}
}
}
}

View File

@ -36,9 +36,11 @@ import androidx.compose.ui.unit.dp
import androidx.core.os.LocaleListCompat
import androidx.core.util.Consumer
import org.fdroid.database.Repository
import org.fdroid.fdroid.Preferences
import org.fdroid.fdroid.R
import org.fdroid.fdroid.compose.ComposeUtils.FDroidContent
import org.fdroid.fdroid.compose.ComposeUtils.FDroidOutlineButton
import org.fdroid.fdroid.ui.theme.AppTheme
import org.fdroid.fdroid.views.repos.RepoIcon
import org.fdroid.index.IndexFormatVersion.TWO
@ -53,15 +55,19 @@ fun setContentRepoChooser(
onRepoChanged: Consumer<Repository>,
onPreferredRepoChanged: Consumer<Long>,
) {
val pureBlack = Preferences.get().isPureBlack
composeView.setContent {
FDroidContent {
RepoChooser(
repos = repos,
currentRepoId = currentRepoId,
preferredRepoId = preferredRepoId,
onRepoChanged = onRepoChanged::accept,
onPreferredRepoChanged = onPreferredRepoChanged::accept,
)
AppTheme(pureBlack = pureBlack) {
FDroidContent {
RepoChooser(
repos = repos,
currentRepoId = currentRepoId,
preferredRepoId = preferredRepoId,
onRepoChanged = onRepoChanged::accept,
onPreferredRepoChanged = onPreferredRepoChanged::accept,
)
}
}
}
}

View File

@ -22,6 +22,7 @@ import org.fdroid.fdroid.R
import org.fdroid.fdroid.UpdateService
import org.fdroid.fdroid.compose.ComposeUtils.FDroidContent
import org.fdroid.fdroid.nearby.SwapService
import org.fdroid.fdroid.ui.theme.AppTheme
import org.fdroid.fdroid.views.apps.AppListActivity
import org.fdroid.fdroid.views.apps.AppListActivity.EXTRA_REPO_ID
import org.fdroid.index.RepoManager
@ -53,19 +54,24 @@ class AddRepoActivity : AppCompatActivity() {
}
}
}
val pureBlack = Preferences.get().isPureBlack
setContent {
FDroidContent {
val state = repoManager.addRepoState.collectAsState().value
BackHandler(state is AddRepoError) {
// reset state when going back on error screen
repoManager.abortAddingRepository()
AppTheme(pureBlack = pureBlack) {
FDroidContent {
val state = repoManager.addRepoState.collectAsState().value
BackHandler(state is AddRepoError) {
// reset state when going back on error screen
repoManager.abortAddingRepository()
}
AddRepoIntroScreen(
state = state,
onFetchRepo = this::onFetchRepo,
onAddRepo = { repoManager.addFetchedRepository() },
onBackClicked = { onBackPressedDispatcher.onBackPressed() },
)
}
AddRepoIntroScreen(
state = state,
onFetchRepo = this::onFetchRepo,
onAddRepo = { repoManager.addFetchedRepository() },
onBackClicked = { onBackPressedDispatcher.onBackPressed() },
)
}
}
addOnNewIntentListener { intent ->