Add share search action

This commit is contained in:
MM20
2024-04-19 23:08:10 +02:00
parent b5903f9812
commit 457d950006
8 changed files with 65 additions and 4 deletions
@@ -6,6 +6,7 @@ import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.database.AppDatabase
import de.mm20.launcher2.database.entities.SearchActionEntity
import de.mm20.launcher2.ktx.jsonObjectOf
import de.mm20.launcher2.searchactions.actions.ShareAction
import de.mm20.launcher2.searchactions.builders.CallActionBuilder
import de.mm20.launcher2.searchactions.builders.CreateContactActionBuilder
import de.mm20.launcher2.searchactions.builders.EmailActionBuilder
@@ -14,6 +15,7 @@ import de.mm20.launcher2.searchactions.builders.OpenUrlActionBuilder
import de.mm20.launcher2.searchactions.builders.ScheduleEventActionBuilder
import de.mm20.launcher2.searchactions.builders.SearchActionBuilder
import de.mm20.launcher2.searchactions.builders.SetAlarmActionBuilder
import de.mm20.launcher2.searchactions.builders.ShareActionBuilder
import de.mm20.launcher2.searchactions.builders.TimerActionBuilder
import de.mm20.launcher2.searchactions.builders.WebsearchActionBuilder
import kotlinx.coroutines.CoroutineScope
@@ -58,6 +60,7 @@ internal class SearchActionRepositoryImpl(
TimerActionBuilder(context),
OpenUrlActionBuilder(context),
WebsearchActionBuilder(context),
ShareActionBuilder(context),
)
return allActions
@@ -33,13 +33,14 @@ enum class SearchActionIcon(private val value: Int) {
Movie(18),
Music(19),
Game(20),
Note(21);
Note(21),
Share(22);
fun toInt(): Int {
return value
}
companion object {
fun fromInt(value: Int?): SearchActionIcon {
return values().firstOrNull { it.value == value } ?: Search
return entries.firstOrNull { it.value == value } ?: Search
}
}
}
@@ -0,0 +1,25 @@
package de.mm20.launcher2.searchactions.actions
import android.content.Context
import android.content.Intent
import de.mm20.launcher2.ktx.tryStartActivity
data class ShareAction(
override val label: String,
val text: String,
) : SearchAction {
override val icon: SearchActionIcon = SearchActionIcon.Share
override val iconColor: Int = 0
override val customIcon: String? = null
override fun start(context: Context) {
val intent = Intent.createChooser(
Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, text)
},
null
)
context.tryStartActivity(intent)
}
}
@@ -69,6 +69,7 @@ interface SearchActionBuilder {
"calendar" -> return ScheduleEventActionBuilder(context)
"website" -> return OpenUrlActionBuilder(context)
"websearch" -> return WebsearchActionBuilder(context)
"share" -> return ShareActionBuilder(context)
else -> return null
}
}
@@ -0,0 +1,27 @@
package de.mm20.launcher2.searchactions.builders
import android.content.Context
import de.mm20.launcher2.searchactions.R
import de.mm20.launcher2.searchactions.TextClassificationResult
import de.mm20.launcher2.searchactions.actions.SearchAction
import de.mm20.launcher2.searchactions.actions.SearchActionIcon
import de.mm20.launcher2.searchactions.actions.ShareAction
class ShareActionBuilder(
override val label: String,
) : SearchActionBuilder {
constructor(context: Context) : this(context.getString(R.string.search_action_share))
override val key: String
get() = "share"
override val icon: SearchActionIcon = SearchActionIcon.Share
override fun build(context: Context, classifiedQuery: TextClassificationResult): SearchAction? {
return ShareAction(
context.getString(R.string.search_action_share),
classifiedQuery.text
)
}
}
@@ -17,7 +17,7 @@ class WebsearchActionBuilder(
override val key: String
get() = "websearch"
override fun build(context: Context, classifiedQuery: TextClassificationResult): SearchAction? {
override fun build(context: Context, classifiedQuery: TextClassificationResult): SearchAction {
return WebsearchAction(
context.getString(R.string.search_action_websearch), classifiedQuery.text
)