diff --git a/android/BUILD.gn b/android/BUILD.gn
index ce0d2f2f76cd..2231de25179b 100644
--- a/android/BUILD.gn
+++ b/android/BUILD.gn
@@ -1,5 +1,6 @@
import("//build/config/android/rules.gni")
import("//brave/components/brave_sync/buildflags/buildflags.gni")
+import("//brave/components/p3a/buildflags.gni")
declare_args() {
brave_android_developer_options_code = ""
@@ -17,5 +18,6 @@ java_cpp_template("brave_config_java") {
defines = [
"BRAVE_ANDROID_DEVELOPER_OPTIONS_CODE=\"$brave_android_developer_options_code\"",
"BRAVE_ANDROID_SYNC_ENABLED=$enable_brave_sync",
+ "BRAVE_ANDROID_P3A_ENABLED=$brave_p3a_enabled",
]
}
diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni
index d0769d188530..b4eb73c41872 100644
--- a/android/brave_java_sources.gni
+++ b/android/brave_java_sources.gni
@@ -49,6 +49,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/help/BraveHelpAndFeedback.java",
"../../brave/android/java/org/chromium/chrome/browser/homepage/BraveHomepageManager.java",
"../../brave/android/java/org/chromium/chrome/browser/homepage/settings/BraveHomepageSettings.java",
+ "../../brave/android/java/org/chromium/chrome/browser/informers/BraveP3AInformers.java",
"../../brave/android/java/org/chromium/chrome/browser/language/settings/BraveLanguageSettings.java",
"../../brave/android/java/org/chromium/chrome/browser/local_database/BraveStatsTable.java",
"../../brave/android/java/org/chromium/chrome/browser/local_database/DatabaseHelper.java",
diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java
index c20eb641687e..46167aea8192 100644
--- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java
+++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java
@@ -23,30 +23,39 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
-import org.chromium.base.Log;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
import org.chromium.base.IntentUtils;
+import org.chromium.base.Log;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.task.PostTask;
import org.chromium.base.task.TaskTraits;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ApplicationLifetime;
+import org.chromium.chrome.browser.BraveConfig;
import org.chromium.chrome.browser.BraveHelper;
import org.chromium.chrome.browser.BraveSyncReflectionUtils;
import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.CrossPromotionalModalDialogFragment;
import org.chromium.chrome.browser.LaunchIntentDispatcher;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.bookmarks.BookmarkModel;
+import org.chromium.chrome.browser.brave_stats.BraveStatsUtil;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.informers.BraveP3AInformers;
import org.chromium.chrome.browser.notifications.BraveSetDefaultBrowserNotificationService;
+import org.chromium.chrome.browser.notifications.retention.RetentionNotificationUtil;
+import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.onboarding.OnboardingActivity;
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
+import org.chromium.chrome.browser.onboarding.v2.HighlightDialogFragment;
+import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.preferences.BravePreferenceKeys;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
@@ -64,19 +73,12 @@
import org.chromium.chrome.browser.toolbar.top.BraveToolbarLayout;
import org.chromium.chrome.browser.util.BraveDbUtil;
import org.chromium.chrome.browser.util.BraveReferrer;
+import org.chromium.chrome.browser.util.PackageUtils;
import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.ui.widget.Toast;
-import org.chromium.chrome.browser.util.PackageUtils;
-import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
-import org.chromium.chrome.browser.onboarding.OnboardingActivity;
-import org.chromium.chrome.browser.CrossPromotionalModalDialogFragment;
-import org.chromium.chrome.browser.onboarding.v2.HighlightDialogFragment;
-import org.chromium.chrome.browser.notifications.retention.RetentionNotificationUtil;
-import org.chromium.chrome.browser.brave_stats.BraveStatsUtil;
-import org.chromium.chrome.browser.ntp.NewTabPage;
import java.util.Calendar;
import java.util.Date;
@@ -266,6 +268,23 @@ public void finishNativeInitialization() {
}
BraveSyncReflectionUtils.showInformers();
+ if (BraveConfig.P3A_ENABLED) {
+ // // P3A informer should be shown not for the updated users only
+ // if (!PackageUtils.isFirstInstall(this)) {
+ // BraveP3AInformers.show();
+ // } else {
+ // // On the first run P3A is must be set from the onboarding wizard
+ // }
+ // Uncomment ^ when onboarding UI step will be ready for P3A
+
+ // Until we don't have P3A onboarding, P3A will be disabled,
+ // but available for activating through settings
+ if (!BravePrefServiceBridge.getInstance().hasPathP3AEnabled()) {
+ BravePrefServiceBridge.getInstance().setP3AEnabled(false);
+ }
+ // Remove lines above ^ when onboarding UI step will be ready for P3A
+ }
+
if (!OnboardingPrefManager.getInstance().isOneTimeNotificationStarted()
&& PackageUtils.isFirstInstall(this)) {
RetentionNotificationUtil.scheduleNotification(this, RetentionNotificationUtil.HOUR_3);
diff --git a/android/java/org/chromium/chrome/browser/informers/BraveP3AInformers.java b/android/java/org/chromium/chrome/browser/informers/BraveP3AInformers.java
new file mode 100644
index 000000000000..9890f0a7349a
--- /dev/null
+++ b/android/java/org/chromium/chrome/browser/informers/BraveP3AInformers.java
@@ -0,0 +1,91 @@
+/* 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/. */
+
+package org.chromium.chrome.browser.informers;
+
+import org.chromium.base.ApplicationStatus;
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.BraveConfig;
+import org.chromium.chrome.browser.app.BraveActivity;
+import org.chromium.chrome.browser.infobar.InfoBarIdentifier;
+import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
+import org.chromium.chrome.browser.settings.BraveSyncScreensPreference;
+import org.chromium.chrome.browser.settings.SettingsLauncher;
+import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.ui.messages.infobar.BraveSimpleConfirmInfoBarBuilder;
+import org.chromium.chrome.browser.ui.messages.infobar.SimpleConfirmInfoBarBuilder;
+import org.chromium.chrome.browser.util.TabUtils;
+
+public class BraveP3AInformers {
+ public static final String P3A_LEARN_MORE_URL = "https://brave.com/P3A";
+ public static void show() {
+ showIfRequired();
+ }
+
+ private static void showIfRequired() {
+ if (!BraveConfig.P3A_ENABLED) {
+ return;
+ }
+
+ if (BravePrefServiceBridge.getInstance().getP3ANoticeAcknowledged()) {
+ return;
+ }
+
+ showP3AInformer();
+ }
+
+ private static void showP3AInformer() {
+ BraveActivity activity = BraveActivity.getBraveActivity();
+ if (activity == null) return;
+
+ Tab tab = activity.getActivityTabProvider().get();
+ if (tab == null) return;
+
+ BraveSimpleConfirmInfoBarBuilder.createInfobarWithDrawable(tab.getWebContents(),
+ new SimpleConfirmInfoBarBuilder.Listener() {
+ @Override
+ public void onInfoBarDismissed() {
+ // Pressing cross
+ BravePrefServiceBridge.getInstance().setP3AEnabled(true);
+ BravePrefServiceBridge.getInstance().setP3ANoticeAcknowledged(true);
+ }
+
+ @Override
+ public boolean onInfoBarButtonClicked(boolean isPrimary) {
+ if (isPrimary) {
+ // Pressing `Got it`
+ BravePrefServiceBridge.getInstance().setP3AEnabled(true);
+ } else {
+ // Pressing `Disable`
+ BravePrefServiceBridge.getInstance().setP3AEnabled(false);
+ }
+ BravePrefServiceBridge.getInstance().setP3ANoticeAcknowledged(true);
+
+ return false;
+ }
+
+ @Override
+ public boolean onInfoBarLinkClicked() {
+ // Pressing learn more
+ TabUtils.openUrlInNewTab(false /* isIncognito */, P3A_LEARN_MORE_URL);
+ return false;
+ }
+ },
+ // must be BRAVE_CONFIRM_P3A_INFOBAR_DELEGATE, but now it is introduced through
+ // src/brave/chromium_src/components/infobars/core/infobar_delegate.h and
+ // java enums are generated by //components/infobars/core:infobar_generated_enums
+ // who does not understand `brave/chromium_src`
+ InfoBarIdentifier.INLINE_UPDATE_READY_INFOBAR_ANDROID, activity,
+ R.drawable.btn_info /* drawableId */,
+ activity.getString(R.string.brave_confirm_p3a_infobar) /* message */,
+ activity.getString(R.string.brave_confirm_p3a_infobar_acknowledge) /* primaryText */,
+ activity.getString(R.string.brave_confirm_p3a_infobar_disable) /* secondaryText */,
+ activity.getString(R.string.brave_confirm_p3a_infobar_learn_more) /* linkText */,
+ false /* autoExpire */);
+ BravePrefServiceBridge.getInstance().setP3ANoticeAcknowledged(true);
+ }
+}
diff --git a/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java b/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java
index dbb2a62986d4..ce93a2b9e99e 100644
--- a/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java
+++ b/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java
@@ -171,6 +171,26 @@ public void setReferralDownloadId(String downloadId) {
BravePrefServiceBridgeJni.get().setReferralDownloadId(downloadId);
}
+ public void setP3AEnabled(boolean value) {
+ BravePrefServiceBridgeJni.get().setP3AEnabled(value);
+ }
+
+ public boolean getP3AEnabled() {
+ return BravePrefServiceBridgeJni.get().getP3AEnabled();
+ }
+
+ public boolean hasPathP3AEnabled() {
+ return BravePrefServiceBridgeJni.get().hasPathP3AEnabled();
+ }
+
+ public void setP3ANoticeAcknowledged(boolean value) {
+ BravePrefServiceBridgeJni.get().setP3ANoticeAcknowledged(value);
+ }
+
+ public boolean getP3ANoticeAcknowledged() {
+ return BravePrefServiceBridgeJni.get().getP3ANoticeAcknowledged();
+ }
+
@NativeMethods
interface Natives {
void setHTTPSEEnabled(boolean enabled);
@@ -215,5 +235,11 @@ interface Natives {
void setReferralInitialization(boolean value);
void setReferralPromoCode(String promoCode);
void setReferralDownloadId(String downloadId);
+
+ void setP3AEnabled(boolean value);
+ boolean getP3AEnabled();
+ boolean hasPathP3AEnabled();
+ void setP3ANoticeAcknowledged(boolean value);
+ boolean getP3ANoticeAcknowledged();
}
}
diff --git a/android/java/org/chromium/chrome/browser/privacy/settings/BravePrivacySettings.java b/android/java/org/chromium/chrome/browser/privacy/settings/BravePrivacySettings.java
index 7d7b16f434c1..79f02f62d5a6 100644
--- a/android/java/org/chromium/chrome/browser/privacy/settings/BravePrivacySettings.java
+++ b/android/java/org/chromium/chrome/browser/privacy/settings/BravePrivacySettings.java
@@ -13,6 +13,7 @@
import org.chromium.base.ContextUtils;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.BraveConfig;
import org.chromium.chrome.browser.preferences.BravePref;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.preferences.Pref;
@@ -30,6 +31,7 @@ public class BravePrivacySettings extends PrivacySettings {
private static final String PREF_AD_BLOCK = "ad_block";
private static final String PREF_FINGERPRINTING_PROTECTION = "fingerprinting_protection";
private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
+ private static final String PREF_SEND_P3A = "send_p3a_analytics";
private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
private static final String PREF_AUTOCOMPLETE_TOP_SITES = "autocomplete_top_sites";
@@ -51,6 +53,7 @@ public class BravePrivacySettings extends PrivacySettings {
private ChromeBaseCheckBoxPreference mAdBlockPref;
private ChromeBaseCheckBoxPreference mFingerprintingProtectionPref;
private ChromeBaseCheckBoxPreference mCloseTabsOnExitPref;
+ private ChromeBaseCheckBoxPreference mSendP3A;
private PreferenceCategory mSocialBlockingCategory;
private ChromeSwitchPreference mSocialBlockingGoogle;
private ChromeSwitchPreference mSocialBlockingFacebook;
@@ -77,6 +80,10 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
(ChromeBaseCheckBoxPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
mCloseTabsOnExitPref.setOnPreferenceChangeListener(this);
+ mSendP3A =
+ (ChromeBaseCheckBoxPreference) findPreference(PREF_SEND_P3A);
+ mSendP3A.setOnPreferenceChangeListener(this);
+
mSearchSuggestions = (ChromeSwitchPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
mSearchSuggestions.setOnPreferenceChangeListener(this);
mSearchSuggestions.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
@@ -122,6 +129,8 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
ContextUtils.getAppSharedPreferences().edit();
sharedPreferencesEditor.putBoolean(PREF_CLOSE_TABS_ON_EXIT, (boolean) newValue);
sharedPreferencesEditor.apply();
+ } else if (PREF_SEND_P3A.equals(key)) {
+ BravePrefServiceBridge.getInstance().setP3AEnabled((boolean) newValue);
} else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
mPrefServiceBridge.setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
} else if (PREF_AUTOCOMPLETE_TOP_SITES.equals(key)) {
@@ -157,6 +166,12 @@ private void updatePreferences() {
mSearchSuggestions.setChecked(mPrefServiceBridge.getBoolean(Pref.SEARCH_SUGGEST_ENABLED));
int order = findPreference(PREF_CLEAR_BROWSING_DATA).getOrder();
mCloseTabsOnExitPref.setOrder(++order);
+ if (BraveConfig.P3A_ENABLED) {
+ mSendP3A.setOrder(++order);
+ mSendP3A.setChecked(BravePrefServiceBridge.getInstance().getP3AEnabled());
+ } else {
+ getPreferenceScreen().removePreference(mSendP3A);
+ }
mHttpsePref.setOrder(++order);
mAdBlockPref.setOrder(++order);
mFingerprintingProtectionPref.setOrder(++order);
diff --git a/android/java/res/xml/brave_privacy_preferences.xml b/android/java/res/xml/brave_privacy_preferences.xml
index 43b011da601f..42a40c09540f 100644
--- a/android/java/res/xml/brave_privacy_preferences.xml
+++ b/android/java/res/xml/brave_privacy_preferences.xml
@@ -11,6 +11,11 @@
android:title="@string/close_tabs_on_exit_title"
android:summary="@string/close_tabs_on_exit_summary"
android:defaultValue="false" />
+
-
+
local_state()->SetBoolean(
+ brave::kP3AEnabled, value);
+}
+
+jboolean JNI_BravePrefServiceBridge_GetP3AEnabled(
+ JNIEnv* env) {
+ return g_browser_process->local_state()->GetBoolean(
+ brave::kP3AEnabled);
+}
+
+jboolean JNI_BravePrefServiceBridge_HasPathP3AEnabled(
+ JNIEnv* env) {
+ return g_browser_process->local_state()->HasPrefPath(brave::kP3AEnabled);
+}
+
+void JNI_BravePrefServiceBridge_SetP3ANoticeAcknowledged(
+ JNIEnv* env,
+ jboolean value) {
+ return g_browser_process->local_state()->SetBoolean(
+ brave::kP3ANoticeAcknowledged, value);
+}
+
+jboolean JNI_BravePrefServiceBridge_GetP3ANoticeAcknowledged(
+ JNIEnv* env) {
+ return g_browser_process->local_state()->GetBoolean(
+ brave::kP3ANoticeAcknowledged);
+}
+
+#else
+
+void JNI_BravePrefServiceBridge_SetP3AEnabled(JNIEnv* env, jboolean value) {}
+
+jboolean JNI_BravePrefServiceBridge_GetP3AEnabled(JNIEnv* env) {
+ return false;
+}
+
+jboolean JNI_BravePrefServiceBridge_HasPathP3AEnabled(JNIEnv* env) {}
+
+void JNI_BravePrefServiceBridge_SetP3ANoticeAcknowledged(JNIEnv* env,
+ jboolean value) {}
+
+jboolean JNI_BravePrefServiceBridge_GetP3ANoticeAcknowledged(JNIEnv* env) {
+ return false;
+}
+#endif // BUILDFLAG(BRAVE_P3A_ENABLED)
+
} // namespace android
} // namespace chrome
diff --git a/browser/brave_local_state_prefs.cc b/browser/brave_local_state_prefs.cc
index 85ac91284578..25f59e6f0b18 100644
--- a/browser/brave_local_state_prefs.cc
+++ b/browser/brave_local_state_prefs.cc
@@ -19,7 +19,6 @@
#include "brave/components/p3a/brave_p3a_service.h"
#include "brave/components/p3a/buildflags.h"
#include "brave/components/tor/buildflags/buildflags.h"
-#include "chrome/browser/first_run/first_run.h"
#include "chrome/common/pref_names.h"
#include "components/metrics/metrics_pref_names.h"
#include "components/prefs/pref_registry_simple.h"
@@ -37,9 +36,11 @@
#include "brave/components/ipfs/ipfs_service.h"
#endif
+#include "brave/browser/ui/webui/new_tab_page/brave_new_tab_message_handler.h"
+
#if !defined(OS_ANDROID)
#include "brave/browser/p3a/p3a_core_metrics.h"
-#include "brave/browser/ui/webui/new_tab_page/brave_new_tab_message_handler.h"
+#include "chrome/browser/first_run/first_run.h"
#endif // !defined(OS_ANDROID)
#if BUILDFLAG(ENABLE_WIDEVINE)
@@ -74,7 +75,14 @@ void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
#if BUILDFLAG(BRAVE_P3A_ENABLED)
brave::BraveP3AService::RegisterPrefs(registry,
+#if !defined(OS_ANDROID)
first_run::IsChromeFirstRun());
+#else
+ // BraveP3AService::RegisterPrefs
+ // doesn't use this arg on Android
+ false);
+#endif // !defined(OS_ANDROID)
+
#endif // BUILDFLAG(BRAVE_P3A_ENABLED)
brave_shields::RegisterShieldsP3APrefs(registry);
diff --git a/browser/p3a/p3a_core_metrics.h b/browser/p3a/p3a_core_metrics.h
index 9e0e2cd4a2a0..37871995f043 100644
--- a/browser/p3a/p3a_core_metrics.h
+++ b/browser/p3a/p3a_core_metrics.h
@@ -6,6 +6,17 @@
#ifndef BRAVE_BROWSER_P3A_P3A_CORE_METRICS_H_
#define BRAVE_BROWSER_P3A_P3A_CORE_METRICS_H_
+// The classes below can be used on desktop only
+// because BrowserListObserver is available on desktop only
+// Brave.Uptime.BrowserOpenMinutes, Brave.Core.LastTimeIncognitoUsed and
+// Brave.Core.TorEverUsed don't work on Android
+
+#include "build/build_config.h"
+
+#if defined(OS_ANDROID)
+#error This file should only be included on desktop.
+#endif
+
#include
#include "base/timer/timer.h"
@@ -39,6 +50,11 @@ class BraveUptimeTracker {
DISALLOW_COPY_AND_ASSIGN(BraveUptimeTracker);
};
+// BraveWindowTracker is under !OS_ANDROID guard because
+// BrowserListObserver should only be only on desktop
+// Brave.Uptime.BrowserOpenMinutes and Brave.Core.LastTimeIncognitoUsed
+// don't work on Android
+#if !defined(OS_ANDROID)
// Periodically records P3A stats (extracted from Local State) regarding the
// time when incognito windows were used.
// Used as a leaking singletone.
@@ -62,6 +78,7 @@ class BraveWindowTracker : public BrowserListObserver {
PrefService* local_state_;
DISALLOW_COPY_AND_ASSIGN(BraveWindowTracker);
};
+#endif // !defined(OS_ANDROID)
} // namespace brave
diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd
index 01365b52c22e..b47c2eb71113 100644
--- a/browser/ui/android/strings/android_brave_strings.grd
+++ b/browser/ui/android/strings/android_brave_strings.grd
@@ -235,6 +235,12 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
Don't persist tabs between browsing sessions
+
+ Automatically send completely private product analytics to Brave
+
+
+ This anonymous info only lets Brave estimate the overall usage of certain features.
+
Trackers & Ads Blocked
@@ -819,6 +825,19 @@ until they verify, or until 90 days have passed.
Begin Setup
+
+
+ Brave uses completely private product analytics to estimate the overall usage of certain features
+
+
+ Got it
+
+
+ Disable
+
+
+ Learn More
+
Sync could not be setup
@@ -1495,7 +1514,7 @@ until they verify, or until 90 days have passed.
Lets Take A Quick Tour
- After you recieve your first ads payout you can come back and tip this creator!
+ After you recieve your first ads payout you can come back and tip this creator!
Quick refresher tour
diff --git a/build/android/java/templates/BraveConfig.template b/build/android/java/templates/BraveConfig.template
index 165ef50043ae..ea9b61c8bce8 100644
--- a/build/android/java/templates/BraveConfig.template
+++ b/build/android/java/templates/BraveConfig.template
@@ -20,4 +20,10 @@ public class BraveConfig {
#else
public static final boolean SYNC_ENABLED = false;
#endif
+
+#if defined(BRAVE_ANDROID_P3A_ENABLED)
+public static final boolean P3A_ENABLED = BRAVE_ANDROID_P3A_ENABLED;
+#else
+public static final boolean P3A_ENABLED = false;
+#endif
}
diff --git a/components/p3a/brave_histogram_rewrite.cc b/components/p3a/brave_histogram_rewrite.cc
index 20b4b7bd3699..2fec5c2b1e53 100644
--- a/components/p3a/brave_histogram_rewrite.cc
+++ b/components/p3a/brave_histogram_rewrite.cc
@@ -19,6 +19,7 @@ constexpr const char* kBravezationHistograms[] = {
"DefaultBrowser.State",
"Extensions.LoadExtension",
"Tabs.TabCount",
+ "Tabs.TabCountPerLoad",
"Tabs.WindowCount",
};
@@ -70,7 +71,8 @@ void DoHistogramBravezation(const char* histogram_name,
return;
}
- if (strcmp("Tabs.TabCount", histogram_name) == 0) {
+ if (strcmp("Tabs.TabCount", histogram_name) == 0 ||
+ strcmp("Tabs.TabCountPerLoad", histogram_name) == 0) {
int answer = 0;
if (0 <= sample && sample <= 1) {
answer = 0;
diff --git a/components/p3a/brave_p3a_service.cc b/components/p3a/brave_p3a_service.cc
index 0d47b14f101c..e6096eaddfb5 100644
--- a/components/p3a/brave_p3a_service.cc
+++ b/components/p3a/brave_p3a_service.cc
@@ -194,10 +194,8 @@ void BraveP3AService::RegisterPrefs(PrefRegistrySimple* registry,
registry->RegisterTimePref(kLastRotationTimeStampPref, {});
registry->RegisterBooleanPref(kP3AEnabled, true);
-#if !defined(OS_ANDROID)
// New users are shown the P3A notice via the welcome page.
registry->RegisterBooleanPref(kP3ANoticeAcknowledged, first_run);
-#endif // !defined(OS_ANDROID)
}
void BraveP3AService::InitCallbacks() {
diff --git a/components/p3a/buildflags.gni b/components/p3a/buildflags.gni
index 1168f24e5e79..a7debc729bff 100644
--- a/components/p3a/buildflags.gni
+++ b/components/p3a/buildflags.gni
@@ -1,5 +1,5 @@
import("//build/config/features.gni")
declare_args() {
- brave_p3a_enabled = !is_ios && !is_android
+ brave_p3a_enabled = true
}