mirror of https://github.com/readrops/Readrops.git
Add New feed intent filter
This commit is contained in:
parent
22913aa129
commit
6af2f62b32
|
@ -38,6 +38,12 @@
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<intent-filter android:label="@string/add_feed">
|
||||||
|
<action android:name="android.intent.action.SEND" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
||||||
|
<data android:mimeType="text/plain" />
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
|
|
|
@ -101,7 +101,8 @@ class MainActivity : ComponentActivity(), KoinComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun handleIntent(intent: Intent) {
|
private suspend fun handleIntent(intent: Intent) {
|
||||||
if (intent.hasExtra(SyncWorker.ACCOUNT_ID_KEY)) {
|
when {
|
||||||
|
intent.hasExtra(SyncWorker.ACCOUNT_ID_KEY) -> {
|
||||||
val accountId = intent.getIntExtra(SyncWorker.ACCOUNT_ID_KEY, -1)
|
val accountId = intent.getIntExtra(SyncWorker.ACCOUNT_ID_KEY, -1)
|
||||||
get<Database>().accountDao()
|
get<Database>().accountDao()
|
||||||
.updateCurrentAccount(accountId)
|
.updateCurrentAccount(accountId)
|
||||||
|
@ -113,6 +114,10 @@ class MainActivity : ComponentActivity(), KoinComponent {
|
||||||
HomeScreen.openItemScreen(itemId)
|
HomeScreen.openItemScreen(itemId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
intent.action != null && intent.action == Intent.ACTION_SEND -> {
|
||||||
|
HomeScreen.openAddFeedDialog(intent.getStringExtra(Intent.EXTRA_TEXT).orEmpty())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun useDarkTheme(mode: String, darkFlag: Int): Boolean {
|
private fun useDarkTheme(mode: String, darkFlag: Int): Boolean {
|
||||||
|
|
|
@ -167,7 +167,8 @@ class FeedScreenModel(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openDialog(state: DialogState) {
|
fun openDialog(state: DialogState) {
|
||||||
if (state is DialogState.UpdateFeed) {
|
when (state) {
|
||||||
|
is DialogState.UpdateFeed -> {
|
||||||
_updateFeedDialogState.update {
|
_updateFeedDialogState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
feedId = state.feed.id,
|
feedId = state.feed.id,
|
||||||
|
@ -178,14 +179,20 @@ class FeedScreenModel(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is DialogState.UpdateFolder -> {
|
||||||
if (state is DialogState.UpdateFolder) {
|
|
||||||
_folderState.update {
|
_folderState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
value = state.folder.name.orEmpty()
|
value = state.folder.name.orEmpty()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is DialogState.AddFeed -> {
|
||||||
|
_addFeedDialogState.update {
|
||||||
|
it.copy(url = state.url.orEmpty())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
|
|
||||||
_feedState.update { it.copy(dialog = state) }
|
_feedState.update { it.copy(dialog = state) }
|
||||||
}
|
}
|
||||||
|
@ -308,7 +315,7 @@ class FeedScreenModel(
|
||||||
)
|
)
|
||||||
|
|
||||||
if (errors.isEmpty()) {
|
if (errors.isEmpty()) {
|
||||||
closeDialog(DialogState.AddFeed)
|
closeDialog(_feedState.value.dialog)
|
||||||
} else {
|
} else {
|
||||||
_addFeedDialogState.update {
|
_addFeedDialogState.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
|
|
|
@ -14,7 +14,7 @@ data class FeedState(
|
||||||
)
|
)
|
||||||
|
|
||||||
sealed interface DialogState {
|
sealed interface DialogState {
|
||||||
data object AddFeed : DialogState
|
data class AddFeed(val url: String? = null) : DialogState
|
||||||
data object AddFolder : DialogState
|
data object AddFolder : DialogState
|
||||||
class DeleteFeed(val feed: Feed) : DialogState
|
class DeleteFeed(val feed: Feed) : DialogState
|
||||||
class DeleteFolder(val folder: Folder) : DialogState
|
class DeleteFolder(val folder: Folder) : DialogState
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.readrops.app.feeds
|
package com.readrops.app.feeds
|
||||||
|
|
||||||
|
import android.util.Patterns
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
@ -53,9 +54,13 @@ import com.readrops.app.util.components.dialog.TextFieldDialog
|
||||||
import com.readrops.app.util.components.dialog.TwoChoicesDialog
|
import com.readrops.app.util.components.dialog.TwoChoicesDialog
|
||||||
import com.readrops.app.util.theme.spacing
|
import com.readrops.app.util.theme.spacing
|
||||||
import com.readrops.db.entities.Feed
|
import com.readrops.db.entities.Feed
|
||||||
|
import kotlinx.coroutines.channels.Channel
|
||||||
|
import kotlinx.coroutines.flow.receiveAsFlow
|
||||||
|
|
||||||
object FeedTab : Tab {
|
object FeedTab : Tab {
|
||||||
|
|
||||||
|
private val addFeedDialogChannel = Channel<String>()
|
||||||
|
|
||||||
override val options: TabOptions
|
override val options: TabOptions
|
||||||
@Composable
|
@Composable
|
||||||
get() = TabOptions(
|
get() = TabOptions(
|
||||||
|
@ -84,6 +89,15 @@ object FeedTab : Tab {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
addFeedDialogChannel.receiveAsFlow()
|
||||||
|
.collect { url ->
|
||||||
|
if (Patterns.WEB_URL.matcher(url).matches()) {
|
||||||
|
screenModel.openDialog(DialogState.AddFeed(url))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FeedDialogs(
|
FeedDialogs(
|
||||||
state = state,
|
state = state,
|
||||||
screenModel = screenModel
|
screenModel = screenModel
|
||||||
|
@ -131,7 +145,7 @@ object FeedTab : Tab {
|
||||||
}
|
}
|
||||||
|
|
||||||
FloatingActionButton(
|
FloatingActionButton(
|
||||||
onClick = { screenModel.openDialog(DialogState.AddFeed) }
|
onClick = { screenModel.openDialog(DialogState.AddFeed()) }
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Default.Add,
|
imageVector = Icons.Default.Add,
|
||||||
|
@ -242,7 +256,7 @@ object FeedTab : Tab {
|
||||||
onExpandChange = { screenModel.setAccountDropDownExpanded(it) },
|
onExpandChange = { screenModel.setAccountDropDownExpanded(it) },
|
||||||
onAccountClick = { screenModel.setAddFeedDialogSelectedAccount(it) },
|
onAccountClick = { screenModel.setAddFeedDialogSelectedAccount(it) },
|
||||||
onValidate = { screenModel.addFeedDialogValidate() },
|
onValidate = { screenModel.addFeedDialogValidate() },
|
||||||
onDismiss = { screenModel.closeDialog(DialogState.AddFeed) },
|
onDismiss = { screenModel.closeDialog(DialogState.AddFeed()) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,6 +339,9 @@ object FeedTab : Tab {
|
||||||
|
|
||||||
null -> {}
|
null -> {}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun openAddFeedDialog(url: String) {
|
||||||
|
addFeedDialogChannel.send(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -145,4 +145,9 @@ object HomeScreen : AndroidScreen() {
|
||||||
suspend fun openTab(tab: Tab) {
|
suspend fun openTab(tab: Tab) {
|
||||||
tabChannel.send(tab)
|
tabChannel.send(tab)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun openAddFeedDialog(url: String) {
|
||||||
|
tabChannel.send(FeedTab)
|
||||||
|
FeedTab.openAddFeedDialog(url)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -216,4 +216,5 @@
|
||||||
<string name="bitcoin_copy_address">Bitcoin (copier l\'adresse)</string>
|
<string name="bitcoin_copy_address">Bitcoin (copier l\'adresse)</string>
|
||||||
<string name="litecoin_copy_address">Litecoin (copier l\'adresse)</string>
|
<string name="litecoin_copy_address">Litecoin (copier l\'adresse)</string>
|
||||||
<string name="donation_text">"Si vous considérez que mon travail vous est utile et si vous souhaitez me soutenir, vous pouvez me faire une donation. "</string>
|
<string name="donation_text">"Si vous considérez que mon travail vous est utile et si vous souhaitez me soutenir, vous pouvez me faire une donation. "</string>
|
||||||
|
<string name="add_feed">Ajouter un flux</string>
|
||||||
</resources>
|
</resources>
|
|
@ -229,4 +229,5 @@
|
||||||
<string name="bitcoin_copy_address">Bitcoin (copy address)</string>
|
<string name="bitcoin_copy_address">Bitcoin (copy address)</string>
|
||||||
<string name="litecoin_copy_address">Litecoin (copy address)</string>
|
<string name="litecoin_copy_address">Litecoin (copy address)</string>
|
||||||
<string name="donation_text">I you find my work useful and you would like to support me, you can consider making me a donation.</string>
|
<string name="donation_text">I you find my work useful and you would like to support me, you can consider making me a donation.</string>
|
||||||
|
<string name="add_feed">Add feed</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue