Starts MiscAndroidMetrics mojo remote from a SequencedTaskRunner

This commit is contained in:
Serg
2023-11-28 10:34:28 -05:00
parent 22447449fa
commit 57eb6a742a
4 changed files with 62 additions and 34 deletions
@@ -1152,9 +1152,6 @@ public abstract class BraveActivity extends ChromeActivity
ChromeSharedPreferences.getInstance()
.writeBoolean(BravePrivacySettings.PREF_APP_LINKS_RESET, false);
}
mUsageMonitor = new UsageMonitor(mMiscAndroidMetrics);
mUsageMonitor.start();
}
private void handleDeepLinkVpn() {
@@ -2041,10 +2038,16 @@ public abstract class BraveActivity extends ChromeActivity
new MiscAndroidMetricsConnectionErrorHandler(this);
}
mMiscAndroidMetrics = MiscAndroidMetricsFactory.getInstance().getMetricsService(
mMiscAndroidMetricsConnectionErrorHandler);
mMiscAndroidMetrics.recordPrivacyHubEnabledStatus(
OnboardingPrefManager.getInstance().isBraveStatsEnabled());
MiscAndroidMetricsFactory.getInstance()
.getMetricsService(mMiscAndroidMetricsConnectionErrorHandler)
.then(
miscAndroidMetrics -> {
mMiscAndroidMetrics = miscAndroidMetrics;
mMiscAndroidMetrics.recordPrivacyHubEnabledStatus(
OnboardingPrefManager.getInstance().isBraveStatsEnabled());
mUsageMonitor = new UsageMonitor(mMiscAndroidMetrics);
mUsageMonitor.start();
});
}
private void initSwapService() {
@@ -28,6 +28,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.misc_metrics.mojom.MiscAndroidMetrics;
import java.io.File;
import java.io.FileNotFoundException;
@@ -46,7 +47,8 @@ public class BraveStatsUtil {
public static final int SHARE_STATS_REQUEST_CODE = 4367;
private static final String TAG = "BraveStatsUtil";
public static final String STATS_FRAGMENT_TAG = "brave_stats_bottom_sheet_dialog_fragment";
private static String shareStatsFile = "";
private static String sShareStatsFile = "";
/*
* Gets string view of specific time in seconds for Brave stats
*/
@@ -108,8 +110,9 @@ public class BraveStatsUtil {
BraveStatsBottomSheetDialogFragment.newInstance();
braveStatsBottomSheetDialogFragment.show(
activity.getSupportFragmentManager(), STATS_FRAGMENT_TAG);
if (activity.getMiscAndroidMetrics() != null) {
activity.getMiscAndroidMetrics().recordPrivacyHubView();
MiscAndroidMetrics miscAndroidMetrics = activity.getMiscAndroidMetrics();
if (miscAndroidMetrics != null) {
miscAndroidMetrics.recordPrivacyHubView();
}
} catch (BraveActivity.BraveActivityNotFoundException e) {
Log.e(TAG, "showBraveStats " + e);
@@ -172,14 +175,15 @@ public class BraveStatsUtil {
Bitmap bmp = convertToBitmap(view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
shareStatsFile = MediaStore.Images.Media.insertImage(
context.getContentResolver(), bmp, "tempimage", null);
sShareStatsFile =
MediaStore.Images.Media.insertImage(
context.getContentResolver(), bmp, "tempimage", null);
} else {
storeImage(bmp);
shareStatsFile = getOutputMediaFile().getAbsolutePath();
sShareStatsFile = getOutputMediaFile().getAbsolutePath();
}
Uri uri = Uri.parse(shareStatsFile);
Uri uri = Uri.parse(sShareStatsFile);
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
@@ -201,11 +205,11 @@ public class BraveStatsUtil {
public static void removeShareStatsFile() {
Context context = ContextUtils.getApplicationContext();
try {
if (shareStatsFile.startsWith("content://")) {
if (sShareStatsFile.startsWith("content://")) {
ContentResolver contentResolver = context.getContentResolver();
contentResolver.delete(Uri.parse(shareStatsFile), null, null);
contentResolver.delete(Uri.parse(sShareStatsFile), null, null);
} else {
File file = new File(shareStatsFile);
File file = new File(sShareStatsFile);
if (file.exists()) {
file.delete();
}
@@ -8,6 +8,10 @@ package org.chromium.chrome.browser.misc_metrics;
import org.jni_zero.JNINamespace;
import org.jni_zero.NativeMethods;
import org.chromium.base.Promise;
import org.chromium.base.task.PostTask;
import org.chromium.base.task.TaskRunner;
import org.chromium.base.task.TaskTraits;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.misc_metrics.mojom.MiscAndroidMetrics;
@@ -19,30 +23,43 @@ import org.chromium.mojo.system.impl.CoreImpl;
@JNINamespace("chrome::android")
public class MiscAndroidMetricsFactory {
private static final Object lock = new Object();
private static MiscAndroidMetricsFactory instance;
private static final Object sLock = new Object();
private static MiscAndroidMetricsFactory sInstance;
private final TaskRunner mTaskRunner;
public static MiscAndroidMetricsFactory getInstance() {
synchronized (lock) {
if (instance == null) {
instance = new MiscAndroidMetricsFactory();
synchronized (sLock) {
if (sInstance == null) {
sInstance = new MiscAndroidMetricsFactory();
}
}
return instance;
return sInstance;
}
private MiscAndroidMetricsFactory() {}
private MiscAndroidMetricsFactory() {
mTaskRunner = PostTask.createSequencedTaskRunner(TaskTraits.UI_DEFAULT);
}
public MiscAndroidMetrics getMetricsService(ConnectionErrorHandler connectionErrorHandler) {
Profile profile = Utils.getProfile(false); // always use regular profile
long nativeHandle =
MiscAndroidMetricsFactoryJni.get().getInterfaceToMiscAndroidMetrics(profile);
MessagePipeHandle handle = wrapNativeHandle(nativeHandle);
MiscAndroidMetrics metricsService = MiscAndroidMetrics.MANAGER.attachProxy(handle, 0);
Handler handler = ((Interface.Proxy) metricsService).getProxyHandler();
handler.setErrorHandler(connectionErrorHandler);
public Promise<MiscAndroidMetrics> getMetricsService(
ConnectionErrorHandler connectionErrorHandler) {
final Promise<MiscAndroidMetrics> promise = new Promise<>();
return metricsService;
mTaskRunner.postTask(
() -> {
Profile profile = Utils.getProfile(false); // always use regular profile
long nativeHandle =
MiscAndroidMetricsFactoryJni.get()
.getInterfaceToMiscAndroidMetrics(profile);
MessagePipeHandle handle = wrapNativeHandle(nativeHandle);
MiscAndroidMetrics metricsService =
MiscAndroidMetrics.MANAGER.attachProxy(handle, 0);
Handler handler = ((Interface.Proxy) metricsService).getProxyHandler();
handler.setErrorHandler(connectionErrorHandler);
promise.fulfill(metricsService);
});
return promise;
}
private MessagePipeHandle wrapNativeHandle(long nativeHandle) {
@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.app.BraveActivity.BraveActivityNotFoundExcept
import org.chromium.chrome.browser.notifications.BraveOnboardingNotification;
import org.chromium.chrome.browser.notifications.retention.RetentionNotificationUtil;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.misc_metrics.mojom.MiscAndroidMetrics;
import java.util.Calendar;
import java.util.Date;
@@ -175,7 +176,10 @@ public class OnboardingPrefManager {
sharedPreferencesEditor.apply();
try {
BraveActivity activity = BraveActivity.getBraveActivity();
activity.getMiscAndroidMetrics().recordPrivacyHubEnabledStatus(enabled);
MiscAndroidMetrics miscAndroidMetrics = activity.getMiscAndroidMetrics();
if (miscAndroidMetrics != null) {
miscAndroidMetrics.recordPrivacyHubEnabledStatus(enabled);
}
} catch (BraveActivityNotFoundException e) {
Log.e(TAG, "Could not report privacy hub enabled change to P3A: " + e);
}