Added VPN usage P3A

This commit is contained in:
Darnell Andries
2022-08-09 18:29:43 -07:00
parent 407ad4dd4e
commit 0c58258a8a
22 changed files with 433 additions and 49 deletions
@@ -255,6 +255,8 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
if (BraveVpnUtils.isBraveVpnFeatureEnable()) {
InAppPurchaseWrapper.getInstance().startBillingServiceConnection(BraveActivity.this);
BraveVpnNativeWorker.getInstance().addObserver(this);
BraveVpnUtils.reportBackgroundUsageP3A();
}
Tab tab = getActivityTab();
if (tab != null) {
@@ -172,6 +172,15 @@ public class BraveVpnNativeWorker {
mNativeBraveVpnNativeWorker, purchaseToken, productId, productType, packageName);
}
public void reportBackgroundP3A(long sessionStartTimeMs, long sessionEndTimeMs) {
BraveVpnNativeWorkerJni.get().reportBackgroundP3A(
mNativeBraveVpnNativeWorker, sessionStartTimeMs, sessionEndTimeMs);
}
public void reportForegroundP3A() {
BraveVpnNativeWorkerJni.get().reportForegroundP3A(mNativeBraveVpnNativeWorker);
}
@NativeMethods
interface Natives {
void init(BraveVpnNativeWorker caller);
@@ -190,5 +199,8 @@ public class BraveVpnNativeWorker {
String packageName);
void verifyPurchaseToken(long nativeBraveVpnNativeWorker, String purchaseToken,
String productId, String productType, String packageName);
void reportBackgroundP3A(
long nativeBraveVpnNativeWorker, long sessionStartTimeMs, long sessionEndTimeMs);
void reportForegroundP3A(long nativeBraveVpnNativeWorker);
}
}
@@ -47,6 +47,8 @@ public class BraveVpnPrefUtils {
public static final String PREF_BRAVE_VPN_SERVER_PUBLIC_KEY = "brave_vpn_server_public_key";
public static final String PREF_BRAVE_VPN_IP_ADDRESS = "brave_vpn_ip_address";
public static final String PREF_BRAVE_VPN_CLIENT_PRIVATE_KEY = "brave_vpn_client_private_key";
public static final String PREF_SESSION_START_TIME = "brave_vpn_session_start_time";
public static final String PREF_SESSION_END_TIME = "brave_vpn_session_end_time";
private static final SharedPreferences mSharedPreferences =
ContextUtils.getAppSharedPreferences();
@@ -268,4 +270,24 @@ public class BraveVpnPrefUtils {
sharedPreferencesEditor.putStringSet(PREF_EXCLUDED_PACKAGES, packages);
sharedPreferencesEditor.apply();
}
public static void setSessionEndTimeMs(long timeMs) {
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
sharedPreferencesEditor.putLong(PREF_SESSION_END_TIME, timeMs);
sharedPreferencesEditor.apply();
}
public static long getSessionEndTimeMs() {
return mSharedPreferences.getLong(PREF_SESSION_END_TIME, -1);
}
public static void setSessionStartTimeMs(long timeMs) {
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
sharedPreferencesEditor.putLong(PREF_SESSION_START_TIME, timeMs);
sharedPreferencesEditor.apply();
}
public static long getSessionStartTimeMs() {
return mSharedPreferences.getLong(PREF_SESSION_START_TIME, -1);
}
}
@@ -17,6 +17,7 @@ import android.os.Build;
import androidx.core.content.ContextCompat;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.vpn.BraveVpnNativeWorker;
import org.chromium.chrome.browser.vpn.wireguard.WireguardService;
import org.chromium.chrome.browser.vpn.wireguard.WireguardUtils;
import org.chromium.ui.widget.Toast;
@@ -62,6 +63,7 @@ public class BraveVpnProfileUtils {
}
public void startVpn(Context context) {
BraveVpnNativeWorker.getInstance().reportForegroundP3A();
ContextCompat.startForegroundService(context, new Intent(context, WireguardService.class));
}
@@ -25,6 +25,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.util.BraveConstants;
import org.chromium.chrome.browser.vpn.BraveVpnNativeWorker;
import org.chromium.chrome.browser.vpn.activities.BraveVpnPlansActivity;
import org.chromium.chrome.browser.vpn.activities.BraveVpnProfileActivity;
import org.chromium.chrome.browser.vpn.activities.BraveVpnSupportActivity;
@@ -241,4 +242,13 @@ public class BraveVpnUtils {
((FragmentActivity) activity).getSupportFragmentManager(),
"BraveVpnConfirmDialogFragment");
}
public static void reportBackgroundUsageP3A() {
// Will report previous/current session timestamps...
BraveVpnNativeWorker.getInstance().reportBackgroundP3A(
BraveVpnPrefUtils.getSessionStartTimeMs(), BraveVpnPrefUtils.getSessionEndTimeMs());
// ...and then reset the timestamps so we don't report the same session again.
BraveVpnPrefUtils.setSessionStartTimeMs(-1);
BraveVpnPrefUtils.setSessionEndTimeMs(-1);
}
}
@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.vpn.DisconnectVpnBroadcastReceiver;
import org.chromium.chrome.browser.vpn.utils.BraveVpnPrefUtils;
import org.chromium.chrome.browser.vpn.utils.BraveVpnUtils;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
@@ -43,6 +44,7 @@ public class WireguardServiceImpl
private TunnelModel mTunnelModel;
private final IBinder mBinder = new LocalBinder();
private Timer mVpnStatisticsTimer;
private Timer mRecordDaysUsedTimer;
private static final int BRAVE_VPN_NOTIFICATION_ID = 801;
private Context mContext = ContextUtils.getApplicationContext();
@@ -89,6 +91,8 @@ public class WireguardServiceImpl
mTunnelModel = TunnelModel.createTunnel(config, this);
mBackend.setState(mTunnelModel, Tunnel.State.UP, config);
updateVpnStatisticsTimer();
recordSessionTimes();
updateRecordSessionTimesTimer();
}
private Notification getBraveVpnNotification(String notificationText) {
@@ -124,6 +128,39 @@ public class WireguardServiceImpl
mNotificationManager.notify(BRAVE_VPN_NOTIFICATION_ID, notification);
}
private void recordSessionTimes() {
long sessionStartTimeMs = BraveVpnPrefUtils.getSessionStartTimeMs();
long sessionEndTimeMs = BraveVpnPrefUtils.getSessionEndTimeMs();
Calendar sessionEndTimeCal = Calendar.getInstance();
sessionEndTimeCal.setTimeInMillis(sessionEndTimeMs);
Calendar currDate = Calendar.getInstance();
long currTimeMs = System.currentTimeMillis();
if (sessionStartTimeMs < 0) {
BraveVpnPrefUtils.setSessionStartTimeMs(currTimeMs);
}
if (currDate.get(Calendar.YEAR) != sessionEndTimeCal.get(Calendar.YEAR)
|| currDate.get(Calendar.MONTH) != sessionEndTimeCal.get(Calendar.MONTH)
|| currDate.get(Calendar.DAY_OF_MONTH)
!= sessionEndTimeCal.get(Calendar.DAY_OF_MONTH)) {
BraveVpnPrefUtils.setSessionEndTimeMs(currTimeMs);
}
}
private void updateRecordSessionTimesTimer() {
// This timer will be active for the duration of the connection.
// It will become inactive when the connection is terminated/service destroyed.
mVpnStatisticsTimer = new Timer();
mVpnStatisticsTimer.schedule(new TimerTask() {
@Override
public void run() {
recordSessionTimes();
}
}, 0, 60000);
}
private void updateVpnStatisticsTimer() {
mVpnStatisticsTimer = new Timer();
mVpnStatisticsTimer.schedule(new TimerTask() {