diff options
Diffstat (limited to 'telephony/java/android')
4 files changed, 74 insertions, 15 deletions
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 9954de2da67e..f01519f934f3 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -286,6 +286,21 @@ public class CarrierConfigManager { "call_barring_default_service_class_int"; /** + * This carrier supports dialing USSD codes to enable/disable supplementary services such as + * call forwarding and call waiting over CDMA. + * <p> + * The supplementary service menu will still need to be set as visible, see + * {@link #KEY_CALL_FORWARDING_VISIBILITY_BOOL} and + * {@link #KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL}. + * <p> + * If this is set as false and the supplementary service menu is visible, the associated setting + * will be enabled and disabled based on the availability of supplementary services over UT. See + * {@link #KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL}. + * @hide + */ + public static final String KEY_SUPPORT_SS_OVER_CDMA_BOOL = "support_ss_over_cdma_bool"; + + /** * Flag indicating whether the Phone app should ignore EVENT_SIM_NETWORK_LOCKED * events from the Sim. * If true, this will prevent the IccNetworkDepersonalizationPanel from being shown, and @@ -5120,6 +5135,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL, true); sDefaults.putBoolean(KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL, true); sDefaults.putInt(KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT, SERVICE_CLASS_VOICE); + sDefaults.putBoolean(KEY_SUPPORT_SS_OVER_CDMA_BOOL, false); sDefaults.putBoolean(KEY_CALL_FORWARDING_VISIBILITY_BOOL, true); sDefaults.putBoolean(KEY_CALL_FORWARDING_WHEN_UNREACHABLE_SUPPORTED_BOOL, true); sDefaults.putBoolean(KEY_CALL_FORWARDING_WHEN_UNANSWERED_SUPPORTED_BOOL, true); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index e0ab0a368a4f..255a61266ebf 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -13965,7 +13965,12 @@ public class TelephonyManager { IBooleanConsumer aidlConsumer = callback == null ? null : new IBooleanConsumer.Stub() { @Override public void accept(boolean result) { - executor.execute(() -> callback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> callback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }; diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java index 7ba6f36d28e2..36082dc8180e 100644 --- a/telephony/java/android/telephony/ims/ImsMmTelManager.java +++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java @@ -37,6 +37,7 @@ import android.telephony.ims.aidl.IImsCapabilityCallback; import android.telephony.ims.feature.ImsFeature; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; +import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.IIntegerConsumer; @@ -444,11 +445,17 @@ public class ImsMmTelManager implements RegistrationManager { iTelephony.getImsMmTelRegistrationState(mSubId, new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> stateCallback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> stateCallback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); + } catch (ServiceSpecificException | RemoteException e) { + Log.w("ImsMmTelManager", "Error getting registration state: " + e); + executor.execute(() -> stateCallback.accept(REGISTRATION_STATE_NOT_REGISTERED)); } } @@ -485,11 +492,18 @@ public class ImsMmTelManager implements RegistrationManager { new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> transportTypeCallback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> transportTypeCallback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); + } catch (ServiceSpecificException | RemoteException e) { + Log.w("ImsMmTelManager", "Error getting transport type: " + e); + executor.execute(() -> transportTypeCallback.accept( + AccessNetworkConstants.TRANSPORT_TYPE_INVALID)); } } @@ -803,7 +817,12 @@ public class ImsMmTelManager implements RegistrationManager { iTelephony.isMmTelCapabilitySupported(mSubId, new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> callback.accept(result == 1)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> callback.accept(result == 1)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }, capability, transportType); } catch (ServiceSpecificException sse) { @@ -1448,7 +1467,12 @@ public class ImsMmTelManager implements RegistrationManager { iTelephony.getImsMmTelFeatureState(mSubId, new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> callback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> callback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }); } catch (ServiceSpecificException sse) { diff --git a/telephony/java/android/telephony/ims/ImsRcsManager.java b/telephony/java/android/telephony/ims/ImsRcsManager.java index 370002634278..8d6fa4141b5c 100644 --- a/telephony/java/android/telephony/ims/ImsRcsManager.java +++ b/telephony/java/android/telephony/ims/ImsRcsManager.java @@ -299,11 +299,18 @@ public class ImsRcsManager { imsRcsController.getImsRcsRegistrationState(mSubId, new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> stateCallback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> stateCallback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); + } catch (ServiceSpecificException | RemoteException e) { + Log.w(TAG, "Get registration state error: " + e); + executor.execute(() -> stateCallback.accept( + RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED)); } } @@ -343,11 +350,18 @@ public class ImsRcsManager { new IIntegerConsumer.Stub() { @Override public void accept(int result) { - executor.execute(() -> transportTypeCallback.accept(result)); + final long identity = Binder.clearCallingIdentity(); + try { + executor.execute(() -> transportTypeCallback.accept(result)); + } finally { + Binder.restoreCallingIdentity(identity); + } } }); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); + } catch (ServiceSpecificException | RemoteException e) { + Log.w(TAG, "Get registration transport type error: " + e); + executor.execute(() -> transportTypeCallback.accept( + AccessNetworkConstants.TRANSPORT_TYPE_INVALID)); } } |