From 575df5cd1cc06674883ed83d456734197f12314b Mon Sep 17 00:00:00 2001 From: Artem Samoilenko Date: Wed, 18 Jan 2023 12:25:31 -0500 Subject: [PATCH] [Android] Fix for 'Automatically open when possible' option --- android/brave_java_sources.gni | 1 - browser/download/android/BUILD.gn | 25 +++++++++++++++++ .../browser/download/BraveMimeUtils.java | 12 ++++++-- build/android/config.gni | 1 + .../download/android/download_utils.cc | 28 +++++++++++++++++++ 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 browser/download/android/BUILD.gn rename {android/java => browser/download/android/java/src}/org/chromium/chrome/browser/download/BraveMimeUtils.java (53%) create mode 100644 chromium_src/chrome/browser/download/android/download_utils.cc diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 7736e83b1e9..b0e2ce48ade 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -190,7 +190,6 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/decentralized_dns/settings/UnstoppableDomainsSettingsFragment.java", "../../brave/android/java/org/chromium/chrome/browser/document/BraveLauncherActivity.java", "../../brave/android/java/org/chromium/chrome/browser/dom_distiller/BraveReaderModeManager.java", - "../../brave/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java", "../../brave/android/java/org/chromium/chrome/browser/download/settings/BraveDownloadSettings.java", "../../brave/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java", "../../brave/android/java/org/chromium/chrome/browser/feedback/BraveHelpAndFeedbackLauncherImpl.java", diff --git a/browser/download/android/BUILD.gn b/browser/download/android/BUILD.gn new file mode 100644 index 00000000000..ace13200b37 --- /dev/null +++ b/browser/download/android/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright (c) 2023 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/. + +import("//build/config/android/rules.gni") + +android_library("java") { + sources = + [ "java/src/org/chromium/chrome/browser/download/BraveMimeUtils.java" ] + + deps = [ + ":jni_headers", + "//base:base_java", + "//base:jni_java", + "//chrome/browser/download/android:java", + ] + + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] +} + +generate_jni("jni_headers") { + sources = + [ "java/src/org/chromium/chrome/browser/download/BraveMimeUtils.java" ] +} diff --git a/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java b/browser/download/android/java/src/org/chromium/chrome/browser/download/BraveMimeUtils.java similarity index 53% rename from android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java rename to browser/download/android/java/src/org/chromium/chrome/browser/download/BraveMimeUtils.java index f9fd5a2cbdb..41821ad98d4 100644 --- a/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java +++ b/browser/download/android/java/src/org/chromium/chrome/browser/download/BraveMimeUtils.java @@ -1,16 +1,22 @@ /* Copyright (c) 2020 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 http://mozilla.org/MPL/2.0/. */ + * You can obtain one at https://mozilla.org/MPL/2.0/. */ package org.chromium.chrome.browser.download; import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; +import org.chromium.base.annotations.CalledByNative; public class BraveMimeUtils { + @CalledByNative public static boolean canAutoOpenMimeType(String mimeType) { - return ContextUtils.getAppSharedPreferences().getBoolean( - BravePreferenceKeys.BRAVE_DOWNLOADS_AUTOMATICALLY_OPEN_WHEN_POSSIBLE, true); + if (ContextUtils.getAppSharedPreferences().getBoolean( + BravePreferenceKeys.BRAVE_DOWNLOADS_AUTOMATICALLY_OPEN_WHEN_POSSIBLE, true)) { + return MimeUtils.canAutoOpenMimeType(mimeType); + } + + return false; } } diff --git a/build/android/config.gni b/build/android/config.gni index d0f8e339e22..73a2cc2ef97 100644 --- a/build/android/config.gni +++ b/build/android/config.gni @@ -20,6 +20,7 @@ brave_android_manifest_includes = [ brave_chrome_java_deps = [ "//brave/android/java/org/chromium/chrome/browser/search_engines:java", + "//brave/browser/download/android:java", "//brave/browser/download/internal/android:java", "//brave/browser/notifications/android:brave_java", "//brave/browser/notifications/android:java", diff --git a/chromium_src/chrome/browser/download/android/download_utils.cc b/chromium_src/chrome/browser/download/android/download_utils.cc new file mode 100644 index 00000000000..cad487e26df --- /dev/null +++ b/chromium_src/chrome/browser/download/android/download_utils.cc @@ -0,0 +1,28 @@ +/* Copyright (c) 2023 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/. */ + +#include "base/android/jni_string.h" +#include "brave/browser/download/android/jni_headers/BraveMimeUtils_jni.h" +#include "chrome/browser/download/android/jni_headers/MimeUtils_jni.h" + +namespace { + +// We need this just to avoid unused function +// 'Java_MimeUtils_canAutoOpenMimeType' error message. +bool DummyMimeUtilUsage() { + JNIEnv* env = nullptr; + if (Java_MimeUtils_canAutoOpenMimeType( + env, base::android::ConvertUTF8ToJavaString(env, ""))) + return true; + + return DummyMimeUtilUsage(); +} + +} // namespace + +#define Java_MimeUtils_canAutoOpenMimeType \ + Java_BraveMimeUtils_canAutoOpenMimeType +#include "src/chrome/browser/download/android/download_utils.cc" +#undef Java_MimeUtils_canAutoOpenMimeType