diff --git a/.idea/other.xml b/.idea/other.xml
index be759a0..75909b0 100644
--- a/.idea/other.xml
+++ b/.idea/other.xml
@@ -182,17 +182,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build.gradle b/build.gradle
index 945576f..0064402 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ buildscript {
}
dependencies {
classpath 'com.google.protobuf:protobuf-java:3.19.4'
- classpath "de.mannodermaus.gradle.plugins:android-junit5:1.6.2.0"
+ classpath "de.mannodermaus.gradle.plugins:android-junit5:1.10.2.0"
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
diff --git a/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferenceDataSource.kt b/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferenceDataSource.kt
index ae3e4b6..618ea8f 100644
--- a/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferenceDataSource.kt
+++ b/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferenceDataSource.kt
@@ -40,6 +40,8 @@ interface SettingsPreferenceDataSource {
suspend fun getIsLegacyApi(): Boolean
suspend fun getCompactView(): Boolean
suspend fun setCompactView(isCompactView: Boolean)
+ suspend fun getAutoAddBookmark(): Boolean
+ suspend fun setAutoAddBookmark(isAutoAddBookmark: Boolean)
suspend fun getCategoriesVisible(): Boolean
suspend fun setCategoriesVisible(isCategoriesVisible: Boolean)
suspend fun setSelectedCategories(categories: List)
diff --git a/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceImpl.kt b/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceImpl.kt
index 50c8e74..3c9ca47 100644
--- a/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceImpl.kt
+++ b/data/src/main/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceImpl.kt
@@ -32,6 +32,7 @@ class SettingsPreferencesDataSourceImpl(
val THEME_MODE_KEY = stringPreferencesKey("theme_mode")
val COMPACT_VIEW = booleanPreferencesKey("compact_view")
+ val AUTO_ADD_BOOKMARK = booleanPreferencesKey("auto_add_bookmark")
val CATEGORIES_VISIBLE = booleanPreferencesKey("categories_visible")
val SELECTED_CATEGORIES_KEY = stringPreferencesKey("selected_categories")
val USE_DYNAMIC_COLORS = booleanPreferencesKey("use_dynamic_colors")
@@ -271,4 +272,13 @@ class SettingsPreferencesDataSourceImpl(
}
}
+ override suspend fun setAutoAddBookmark(isAutoAddBookmark: Boolean) {
+ dataStore.edit { preferences ->
+ preferences[AUTO_ADD_BOOKMARK] = isAutoAddBookmark
+ }
+ }
+ override suspend fun getAutoAddBookmark(): Boolean = runBlocking {
+ dataStore.data.firstOrNull()?.get(AUTO_ADD_BOOKMARK) ?: false
+ }
+
}
diff --git a/data/src/test/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceTest.kt b/data/src/test/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceTest.kt
index 06f8881..f222fa9 100644
--- a/data/src/test/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceTest.kt
+++ b/data/src/test/java/com/desarrollodroide/data/local/preferences/SettingsPreferencesDataSourceTest.kt
@@ -6,6 +6,7 @@ import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
+import androidx.datastore.preferences.core.mutablePreferencesOf
import androidx.datastore.preferences.core.preferencesOf
import com.desarrollodroide.data.RememberUserPreferences
import com.desarrollodroide.data.UserPreferences
@@ -23,6 +24,7 @@ import kotlinx.coroutines.flow.first
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Assertions.assertNull
import org.mockito.kotlin.any
+import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.verify
@ExperimentalCoroutinesApi
@@ -37,6 +39,7 @@ class SettingsPreferencesDataSourceImplTest {
private val COMPACT_VIEW_KEY = booleanPreferencesKey("compact_view")
private val CATEGORIES_VISIBLE_KEY = booleanPreferencesKey("categories_visible")
private val SELECTED_CATEGORIES_KEY = stringPreferencesKey("selected_categories")
+ private val AUTO_ADD_BOOKMARK_KEY = booleanPreferencesKey("auto_add_bookmark")
@BeforeEach
fun setUp() {
@@ -60,7 +63,7 @@ class SettingsPreferencesDataSourceImplTest {
fun `setThemeMode updates theme mode to DARK`() = runTest {
val themeMode = ThemeMode.DARK
settingsPreferencesDataSourceImpl.setTheme(themeMode)
- verify(preferencesDataStore).edit(any())
+ verifyPreferenceEdit(preferencesDataStore, THEME_MODE_KEY, themeMode.name)
}
@Test
@@ -91,7 +94,7 @@ class SettingsPreferencesDataSourceImplTest {
fun `setCompactView updates compact view to false`() = runTest {
val compactView = false
settingsPreferencesDataSourceImpl.setCompactView(compactView)
- verify(preferencesDataStore).edit(any())
+ verifyPreferenceEdit(preferencesDataStore, COMPACT_VIEW_KEY, compactView)
}
@Test
@@ -106,7 +109,7 @@ class SettingsPreferencesDataSourceImplTest {
fun `setCategoriesVisible updates categories visible to false`() = runTest {
val categoriesVisible = false
settingsPreferencesDataSourceImpl.setCategoriesVisible(categoriesVisible)
- verify(preferencesDataStore).edit(any())
+ verifyPreferenceEdit(preferencesDataStore, CATEGORIES_VISIBLE_KEY, categoriesVisible)
}
@Test
@@ -194,7 +197,7 @@ class SettingsPreferencesDataSourceImplTest {
fun `setSelectedCategories updates selected categories correctly`() = runTest {
val selectedCategories = listOf("Sports", "Technology")
settingsPreferencesDataSourceImpl.setSelectedCategories(selectedCategories)
- verify(preferencesDataStore).edit(any())
+ verifyPreferenceEdit(preferencesDataStore, SELECTED_CATEGORIES_KEY, selectedCategories.joinToString(","))
}
@Test
@@ -324,4 +327,39 @@ class SettingsPreferencesDataSourceImplTest {
assertNull(actualTag)
}
+ @Test
+ fun `getAutoAddBookmark retrieves the correct value`() = runTest {
+ val expectedValue = true
+ whenever(preferencesDataStore.data).thenReturn(flowOf(preferencesOf(AUTO_ADD_BOOKMARK_KEY to expectedValue)))
+ val actualValue = settingsPreferencesDataSourceImpl.getAutoAddBookmark()
+ assertEquals(expectedValue, actualValue)
+ }
+
+ @Test
+ fun `getAutoAddBookmark returns false when preference is not set`() = runTest {
+ whenever(preferencesDataStore.data).thenReturn(flowOf(preferencesOf()))
+ val actualValue = settingsPreferencesDataSourceImpl.getAutoAddBookmark()
+ assertEquals(false, actualValue)
+ }
+
+ @Test
+ fun `setAutoAddBookmark updates auto add bookmark preference correctly`() = runTest {
+ val newValue = true
+ settingsPreferencesDataSourceImpl.setAutoAddBookmark(newValue)
+ verifyPreferenceEdit(preferencesDataStore, AUTO_ADD_BOOKMARK_KEY, newValue)
+ }
+
+}
+
+private suspend fun verifyPreferenceEdit(
+ preferencesDataStore: DataStore,
+ key: Preferences.Key,
+ expectedValue: T
+) {
+ val argumentCaptor = argumentCaptor Preferences>()
+ verify(preferencesDataStore).updateData(argumentCaptor.capture())
+
+ val preferences = mutablePreferencesOf()
+ val updatedPreferences = argumentCaptor.firstValue(preferences)
+ assertEquals(expectedValue, updatedPreferences[key])
}
diff --git a/gradle.properties b/gradle.properties
index f380923..86f6d0c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,8 +25,8 @@ android.nonTransitiveRClass=true
compileSdkVersion=34
minSdkVersion=21
targetSdkVersion=34
-versionCode=44
-versionName=1.34
+versionCode=45
+versionName=1.35
android.defaults.buildfeatures.buildconfig=true
android.nonFinalResIds=false
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorActivity.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorActivity.kt
index 93860ad..d396c7b 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorActivity.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorActivity.kt
@@ -11,9 +11,11 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
+import androidx.lifecycle.lifecycleScope
import com.desarrollodroide.pagekeeper.ui.theme.ShioriTheme
import com.desarrollodroide.model.Bookmark
import com.desarrollodroide.pagekeeper.MainActivity
+import kotlinx.coroutines.launch
import org.koin.androidx.viewmodel.ext.android.viewModel
class BookmarkEditorActivity : ComponentActivity() {
@@ -31,38 +33,52 @@ class BookmarkEditorActivity : ComponentActivity() {
}
}
}
- setContent {
- ShioriTheme {
- if (bookmarkViewModel.userHasSession()) {
- Surface(
- modifier = Modifier
- .fillMaxSize()
- .background(MaterialTheme.colorScheme.inverseOnSurface)
- ) {
- BookmarkEditorScreen(
- title = "Add",
- bookmarkEditorType = BookmarkEditorType.ADD,
- bookmark = Bookmark(
- url = sharedUrl,
- tags = emptyList(),
- public = if (bookmarkViewModel.getMakeArchivePublic()) 1 else 0,
- createArchive = bookmarkViewModel.getCreateArchive(),
- createEbook = bookmarkViewModel.getCreateEbook()
- ),
- onBackClick = {
- Toast.makeText(this@BookmarkEditorActivity, "Bookmark saved", Toast.LENGTH_LONG).show()
- finish()
- },
- updateBookmark = { },
- startMainActivity = { startMainActivity() }
- )
- }
- } else {
- NotSessionScreen(
- onClickLogin = {
- startMainActivity()
+ lifecycleScope.launch {
+ bookmarkViewModel.toastMessage.collect { message ->
+ message?.let {
+ Toast.makeText(this@BookmarkEditorActivity, it, Toast.LENGTH_LONG).show()
+ finish()
+ }
+ }
+ }
+ lifecycleScope.launch {
+ if (bookmarkViewModel.getAutoAddBookmark()) {
+ bookmarkViewModel.autoAddBookmark(sharedUrl)
+ } else {
+ setContent {
+ ShioriTheme {
+ if (bookmarkViewModel.userHasSession()) {
+ Surface(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(MaterialTheme.colorScheme.inverseOnSurface)
+ ) {
+ BookmarkEditorScreen(
+ title = "Add",
+ bookmarkEditorType = BookmarkEditorType.ADD,
+ bookmark = Bookmark(
+ url = sharedUrl,
+ tags = emptyList(),
+ public = if (bookmarkViewModel.getMakeArchivePublic()) 1 else 0,
+ createArchive = bookmarkViewModel.getCreateArchive(),
+ createEbook = bookmarkViewModel.getCreateEbook()
+ ),
+ onBack = { finish() },
+ updateBookmark = { finish() },
+ showToast = { message ->
+ Toast.makeText(this@BookmarkEditorActivity, message, Toast.LENGTH_LONG).show()
+ },
+ startMainActivity = { startMainActivity() }
+ )
+ }
+ } else {
+ NotSessionScreen(
+ onClickLogin = {
+ startMainActivity()
+ }
+ )
}
- )
+ }
}
}
}
@@ -83,3 +99,4 @@ class BookmarkEditorActivity : ComponentActivity() {
+
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorScreen.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorScreen.kt
index 1280250..962271b 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorScreen.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkEditorScreen.kt
@@ -20,17 +20,18 @@ fun BookmarkEditorScreen(
title: String,
bookmarkEditorType: BookmarkEditorType,
bookmark: Bookmark,
- onBackClick: () -> Unit,
+ onBack: () -> Unit,
updateBookmark: (Bookmark) -> Unit,
+ showToast: (String) -> Unit = {},
startMainActivity: () -> Unit = {}
- ) {
+) {
val bookmarkViewModel = get()
val newTag = remember { mutableStateOf("") }
val availableTags = bookmarkViewModel.availableTags.collectAsState()
val bookmarkUiState = bookmarkViewModel.bookmarkUiState.collectAsState().value
BackHandler {
- onBackClick()
+ onBack()
}
if (bookmarkUiState.isLoading) {
Log.v("BookmarkEditorScreen", "isLoading")
@@ -85,7 +86,7 @@ fun BookmarkEditorScreen(
}
}
},
- onBackClick = onBackClick,
+ onBackClick = onBack,
createArchive = createArchive,
makeArchivePublic = makeArchivePublic,
createEbook = createEbook,
@@ -94,7 +95,7 @@ fun BookmarkEditorScreen(
if (bookmarkUiState.data != null) {
updateBookmark(bookmarkUiState.data)
- onBackClick()
+ showToast("Bookmark saved")
}
}
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkViewModel.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkViewModel.kt
index 71fa048..aed4fb8 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkViewModel.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/bookmarkeditor/BookmarkViewModel.kt
@@ -32,7 +32,7 @@ class BookmarkViewModel(
private val editBookmarkUseCase: EditBookmarkUseCase,
private val userPreferences: SettingsPreferenceDataSource,
private val settingsPreferenceDataSource: SettingsPreferenceDataSource,
- ) : ViewModel() {
+) : ViewModel() {
var backendUrl = ""
var sessionExpired = false
@@ -40,6 +40,9 @@ class BookmarkViewModel(
private val _bookmarkUiState = MutableStateFlow(UiState(idle = true))
val bookmarkUiState = _bookmarkUiState.asStateFlow()
+ private val _toastMessage = MutableStateFlow(null)
+ val toastMessage = _toastMessage.asStateFlow()
+
init {
viewModelScope.launch {
backendUrl = userPreferences.getUrl()
@@ -56,6 +59,15 @@ class BookmarkViewModel(
initialValue = listOf()
)
+ fun autoAddBookmark(url: String) = viewModelScope.launch {
+ saveBookmark(
+ url = url,
+ tags = emptyList(),
+ createArchive = getCreateArchive(),
+ makeArchivePublic = getMakeArchivePublic(),
+ createEbook = getCreateEbook()
+ )
+ }
fun saveBookmark(
url: String,
@@ -64,48 +76,49 @@ class BookmarkViewModel(
makeArchivePublic: Boolean,
createEbook: Boolean
) = viewModelScope.launch {
- Log.v("Add BookmarkViewModel", "createArchive: $createArchive makeArchivePublic: $makeArchivePublic")
-
- viewModelScope.launch {
- bookmarkAdditionUseCase.invoke(
- serverUrl = backendUrl,
- xSession = userPreferences.getSession(),
- bookmark = Bookmark(
- url = url,
- tags = tags,
- createArchive = createArchive,
- createEbook = createEbook,
- public = if (makeArchivePublic) 1 else 0
- )
+ bookmarkAdditionUseCase.invoke(
+ serverUrl = backendUrl,
+ xSession = userPreferences.getSession(),
+ bookmark = Bookmark(
+ url = url,
+ tags = tags,
+ createArchive = createArchive,
+ createEbook = createEbook,
+ public = if (makeArchivePublic) 1 else 0
)
- .collect { result ->
- when (result) {
- is Result.Error -> {
- if (result.error is Result.ErrorType.SessionExpired) {
- settingsPreferenceDataSource.resetUser()
- bookmarksRepository.deleteAllLocalBookmarks()
- sessionExpired = true
- _bookmarkUiState.error(
- errorMessage = result.error?.message ?: ""
- )
- } else {
- Log.v("Add BookmarkViewModel", result.error?.message ?: "")
- _bookmarkUiState.error(errorMessage = result.error?.message ?: "Unknown error" )
- }
- }
-
- is Result.Loading -> {
- Log.v("Add BookmarkViewModel", "Loading")
- _bookmarkUiState.isLoading(true)
+ )
+ .collect { result ->
+ when (result) {
+ is Result.Error -> {
+ if (result.error is Result.ErrorType.SessionExpired) {
+ settingsPreferenceDataSource.resetUser()
+ bookmarksRepository.deleteAllLocalBookmarks()
+ sessionExpired = true
+ _bookmarkUiState.error(
+ errorMessage = result.error?.message ?: ""
+ )
+ emitToastIfAutoAdd(result.error?.message ?: "")
+ } else {
+ Log.v("Add BookmarkViewModel", result.error?.message ?: "")
+ _bookmarkUiState.error(
+ errorMessage = result.error?.message ?: "Unknown error"
+ )
+ emitToastIfAutoAdd("Error: ${result.error?.message ?: "Unknown error"}")
}
+ }
- is Result.Success -> {
- Log.v("Add BookmarkViewModel", "Success")
- _bookmarkUiState.success(result.data)
- }
+ is Result.Loading -> {
+ Log.v("Add BookmarkViewModel", "Loading")
+ _bookmarkUiState.isLoading(true)
+ }
+
+ is Result.Success -> {
+ Log.v("Add BookmarkViewModel", "Success")
+ _bookmarkUiState.success(result.data)
+ emitToastIfAutoAdd("Bookmark saved successfully")
}
}
- }
+ }
}
fun editBookmark(bookmark: Bookmark) = viewModelScope.launch {
@@ -118,7 +131,9 @@ class BookmarkViewModel(
.collect { result ->
when (result) {
is Result.Error -> {
- val errorMessage = result.error?.message ?: result.error?.throwable?.message?: "Unknown error"
+ val errorMessage =
+ result.error?.message ?: result.error?.throwable?.message
+ ?: "Unknown error"
Log.v("Edit BookmarkViewModel", errorMessage)
_bookmarkUiState.error(errorMessage = errorMessage)
}
@@ -159,4 +174,18 @@ class BookmarkViewModel(
userPreferences.getUser().first().hasSession()
}
+ fun getAutoAddBookmark(): Boolean {
+ return runBlocking {
+ settingsPreferenceDataSource.getAutoAddBookmark()
+ }
+ }
+
+ private fun emitToastIfAutoAdd(message: String) {
+ viewModelScope.launch {
+ if (getAutoAddBookmark()) {
+ _toastMessage.value = message
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/feed/FeedScreen.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/feed/FeedScreen.kt
index 671ce76..935054e 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/feed/FeedScreen.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/feed/FeedScreen.kt
@@ -153,7 +153,7 @@ fun FeedScreen(
title = "Edit",
bookmarkEditorType = BookmarkEditorType.EDIT,
bookmark = it,
- onBackClick = {
+ onBack = {
setShowTopBar(true)
feedViewModel.showBookmarkEditorScreen.value = false
},
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/DefaultsSection.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/DefaultsSection.kt
index 6495974..07101a8 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/DefaultsSection.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/DefaultsSection.kt
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Archive
import androidx.compose.material.icons.filled.Book
+import androidx.compose.material.icons.filled.BookmarkAdd
import androidx.compose.material.icons.filled.Public
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -20,7 +21,8 @@ import kotlinx.coroutines.flow.MutableStateFlow
fun DefaultsSection(
makeArchivePublic: MutableStateFlow,
createEbook: MutableStateFlow,
- createArchive: MutableStateFlow
+ createArchive: MutableStateFlow,
+ autoAddBookmark: MutableStateFlow
) {
Column(
modifier = Modifier
@@ -31,13 +33,10 @@ fun DefaultsSection(
Text(text = "Defaults", style = MaterialTheme.typography.titleSmall)
Spacer(modifier = Modifier.height(5.dp))
val items = listOf(
- Item(
- "Make bookmark publicly available",
- icon = Icons.Filled.Public,
- switchState = makeArchivePublic
- ),
+ Item("Make bookmark publicly available", icon = Icons.Filled.Public, switchState = makeArchivePublic),
Item("Create archive", icon = Icons.Filled.Archive, switchState = createArchive),
- Item("Create Ebook", icon = Icons.Filled.Book, switchState = createEbook)
+ Item("Create Ebook", icon = Icons.Filled.Book, switchState = createEbook),
+ Item("Add bookmark automatically", icon = Icons.Filled.BookmarkAdd, switchState = autoAddBookmark)
)
items.forEach { item ->
SwitchOption(
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsScreen.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsScreen.kt
index 4caa616..466fda8 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsScreen.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsScreen.kt
@@ -92,6 +92,7 @@ fun SettingsScreen(
createEbook = settingsViewModel.createEbook,
createArchive = settingsViewModel.createArchive,
compatView = settingsViewModel.compactView,
+ autoAddBookmark = settingsViewModel.autoAddBookmark,
onNavigateToTermsOfUse = onNavigateToTermsOfUse,
onNavigateToPrivacyPolicy = onNavigateToPrivacyPolicy,
onNavigateToSourceCode = onNavigateToSourceCode,
@@ -110,6 +111,7 @@ fun SettingsContent(
makeArchivePublic: MutableStateFlow,
createEbook: MutableStateFlow,
createArchive: MutableStateFlow,
+ autoAddBookmark: MutableStateFlow,
compatView: MutableStateFlow,
onLogout: () -> Unit,
onNavigateToSourceCode: () -> Unit,
@@ -169,7 +171,8 @@ fun SettingsContent(
DefaultsSection(
makeArchivePublic = makeArchivePublic,
createEbook = createEbook,
- createArchive = createArchive
+ createArchive = createArchive,
+ autoAddBookmark = autoAddBookmark
)
HorizontalDivider()
Spacer(modifier = Modifier.height(18.dp))
@@ -224,6 +227,7 @@ fun SettingsScreenPreview() {
createEbook = remember { MutableStateFlow(false) },
createArchive = remember { MutableStateFlow(false) },
compatView = remember { MutableStateFlow(false) },
+ autoAddBookmark = remember { MutableStateFlow(false) },
onLogout = {},
onNavigateToSourceCode = {},
onNavigateToTermsOfUse = {},
diff --git a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsViewModel.kt b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsViewModel.kt
index f95ea5a..0e4ee8c 100644
--- a/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsViewModel.kt
+++ b/presentation/src/main/java/com/desarrollodroide/pagekeeper/ui/settings/SettingsViewModel.kt
@@ -41,6 +41,7 @@ class SettingsViewModel(
val createEbook = MutableStateFlow(false)
val createArchive = MutableStateFlow(false)
val compactView = MutableStateFlow(false)
+ val autoAddBookmark = MutableStateFlow(false)
val useDynamicColors = MutableStateFlow(false)
val themeMode = MutableStateFlow(ThemeMode.AUTO)
private var token = ""
@@ -83,6 +84,7 @@ class SettingsViewModel(
createEbook.value = settingsPreferenceDataSource.getCreateEbook()
createArchive.value = settingsPreferenceDataSource.getCreateArchive()
compactView.value = settingsPreferenceDataSource.getCompactView()
+ autoAddBookmark.value = settingsPreferenceDataSource.getAutoAddBookmark()
useDynamicColors.value = settingsPreferenceDataSource.getUseDynamicColors()
themeMode.value = settingsPreferenceDataSource.getThemeMode()
token = settingsPreferenceDataSource.getToken()
@@ -155,6 +157,11 @@ class SettingsViewModel(
themeManager.themeMode.value = newValue
}
}
+ viewModelScope.launch {
+ autoAddBookmark.collect { newValue ->
+ settingsPreferenceDataSource.setAutoAddBookmark(newValue)
+ }
+ }
}
}