From 457d950006f8cdbe5812abe4bde5c6da9a011cc7 Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Fri, 19 Apr 2024 23:08:10 +0200
Subject: [PATCH] Add share search action
---
.../ui/component/SearchActionIcon.kt | 5 +++-
core/i18n/src/main/res/values/strings.xml | 1 +
.../searchactions/SearchActionRepository.kt | 3 +++
.../searchactions/actions/SearchAction.kt | 5 ++--
.../searchactions/actions/ShareAction.kt | 25 +++++++++++++++++
.../builders/SearchActionBuilder.kt | 1 +
.../builders/ShareActionBuilder.kt | 27 +++++++++++++++++++
.../builders/WebsearchActionBuilder.kt | 2 +-
8 files changed, 65 insertions(+), 4 deletions(-)
create mode 100644 data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/ShareAction.kt
create mode 100644 data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/ShareActionBuilder.kt
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/component/SearchActionIcon.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/component/SearchActionIcon.kt
index c50fd996..a7d51964 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/component/SearchActionIcon.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/component/SearchActionIcon.kt
@@ -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
}
}
\ No newline at end of file
diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml
index b6f9c964..f06964d9 100644
--- a/core/i18n/src/main/res/values/strings.xml
+++ b/core/i18n/src/main/res/values/strings.xml
@@ -766,6 +766,7 @@
Email
Set alarm
Start timer
+ Share
Web search
Add to contacts
View website
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/SearchActionRepository.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/SearchActionRepository.kt
index 16e69904..4406ba6e 100644
--- a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/SearchActionRepository.kt
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/SearchActionRepository.kt
@@ -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
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/SearchAction.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/SearchAction.kt
index 0a633e2d..3b2719d6 100644
--- a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/SearchAction.kt
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/SearchAction.kt
@@ -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
}
}
}
\ No newline at end of file
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/ShareAction.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/ShareAction.kt
new file mode 100644
index 00000000..b81c0331
--- /dev/null
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/actions/ShareAction.kt
@@ -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)
+ }
+}
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/SearchActionBuilder.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/SearchActionBuilder.kt
index 9146b5bd..bc1d5296 100644
--- a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/SearchActionBuilder.kt
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/SearchActionBuilder.kt
@@ -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
}
}
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/ShareActionBuilder.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/ShareActionBuilder.kt
new file mode 100644
index 00000000..e6b9e372
--- /dev/null
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/ShareActionBuilder.kt
@@ -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
+ )
+ }
+}
\ No newline at end of file
diff --git a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/WebsearchActionBuilder.kt b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/WebsearchActionBuilder.kt
index dab35770..92f0fb20 100644
--- a/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/WebsearchActionBuilder.kt
+++ b/data/search-actions/src/main/java/de/mm20/launcher2/searchactions/builders/WebsearchActionBuilder.kt
@@ -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
)