Loading flags/network.aconfig +1 −1 Original line number Diff line number Diff line Loading @@ -53,5 +53,5 @@ flag { is_exported: true namespace: "telephony" description: "Guard system API for vendor-specific classifications of cellular ID disclosures" bug: "355062720" bug: "385338654" } src/java/com/android/internal/telephony/RILUtils.java +0 −60 Original line number Diff line number Diff line Loading @@ -1506,28 +1506,6 @@ public class RILUtils { if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EDGE) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EDGE; } // convert both IS95A/IS95B to CDMA as network mode doesn't support CDMA if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95A) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95B) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EHRPD) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSUPA) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA; } Loading Loading @@ -1580,25 +1558,6 @@ public class RILUtils { if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EDGE; } // convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.IS95A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EHRPD; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSUPA; } Loading Loading @@ -1651,25 +1610,6 @@ public class RILUtils { if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EDGE; } // convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) { raf |= android.hardware.radio.RadioAccessFamily.IS95A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) { raf |= android.hardware.radio.RadioAccessFamily.ONE_X_RTT; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_0; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_B; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EHRPD; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) { raf |= android.hardware.radio.RadioAccessFamily.HSUPA; } Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +4 −4 Original line number Diff line number Diff line Loading @@ -3888,10 +3888,6 @@ public class DataNetworkController extends Handler { return false; } if (areNetworkAvailableServicesChanged(oldPsNri, newPsNri)) { return true; } if (oldPsNri == null || oldPsNri.getAccessNetworkTechnology() != newPsNri.getAccessNetworkTechnology() || (!oldPsNri.isInService() && newPsNri.isInService()) Loading @@ -3900,6 +3896,10 @@ public class DataNetworkController extends Handler { return true; } if (areNetworkAvailableServicesChanged(oldPsNri, newPsNri)) { return true; } // If CS connection is back to service on non-DDS, reevaluate for potential PS if (!serviceStateAllowsPSAttach(oldSS, transport) && serviceStateAllowsPSAttach(newSS, transport)) { Loading src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java +32 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.Message; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.telecom.TelecomManager; import android.telephony.Annotation.RadioPowerState; import android.telephony.Annotation.ValidationStatus; import android.telephony.CellSignalStrength; Loading Loading @@ -818,6 +819,12 @@ public class DataStallRecoveryManager extends Handler { return false; } // Skip recovery if it can cause an emergrncy call to drop if (isInEmergencyCall()) { logl("skip data stall recovery as there is in an emergency call"); return false; } // Skip recovery if it can cause a call to drop if (!isPhoneStateIdle() && getRecoveryAction() > RECOVERY_ACTION_CLEANUP) { logl("skip data stall recovery as there is an active call"); Loading Loading @@ -880,6 +887,31 @@ public class DataStallRecoveryManager extends Handler { return true; } /** * Checks if any of the available phones are currently in an emergency call * or in Emergency Callback Mode (ECM). * * @return {@code true} if the device is currently in an emergency call * or if at least one of the available phones is in ECM; * {@code false} otherwise. */ private boolean isInEmergencyCall() { TelecomManager mTelecomManager = mPhone .getContext().getSystemService(TelecomManager.class); if (mTelecomManager != null && mTelecomManager.isInEmergencyCall()) { logl("Emergency call detected on the device"); return true; } for (Phone phone : PhoneFactory.getPhones()) { if (phone.isInEcm()) { logl("ECM detected on phone" + phone.getPhoneId()); return true; } } return false; } /** * Set the validation status into metrics. * Loading src/java/com/android/internal/telephony/euicc/EuiccController.java +16 −5 Original line number Diff line number Diff line Loading @@ -755,7 +755,9 @@ public class EuiccController extends IEuiccController.Stub { mCallbackIntent, callerHasAdminPrivileges, getCurrentEmbeddedSubscriptionIds(cardId)); } else { Log.e(TAG, "Caller does not have carrier privilege in metadata."); Log.e(TAG, "Caller does not have carrier privilege in metadata and is does not " + "have admin privileges, mCallingPackage=" + mCallingPackage); sendResult(mCallbackIntent, ERROR, null /* extrasIntent */); } } else { // !mWithUserConsent Loading Loading @@ -1082,7 +1084,6 @@ public class EuiccController extends IEuiccController.Stub { public void deleteSubscription(int cardId, int subscriptionId, String callingPackage, PendingIntent callbackIntent) { boolean callerCanWriteEmbeddedSubscriptions = callerCanWriteEmbeddedSubscriptions(); boolean callerIsAdmin = callerCanManageDevicePolicyManagedSubscriptions(callingPackage); mAppOpsManager.checkPackage(Binder.getCallingUid(), callingPackage); long token = Binder.clearCallingIdentity(); Loading @@ -1093,14 +1094,17 @@ public class EuiccController extends IEuiccController.Stub { sendResult(callbackIntent, ERROR, null /* extrasIntent */); return; } boolean adminOwned = callerIsAdmin && sub.getGroupOwner().equals(callingPackage); boolean managedByCallingAdminPackage = callerCanManageDevicePolicyManagedSubscriptions(callingPackage) && isSubscriptionDevicePolicyManaged( sub, callingPackage); // For both single active SIM device and multi-active SIM device, if the caller is // system or the caller manage the target subscription, we let it continue. This is // because deleting subscription won't change status of any other subscriptions. if (!callerCanWriteEmbeddedSubscriptions && !canManageSubscription(sub, callingPackage) && !adminOwned) { Log.e(TAG, "No permissions: " + subscriptionId + " adminOwned=" + adminOwned); && !managedByCallingAdminPackage) { Log.e(TAG, "No permissions to delete subscription: " + subscriptionId); sendResult(callbackIntent, ERROR, null /* extrasIntent */); return; } Loading Loading @@ -2204,6 +2208,13 @@ public class EuiccController extends IEuiccController.Stub { return userContext.getSystemService(DevicePolicyManager.class); } private boolean isSubscriptionDevicePolicyManaged(@NonNull SubscriptionInfo info, @NonNull String callingPackage) { DevicePolicyManager devicePolicyManager = getDevicePolicyManager(); return devicePolicyManager != null && devicePolicyManager.isSubscriptionEnterpriseManaged( info, callingPackage); } private boolean callerCanManageDevicePolicyManagedSubscriptions(String callingPackage) { DevicePolicyManager devicePolicyManager = getDevicePolicyManager(); boolean isAdmin = Loading Loading
flags/network.aconfig +1 −1 Original line number Diff line number Diff line Loading @@ -53,5 +53,5 @@ flag { is_exported: true namespace: "telephony" description: "Guard system API for vendor-specific classifications of cellular ID disclosures" bug: "355062720" bug: "385338654" }
src/java/com/android/internal/telephony/RILUtils.java +0 −60 Original line number Diff line number Diff line Loading @@ -1506,28 +1506,6 @@ public class RILUtils { if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EDGE) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EDGE; } // convert both IS95A/IS95B to CDMA as network mode doesn't support CDMA if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95A) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95B) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EHRPD) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD; } if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSUPA) != 0) { networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA; } Loading Loading @@ -1580,25 +1558,6 @@ public class RILUtils { if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EDGE; } // convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.IS95A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.EHRPD; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) { raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSUPA; } Loading Loading @@ -1651,25 +1610,6 @@ public class RILUtils { if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EDGE; } // convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) { raf |= android.hardware.radio.RadioAccessFamily.IS95A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) { raf |= android.hardware.radio.RadioAccessFamily.ONE_X_RTT; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_0; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_A; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EVDO_B; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) { raf |= android.hardware.radio.RadioAccessFamily.EHRPD; } if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) { raf |= android.hardware.radio.RadioAccessFamily.HSUPA; } Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +4 −4 Original line number Diff line number Diff line Loading @@ -3888,10 +3888,6 @@ public class DataNetworkController extends Handler { return false; } if (areNetworkAvailableServicesChanged(oldPsNri, newPsNri)) { return true; } if (oldPsNri == null || oldPsNri.getAccessNetworkTechnology() != newPsNri.getAccessNetworkTechnology() || (!oldPsNri.isInService() && newPsNri.isInService()) Loading @@ -3900,6 +3896,10 @@ public class DataNetworkController extends Handler { return true; } if (areNetworkAvailableServicesChanged(oldPsNri, newPsNri)) { return true; } // If CS connection is back to service on non-DDS, reevaluate for potential PS if (!serviceStateAllowsPSAttach(oldSS, transport) && serviceStateAllowsPSAttach(newSS, transport)) { Loading
src/java/com/android/internal/telephony/data/DataStallRecoveryManager.java +32 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.Message; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.telecom.TelecomManager; import android.telephony.Annotation.RadioPowerState; import android.telephony.Annotation.ValidationStatus; import android.telephony.CellSignalStrength; Loading Loading @@ -818,6 +819,12 @@ public class DataStallRecoveryManager extends Handler { return false; } // Skip recovery if it can cause an emergrncy call to drop if (isInEmergencyCall()) { logl("skip data stall recovery as there is in an emergency call"); return false; } // Skip recovery if it can cause a call to drop if (!isPhoneStateIdle() && getRecoveryAction() > RECOVERY_ACTION_CLEANUP) { logl("skip data stall recovery as there is an active call"); Loading Loading @@ -880,6 +887,31 @@ public class DataStallRecoveryManager extends Handler { return true; } /** * Checks if any of the available phones are currently in an emergency call * or in Emergency Callback Mode (ECM). * * @return {@code true} if the device is currently in an emergency call * or if at least one of the available phones is in ECM; * {@code false} otherwise. */ private boolean isInEmergencyCall() { TelecomManager mTelecomManager = mPhone .getContext().getSystemService(TelecomManager.class); if (mTelecomManager != null && mTelecomManager.isInEmergencyCall()) { logl("Emergency call detected on the device"); return true; } for (Phone phone : PhoneFactory.getPhones()) { if (phone.isInEcm()) { logl("ECM detected on phone" + phone.getPhoneId()); return true; } } return false; } /** * Set the validation status into metrics. * Loading
src/java/com/android/internal/telephony/euicc/EuiccController.java +16 −5 Original line number Diff line number Diff line Loading @@ -755,7 +755,9 @@ public class EuiccController extends IEuiccController.Stub { mCallbackIntent, callerHasAdminPrivileges, getCurrentEmbeddedSubscriptionIds(cardId)); } else { Log.e(TAG, "Caller does not have carrier privilege in metadata."); Log.e(TAG, "Caller does not have carrier privilege in metadata and is does not " + "have admin privileges, mCallingPackage=" + mCallingPackage); sendResult(mCallbackIntent, ERROR, null /* extrasIntent */); } } else { // !mWithUserConsent Loading Loading @@ -1082,7 +1084,6 @@ public class EuiccController extends IEuiccController.Stub { public void deleteSubscription(int cardId, int subscriptionId, String callingPackage, PendingIntent callbackIntent) { boolean callerCanWriteEmbeddedSubscriptions = callerCanWriteEmbeddedSubscriptions(); boolean callerIsAdmin = callerCanManageDevicePolicyManagedSubscriptions(callingPackage); mAppOpsManager.checkPackage(Binder.getCallingUid(), callingPackage); long token = Binder.clearCallingIdentity(); Loading @@ -1093,14 +1094,17 @@ public class EuiccController extends IEuiccController.Stub { sendResult(callbackIntent, ERROR, null /* extrasIntent */); return; } boolean adminOwned = callerIsAdmin && sub.getGroupOwner().equals(callingPackage); boolean managedByCallingAdminPackage = callerCanManageDevicePolicyManagedSubscriptions(callingPackage) && isSubscriptionDevicePolicyManaged( sub, callingPackage); // For both single active SIM device and multi-active SIM device, if the caller is // system or the caller manage the target subscription, we let it continue. This is // because deleting subscription won't change status of any other subscriptions. if (!callerCanWriteEmbeddedSubscriptions && !canManageSubscription(sub, callingPackage) && !adminOwned) { Log.e(TAG, "No permissions: " + subscriptionId + " adminOwned=" + adminOwned); && !managedByCallingAdminPackage) { Log.e(TAG, "No permissions to delete subscription: " + subscriptionId); sendResult(callbackIntent, ERROR, null /* extrasIntent */); return; } Loading Loading @@ -2204,6 +2208,13 @@ public class EuiccController extends IEuiccController.Stub { return userContext.getSystemService(DevicePolicyManager.class); } private boolean isSubscriptionDevicePolicyManaged(@NonNull SubscriptionInfo info, @NonNull String callingPackage) { DevicePolicyManager devicePolicyManager = getDevicePolicyManager(); return devicePolicyManager != null && devicePolicyManager.isSubscriptionEnterpriseManaged( info, callingPackage); } private boolean callerCanManageDevicePolicyManagedSubscriptions(String callingPackage) { DevicePolicyManager devicePolicyManager = getDevicePolicyManager(); boolean isAdmin = Loading