Updated SatelliteModemInterface.
The following changes are made in this CL:
- SatelliteServiceController name is changed to SatelliteModemInterface
- The decision to use satellite service or phone object is moved from
PhoneInterfaceManager to SatelliteModemInterface.
Bug: 269637555
Test: atest SatelliteManagerTest
Change-Id: I9dd0e557af7e0c879a405a7c9751d62483049a60
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 821b094..b49ff4e 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -216,7 +216,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.satellite.SatelliteController;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
@@ -392,32 +392,7 @@
private static final int EVENT_IS_VONR_ENABLED_DONE = 116;
private static final int CMD_PURCHASE_PREMIUM_CAPABILITY = 117;
private static final int EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE = 118;
- private static final int CMD_START_SATELLITE_POSITION_UPDATES = 119;
- private static final int EVENT_START_SATELLITE_POSITION_UPDATES_DONE = 120;
- private static final int CMD_STOP_SATELLITE_POSITION_UPDATES = 121;
- private static final int EVENT_STOP_SATELLITE_POSITION_UPDATES_DONE = 122;
- private static final int CMD_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG = 123;
- private static final int EVENT_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG_DONE = 124;
- private static final int CMD_PROVISION_SATELLITE_SERVICE = 125;
- private static final int EVENT_PROVISION_SATELLITE_SERVICE_DONE = 126;
- private static final int CMD_DEPROVISION_SATELLITE_SERVICE = 127;
- private static final int EVENT_DEPROVISION_SATELLITE_SERVICE_DONE = 128;
- private static final int CMD_SET_SATELLITE_ENABLED = 129;
- private static final int EVENT_SET_SATELLITE_ENABLED_DONE = 130;
- private static final int CMD_IS_SATELLITE_ENABLED = 131;
- private static final int EVENT_IS_SATELLITE_ENABLED_DONE = 132;
- private static final int CMD_IS_SATELLITE_SUPPORTED = 133;
- private static final int EVENT_IS_SATELLITE_SUPPORTED_DONE = 134;
- private static final int CMD_GET_SATELLITE_CAPABILITIES = 135;
- private static final int EVENT_GET_SATELLITE_CAPABILITIES_DONE = 136;
- private static final int CMD_POLL_PENDING_SATELLITE_DATAGRAMS = 137;
- private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 138;
- private static final int CMD_SEND_SATELLITE_DATAGRAM = 139;
- private static final int EVENT_SEND_SATELLITE_DATAGRAM_DONE = 140;
- private static final int CMD_IS_SATELLITE_COMMUNICATION_ALLOWED = 141;
- private static final int EVENT_IS_SATELLITE_COMMUNICATION_ALLOWED_DONE = 142;
- private static final int CMD_GET_TIME_SATELLITE_NEXT_VISIBLE = 143;
- private static final int EVENT_GET_TIME_SATELLITE_NEXT_VISIBLE_DONE = 144;
+
// Parameters of select command.
private static final int SELECT_COMMAND = 0xA4;
private static final int SELECT_P1 = 0x04;
@@ -434,7 +409,8 @@
private final PhoneGlobals mApp;
private final CallManager mCM;
private final ImsResolver mImsResolver;
- private final SatelliteServiceController mSatelliteServiceController;
+
+ private final SatelliteController mSatelliteController;
private final UserManager mUserManager;
private final AppOpsManager mAppOps;
private final MainThreadHandler mMainThreadHandler;
@@ -449,42 +425,6 @@
private final Set<Integer> mCarrierPrivilegeTestOverrideSubIds = new ArraySet<>();
- /**
- * Map key: subId, value: callback to get error code of the provision request.
- */
- private final ConcurrentHashMap<Integer, Consumer<Integer>> mSatelliteProvisionCallbacks =
- new ConcurrentHashMap<>();
- /**
- * Map key: subId, value: SatellitePositionUpdateHandler to notify registrants.
- */
- private final ConcurrentHashMap<Integer, SatellitePositionUpdateHandler>
- mSatellitePositionUpdateHandlers = new ConcurrentHashMap<>();
- /**
- * Map key: subId, value: SatelliteProvisionStateChangedHandler to notify registrants.
- */
- private final ConcurrentHashMap<Integer, SatelliteProvisionStateChangedHandler>
- mSatelliteProvisionStateChangedHandlers = new ConcurrentHashMap<>();
-
- 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.
- */
- private ConcurrentHashMap<Integer, SatelliteStateListenerHandler>
- mSatelliteStateListenerHandlers = new ConcurrentHashMap<>();
-
- /**
- * Map key: subId, value: SatelliteDatagramListenerHandler to notify registrants.
- */
- private ConcurrentHashMap<Integer, SatelliteDatagramListenerHandler>
- mSatelliteDatagramListenerHandlers = new ConcurrentHashMap<>();
-
private static final String PREF_CARRIERS_ALPHATAG_PREFIX = "carrier_alphtag_";
private static final String PREF_CARRIERS_NUMBER_PREFIX = "carrier_number_";
private static final String PREF_CARRIERS_SUBSCRIBER_PREFIX = "carrier_subscriber_";
@@ -579,306 +519,6 @@
}
}
- private static final class ProvisionSatelliteServiceArgument {
- public @NonNull String token;
- public @NonNull Consumer<Integer> callback;
- public int subId;
-
- ProvisionSatelliteServiceArgument(String token, Consumer<Integer> callback, int subId) {
- this.token = token;
- this.callback = callback;
- this.subId = subId;
- }
- }
-
- private static final class SendSatelliteDatagramArgument {
- public long datagramId;
-
- public @SatelliteManager.DatagramType int datagramType;
- public @NonNull SatelliteDatagram datagram;
-
- public boolean needFullScreenPointingUI;
- public @NonNull ResultReceiver result;
-
- SendSatelliteDatagramArgument(long datagramId,
- @SatelliteManager.DatagramType int datagramType,
- SatelliteDatagram datagram, boolean needFullScreenPointingUI,
- ResultReceiver result) {
- this.datagramId = datagramId;
- this.datagramType = datagramType;
- this.datagram = datagram;
- this.needFullScreenPointingUI = needFullScreenPointingUI;
- this.result = result;
- }
- }
-
- private static final class SatellitePositionUpdateArgument {
- public @NonNull Consumer<Integer> errorCallback;
- public @NonNull ISatellitePositionUpdateCallback callback;
- public int subId;
-
- SatellitePositionUpdateArgument(Consumer<Integer> errorCallback,
- ISatellitePositionUpdateCallback callback, int subId) {
- this.errorCallback = errorCallback;
- this.callback = callback;
- this.subId = subId;
- }
- }
-
- private static final class SatellitePositionUpdateHandler extends Handler {
- public static final int EVENT_POSITION_INFO_CHANGED = 1;
- public static final int EVENT_DATAGRAM_TRANSFER_STATE_CHANGED = 2;
-
- private final ConcurrentHashMap<IBinder, ISatellitePositionUpdateCallback> mListeners;
- SatellitePositionUpdateHandler(Looper looper) {
- super(looper);
- mListeners = new ConcurrentHashMap<>();
- }
-
- public void addListener(ISatellitePositionUpdateCallback listener) {
- mListeners.put(listener.asBinder(), listener);
- }
-
- public void removeListener(ISatellitePositionUpdateCallback listener) {
- mListeners.remove(listener.asBinder());
- }
-
- public boolean hasListeners() {
- return !mListeners.isEmpty();
- }
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case EVENT_POSITION_INFO_CHANGED: {
- AsyncResult ar = (AsyncResult) msg.obj;
- PointingInfo pointingInfo = (PointingInfo) ar.result;
- mListeners.values().forEach(listener -> {
- try {
- listener.onSatellitePositionChanged(pointingInfo);
- } catch (RemoteException e) {
- log("EVENT_POSITION_INFO_CHANGED RemoteException: " + e);
- }
- });
- break;
- }
- case EVENT_DATAGRAM_TRANSFER_STATE_CHANGED: {
- AsyncResult ar = (AsyncResult) msg.obj;
- int result = (int) ar.result;
- mListeners.values().forEach(listener -> {
- try {
- // TODO: process and return the rest of the values correctly
- listener.onDatagramTransferStateChanged(result, 0, 0, 0);
- } catch (RemoteException e) {
- log("EVENT_DATAGRAM_TRANSFER_STATE_CHANGED RemoteException: " + e);
- }
- });
- break;
- }
- default:
- loge("SatellitePositionUpdateHandler unknown event: " + msg.what);
- }
- }
- }
-
- private static final class SatelliteProvisionStateChangedHandler extends Handler {
- public static final int EVENT_PROVISION_STATE_CHANGED = 1;
-
- private final ConcurrentHashMap<IBinder, ISatelliteProvisionStateCallback> mListeners;
- private final int mSubId;
-
- SatelliteProvisionStateChangedHandler(Looper looper, int subId) {
- super(looper);
- mListeners = new ConcurrentHashMap<>();
- mSubId = subId;
- }
-
- public void addListener(ISatelliteProvisionStateCallback listener) {
- mListeners.put(listener.asBinder(), listener);
- }
-
- public void removeListener(ISatelliteProvisionStateCallback listener) {
- mListeners.remove(listener.asBinder());
- }
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case EVENT_PROVISION_STATE_CHANGED: {
- AsyncResult ar = (AsyncResult) msg.obj;
- boolean provisioned = (boolean) ar.userObj;
- log("Received EVENT_PROVISION_STATE_CHANGED for subId=" + mSubId
- + ", provisioned=" + provisioned);
- mListeners.values().forEach(listener -> {
- try {
- listener.onSatelliteProvisionStateChanged(provisioned);
- } catch (RemoteException e) {
- log("EVENT_PROVISION_STATE_CHANGED RemoteException: " + e);
- }
- });
-
- setSatelliteProvisioned(provisioned);
- /**
- * TODO: Take bugreport if provisioned is true and user did not initiate the
- * provision procedure for the corresponding subscription.
- */
- break;
- }
- default:
- loge("SatelliteProvisionStateChangedHandler unknown event: " + msg.what);
- }
- }
-
- private void setSatelliteProvisioned(boolean isProvisioned) {
- if (mSubId != SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
- SubscriptionManager.setSubscriptionProperty(
- mSubId, SubscriptionManager.SATELLITE_ENABLED, isProvisioned ? "1" : "0");
- } else {
- //TODO (b/267826133): set via SatelliteController.
- }
- }
- }
-
- private static final class SatelliteStateListenerHandler extends Handler {
- public static final int EVENT_SATELLITE_MODEM_STATE_CHANGE = 1;
- public static final int EVENT_PENDING_DATAGRAM_COUNT = 2;
-
- private final ConcurrentHashMap<IBinder, ISatelliteStateCallback> mListeners;
- private final int mSubId;
-
- SatelliteStateListenerHandler(Looper looper, int subId) {
- super(looper);
- mSubId = subId;
- mListeners = new ConcurrentHashMap<>();
- }
-
- public void addListener(ISatelliteStateCallback listener) {
- mListeners.put(listener.asBinder(), listener);
- }
-
- public void removeListener(ISatelliteStateCallback listener) {
- mListeners.remove(listener.asBinder());
- }
-
- public boolean hasListeners() {
- return !mListeners.isEmpty();
- }
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case EVENT_SATELLITE_MODEM_STATE_CHANGE : {
- AsyncResult ar = (AsyncResult) msg.obj;
- int state = (int) ar.result;
- log("Received EVENT_SATELLITE_MODEM_STATE_CHANGE for subId=" + mSubId
- + ", state=" + state);
- mListeners.values().forEach(listener -> {
- try {
- listener.onSatelliteModemStateChanged(state);
- } catch (RemoteException e) {
- log("EVENT_SATELLITE_MODEM_STATE_CHANGE RemoteException: " + e);
- }
- });
- break;
- }
- case EVENT_PENDING_DATAGRAM_COUNT: {
- AsyncResult ar = (AsyncResult) msg.obj;
- int count = (int) ar.result;
- log("Received EVENT_PENDING_DATAGRAM_COUNT for subId=" + mSubId
- + ", count=" + count);
- mListeners.values().forEach(listener -> {
- try {
- listener.onPendingDatagramCount(count);
- } catch (RemoteException e) {
- log("EVENT_PENDING_DATAGRAM_COUNT RemoteException: " + e);
- }
- });
- break;
- }
- default:
- loge("SatelliteStateListenerHandler unknown event: " + msg.what);
- }
- }
- }
-
- /** Callback used by datagram receiver app to send ack back to Telephony. */
- private static final ISatelliteDatagramReceiverAck.Stub mDatagramReceiverAck =
- new ISatelliteDatagramReceiverAck.Stub() {
- /**
- * This callback will be used by datagram receiver app to send ack back to
- * Telephony. If the callback is not received within five minutes,
- * then Telephony will resend the datagram again.
- *
- * @param datagramId An id that uniquely identifies datagram
- * received by satellite datagram receiver app.
- * This should match with datagramId passed in
- * {@link SatelliteDatagramCallback#onSatelliteDatagramReceived(
- * long, SatelliteDatagram, int, ISatelliteDatagramReceiverAck)}.
- * Upon receiving the ack, Telephony will remove the datagram from
- * the persistent memory.
- */
- public void acknowledgeSatelliteDatagramReceived(long datagramId) {
-
- }
- };
-
- private static final class SatelliteDatagramListenerHandler extends Handler {
- public static final int EVENT_SATELLITE_DATAGRAMS_RECEIVED = 1;
-
- private final ConcurrentHashMap<IBinder, ISatelliteDatagramCallback> mListeners;
- private final int mSubId;
-
- SatelliteDatagramListenerHandler(Looper looper, int subId) {
- super(looper);
- mSubId = subId;
- mListeners = new ConcurrentHashMap<>();
- }
-
- public void addListener(ISatelliteDatagramCallback listener) {
- mListeners.put(listener.asBinder(), listener);
- }
-
- public void removeListener(ISatelliteDatagramCallback listener) {
- mListeners.remove(listener.asBinder());
- }
-
- public boolean hasListeners() {
- return !mListeners.isEmpty();
- }
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case EVENT_SATELLITE_DATAGRAMS_RECEIVED: {
- AsyncResult ar = (AsyncResult) msg.obj;
- Pair<SatelliteDatagram[], Integer> result =
- (Pair<SatelliteDatagram[], Integer>) ar.result;
- SatelliteDatagram[] satelliteDatagrams = result.first;
- int pendingCount = result.second;
-
- log("Received EVENT_SATELLITE_DATAGRAMS_RECEIVED for subId=" + mSubId);
- mListeners.values().forEach(listener -> {
- try {
- for (int i = 0; i < satelliteDatagrams.length; i++) {
- // TODO (b/269637555): wait for ack and retry after 5mins
- listener.onSatelliteDatagramReceived(
- // TODO: create a new datagramId every time
- i, satelliteDatagrams[i], pendingCount,
- // TODO: create a new instance of ack that will resend
- mDatagramReceiverAck);
- }
- } catch (RemoteException e) {
- log("EVENT_SATELLITE_DATAGRAMS_RECEIVED RemoteException: " + e);
- }
- });
- break;
- }
- default:
- loge("SatelliteDatagramListenerHandler unknown event: " + msg.what);
- }
- }
- }
-
/**
* A request object for use with {@link MainThreadHandler}. Requesters should wait() on the
* request after sending. The main thread will notify the request when it is complete.
@@ -2627,444 +2267,6 @@
notifyRequester(request);
break;
- case CMD_START_SATELLITE_POSITION_UPDATES: {
- 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);
- } else {
- loge("startSatellitePositionUpdates: No phone object");
- SatellitePositionUpdateArgument arg =
- (SatellitePositionUpdateArgument) request.argument;
- arg.errorCallback.accept(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- }
- break;
- }
-
- case EVENT_START_SATELLITE_POSITION_UPDATES_DONE: {
- handleStartSatellitePositionUpdatesDone((AsyncResult) msg.obj);
- break;
- }
-
- case CMD_STOP_SATELLITE_POSITION_UPDATES: {
- 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);
- } else {
- loge("stopSatellitePositionUpdates: No phone object");
- ((Consumer<Integer>) request.argument).accept(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- }
- break;
- }
-
- case EVENT_STOP_SATELLITE_POSITION_UPDATES_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "stopSatellitePositionUpdates", false);
- ((Consumer<Integer>) request.argument).accept(error);
- break;
- }
-
- 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);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController
- .requestMaxCharactersPerMOTextMessage(onCompleted);
- break;
- }
- Phone phone = getPhoneFromRequest(request);
- if (phone != null) {
- phone.getMaxCharactersPerSatelliteTextMessage(onCompleted);
- } else {
- loge("getMaxCharactersPerSatelliteTextMessage: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error =
- getSatelliteError(ar, "getMaxCharactersPerSatelliteTextMessage", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- int maxCharLimit = ((int[]) ar.result)[0];
- if (DBG) log("getMaxCharactersPerSatelliteTextMessage: " + maxCharLimit);
- bundle.putInt(SatelliteManager.KEY_MAX_CHARACTERS_PER_SATELLITE_TEXT,
- maxCharLimit);
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
- case CMD_PROVISION_SATELLITE_SERVICE: {
- request = (MainThreadRequest) msg.obj;
- 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) {
- phone.provisionSatelliteService(onCompleted, argument.token);
- } else {
- loge("provisionSatelliteService: No phone object");
- argument.callback.accept(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- notifyRequester(request);
- }
- break;
- }
-
- case EVENT_PROVISION_SATELLITE_SERVICE_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int errorCode = getSatelliteError(ar, "provisionSatelliteService", false);
- handleEventProvisionSatelliteServiceDone(
- (ProvisionSatelliteServiceArgument) request.argument, errorCode);
- notifyRequester(request);
- break;
- }
-
- case CMD_DEPROVISION_SATELLITE_SERVICE: {
- request = (MainThreadRequest) msg.obj;
- 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) {
- phone.deprovisionSatelliteService(onCompleted, argument.token);
- } else {
- loge("deprovisionSatelliteService: No phone object");
- if (argument.callback != null) {
- argument.callback.accept(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- }
- }
- break;
- }
-
- case EVENT_DEPROVISION_SATELLITE_SERVICE_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int errorCode = getSatelliteError(ar, "deprovisionSatelliteService", false);
- handleEventDeprovisionSatelliteServiceDone(
- (ProvisionSatelliteServiceArgument) request.argument, errorCode);
- break;
- }
-
- case CMD_SET_SATELLITE_ENABLED: {
- request = (MainThreadRequest) msg.obj;
- 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) {
- phone.setSatellitePower(onCompleted, argument.first);
- } else {
- loge("requestSatelliteEnabled: No phone object");
- argument.second.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- }
- break;
- }
-
- case EVENT_SET_SATELLITE_ENABLED_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- Pair<Boolean, Consumer<Integer>> argument =
- (Pair<Boolean, Consumer<Integer>>) request.argument;
- int error = getSatelliteError(ar, "setSatelliteEnabled", false);
- argument.second.accept(error);
- break;
- }
-
- 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);
- } else {
- loge("isSatelliteEnabled: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_IS_SATELLITE_ENABLED_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "isSatelliteEnabled", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- boolean enabled = ((int[]) ar.result)[0] == 1;
- if (DBG) log("isSatelliteEnabled: " + enabled);
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_ENABLED, enabled);
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
- 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);
- } else {
- loge("isSatelliteSupported: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_IS_SATELLITE_SUPPORTED_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "isSatelliteSupported", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- boolean supported = (boolean) ar.result;
- if (DBG) log("isSatelliteSupported: " + supported);
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_SUPPORTED, supported);
- synchronized (mIsSatelliteSupportedLock) {
- mIsSatelliteSupported = supported;
- }
- } else {
- synchronized (mIsSatelliteSupportedLock) {
- mIsSatelliteSupported = null;
- }
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
- 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);
- } else {
- loge("getSatelliteCapabilities: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_GET_SATELLITE_CAPABILITIES_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "getSatelliteCapabilities", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- SatelliteCapabilities capabilities = (SatelliteCapabilities) ar.result;
- if (DBG) log("getSatelliteCapabilities: " + capabilities);
- bundle.putParcelable(SatelliteManager.KEY_SATELLITE_CAPABILITIES,
- capabilities);
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
- case CMD_POLL_PENDING_SATELLITE_DATAGRAMS: {
- request = (MainThreadRequest) msg.obj;
- 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);
- }
- break;
- }
-
- case EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "pollPendingSatelliteDatagrams", false);
- ((Consumer<Integer>) request.argument).accept(error);
- break;
- }
-
- case CMD_SEND_SATELLITE_DATAGRAM: {
- request = (MainThreadRequest) msg.obj;
- SendSatelliteDatagramArgument argument =
- (SendSatelliteDatagramArgument) request.argument;
- onCompleted = obtainMessage(EVENT_SEND_SATELLITE_DATAGRAM_DONE, request);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.sendSatelliteDatagram(
- argument.datagram,
- argument.datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
- argument.needFullScreenPointingUI, onCompleted);
- break;
- }
- Phone phone = getPhoneFromRequest(request);
- if (phone != null) {
- phone.sendSatelliteDatagram(onCompleted, argument.datagram,
- argument.needFullScreenPointingUI);
- } else {
- loge("sendSatelliteDatagram: No phone object");
- argument.result.send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_SEND_SATELLITE_DATAGRAM_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(ar, "sendSatelliteDatagram", false);
- SendSatelliteDatagramArgument argument =
- (SendSatelliteDatagramArgument) request.argument;
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- bundle.putLong(SatelliteManager.KEY_SEND_SATELLITE_DATAGRAM,
- argument.datagramId);
- }
- argument.result.send(error, bundle);
- break;
- }
-
- case CMD_IS_SATELLITE_COMMUNICATION_ALLOWED: {
- request = (MainThreadRequest) msg.obj;
- 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);
- } else {
- loge("isSatelliteCommunicationAllowedForCurrentLocation: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_IS_SATELLITE_COMMUNICATION_ALLOWED_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error = getSatelliteError(
- ar, "isSatelliteCommunicationAllowedForCurrentLocation", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- boolean communicationAllowed = (boolean) ar.result;
- if (DBG) {
- log("isSatelliteCommunicationAllowedForCurrentLocation: "
- + communicationAllowed);
- }
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_COMMUNICATION_ALLOWED,
- communicationAllowed);
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
- case CMD_GET_TIME_SATELLITE_NEXT_VISIBLE: {
- 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);
- } else {
- loge("requestTimeForNextSatelliteVisibility: No phone object");
- ((ResultReceiver) request.argument).send(
- SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- }
- break;
- }
-
- case EVENT_GET_TIME_SATELLITE_NEXT_VISIBLE_DONE: {
- ar = (AsyncResult) msg.obj;
- request = (MainThreadRequest) ar.userObj;
- int error =
- getSatelliteError(ar, "requestTimeForNextSatelliteVisibility", true);
- Bundle bundle = new Bundle();
- if (error == SatelliteManager.SATELLITE_ERROR_NONE) {
- int nextVisibilityDuration = ((int[]) ar.result)[0];
- if (DBG) {
- log("requestTimeForNextSatelliteVisibility: " + nextVisibilityDuration);
- }
- bundle.putInt(SatelliteManager.KEY_SATELLITE_NEXT_VISIBILITY,
- nextVisibilityDuration);
- }
- ((ResultReceiver) request.argument).send(error, bundle);
- break;
- }
-
default:
Log.w(LOG_TAG, "MainThreadHandler: unexpected message code: " + msg.what);
break;
@@ -3259,7 +2461,7 @@
mApp = app;
mCM = PhoneGlobals.getInstance().mCM;
mImsResolver = ImsResolver.getInstance();
- mSatelliteServiceController = SatelliteServiceController.getInstance();
+ mSatelliteController = SatelliteController.getInstance();
mUserManager = (UserManager) app.getSystemService(Context.USER_SERVICE);
mAppOps = (AppOpsManager)app.getSystemService(Context.APP_OPS_SERVICE);
mMainThreadHandler = new MainThreadHandler();
@@ -3276,24 +2478,6 @@
PropertyInvalidatedCache.invalidateCache(TelephonyManager.CACHE_KEY_PHONE_ACCOUNT_TO_SUBID);
publish();
CarrierAllowListInfo.loadInstance(mApp);
- mSatelliteSupportedReceiver = new ResultReceiver(mMainThreadHandler) {
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- if (resultCode == SatelliteManager.SATELLITE_ERROR_NONE
- && resultData.containsKey(SatelliteManager.KEY_SATELLITE_SUPPORTED)) {
- synchronized (mIsSatelliteSupportedLock) {
- mIsSatelliteSupported = resultData.getBoolean(
- SatelliteManager.KEY_SATELLITE_SUPPORTED);
- }
- } else {
- synchronized (mIsSatelliteSupportedLock) {
- mIsSatelliteSupported = null;
- }
- }
- }
- };
- requestIsSatelliteSupported(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
- mSatelliteSupportedReceiver);
}
@VisibleForTesting
@@ -12907,26 +12091,7 @@
public void requestSatelliteEnabled(
int subId, boolean enable, @NonNull IIntegerConsumer callback) {
enforceSatelliteCommunicationPermission("requestSatelliteEnabled");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestSatelliteEnabled");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
-
- Pair<Boolean, Consumer<Integer>> arg = new Pair<>(enable, result);
- sendRequestAsync(CMD_SET_SATELLITE_ENABLED, arg, phone, null);
+ mSatelliteController.requestSatelliteEnabled(subId, enable, callback);
}
/**
@@ -12941,24 +12106,7 @@
@Override
public void requestIsSatelliteEnabled(int subId, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestIsSatelliteEnabled");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestIsSatelliteEnabled");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequest(CMD_IS_SATELLITE_ENABLED, result, subId);
+ mSatelliteController.requestIsSatelliteEnabled(subId, result);
}
/**
@@ -12974,29 +12122,7 @@
public void requestSatelliteDemoModeEnabled(
int subId, boolean enable, @NonNull IIntegerConsumer callback) {
enforceSatelliteCommunicationPermission("requestSatelliteDemoModeEnabled");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestSatelliteDemoModeEnabled");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
-
- if (mIsSatelliteServiceSupported) {
- result.accept(mSatelliteServiceController.requestSatelliteDemoModeEnabled(enable));
- } else {
- result.accept(SatelliteManager.SATELLITE_SERVICE_ERROR);
- }
+ mSatelliteController.requestSatelliteDemoModeEnabled(subId, enable, callback);
}
/**
@@ -13012,36 +12138,7 @@
@Override
public void requestIsSatelliteDemoModeEnabled(int subId, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestIsSatelliteDemoModeEnabled");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestIsSatelliteDemoModeEnabled");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- if (mIsSatelliteServiceSupported) {
- final Bundle bundle = new Bundle();
- int error = mSatelliteServiceController.requestIsSatelliteDemoModeEnabled(
- new Consumer<Boolean>() {
- @Override
- public void accept(Boolean enabled) {
- bundle.putBoolean(SatelliteManager.KEY_DEMO_MODE_ENABLED, enabled);
- }
- });
- result.send(error, bundle);
- } else {
- result.send(SatelliteManager.SATELLITE_SERVICE_ERROR, null);
- }
+ mSatelliteController.requestIsSatelliteDemoModeEnabled(subId, result);
}
/**
@@ -13053,24 +12150,7 @@
*/
@Override
public void requestIsSatelliteSupported(int subId, @NonNull ResultReceiver result) {
- synchronized (mIsSatelliteSupportedLock) {
- if (mIsSatelliteSupported != null) {
- /* We have already successfully queried the satellite modem. */
- Bundle bundle = new Bundle();
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_SUPPORTED, mIsSatelliteSupported);
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, bundle);
- return;
- }
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(validSubId, "requestIsSatelliteSupported");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequestAsync(CMD_IS_SATELLITE_SUPPORTED, result, phone, null);
+ mSatelliteController.requestIsSatelliteSupported(subId, result);
}
/**
@@ -13085,19 +12165,7 @@
@Override
public void requestSatelliteCapabilities(int subId, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestSatelliteCapabilities");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(validSubId, "requestSatelliteCapabilities");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequestAsync(CMD_GET_SATELLITE_CAPABILITIES, result, phone, null);
+ mSatelliteController.requestSatelliteCapabilities(subId, result);
}
/**
@@ -13115,46 +12183,7 @@
public void startSatellitePositionUpdates(int subId, @NonNull IIntegerConsumer errorCallback,
@NonNull ISatellitePositionUpdateCallback callback) {
enforceSatelliteCommunicationPermission("startSatellitePositionUpdates");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(errorCallback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "startSatellitePositionUpdates");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
-
- SatellitePositionUpdateHandler handler = mSatellitePositionUpdateHandlers.get(validSubId);
- if (handler != null) {
- handler.addListener(callback);
- return;
- } else {
- handler = new SatellitePositionUpdateHandler(Looper.getMainLooper());
- handler.addListener(callback);
- mSatellitePositionUpdateHandlers.put(validSubId, handler);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.registerForSatellitePositionInfoChanged(handler,
- SatellitePositionUpdateHandler.EVENT_POSITION_INFO_CHANGED, null);
- mSatelliteServiceController.registerForDatagramTransferStateChanged(handler,
- SatellitePositionUpdateHandler.EVENT_DATAGRAM_TRANSFER_STATE_CHANGED, null);
- } else {
- phone.registerForSatellitePositionInfoChanged(handler,
- SatellitePositionUpdateHandler.EVENT_POSITION_INFO_CHANGED, null);
- // TODO: registerForDatagramTransferStateChanged through SatelliteController
- }
- }
-
- sendRequestAsync(CMD_START_SATELLITE_POSITION_UPDATES,
- new SatellitePositionUpdateArgument(result, callback, validSubId), phone, null);
+ mSatelliteController.startSatellitePositionUpdates(subId, errorCallback, callback);
}
/**
@@ -13172,55 +12201,7 @@
public void stopSatellitePositionUpdates(int subId, @NonNull IIntegerConsumer errorCallback,
@NonNull ISatellitePositionUpdateCallback callback) {
enforceSatelliteCommunicationPermission("stopSatellitePositionUpdates");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(errorCallback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "stopSatellitePositionUpdates");
- SatellitePositionUpdateHandler handler = mSatellitePositionUpdateHandlers.get(validSubId);
- if (handler != null) {
- handler.removeListener(callback);
-
- if (handler.hasListeners()) {
- /**
- * TODO (b/269194948): If the calling apps crash, the handler will always have some
- * listener. That is, we will not request modem to stop position update and
- * cleaning our resources. We need to monitor the calling apps and clean up the
- * resources when the apps die. We need to this for other satellite callbacks
- * as well.
- */
- result.accept(SatelliteManager.SATELLITE_ERROR_NONE);
- return;
- }
-
- mSatellitePositionUpdateHandlers.remove(validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.unregisterForSatellitePositionInfoChanged(handler);
- mSatelliteServiceController.unregisterForDatagramTransferStateChanged(handler);
- } else {
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
- phone.unregisterForSatellitePositionInfoChanged(handler);
- // TODO: unregisterForDatagramTransferStateChanged through SatelliteController
- }
- }
-
- /**
- * Even if handler is null - which means there are not any listeners, the command to stop
- * satellite position updates sent to the modem might have failed. The callers might want to
- * retry sending the command. Thus, we always need to send this command to the modem.
- */
- sendRequestAsync(CMD_STOP_SATELLITE_POSITION_UPDATES, result, phone, null);
+ mSatelliteController.stopSatellitePositionUpdates(subId, errorCallback, callback);
}
/**
@@ -13237,24 +12218,7 @@
public void requestMaxSizePerSendingDatagram(int subId,
@NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestMaxSizePerSendingDatagram");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestMaxSizePerSendingDatagram");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequestAsync(CMD_GET_MAX_CHAR_PER_SATELLITE_TEXT_MSG, result, phone, null);
+ mSatelliteController.requestMaxSizePerSendingDatagram(subId, result);
}
/**
@@ -13275,39 +12239,7 @@
@Nullable public ICancellationSignal provisionSatelliteService(int subId,
@NonNull String token, @NonNull IIntegerConsumer callback) {
enforceSatelliteCommunicationPermission("provisionSatelliteService");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return null;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(validSubId, "provisionSatelliteService");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return null;
- }
-
- if (mSatelliteProvisionCallbacks.containsKey(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_PROVISION_IN_PROGRESS);
- return null;
- }
-
- if (isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_ERROR_NONE);
- return null;
- }
-
- sendRequestAsync(CMD_PROVISION_SATELLITE_SERVICE,
- new ProvisionSatelliteServiceArgument(token, result, validSubId), phone, null);
-
- ICancellationSignal cancelTransport = CancellationSignal.createTransport();
- CancellationSignal.fromTransport(cancelTransport).setOnCancelListener(() -> {
- sendRequestAsync(CMD_DEPROVISION_SATELLITE_SERVICE,
- new ProvisionSatelliteServiceArgument(token, null, validSubId),
- phone, null);
- });
- return cancelTransport;
+ return mSatelliteController.provisionSatelliteService(subId, token, callback);
}
/**
@@ -13326,26 +12258,7 @@
public void deprovisionSatelliteService(int subId,
@NonNull String token, @NonNull IIntegerConsumer callback) {
enforceSatelliteCommunicationPermission("deprovisionSatelliteService");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
- if (!isSatelliteSupported()) {
- result.accept(SatelliteManager.SATELLITE_NOT_SUPPORTED);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_ERROR_NONE);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "deprovisionSatelliteService");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
-
- sendRequestAsync(CMD_DEPROVISION_SATELLITE_SERVICE,
- new ProvisionSatelliteServiceArgument(token, result, validSubId), phone, null);
+ mSatelliteController.deprovisionSatelliteService(subId, token, callback);
}
/**
@@ -13362,7 +12275,7 @@
@SatelliteManager.SatelliteError public int registerForSatelliteProvisionStateChanged(int subId,
@NonNull ISatelliteProvisionStateCallback callback) {
enforceSatelliteCommunicationPermission("registerForSatelliteProvisionStateChanged");
- return registerForSatelliteProvisionStateChangedInternal(subId, callback);
+ return mSatelliteController.registerForSatelliteProvisionStateChanged(subId, callback);
}
/**
@@ -13379,13 +12292,7 @@
public void unregisterForSatelliteProvisionStateChanged(
int subId, @NonNull ISatelliteProvisionStateCallback callback) {
enforceSatelliteCommunicationPermission("unregisterForSatelliteProvisionStateChanged");
-
- final int validSubId = getValidSatelliteSubId(subId);
- SatelliteProvisionStateChangedHandler satelliteProvisionStateChangedHandler =
- mSatelliteProvisionStateChangedHandlers.get(validSubId);
- if (satelliteProvisionStateChangedHandler != null) {
- satelliteProvisionStateChangedHandler.removeListener(callback);
- }
+ mSatelliteController.unregisterForSatelliteProvisionStateChanged(subId, callback);
}
/**
@@ -13401,16 +12308,7 @@
@Override
public void requestIsSatelliteProvisioned(int subId, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestIsSatelliteProvisioned");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Bundle bundle = new Bundle();
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_PROVISIONED,
- isSatelliteProvisioned(validSubId));
- result.send(SatelliteManager.SATELLITE_ERROR_NONE, bundle);
+ mSatelliteController.requestIsSatelliteProvisioned(subId, result);
}
/**
@@ -13427,37 +12325,7 @@
@SatelliteManager.SatelliteError public int registerForSatelliteModemStateChanged(int subId,
@NonNull ISatelliteStateCallback callback) {
enforceSatelliteCommunicationPermission("registerForSatelliteModemStateChanged");
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(
- validSubId, "registerForSatelliteModemStateChanged");
- if (phone == null) {
- return SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE;
- }
-
- SatelliteStateListenerHandler satelliteStateListenerHandler =
- mSatelliteStateListenerHandlers.get(validSubId);
- if (satelliteStateListenerHandler == null) {
- satelliteStateListenerHandler = new SatelliteStateListenerHandler(
- Looper.getMainLooper(), validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.registerForSatelliteModemStateChanged(
- satelliteStateListenerHandler,
- SatelliteStateListenerHandler.EVENT_SATELLITE_MODEM_STATE_CHANGE, null);
- mSatelliteServiceController.registerForPendingDatagramCount(
- satelliteStateListenerHandler,
- SatelliteStateListenerHandler.EVENT_PENDING_DATAGRAM_COUNT, null);
- } else {
- phone.registerForSatelliteModemStateChanged(satelliteStateListenerHandler,
- SatelliteStateListenerHandler.EVENT_SATELLITE_MODEM_STATE_CHANGE, null);
- phone.registerForPendingDatagramCount(satelliteStateListenerHandler,
- SatelliteStateListenerHandler.EVENT_PENDING_DATAGRAM_COUNT, null);
- }
- }
-
- satelliteStateListenerHandler.addListener(callback);
- mSatelliteStateListenerHandlers.put(validSubId, satelliteStateListenerHandler);
- return SatelliteManager.SATELLITE_ERROR_NONE;
+ return mSatelliteController.registerForSatelliteModemStateChanged(subId, callback);
}
/**
@@ -13474,28 +12342,7 @@
public void unregisterForSatelliteModemStateChanged(int subId,
@NonNull ISatelliteStateCallback callback) {
enforceSatelliteCommunicationPermission("unregisterForSatelliteModemStateChanged");
-
- final int validSubId = getValidSatelliteSubId(subId);
- SatelliteStateListenerHandler handler = mSatelliteStateListenerHandlers.get(validSubId);
- if (handler != null) {
- handler.removeListener(callback);
- if (!handler.hasListeners()) {
- mSatelliteStateListenerHandlers.remove(validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.unregisterForSatelliteModemStateChanged(handler);
- mSatelliteServiceController.unregisterForPendingDatagramCount(handler);
- } else {
- Phone phone = getPhoneOrDefault(
- validSubId, "unregisterForSatelliteModemStateChanged");
- if (phone == null) {
- loge("unregisterForSatelliteModemStateChanged: phone is null");
- } else {
- phone.unregisterForSatelliteModemStateChanged(handler);
- phone.unregisterForPendingDatagramCount(handler);
- }
- }
- }
- }
+ mSatelliteController.unregisterForSatelliteModemStateChanged(subId, callback);
}
/**
@@ -13515,34 +12362,7 @@
@SatelliteManager.DatagramType int datagramType,
@NonNull ISatelliteDatagramCallback callback) {
enforceSatelliteCommunicationPermission("registerForSatelliteDatagram");
- if (!isSatelliteSupported()) {
- return SatelliteManager.SATELLITE_NOT_SUPPORTED;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(validSubId, "registerForSatelliteDatagram");
- if (phone == null) {
- return SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE;
- }
-
- SatelliteDatagramListenerHandler satelliteDatagramListenerHandler =
- mSatelliteDatagramListenerHandlers.get(validSubId);
- if (satelliteDatagramListenerHandler == null) {
- satelliteDatagramListenerHandler = new SatelliteDatagramListenerHandler(
- Looper.getMainLooper(), validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.registerForSatelliteDatagramsReceived(
- satelliteDatagramListenerHandler,
- SatelliteDatagramListenerHandler.EVENT_SATELLITE_DATAGRAMS_RECEIVED, null);
- } else {
- phone.registerForSatelliteDatagramsReceived(satelliteDatagramListenerHandler,
- SatelliteDatagramListenerHandler.EVENT_SATELLITE_DATAGRAMS_RECEIVED, null);
- }
- }
-
- satelliteDatagramListenerHandler.addListener(callback);
- mSatelliteDatagramListenerHandlers.put(validSubId, satelliteDatagramListenerHandler);
- return SatelliteManager.SATELLITE_ERROR_NONE;
+ return mSatelliteController.registerForSatelliteDatagram(subId, datagramType, callback);
}
/**
@@ -13559,27 +12379,7 @@
public void unregisterForSatelliteDatagram(int subId,
@NonNull ISatelliteDatagramCallback callback) {
enforceSatelliteCommunicationPermission("unregisterForSatelliteDatagram");
-
- final int validSubId = getValidSatelliteSubId(subId);
- SatelliteDatagramListenerHandler handler =
- mSatelliteDatagramListenerHandlers.get(validSubId);
- if (handler != null) {
- handler.removeListener(callback);
-
- if (!handler.hasListeners()) {
- mSatelliteDatagramListenerHandlers.remove(validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.unregisterForSatelliteDatagramsReceived(handler);
- } else {
- Phone phone = getPhoneOrDefault(validSubId, "unregisterForSatelliteDatagram");
- if (phone == null) {
- loge("unregisterForSatelliteDatagram: phone is null");
- } else {
- phone.unregisterForSatelliteDatagramsReceived(handler);
- }
- }
- }
- }
+ mSatelliteController.unregisterForSatelliteDatagram(subId, callback);
}
/**
@@ -13598,21 +12398,7 @@
@Override
public void pollPendingSatelliteDatagrams(int subId, IIntegerConsumer callback) {
enforceSatelliteCommunicationPermission("pollPendingSatelliteDatagrams");
- Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "pollPendingSatelliteDatagrams");
- if (phone == null) {
- result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
- return;
- }
-
- sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, result, phone, null);
+ mSatelliteController.pollPendingSatelliteDatagrams(subId, callback);
}
/**
@@ -13640,24 +12426,8 @@
@SatelliteManager.DatagramType int datagramType, SatelliteDatagram datagram,
boolean needFullScreenPointingUI, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("sendSatelliteDatagram");
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "sendSatelliteDatagram");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- // check if we need to start PointingUI.
-
- sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM,
- new SendSatelliteDatagramArgument(datagramId, datagramType, datagram,
- needFullScreenPointingUI, result), phone, null);
+ mSatelliteController.sendSatelliteDatagram(subId, datagramId, datagramType, datagram,
+ needFullScreenPointingUI, result);
}
/**
@@ -13676,25 +12446,8 @@
@NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission(
"requestIsSatelliteCommunicationAllowedForCurrentLocation");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId,
- "requestIsSatelliteCommunicationAllowedForCurrentLocation");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequest(CMD_IS_SATELLITE_COMMUNICATION_ALLOWED, result, subId);
+ mSatelliteController.requestIsSatelliteCommunicationAllowedForCurrentLocation(subId,
+ result);
}
/**
@@ -13709,69 +12462,7 @@
@Override
public void requestTimeForNextSatelliteVisibility(int subId, @NonNull ResultReceiver result) {
enforceSatelliteCommunicationPermission("requestTimeForNextSatelliteVisibility");
- if (!isSatelliteSupported()) {
- result.send(SatelliteManager.SATELLITE_NOT_SUPPORTED, null);
- return;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- if (!isSatelliteProvisioned(validSubId)) {
- result.send(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED, null);
- return;
- }
-
- Phone phone = getPhoneOrDefault(validSubId, "requestTimeForNextSatelliteVisibility");
- if (phone == null) {
- result.send(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE, null);
- return;
- }
-
- sendRequestAsync(CMD_GET_TIME_SATELLITE_NEXT_VISIBLE, result, phone, null);
- }
-
- private void handleEventProvisionSatelliteServiceDone(
- @NonNull ProvisionSatelliteServiceArgument arg,
- @SatelliteManager.SatelliteError int result) {
- log("handleEventProvisionSatelliteServiceDone: result="
- + result + ", subId=" + arg.subId);
-
- Consumer<Integer> callback = mSatelliteProvisionCallbacks.remove(arg.subId);
- if (callback == null) {
- loge("handleEventProvisionSatelliteServiceDone: callback is null for subId="
- + arg.subId);
- return;
- }
- callback.accept(result);
-
- if (result == SatelliteManager.SATELLITE_ERROR_NONE) {
- setSatelliteProvisioned(arg.subId, true);
- }
-
- /**
- * We need to update satellite provision status in SubscriptionController
- * or SatelliteController.
- * TODO (b/267826133) we need to do this for all subscriptions on the device.
- */
- registerForSatelliteProvisionStateChangedInternal(arg.subId, null);
- }
-
- private void handleEventDeprovisionSatelliteServiceDone(
- @NonNull ProvisionSatelliteServiceArgument arg,
- @SatelliteManager.SatelliteError int result) {
- if (arg == null) {
- loge("handleEventDeprovisionSatelliteServiceDone: arg is null");
- return;
- }
- log("handleEventDeprovisionSatelliteServiceDone: result="
- + result + ", subId=" + arg.subId);
-
- if (arg.callback != null) {
- arg.callback.accept(result);
- }
-
- if (result == SatelliteManager.SATELLITE_ERROR_NONE) {
- setSatelliteProvisioned(arg.subId, false);
- }
+ mSatelliteController.requestTimeForNextSatelliteVisibility(subId, result);
}
private Phone getPhoneOrDefault(int subId, String caller) {
@@ -13788,211 +12479,6 @@
}
/**
- * Check if satellite is provisioned for a subscription or the device.
- *
- * Note: this is the version without permission check for telephony internal use only. The
- * caller need to take care of the permission check.
- */
- private boolean isSatelliteProvisioned(int subId) {
- if (subId != SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
- if (mSubscriptionController == null) {
- loge("isSatelliteProvisioned mSubscriptionController is null");
- return false;
- }
-
- String strResult = mSubscriptionController.getSubscriptionProperty(
- subId, SubscriptionManager.SATELLITE_ENABLED);
- if (strResult != null) {
- int intResult = Integer.parseInt(strResult);
- return (intResult == 1) ? true : false;
- }
- } else {
- //TODO (b/267826133): check via SatelliteController
- }
- return false;
- }
-
- /**
- * Set satellite provisioned for a subscription or the device.
- *
- * The permission {@link android.Manifest.permission#MODIFY_PHONE_STATE} will be enforced by
- * {@link SubscriptionController} when setting satellite enabled for an active subscription.
- * Otherwise, {@link android.Manifest.permission#SATELLITE_COMMUNICATION} will be enforced.
- */
- private synchronized void setSatelliteProvisioned(int subId, boolean isEnabled) {
- if (subId != SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
- if (mSubscriptionController == null) {
- loge("setSatelliteProvisioned mSubscriptionController is null");
- return;
- }
- mSubscriptionController.setSubscriptionProperty(
- subId, SubscriptionManager.SATELLITE_ENABLED, isEnabled ? "1" : "0");
- } else {
- //TODO (b/267826133): set via SatelliteController
- }
- }
-
- private int getValidSatelliteSubId(int subId) {
- if (mSubscriptionController == null) {
- loge("getValidSatelliteSubId mSubscriptionController is null. "
- + "Use DEFAULT_SUBSCRIPTION_ID for subId=" + subId);
- return SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
- }
- final long identity = Binder.clearCallingIdentity();
- try {
- Context context = getDefaultPhone().getContext();
- if (mSubscriptionController.isActiveSubId(
- subId, context.getOpPackageName(), context.getAttributionTag())) {
- return subId;
- }
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- if (DBG) log("getValidSatelliteSubId: use DEFAULT_SUBSCRIPTION_ID for subId=" + subId);
- return SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
- }
-
- /**
- * If we have not successfully queried the satellite modem for its satellite service support,
- * we will retry the query one more time. Otherwise, we will return the queried result.
- */
- private boolean isSatelliteSupported() {
- synchronized (mIsSatelliteSupportedLock) {
- if (mIsSatelliteSupported != null) {
- /* We have already successfully queried the satellite modem. */
- return mIsSatelliteSupported;
- }
- }
- /**
- * We have not successfully checked whether the modem supports satellite service.
- * Thus, we need to retry it now.
- */
- requestIsSatelliteSupported(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
- mSatelliteSupportedReceiver);
- return false;
- }
-
- /**
- * Get the {@link SatelliteManager.SatelliteError} from the provided result.
- *
- * @param ar AsyncResult used to determine the error code.
- * @param caller The satellite request.
- * @param checkResult Whether to check if the result exists.
- *
- * @return The {@link SatelliteManager.SatelliteError} error code from the request.
- */
- @SatelliteManager.SatelliteError private int getSatelliteError(@NonNull AsyncResult ar,
- @NonNull String caller, boolean checkResult) {
- int errorCode;
- if (ar.exception == null) {
- errorCode = SatelliteManager.SATELLITE_ERROR_NONE;
- if (checkResult && ar.result == null) {
- loge(caller + ": result is null");
- errorCode = SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE;
- }
- } else {
- errorCode = SatelliteManager.SATELLITE_ERROR;
- if (ar.exception instanceof CommandException) {
- 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);
- }
- }
- log(caller + " error: " + errorCode);
- return errorCode;
- }
-
- /**
- * Registers for the satellite provision state changed.
- *
- * @param subId The subId of the subscription associated with the satellite service.
- * @param callback The callback to handle the satellite provision state changed event.
- *
- * @return The {@link SatelliteManager.SatelliteError} result of the operation.
- */
- @SatelliteManager.SatelliteError private int registerForSatelliteProvisionStateChangedInternal(
- int subId, @Nullable ISatelliteProvisionStateCallback callback) {
- if (!isSatelliteSupported()) {
- return SatelliteManager.SATELLITE_NOT_SUPPORTED;
- }
-
- final int validSubId = getValidSatelliteSubId(subId);
- Phone phone = getPhoneOrDefault(validSubId, "registerForSatelliteProvisionStateChanged");
- if (phone == null) {
- return SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE;
- }
-
- SatelliteProvisionStateChangedHandler satelliteProvisionStateChangedHandler =
- mSatelliteProvisionStateChangedHandlers.get(validSubId);
- if (satelliteProvisionStateChangedHandler == null) {
- satelliteProvisionStateChangedHandler = new SatelliteProvisionStateChangedHandler(
- Looper.getMainLooper(), validSubId);
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.registerForSatelliteProvisionStateChanged(
- satelliteProvisionStateChangedHandler,
- SatelliteProvisionStateChangedHandler.EVENT_PROVISION_STATE_CHANGED, null);
- } else {
- phone.registerForSatelliteProvisionStateChanged(
- satelliteProvisionStateChangedHandler,
- SatelliteProvisionStateChangedHandler.EVENT_PROVISION_STATE_CHANGED, null);
- }
- }
-
- if (callback != null) {
- satelliteProvisionStateChangedHandler.addListener(callback);
- }
- mSatelliteProvisionStateChangedHandlers.put(
- validSubId, satelliteProvisionStateChangedHandler);
- return SatelliteManager.SATELLITE_ERROR_NONE;
- }
-
- private void handleStartSatellitePositionUpdatesDone(@NonNull AsyncResult ar) {
- MainThreadRequest request = (MainThreadRequest) ar.userObj;
- SatellitePositionUpdateArgument arg = (SatellitePositionUpdateArgument) request.argument;
- int errorCode = getSatelliteError(
- ar, "handleStartSatellitePositionUpdatesDone", false);
- arg.errorCallback.accept(errorCode);
-
- if (errorCode != SatelliteManager.SATELLITE_ERROR_NONE) {
- /**
- * We need to remove the callback from our listener list since the caller might not call
- * {@link #stopSatellitePositionUpdates(int, IIntegerConsumer, ISatellitePositionUpdateCallback)}
- * to unregister the callback in case of failure.
- */
- SatellitePositionUpdateHandler handler =
- mSatellitePositionUpdateHandlers.get(arg.subId);
- if (handler != null) {
- handler.removeListener(arg.callback);
-
- if (!handler.hasListeners()) {
- mSatellitePositionUpdateHandlers.remove(arg.subId);
-
- if (mIsSatelliteServiceSupported) {
- mSatelliteServiceController.unregisterForSatellitePositionInfoChanged(
- handler);
- mSatelliteServiceController.unregisterForDatagramTransferStateChanged(
- handler);
- } else {
- Phone phone = getPhoneFromRequest(request);
- if (phone == null) {
- loge("handleStartSatellitePositionUpdatesDone: phone is null");
- } else {
- phone.unregisterForSatellitePositionInfoChanged(handler);
- // TODO: unregisterForDatagramTransferStateChanged through
- // SatelliteController
- }
- }
- }
- }
- }
- }
-
- /**
* Check whether the caller (or self, if not processing an IPC) can read device identifiers.
*
* <p>This method behaves in one of the following ways: