Add share search action

This commit is contained in:
MM20 2024-04-19 23:08:10 +02:00
parent b5903f9812
commit 457d950006
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
8 changed files with 65 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.StickyNote2
import androidx.compose.material.icons.rounded.Alarm
import androidx.compose.material.icons.rounded.Call
import androidx.compose.material.icons.rounded.Email
@ -24,6 +25,7 @@ import androidx.compose.material.icons.rounded.PersonSearch
import androidx.compose.material.icons.rounded.Place
import androidx.compose.material.icons.rounded.QueryStats
import androidx.compose.material.icons.rounded.Search
import androidx.compose.material.icons.rounded.Share
import androidx.compose.material.icons.rounded.Sms
import androidx.compose.material.icons.rounded.SportsEsports
import androidx.compose.material.icons.rounded.StickyNote2
@ -151,6 +153,7 @@ fun getSearchActionIconVector(icon: SearchActionIcon): ImageVector {
SearchActionIcon.Movie -> Icons.Rounded.Movie
SearchActionIcon.Music -> Icons.Rounded.MusicNote
SearchActionIcon.Game -> Icons.Rounded.SportsEsports
SearchActionIcon.Note -> Icons.Rounded.StickyNote2
SearchActionIcon.Note -> Icons.AutoMirrored.Rounded.StickyNote2
SearchActionIcon.Share -> Icons.Rounded.Share
}
}

View File

@ -766,6 +766,7 @@
<string name="search_action_email">Email</string>
<string name="search_action_alarm">Set alarm</string>
<string name="search_action_timer">Start timer</string>
<string name="search_action_share">Share</string>
<string name="search_action_websearch">Web search</string>
<string name="search_action_contact">Add to contacts</string>
<string name="search_action_open_url">View website</string>

View File

@ -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

View File

@ -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
}
}
}

View File

@ -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)
}
}

View File

@ -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
}
}

View File

@ -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
)
}
}

View File

@ -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
)