Merge "Add satellite access controller atom into metrics" into main
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
index 6679029..b1359f8 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
@@ -67,7 +67,9 @@
import com.android.internal.telephony.satellite.SatelliteConfig;
import com.android.internal.telephony.satellite.SatelliteConstants;
import com.android.internal.telephony.satellite.SatelliteController;
+import com.android.internal.telephony.satellite.metrics.AccessControllerMetricsStats;
import com.android.internal.telephony.satellite.metrics.ConfigUpdaterMetricsStats;
+import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.phone.PhoneGlobals;
@@ -145,6 +147,10 @@
@NonNull
private final SatelliteController mSatelliteController;
@NonNull
+ private final ControllerMetricsStats mControllerMetricsStats;
+ @NonNull
+ private final AccessControllerMetricsStats mAccessControllerMetricsStats;
+ @NonNull
private final ResultReceiver mInternalSatelliteSupportedResultReceiver;
@NonNull
private final ResultReceiver mInternalSatelliteProvisionedResultReceiver;
@@ -202,6 +208,7 @@
"config_updater_satellite_country_codes";
private static final String CONFIG_UPDATER_SATELLITE_IS_ALLOW_ACCESS_CONTROL_KEY =
"config_updater_satellite_is_allow_access_control";
+
private SharedPreferences mSharedPreferences;
private final ConfigUpdaterMetricsStats mConfigUpdaterMetricsStats;
@@ -219,6 +226,10 @@
private boolean mLatestSatelliteCommunicationAllowed;
private long mLatestSatelliteCommunicationAllowedSetTime;
+ private long mLocationQueryStartTimeMillis;
+ private long mOnDeviceLookupStartTimeMillis;
+ private long mTotalCheckingStartTimeMillis;
+
/**
* Create a SatelliteAccessController instance.
*
@@ -243,6 +254,8 @@
mSatelliteOnDeviceAccessController = satelliteOnDeviceAccessController;
mCountryDetector = TelephonyCountryDetector.getInstance(context);
mSatelliteController = SatelliteController.getInstance();
+ mControllerMetricsStats = ControllerMetricsStats.getInstance();
+ mAccessControllerMetricsStats = AccessControllerMetricsStats.getInstance();
initSharedPreferences(context);
loadOverlayConfigs(context);
// loadConfigUpdaterConfigs has to be called after loadOverlayConfigs
@@ -591,7 +604,7 @@
value).apply();
return true;
} catch (Exception ex) {
- loge("updateSharedPreferencesAllowRegion : " + ex);
+ loge("updateSharedPreferencesIsAllowAccessControl error: " + ex);
return false;
}
}
@@ -697,6 +710,8 @@
mSatelliteS2CellFile = null;
}
mLocationFreshDurationNanos = getSatelliteLocationFreshDurationFromOverlayConfig(context);
+ mAccessControllerMetricsStats.setConfigDataSource(
+ SatelliteConstants.CONFIG_DATA_SOURCE_DEVICE_CONFIG);
}
private void loadConfigUpdaterConfigs() {
@@ -727,6 +742,8 @@
mSatelliteS2CellFile = s2CellFile;
mSatelliteCountryCodes = countryCodes.stream().collect(Collectors.toList());
mIsSatelliteAllowAccessControl = isSatelliteAllowAccessControl;
+ mAccessControllerMetricsStats.setConfigDataSource(
+ SatelliteConstants.CONFIG_DATA_SOURCE_CONFIG_UPDATER);
}
private long getLocationFreshDurationNanos() {
@@ -776,6 +793,7 @@
+ "processed");
return;
}
+ mTotalCheckingStartTimeMillis = System.currentTimeMillis();
mSatelliteController.requestIsSatelliteSupported(
requestArguments.first, mInternalSatelliteSupportedResultReceiver);
}
@@ -860,6 +878,7 @@
}
mSatelliteAllowResultReceivers.clear();
}
+ reportMetrics(resultCode, allowed);
}
/**
@@ -875,6 +894,10 @@
boolean allowed = isSatelliteAccessAllowedForLocation(networkCountryIsoList);
Bundle bundle = new Bundle();
bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, allowed);
+ mAccessControllerMetricsStats
+ .setAccessControlType(
+ SatelliteConstants.ACCESS_CONTROL_TYPE_NETWORK_COUNTRY_CODE)
+ .setCountryCodes(networkCountryIsoList);
sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle, allowed);
} else {
if (shouldUseOnDeviceAccessController()) {
@@ -960,6 +983,8 @@
countryCodeList = networkCountryCodeInfoMap.keySet().stream().toList();
}
logd("Use cached country codes=" + String.join(", ", countryCodeList));
+ mAccessControllerMetricsStats.setAccessControlType(
+ SatelliteConstants.ACCESS_CONTROL_TYPE_CACHED_COUNTRY_CODE);
boolean allowed = isSatelliteAccessAllowedForLocation(countryCodeList);
Bundle bundle = new Bundle();
@@ -973,14 +998,19 @@
* from location service.
*/
private void checkSatelliteAccessRestrictionUsingOnDeviceData() {
+ mOnDeviceLookupStartTimeMillis = System.currentTimeMillis();
synchronized (mLock) {
logd("Use on-device data");
if (mFreshLastKnownLocation != null) {
+ mAccessControllerMetricsStats.setAccessControlType(
+ SatelliteConstants.ACCESS_CONTROL_TYPE_LAST_KNOWN_LOCATION);
checkSatelliteAccessRestrictionForLocation(mFreshLastKnownLocation);
mFreshLastKnownLocation = null;
} else {
Location freshLastKnownLocation = getFreshLastKnownLocation();
if (freshLastKnownLocation != null) {
+ mAccessControllerMetricsStats.setAccessControlType(
+ SatelliteConstants.ACCESS_CONTROL_TYPE_LAST_KNOWN_LOCATION);
checkSatelliteAccessRestrictionForLocation(freshLastKnownLocation);
} else {
queryCurrentLocation();
@@ -996,6 +1026,7 @@
return;
}
mLocationRequestCancellationSignal = new CancellationSignal();
+ mLocationQueryStartTimeMillis = System.currentTimeMillis();
mLocationManager.getCurrentLocation(LocationManager.GPS_PROVIDER,
new LocationRequest.Builder(0)
.setQuality(LocationRequest.QUALITY_HIGH_ACCURACY)
@@ -1012,6 +1043,7 @@
synchronized (mLock) {
stopWaitForCurrentLocationTimer();
mLocationRequestCancellationSignal = null;
+ mAccessControllerMetricsStats.setLocationQueryTime(mLocationQueryStartTimeMillis);
Bundle bundle = new Bundle();
if (location != null) {
if (location.isMock() && !isMockModemAllowed()) {
@@ -1020,6 +1052,8 @@
sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle, false);
return;
}
+ mAccessControllerMetricsStats.setAccessControlType(
+ SatelliteConstants.ACCESS_CONTROL_TYPE_CURRENT_LOCATION);
checkSatelliteAccessRestrictionForLocation(location);
} else {
logd("current location is not available");
@@ -1060,6 +1094,7 @@
.isSatCommunicationAllowedAtLocation(locationToken);
updateCachedAccessRestrictionMap(locationToken, satelliteAllowed);
}
+ mAccessControllerMetricsStats.setOnDeviceLookupTime(mOnDeviceLookupStartTimeMillis);
Bundle bundle = new Bundle();
bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, satelliteAllowed);
sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
@@ -1521,6 +1556,25 @@
});
}
+ private void reportMetrics(int resultCode, boolean allowed) {
+ if (resultCode == SATELLITE_RESULT_SUCCESS) {
+ mControllerMetricsStats.reportAllowedSatelliteAccessCount(allowed);
+ } else {
+ mControllerMetricsStats.reportFailedSatelliteAccessCheckCount();
+ }
+
+ mAccessControllerMetricsStats
+ .setLocationQueryTime(mLocationQueryStartTimeMillis)
+ .setTotalCheckingTime(mTotalCheckingStartTimeMillis)
+ .setIsAllowed(allowed)
+ .setIsEmergency(isInEmergency())
+ .setResult(resultCode)
+ .reportAccessControllerMetrics();
+ mLocationQueryStartTimeMillis = 0;
+ mOnDeviceLookupStartTimeMillis = 0;
+ mTotalCheckingStartTimeMillis = 0;
+ }
+
private static void logd(@NonNull String log) {
Rlog.d(TAG, log);
}