Merge "Apply new device ID access requirements to getNai"
diff --git a/jarjar-rules-shared.txt b/jarjar-rules-shared.txt
index a03c22f..6312825 100644
--- a/jarjar-rules-shared.txt
+++ b/jarjar-rules-shared.txt
@@ -2,11 +2,8 @@
rule android.os.Registrant* com.android.internal.telephony.Registrant@1
rule android.hidl.** android.internal.hidl.@1
rule android.util.LocalLog* com.android.internal.telephony.LocalLog@1
-rule android.util.Slog* com.android.internal.telephony.Slog@1
rule android.util.TimeUtils* com.android.internal.telephony.TimeUtils@1
rule com.android.internal.os.SomeArgs* com.android.internal.telephony.SomeArgs@1
-rule com.android.internal.util.ArrayUtils* com.android.internal.telephony.ArrayUtils@1
-rule com.android.internal.util.DumpUtils* com.android.internal.telephony.DumpUtils@1
rule com.android.internal.util.FastXmlSerializer* com.android.internal.telephony.FastXmlSerializer@1
rule com.android.internal.util.HexDump* com.android.internal.telephony.HexDump@1
rule com.android.internal.util.IndentingPrintWriter* com.android.internal.telephony.IndentingPrintWriter@1
@@ -14,4 +11,3 @@
rule com.android.internal.util.State* com.android.internal.telephony.State@1
rule com.android.internal.util.StateMachine* com.android.internal.telephony.StateMachine@1
rule com.android.internal.util.UserIcons* com.android.internal.telephony.UserIcons@1
-rule com.android.internal.util.XmlUtils* com.android.internal.telephony.XmlUtils@1
diff --git a/src/java/com/android/internal/telephony/AppSmsManager.java b/src/java/com/android/internal/telephony/AppSmsManager.java
index 30de674..f473c9a 100644
--- a/src/java/com/android/internal/telephony/AppSmsManager.java
+++ b/src/java/com/android/internal/telephony/AppSmsManager.java
@@ -20,16 +20,10 @@
import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.app.PendingIntent;
-import android.app.role.IRoleManager;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.ServiceManager.ServiceNotFoundException;
import android.provider.Telephony.Sms.Intents;
-import android.telephony.IFinancialSmsCallback;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.telephony.SubscriptionManager;
@@ -147,24 +141,6 @@
}
/**
- * Get filtered SMS messages for financial app.
- */
- public void getSmsMessagesForFinancialApp(
- String callingPkg, Bundle params, final IFinancialSmsCallback callback) {
- try {
- IRoleManager roleManager = IRoleManager.Stub.asInterface(
- ServiceManager.getServiceOrThrow(Context.ROLE_SERVICE));
- roleManager.getSmsMessagesForFinancialApp(callingPkg, params, callback);
- } catch (RemoteException e) {
- Log.e(LOG_TAG, "Receive RemoteException.");
- // do nothing
- } catch (ServiceNotFoundException e) {
- Log.e(LOG_TAG, "Service not found.");
- // do nothing
- }
- }
-
- /**
* Handle an incoming SMS_DELIVER_ACTION intent if it is an app-only SMS.
*/
public boolean handleSmsReceivedIntent(Intent intent) {
diff --git a/src/java/com/android/internal/telephony/BaseCommands.java b/src/java/com/android/internal/telephony/BaseCommands.java
index 7004ef2..f0a718a 100644
--- a/src/java/com/android/internal/telephony/BaseCommands.java
+++ b/src/java/com/android/internal/telephony/BaseCommands.java
@@ -101,6 +101,7 @@
protected RegistrantList mPhysicalChannelConfigurationRegistrants = new RegistrantList();
protected RegistrantList mLceInfoRegistrants = new RegistrantList();
protected RegistrantList mEmergencyNumberListRegistrants = new RegistrantList();
+ protected RegistrantList mUiccApplicationsEnablementRegistrants = new RegistrantList();
@UnsupportedAppUsage
protected Registrant mGsmSmsRegistrant;
@@ -952,7 +953,7 @@
@Override
public void registerForModemReset(Handler h, int what, Object obj) {
- mModemResetRegistrants.add(new Registrant(h, what, obj));
+ mModemResetRegistrants.addUnique(h, what, obj);
}
@Override
@@ -962,7 +963,7 @@
@Override
public void registerForPcoData(Handler h, int what, Object obj) {
- mPcoDataRegistrants.add(new Registrant(h, what, obj));
+ mPcoDataRegistrants.addUnique(h, what, obj);
}
@Override
@@ -972,7 +973,7 @@
@Override
public void registerForCarrierInfoForImsiEncryption(Handler h, int what, Object obj) {
- mCarrierInfoForImsiEncryptionRegistrants.add(new Registrant(h, what, obj));
+ mCarrierInfoForImsiEncryptionRegistrants.addUnique(h, what, obj);
}
@Override
@@ -993,4 +994,26 @@
mNattKeepaliveStatusRegistrants.remove(h);
}
}
+
+ /**
+ * Registers the handler for RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED events.
+ *
+ * @param h Handler for notification message.
+ * @param what User-defined message code.
+ * @param obj User object.
+ */
+ @Override
+ public void registerUiccApplicationEnablementChanged(Handler h, int what, Object obj) {
+ mUiccApplicationsEnablementRegistrants.addUnique(h, what, obj);
+ }
+
+ /**
+ * Unregisters the handler for RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED events.
+ *
+ * @param h Handler for notification message.
+ */
+ @Override
+ public void unregisterUiccApplicationEnablementChanged(Handler h) {
+ mUiccApplicationsEnablementRegistrants.remove(h);
+ }
}
diff --git a/src/java/com/android/internal/telephony/BtSmsInterfaceManager.java b/src/java/com/android/internal/telephony/BtSmsInterfaceManager.java
index 67e07bc..ea6a6ec 100644
--- a/src/java/com/android/internal/telephony/BtSmsInterfaceManager.java
+++ b/src/java/com/android/internal/telephony/BtSmsInterfaceManager.java
@@ -17,12 +17,11 @@
package com.android.internal.telephony;
-import android.app.ActivityThread;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothMapClient;
import android.bluetooth.BluetoothProfile;
+import android.content.Context;
import android.net.Uri;
import android.telecom.PhoneAccount;
import android.telephony.SmsManager;
@@ -40,7 +39,7 @@
/**
* Sends text through connected Bluetooth device
*/
- public void sendText(String destAddr, String text, PendingIntent sentIntent,
+ public void sendText(Context context, String destAddr, String text, PendingIntent sentIntent,
PendingIntent deliveryIntent, SubscriptionInfo info) {
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter == null) {
@@ -54,7 +53,7 @@
sendErrorInPendingIntent(sentIntent, SmsManager.RESULT_INVALID_BLUETOOTH_ADDRESS);
return;
}
- btAdapter.getProfileProxy(ActivityThread.currentApplication().getApplicationContext(),
+ btAdapter.getProfileProxy(context.getApplicationContext(),
new MapMessageSender(destAddr, text, device, sentIntent, deliveryIntent),
BluetoothProfile.MAP_CLIENT);
}
@@ -99,14 +98,19 @@
if (profile != BluetoothProfile.MAP_CLIENT) {
return;
}
- BluetoothMapClient mapProfile = (BluetoothMapClient) proxy;
+ // Comment out the method for mainline (b/143848423). The profile is not for a phone,
+ // so it will not be enabled.
+/* BluetoothMapClient mapProfile = (BluetoothMapClient) proxy;
if (mMessage != null) {
Log.d(LOG_TAG, "Sending message thru bluetooth");
mapProfile.sendMessage(mDevice, mDestAddr, mMessage, mSentIntent, mDeliveryIntent);
mMessage = null;
}
BluetoothAdapter.getDefaultAdapter()
- .closeProfileProxy(BluetoothProfile.MAP_CLIENT, mapProfile);
+ .closeProfileProxy(BluetoothProfile.MAP_CLIENT, mapProfile);*/
+ if (mMessage != null) {
+ throw new RuntimeException("Can't send message through BluetoothMapClient");
+ }
}
@Override
diff --git a/src/java/com/android/internal/telephony/CellBroadcastHandler.java b/src/java/com/android/internal/telephony/CellBroadcastHandler.java
index 3d8cb0f..af0fdd8 100644
--- a/src/java/com/android/internal/telephony/CellBroadcastHandler.java
+++ b/src/java/com/android/internal/telephony/CellBroadcastHandler.java
@@ -33,7 +33,6 @@
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -52,6 +51,7 @@
import android.util.Log;
import com.android.internal.telephony.metrics.TelephonyMetrics;
+import com.android.internal.telephony.util.TelephonyUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -231,7 +231,7 @@
intent.putExtra(EXTRA_MESSAGE, message);
SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId());
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
// Send additional broadcast intent to the specified package. This is only for sl4a
// automation tests.
final String additionalPackage = Settings.Secure.getString(
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index 273de72..c67c675 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -656,6 +656,22 @@
void unregisterForRilConnected(Handler h);
/**
+ * Registers the handler for RIL_UNSOL_SIM_DETACH_FROM_NETWORK_CONFIG_CHANGED events.
+ *
+ * @param h Handler for notification message.
+ * @param what User-defined message code.
+ * @param obj User object.
+ */
+ default void registerUiccApplicationEnablementChanged(Handler h, int what, Object obj) {};
+
+ /**
+ * Unregisters the handler for RIL_UNSOL_SIM_DETACH_FROM_NETWORK_CONFIG_CHANGED events.
+ *
+ * @param h Handler for notification message.
+ */
+ default void unregisterUiccApplicationEnablementChanged(Handler h) {};
+
+ /**
* Supply the ICC PIN to the ICC card
*
* returned message
@@ -2393,6 +2409,28 @@
*/
default void getModemStatus(Message result) {};
+ /**
+ * Enable or disable uicc applications on the SIM.
+ *
+ * @param enable enable or disable UiccApplications on the SIM.
+ * @param onCompleteMessage a Message to return to the requester
+ */
+ default void enableUiccApplications(boolean enable, Message onCompleteMessage) {}
+
+ /**
+ * Whether uicc applications are enabled or not.
+ *
+ * @param onCompleteMessage a Message to return to the requester
+ */
+ default void areUiccApplicationsEnabled(Message onCompleteMessage) {}
+
+ /**
+ * Whether {@link #enableUiccApplications} is supported, based on IRadio version.
+ */
+ default boolean canToggleUiccApplicationsEnablement() {
+ return false;
+ }
+
default List<ClientRequestStats> getClientRequestStats() {
return null;
}
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 898f7b9..8405e5f 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -88,6 +88,7 @@
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
+import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccException;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccVmNotSupportedException;
@@ -152,6 +153,7 @@
private String mMeid;
// string to define how the carrier specifies its own ota sp number
private String mCarrierOtaSpNumSchema;
+ private boolean mUiccApplicationsEnabled = true;
// A runnable which is used to automatically exit from Ecm after a period of time.
private Runnable mExitEcmRunnable = new Runnable() {
@@ -324,6 +326,8 @@
mCi.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
mCi.registerForOn(this, EVENT_RADIO_ON, null);
mCi.registerForRadioStateChanged(this, EVENT_RADIO_STATE_CHANGED, null);
+ mCi.registerUiccApplicationEnablementChanged(this, EVENT_UICC_APPS_ENABLEMENT_CHANGED,
+ null);
mCi.setOnSuppServiceNotification(this, EVENT_SSN, null);
//GSM
@@ -2404,6 +2408,8 @@
mCi.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE));
mCi.getRadioCapability(obtainMessage(EVENT_GET_RADIO_CAPABILITY));
+ mCi.areUiccApplicationsEnabled(obtainMessage(EVENT_GET_UICC_APPS_ENABLEMENT_DONE));
+
startLceAfterRadioIsAvailable();
}
@@ -2843,6 +2849,18 @@
onComplete.sendToTarget();
}
break;
+ case EVENT_GET_UICC_APPS_ENABLEMENT_DONE:
+ case EVENT_UICC_APPS_ENABLEMENT_CHANGED: {
+ ar = (AsyncResult) msg.obj;
+ if (ar == null) return;
+ if (ar.exception != null) {
+ logd("Received exception on event" + msg.what + " : " + ar.exception);
+ return;
+ }
+
+ mUiccApplicationsEnabled = (boolean) ar.result;
+ break;
+ }
default:
super.handleMessage(msg);
}
@@ -4036,4 +4054,30 @@
Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF);
updateUiTtyMode(ttyMode);
}
+
+ // Enable or disable uicc applications.
+ @Override
+ public void enableUiccApplications(boolean enable, Message onCompleteMessage) {
+ // First check if card is present. Otherwise mUiccApplicationsDisabled doesn't make
+ // any sense.
+ UiccSlot slot = mUiccController.getUiccSlotForPhone(mPhoneId);
+ if (slot == null || slot.getCardState() != IccCardStatus.CardState.CARDSTATE_PRESENT) {
+ if (onCompleteMessage != null) {
+ AsyncResult.forMessage(onCompleteMessage, null,
+ new IllegalStateException("No SIM card is present"));
+ onCompleteMessage.sendToTarget();
+ }
+ return;
+ }
+
+ mCi.enableUiccApplications(enable, onCompleteMessage);
+ }
+
+ /**
+ * Whether disabling a physical subscription is supported or not.
+ */
+ @Override
+ public boolean canDisablePhysicalSubscription() {
+ return mCi.canToggleUiccApplicationsEnablement();
+ }
}
diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
index d2f256a..7e3979e 100644
--- a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
+++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
@@ -24,8 +24,11 @@
import android.annotation.UnsupportedAppUsage;
import android.app.AppOpsManager;
import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
@@ -36,9 +39,12 @@
import android.os.Message;
import android.os.UserManager;
import android.provider.Telephony;
+import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
+import android.telephony.SmsCbMessage;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
+import android.telephony.SubscriptionManager;
import android.telephony.emergency.EmergencyNumber;
import android.util.LocalLog;
import android.util.Log;
@@ -181,6 +187,21 @@
mAppOps = appOps;
mDispatchersController = dispatchersController;
mSmsPermissions = new SmsPermissions(phone, context, appOps);
+
+ mContext.registerReceiver(
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED
+ .equals(intent.getAction())) {
+ if (mPhone.getPhoneId() == intent.getIntExtra(
+ CarrierConfigManager.EXTRA_SLOT_INDEX,
+ SubscriptionManager.INVALID_SIM_SLOT_INDEX)) {
+ mCellBroadcastRangeManager.updateRanges();
+ }
+ }
+ }
+ }, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED));
}
protected void markMessagesAsRead(ArrayList<byte[]> messages) {
@@ -881,9 +902,9 @@
mContext.enforceCallingPermission("android.permission.RECEIVE_EMERGENCY_BROADCAST",
"enabling cell broadcast range [" + startMessageId + "-" + endMessageId + "]. "
+ "ranType=" + ranType);
- if (ranType == SmsManager.CELL_BROADCAST_RAN_TYPE_GSM) {
+ if (ranType == SmsCbMessage.MESSAGE_FORMAT_3GPP) {
return enableGsmBroadcastRange(startMessageId, endMessageId);
- } else if (ranType == SmsManager.CELL_BROADCAST_RAN_TYPE_CDMA) {
+ } else if (ranType == SmsCbMessage.MESSAGE_FORMAT_3GPP2) {
return enableCdmaBroadcastRange(startMessageId, endMessageId);
} else {
throw new IllegalArgumentException("Not a supported RAN Type");
@@ -894,9 +915,9 @@
mContext.enforceCallingPermission("android.permission.RECEIVE_EMERGENCY_BROADCAST",
"disabling cell broadcast range [" + startMessageId + "-" + endMessageId
+ "]. ranType=" + ranType);
- if (ranType == SmsManager.CELL_BROADCAST_RAN_TYPE_GSM ) {
+ if (ranType == SmsCbMessage.MESSAGE_FORMAT_3GPP) {
return disableGsmBroadcastRange(startMessageId, endMessageId);
- } else if (ranType == SmsManager.CELL_BROADCAST_RAN_TYPE_CDMA) {
+ } else if (ranType == SmsCbMessage.MESSAGE_FORMAT_3GPP2) {
return disableCdmaBroadcastRange(startMessageId, endMessageId);
} else {
throw new IllegalArgumentException("Not a supported RAN Type");
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index 808c1b7..6e54f7c 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -41,7 +41,6 @@
import android.net.Uri;
import android.os.AsyncResult;
import android.os.Binder;
-import android.os.Build;
import android.os.Bundle;
import android.os.IDeviceIdleController;
import android.os.Message;
@@ -65,6 +64,7 @@
import com.android.internal.telephony.SmsConstants.MessageClass;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.util.NotificationChannelController;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.HexDump;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
@@ -333,7 +333,7 @@
default: {
String errorText = "processMessage: unhandled message type " + msg.what +
" currState=" + getCurrentState().getName();
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
loge("---- Dumping InboundSmsHandler ----");
loge("Total records=" + getLogRecCount());
for (int i = Math.max(getLogRecSize() - 20, 0); i < getLogRecSize(); i++) {
diff --git a/src/java/com/android/internal/telephony/LocaleTracker.java b/src/java/com/android/internal/telephony/LocaleTracker.java
index 4b8a043..2c43a39 100755
--- a/src/java/com/android/internal/telephony/LocaleTracker.java
+++ b/src/java/com/android/internal/telephony/LocaleTracker.java
@@ -26,7 +26,6 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncResult;
-import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -43,6 +42,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.MccTable.MccMnc;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.IndentingPrintWriter;
import java.io.FileDescriptor;
@@ -58,7 +58,6 @@
*/
public class LocaleTracker extends Handler {
private static final boolean DBG = true;
- private static final String TAG = LocaleTracker.class.getSimpleName();
/** Event for getting cell info from the modem */
private static final int EVENT_REQUEST_CELL_INFO = 1;
@@ -125,6 +124,8 @@
/** The maximum fail count to prevent delay time overflow */
private static final int MAX_FAIL_COUNT = 30;
+ private String mTag;
+
private final Phone mPhone;
private final NitzStateMachine mNitzStateMachine;
@@ -241,10 +242,11 @@
mPhone = phone;
mNitzStateMachine = nitzStateMachine;
mSimState = TelephonyManager.SIM_STATE_UNKNOWN;
+ mTag = LocaleTracker.class.getSimpleName() + "-" + mPhone.getPhoneId();
final IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED);
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
filter.addAction(ACTION_COUNTRY_OVERRIDE);
}
mPhone.getContext().registerReceiver(mBroadcastReceiver, filter);
@@ -611,11 +613,11 @@
}
private void log(String msg) {
- Rlog.d(TAG, msg);
+ Rlog.d(mTag, msg);
}
private void loge(String msg) {
- Rlog.e(TAG, msg);
+ Rlog.e(mTag, msg);
}
/**
@@ -627,7 +629,7 @@
*/
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ");
- pw.println("LocaleTracker:");
+ pw.println("LocaleTracker-" + mPhone.getPhoneId() + ":");
ipw.increaseIndent();
ipw.println("mIsTracking = " + mIsTracking);
ipw.println("mOperatorNumeric = " + mOperatorNumeric);
diff --git a/src/java/com/android/internal/telephony/MccTable.java b/src/java/com/android/internal/telephony/MccTable.java
index d4c2e9a..01479f9 100644
--- a/src/java/com/android/internal/telephony/MccTable.java
+++ b/src/java/com/android/internal/telephony/MccTable.java
@@ -26,13 +26,14 @@
import android.os.Build;
import android.os.RemoteException;
import android.os.SystemProperties;
+import android.telephony.Rlog;
import android.text.TextUtils;
-import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.LocaleStore;
import com.android.internal.app.LocaleStore.LocaleInfo;
+import com.android.internal.telephony.util.TelephonyUtils;
import libcore.timezone.TelephonyLookup;
import libcore.timezone.TelephonyNetwork;
@@ -260,7 +261,7 @@
public static String defaultLanguageForMcc(int mcc) {
MccEntry entry = entryForMcc(mcc);
if (entry == null) {
- Slog.d(LOG_TAG, "defaultLanguageForMcc(" + mcc + "): no country for mcc");
+ Rlog.d(LOG_TAG, "defaultLanguageForMcc(" + mcc + "): no country for mcc");
return null;
}
@@ -274,8 +275,8 @@
// Ask CLDR for the language this country uses...
ULocale likelyLocale = ULocale.addLikelySubtags(new ULocale("und", country));
String likelyLanguage = likelyLocale.getLanguage();
- Slog.d(LOG_TAG, "defaultLanguageForMcc(" + mcc + "): country " + country + " uses " +
- likelyLanguage);
+ Rlog.d(LOG_TAG, "defaultLanguageForMcc(" + mcc + "): country " + country + " uses "
+ + likelyLanguage);
return likelyLanguage;
}
@@ -306,13 +307,13 @@
* @param mccmnc truncated imsi with just the MCC and MNC - MNC assumed to be from 4th to end
*/
public static void updateMccMncConfiguration(Context context, String mccmnc) {
- Slog.d(LOG_TAG, "updateMccMncConfiguration mccmnc='" + mccmnc);
+ Rlog.d(LOG_TAG, "updateMccMncConfiguration mccmnc='" + mccmnc);
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
String overrideMcc = SystemProperties.get("persist.sys.override_mcc");
if (!TextUtils.isEmpty(overrideMcc)) {
mccmnc = overrideMcc;
- Slog.d(LOG_TAG, "updateMccMncConfiguration overriding mccmnc='" + mccmnc + "'");
+ Rlog.d(LOG_TAG, "updateMccMncConfiguration overriding mccmnc='" + mccmnc + "'");
}
}
@@ -323,11 +324,11 @@
mcc = Integer.parseInt(mccmnc.substring(0, 3));
mnc = Integer.parseInt(mccmnc.substring(3));
} catch (NumberFormatException | StringIndexOutOfBoundsException ex) {
- Slog.e(LOG_TAG, "Error parsing IMSI: " + mccmnc + ". ex=" + ex);
+ Rlog.e(LOG_TAG, "Error parsing IMSI: " + mccmnc + ". ex=" + ex);
return;
}
- Slog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc + ", mnc=" + mnc);
+ Rlog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc + ", mnc=" + mnc);
try {
Configuration config = new Configuration();
@@ -339,13 +340,13 @@
}
if (updateConfig) {
- Slog.d(LOG_TAG, "updateMccMncConfiguration updateConfig config=" + config);
+ Rlog.d(LOG_TAG, "updateMccMncConfiguration updateConfig config=" + config);
ActivityManager.getService().updateConfiguration(config);
} else {
- Slog.d(LOG_TAG, "updateMccMncConfiguration nothing to update");
+ Rlog.d(LOG_TAG, "updateMccMncConfiguration nothing to update");
}
} catch (RemoteException e) {
- Slog.e(LOG_TAG, "Can't update configuration", e);
+ Rlog.e(LOG_TAG, "Can't update configuration", e);
}
}
}
@@ -400,7 +401,7 @@
private static Locale getLocaleForLanguageCountry(Context context, String language,
String country) {
if (language == null) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: skipping no language");
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: skipping no language");
return null; // no match possible
}
if (country == null) {
@@ -428,8 +429,8 @@
if (l.getLanguage().equals(target.getLanguage())) {
// If we got a perfect match, we're done.
if (l.getCountry().equals(target.getCountry())) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: got perfect match: " +
- l.toLanguageTag());
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: got perfect match: "
+ + l.toLanguageTag());
return l;
}
@@ -439,13 +440,13 @@
}
if (languageMatches.isEmpty()) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: no locales for language " + language);
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: no locales for language " + language);
return null;
}
Locale bestMatch = lookupFallback(target, languageMatches);
if (bestMatch != null) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: got a fallback match: "
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: got a fallback match: "
+ bestMatch.toLanguageTag());
return bestMatch;
} else {
@@ -459,7 +460,7 @@
LocaleStore.fillCache(context);
LocaleInfo targetInfo = LocaleStore.getLocaleInfo(target);
if (targetInfo.isTranslated()) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: "
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: "
+ "target locale is translated: " + target);
return target;
}
@@ -469,12 +470,12 @@
// unless we get a perfect match later. Note that these come back in no
// particular order, so there's no reason to think the first match is
// a particularly good match.
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: got language-only match: "
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: got language-only match: "
+ language);
return languageMatches.get(0);
}
} catch (Exception e) {
- Slog.d(LOG_TAG, "getLocaleForLanguageCountry: exception", e);
+ Rlog.d(LOG_TAG, "getLocaleForLanguageCountry: exception", e);
}
return null;
@@ -494,14 +495,14 @@
String language = hasSimLanguage ? simLanguage : MccTable.defaultLanguageForMcc(mcc);
String country = MccTable.countryCodeForMcc(mcc);
- Slog.d(LOG_TAG, "getLocaleFromMcc(" + language + ", " + country + ", " + mcc);
+ Rlog.d(LOG_TAG, "getLocaleFromMcc(" + language + ", " + country + ", " + mcc);
final Locale locale = getLocaleForLanguageCountry(context, language, country);
// If we couldn't find a locale that matches the SIM language, give it a go again
// with the "likely" language for the given country.
if (locale == null && hasSimLanguage) {
language = MccTable.defaultLanguageForMcc(mcc);
- Slog.d(LOG_TAG, "[retry ] getLocaleFromMcc(" + language + ", " + country + ", " + mcc);
+ Rlog.d(LOG_TAG, "[retry ] getLocaleFromMcc(" + language + ", " + country + ", " + mcc);
return getLocaleForLanguageCountry(context, language, country);
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index db76e84..562d90e 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -27,7 +27,6 @@
import android.net.NetworkStats;
import android.net.Uri;
import android.os.AsyncResult;
-import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -83,6 +82,7 @@
import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UsimServiceTable;
+import com.android.internal.telephony.util.TelephonyUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -195,7 +195,9 @@
protected static final int EVENT_DEVICE_PROVISIONING_DATA_SETTING_CHANGE = 50;
protected static final int EVENT_GET_AVAILABLE_NETWORKS_DONE = 51;
- private static final int EVENT_ALL_DATA_DISCONNECTED = 52;
+ private static final int EVENT_ALL_DATA_DISCONNECTED = 52;
+ protected static final int EVENT_UICC_APPS_ENABLEMENT_CHANGED = 53;
+ protected static final int EVENT_GET_UICC_APPS_ENABLEMENT_DONE = 54;
protected static final int EVENT_LAST = EVENT_ALL_DATA_DISCONNECTED;
@@ -496,7 +498,7 @@
.makeAppSmsManager(context);
mLocalLog = new LocalLog(64);
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
mTelephonyTester = new TelephonyTester(this);
}
@@ -2585,7 +2587,8 @@
options.setBackgroundActivityStartsAllowed(true);
Intent intent = new Intent(TelephonyIntents.SECRET_CODE_ACTION,
Uri.parse("android_secret_code://" + code));
- intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ intent.addFlags(
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_FOREGROUND);
mContext.sendBroadcast(intent, null, options.toBundle());
// {@link TelephonyManager.ACTION_SECRET_CODE} will replace {@link
@@ -2593,7 +2596,8 @@
// that both of these two actions will be broadcast.
Intent secrectCodeIntent = new Intent(TelephonyManager.ACTION_SECRET_CODE,
Uri.parse("android_secret_code://" + code));
- secrectCodeIntent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ secrectCodeIntent.addFlags(
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_FOREGROUND);
mContext.sendBroadcast(secrectCodeIntent, null, options.toBundle());
}
}
@@ -4074,6 +4078,20 @@
}
/**
+ * Enable or disable uicc applications.
+ * @param enable whether to enable or disable uicc applications.
+ * @param onCompleteMessage callback for async operation. Ignored if blockingCall is true.
+ */
+ public void enableUiccApplications(boolean enable, Message onCompleteMessage) {}
+
+ /**
+ * Whether disabling a physical subscription is supported or not.
+ */
+ public boolean canDisablePhysicalSubscription() {
+ return false;
+ }
+
+ /**
* Get the HAL version.
*
* @return the current HalVersion
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index f725020..78346fb 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -58,7 +58,6 @@
import android.net.LinkProperties;
import android.net.NetworkUtils;
import android.os.AsyncResult;
-import android.os.Build;
import android.os.Handler;
import android.os.HwBinder;
import android.os.Message;
@@ -114,6 +113,7 @@
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.nano.TelephonyProto.SmsSession;
import com.android.internal.telephony.uicc.IccUtils;
+import com.android.internal.telephony.util.TelephonyUtils;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
@@ -1672,7 +1672,7 @@
mRILDefaultWorkSource);
if (RILJ_LOGD) {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
riljLog(rr.serialString() + "> iccIO: "
+ requestToString(rr.mRequest) + " command = 0x"
+ Integer.toHexString(command) + " fileId = 0x"
@@ -2671,7 +2671,8 @@
if (RILJ_LOGD) {
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = "
- + (Build.IS_DEBUGGABLE ? contents : censoredTerminalResponse(contents)));
+ + (TelephonyUtils.IS_DEBUGGABLE
+ ? contents : censoredTerminalResponse(contents)));
}
try {
@@ -3775,7 +3776,7 @@
mRILDefaultWorkSource);
if (RILJ_LOGD) {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
+ String.format(" cla = 0x%02X ins = 0x%02X", cla, instruction)
+ String.format(" p1 = 0x%02X p2 = 0x%02X p3 = 0x%02X", p1, p2, p3)
@@ -3802,7 +3803,7 @@
mRILDefaultWorkSource);
if (RILJ_LOGD) {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " aid = " + aid
+ " p2 = " + p2);
} else {
@@ -3853,7 +3854,7 @@
mRILDefaultWorkSource);
if (RILJ_LOGD) {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
+ String.format(" channel = %d", channel)
+ String.format(" cla = 0x%02X ins = 0x%02X", cla, instruction)
@@ -4843,6 +4844,98 @@
}
/**
+ * Enable or disable uicc applications on the SIM.
+ *
+ * @param enable whether to enable or disable uicc applications.
+ * @param onCompleteMessage a Message to return to the requester
+ */
+ @Override
+ public void enableUiccApplications(boolean enable, Message onCompleteMessage) {
+ IRadio radioProxy = getRadioProxy(onCompleteMessage);
+ if (radioProxy == null) {
+ Rlog.e(RIL.RILJ_LOG_TAG, "Radio Proxy object is null!");
+ if (onCompleteMessage != null) {
+ AsyncResult.forMessage(onCompleteMessage, null,
+ CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
+ onCompleteMessage.sendToTarget();
+ }
+ }
+
+ if (mRadioVersion.less(RADIO_HAL_VERSION_1_5)) {
+ if (onCompleteMessage != null) {
+ AsyncResult.forMessage(onCompleteMessage, null,
+ CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
+ onCompleteMessage.sendToTarget();
+ }
+ return;
+ }
+
+ android.hardware.radio.V1_5.IRadio radioProxy15 =
+ (android.hardware.radio.V1_5.IRadio) radioProxy;
+
+ RILRequest rr = obtainRequest(RIL_REQUEST_ENABLE_UICC_APPLICATIONS,
+ onCompleteMessage, mRILDefaultWorkSource);
+
+ if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+
+ try {
+ radioProxy15.enableUiccApplications(rr.mSerial, enable);
+ } catch (RemoteException | RuntimeException e) {
+ handleRadioProxyExceptionForRR(rr, "enableUiccApplications", e);
+ }
+ }
+
+ /**
+ * Whether uicc applications are enabled or not.
+ *
+ * @param onCompleteMessage a Message to return to the requester
+ */
+ @Override
+ public void areUiccApplicationsEnabled(Message onCompleteMessage) {
+ IRadio radioProxy = getRadioProxy(onCompleteMessage);
+ if (radioProxy == null) {
+ Rlog.e(RIL.RILJ_LOG_TAG, "Radio Proxy object is null!");
+ if (onCompleteMessage != null) {
+ AsyncResult.forMessage(onCompleteMessage, null,
+ CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
+ onCompleteMessage.sendToTarget();
+ }
+ }
+
+ if (mRadioVersion.less(RADIO_HAL_VERSION_1_5)) {
+ if (onCompleteMessage != null) {
+ AsyncResult.forMessage(onCompleteMessage, null,
+ CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
+ onCompleteMessage.sendToTarget();
+ }
+ return;
+ }
+
+ android.hardware.radio.V1_5.IRadio radioProxy15 =
+ (android.hardware.radio.V1_5.IRadio) radioProxy;
+
+ RILRequest rr = obtainRequest(RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT,
+ onCompleteMessage, mRILDefaultWorkSource);
+
+ if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+
+ try {
+ radioProxy15.areUiccApplicationsEnabled(rr.mSerial);
+ } catch (RemoteException | RuntimeException e) {
+ handleRadioProxyExceptionForRR(rr, "areUiccApplicationsEnabled", e);
+ }
+ }
+
+ /**
+ * Whether {@link #enableUiccApplications} is supported, which is supported in 1.5 version.
+ */
+ @Override
+ public boolean canToggleUiccApplicationsEnablement() {
+ return getRadioProxy(null) != null && mRadioVersion
+ .greaterOrEqual(RADIO_HAL_VERSION_1_5);
+ }
+
+ /**
* Translates EF_SMS status bits to a status value compatible with
* SMS AT commands. See TS 27.005 3.1.
*/
@@ -5764,6 +5857,10 @@
return "RIL_REQUEST_ENABLE_MODEM";
case RIL_REQUEST_GET_MODEM_STATUS:
return "RIL_REQUEST_GET_MODEM_STATUS";
+ case RIL_REQUEST_ENABLE_UICC_APPLICATIONS:
+ return "RIL_REQUEST_ENABLE_UICC_APPLICATIONS";
+ case RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT:
+ return "RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT";
default: return "<unknown request>";
}
}
@@ -5877,6 +5974,8 @@
return "RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG";
case RIL_UNSOL_EMERGENCY_NUMBER_LIST:
return "RIL_UNSOL_EMERGENCY_NUMBER_LIST";
+ case RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED:
+ return "RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED";
default:
return "<unknown response>";
}
diff --git a/src/java/com/android/internal/telephony/RadioIndication.java b/src/java/com/android/internal/telephony/RadioIndication.java
index 5d00690..5b98070 100644
--- a/src/java/com/android/internal/telephony/RadioIndication.java
+++ b/src/java/com/android/internal/telephony/RadioIndication.java
@@ -63,6 +63,7 @@
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_PROACTIVE_COMMAND;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_SESSION_END;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SUPP_SVC_NOTIFICATION;
+import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_VOICE_RADIO_TECH_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOl_CDMA_PRL_CHANGED;
@@ -761,6 +762,17 @@
mRil.mRilCellInfoListRegistrants.notifyRegistrants(new AsyncResult(null, response, null));
}
+ /** Get unsolicited message for uicc applications enablement changes. */
+ public void uiccApplicationsEnablementChanged(int indicationType, boolean enabled) {
+ mRil.processIndication(indicationType);
+
+ if (RIL.RILJ_LOGD) {
+ mRil.unsljLogRet(RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED, enabled);
+ }
+
+ mRil.mUiccApplicationsEnablementRegistrants.notifyResult(enabled);
+ }
+
/** Incremental network scan results */
public void networkScanResult(int indicationType,
android.hardware.radio.V1_1.NetworkScanResult result) {
diff --git a/src/java/com/android/internal/telephony/RadioResponse.java b/src/java/com/android/internal/telephony/RadioResponse.java
index da68b69..ea14b40 100644
--- a/src/java/com/android/internal/telephony/RadioResponse.java
+++ b/src/java/com/android/internal/telephony/RadioResponse.java
@@ -2363,4 +2363,27 @@
public void setSystemSelectionChannelsResponse(RadioResponseInfo responseInfo) {
responseVoid(responseInfo);
}
+
+ /**
+ * @param responseInfo Response info struct containing response type, serial no. and error.
+ */
+ public void enableUiccApplicationsResponse(RadioResponseInfo responseInfo) {
+ responseVoid(responseInfo);
+ }
+
+ /**
+ * @param responseInfo Response info struct containing response type, serial no. and error.
+ * @param enabled whether Uicc applications are enabled.
+ */
+ public void areUiccApplicationsEnabledResponse(RadioResponseInfo responseInfo,
+ boolean enabled) {
+ RILRequest rr = mRil.processResponse(responseInfo);
+
+ if (rr != null) {
+ if (responseInfo.error == RadioError.NONE) {
+ sendMessageResponse(rr.mResult, enabled);
+ }
+ mRil.processResponseDone(rr, responseInfo, enabled);
+ }
+ }
}
diff --git a/src/java/com/android/internal/telephony/RetryManager.java b/src/java/com/android/internal/telephony/RetryManager.java
index 87d6cf5..ae5318f 100644
--- a/src/java/com/android/internal/telephony/RetryManager.java
+++ b/src/java/com/android/internal/telephony/RetryManager.java
@@ -18,7 +18,6 @@
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
-import android.os.Build;
import android.os.PersistableBundle;
import android.os.SystemProperties;
import android.telephony.CarrierConfigManager;
@@ -27,6 +26,8 @@
import android.text.TextUtils;
import android.util.Pair;
+import com.android.internal.telephony.util.TelephonyUtils;
+
import java.util.ArrayList;
import java.util.Random;
@@ -332,7 +333,7 @@
String otherConfigString = null;
try {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
// Using system properties is easier for testing from command line.
String config = SystemProperties.get("test.data_retry_config");
if (!TextUtils.isEmpty(config)) {
diff --git a/src/java/com/android/internal/telephony/RilWakelockInfo.java b/src/java/com/android/internal/telephony/RilWakelockInfo.java
index 5d9e54b..28ccbc8 100644
--- a/src/java/com/android/internal/telephony/RilWakelockInfo.java
+++ b/src/java/com/android/internal/telephony/RilWakelockInfo.java
@@ -17,10 +17,10 @@
package com.android.internal.telephony;
import android.annotation.TargetApi;
-import android.os.Build;
import android.telephony.Rlog;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.util.TelephonyUtils;
@TargetApi(8)
public class RilWakelockInfo {
@@ -57,7 +57,7 @@
private int validateConcurrentRequests(int concurrentRequests) {
if(concurrentRequests <= 0) {
- if(Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
IllegalArgumentException e = new IllegalArgumentException(
"concurrentRequests should always be greater than 0.");
Rlog.e(LOG_TAG, e.toString());
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 0a59b24..93083c8 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -42,7 +42,6 @@
import android.net.NetworkCapabilities;
import android.os.AsyncResult;
import android.os.BaseBundle;
-import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
@@ -110,8 +109,9 @@
import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccProfile;
-import com.android.internal.telephony.util.NotificationChannelController;
import com.android.internal.telephony.util.ArrayUtils;
+import com.android.internal.telephony.util.NotificationChannelController;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.IndentingPrintWriter;
import java.io.FileDescriptor;
@@ -2483,7 +2483,8 @@
setRoamingOn();
}
- if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) {
+ if (TelephonyUtils.IS_DEBUGGABLE
+ && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) {
mNewSS.setVoiceRoaming(true);
mNewSS.setDataRoaming(true);
}
@@ -3091,14 +3092,15 @@
updateRoamingState();
}
- if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) {
+ if (TelephonyUtils.IS_DEBUGGABLE
+ && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) {
mNewSS.setVoiceRoaming(true);
mNewSS.setDataRoaming(true);
}
useDataRegStateForDataOnlyDevices();
processIwlanRegistrationInfo();
- if (Build.IS_DEBUGGABLE && mPhone.mTelephonyTester != null) {
+ if (TelephonyUtils.IS_DEBUGGABLE && mPhone.mTelephonyTester != null) {
mPhone.mTelephonyTester.overrideServiceState(mNewSS);
}
@@ -5226,7 +5228,7 @@
if (currentServiceState.getVoiceRoaming()) {
if (mPhone.isPhoneTypeGsm()) {
// check roaming type by MCC
- if (inSameCountry(currentServiceState.getVoiceOperatorNumeric())) {
+ if (inSameCountry(currentServiceState.getOperatorNumeric())) {
currentServiceState.setVoiceRoamingType(
ServiceState.ROAMING_TYPE_DOMESTIC);
} else {
@@ -5250,7 +5252,7 @@
}
} else {
// check roaming type by MCC
- if (inSameCountry(currentServiceState.getVoiceOperatorNumeric())) {
+ if (inSameCountry(currentServiceState.getOperatorNumeric())) {
currentServiceState.setVoiceRoamingType(
ServiceState.ROAMING_TYPE_DOMESTIC);
} else {
@@ -5297,7 +5299,7 @@
}
} else {
// take it as 3GPP roaming
- if (inSameCountry(currentServiceState.getDataOperatorNumeric())) {
+ if (inSameCountry(currentServiceState.getOperatorNumeric())) {
currentServiceState.setDataRoamingType(ServiceState.ROAMING_TYPE_DOMESTIC);
} else {
currentServiceState.setDataRoamingType(
diff --git a/src/java/com/android/internal/telephony/SmsController.java b/src/java/com/android/internal/telephony/SmsController.java
index eaa7fc8..952336e 100644
--- a/src/java/com/android/internal/telephony/SmsController.java
+++ b/src/java/com/android/internal/telephony/SmsController.java
@@ -18,21 +18,18 @@
package com.android.internal.telephony;
-import static com.android.internal.util.DumpUtils.checkDumpPermission;
+import static com.android.internal.telephony.util.TelephonyUtils.checkDumpPermission;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
-import android.app.ActivityThread;
import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.content.Context;
import android.net.Uri;
import android.os.Binder;
-import android.os.Bundle;
import android.os.ServiceManager;
import android.provider.Telephony.Sms.Intents;
-import android.telephony.IFinancialSmsCallback;
import android.telephony.Rlog;
import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
@@ -189,7 +186,7 @@
private void sendBluetoothText(SubscriptionInfo info, String destAddr,
String text, PendingIntent sentIntent, PendingIntent deliveryIntent) {
BtSmsInterfaceManager btSmsInterfaceManager = new BtSmsInterfaceManager();
- btSmsInterfaceManager.sendText(destAddr, text, sentIntent, deliveryIntent, info);
+ btSmsInterfaceManager.sendText(mContext, destAddr, text, sentIntent, deliveryIntent, info);
}
private void sendIccText(int subId, String callingPackage, String destAddr,
@@ -367,7 +364,7 @@
@Override
public boolean isSmsSimPickActivityNeeded(int subId) {
- final Context context = ActivityThread.currentApplication().getApplicationContext();
+ final Context context = mContext.getApplicationContext();
ActivityManager am = context.getSystemService(ActivityManager.class);
// Don't show the SMS SIM Pick activity if it is not foreground.
boolean isCallingProcessForeground = am != null
@@ -514,13 +511,6 @@
}
@Override
- public void getSmsMessagesForFinancialApp(
- int subId, String callingPkg, Bundle params, IFinancialSmsCallback callback) {
- getPhone(subId).getAppSmsManager().getSmsMessagesForFinancialApp(
- callingPkg, params, callback);
- }
-
- @Override
public int checkSmsShortCodeDestination(
int subId, String callingPackage, String destAddress, String countryIso) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(getPhone(subId).getContext(),
diff --git a/src/java/com/android/internal/telephony/SmsUsageMonitor.java b/src/java/com/android/internal/telephony/SmsUsageMonitor.java
index 2107963..dadf62e 100644
--- a/src/java/com/android/internal/telephony/SmsUsageMonitor.java
+++ b/src/java/com/android/internal/telephony/SmsUsageMonitor.java
@@ -17,7 +17,6 @@
package com.android.internal.telephony;
import android.annotation.UnsupportedAppUsage;
-import android.app.AppGlobals;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -27,7 +26,6 @@
import android.os.Binder;
import android.os.Handler;
import android.os.Process;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
@@ -36,8 +34,8 @@
import android.util.AtomicFile;
import android.util.Xml;
+import com.android.internal.telephony.util.XmlUtils;
import com.android.internal.util.FastXmlSerializer;
-import com.android.internal.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/src/java/com/android/internal/telephony/SubscriptionController.java b/src/java/com/android/internal/telephony/SubscriptionController.java
index 7edf953..1ebea33 100644
--- a/src/java/com/android/internal/telephony/SubscriptionController.java
+++ b/src/java/com/android/internal/telephony/SubscriptionController.java
@@ -46,6 +46,7 @@
import android.telephony.Rlog;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.SubscriptionManager.SimDisplayNameSource;
import android.telephony.TelephonyManager;
import android.telephony.UiccAccessRule;
import android.telephony.UiccSlotInfo;
@@ -1505,30 +1506,27 @@
* @param nameSource Source of display name
* @return int representing the priority. Higher value means higher priority.
*/
- public static int getNameSourcePriority(int nameSource) {
- switch (nameSource) {
- case SubscriptionManager.NAME_SOURCE_USER_INPUT:
- return 3;
- case SubscriptionManager.NAME_SOURCE_CARRIER:
- return 2;
- case SubscriptionManager.NAME_SOURCE_SIM_SOURCE:
- return 1;
- case SubscriptionManager.NAME_SOURCE_DEFAULT_SOURCE:
- default:
- return 0;
- }
+ public static int getNameSourcePriority(@SimDisplayNameSource int nameSource) {
+ int index = Arrays.asList(
+ SubscriptionManager.NAME_SOURCE_DEFAULT_SOURCE,
+ SubscriptionManager.NAME_SOURCE_SIM_PNN,
+ SubscriptionManager.NAME_SOURCE_SIM_SPN,
+ SubscriptionManager.NAME_SOURCE_CARRIER,
+ SubscriptionManager.NAME_SOURCE_USER_INPUT // user has highest priority.
+ ).indexOf(nameSource);
+ return (index < 0) ? 0 : index;
}
/**
* Set display name by simInfo index with name source
* @param displayName the display name of SIM card
* @param subId the unique SubInfoRecord index in database
- * @param nameSource 0: NAME_SOURCE_DEFAULT_SOURCE, 1: NAME_SOURCE_SIM_SOURCE,
- * 2: NAME_SOURCE_USER_INPUT, 3: NAME_SOURCE_CARRIER
+ * @param nameSource SIM display name source
* @return the number of records updated
*/
@Override
- public int setDisplayNameUsingSrc(String displayName, int subId, int nameSource) {
+ public int setDisplayNameUsingSrc(String displayName, int subId,
+ @SimDisplayNameSource int nameSource) {
if (DBG) {
logd("[setDisplayName]+ displayName:" + displayName + " subId:" + subId
+ " nameSource:" + nameSource);
@@ -1548,6 +1546,10 @@
&& (getNameSourcePriority(subInfo.getNameSource())
> getNameSourcePriority(nameSource)
|| (displayName != null && displayName.equals(subInfo.getDisplayName())))) {
+ logd("Name source " + subInfo.getNameSource() + "'s priority "
+ + getNameSourcePriority(subInfo.getNameSource()) + " is greater than "
+ + "name source " + nameSource + "'s priority "
+ + getNameSourcePriority(nameSource) + ", return now.");
return 0;
}
}
@@ -3053,12 +3055,6 @@
throw new IllegalArgumentException("Invalid groupUuid");
}
- // TODO: Revisit whether we need this restriction in R. There's no technical need for it,
- // but we don't want to change the API behavior at this time.
- if (getSubscriptionsInGroup(groupUuid, callingPackage).isEmpty()) {
- throw new IllegalArgumentException("Cannot add subscriptions to a non-existent group!");
- }
-
// Makes sure calling package matches caller UID.
mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
// If it doesn't have modify phone state permission, or carrier privilege permission,
@@ -3313,6 +3309,9 @@
"setSubscriptionEnabled not usable subId " + subId);
}
+ // Nothing to do if it's already active or inactive.
+ if (enable == isActiveSubscriptionId(subId)) return true;
+
SubscriptionInfo info = SubscriptionController.getInstance()
.getAllSubInfoList(mContext.getOpPackageName())
.stream()
@@ -3325,6 +3324,8 @@
return false;
}
+ // TODO: make sure after slot mapping, we enable the uicc applications for the
+ // subscription we are enabling.
if (info.isEmbedded()) {
return enableEmbeddedSubscription(info, enable);
} else {
@@ -3356,46 +3357,43 @@
// updateEnabledSubscriptionGlobalSetting(subId, physicalSlotIndex);
}
- private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo, String cardId) {
- return !slotInfo.getIsEuicc() && !slotInfo.getIsActive()
- && slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT
- && TextUtils.equals(slotInfo.getCardId(), cardId);
- }
-
private boolean enablePhysicalSubscription(SubscriptionInfo info, boolean enable) {
- if (enable && info.getSimSlotIndex() == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
- UiccSlotInfo[] slotsInfo = mTelephonyManager.getUiccSlotsInfo();
- if (slotsInfo == null) return false;
- boolean foundMatch = false;
- for (int i = 0; i < slotsInfo.length; i++) {
- UiccSlotInfo slotInfo = slotsInfo[i];
- if (isInactiveInsertedPSim(slotInfo, info.getCardString())) {
- // We need to send intents to Euicc if we are turning on an inactive pSIM.
- // Euicc will decide whether to ask user to switch to DSDS, or change SIM
- // slot mapping.
- enableSubscriptionOverEuiccManager(info.getSubscriptionId(), enable, i);
- foundMatch = true;
- break;
- }
- }
-
- if (!foundMatch) {
- logdl("enablePhysicalSubscription subId " + info.getSubscriptionId()
- + " is not inserted.");
- }
- // returning false to indicate state is not changed yet. If intent is sent to LPA and
- // user consents switching, caller needs to listen to subscription info change.
+ if (info == null || !SubscriptionManager.isValidSubscriptionId(info.getSubscriptionId())) {
return false;
- } else {
- return mTelephonyManager.enableModemForSlot(info.getSimSlotIndex(), enable);
}
- // TODO: uncomment or clean up if we decide whether to support standalone CBRS for Q.
- // updateEnabledSubscriptionGlobalSetting(
- // enable ? subId : SubscriptionManager.INVALID_SUBSCRIPTION_ID,
- // physicalSlotIndex);
- // updateModemStackEnabledGlobalSetting(enable, physicalSlotIndex);
- // refreshCachedActiveSubscriptionInfoList();
+ int subId = info.getSubscriptionId();
+
+ UiccSlotInfo slotInfo = null;
+ int physicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
+ UiccSlotInfo[] slotsInfo = mTelephonyManager.getUiccSlotsInfo();
+ if (slotsInfo == null) return false;
+ for (int i = 0; i < slotsInfo.length; i++) {
+ UiccSlotInfo curSlotInfo = slotsInfo[i];
+ if (curSlotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT
+ && TextUtils.equals(curSlotInfo.getCardId(), info.getCardString())) {
+ slotInfo = curSlotInfo;
+ physicalSlotIndex = i;
+ break;
+ }
+ }
+
+ // Can't find the existing SIM.
+ if (slotInfo == null) return false;
+
+ if (enable && !slotInfo.getIsActive()) {
+ // We need to send intents to Euicc if we are turning on an inactive slot.
+ // Euicc will decide whether to ask user to switch to DSDS, or change SIM
+ // slot mapping.
+ enableSubscriptionOverEuiccManager(subId, enable, physicalSlotIndex);
+ return true;
+ } else {
+ // Enable / disable uicc applications.
+ Phone phone = PhoneFactory.getPhone(slotInfo.getLogicalSlotIdx());
+ if (phone == null) return false;
+ phone.enableUiccApplications(enable, null);
+ return true;
+ }
}
private void enableSubscriptionOverEuiccManager(int subId, boolean enable,
@@ -3774,8 +3772,8 @@
final long identity = Binder.clearCallingIdentity();
try {
- // TODO: b/133379187
- return false;
+ Phone phone = PhoneFactory.getDefaultPhone();
+ return phone != null && phone.canDisablePhysicalSubscription();
} finally {
Binder.restoreCallingIdentity(identity);
}
diff --git a/src/java/com/android/internal/telephony/TelephonyTester.java b/src/java/com/android/internal/telephony/TelephonyTester.java
index df3bfb4..7e393a3 100644
--- a/src/java/com/android/internal/telephony/TelephonyTester.java
+++ b/src/java/com/android/internal/telephony/TelephonyTester.java
@@ -22,7 +22,6 @@
import android.content.IntentFilter;
import android.net.Uri;
import android.os.BadParcelableException;
-import android.os.Build;
import android.os.Bundle;
import android.telephony.AccessNetworkConstants;
import android.telephony.Rlog;
@@ -38,6 +37,7 @@
import com.android.internal.telephony.imsphone.ImsPhone;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.test.TestConferenceEventPackageParser;
+import com.android.internal.telephony.util.TelephonyUtils;
import java.io.File;
import java.io.FileInputStream;
@@ -196,7 +196,7 @@
TelephonyTester(Phone phone) {
mPhone = phone;
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
IntentFilter filter = new IntentFilter();
filter.addAction(mPhone.getActionDetached());
@@ -224,7 +224,7 @@
}
void dispose() {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
mPhone.getContext().unregisterReceiver(mIntentReceiver);
}
}
diff --git a/src/java/com/android/internal/telephony/WakeLockStateMachine.java b/src/java/com/android/internal/telephony/WakeLockStateMachine.java
index 1bc6298..7dd60e0 100644
--- a/src/java/com/android/internal/telephony/WakeLockStateMachine.java
+++ b/src/java/com/android/internal/telephony/WakeLockStateMachine.java
@@ -20,11 +20,11 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.os.Build;
import android.os.Message;
import android.os.PowerManager;
import android.telephony.Rlog;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
@@ -38,7 +38,7 @@
* {@link #quit}.
*/
public abstract class WakeLockStateMachine extends StateMachine {
- protected static final boolean DBG = Build.IS_DEBUGGABLE;
+ protected static final boolean DBG = TelephonyUtils.IS_DEBUGGABLE;
private final PowerManager.WakeLock mWakeLock;
@@ -130,7 +130,7 @@
switch (msg.what) {
default: {
String errorText = "processMessage: unhandled message type " + msg.what;
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
throw new RuntimeException(errorText);
} else {
loge(errorText);
diff --git a/src/java/com/android/internal/telephony/cat/CatCmdMessage.java b/src/java/com/android/internal/telephony/cat/CatCmdMessage.java
index 313e56f..0033fff 100644
--- a/src/java/com/android/internal/telephony/cat/CatCmdMessage.java
+++ b/src/java/com/android/internal/telephony/cat/CatCmdMessage.java
@@ -138,10 +138,10 @@
}
public CatCmdMessage(Parcel in) {
- mCmdDet = in.readParcelable(null);
- mTextMsg = in.readParcelable(null);
- mMenu = in.readParcelable(null);
- mInput = in.readParcelable(null);
+ mCmdDet = in.readParcelable(CommandDetails.class.getClassLoader());
+ mTextMsg = in.readParcelable(TextMessage.class.getClassLoader());
+ mMenu = in.readParcelable(Menu.class.getClassLoader());
+ mInput = in.readParcelable(Input.class.getClassLoader());
mLoadIconFailed = (in.readByte() == 1);
switch (getCmdType()) {
case LAUNCH_BROWSER:
@@ -150,12 +150,12 @@
mBrowserSettings.mode = LaunchBrowserMode.values()[in.readInt()];
break;
case PLAY_TONE:
- mToneSettings = in.readParcelable(null);
+ mToneSettings = in.readParcelable(ToneSettings.class.getClassLoader());
break;
case SET_UP_CALL:
mCallSettings = new CallSettings();
- mCallSettings.confirmMsg = in.readParcelable(null);
- mCallSettings.callMsg = in.readParcelable(null);
+ mCallSettings.confirmMsg = in.readParcelable(TextMessage.class.getClassLoader());
+ mCallSettings.callMsg = in.readParcelable(TextMessage.class.getClassLoader());
break;
case SET_UP_EVENT_LIST:
mSetupEventListSettings = new SetupEventListSettings();
diff --git a/src/java/com/android/internal/telephony/cat/CatService.java b/src/java/com/android/internal/telephony/cat/CatService.java
index 50ceaac..e24a408 100644
--- a/src/java/com/android/internal/telephony/cat/CatService.java
+++ b/src/java/com/android/internal/telephony/cat/CatService.java
@@ -541,7 +541,7 @@
private void broadcastCatCmdIntent(CatCmdMessage cmdMsg) {
Intent intent = new Intent(AppInterface.CAT_CMD_ACTION);
- intent.putExtra("STK CMD", cmdMsg);
+ intent.putExtra( "STK CMD", cmdMsg);
intent.putExtra("SLOT_ID", mSlotId);
intent.setComponent(AppInterface.getDefaultSTKApplication());
CatLog.d(this, "Sending CmdMsg: " + cmdMsg+ " on slotid:" + mSlotId);
diff --git a/src/java/com/android/internal/telephony/cat/CommandDetails.java b/src/java/com/android/internal/telephony/cat/CommandDetails.java
index d7c511a..dd1bbcf 100644
--- a/src/java/com/android/internal/telephony/cat/CommandDetails.java
+++ b/src/java/com/android/internal/telephony/cat/CommandDetails.java
@@ -28,7 +28,7 @@
* Class for Command Details object of proactive commands from SIM.
* {@hide}
*/
-class CommandDetails extends ValueObject implements Parcelable {
+public class CommandDetails extends ValueObject implements Parcelable {
@UnsupportedAppUsage
public boolean compRequired;
@UnsupportedAppUsage
diff --git a/src/java/com/android/internal/telephony/cat/Input.java b/src/java/com/android/internal/telephony/cat/Input.java
index aaaff43..e9103b8 100644
--- a/src/java/com/android/internal/telephony/cat/Input.java
+++ b/src/java/com/android/internal/telephony/cat/Input.java
@@ -58,7 +58,7 @@
private Input(Parcel in) {
text = in.readString();
defaultText = in.readString();
- icon = in.readParcelable(null);
+ icon = in.readParcelable(Bitmap.class.getClassLoader());
minLen = in.readInt();
maxLen = in.readInt();
ucs2 = in.readInt() == 1 ? true : false;
diff --git a/src/java/com/android/internal/telephony/cat/Item.java b/src/java/com/android/internal/telephony/cat/Item.java
index 456a46f..702ed4b 100644
--- a/src/java/com/android/internal/telephony/cat/Item.java
+++ b/src/java/com/android/internal/telephony/cat/Item.java
@@ -46,7 +46,7 @@
public Item(Parcel in) {
id = in.readInt();
text = in.readString();
- icon = in.readParcelable(null);
+ icon = in.readParcelable(Bitmap.class.getClassLoader());
}
@Override
diff --git a/src/java/com/android/internal/telephony/cat/Menu.java b/src/java/com/android/internal/telephony/cat/Menu.java
index a93fd1f..f1d19b5 100644
--- a/src/java/com/android/internal/telephony/cat/Menu.java
+++ b/src/java/com/android/internal/telephony/cat/Menu.java
@@ -58,12 +58,12 @@
private Menu(Parcel in) {
title = in.readString();
- titleIcon = in.readParcelable(null);
+ titleIcon = in.readParcelable(Bitmap.class.getClassLoader());
// rebuild items list.
items = new ArrayList<Item>();
int size = in.readInt();
for (int i=0; i<size; i++) {
- Item item = in.readParcelable(null);
+ Item item = in.readParcelable(Item.class.getClassLoader());
items.add(item);
}
defaultItem = in.readInt();
diff --git a/src/java/com/android/internal/telephony/cat/TextMessage.java b/src/java/com/android/internal/telephony/cat/TextMessage.java
index eddca4c..e7c2da6 100644
--- a/src/java/com/android/internal/telephony/cat/TextMessage.java
+++ b/src/java/com/android/internal/telephony/cat/TextMessage.java
@@ -40,7 +40,7 @@
private TextMessage(Parcel in) {
title = in.readString();
text = in.readString();
- icon = in.readParcelable(null);
+ icon = in.readParcelable(Bitmap.class.getClassLoader());
iconSelfExplanatory = in.readInt() == 1 ? true : false;
isHighPriority = in.readInt() == 1 ? true : false;
responseNeeded = in.readInt() == 1 ? true : false;
diff --git a/src/java/com/android/internal/telephony/cat/ToneSettings.java b/src/java/com/android/internal/telephony/cat/ToneSettings.java
index 61c1573..4e94ead 100644
--- a/src/java/com/android/internal/telephony/cat/ToneSettings.java
+++ b/src/java/com/android/internal/telephony/cat/ToneSettings.java
@@ -35,8 +35,8 @@
}
private ToneSettings(Parcel in) {
- duration = in.readParcelable(null);
- tone = in.readParcelable(null);
+ duration = in.readParcelable(Duration.class.getClassLoader());
+ tone = in.readParcelable(Tone.class.getClassLoader());
vibrate = in.readInt() == 1;
}
diff --git a/src/java/com/android/internal/telephony/cdma/EriManager.java b/src/java/com/android/internal/telephony/cdma/EriManager.java
index eb19963..4ef55eb 100644
--- a/src/java/com/android/internal/telephony/cdma/EriManager.java
+++ b/src/java/com/android/internal/telephony/cdma/EriManager.java
@@ -26,8 +26,7 @@
import android.util.Xml;
import com.android.internal.telephony.Phone;
-import com.android.internal.util.XmlUtils;
-
+import com.android.internal.telephony.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 84541e0e..658ba6e 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -417,7 +417,8 @@
return getCurrentState() == mDisconnectingState;
}
- boolean isActive() {
+ @VisibleForTesting
+ public boolean isActive() {
return getCurrentState() == mActiveState;
}
@@ -2090,7 +2091,7 @@
mDisabledApnTypeBitMask |= getDisallowedApnTypes();
- mNetworkAgent = DcNetworkAgent.createDcNetworkAgent(DataConnection.this,
+ mNetworkAgent = new DcNetworkAgent(DataConnection.this,
mPhone, mNetworkInfo, mScore, misc, factorySerialNumber, mTransportType);
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcController.java b/src/java/com/android/internal/telephony/dataconnection/DcController.java
index ed2bc82..7db4d26 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcController.java
@@ -24,7 +24,6 @@
import android.net.NetworkPolicyManager;
import android.net.NetworkUtils;
import android.os.AsyncResult;
-import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.telephony.AccessNetworkConstants;
@@ -37,6 +36,7 @@
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.dataconnection.DataConnection.UpdateLinkPropertyResult;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
@@ -110,7 +110,7 @@
mNetworkPolicyManager = (NetworkPolicyManager) phone.getContext()
.getSystemService(Context.NETWORK_POLICY_SERVICE);
- mDcTesterDeactivateAll = (Build.IS_DEBUGGABLE)
+ mDcTesterDeactivateAll = (TelephonyUtils.IS_DEBUGGABLE)
? new DcTesterDeactivateAll(mPhone, DcController.this, getHandler())
: null;
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java b/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
index ed5ad1b..87152f2 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
@@ -39,7 +39,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.concurrent.atomic.AtomicInteger;
/**
* This class represents a network agent which is communication channel between
@@ -66,23 +65,20 @@
private final LocalLog mNetCapsLocalLog = new LocalLog(50);
- private static AtomicInteger sSerialNumber = new AtomicInteger(0);
-
private NetworkInfo mNetworkInfo;
- private DcNetworkAgent(DataConnection dc, String tag, Phone phone, NetworkInfo ni,
- int score, NetworkMisc misc, int factorySerialNumber,
- int transportType) {
- super(dc.getHandler().getLooper(), phone.getContext(), tag, ni,
+ DcNetworkAgent(DataConnection dc, Phone phone, NetworkInfo ni, int score, NetworkMisc misc,
+ int factorySerialNumber, int transportType) {
+ super(dc.getHandler().getLooper(), phone.getContext(), "DcNetworkAgent", ni,
dc.getNetworkCapabilities(), dc.getLinkProperties(), score, misc,
factorySerialNumber);
- mTag = tag;
+ mTag = "DcNetworkAgent" + "-" + netId;
mPhone = phone;
mNetworkCapabilities = dc.getNetworkCapabilities();
mTransportType = transportType;
mDataConnection = dc;
mNetworkInfo = ni;
- logd(tag + " created for data connection " + dc.getName());
+ logd(mTag + " created for data connection " + dc.getName());
}
/**
@@ -93,28 +89,6 @@
}
/**
- * Constructor
- *
- * @param dc The data connection owns this network agent.
- * @param phone The phone object.
- * @param ni Network info.
- * @param score Score of the data connection.
- * @param misc The miscellaneous information of the data connection.
- * @param factorySerialNumber Serial number of telephony network factory.
- * @param transportType The transport of the data connection.
- * @return The network agent
- */
- public static DcNetworkAgent createDcNetworkAgent(DataConnection dc, Phone phone,
- NetworkInfo ni, int score, NetworkMisc misc,
- int factorySerialNumber, int transportType) {
- // Use serial number only. Do not use transport type because it can be transferred to
- // a different transport.
- String tag = "DcNetworkAgent-" + sSerialNumber.incrementAndGet();
- return new DcNetworkAgent(dc, tag, phone, ni, score, misc, factorySerialNumber,
- transportType);
- }
-
- /**
* Set the data connection that owns this network agent.
*
* @param dc Data connection owning this network agent.
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTesterDeactivateAll.java b/src/java/com/android/internal/telephony/dataconnection/DcTesterDeactivateAll.java
index cda4836..361934a 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTesterDeactivateAll.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTesterDeactivateAll.java
@@ -20,11 +20,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Build;
import android.os.Handler;
import android.telephony.Rlog;
import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.util.TelephonyUtils;
/**
* To bring down all DC's send the following intent:
@@ -69,7 +69,7 @@
mPhone = phone;
mDcc = dcc;
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
IntentFilter filter = new IntentFilter();
filter.addAction(sActionDcTesterDeactivateAll);
@@ -83,7 +83,7 @@
}
void dispose() {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
mPhone.getContext().unregisterReceiver(sIntentReceiver);
}
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTesterFailBringUpAll.java b/src/java/com/android/internal/telephony/dataconnection/DcTesterFailBringUpAll.java
index 4013454..74f0e2b 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTesterFailBringUpAll.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTesterFailBringUpAll.java
@@ -20,12 +20,12 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Build;
import android.os.Handler;
import android.telephony.DataFailCause;
import android.telephony.Rlog;
import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.util.TelephonyUtils;
/**
* A package level call that causes all DataConnection bringUp calls to fail a specific
@@ -77,7 +77,7 @@
DcTesterFailBringUpAll(Phone phone, Handler handler) {
mPhone = phone;
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
IntentFilter filter = new IntentFilter();
filter.addAction(mActionFailBringUp);
@@ -94,7 +94,7 @@
}
void dispose() {
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
mPhone.getContext().unregisterReceiver(mIntentReceiver);
}
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 8acd9de..70ead2e 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -50,7 +50,6 @@
import android.net.TrafficStats;
import android.net.Uri;
import android.os.AsyncResult;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
@@ -109,6 +108,7 @@
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.util.ArrayUtils;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.AsyncChannel;
import java.io.FileDescriptor;
@@ -2081,8 +2081,8 @@
}
}
boolean onlySingleDcAllowed = false;
- if (Build.IS_DEBUGGABLE &&
- SystemProperties.getBoolean("persist.telephony.test.singleDc", false)) {
+ if (TelephonyUtils.IS_DEBUGGABLE
+ && SystemProperties.getBoolean("persist.telephony.test.singleDc", false)) {
onlySingleDcAllowed = true;
}
if (singleDcRats != null) {
@@ -2751,7 +2751,7 @@
if (DBG) {
log("onDataSetupComplete: SETUP complete type=" + apnContext.getApnType());
}
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
// adb shell setprop persist.radio.test.pco [pco_val]
String radioTestProperty = "persist.radio.test.pco";
int pcoVal = SystemProperties.getInt(radioTestProperty, -1);
@@ -3427,7 +3427,7 @@
trySetupData(apnContext, REQUEST_TYPE_NORMAL);
} else {
loge("**** Default ApnContext not found ****");
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
throw new RuntimeException("Default ApnContext not found");
}
}
@@ -4656,7 +4656,7 @@
int delayInMs = Settings.Global.getInt(mResolver,
Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS,
PROVISIONING_APN_ALARM_DELAY_IN_MS_DEFAULT);
- if (Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
// Allow debug code to use a system property to provide another value
String delayInMsStrg = Integer.toString(delayInMs);
delayInMsStrg = System.getProperty(DEBUG_PROV_APN_ALARM, delayInMsStrg);
diff --git a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
index f391320..7f0c730 100644
--- a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
+++ b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
@@ -347,16 +347,16 @@
if (dcTracker != null) {
DataConnection dc = dcTracker.getDataConnectionByApnType(
ApnSetting.getApnTypeString(apnType));
- if (dc != null && (dc.isActive() || dc.isActivating())) {
+ if (dc != null && (dc.isActive())) {
Message onCompleteMsg = mInternalHandler.obtainMessage(
EVENT_DATA_HANDOVER_COMPLETED);
onCompleteMsg.getData().putParcelable(
DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest);
mPendingHandovers.put(onCompleteMsg, handoverParams);
- // TODO: Need to handle the case that the request is there, but there is no
- // actual data connections established.
requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER,
targetTransport, onCompleteMsg);
+ log("Requested handover " + ApnSetting.getApnTypeString(apnType) + " to "
+ + AccessNetworkConstants.transportTypeToString(targetTransport));
handoverPending = true;
} else {
// Request is there, but no actual data connection. In this case, just move
diff --git a/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java b/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
index 7b5dd0c..c258a81 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmInboundSmsHandler.java
@@ -130,7 +130,7 @@
if (sEnableCbModule) {
mCellBroadcastServiceManager.sendGsmMessageToHandler(m);
} else {
- m.setWhat(GsmCellBroadcastHandler.EVENT_NEW_SMS_MESSAGE);
+ m.what = GsmCellBroadcastHandler.EVENT_NEW_SMS_MESSAGE;
mCellBroadcastHandler.sendMessage(m);
}
}
diff --git a/src/java/com/android/internal/telephony/metrics/CallQualityMetrics.java b/src/java/com/android/internal/telephony/metrics/CallQualityMetrics.java
index d882993..55ac225 100644
--- a/src/java/com/android/internal/telephony/metrics/CallQualityMetrics.java
+++ b/src/java/com/android/internal/telephony/metrics/CallQualityMetrics.java
@@ -18,7 +18,6 @@
import static com.android.internal.telephony.metrics.TelephonyMetrics.toCallQualityProto;
-import android.os.Build;
import android.telephony.CallQuality;
import android.telephony.CellInfo;
import android.telephony.CellSignalStrengthLte;
@@ -29,6 +28,7 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession;
+import com.android.internal.telephony.util.TelephonyUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -43,7 +43,7 @@
private static final String TAG = CallQualityMetrics.class.getSimpleName();
// certain metrics are only logged on userdebug
- private static final boolean USERDEBUG_MODE = Build.IS_USERDEBUG;
+ private static final boolean IS_DEBUGGABLE = TelephonyUtils.IS_DEBUGGABLE;
// We only log the first MAX_SNAPSHOTS changes to CallQuality
private static final int MAX_SNAPSHOTS = 5;
@@ -117,7 +117,7 @@
newDlCallQualityState = GOOD_QUALITY;
}
- if (USERDEBUG_MODE) {
+ if (IS_DEBUGGABLE) {
if (newUlCallQualityState != mUlCallQualityState) {
addSnapshot(cq, mUlSnapshots);
}
diff --git a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
index db19bc9..4bf0d10 100644
--- a/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
+++ b/src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java
@@ -903,31 +903,20 @@
ssProto.dataRoamingType = serviceState.getDataRoamingType();
ssProto.voiceOperator = new TelephonyServiceState.TelephonyOperator();
-
- if (serviceState.getVoiceOperatorAlphaLong() != null) {
- ssProto.voiceOperator.alphaLong = serviceState.getVoiceOperatorAlphaLong();
- }
-
- if (serviceState.getVoiceOperatorAlphaShort() != null) {
- ssProto.voiceOperator.alphaShort = serviceState.getVoiceOperatorAlphaShort();
- }
-
- if (serviceState.getVoiceOperatorNumeric() != null) {
- ssProto.voiceOperator.numeric = serviceState.getVoiceOperatorNumeric();
- }
-
ssProto.dataOperator = new TelephonyServiceState.TelephonyOperator();
-
- if (serviceState.getDataOperatorAlphaLong() != null) {
- ssProto.dataOperator.alphaLong = serviceState.getDataOperatorAlphaLong();
+ if (serviceState.getOperatorAlphaLong() != null) {
+ ssProto.voiceOperator.alphaLong = serviceState.getOperatorAlphaLong();
+ ssProto.dataOperator.alphaLong = serviceState.getOperatorAlphaLong();
}
- if (serviceState.getDataOperatorAlphaShort() != null) {
- ssProto.dataOperator.alphaShort = serviceState.getDataOperatorAlphaShort();
+ if (serviceState.getOperatorAlphaShort() != null) {
+ ssProto.voiceOperator.alphaShort = serviceState.getOperatorAlphaShort();
+ ssProto.dataOperator.alphaShort = serviceState.getOperatorAlphaShort();
}
- if (serviceState.getDataOperatorNumeric() != null) {
- ssProto.dataOperator.numeric = serviceState.getDataOperatorNumeric();
+ if (serviceState.getOperatorNumeric() != null) {
+ ssProto.voiceOperator.numeric = serviceState.getOperatorNumeric();
+ ssProto.dataOperator.numeric = serviceState.getOperatorNumeric();
}
ssProto.voiceRat = serviceState.getRilVoiceRadioTechnology();
diff --git a/src/java/com/android/internal/telephony/test/TestConferenceEventPackageParser.java b/src/java/com/android/internal/telephony/test/TestConferenceEventPackageParser.java
index 62c2a77..8df7709 100644
--- a/src/java/com/android/internal/telephony/test/TestConferenceEventPackageParser.java
+++ b/src/java/com/android/internal/telephony/test/TestConferenceEventPackageParser.java
@@ -16,16 +16,16 @@
package com.android.internal.telephony.test;
+import android.os.Bundle;
import android.telephony.ims.ImsConferenceState;
-import com.android.internal.util.XmlUtils;
+import android.util.Log;
+import android.util.Xml;
+
+import com.android.internal.telephony.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import android.os.Bundle;
-import android.util.Log;
-import android.util.Xml;
-
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/java/com/android/internal/telephony/uicc/AdnRecord.java b/src/java/com/android/internal/telephony/uicc/AdnRecord.java
index 7aa6a11..2e21297 100644
--- a/src/java/com/android/internal/telephony/uicc/AdnRecord.java
+++ b/src/java/com/android/internal/telephony/uicc/AdnRecord.java
@@ -93,9 +93,14 @@
recordNumber = source.readInt();
alphaTag = source.readString();
number = source.readString();
- emails = source.readStringArray();
-
- return new AdnRecord(efid, recordNumber, alphaTag, number, emails);
+ final int len = source.readInt();
+ if (len > 0) {
+ emails = new String[len];
+ source.readStringArray(emails);
+ return new AdnRecord(efid, recordNumber, alphaTag, number, emails);
+ } else {
+ return new AdnRecord(efid, recordNumber, alphaTag, number, null);
+ }
}
@Override
diff --git a/src/java/com/android/internal/telephony/uicc/CarrierTestOverride.java b/src/java/com/android/internal/telephony/uicc/CarrierTestOverride.java
index 61379d2..d098cff 100644
--- a/src/java/com/android/internal/telephony/uicc/CarrierTestOverride.java
+++ b/src/java/com/android/internal/telephony/uicc/CarrierTestOverride.java
@@ -20,7 +20,7 @@
import android.telephony.Rlog;
import android.util.Xml;
-import com.android.internal.util.XmlUtils;
+import com.android.internal.telephony.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/src/java/com/android/internal/telephony/uicc/IccIoResult.java b/src/java/com/android/internal/telephony/uicc/IccIoResult.java
index d23f8a0..a9077fa 100644
--- a/src/java/com/android/internal/telephony/uicc/IccIoResult.java
+++ b/src/java/com/android/internal/telephony/uicc/IccIoResult.java
@@ -17,7 +17,8 @@
package com.android.internal.telephony.uicc;
import android.annotation.UnsupportedAppUsage;
-import android.os.Build;
+
+import com.android.internal.telephony.util.TelephonyUtils;
/**
* {@hide}
@@ -201,7 +202,7 @@
+ " sw2:0x"
+ Integer.toHexString(sw2)
+ " Payload: "
- + (Build.IS_DEBUGGABLE ? IccUtils.bytesToHexString(payload) : "*******")
+ + (TelephonyUtils.IS_DEBUGGABLE ? IccUtils.bytesToHexString(payload) : "*******")
+ ((!success()) ? " Error: " + getErrorString() : "");
}
diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
index d5a2f94..376977e 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
@@ -372,8 +372,8 @@
String ccName = config.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
String newCarrierName = null;
- String currSpn = getServiceProviderName();
- int nameSource = SubscriptionManager.NAME_SOURCE_SIM_SOURCE;
+ String currSpn = getServiceProviderName(); // Get the name from EF_SPN.
+ int nameSource = SubscriptionManager.NAME_SOURCE_SIM_SPN;
// If carrier config is priority, use it regardless - the preference
// and the name were both set by the carrier, so this is safe;
// otherwise, if the SPN is priority but we don't have one *and* we have
@@ -382,10 +382,18 @@
newCarrierName = ccName;
nameSource = SubscriptionManager.NAME_SOURCE_CARRIER;
} else if (TextUtils.isEmpty(currSpn)) {
- // currSpn is empty and could not get name from carrier config; get name from carrier id
+ // currSpn is empty and could not get name from carrier config; get name from PNN or
+ // carrier id
Phone phone = PhoneFactory.getPhone(mPhoneId);
if (phone != null) {
- newCarrierName = phone.getCarrierName();
+ String currPnn = phone.getPlmn(); // Get the name from EF_PNN.
+ if (!TextUtils.isEmpty(currPnn)) {
+ newCarrierName = currPnn;
+ nameSource = SubscriptionManager.NAME_SOURCE_SIM_PNN;
+ } else {
+ newCarrierName = phone.getCarrierName(); // Get the name from carrier id.
+ nameSource = SubscriptionManager.NAME_SOURCE_DEFAULT_SOURCE;
+ }
}
}
diff --git a/src/java/com/android/internal/telephony/uicc/VoiceMailConstants.java b/src/java/com/android/internal/telephony/uicc/VoiceMailConstants.java
index b3bdf14..0839758 100644
--- a/src/java/com/android/internal/telephony/uicc/VoiceMailConstants.java
+++ b/src/java/com/android/internal/telephony/uicc/VoiceMailConstants.java
@@ -18,19 +18,19 @@
import android.annotation.UnsupportedAppUsage;
import android.os.Environment;
-import android.util.Xml;
import android.telephony.Rlog;
+import android.util.Xml;
-import java.util.HashMap;
-import java.io.FileReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
+import com.android.internal.telephony.util.XmlUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import com.android.internal.util.XmlUtils;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashMap;
/**
* {@hide}
diff --git a/src/java/com/android/internal/telephony/util/TelephonyUtils.java b/src/java/com/android/internal/telephony/util/TelephonyUtils.java
deleted file mode 100644
index 518aece..0000000
--- a/src/java/com/android/internal/telephony/util/TelephonyUtils.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.telephony.util;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.pm.ComponentInfo;
-import android.content.pm.ResolveInfo;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-
-/**
- * This class provides various util functions
- */
-public final class TelephonyUtils {
- public static boolean IS_USER = "user".equals(android.os.Build.TYPE);
-
- /** {@hide} */
- public static String emptyIfNull(@Nullable String str) {
- return str == null ? "" : str;
- }
-
- public static boolean IS_DEBUGGABLE =
- SystemProperties.getInt("ro.debuggable", 0) == 1;
-
- /** {@hide} */
- public static RuntimeException rethrowAsRuntimeException(RemoteException remoteException) {
- throw new RuntimeException(remoteException);
- }
-
- public static ComponentInfo getComponentInfo(@NonNull ResolveInfo resolveInfo) {
- if (resolveInfo.activityInfo != null) return resolveInfo.activityInfo;
- if (resolveInfo.serviceInfo != null) return resolveInfo.serviceInfo;
- if (resolveInfo.providerInfo != null) return resolveInfo.providerInfo;
- throw new IllegalStateException("Missing ComponentInfo!");
- }
- }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ClientWakelockAccountantTest.java b/tests/telephonytests/src/com/android/internal/telephony/ClientWakelockAccountantTest.java
index f7132b8..d406996 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ClientWakelockAccountantTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ClientWakelockAccountantTest.java
@@ -16,12 +16,7 @@
package com.android.internal.telephony;
-import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
-
-import android.os.Build;
-import android.util.Log;
-import android.telephony.Rlog;
-import android.telephony.TelephonyHistogram;
+import com.android.internal.telephony.util.TelephonyUtils;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -87,7 +82,7 @@
}
public void testStartAttributingWithZeroConcurrentRequests() throws Exception {
- if(Build.IS_DEBUGGABLE) {
+ if (TelephonyUtils.IS_DEBUGGABLE) {
try {
mClient.startAttributingWakelock(15, 25, 0, 100);
fail("Expecting an illegal argument Exception to be thrown");
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index ae8dd62..e3b325c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -24,6 +24,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.nullable;
import static org.mockito.Mockito.anyBoolean;
@@ -33,6 +34,7 @@
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -66,6 +68,7 @@
import com.android.internal.telephony.test.SimulatedCommands;
import com.android.internal.telephony.uicc.IccCardApplicationStatus;
+import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccVmNotSupportedException;
import com.android.internal.telephony.uicc.UiccController;
@@ -89,6 +92,10 @@
public class GsmCdmaPhoneTest extends TelephonyTest {
@Mock
private Handler mTestHandler;
+ @Mock
+ private UiccSlot mUiccSlot;
+ @Mock
+ private CommandsInterface mMockCi;
//mPhoneUnderTest
private GsmCdmaPhone mPhoneUT;
@@ -1197,4 +1204,24 @@
CarrierConfigManager.KEY_USE_USIM_BOOL, true);
assertEquals(msisdn, mPhoneUT.getLine1Number());
}
+
+ @Test
+ @SmallTest
+ public void testEnableUiccApplications() throws Exception {
+ mPhoneUT.mCi = mMockCi;
+ // UiccSlot is null. Doing nothing.
+ mPhoneUT.enableUiccApplications(true, null);
+ verify(mMockCi, never()).enableUiccApplications(anyBoolean(), any());
+
+ // Card state is not PRESENT. Doing nothing.
+ doReturn(mUiccSlot).when(mUiccController).getUiccSlotForPhone(anyInt());
+ doReturn(IccCardStatus.CardState.CARDSTATE_ABSENT).when(mUiccSlot).getCardState();
+ mPhoneUT.enableUiccApplications(true, null);
+ verify(mMockCi, never()).enableUiccApplications(anyBoolean(), any());
+
+ doReturn(IccCardStatus.CardState.CARDSTATE_PRESENT).when(mUiccSlot).getCardState();
+ Message message = Message.obtain();
+ mPhoneUT.enableUiccApplications(true, message);
+ verify(mMockCi).enableUiccApplications(eq(true), eq(message));
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
index fda30f5..cc1cb2c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
@@ -26,6 +26,7 @@
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DELETE_SMS_ON_SIM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEVICE_IDENTITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DTMF;
+import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_UICC_APPLICATIONS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PIN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PIN2;
@@ -40,6 +41,7 @@
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_RADIO_CAPABILITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SIM_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SMSC_ADDRESS;
+import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND;
@@ -82,11 +84,14 @@
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -97,13 +102,13 @@
import android.hardware.radio.V1_0.CdmaSmsMessage;
import android.hardware.radio.V1_0.DataProfileInfo;
import android.hardware.radio.V1_0.GsmSmsMessage;
-import android.hardware.radio.V1_0.IRadio;
import android.hardware.radio.V1_0.ImsSmsMessage;
import android.hardware.radio.V1_0.NvWriteItem;
import android.hardware.radio.V1_0.RadioError;
import android.hardware.radio.V1_0.RadioResponseInfo;
import android.hardware.radio.V1_0.RadioResponseType;
import android.hardware.radio.V1_0.SmsWriteArgs;
+import android.hardware.radio.V1_5.IRadio;
import android.hardware.radio.deprecated.V1_0.IOemHook;
import android.net.ConnectivityManager;
import android.net.LinkAddress;
@@ -177,7 +182,12 @@
@Mock
private IOemHook mOemHookProxy;
- private HalVersion mRadioVersion = new HalVersion(1, 0);
+ private HalVersion mRadioVersionV10 = new HalVersion(1, 0);
+ private HalVersion mRadioVersionV11 = new HalVersion(1, 1);
+ private HalVersion mRadioVersionV12 = new HalVersion(1, 2);
+ private HalVersion mRadioVersionV13 = new HalVersion(1, 3);
+ private HalVersion mRadioVersionV14 = new HalVersion(1, 4);
+ private HalVersion mRadioVersionV15 = new HalVersion(1, 5);
private RIL mRILInstance;
private RIL mRILUnderTest;
@@ -273,7 +283,7 @@
doReturn(mOemHookProxy).when(mRILUnderTest).getOemHookProxy(any());
try {
- replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersion);
+ replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersionV10);
} catch (Exception e) {
}
}
@@ -2000,4 +2010,38 @@
assertTrue(result.equals(expected));
}
+
+ @Test
+ public void testEnableUiccApplications() throws Exception {
+ // Not supported on Radio 1.0.
+ mRILUnderTest.enableUiccApplications(false, obtainMessage());
+ verify(mRadioProxy, never()).enableUiccApplications(anyInt(), anyBoolean());
+
+ // Make radio version 1.5 to support the operation.
+ try {
+ replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersionV15);
+ } catch (Exception e) {
+ }
+ mRILUnderTest.enableUiccApplications(false, obtainMessage());
+ verify(mRadioProxy).enableUiccApplications(mSerialNumberCaptor.capture(), anyBoolean());
+ verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(),
+ RIL_REQUEST_ENABLE_UICC_APPLICATIONS);
+ }
+
+ @Test
+ public void testAreUiccApplicationsEnabled() throws Exception {
+ // Not supported on Radio 1.0.
+ mRILUnderTest.areUiccApplicationsEnabled(obtainMessage());
+ verify(mRadioProxy, never()).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
+
+ // Make radio version 1.5 to support the operation.
+ try {
+ replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersionV15);
+ } catch (Exception e) {
+ }
+ mRILUnderTest.areUiccApplicationsEnabled(obtainMessage());
+ verify(mRadioProxy).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
+ verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(),
+ RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT);
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
index 60494a8..2d47062 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTest.java
@@ -200,19 +200,13 @@
public void testOperatorName() {
ServiceState ss = new ServiceState();
- ss.setDataOperatorAlphaLong("abc");
- assertEquals("abc", ss.getDataOperatorAlphaLong());
-
- ss.setDataOperatorName("def", "xyz", "123456");
- assertEquals("xyz", ss.getDataOperatorAlphaShort());
+ ss.setOperatorAlphaLong("abc");
+ assertEquals("abc", ss.getOperatorAlphaLong());
ss.setOperatorName("long", "short", "numeric");
- assertEquals("long", ss.getVoiceOperatorAlphaLong());
- assertEquals("short", ss.getVoiceOperatorAlphaShort());
- assertEquals("numeric", ss.getVoiceOperatorNumeric());
- assertEquals("long", ss.getDataOperatorAlphaLong());
- assertEquals("short", ss.getDataOperatorAlphaShort());
- assertEquals("numeric", ss.getDataOperatorNumeric());
+ assertEquals("long", ss.getOperatorAlphaLong());
+ assertEquals("short", ss.getOperatorAlphaShort());
+ assertEquals("numeric", ss.getOperatorNumeric());
assertEquals("long", ss.getOperatorAlpha());
ss.setOperatorName("", "short", "");
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SimulatedCommandsVerifier.java b/tests/telephonytests/src/com/android/internal/telephony/SimulatedCommandsVerifier.java
index 64b0c38..93077e3 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SimulatedCommandsVerifier.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SimulatedCommandsVerifier.java
@@ -1444,4 +1444,10 @@
@Override
public void stopNattKeepalive(int sessionHandle, Message result) {
}
+
+ @Override
+ public void registerUiccApplicationEnablementChanged(Handler h, int what, Object obj) {}
+
+ @Override
+ public void unregisterUiccApplicationEnablementChanged(Handler h) {}
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java
index 75b3534..899ffc8 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java
@@ -60,6 +60,7 @@
import java.util.Comparator;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
public class SubscriptionControllerTest extends TelephonyTest {
private static final int SINGLE_SIM = 1;
@@ -202,7 +203,7 @@
/* Setting */
String disName = "TESTING";
- int nameSource = SubscriptionManager.NAME_SOURCE_SIM_SOURCE;
+ int nameSource = SubscriptionManager.NAME_SOURCE_SIM_SPN;
mSubscriptionControllerUT.setDisplayNameUsingSrc(disName, subID, nameSource);
SubscriptionInfo subInfo = mSubscriptionControllerUT
.getActiveSubscriptionInfo(subID, mCallingPackage);
@@ -465,12 +466,12 @@
// Changing non-opportunistic sub1 shouldn't trigger callback.
mSubscriptionControllerUT.setDisplayNameUsingSrc("DisplayName", 1,
- SubscriptionManager.NAME_SOURCE_SIM_SOURCE);
+ SubscriptionManager.NAME_SOURCE_SIM_SPN);
verify(mTelephonyRegisteryMock, times(1))
.notifyOpportunisticSubscriptionInfoChanged();
mSubscriptionControllerUT.setDisplayNameUsingSrc("DisplayName", 2,
- SubscriptionManager.NAME_SOURCE_SIM_SOURCE);
+ SubscriptionManager.NAME_SOURCE_SIM_SPN);
verify(mTelephonyRegisteryMock, times(2))
.notifyOpportunisticSubscriptionInfoChanged();
}
@@ -729,6 +730,57 @@
@Test
@SmallTest
+ public void testAddSubscriptionIntoGroupWithCarrierPrivilegePermission() throws Exception {
+ testInsertSim();
+ // Adding a second profile and mark as embedded.
+ // TODO b/123300875 slot index 1 is not expected to be valid
+ mSubscriptionControllerUT.addSubInfoRecord("test2", 1);
+ ContentValues values = new ContentValues();
+ values.put(SubscriptionManager.IS_EMBEDDED, 1);
+ mFakeTelephonyProvider.update(SubscriptionManager.CONTENT_URI, values,
+ SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID + "=" + 2, null);
+ mSubscriptionControllerUT.refreshCachedActiveSubscriptionInfoList();
+
+ mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
+ mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PHONE_STATE);
+
+ // Create group for sub 1.
+ int[] subIdList = new int[] {1};
+ doReturn(true).when(mTelephonyManager).hasCarrierPrivileges(1);
+ ParcelUuid groupId = mSubscriptionControllerUT.createSubscriptionGroup(
+ subIdList, "packageName1");
+
+ // Try to add sub 2 into group of sub 1.
+ // Should fail as it doesn't have carrier privilege on sub 2.
+ try {
+ mSubscriptionControllerUT.addSubscriptionsIntoGroup(
+ new int[] {2}, groupId, "packageName1");
+ fail("addSubscriptionsIntoGroup should fail with no permission on sub 2.");
+ } catch (SecurityException e) {
+ // Expected result.
+ }
+
+ doReturn(false).when(mTelephonyManager).hasCarrierPrivileges(1);
+ doReturn(true).when(mTelephonyManager).hasCarrierPrivileges(2);
+ // Try to add sub 2 into group of sub 1.
+ // Should fail as it doesn't have carrier privilege on sub 1.
+ try {
+ mSubscriptionControllerUT.addSubscriptionsIntoGroup(
+ new int[] {2}, groupId, "packageName2");
+ fail("addSubscriptionsIntoGroup should fail with no permission on the group (sub 1).");
+ } catch (SecurityException e) {
+ // Expected result.
+ }
+
+ doReturn(true).when(mTelephonyManager).hasCarrierPrivileges(1);
+ mSubscriptionControllerUT.addSubscriptionsIntoGroup(new int[] {2}, groupId, "packageName2");
+ List<SubscriptionInfo> infoList = mSubscriptionControllerUT
+ .getSubscriptionsInGroup(groupId, "packageName2");
+ assertEquals(2, infoList.size());
+ }
+
+ @Test
+ @SmallTest
public void testUpdateSubscriptionGroupWithCarrierPrivilegePermission() throws Exception {
testInsertSim();
// Adding a second profile and mark as embedded.
@@ -893,6 +945,15 @@
.getSubscriptionsInGroup(groupUuid, mContext.getOpPackageName());
assertEquals(1, infoList.size());
assertEquals(2, infoList.get(0).getSubscriptionId());
+
+ // Adding sub 1 into a non-existing UUID, which should be granted.
+ groupUuid = new ParcelUuid(UUID.randomUUID());
+ mSubscriptionControllerUT.addSubscriptionsIntoGroup(
+ subIdList, groupUuid, mContext.getOpPackageName());
+ infoList = mSubscriptionControllerUT
+ .getSubscriptionsInGroup(groupUuid, mContext.getOpPackageName());
+ assertEquals(1, infoList.size());
+ assertEquals(1, infoList.get(0).getSubscriptionId());
}
private void registerMockTelephonyRegistry() {
@@ -1004,4 +1065,28 @@
mSubscriptionControllerUT.setAlwaysAllowMmsData(0, false);
verify(mDataEnabledSettings).setAlwaysAllowMmsData(eq(false));
}
+
+ @Test
+ @SmallTest
+ public void testNameSourcePriority() throws Exception {
+ assertTrue(mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_USER_INPUT)
+ > mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_CARRIER));
+
+ assertTrue(mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_CARRIER)
+ > mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_SIM_SPN));
+
+ assertTrue(mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_SIM_SPN)
+ > mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_SIM_PNN));
+
+ assertTrue(mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_SIM_PNN)
+ > mSubscriptionControllerUT.getNameSourcePriority(
+ SubscriptionManager.NAME_SOURCE_DEFAULT_SOURCE));
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
index 9250942..ad6e7ec 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
@@ -29,6 +29,7 @@
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.net.NetworkCapabilities;
@@ -57,6 +58,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -72,6 +74,9 @@
@Mock
private RadioConfig mMockRadioConfig;
+ @Mock
+ private DataConnection mDataConnection;
+
private String mTestName = "";
private final ArrayList<NetworkRequest> mNetworkRequestList = new ArrayList<>();
@@ -346,4 +351,41 @@
h.sendMessage(h.obtainMessage(5, ar));
processAllMessages();
}
+
+ /**
+ * Test handover when the data connection is being connected.
+ */
+ @Test
+ @SmallTest
+ public void testHandoverActivatingData() throws Exception {
+ createMockedTelephonyComponents();
+ doReturn(0).when(mSubscriptionController).getSubIdUsingPhoneId(0);
+ mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
+ TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);
+
+ activatePhoneInPhoneSwitcher(0, true);
+ makeDefaultInternetRequest();
+
+ makeSubSpecificMmsRequest(0);
+ processAllMessages();
+
+ Field f = TelephonyNetworkFactory.class.getDeclaredField("mInternalHandler");
+ f.setAccessible(true);
+ Handler h = (Handler) f.get(mTelephonyNetworkFactoryUT);
+
+ HandoverCallback handoverCallback = mock(HandoverCallback.class);
+ Mockito.reset(mDcTracker);
+ doReturn(mDataConnection).when(mDcTracker).getDataConnectionByApnType(anyString());
+ doReturn(false).when(mDataConnection).isActive();
+
+ HandoverParams hp = new HandoverParams(ApnSetting.TYPE_MMS,
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN, handoverCallback);
+ AsyncResult ar = new AsyncResult(null, hp, null);
+ h.sendMessage(h.obtainMessage(5, ar));
+ processAllMessages();
+
+ verify(mDcTracker, times(1)).releaseNetwork(any(), eq(1));
+ verify(mDcTracker, times(1)).requestNetwork(any(), eq(1), any());
+ }
+
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
index 3b23510..2dce712 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java
@@ -27,6 +27,7 @@
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.nullable;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
@@ -806,8 +807,9 @@
SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler);
// verify that a broadcast receiver is registered for current user (user == null) based on
- // implementation in ContextFixture
- verify(mContext, times(1)).registerReceiverAsUser(any(BroadcastReceiver.class),
+ // implementation in ContextFixture. registerReceiver may be called more than once (for
+ // example by GsmInboundSmsHandler if TEST_MODE is true)
+ verify(mContext, atLeastOnce()).registerReceiverAsUser(any(BroadcastReceiver.class),
eq((UserHandle)null), any(IntentFilter.class), eq((String)null), eq((Handler)null));
// wait for ScanRawTableThread
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java
index 571f4ee..30e1297 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java
@@ -113,12 +113,9 @@
doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getVoiceRoamingType();
doReturn(ROAMING_TYPE_DOMESTIC).when(mServiceState).getDataRoamingType();
- doReturn("voiceshort").when(mServiceState).getVoiceOperatorAlphaShort();
- doReturn("voicelong").when(mServiceState).getVoiceOperatorAlphaLong();
- doReturn("datashort").when(mServiceState).getDataOperatorAlphaShort();
- doReturn("datalong").when(mServiceState).getDataOperatorAlphaLong();
- doReturn("123456").when(mServiceState).getVoiceOperatorNumeric();
- doReturn("123456").when(mServiceState).getDataOperatorNumeric();
+ doReturn("short").when(mServiceState).getOperatorAlphaShort();
+ doReturn("long").when(mServiceState).getOperatorAlphaLong();
+ doReturn("123456").when(mServiceState).getOperatorNumeric();
doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilVoiceRadioTechnology();
doReturn(RIL_RADIO_TECHNOLOGY_LTE).when(mServiceState).getRilDataRadioTechnology();
doReturn(FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
@@ -708,15 +705,15 @@
assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.dataRoamingType);
- assertEquals("voicelong", state.voiceOperator.alphaLong);
+ assertEquals("long", state.voiceOperator.alphaLong);
- assertEquals("voiceshort", state.voiceOperator.alphaShort);
+ assertEquals("short", state.voiceOperator.alphaShort);
assertEquals("123456", state.voiceOperator.numeric);
- assertEquals("datalong", state.dataOperator.alphaLong);
+ assertEquals("long", state.dataOperator.alphaLong);
- assertEquals("datashort", state.dataOperator.alphaShort);
+ assertEquals("short", state.dataOperator.alphaShort);
assertEquals("123456", state.dataOperator.numeric);
@@ -756,15 +753,15 @@
assertEquals(RoamingType.ROAMING_TYPE_DOMESTIC, state.dataRoamingType);
- assertEquals("voicelong", state.voiceOperator.alphaLong);
+ assertEquals("long", state.voiceOperator.alphaLong);
- assertEquals("voiceshort", state.voiceOperator.alphaShort);
+ assertEquals("short", state.voiceOperator.alphaShort);
assertEquals("123456", state.voiceOperator.numeric);
- assertEquals("datalong", state.dataOperator.alphaLong);
+ assertEquals("long", state.dataOperator.alphaLong);
- assertEquals("datashort", state.dataOperator.alphaShort);
+ assertEquals("short", state.dataOperator.alphaShort);
assertEquals("123456", state.dataOperator.numeric);
}