From c90305aaf5c290db26bb3b11ef521b28d14aef8b Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 20:54:42 +0800
Subject: [PATCH 01/15] Support sharing images to reverse search
---
app/src/main/AndroidManifest.xml | 6 +++
.../java/moe/apex/breadboard/MainActivity.kt | 49 ++++++++++++++++---
.../breadboard/navigation/Destinations.kt | 2 +-
.../apex/breadboard/navigation/Navigation.kt | 9 ++--
.../saucenao/ReverseSearchScreen.kt | 10 ++--
5 files changed, 62 insertions(+), 14 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7aa0cfc8..baf8e494 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,6 +27,12 @@
+
+
+
+
+
+
maybePrepareArtistDestination(intent)
- "search" -> maybePrepareResultsDestination(intent)
+ val newIntent = createReverseSearchIntent(intent) ?: intent
+
+ return when (newIntent.getStringExtra("destination")) {
+ "artist" -> maybePrepareArtistDestination(newIntent)
+ "search" -> maybePrepareResultsDestination(newIntent)
+ "reverse_search" -> maybePrepareReverseSearchDestination(newIntent)
else -> null
}
}
@@ -170,4 +182,27 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
}
}
+
+
+ private fun createReverseSearchIntent(intent: Intent): Intent? {
+ if (intent.action != Intent.ACTION_SEND) return null
+
+ val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
+ val initialFileUri = intent.clipData?.getItemAt(0)?.uri
+
+ val intent = Intent(Intent.ACTION_VIEW)
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+ intent.component = ComponentName(this, MainActivity::class.java)
+ intent.putExtra("destination", "reverse_search")
+
+ /* Sometimes a shared link may contain an image clipData of the favicon, so we must
+ prioritize the text over the clipData. Providing them both would be bad. */
+ if (initialImageUrl != null) {
+ intent.putExtra("initial_image_url", initialImageUrl)
+ } else if (initialFileUri != null) {
+ intent.putExtra("initial_file_uri", initialFileUri.toString())
+ }
+
+ return intent
+ }
}
diff --git a/app/src/main/java/moe/apex/breadboard/navigation/Destinations.kt b/app/src/main/java/moe/apex/breadboard/navigation/Destinations.kt
index f28e0500..c44a1d53 100644
--- a/app/src/main/java/moe/apex/breadboard/navigation/Destinations.kt
+++ b/app/src/main/java/moe/apex/breadboard/navigation/Destinations.kt
@@ -88,7 +88,7 @@ object FollowedArtists
object Search
@Serializable
-object ReverseSearch
+data class ReverseSearch(val initialImageUrl: String? = null, val initialFileUri: String? = null)
@Serializable
data class Results(
diff --git a/app/src/main/java/moe/apex/breadboard/navigation/Navigation.kt b/app/src/main/java/moe/apex/breadboard/navigation/Navigation.kt
index ab90787a..00214a6f 100644
--- a/app/src/main/java/moe/apex/breadboard/navigation/Navigation.kt
+++ b/app/src/main/java/moe/apex/breadboard/navigation/Navigation.kt
@@ -202,8 +202,8 @@ fun Navigation(navController: NavHostController, startDestination: Any = Search)
},
onClick = {
if (!currentRoute.routeIs(ReverseSearch::class)) {
- navController.navigate(ReverseSearch) {
- popUpTo(ReverseSearch) { inclusive = true }
+ navController.navigate(ReverseSearch()) {
+ popUpTo(ReverseSearch()) { inclusive = true }
}
}
}
@@ -288,7 +288,10 @@ fun Navigation(navController: NavHostController, startDestination: Any = Search)
}
composable { HomeScreen(navController) { isNavigationBarVisible = it } }
composable { SearchScreen(navController, focusRequester) }
- composable { ReverseSearchScreen(navController) }
+ composable {
+ val args = it.toRoute()
+ ReverseSearchScreen(navController, args.initialImageUrl, args.initialFileUri)
+ }
composable {
val args = it.toRoute()
SearchResults(navController, args.source, args.tags)
diff --git a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
index 4e4f51d7..571a1ad6 100644
--- a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
+++ b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
@@ -80,14 +80,18 @@ import moe.apex.breadboard.util.showToast
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Composable
-fun ReverseSearchScreen(navController: NavController) {
+fun ReverseSearchScreen(
+ navController: NavController,
+ initialImageUrl: String? = null,
+ initialFileUri: String? = null
+) {
val context = LocalContext.current
val clipboard = LocalClipboard.current
val prefs = LocalPreferences.current
val scope = rememberCoroutineScope()
- var imageUrl by rememberSaveable { mutableStateOf("") }
- var selectedFileUri by rememberSaveable { mutableStateOf(null) }
+ var imageUrl by rememberSaveable { mutableStateOf(initialImageUrl ?: "") }
+ var selectedFileUri by rememberSaveable { mutableStateOf(initialFileUri?.toUri()) }
val imagePickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetContent()
From fa7b18c1fc1050c5ce3f7f5fe3bd3b36a399b58d Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 20:55:14 +0800
Subject: [PATCH 02/15] Support image clipboard paste for reverse search
---
.../saucenao/ReverseSearchScreen.kt | 22 +++++++++++++------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
index 571a1ad6..08d2d7a9 100644
--- a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
+++ b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
@@ -201,13 +201,21 @@ fun ReverseSearchScreen(
IconButton(
onClick = {
scope.launch {
- val clipboardText =
- clipboard.nativeClipboard.primaryClip?.getItemAt(
- 0
- )?.text?.toString()
- if (clipboardText != null) {
- imageUrl = clipboardText
- selectedFileUri = null
+ val clipboardItem = clipboard.nativeClipboard.primaryClip?.getItemAt(
+ 0
+ )
+
+ if (clipboardItem != null) {
+ val uri = clipboardItem.uri
+ val mimeType = uri?.let {
+ context.contentResolver.getType(it)
+ }
+
+ if (mimeType?.startsWith("image/") == true) {
+ selectedFileUri = uri
+ } else {
+ imageUrl = clipboardItem.text.toString()
+ }
} else {
showToast(context, "Nothing on the clipboard")
}
From 74794fa52786db3ac731f598d0cc171cef58bb6a Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:05:18 +0800
Subject: [PATCH 03/15] Rename `newIntent` back to `intent` * Figured it's not
that big of a deal for it to be ambiguous here
---
app/src/main/java/moe/apex/breadboard/MainActivity.kt | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index 487f6dba..7937d3fa 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -99,12 +99,12 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
private fun determineDestination(intent: Intent): Any? {
- val newIntent = createReverseSearchIntent(intent) ?: intent
+ val intent = createReverseSearchIntent(intent) ?: intent
- return when (newIntent.getStringExtra("destination")) {
- "artist" -> maybePrepareArtistDestination(newIntent)
- "search" -> maybePrepareResultsDestination(newIntent)
- "reverse_search" -> maybePrepareReverseSearchDestination(newIntent)
+ return when (intent.getStringExtra("destination")) {
+ "artist" -> maybePrepareArtistDestination(intent)
+ "search" -> maybePrepareResultsDestination(intent)
+ "reverse_search" -> maybePrepareReverseSearchDestination(intent)
else -> null
}
}
From df39d4ecb270e477c720410c3d2ba29316a09aec Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:10:12 +0800
Subject: [PATCH 04/15] Reduce redundant reverse search intent code
---
app/src/main/java/moe/apex/breadboard/MainActivity.kt | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index 7937d3fa..abad4a0e 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -187,14 +187,11 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
private fun createReverseSearchIntent(intent: Intent): Intent? {
if (intent.action != Intent.ACTION_SEND) return null
+ intent.putExtra("destination", "reverse_search")
+
val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
val initialFileUri = intent.clipData?.getItemAt(0)?.uri
- val intent = Intent(Intent.ACTION_VIEW)
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
- intent.component = ComponentName(this, MainActivity::class.java)
- intent.putExtra("destination", "reverse_search")
-
/* Sometimes a shared link may contain an image clipData of the favicon, so we must
prioritize the text over the clipData. Providing them both would be bad. */
if (initialImageUrl != null) {
From 3cd68b39b843bae1862cccfac3c030151a746847 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:11:16 +0800
Subject: [PATCH 05/15] Remove unused import
---
app/src/main/java/moe/apex/breadboard/MainActivity.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index abad4a0e..12c17d0e 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -1,7 +1,6 @@
package moe.apex.breadboard
import android.app.UiModeManager
-import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Build
From d75d0b1efb77f462c5b7a229d25c0fb6160b1f31 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:27:22 +0800
Subject: [PATCH 06/15] Better and descriptive approach
---
app/src/main/java/moe/apex/breadboard/MainActivity.kt | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index 12c17d0e..fa4157b1 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -98,7 +98,8 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
private fun determineDestination(intent: Intent): Any? {
- val intent = createReverseSearchIntent(intent) ?: intent
+ // Transform any Intent.ACTION_SEND intent to a valid reverse search destination intent
+ if (intent.action == Intent.ACTION_SEND) transformReverseSearchIntent(intent)
return when (intent.getStringExtra("destination")) {
"artist" -> maybePrepareArtistDestination(intent)
@@ -183,9 +184,7 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
- private fun createReverseSearchIntent(intent: Intent): Intent? {
- if (intent.action != Intent.ACTION_SEND) return null
-
+ private fun transformReverseSearchIntent(intent: Intent) {
intent.putExtra("destination", "reverse_search")
val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
@@ -198,7 +197,5 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
} else if (initialFileUri != null) {
intent.putExtra("initial_file_uri", initialFileUri.toString())
}
-
- return intent
}
}
From d9a4b86bc156d1648afbf0adfa9dace17ec0369b Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:32:18 +0800
Subject: [PATCH 07/15] Reset selected file URI on paste button click
---
.../java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
index 08d2d7a9..8b4658f1 100644
--- a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
+++ b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
@@ -214,6 +214,10 @@ fun ReverseSearchScreen(
if (mimeType?.startsWith("image/") == true) {
selectedFileUri = uri
} else {
+ /* onValueChange does not trigger when you press
+ the paste button, so we still have to reset the
+ selected file URI. */
+ selectedFileUri = null
imageUrl = clipboardItem.text.toString()
}
} else {
From ff2f3c02c2d1cac44c0d845279acc324e87429ee Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 21:55:06 +0800
Subject: [PATCH 08/15] Minor changes
---
app/src/main/java/moe/apex/breadboard/MainActivity.kt | 6 +++---
.../moe/apex/breadboard/saucenao/ReverseSearchScreen.kt | 7 ++++---
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index fa4157b1..bb1ea7fc 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -99,7 +99,7 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
private fun determineDestination(intent: Intent): Any? {
// Transform any Intent.ACTION_SEND intent to a valid reverse search destination intent
- if (intent.action == Intent.ACTION_SEND) transformReverseSearchIntent(intent)
+ if (intent.action == Intent.ACTION_SEND) transformReverseSearchDestinationIntent(intent)
return when (intent.getStringExtra("destination")) {
"artist" -> maybePrepareArtistDestination(intent)
@@ -184,14 +184,14 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
- private fun transformReverseSearchIntent(intent: Intent) {
+ private fun transformReverseSearchDestinationIntent(intent: Intent) {
intent.putExtra("destination", "reverse_search")
val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
val initialFileUri = intent.clipData?.getItemAt(0)?.uri
/* Sometimes a shared link may contain an image clipData of the favicon, so we must
- prioritize the text over the clipData. Providing them both would be bad. */
+ prioritise the text over the clipData. Providing them both would be bad. */
if (initialImageUrl != null) {
intent.putExtra("initial_image_url", initialImageUrl)
} else if (initialFileUri != null) {
diff --git a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
index 8b4658f1..95551319 100644
--- a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
+++ b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
@@ -201,9 +201,10 @@ fun ReverseSearchScreen(
IconButton(
onClick = {
scope.launch {
- val clipboardItem = clipboard.nativeClipboard.primaryClip?.getItemAt(
- 0
- )
+ val clipboardItem =
+ clipboard.nativeClipboard.primaryClip?.getItemAt(
+ 0
+ )
if (clipboardItem != null) {
val uri = clipboardItem.uri
From 415356fae8ba9cedeface8628bc995663b2000c8 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Mon, 24 Aug 2026 22:08:42 +0800
Subject: [PATCH 09/15] Fix app stacking on older Android versions * Move
comments to the top (can't make comments between attributes, blame XML)
---
app/src/main/AndroidManifest.xml | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index baf8e494..884dc942 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,12 @@
+
+ android:enableOnBackInvokedCallback="true"
+ android:configChanges="uiMode"
+ android:documentLaunchMode="intoExisting">
+ android:theme="@style/Theme.Breadboard">
@@ -39,8 +43,7 @@
android:taskAffinity="moe.apex.breadboard.DeepLinkActivity"
android:launchMode="singleTop"
android:exported="true"
- android:theme="@style/Theme.Breadboard"
- android:configChanges="uiMode">
+ android:theme="@style/Theme.Breadboard">
From 154b53d1605b48ecd0c9a9e44e46cdb50c1aac80 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 12:32:03 +0800
Subject: [PATCH 10/15] Create a copy of the intent instead * Probably not a
good idea to just mutate any intent we provide to the method
---
.../main/java/moe/apex/breadboard/MainActivity.kt | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index bb1ea7fc..056639cf 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -98,8 +98,12 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
private fun determineDestination(intent: Intent): Any? {
- // Transform any Intent.ACTION_SEND intent to a valid reverse search destination intent
- if (intent.action == Intent.ACTION_SEND) transformReverseSearchDestinationIntent(intent)
+ val intent = if (intent.action == Intent.ACTION_SEND) {
+ // Transform any Intent.ACTION_SEND intent to a valid reverse search destination intent
+ createReverseSearchDestinationIntent(intent)
+ } else {
+ intent
+ }
return when (intent.getStringExtra("destination")) {
"artist" -> maybePrepareArtistDestination(intent)
@@ -184,7 +188,9 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
- private fun transformReverseSearchDestinationIntent(intent: Intent) {
+ private fun createReverseSearchDestinationIntent(intent: Intent): Intent {
+ val intent = Intent(intent)
+
intent.putExtra("destination", "reverse_search")
val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
@@ -197,5 +203,7 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
} else if (initialFileUri != null) {
intent.putExtra("initial_file_uri", initialFileUri.toString())
}
+
+ return intent
}
}
From 4706f4257c613a0b57c1b07970d7d6a589d63101 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 13:07:40 +0800
Subject: [PATCH 11/15] Less code
---
.../java/moe/apex/breadboard/MainActivity.kt | 44 +++++--------------
1 file changed, 11 insertions(+), 33 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index 056639cf..b7090609 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -90,25 +90,23 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
- private fun maybePrepareReverseSearchDestination(intent: Intent): ReverseSearch? {
- val initialImageUrl = intent.getStringExtra("initial_image_url")
- val initialFileUri = intent.getStringExtra("initial_file_uri")
- return ReverseSearch(initialImageUrl, initialFileUri)
- }
-
-
private fun determineDestination(intent: Intent): Any? {
- val intent = if (intent.action == Intent.ACTION_SEND) {
- // Transform any Intent.ACTION_SEND intent to a valid reverse search destination intent
- createReverseSearchDestinationIntent(intent)
- } else {
- intent
+ // Handle reverse search Intent.ACTION_SEND intent
+ if (intent.action == Intent.ACTION_SEND) {
+ /* Sometimes a shared link may contain an image clipData of the favicon, so we must
+ prioritise the text over the clipData. Providing them both would be bad. */
+ intent.extras?.getString(Intent.EXTRA_TEXT)?.let { initialImageUrl ->
+ return ReverseSearch(initialImageUrl = initialImageUrl)
+ }
+
+ intent.clipData?.getItemAt(0)?.uri?.let { initialFileUri ->
+ return ReverseSearch(initialFileUri = initialFileUri.toString())
+ }
}
return when (intent.getStringExtra("destination")) {
"artist" -> maybePrepareArtistDestination(intent)
"search" -> maybePrepareResultsDestination(intent)
- "reverse_search" -> maybePrepareReverseSearchDestination(intent)
else -> null
}
}
@@ -186,24 +184,4 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
}
}
-
-
- private fun createReverseSearchDestinationIntent(intent: Intent): Intent {
- val intent = Intent(intent)
-
- intent.putExtra("destination", "reverse_search")
-
- val initialImageUrl = intent.extras?.getString(Intent.EXTRA_TEXT)
- val initialFileUri = intent.clipData?.getItemAt(0)?.uri
-
- /* Sometimes a shared link may contain an image clipData of the favicon, so we must
- prioritise the text over the clipData. Providing them both would be bad. */
- if (initialImageUrl != null) {
- intent.putExtra("initial_image_url", initialImageUrl)
- } else if (initialFileUri != null) {
- intent.putExtra("initial_file_uri", initialFileUri.toString())
- }
-
- return intent
- }
}
From 633767e771891d399ed23868aece1d4e63ec192b Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 13:10:34 +0800
Subject: [PATCH 12/15] Move back stuff * I just don't like seeing messy diffs
:p
---
.../java/moe/apex/breadboard/MainActivity.kt | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/MainActivity.kt b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
index b7090609..313d2f60 100644
--- a/app/src/main/java/moe/apex/breadboard/MainActivity.kt
+++ b/app/src/main/java/moe/apex/breadboard/MainActivity.kt
@@ -76,13 +76,6 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
- private fun maybePrepareArtistDestination(intent: Intent): ArtistProfile? {
- val artist = intent.getStringExtra("artist") ?: return null
- val source = ImageSource.valueOf(intent.getStringExtra("origin_source") ?: return null)
- return ArtistProfile(artist, source)
- }
-
-
private fun maybePrepareResultsDestination(intent: Intent): Results? {
val searchSource = ImageSource.valueOf(intent.getStringExtra("source") ?: return null)
val searchQuery = intent.getStringArrayExtra("query") ?: return null
@@ -90,8 +83,15 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}
+ private fun maybePrepareArtistDestination(intent: Intent): ArtistProfile? {
+ val artist = intent.getStringExtra("artist") ?: return null
+ val source = ImageSource.valueOf(intent.getStringExtra("origin_source") ?: return null)
+ return ArtistProfile(artist, source)
+ }
+
+
private fun determineDestination(intent: Intent): Any? {
- // Handle reverse search Intent.ACTION_SEND intent
+ // Handle Intent.ACTION_SEND intent for reverse search
if (intent.action == Intent.ACTION_SEND) {
/* Sometimes a shared link may contain an image clipData of the favicon, so we must
prioritise the text over the clipData. Providing them both would be bad. */
From 1d8afae26f31d9c2d0dd97b24411864650b2958d Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 13:19:19 +0800
Subject: [PATCH 13/15] Improve comment
---
.../moe/apex/breadboard/saucenao/ReverseSearchScreen.kt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
index 95551319..2392a64d 100644
--- a/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
+++ b/app/src/main/java/moe/apex/breadboard/saucenao/ReverseSearchScreen.kt
@@ -215,9 +215,9 @@ fun ReverseSearchScreen(
if (mimeType?.startsWith("image/") == true) {
selectedFileUri = uri
} else {
- /* onValueChange does not trigger when you press
- the paste button, so we still have to reset the
- selected file URI. */
+ /* onValueChange does not trigger when you mutate
+ imageUrl via code, so we still have to reset
+ selectedFileUri here. */
selectedFileUri = null
imageUrl = clipboardItem.text.toString()
}
From 3712ceeddd326666969f6204f7642b073b94dc04 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 18:43:48 +0800
Subject: [PATCH 14/15] Set reverse search intent label to SauceNao * I think
this is better than Reverse Search since it's shorter (it doesn't get
truncated) and matches the screen name in the app
---
app/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 884dc942..b99ca0d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,7 +31,7 @@
-
+
From 4c0a8d5a6df5b884bdd2b65201bd016f1d0ca603 Mon Sep 17 00:00:00 2001
From: flazepe <51487578+flazepe@users.noreply.github.com>
Date: Tue, 25 Aug 2026 18:45:04 +0800
Subject: [PATCH 15/15] Fix capitalization
---
app/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b99ca0d4..8aeb80a7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,7 +31,7 @@
-
+