From 955bab7106019b03d5dfea94ff282eed8e0eca54 Mon Sep 17 00:00:00 2001 From: Jay Harris Date: Fri, 13 Mar 2026 09:07:34 +1300 Subject: [PATCH] [AI Chat]: Allow Leo to be added to home screen (#34586) --- ...u-AppMenuPropertiesDelegateImpl.java.patch | 21 +++++++++++++++++++ ...r-webapps-AppInstallMenuHandler.java.patch | 21 +++++++++++++++++++ .../AppMenuPropertiesDelegateImpl.java.toml | 21 +++++++++++++++++++ .../webapps/AppInstallMenuHandler.java.toml | 19 +++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 patches/chrome-android-java-src-org-chromium-chrome-browser-app-appmenu-AppMenuPropertiesDelegateImpl.java.patch create mode 100644 patches/chrome-android-java-src-org-chromium-chrome-browser-webapps-AppInstallMenuHandler.java.patch create mode 100644 rewrite/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java.toml create mode 100644 rewrite/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java.toml diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-app-appmenu-AppMenuPropertiesDelegateImpl.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-app-appmenu-AppMenuPropertiesDelegateImpl.java.patch new file mode 100644 index 00000000000..0d79dc9102d --- /dev/null +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-app-appmenu-AppMenuPropertiesDelegateImpl.java.patch @@ -0,0 +1,21 @@ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +index 31a8692bb45c2d910483bceaf1255ca152eb2c3d..1ecb2788087fca03ac0607181ce11c3954669a4d 100644 +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +@@ -43,6 +43,7 @@ import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; + import org.chromium.build.annotations.RequiresNonNull; + import org.chromium.chrome.R; ++import org.chromium.components.embedder_support.util.UrlConstants; + import org.chromium.chrome.browser.ActivityTabProvider; + import org.chromium.chrome.browser.bookmarks.BookmarkModel; + import org.chromium.chrome.browser.bookmarks.PowerBookmarkUtils; +@@ -683,7 +684,7 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties + // is not persisted when adding to the homescreen. + // * If creating shortcuts it not supported by the current home screen. + return WebappsUtils.isAddToHomeIntentSupported() +- && !isNativePage ++ && (!isNativePage || (url != null && UrlConstants.CHROME_SCHEME.equals(url.getScheme()) && url.getHost().equals("leo-ai"))) + && !isFileScheme + && !isContentScheme + && !isIncognito diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-webapps-AppInstallMenuHandler.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-webapps-AppInstallMenuHandler.java.patch new file mode 100644 index 00000000000..afce569dd38 --- /dev/null +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-webapps-AppInstallMenuHandler.java.patch @@ -0,0 +1,21 @@ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java +index 7bedbc8985a1192dcce41f282f2e1e4473dc13a8..9b12a2a70f3b852f9c2fa4ff74b8a6abd90197c5 100644 +--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java +@@ -14,6 +14,7 @@ import org.chromium.base.ContextUtils; + import org.chromium.build.annotations.NullMarked; + import org.chromium.build.annotations.Nullable; + import org.chromium.chrome.R; ++import org.chromium.components.embedder_support.util.UrlConstants; + import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; + import org.chromium.chrome.browser.banners.AppMenuVerbiage; + import org.chromium.chrome.browser.tab.Tab; +@@ -61,7 +62,7 @@ public class AppInstallMenuHandler { + if (webContents == null) return false; + @Nullable BottomSheetController controller = + BottomSheetControllerProvider.from(windowAndroid); +- if (controller == null) { ++ if ((currentTab.getUrl() != null && UrlConstants.CHROME_SCHEME.equals(currentTab.getUrl().getScheme())) || controller == null) { + // We have three options when this function fails. One is to abort the operation and do + // nothing (by returning false), or we can make one of the two options of the Universal + // Install dialog the default and go with that in case of errors. Since Install App is diff --git a/rewrite/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java.toml b/rewrite/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java.toml new file mode 100644 index 00000000000..74d975646af --- /dev/null +++ b/rewrite/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java.toml @@ -0,0 +1,21 @@ +# Copyright (c) 2026 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at https://mozilla.org/MPL/2.0/. + +[[substitution]] +description = "Add import for UrlConstants." +pattern = 'import org.chromium.chrome.R;' +replace = """ +import org.chromium.chrome.R; +import org.chromium.components.embedder_support.util.UrlConstants;""" + +[[substitution]] +description = """ +Make it possible to add chrome://leo-ai to the Home Screen on Android. +This patch updates the `shouldShowHomescreenMenuItem` function to whitelist +chrome://leo-ai. +""" +re_pattern = '(isAddToHomeIntentSupported\(\)\s+)&& (!isNativePage)$' +re_flags = ["MULTILINE"] +replace = '\1&& (\2 || (url != null && UrlConstants.CHROME_SCHEME.equals(url.getScheme()) && url.getHost().equals("leo-ai")))' diff --git a/rewrite/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java.toml b/rewrite/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java.toml new file mode 100644 index 00000000000..3cc3195264e --- /dev/null +++ b/rewrite/chrome/android/java/src/org/chromium/chrome/browser/webapps/AppInstallMenuHandler.java.toml @@ -0,0 +1,19 @@ +# Copyright (c) 2026 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at https://mozilla.org/MPL/2.0/. + +[[substitution]] +description = "Add import for UrlConstants." +pattern = 'import org.chromium.chrome.R;' +replace = """ +import org.chromium.chrome.R; +import org.chromium.components.embedder_support.util.UrlConstants;""" + +[[substitution]] +description = """ +Always make chrome:// schemes install rather than creating a shortcut (shortcuts can't handle chrome: urls). +""" +re_pattern = '(doUniversalInstall(\s|.)+?if \()(controller == null\))' +re_flags = ["MULTILINE"] +replace = '\1(currentTab.getUrl() != null && UrlConstants.CHROME_SCHEME.equals(currentTab.getUrl().getScheme())) || \3'