Using current location to check satellite allowed state before enabling satellite
Bug: 364310437
Flag: com.android.internal.telephony.flags.oem_enabled_satellite_flag
Test: atest SatelliteAccessControllerTest (passed)
Test: Manually verified (b/364310437#comment2)
- if the location is used when `requestEnabled` is invoked
- if the cached value is used when `requestIsCommunicationAllowedForCurrentLocation` is invoked.
Test: Verified with testSatelliteApp (b/364310437#comment3)
- if the enableSatellite is invoked the enablingSatellite is true
- if the requestIsSatelliteCommunicationAllowedForCurrentLocation is invoked the enablingSatellite is false
Change-Id: I55d81a4e818a4038b030b6d11471a142cee75c4c
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e48a57a..e77d652 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -13164,7 +13164,7 @@
}
};
mSatelliteAccessController.requestIsCommunicationAllowedForCurrentLocation(
- resultReceiver);
+ resultReceiver, true);
} else {
// No need to check if satellite is allowed at current location when disabling satellite
mSatelliteController.requestSatelliteEnabled(
@@ -13482,7 +13482,7 @@
public void requestIsCommunicationAllowedForCurrentLocation(int subId,
@NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestIsCommunicationAllowedForCurrentLocation");
- mSatelliteAccessController.requestIsCommunicationAllowedForCurrentLocation(result);
+ mSatelliteAccessController.requestIsCommunicationAllowedForCurrentLocation(result, false);
}
/**
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
index de3811a..7b244a1 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
@@ -286,6 +286,10 @@
}
};
+ private final Object mIsAllowedCheckBeforeEnablingSatelliteLock = new Object();
+ @GuardedBy("mIsAllowedCheckBeforeEnablingSatelliteLock")
+ private boolean mIsAllowedCheckBeforeEnablingSatellite;
+
/**
* Create a SatelliteAccessController instance.
*
@@ -361,7 +365,7 @@
protected void onReceiveResult(int resultCode, Bundle resultData) {
// do nothing
}
- });
+ }, false);
}
}
};
@@ -379,7 +383,7 @@
protected void onReceiveResult(int resultCode, Bundle resultData) {
// do nothing
}
- });
+ }, false);
}
}
@@ -462,12 +466,17 @@
* if the request failed.
*/
public void requestIsCommunicationAllowedForCurrentLocation(
- @NonNull ResultReceiver result) {
+ @NonNull ResultReceiver result, boolean enablingSatellite) {
if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
plogd("oemEnabledSatelliteFlag is disabled");
result.send(SATELLITE_RESULT_REQUEST_NOT_SUPPORTED, null);
return;
}
+ plogd("requestIsCommunicationAllowedForCurrentLocation : "
+ + "enablingSatellite is " + enablingSatellite);
+ synchronized (mIsAllowedCheckBeforeEnablingSatelliteLock) {
+ mIsAllowedCheckBeforeEnablingSatellite = enablingSatellite;
+ }
mAccessControllerMetricsStats.setTriggeringEvent(TRIGGERING_EVENT_EXTERNAL_REQUEST);
sendRequestAsync(CMD_IS_SATELLITE_COMMUNICATION_ALLOWED,
new Pair<>(mSatelliteController.getSatellitePhone().getSubId(), result));
@@ -1054,6 +1063,9 @@
if (!shouldRetryValidatingPossibleChangeInAllowedRegion(resultCode)) {
setIsSatelliteAllowedRegionPossiblyChanged(false);
}
+ synchronized (mIsAllowedCheckBeforeEnablingSatelliteLock) {
+ mIsAllowedCheckBeforeEnablingSatellite = false;
+ }
reportMetrics(resultCode, allowed);
}
@@ -1130,7 +1142,7 @@
logd("handleSatelliteAllowedRegionPossiblyChanged");
setIsSatelliteAllowedRegionPossiblyChanged(true);
requestIsCommunicationAllowedForCurrentLocation(
- mHandlerForSatelliteAllowedResult);
+ mHandlerForSatelliteAllowedResult, false);
int triggeringEvent = TRIGGERING_EVENT_UNKNOWN;
if (handleEvent == EVENT_LOCATION_SETTINGS_ENABLED) {
triggeringEvent = TRIGGERING_EVENT_LOCATION_SETTINGS_ENABLED;
@@ -1181,28 +1193,32 @@
/**
* Telephony-internal logic to verify if satellite access is restricted from the location query.
*/
- private void checkSatelliteAccessRestrictionUsingGPS() {
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+ public void checkSatelliteAccessRestrictionUsingGPS() {
logv("checkSatelliteAccessRestrictionUsingGPS:");
- if (isInEmergency()) {
- executeLocationQuery();
- } else {
- if (mLocationManager.isLocationEnabled()) {
- plogd("location query is allowed");
- if (allowLocationQueryForSatelliteAllowedCheck()) {
- executeLocationQuery();
- } else {
- Bundle bundle = new Bundle();
- bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED,
- mLatestSatelliteCommunicationAllowed);
- sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
- mLatestSatelliteCommunicationAllowed);
- }
+ synchronized (mIsAllowedCheckBeforeEnablingSatelliteLock) {
+ if (isInEmergency()) {
+ executeLocationQuery();
} else {
- plogv("location query is not allowed");
- Bundle bundle = new Bundle();
- bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
- sendSatelliteAllowResultToReceivers(
- SATELLITE_RESULT_LOCATION_DISABLED, bundle, false);
+ if (mLocationManager.isLocationEnabled()) {
+ plogd("location query is allowed");
+ if (allowLocationQueryForSatelliteAllowedCheck()
+ || mIsAllowedCheckBeforeEnablingSatellite) {
+ executeLocationQuery();
+ } else {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED,
+ mLatestSatelliteCommunicationAllowed);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
+ mLatestSatelliteCommunicationAllowed);
+ }
+ } else {
+ plogv("location query is not allowed");
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
+ sendSatelliteAllowResultToReceivers(
+ SATELLITE_RESULT_LOCATION_DISABLED, bundle, false);
+ }
}
}
}
@@ -1298,8 +1314,7 @@
}
}
- @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
- protected void queryCurrentLocation() {
+ private void queryCurrentLocation() {
synchronized (mLock) {
if (mLocationRequestCancellationSignal != null) {
plogd("queryCurrentLocation : "
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
index 9bb8d3f..151f6ca 100644
--- a/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
+++ b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
@@ -21,6 +21,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
+ android:paddingTop="100dp"
android:paddingLeft="4dp">
<LinearLayout
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml b/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml
index 5ba7946..8fdc01f 100644
--- a/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml
+++ b/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml
@@ -20,6 +20,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
+ android:paddingTop="100dp"
android:paddingLeft="4dp">
<LinearLayout
diff --git a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
index 9e5d9e7..55f72fc 100644
--- a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
+++ b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
@@ -463,7 +463,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_US));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(0)).containsKey(any());
assertFalse(mQueriedSatelliteAllowed);
@@ -474,7 +474,7 @@
when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(List.of());
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -491,7 +491,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODES));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -503,7 +503,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_US));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -515,7 +515,7 @@
List.of(TEST_SATELLITE_COUNTRY_CODE_US, TEST_SATELLITE_COUNTRY_CODE_KR));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -526,7 +526,7 @@
when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(List.of());
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -538,7 +538,7 @@
List.of(TEST_SATELLITE_COUNTRY_CODE_KR, TEST_SATELLITE_COUNTRY_CODE_JP));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(0)).containsKey(any());
assertFalse(mQueriedSatelliteAllowed);
@@ -550,7 +550,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_KR));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(0)).containsKey(any());
assertFalse(mQueriedSatelliteAllowed);
@@ -572,7 +572,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_US));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -589,7 +589,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODES_EMPTY));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -601,7 +601,7 @@
List.of(TEST_SATELLITE_COUNTRY_CODE_US, TEST_SATELLITE_COUNTRY_CODE_JP));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -613,7 +613,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_JP));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(1)).containsKey(any());
assertTrue(mQueriedSatelliteAllowed);
@@ -625,7 +625,7 @@
.thenReturn(List.of(TEST_SATELLITE_COUNTRY_CODE_US));
mSatelliteAccessControllerUT.loadOverlayConfigs(mMockContext);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockCachedAccessRestrictionMap, times(0)).containsKey(any());
assertFalse(mQueriedSatelliteAllowed);
@@ -636,7 +636,7 @@
// OEM-enabled satellite is not supported
when(mMockFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(false);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
mSatelliteAllowedSemaphore, 1));
@@ -649,7 +649,7 @@
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_SUCCESS);
clearAllInvocations();
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
mSatelliteAllowedSemaphore, 1));
@@ -660,7 +660,7 @@
setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_MODEM_ERROR);
clearAllInvocations();
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
mSatelliteAllowedSemaphore, 1));
@@ -677,7 +677,7 @@
when(mMockLocation0.getElapsedRealtimeNanos()).thenReturn(2L);
when(mMockLocation1.getElapsedRealtimeNanos()).thenReturn(0L);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertTrue(
mSatelliteAccessControllerUT.isKeepOnDeviceAccessControllerResourcesTimerStarted());
@@ -715,7 +715,7 @@
when(mMockLocation0.getElapsedRealtimeNanos()).thenReturn(0L);
when(mMockLocation1.getElapsedRealtimeNanos()).thenReturn(0L);
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertFalse(
mSatelliteAccessControllerUT.isKeepOnDeviceAccessControllerResourcesTimerStarted());
@@ -746,7 +746,7 @@
when(mMockCountryDetector.getCachedLocationCountryIsoInfo()).thenReturn(new Pair<>("", 0L));
when(mMockCountryDetector.getCachedNetworkCountryIsoInfo()).thenReturn(new HashMap<>());
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
assertFalse(
mSatelliteAccessControllerUT.isKeepOnDeviceAccessControllerResourcesTimerStarted());
@@ -779,7 +779,7 @@
when(mMockLocation1.getElapsedRealtimeNanos()).thenReturn(0L);
doReturn(false).when(mMockLocationManager).isLocationEnabled();
mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- mSatelliteAllowedReceiver);
+ mSatelliteAllowedReceiver, false);
mTestableLooper.processAllMessages();
verify(mMockLocationManager, never()).getCurrentLocation(anyString(),
any(LocationRequest.class), any(CancellationSignal.class), any(Executor.class),
@@ -1057,7 +1057,8 @@
// verify if the location manager get FUSED provider and ignore location settings
doReturn(true).when(mMockTelecomManager).isInEmergencyCall();
mSatelliteAccessControllerUT.setLocationRequestCancellationSignalAsNull();
- mSatelliteAccessControllerUT.queryCurrentLocation();
+ mSatelliteAccessControllerUT.elapsedRealtimeNanos = TEST_LOCATION_FRESH_DURATION_NANOS + 1;
+ mSatelliteAccessControllerUT.checkSatelliteAccessRestrictionUsingGPS();
verify(mMockLocationManager, times(1))
.getCurrentLocation(mLocationProviderStringCaptor.capture(),
@@ -1072,8 +1073,9 @@
doReturn(false).when(mMockPhone).isInEcm();
doReturn(false).when(mMockPhone2).isInEcm();
doReturn(false).when(mMockSatelliteController).isInEmergencyMode();
+ doReturn(true).when(mMockLocationManager).isLocationEnabled();
mSatelliteAccessControllerUT.setLocationRequestCancellationSignalAsNull();
- mSatelliteAccessControllerUT.queryCurrentLocation();
+ mSatelliteAccessControllerUT.checkSatelliteAccessRestrictionUsingGPS();
verify(mMockLocationManager, times(1))
.getCurrentLocation(mLocationProviderStringCaptor.capture(),
@@ -1159,6 +1161,43 @@
mResultDataBundleCaptor.getValue().getBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED));
}
+ @Test
+ public void testRequestIsCommunicationAllowedForCurrentLocationWithEnablingSatellite() {
+ // Set non-emergency case
+ when(mMockFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true);
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
+ setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
+ when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(EMPTY_STRING_LIST);
+ doReturn(false).when(mMockTelecomManager).isInEmergencyCall();
+ doReturn(false).when(mMockPhone).isInEcm();
+ doReturn(false).when(mMockPhone2).isInEcm();
+ doReturn(false).when(mMockSatelliteController).isInEmergencyMode();
+ doReturn(true).when(mMockLocationManager).isLocationEnabled();
+ mSatelliteAccessControllerUT.setLocationRequestCancellationSignalAsNull();
+ mSatelliteAccessControllerUT.elapsedRealtimeNanos = TEST_LOCATION_FRESH_DURATION_NANOS + 1;
+
+ // Invoking requestIsCommunicationAllowedForCurrentLocation(resultReceiver, "false");
+ // verify that mLocationManager.isLocationEnabled() is invoked
+ mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
+ mSatelliteAllowedReceiver, false);
+ mTestableLooper.processAllMessages();
+ verify(mMockLocationManager, times(1)).isLocationEnabled();
+ verify(mMockLocationManager, times(1)).getCurrentLocation(anyString(),
+ any(LocationRequest.class), any(CancellationSignal.class), any(Executor.class),
+ any(Consumer.class));
+
+ // Invoking requestIsCommunicationAllowedForCurrentLocation(resultReceiver, "true");
+ // verify that mLocationManager.isLocationEnabled() is not invoked
+ clearInvocations(mMockLocationManager);
+ mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
+ mSatelliteAllowedReceiver, true);
+ mTestableLooper.processAllMessages();
+ verify(mMockLocationManager, times(1)).isLocationEnabled();
+ verify(mMockLocationManager, never()).getCurrentLocation(anyString(),
+ any(LocationRequest.class), any(CancellationSignal.class), any(Executor.class),
+ any(Consumer.class));
+ }
+
private void sendSatelliteCommunicationAllowedEvent() {
Pair<Integer, ResultReceiver> requestPair =
new Pair<>(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,