feat(assistant): search the web too, and choose what goes along

The assistant's field now has a switch at its start: a question goes to
Claude or into a web search, and the field remembers which. A web search
opens the chosen engine's results: on Android the device's own web
search by default (ACTION_WEB_SEARCH, answered by its default browser or
search app; Brave Search where nothing answers), elsewhere Brave Search
by default; Settings › Assistant › Search engine offers Ecosia,
DuckDuckGo, Startpage, Qwant, Google, Bing, or one's own address with
%s where the question goes.

Above the field, chips offer what the question is about: a card's
front, back, each hint and its explanation, the studyset's name and
description. None is chosen, so only what the person picks goes along,
each part cut at 600 characters; Claude gets the question and a compact
line per chosen part, a web search the question and the chosen text,
never the studyset's name. A chosen chip alone is enough to send. The
old sentences around every question (where it was asked, the connector)
are gone: they cost tokens for nothing unless the studyset is chosen.

On a studyset's screen the button now stands above the bottom bar, as in
the Library: unfolded inside the bar, its chips lay outside the bar's
bounds, where taps don't land.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-10 14:41:36 +02:00
commit 96c2dc1be8
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -9084,13 +9084,13 @@ abstract class AppLocalizations {
/// No description provided for @settingsAskClaude.
///
/// In en, this message translates to:
/// **'Ask Claude'**
/// **'Ask Claude or search the web'**
String get settingsAskClaude;
/// No description provided for @settingsAskClaudeSubtitle.
///
/// In en, this message translates to:
/// **'Off unless you turn it on. Adds a field on Home and a button in the Library, on a studyset and while studying. A question opens in Claude with what it is about, and you send it there; nothing is sent from here.'**
/// **'Off unless you turn it on. Adds a field on Home and a button in the Library, on a studyset and while studying. A question opens in Claude or as a web search, with only the context you choose; nothing is sent from here.'**
String get settingsAskClaudeSubtitle;
/// No description provided for @assistantHint.
@ -9120,7 +9120,7 @@ abstract class AppLocalizations {
/// No description provided for @assistantOpen.
///
/// In en, this message translates to:
/// **'Ask Claude'**
/// **'Ask or search'**
String get assistantOpen;
/// No description provided for @assistantClose.
@ -9135,34 +9135,6 @@ abstract class AppLocalizations {
/// **'Claude couldn\'t be opened.'**
String get assistantOpenFailed;
/// What the app hands to Claude: the person's question, then where it was asked. Written as the person, to Claude.
///
/// In en, this message translates to:
/// **'{question}\n\n(Asked from Halkyon Learn, where I learn with studysets on {instance}. If you have the Halkyon Learn connector, you can read them there.)'**
String assistantPromptLearning(String question, String instance);
/// No description provided for @assistantPromptStudyset.
///
/// In en, this message translates to:
/// **'{question}\n\n(About my studyset “{title}” in Halkyon Learn on {instance}. If you have the Halkyon Learn connector, you can read it there.)'**
String assistantPromptStudyset(
String question,
String title,
String instance,
);
/// No description provided for @assistantPromptCard.
///
/// In en, this message translates to:
/// **'{question}\n\n(About a flashcard I am studying, in my studyset “{title}” in Halkyon Learn on {instance}.\nFront: {front}\nBack: {back})'**
String assistantPromptCard(
String question,
String title,
String front,
String back,
String instance,
);
/// No description provided for @assistantConnectTitle.
///
/// In en, this message translates to:
@ -9282,6 +9254,132 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Try again'**
String get assistantRetry;
/// A line of context handed to Claude after the question.
///
/// In en, this message translates to:
/// **'Front: {text}'**
String assistantLineFront(String text);
/// No description provided for @assistantLineBack.
///
/// In en, this message translates to:
/// **'Back: {text}'**
String assistantLineBack(String text);
/// No description provided for @assistantLineHint.
///
/// In en, this message translates to:
/// **'Hint {number}: {text}'**
String assistantLineHint(int number, String text);
/// No description provided for @assistantLineExplanation.
///
/// In en, this message translates to:
/// **'Explanation: {text}'**
String assistantLineExplanation(String text);
/// No description provided for @assistantLineStudyset.
///
/// In en, this message translates to:
/// **'Studyset: “{title}” in Halkyon Learn on {instance}'**
String assistantLineStudyset(String title, String instance);
/// No description provided for @assistantLineDescription.
///
/// In en, this message translates to:
/// **'Description: {text}'**
String assistantLineDescription(String text);
/// No description provided for @assistantChipStudyset.
///
/// In en, this message translates to:
/// **'Studyset: {title}'**
String assistantChipStudyset(String title);
/// No description provided for @assistantContextLabel.
///
/// In en, this message translates to:
/// **'Send along'**
String get assistantContextLabel;
/// No description provided for @assistantTargetClaude.
///
/// In en, this message translates to:
/// **'Claude'**
String get assistantTargetClaude;
/// No description provided for @assistantTargetWeb.
///
/// In en, this message translates to:
/// **'Web'**
String get assistantTargetWeb;
/// No description provided for @assistantSwitchToWeb.
///
/// In en, this message translates to:
/// **'Search the web instead'**
String get assistantSwitchToWeb;
/// No description provided for @assistantSwitchToClaude.
///
/// In en, this message translates to:
/// **'Ask Claude instead'**
String get assistantSwitchToClaude;
/// No description provided for @assistantHintWeb.
///
/// In en, this message translates to:
/// **'Search the web…'**
String get assistantHintWeb;
/// No description provided for @assistantSendWeb.
///
/// In en, this message translates to:
/// **'Search'**
String get assistantSendWeb;
/// No description provided for @assistantSearchFailed.
///
/// In en, this message translates to:
/// **'The search couldn\'t be opened.'**
String get assistantSearchFailed;
/// No description provided for @settingsSearchEngine.
///
/// In en, this message translates to:
/// **'Search engine'**
String get settingsSearchEngine;
/// No description provided for @searchEngineDevice.
///
/// In en, this message translates to:
/// **'The device\'s search'**
String get searchEngineDevice;
/// No description provided for @searchEngineCustom.
///
/// In en, this message translates to:
/// **'Your own address'**
String get searchEngineCustom;
/// No description provided for @searchEngineCustomHint.
///
/// In en, this message translates to:
/// **'https://example.org/search?q=%s'**
String get searchEngineCustomHint;
/// No description provided for @searchEngineCustomInvalid.
///
/// In en, this message translates to:
/// **'An http or https address with %s where the question goes.'**
String get searchEngineCustomInvalid;
/// No description provided for @searchEngineCustomSave.
///
/// In en, this message translates to:
/// **'Use'**
String get searchEngineCustomSave;
}
class _AppLocalizationsDelegate