diff --git a/android/Omnivore/app/src/main/graphql/schema.graphqls b/android/Omnivore/app/src/main/graphql/schema.graphqls index fd10083a7..4f51a59b3 100644 --- a/android/Omnivore/app/src/main/graphql/schema.graphqls +++ b/android/Omnivore/app/src/main/graphql/schema.graphqls @@ -1720,6 +1720,8 @@ input SaveUrlInput { source: String! state: ArticleSavingRequestStatus url: String! + timezone: String + locale: String } type SearchError { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemMutations.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemMutations.kt index 84601bfc2..20ee0a878 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemMutations.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemMutations.kt @@ -3,6 +3,7 @@ package app.omnivore.omnivore.networking import android.content.ContentValues import android.net.Uri import android.util.Log +import androidx.compose.ui.text.intl.Locale import androidx.lifecycle.viewModelScope import app.omnivore.omnivore.Constants import app.omnivore.omnivore.graphql.generated.SaveUrlMutation @@ -46,15 +47,18 @@ suspend fun Networker.updateArchiveStatusSavedItem( } } -suspend fun Networker.saveUrl(url: Uri, timeZone: String, locale: String): Boolean { +suspend fun Networker.saveUrl(url: Uri): Boolean { return try { val clientRequestId = UUID.randomUUID().toString() + // get locale and timezone from device + val timezone = TimeZone.getDefault().id + val locale = Locale.current.toLanguageTag() val input = SaveUrlInput( url = url.toString(), clientRequestId = clientRequestId, source = "android", - timezone = timeZone, - locale = locale + timezone = Optional.present(timezone), + locale = Optional.present(locale) ) val result = authenticatedApolloClient().mutation(SaveUrlMutation(input)).execute() result.data?.saveUrl?.onSaveSuccess?.url != null diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt index 325ce5b66..216958bc8 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt @@ -36,7 +36,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.dp import app.omnivore.omnivore.R import app.omnivore.omnivore.ui.library.SavedItemAction @@ -46,7 +45,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlin.time.Duration.Companion.seconds -import java.util.TimeZone // Not sure why we need this class, but directly opening SaveSheetActivity // causes the app to crash. @@ -61,16 +59,12 @@ abstract class SaveSheetActivityBase : AppCompatActivity() { val viewModel: SaveViewModel by viewModels() var extractedText: String? = null - // get locale and timezone from device - val timezone = TimeZone.getDefault().id - val locale = Locale.current.toLanguageTag() - when (intent?.action) { Intent.ACTION_SEND -> { if (intent.type?.startsWith("text/plain") == true) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { extractedText = it - viewModel.saveURL(it, timezone, locale) + viewModel.saveURL(it) Log.d(ContentValues.TAG, "Extracted text: $extractedText") } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt index b2376d051..5877d8b03 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt @@ -5,6 +5,7 @@ import android.util.Log import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.compose.ui.text.intl.Locale import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -14,6 +15,7 @@ import app.omnivore.omnivore.DatastoreRepository import app.omnivore.omnivore.graphql.generated.SaveUrlMutation import app.omnivore.omnivore.graphql.generated.type.SaveUrlInput import com.apollographql.apollo3.ApolloClient +import com.apollographql.apollo3.api.Optional import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -31,7 +33,7 @@ enum class SaveState { @HiltViewModel class SaveViewModel @Inject constructor( private val datastoreRepo: DatastoreRepository -): ViewModel() { +) : ViewModel() { val saveState = MutableLiveData(SaveState.NONE) var isLoading by mutableStateOf(false) @@ -81,13 +83,18 @@ class SaveViewModel @Inject constructor( try { clientRequestID = UUID.randomUUID().toString() + // get locale and timezone from device + val timezone = TimeZone.getDefault().id + val locale = Locale.current.toLanguageTag() val response = apolloClient.mutation( SaveUrlMutation( SaveUrlInput( clientRequestId = clientRequestID!!, source = "android", - url = cleanedUrl + url = cleanedUrl, + timezone = Optional.present(timezone), + locale = Optional.present(locale) ) ) ).execute()