diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt index ce6334c5d..def3ea18f 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt @@ -1,6 +1,8 @@ package app.omnivore.omnivore.ui.library import android.content.Context +import android.content.Intent +import android.net.Uri import android.util.Log import android.widget.Toast import androidx.compose.material3.SnackbarHostState @@ -290,6 +292,9 @@ class LibraryViewModel @Inject constructor( labelsSelectionCurrentItemLiveData.value = itemID showLabelsSelectionSheetLiveData.value = true } + else -> { + + } } actionsMenuItemLiveData.postValue(null) } @@ -401,5 +406,5 @@ enum class SavedItemAction { Delete, Archive, Unarchive, - EditLabels + EditLabels, } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/ReaderPreferencesView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/ReaderPreferencesView.kt index 7d452170b..9f0f8bfbe 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/ReaderPreferencesView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/ReaderPreferencesView.kt @@ -11,6 +11,8 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.Switch import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -25,6 +27,7 @@ import androidx.compose.ui.unit.sp import app.omnivore.omnivore.R import app.omnivore.omnivore.ui.theme.OmnivoreTheme +@OptIn(ExperimentalMaterial3Api::class) @Composable fun ReaderPreferencesView(webReaderViewModel: WebReaderViewModel) { val isDark = isSystemInDarkTheme() @@ -43,8 +46,6 @@ fun ReaderPreferencesView(webReaderViewModel: WebReaderViewModel) { val themeState = remember { mutableStateOf(currentWebPreferences.storedThemePreference) } - val themeListState = rememberLazyListState() - OmnivoreTheme() { Column( modifier = Modifier @@ -65,16 +66,17 @@ fun ReaderPreferencesView(webReaderViewModel: WebReaderViewModel) { )) Spacer(modifier = Modifier.weight(1.0F)) Box { - OutlinedButton( - shape = RoundedCornerShape(4.dp), + AssistChip( onClick = { isFontListExpanded.value = true }, - colors = ButtonDefaults.buttonColors( - contentColor = Color(red = 137, green = 137, blue = 137), - // containerColor = Color.Transparent, - ), - ) { - Text(selectedWebFontName.value) - } + label = { Text(selectedWebFontName.value, color = Color(red = 137, green = 137, blue = 137)) }, + trailingIcon = { + Icon( + Icons.Default.ArrowDropDown, + contentDescription = "Choose the Reader font", + tint = Color(red = 137, green = 137, blue = 137) + ) + }, + ) if (isFontListExpanded.value) { DropdownMenu( expanded = isFontListExpanded.value, diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt index 0e7a9d8d9..89d92554c 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderLoadingContainer.kt @@ -307,6 +307,9 @@ fun WebReaderLoadingContainer(slug: String? = null, requestID: String? = null, @OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class) @Composable fun ReaderTopAppBar(webReaderViewModel: WebReaderViewModel, onLibraryIconTap: (() -> Unit)? = null) { + val context = LocalContext.current + val onBackPressedDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher + val isDarkMode = isSystemInDarkTheme() val currentThemeKey = webReaderViewModel.currentThemeKey.observeAsState() val currentTheme = Themes.values().find { it.themeKey == currentThemeKey.value } @@ -345,7 +348,7 @@ fun ReaderTopAppBar(webReaderViewModel: WebReaderViewModel, onLibraryIconTap: (( title = {}, navigationIcon = { IconButton(onClick = { - // onBackPressedDispatcher?.onBackPressed() + onBackPressedDispatcher?.onBackPressed() }) { Icon( imageVector = Icons.Filled.ArrowBack, @@ -394,9 +397,11 @@ fun ReaderTopAppBar(webReaderViewModel: WebReaderViewModel, onLibraryIconTap: (( if (isMenuExpanded) { webReaderParams?.let { params -> SavedItemContextMenu( + context = context, isExpanded = isMenuExpanded, isArchived = params.item.isArchived, onDismiss = { isMenuExpanded = false }, + webReaderViewModel = webReaderViewModel, actionHandler = { webReaderViewModel.handleSavedItemAction( params.item.savedItemId, diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt index ce81b62ff..8a8729006 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt @@ -7,6 +7,7 @@ import android.content.Intent import android.net.Uri import android.util.Log import android.widget.Toast +import androidx.compose.ui.platform.LocalContext import androidx.core.content.ContextCompat.startActivity import androidx.lifecycle.* import app.omnivore.omnivore.DatastoreKeys @@ -108,6 +109,17 @@ class WebReaderViewModel @Inject constructor( } } + fun showShareLinkSheet(context: Context) { + webReaderParamsLiveData.value?.let { + val browserIntent = Intent(Intent.ACTION_SEND) + + browserIntent.setType("text/plain") + browserIntent.putExtra(Intent.EXTRA_TEXT, it.item.pageURLString) + browserIntent.putExtra(Intent.EXTRA_SUBJECT, it.item.pageURLString) + context.startActivity(browserIntent) + } + } + fun openCurrentLink(context: Context) { currentLink?.let { openLink(context, it) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemContextMenu.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemContextMenu.kt index 34a50a11c..70769a7f7 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemContextMenu.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemContextMenu.kt @@ -1,22 +1,28 @@ package app.omnivore.omnivore.ui.savedItemViews +import android.content.Context import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.CheckCircle import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.List +import androidx.compose.material.icons.outlined.Share import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import app.omnivore.omnivore.R import app.omnivore.omnivore.ui.library.SavedItemAction +import app.omnivore.omnivore.ui.reader.WebReaderViewModel @Composable fun SavedItemContextMenu( isExpanded: Boolean, isArchived: Boolean, + context: Context, + webReaderViewModel: WebReaderViewModel, onDismiss: () -> Unit, actionHandler: (SavedItemAction) -> Unit ) { @@ -51,6 +57,19 @@ fun SavedItemContextMenu( ) } ) + DropdownMenuItem( + text = { Text("Share Original") }, + onClick = { + webReaderViewModel.showShareLinkSheet(context) + onDismiss() + }, + leadingIcon = { + Icon( + Icons.Outlined.Share, + contentDescription = null + ) + } + ) DropdownMenuItem( text = { Text("Remove Item") }, onClick = { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/theme/Theme.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/theme/Theme.kt index dd10f6c73..ab9c2e111 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/theme/Theme.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/theme/Theme.kt @@ -9,62 +9,12 @@ import androidx.compose.ui.platform.LocalContext private val LightColors = lightColorScheme( primary = md_theme_light_primary, onPrimary = md_theme_light_onPrimary, - primaryContainer = md_theme_light_primaryContainer, - onPrimaryContainer = md_theme_light_onPrimaryContainer, - secondary = md_theme_light_secondary, - onSecondary = md_theme_light_onSecondary, - secondaryContainer = md_theme_light_secondaryContainer, - onSecondaryContainer = md_theme_light_onSecondaryContainer, - tertiary = md_theme_light_tertiary, - onTertiary = md_theme_light_onTertiary, - tertiaryContainer = md_theme_light_tertiaryContainer, - onTertiaryContainer = md_theme_light_onTertiaryContainer, - error = md_theme_light_error, - errorContainer = md_theme_light_errorContainer, - onError = md_theme_light_onError, - onErrorContainer = md_theme_light_onErrorContainer, - background = md_theme_light_background, - onBackground = md_theme_light_onBackground, - surface = md_theme_light_surface, - onSurface = md_theme_light_onSurface, - surfaceVariant = md_theme_light_surfaceVariant, - onSurfaceVariant = md_theme_light_onSurfaceVariant, - outline = md_theme_light_outline, - inverseOnSurface = md_theme_light_inverseOnSurface, - inverseSurface = md_theme_light_inverseSurface, - inversePrimary = md_theme_light_inversePrimary, - surfaceTint = md_theme_light_surfaceTint, ) private val DarkColors = darkColorScheme( primary = md_theme_dark_primary, onPrimary = md_theme_dark_onPrimary, - primaryContainer = md_theme_dark_primaryContainer, - onPrimaryContainer = md_theme_dark_onPrimaryContainer, - secondary = md_theme_dark_secondary, - onSecondary = md_theme_dark_onSecondary, - secondaryContainer = md_theme_dark_secondaryContainer, - onSecondaryContainer = md_theme_dark_onSecondaryContainer, - tertiary = md_theme_dark_tertiary, - onTertiary = md_theme_dark_onTertiary, - tertiaryContainer = md_theme_dark_tertiaryContainer, - onTertiaryContainer = md_theme_dark_onTertiaryContainer, - error = md_theme_dark_error, - errorContainer = md_theme_dark_errorContainer, - onError = md_theme_dark_onError, - onErrorContainer = md_theme_dark_onErrorContainer, - background = md_theme_dark_background, - onBackground = md_theme_dark_onBackground, - surface = md_theme_dark_surface, - onSurface = md_theme_dark_onSurface, - surfaceVariant = md_theme_dark_surfaceVariant, - onSurfaceVariant = md_theme_dark_onSurfaceVariant, - outline = md_theme_dark_outline, - inverseOnSurface = md_theme_dark_inverseOnSurface, - inverseSurface = md_theme_dark_inverseSurface, - inversePrimary = md_theme_dark_inversePrimary, - surfaceTint = md_theme_dark_surfaceTint, ) @Composable @@ -73,12 +23,7 @@ fun OmnivoreTheme( useDynamicTheme: Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S, content: @Composable () -> Unit ) { - val colorScheme = if (useDynamicTheme) { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } else { - if (darkTheme) darkColorScheme() else lightColorScheme() - } + val colorScheme = if (darkTheme) DarkColors else LightColors MaterialTheme( colorScheme = colorScheme,