aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Yu <jackyu@google.com>2023-07-21 21:28:27 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-07-21 21:28:27 +0000
commit6fbfe5001fd3bd571a67f516f7a34882ddeacc56 (patch)
treec703787f893db1ab465fcbc888737a9a6717deba
parent679df5c9902023d2a1c95f55c8dee2b15aa53338 (diff)
parentbca5aa5f14971dfe194d10054a22ffb3768cb967 (diff)
downloadservice_entitlement-6fbfe5001fd3bd571a67f516f7a34882ddeacc56.tar.gz
Added getPhoneNumber support am: 23bf54028d am: 0b70ef0f81 am: bca5aa5f14
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/service_entitlement/+/2670200 Change-Id: Ief75a537030d1d85911a1372ad00a51b2795e5a1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--java/com/android/libraries/entitlement/Ts43Operation.java59
-rw-r--r--java/com/android/libraries/entitlement/odsa/GetPhoneNumberOperation.java65
-rw-r--r--tests/src/com/android/libraries/entitlement/Ts43OperationTest.java30
3 files changed, 151 insertions, 3 deletions
diff --git a/java/com/android/libraries/entitlement/Ts43Operation.java b/java/com/android/libraries/entitlement/Ts43Operation.java
index a95ff10..681220a 100644
--- a/java/com/android/libraries/entitlement/Ts43Operation.java
+++ b/java/com/android/libraries/entitlement/Ts43Operation.java
@@ -36,6 +36,7 @@ import com.android.libraries.entitlement.odsa.CheckEligibilityOperation;
import com.android.libraries.entitlement.odsa.CheckEligibilityOperation.CheckEligibilityRequest;
import com.android.libraries.entitlement.odsa.CheckEligibilityOperation.CheckEligibilityResponse;
import com.android.libraries.entitlement.odsa.DownloadInfo;
+import com.android.libraries.entitlement.odsa.GetPhoneNumberOperation.GetPhoneNumberResponse;
import com.android.libraries.entitlement.odsa.ManageServiceOperation.ManageServiceRequest;
import com.android.libraries.entitlement.odsa.ManageServiceOperation.ManageServiceResponse;
import com.android.libraries.entitlement.odsa.ManageSubscriptionOperation.ManageSubscriptionRequest;
@@ -853,14 +854,66 @@ public class Ts43Operation {
* Get the phone number as described in GSMA Service Entitlement Configuration section 6.2 and
* 6.5.8.
*
- * @return The phone number in E.164 format.
+ * @return The phone number response from the network.
* @throws ServiceEntitlementException The exception for error case. If it's an HTTP response
* error from the server, the error code can be retrieved by
* {@link ServiceEntitlementException#getHttpStatus()}
*/
@NonNull
- public String getPhoneNumber() throws ServiceEntitlementException {
- return "";
+ public GetPhoneNumberResponse getPhoneNumber() throws ServiceEntitlementException {
+ ServiceEntitlementRequest.Builder builder =
+ ServiceEntitlementRequest.builder()
+ .setEntitlementVersion(mEntitlementVersion)
+ .setTerminalId(mImei);
+
+ if (mTokenType == TOKEN_TYPE_NORMAL) {
+ builder.setAuthenticationToken(mAuthToken);
+ } else if (mTokenType == TOKEN_TYPE_TEMPORARY) {
+ builder.setTemporaryToken(mTemporaryToken);
+ }
+
+ ServiceEntitlementRequest request = builder.build();
+
+ EsimOdsaOperation operation =
+ EsimOdsaOperation.builder()
+ .setOperation(EsimOdsaOperation.OPERATION_GET_PHONE_NUMBER)
+ .build();
+
+ String rawXml;
+ try {
+ rawXml =
+ mServiceEntitlement.performEsimOdsa(
+ EsimOdsaOperation.OPERATION_GET_PHONE_NUMBER, request, operation);
+ } catch (ServiceEntitlementException e) {
+ Log.w(TAG, "getPhoneNumber: Failed to perform ODSA operation. e=" + e);
+ throw e;
+ }
+
+ // Build the response of get phone number operation. Refer to GSMA Service Entitlement
+ // Configuration section 6.5.8.
+ GetPhoneNumberResponse.Builder responseBuilder = GetPhoneNumberResponse.builder();
+
+ Ts43XmlDoc ts43XmlDoc = new Ts43XmlDoc(rawXml);
+
+ try {
+ processGeneralResult(ts43XmlDoc, responseBuilder);
+ } catch (MalformedURLException e) {
+ throw new ServiceEntitlementException(
+ ServiceEntitlementException.ERROR_MALFORMED_HTTP_RESPONSE,
+ "getPhoneNumber: Malformed URL " + rawXml);
+ }
+
+ // Parse msisdn.
+ String msisdn =
+ ts43XmlDoc.get(
+ ImmutableList.of(Ts43XmlDoc.CharacteristicType.APPLICATION),
+ Ts43XmlDoc.Parm.MSISDN);
+
+ if (!TextUtils.isEmpty(msisdn)) {
+ responseBuilder.setMsisdn(msisdn);
+ }
+
+ return responseBuilder.build();
}
/**
diff --git a/java/com/android/libraries/entitlement/odsa/GetPhoneNumberOperation.java b/java/com/android/libraries/entitlement/odsa/GetPhoneNumberOperation.java
new file mode 100644
index 0000000..4ae07f1
--- /dev/null
+++ b/java/com/android/libraries/entitlement/odsa/GetPhoneNumberOperation.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2023 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.libraries.entitlement.odsa;
+
+import androidx.annotation.NonNull;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * Get phone number operation described in GSMA Service Entitlement Configuration section 6.
+ */
+public final class GetPhoneNumberOperation {
+ /**
+ * Get phone number response described in GSMA Service Entitlement Configuration section
+ * 6.5.8.
+ */
+ @AutoValue
+ public abstract static class GetPhoneNumberResponse extends OdsaResponse {
+
+ /** The phone number of the subscriber in E.164 format. */
+ public abstract String msisdn();
+
+ /** Returns a new {@link GetPhoneNumberResponse.Builder} object. */
+ @NonNull
+ public static Builder builder() {
+ return new AutoValue_GetPhoneNumberOperation_GetPhoneNumberResponse
+ .Builder()
+ .setMsisdn("");
+ }
+
+ /** Builder. */
+ @AutoValue.Builder
+ public abstract static class Builder extends OdsaResponse.Builder {
+ /**
+ * Sets the phone number of the subscriber.
+ *
+ * @param msisdn The phone number of the subscriber in E.164 format.
+ * @return The builder.
+ */
+ @NonNull
+ public abstract Builder setMsisdn(@NonNull String msisdn);
+
+ /** Returns the {@link GetPhoneNumberResponse} object. */
+ @NonNull
+ public abstract GetPhoneNumberResponse build();
+ }
+ }
+
+ private GetPhoneNumberOperation() {
+ }
+}
diff --git a/tests/src/com/android/libraries/entitlement/Ts43OperationTest.java b/tests/src/com/android/libraries/entitlement/Ts43OperationTest.java
index daf135f..6d90c5d 100644
--- a/tests/src/com/android/libraries/entitlement/Ts43OperationTest.java
+++ b/tests/src/com/android/libraries/entitlement/Ts43OperationTest.java
@@ -35,6 +35,7 @@ import com.android.libraries.entitlement.odsa.AcquireTemporaryTokenOperation.Acq
import com.android.libraries.entitlement.odsa.CheckEligibilityOperation;
import com.android.libraries.entitlement.odsa.CheckEligibilityOperation.CheckEligibilityRequest;
import com.android.libraries.entitlement.odsa.CheckEligibilityOperation.CheckEligibilityResponse;
+import com.android.libraries.entitlement.odsa.GetPhoneNumberOperation.GetPhoneNumberResponse;
import com.android.libraries.entitlement.odsa.ManageServiceOperation.ManageServiceRequest;
import com.android.libraries.entitlement.odsa.ManageServiceOperation.ManageServiceResponse;
import com.android.libraries.entitlement.odsa.ManageSubscriptionOperation.ManageSubscriptionRequest;
@@ -74,6 +75,8 @@ public class Ts43OperationTest {
private static final String NOT_ENABLED_USER_DATA = "msisdn=XX";
+ private static final String MSISDN = "+16502530000";
+
private static final String MANAGE_SUBSCRIPTION_RESPONSE_CONTINUE_TO_WEBSHEET =
"<?xml version=\"1.0\"?>"
+ "<wap-provisioningdoc version=\"1.1\">"
@@ -201,6 +204,23 @@ public class Ts43OperationTest {
+ "</characteristic>\n"
+ "</wap-provisioningdoc>";
+ public String GET_PHONE_NUMBER_RESPONSE =
+ "<?xml version=\"1.0\"?>\n"
+ + "<wap-provisioningdoc version=\"1.1\">\n"
+ + "<characteristic type=\"VERS\">\n"
+ + " <parm name=\"version\" value=\"1\"/>\n"
+ + " <parm name=\"validity\" value=\"172800\"/>\n"
+ + "</characteristic>\n"
+ + "<characteristic type=\"TOKEN\">\n"
+ + " <parm name=\"token\" value=\"ASH127AHHA88SF\"/>\n"
+ + "</characteristic>\n"
+ + "<characteristic type=\"APPLICATION\">\n"
+ + " <parm name=\"AppID\" value=\"ap2014\"/>\n"
+ + " <parm name=\"OperationResult\" value=\"1\"/>\n"
+ + " <parm name=\"MSISDN\" value=\"" + MSISDN + "\"/>\n"
+ + "</characteristic>\n"
+ + "</wap-provisioningdoc>";
+
@Mock
private EapAkaApi mMockEapAkaApi;
@@ -351,4 +371,14 @@ public class Ts43OperationTest {
assertThat(response.serviceStatus()).isEqualTo(
EsimOdsaOperation.SERVICE_STATUS_DEACTIVATED);
}
+
+ @Test
+ public void testGetPhoneNumber() throws Exception {
+ doReturn(GET_PHONE_NUMBER_RESPONSE).when(mMockHttpResponse).body();
+
+ GetPhoneNumberResponse response = mTs43Operation.getPhoneNumber();
+ assertThat(response.operationResult()).isEqualTo(
+ EsimOdsaOperation.OPERATION_RESULT_SUCCESS);
+ assertThat(response.msisdn()).isEqualTo(MSISDN);
+ }
}