Call satellite APIs from satellite service if enabled
Test: atest SatelliteManagerTest
Bug: 261131816
Change-Id: I5805d0fef7ce5cebb042192b310cb173690d82dc
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index cf32069..de6c625 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -211,6 +211,7 @@
import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
import com.android.internal.telephony.metrics.RcsStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
+import com.android.internal.telephony.satellite.SatelliteServiceController;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
@@ -425,23 +426,23 @@
private static PhoneInterfaceManager sInstance;
private static List<String> sThermalMitigationAllowlistedPackages = new ArrayList<>();
- private PhoneGlobals mApp;
- private CallManager mCM;
- private ImsResolver mImsResolver;
- private UserManager mUserManager;
- private AppOpsManager mAppOps;
- private PackageManager mPm;
- private MainThreadHandler mMainThreadHandler;
+ private final PhoneGlobals mApp;
+ private final CallManager mCM;
+ private final ImsResolver mImsResolver;
+ private final SatelliteServiceController mSatelliteServiceController;
+ private final UserManager mUserManager;
+ private final AppOpsManager mAppOps;
+ private final MainThreadHandler mMainThreadHandler;
private final SubscriptionController mSubscriptionController;
- private SharedPreferences mTelephonySharedPreferences;
- private PhoneConfigurationManager mPhoneConfigurationManager;
+ private final SharedPreferences mTelephonySharedPreferences;
+ private final PhoneConfigurationManager mPhoneConfigurationManager;
private final RadioInterfaceCapabilityController mRadioInterfaceCapabilities;
/** User Activity */
- private AtomicBoolean mNotifyUserActivity;
+ private final AtomicBoolean mNotifyUserActivity;
private static final int USER_ACTIVITY_NOTIFICATION_DELAY = 200;
- private Set<Integer> mCarrierPrivilegeTestOverrideSubIds = new ArraySet<>();
+ private final Set<Integer> mCarrierPrivilegeTestOverrideSubIds = new ArraySet<>();
/**
* Map key: subId, value: callback to get error code of the provision request.
@@ -462,6 +463,10 @@
private Boolean mIsSatelliteSupported = null;
private final Object mIsSatelliteSupportedLock = new Object();
private final ResultReceiver mSatelliteSupportedReceiver;
+ /**
+ * {@code true} to use the vendor satellite service and {@code false} to use the HAL.
+ */
+ private final boolean mIsSatelliteServiceSupported = false;
/**
* Map key: subId, value: SatelliteStateChangeHandler to notify registrants.
@@ -2548,6 +2553,10 @@
request = (MainThreadRequest) msg.obj;
onCompleted =
obtainMessage(EVENT_START_SATELLITE_POSITION_UPDATES_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.startSendingSatellitePointingInfo(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.startSatellitePositionUpdates(onCompleted);
@@ -2571,6 +2580,10 @@
request = (MainThreadRequest) msg.obj;
onCompleted =
obtainMessage(EVENT_STOP_SATELLITE_POSITION_UPDATES_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.stopSendingSatellitePointingInfo(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.stopSatellitePositionUpdates(onCompleted);
@@ -2592,8 +2605,13 @@
case CMD_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG_DONE,
- request);
+ onCompleted =
+ obtainMessage(EVENT_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .requestMaxCharactersPerMOTextMessage(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.getMaxCharactersPerSatelliteTextMessage(onCompleted);
@@ -2623,12 +2641,24 @@
case CMD_PROVISION_SATELLITE_SERVICE: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_PROVISION_SATELLITE_SERVICE_DONE, request);
- Phone phone = getPhoneFromRequest(request);
ProvisionSatelliteServiceArgument argument =
(ProvisionSatelliteServiceArgument) request.argument;
+ if (mSatelliteProvisionCallbacks.containsKey(argument.subId)) {
+ argument.callback.accept(
+ SatelliteManager.SATELLITE_SERVICE_PROVISION_IN_PROGRESS);
+ notifyRequester(request);
+ break;
+ }
+ mSatelliteProvisionCallbacks.put(argument.subId, argument.callback);
+ onCompleted = obtainMessage(EVENT_PROVISION_SATELLITE_SERVICE_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .provisionSatelliteService(argument.token, onCompleted);
+ break;
+ }
+ Phone phone = getPhoneFromRequest(request);
if (phone != null) {
- handleCmdProvisionSatelliteService(argument, phone, onCompleted);
+ phone.provisionSatelliteService(onCompleted, argument.token);
} else {
loge("provisionSatelliteService: No phone object");
argument.callback.accept(
@@ -2650,19 +2680,23 @@
case CMD_DEPROVISION_SATELLITE_SERVICE: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_DEPROVISION_SATELLITE_SERVICE_DONE, request);
- Phone phone = getPhoneFromRequest(request);
ProvisionSatelliteServiceArgument argument =
(ProvisionSatelliteServiceArgument) request.argument;
+ onCompleted = obtainMessage(EVENT_DEPROVISION_SATELLITE_SERVICE_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .deprovisionSatelliteService(argument.token, onCompleted);
+ break;
+ }
+ Phone phone = getPhoneFromRequest(request);
if (phone != null) {
- handleCmdDeprovisionSatelliteService(argument, phone, onCompleted);
+ phone.deprovisionSatelliteService(onCompleted, argument.token);
} else {
loge("deprovisionSatelliteService: No phone object");
if (argument.callback != null) {
argument.callback.accept(
SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
}
- notifyRequester(request);
}
break;
}
@@ -2673,23 +2707,25 @@
int errorCode = getSatelliteError(ar, "deprovisionSatelliteService", false);
handleEventDeprovisionSatelliteServiceDone(
(ProvisionSatelliteServiceArgument) request.argument, errorCode);
- notifyRequester(request);
break;
}
case CMD_SET_SATELLITE_ENABLED: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_SET_SATELLITE_ENABLED_DONE, request);
Pair<Boolean, Consumer<Integer>> argument =
(Pair<Boolean, Consumer<Integer>>) request.argument;
+ onCompleted = obtainMessage(EVENT_SET_SATELLITE_ENABLED_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .requestSatelliteEnabled(argument.first, onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
- boolean enable = argument.first.booleanValue();
- phone.setSatellitePower(onCompleted, enable);
+ phone.setSatellitePower(onCompleted, argument.first);
} else {
- loge("setSatelliteEnabled: No phone object");
+ loge("requestSatelliteEnabled: No phone object");
argument.second.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- notifyRequester(request);
}
break;
}
@@ -2707,6 +2743,10 @@
case CMD_IS_SATELLITE_ENABLED: {
request = (MainThreadRequest) msg.obj;
onCompleted = obtainMessage(EVENT_IS_SATELLITE_ENABLED_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.requestIsSatelliteEnabled(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.isSatellitePowerOn(onCompleted);
@@ -2735,6 +2775,10 @@
case CMD_IS_SATELLITE_SUPPORTED: {
request = (MainThreadRequest) msg.obj;
onCompleted = obtainMessage(EVENT_IS_SATELLITE_SUPPORTED_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.requestIsSatelliteSupported(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.isSatelliteSupported(onCompleted);
@@ -2770,6 +2814,10 @@
case CMD_GET_SATELLITE_CAPABILITIES: {
request = (MainThreadRequest) msg.obj;
onCompleted = obtainMessage(EVENT_GET_SATELLITE_CAPABILITIES_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.requestSatelliteCapabilities(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.getSatelliteCapabilities(onCompleted);
@@ -2798,15 +2846,19 @@
case CMD_POLL_PENDING_SATELLITE_DATAGRAMS: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE,
- request);
+ onCompleted =
+ obtainMessage(EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController.pollPendingSatelliteDatagrams(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.pollPendingSatelliteDatagrams(onCompleted);
} else {
loge("pollPendingSatelliteDatagrams: No phone object");
- ((Consumer<Integer>) request.argument)
- .accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
+ ((Consumer<Integer>) request.argument).accept(
+ SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
}
break;
}
@@ -2821,17 +2873,22 @@
case CMD_SEND_SATELLITE_DATAGRAM: {
request = (MainThreadRequest) msg.obj;
- onCompleted =
- obtainMessage(EVENT_SEND_SATELLITE_DATAGRAM_DONE, request);
- Phone phone = getPhoneFromRequest(request);
SendSatelliteDatagramArgument argument =
(SendSatelliteDatagramArgument) request.argument;
+ onCompleted = obtainMessage(EVENT_SEND_SATELLITE_DATAGRAM_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ // TODO: set isEmergency properly
+ mSatelliteServiceController
+ .sendSatelliteDatagram(argument.datagram, false, onCompleted);
+ break;
+ }
+ Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.sendSatelliteDatagram(onCompleted, argument.datagram);
} else {
loge("sendSatelliteDatagram: No phone object");
- argument.callback
- .accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
+ argument.callback.accept(
+ SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
}
break;
}
@@ -2839,8 +2896,7 @@
case EVENT_SEND_SATELLITE_DATAGRAM_DONE: {
ar = (AsyncResult) msg.obj;
request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "sendSatelliteDatagram",
- false);
+ int error = getSatelliteError(ar, "sendSatelliteDatagram", false);
SendSatelliteDatagramArgument argument =
(SendSatelliteDatagramArgument) request.argument;
argument.callback.accept(error);
@@ -2849,8 +2905,14 @@
case CMD_IS_SATELLITE_COMMUNICATION_ALLOWED: {
request = (MainThreadRequest) msg.obj;
- onCompleted = obtainMessage(EVENT_IS_SATELLITE_COMMUNICATION_ALLOWED_DONE,
- request);
+ onCompleted =
+ obtainMessage(EVENT_IS_SATELLITE_COMMUNICATION_ALLOWED_DONE, request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .requestIsSatelliteCommunicationAllowedForCurrentLocation(
+ onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.isSatelliteCommunicationAllowedForCurrentLocation(onCompleted);
@@ -2885,6 +2947,11 @@
request = (MainThreadRequest) msg.obj;
onCompleted = obtainMessage(EVENT_GET_TIME_SATELLITE_NEXT_VISIBLE_DONE,
request);
+ if (mIsSatelliteServiceSupported) {
+ mSatelliteServiceController
+ .requestTimeForNextSatelliteVisibility(onCompleted);
+ break;
+ }
Phone phone = getPhoneFromRequest(request);
if (phone != null) {
phone.requestTimeForNextSatelliteVisibility(onCompleted);
@@ -3108,17 +3175,16 @@
mApp = app;
mCM = PhoneGlobals.getInstance().mCM;
mImsResolver = ImsResolver.getInstance();
+ mSatelliteServiceController = SatelliteServiceController.getInstance();
mUserManager = (UserManager) app.getSystemService(Context.USER_SERVICE);
mAppOps = (AppOpsManager)app.getSystemService(Context.APP_OPS_SERVICE);
- mPm = app.getSystemService(PackageManager.class);
mMainThreadHandler = new MainThreadHandler();
if (!PhoneFactory.isSubscriptionManagerServiceEnabled()) {
mSubscriptionController = SubscriptionController.getInstance();
} else {
mSubscriptionController = null;
}
- mTelephonySharedPreferences =
- PreferenceManager.getDefaultSharedPreferences(mApp);
+ mTelephonySharedPreferences = PreferenceManager.getDefaultSharedPreferences(mApp);
mNetworkScanRequestTracker = new NetworkScanRequestTracker();
mPhoneConfigurationManager = PhoneConfigurationManager.getInstance();
mRadioInterfaceCapabilities = RadioInterfaceCapabilityController.getInstance();
@@ -4486,11 +4552,11 @@
}
private static void logv(String msg) {
- Log.v(LOG_TAG, "[PhoneIntfMgr] " + msg);
+ Log.v(LOG_TAG, msg);
}
private static void loge(String msg) {
- Log.e(LOG_TAG, "[PhoneIntfMgr] " + msg);
+ Log.e(LOG_TAG, msg);
}
@Override
@@ -13441,16 +13507,6 @@
sendRequestAsync(CMD_GET_TIME_SATELLITE_NEXT_VISIBLE, result, phone, null);
}
- private void handleCmdProvisionSatelliteService(@NonNull ProvisionSatelliteServiceArgument arg,
- @NonNull Phone phone, Message onCompleted) {
- if (!mSatelliteProvisionCallbacks.containsKey(arg.subId)) {
- mSatelliteProvisionCallbacks.put(arg.subId, arg.callback);
- phone.provisionSatelliteService(onCompleted, arg.token);
- } else {
- arg.callback.accept(SatelliteManager.SATELLITE_SERVICE_PROVISION_IN_PROGRESS);
- }
- }
-
private void handleEventProvisionSatelliteServiceDone(
@NonNull ProvisionSatelliteServiceArgument arg,
@SatelliteManager.SatelliteError int result) {
@@ -13477,23 +13533,6 @@
registerForSatelliteProvisionStateChangedInternal(arg.subId, null);
}
- private void handleCmdDeprovisionSatelliteService(
- @NonNull ProvisionSatelliteServiceArgument arg, @NonNull Phone phone,
- @NonNull Message onCompleted) {
- if (arg == null) {
- loge("handleCmdDeprovisionSatelliteService: arg is null");
- return;
- }
- if (phone == null) {
- loge("handleCmdDeprovisionSatelliteService: phone is null");
- if (arg.callback != null) {
- arg.callback.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- }
- return;
- }
- phone.deprovisionSatelliteService(onCompleted, arg.token);
- }
-
private void handleEventDeprovisionSatelliteServiceDone(
@NonNull ProvisionSatelliteServiceArgument arg,
@SatelliteManager.SatelliteError int result) {
@@ -13632,10 +13671,12 @@
} else {
errorCode = SatelliteManager.SATELLITE_ERROR;
if (ar.exception instanceof CommandException) {
- CommandException.Error error =
- ((CommandException) (ar.exception)).getCommandError();
+ CommandException.Error error = ((CommandException) ar.exception).getCommandError();
errorCode = RILUtils.convertToSatelliteError(error);
loge(caller + " CommandException: " + ar.exception);
+ } else if (ar.exception instanceof SatelliteManager.SatelliteException) {
+ errorCode = ((SatelliteManager.SatelliteException) ar.exception).getErrorCode();
+ loge(caller + " SatelliteException: " + ar.exception);
} else {
loge(caller + " unknown exception: " + ar.exception);
}