From e3903a89d35bdd223448aa502c231a63630f6bb9 Mon Sep 17 00:00:00 2001 From: Jocelyn Liu Date: Mon, 28 Oct 2019 16:22:28 -0700 Subject: [PATCH] Fix IsBraveAdsNotificationChannelEnabled(). In browser-android-tabs, we were adding a new method GetChannelStatus directly in chromium's NotificationChannelsProviderAndroid class. To avoid patching, this commit add BraveNotificationSettingsBridge for our native code to get Ads channel status without patching chromium. --- android/brave_java_sources.gni | 1 + .../BraveNotificationSettingsBridge.java | 26 +++++++++++++++++++ build/android/BUILD.gn | 1 + .../browser/notification_helper_android.cc | 16 +++++++----- .../browser/notification_helper_android.h | 4 --- 5 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index c06c0c17735..09ec392284c 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -26,6 +26,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/document/BraveLauncherActivity.java", "../../brave/android/java/org/chromium/chrome/browser/notifications/BraveAds.java", "../../brave/android/java/org/chromium/chrome/browser/notifications/BraveAdsNotificationBuilder.java", + "../../brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java", "../../brave/android/java/org/chromium/chrome/browser/notifications/BraveOnboardingNotification.java", "../../brave/android/java/org/chromium/chrome/browser/notifications/BraveSetDefaultBrowserNotificationService.java", "../../brave/android/java/org/chromium/chrome/browser/ntp/BraveDuckDuckGoOfferView.java", diff --git a/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java b/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java new file mode 100644 index 00000000000..99654c131b7 --- /dev/null +++ b/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2019 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/. + */ + +package org.chromium.chrome.browser.notifications; + +import android.annotation.TargetApi; +import android.os.Build; + +import org.chromium.base.annotations.CalledByNative; +import org.chromium.chrome.browser.notifications.NotificationSettingsBridge; + +/** + * This class provides our native code to access NotificationSettingsBridge + * without patching notification_channels_provider_android.cc/h. + */ +public class BraveNotificationSettingsBridge { + @TargetApi(Build.VERSION_CODES.O) + @CalledByNative + static @NotificationChannelStatus int getChannelStatus(String channelId) { + return NotificationSettingsBridge.getChannelStatus(channelId); + } +} diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index bf84d8f6828..a887d675920 100755 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn @@ -96,6 +96,7 @@ generate_jni("jni_headers") { "//brave/android/java/org/chromium/chrome/browser/BraveActivity.java", "//brave/android/java/org/chromium/chrome/browser/BraveRelaunchUtils.java", "//brave/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java", + "//brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationSettingsBridge.java", "//brave/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java", "//brave/android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettings.java", "//brave/android/java/org/chromium/chrome/browser/signin/BraveSigninManager.java", diff --git a/components/brave_ads/browser/notification_helper_android.cc b/components/brave_ads/browser/notification_helper_android.cc index c971b8a105e..341fb3ffac9 100644 --- a/components/brave_ads/browser/notification_helper_android.cc +++ b/components/brave_ads/browser/notification_helper_android.cc @@ -3,15 +3,18 @@ * 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/. */ +#include "brave/components/brave_ads/browser/notification_helper_android.h" + #include #include "base/android/jni_string.h" #include "base/system/sys_info.h" -#include "brave/components/brave_ads/browser/notification_helper_android.h" #include "brave/build/android/jni_headers/BraveAds_jni.h" #include "brave/build/android/jni_headers/BraveAdsSignupDialog_jni.h" +#include "brave/build/android/jni_headers/BraveNotificationSettingsBridge_jni.h" #include "brave/components/brave_ads/browser/background_helper.h" #include "chrome/android/chrome_jni_headers/NotificationSystemStatusUtil_jni.h" +#include "chrome/browser/notifications/notification_channels_provider_android.h" namespace brave_ads { @@ -77,13 +80,12 @@ bool NotificationHelperAndroid::IsBraveAdsNotificationChannelEnabled() const { JNIEnv* env = base::android::AttachCurrentThread(); auto j_channel_id = Java_BraveAds_getBraveAdsChannelId(env); - std::string channel_id = ConvertJavaStringToUTF8(env, j_channel_id); + auto status = static_cast( + Java_BraveNotificationSettingsBridge_getChannelStatus( + env, j_channel_id)); - return false; - // TODO(jocelyn): FIXME - // auto status = channels_provider_->GetChannelStatus(channel_id); - // return (status == NotificationChannelStatus::ENABLED || - // status == NotificationChannelStatus::UNAVAILABLE); + return (status == NotificationChannelStatus::ENABLED || + status == NotificationChannelStatus::UNAVAILABLE); } int NotificationHelperAndroid::GetOperatingSystemVersion() const { diff --git a/components/brave_ads/browser/notification_helper_android.h b/components/brave_ads/browser/notification_helper_android.h index 11964fe7a06..f861314b394 100644 --- a/components/brave_ads/browser/notification_helper_android.h +++ b/components/brave_ads/browser/notification_helper_android.h @@ -11,7 +11,6 @@ #include "base/memory/weak_ptr.h" #include "brave/components/brave_ads/browser/notification_helper.h" -#include "chrome/browser/notifications/notification_channels_provider_android.h" namespace brave_ads { @@ -27,9 +26,6 @@ class NotificationHelperAndroid bool IsBraveAdsNotificationChannelEnabled() const; - std::unique_ptr channels_provider_ = - std::make_unique(); - int GetOperatingSystemVersion() const; // NotificationHelper impl