Add setAllowedCarriers, getAllowedCarriers to Phone and RIL
Bug: 28564314
Change-Id: I52be8bc7b2f74af9af2a1e3364d4ea33bb806681
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index 3819953..dc7cf64 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -24,6 +24,9 @@
import android.os.Message;
import android.os.Handler;
+import android.service.carrier.CarrierIdentifier;
+
+import java.util.List;
/**
@@ -2017,4 +2020,19 @@
* @param result Callback message contains the modem activity information
*/
public void getModemActivityInfo(Message result);
+
+ /**
+ * Set allowed carriers
+ *
+ * @param carriers Allowed carriers
+ * @param result Callback message contains the number of carriers set successfully
+ */
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result);
+
+ /**
+ * Get allowed carriers
+ *
+ * @param result Callback message contains the allowed carriers
+ */
+ public void getAllowedCarriers(Message result);
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index df9b988..79a054b 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -35,6 +35,7 @@
import android.os.SystemProperties;
import android.preference.PreferenceManager;
import android.provider.Settings;
+import android.service.carrier.CarrierIdentifier;
import android.telecom.VideoProfile;
import android.telephony.CellIdentityCdma;
import android.telephony.CellInfo;
@@ -3162,6 +3163,20 @@
}
/**
+ * Set allowed carriers
+ */
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message response) {
+ mCi.setAllowedCarriers(carriers, response);
+ }
+
+ /**
+ * Get allowed carriers
+ */
+ public void getAllowedCarriers(Message response) {
+ mCi.getAllowedCarriers(response);
+ }
+
+ /**
* Returns the locale based on the carrier properties (such as {@code ro.carrier}) and
* SIM preferences.
*/
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 46d486b..bc94a63 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -45,6 +45,7 @@
import android.os.PowerManager.WakeLock;
import android.os.SystemClock;
import android.provider.Settings.SettingNotFoundException;
+import android.service.carrier.CarrierIdentifier;
import android.telephony.CellInfo;
import android.telephony.NeighboringCellInfo;
import android.telephony.PhoneNumberUtils;
@@ -89,6 +90,7 @@
import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.List;
import java.util.Random;
/**
@@ -2798,6 +2800,8 @@
case RIL_REQUEST_STOP_LCE: ret = responseLceStatus(p); break;
case RIL_REQUEST_PULL_LCEDATA: ret = responseLceData(p); break;
case RIL_REQUEST_GET_ACTIVITY_INFO: ret = responseActivityData(p); break;
+ case RIL_REQUEST_SET_ALLOWED_CARRIERS: ret = responseInts(p); break;
+ case RIL_REQUEST_GET_ALLOWED_CARRIERS: ret = responseCarrierIdentifiers(p); break;
default:
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
//break;
@@ -4273,6 +4277,31 @@
idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0);
}
+ private Object responseCarrierIdentifiers(Parcel p) {
+ List<CarrierIdentifier> retVal = new ArrayList<CarrierIdentifier>();
+ int len_allowed_carriers = p.readInt();
+ int len_excluded_carriers = p.readInt();
+ for (int i = 0; i < len_allowed_carriers; i++) {
+ String mcc = p.readString();
+ String mnc = p.readString();
+ String spn = null, imsi = null, gid1 = null, gid2 = null;
+ int matchType = p.readInt();
+ String matchData = p.readString();
+ if (matchType == CarrierIdentifier.MatchType.SPN) {
+ spn = matchData;
+ } else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
+ imsi = matchData;
+ } else if (matchType == CarrierIdentifier.MatchType.GID1) {
+ gid1 = matchData;
+ } else if (matchType == CarrierIdentifier.MatchType.GID2) {
+ gid2 = matchData;
+ }
+ retVal.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
+ }
+ /* TODO: Handle excluded carriers */
+ return retVal;
+ }
+
static String
requestToString(int request) {
/*
@@ -4416,6 +4445,8 @@
case RIL_REQUEST_STOP_LCE: return "RIL_REQUEST_STOP_LCE";
case RIL_REQUEST_PULL_LCEDATA: return "RIL_REQUEST_PULL_LCEDATA";
case RIL_REQUEST_GET_ACTIVITY_INFO: return "RIL_REQUEST_GET_ACTIVITY_INFO";
+ case RIL_REQUEST_SET_ALLOWED_CARRIERS: return "RIL_REQUEST_SET_ALLOWED_CARRIERS";
+ case RIL_REQUEST_GET_ALLOWED_CARRIERS: return "RIL_REQUEST_GET_ALLOWED_CARRIERS";
case RIL_RESPONSE_ACKNOWLEDGEMENT: return "RIL_RESPONSE_ACKNOWLEDGEMENT";
default: return "<unknown request>";
}
@@ -5072,4 +5103,47 @@
msg.arg1 = rr.mSerial;
mSender.sendMessageDelayed(msg, DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS);
}
+
+ @Override
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message response) {
+ RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_ALLOWED_CARRIERS, response);
+ rr.mParcel.writeInt(carriers.size()); /* len_allowed_carriers */
+ rr.mParcel.writeInt(0); /* len_excluded_carriers */ /* TODO: add excluded carriers */
+ for (CarrierIdentifier ci : carriers) { /* allowed carriers */
+ rr.mParcel.writeString(ci.getMcc());
+ rr.mParcel.writeString(ci.getMnc());
+ int matchType = CarrierIdentifier.MatchType.ALL;
+ String matchData = null;
+ if (!TextUtils.isEmpty(ci.getSpn())) {
+ matchType = CarrierIdentifier.MatchType.SPN;
+ matchData = ci.getSpn();
+ } else if (!TextUtils.isEmpty(ci.getImsi())) {
+ matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
+ matchData = ci.getImsi();
+ } else if (!TextUtils.isEmpty(ci.getGid1())) {
+ matchType = CarrierIdentifier.MatchType.GID1;
+ matchData = ci.getGid1();
+ } else if (!TextUtils.isEmpty(ci.getGid2())) {
+ matchType = CarrierIdentifier.MatchType.GID2;
+ matchData = ci.getGid2();
+ }
+ rr.mParcel.writeInt(matchType);
+ rr.mParcel.writeString(matchData);
+ }
+ /* TODO: add excluded carriers */
+
+ if (RILJ_LOGD) {
+ riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+ }
+ send(rr);
+ }
+
+ @Override
+ public void getAllowedCarriers(Message response) {
+ RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_ALLOWED_CARRIERS, response);
+ if (RILJ_LOGD) {
+ riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+ }
+ send(rr);
+ }
}
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
index bc3a1d8..7bfafc0 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.os.Handler;
import android.os.Message;
+import android.service.carrier.CarrierIdentifier;
import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.CommandsInterface;
@@ -28,6 +29,8 @@
import com.android.internal.telephony.RadioCapability;
import com.android.internal.telephony.UUSInfo;
+import java.util.List;
+
/**
* Volte doesn't need CommandsInterface. The class does nothing but made to work
* with Phone's constructor.
@@ -624,4 +627,12 @@
@Override
public void getModemActivityInfo(Message result) {
}
+
+ @Override
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) {
+ }
+
+ @Override
+ public void getAllowedCarriers(Message result) {
+ }
}
diff --git a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
index b68054c..934583c 100644
--- a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
+++ b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.os.Handler;
import android.os.Message;
+import android.service.carrier.CarrierIdentifier;
import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.CommandsInterface;
@@ -27,6 +28,8 @@
import com.android.internal.telephony.dataconnection.DataProfile;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
+import java.util.List;
+
/**
* SIP doesn't need CommandsInterface. The class does nothing but made to work
* with Phone's constructor.
@@ -627,4 +630,12 @@
public void getModemActivityInfo(Message result) {
}
+ @Override
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) {
+ }
+
+ @Override
+ public void getAllowedCarriers(Message result) {
+ }
+
}
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommands.java b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
index 2b928ac..5f32ca1 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -23,6 +23,7 @@
import android.os.Message;
import android.os.Parcel;
import android.os.Registrant;
+import android.service.carrier.CarrierIdentifier;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.Rlog;
@@ -1947,6 +1948,16 @@
}
@Override
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) {
+ unimplemented(result);
+ }
+
+ @Override
+ public void getAllowedCarriers(Message result) {
+ unimplemented(result);
+ }
+
+ @Override
public void getRadioCapability(Message result) {
SimulatedCommandsVerifier.getInstance().getRadioCapability(result);
resultSuccess(result, new RadioCapability(0, 0, 0, 0xFFFF, null, 0));
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommandsVerifier.java b/src/java/com/android/internal/telephony/test/SimulatedCommandsVerifier.java
index 11f6d4a..20e6de8 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommandsVerifier.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommandsVerifier.java
@@ -18,6 +18,7 @@
import android.os.Handler;
import android.os.Message;
+import android.service.carrier.CarrierIdentifier;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.RadioCapability;
@@ -26,6 +27,8 @@
import com.android.internal.telephony.dataconnection.DataProfile;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
+import java.util.List;
+
public class SimulatedCommandsVerifier implements CommandsInterface {
private static SimulatedCommandsVerifier sInstance;
@@ -1350,4 +1353,14 @@
public void getModemActivityInfo(Message result) {
}
+
+ @Override
+ public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) {
+
+ }
+
+ @Override
+ public void getAllowedCarriers(Message result) {
+
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/mocks/PhoneMock.java b/tests/telephonytests/src/com/android/internal/telephony/mocks/PhoneMock.java
index f1e54b2..2f9d581 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/mocks/PhoneMock.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/mocks/PhoneMock.java
@@ -26,6 +26,7 @@
import android.os.RegistrantList;
import android.net.LinkProperties;
import android.net.NetworkCapabilities;
+import android.service.carrier.CarrierIdentifier;
import android.telephony.CellInfo;
import android.telephony.CellLocation;
import android.telephony.DataConnectionRealTimeInfo;
@@ -993,6 +994,14 @@
throw new RuntimeException("not implemented");
}
+ public void setAllowedCarriers(List<CarrierIdentifier> carrierList, Message response) {
+ throw new RuntimeException("not implemented");
+ }
+
+ public void getAllowedCarriers(Message response) {
+ throw new RuntimeException("not implemented");
+ }
+
public void startLceAfterRadioIsAvailable() {
throw new RuntimeException("not implemented");
}