summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsamalin <samalin@google.com>2021-07-08 17:53:42 +0800
committersamalin <samalin@google.com>2021-07-22 14:58:58 +0800
commit3daf7190af2efc27bdd7a4698a082e8762ad3d68 (patch)
tree5e0ad2f5a37b4ec90e4e0b4c187812a91d79c3bf
parent456140e3b31e8c168a878195bf95ae49189f7821 (diff)
downloadImsServiceEntitlement-3daf7190af2efc27bdd7a4698a082e8762ad3d68.tar.gz
Add test cases for the code coverage
Coverage increased from 57% to 60% Test result: https://docs.google.com/spreadsheets/d/1JLl7cGpCtbeC4miYWP3RjYapRKAg-xUBOo4B3EZkXO4/edit?resourcekey=0-ErUUgGfICLRntN_aSfcJtg#gid=630428311 Bug: 191426388 Test: unit tests Change-Id: I65525276cd7b3219825fab18af02a0f3c9b0125b
-rw-r--r--src/com/android/imsserviceentitlement/ImsEntitlementPollingService.java26
-rw-r--r--src/com/android/imsserviceentitlement/ImsEntitlementReceiver.java6
-rw-r--r--src/com/android/imsserviceentitlement/WfcActivationController.java69
-rw-r--r--src/com/android/imsserviceentitlement/utils/ImsUtils.java54
-rw-r--r--src/com/android/imsserviceentitlement/utils/MetricsLogger.java54
-rw-r--r--src/com/android/imsserviceentitlement/utils/TelephonyUtils.java21
-rw-r--r--tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java23
-rw-r--r--tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementApiTest.java11
-rw-r--r--tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementReceiverTest.java34
-rw-r--r--tests/unittests/src/com/android/imsserviceentitlement/WfcActivationControllerTest.java360
-rw-r--r--tests/unittests/src/com/android/imsserviceentitlement/utils/ImsUtilsTest.java72
11 files changed, 577 insertions, 153 deletions
diff --git a/src/com/android/imsserviceentitlement/ImsEntitlementPollingService.java b/src/com/android/imsserviceentitlement/ImsEntitlementPollingService.java
index bd9ab76..04a5750 100644
--- a/src/com/android/imsserviceentitlement/ImsEntitlementPollingService.java
+++ b/src/com/android/imsserviceentitlement/ImsEntitlementPollingService.java
@@ -16,7 +16,6 @@
package com.android.imsserviceentitlement;
-import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__CANCELED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__DISABLED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__ENABLED;
@@ -47,6 +46,7 @@ import com.android.imsserviceentitlement.entitlement.EntitlementConfiguration.Cl
import com.android.imsserviceentitlement.entitlement.EntitlementResult;
import com.android.imsserviceentitlement.job.JobManager;
import com.android.imsserviceentitlement.utils.ImsUtils;
+import com.android.imsserviceentitlement.utils.MetricsLogger;
import com.android.imsserviceentitlement.utils.TelephonyUtils;
import java.time.Duration;
@@ -147,6 +147,7 @@ public class ImsEntitlementPollingService extends JobService {
private final ImsEntitlementApi mImsEntitlementApi;
private final ImsUtils mImsUtils;
private final TelephonyUtils mTelephonyUtils;
+ private final MetricsLogger mMetricsLogger;
private final int mSubid;
private final boolean mNeedsImsProvisioning;
@@ -168,15 +169,15 @@ public class ImsEntitlementPollingService extends JobService {
this.mImsEntitlementApi = ImsEntitlementPollingService.this.mImsEntitlementApi != null
? ImsEntitlementPollingService.this.mImsEntitlementApi
: new ImsEntitlementApi(ImsEntitlementPollingService.this, subId);
+ this.mMetricsLogger = new MetricsLogger(mTelephonyUtils);
}
@Override
protected Void doInBackground(Void... unused) {
- mStartTime = mTelephonyUtils.getUptimeMillis();
int jobId = JobManager.getPureJobId(mParams.getJobId());
switch (jobId) {
case JobManager.QUERY_ENTITLEMENT_STATUS_JOB_ID:
- mPurpose = IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__POLLING;
+ mMetricsLogger.start(IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__POLLING);
doEntitlementCheck();
break;
default:
@@ -343,13 +344,11 @@ public class ImsEntitlementPollingService extends JobService {
}
private void sendStatsLogToMetrics() {
- mDurationMillis = mTelephonyUtils.getUptimeMillis() - mStartTime;
-
// If no result set, it was cancelled for reasons.
if (mVowifiResult == IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNKNOWN_RESULT) {
mVowifiResult = IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__CANCELED;
}
- writeStateLogByApps(
+ mMetricsLogger.write(
IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI, mVowifiResult);
if (mNeedsImsProvisioning) {
@@ -359,22 +358,11 @@ public class ImsEntitlementPollingService extends JobService {
if (mSmsoipResult == IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNKNOWN_RESULT) {
mSmsoipResult = IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__CANCELED;
}
- writeStateLogByApps(
+ mMetricsLogger.write(
IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOLTE, mVolteResult);
- writeStateLogByApps(
+ mMetricsLogger.write(
IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__SMSOIP, mSmsoipResult);
}
}
-
- private void writeStateLogByApps(int appId, int appResult) {
- ImsServiceEntitlementStatsLog.write(
- IMS_SERVICE_ENTITLEMENT_UPDATED,
- mTelephonyUtils.getCarrierId(),
- mTelephonyUtils.getSpecificCarrierId(),
- mPurpose,
- appId,
- appResult,
- mDurationMillis);
- }
}
}
diff --git a/src/com/android/imsserviceentitlement/ImsEntitlementReceiver.java b/src/com/android/imsserviceentitlement/ImsEntitlementReceiver.java
index dc78b0a..e2741a6 100644
--- a/src/com/android/imsserviceentitlement/ImsEntitlementReceiver.java
+++ b/src/com/android/imsserviceentitlement/ImsEntitlementReceiver.java
@@ -68,7 +68,8 @@ public class ImsEntitlementReceiver extends BroadcastReceiver {
SubscriptionManager.INVALID_SIM_SLOT_INDEX);
Dependencies dependencies = createDependency(context, currentSubId);
if (!dependencies.userManager.isSystemUser()
- || !TelephonyUtils.isImsProvisioningRequired(context, currentSubId)) {
+ || !TelephonyUtils.isImsProvisioningRequired(context, currentSubId)
+ || !SubscriptionManager.isValidSubscriptionId(currentSubId)) {
return;
}
@@ -89,9 +90,6 @@ public class ImsEntitlementReceiver extends BroadcastReceiver {
private void handleCarrierConfigChanged(
Context context, int currentSubId, int slotId, JobManager jobManager,
PendingResult result) {
- if (!SubscriptionManager.isValidSubscriptionId(currentSubId)) {
- return;
- }
boolean shouldQuery = false;
// Handle device boot up.
diff --git a/src/com/android/imsserviceentitlement/WfcActivationController.java b/src/com/android/imsserviceentitlement/WfcActivationController.java
index ed63bf9..6bcd9ec 100644
--- a/src/com/android/imsserviceentitlement/WfcActivationController.java
+++ b/src/com/android/imsserviceentitlement/WfcActivationController.java
@@ -16,7 +16,6 @@
package com.android.imsserviceentitlement;
-import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__CANCELED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__DISABLED;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__FAILED;
@@ -26,7 +25,6 @@ import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IM
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNEXPECTED_RESULT;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNKNOWN_RESULT;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION;
-import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UNKNOWN_PURPOSE;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UPDATE;
import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI;
@@ -44,8 +42,11 @@ import androidx.annotation.StringRes;
import com.android.imsserviceentitlement.entitlement.EntitlementResult;
import com.android.imsserviceentitlement.ts43.Ts43VowifiStatus;
import com.android.imsserviceentitlement.utils.ImsUtils;
+import com.android.imsserviceentitlement.utils.MetricsLogger;
import com.android.imsserviceentitlement.utils.TelephonyUtils;
+import com.google.common.annotations.VisibleForTesting;
+
import java.time.Duration;
/**
@@ -67,14 +68,10 @@ public class WfcActivationController {
private final ImsEntitlementApi mImsEntitlementApi;
private final ImsUtils mImsUtils;
private final Intent mStartIntent;
+ private final MetricsLogger mMetricsLogger;
// States
private int mEvaluateTimes = 0;
-
- // States for metrics
- private long mStartTime;
- private long mDurationMillis;
- private int mPurpose = IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UNKNOWN_PURPOSE;
private int mAppResult = IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNKNOWN_RESULT;
@MainThread
@@ -88,6 +85,23 @@ public class WfcActivationController {
this.mImsEntitlementApi = imsEntitlementApi;
this.mTelephonyUtils = new TelephonyUtils(context, getSubId());
this.mImsUtils = ImsUtils.getInstance(context, getSubId());
+ this.mMetricsLogger = new MetricsLogger(mTelephonyUtils);
+ }
+
+ @VisibleForTesting
+ WfcActivationController(
+ Context context,
+ WfcActivationUi wfcActivationUi,
+ ImsEntitlementApi imsEntitlementApi,
+ Intent intent,
+ ImsUtils imsUtils,
+ MetricsLogger metricsLogger) {
+ this.mStartIntent = intent;
+ this.mActivationUi = wfcActivationUi;
+ this.mImsEntitlementApi = imsEntitlementApi;
+ this.mTelephonyUtils = new TelephonyUtils(context, getSubId());
+ this.mImsUtils = imsUtils;
+ this.mMetricsLogger = metricsLogger;
}
/** Indicates the controller to start WFC activation or emergency address update flow. */
@@ -96,11 +110,10 @@ public class WfcActivationController {
showGeneralWaitingUi();
evaluateEntitlementStatus();
if (isActivationFlow()) {
- mPurpose = IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION;
+ mMetricsLogger.start(IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION);
} else {
- mPurpose = IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UPDATE;
+ mMetricsLogger.start(IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UPDATE);
}
- mStartTime = mTelephonyUtils.getUptimeMillis();
}
/** Evaluates entitlement status for activation or update. */
@@ -141,22 +154,11 @@ public class WfcActivationController {
public void finish() {
EntitlementUtils.cancelEntitlementCheck();
- // If no duration set, set now.
- if (mDurationMillis == 0L) {
- mDurationMillis = mTelephonyUtils.getUptimeMillis() - mStartTime;
- }
// If no result set, it must be cancelled by user pressing back button.
if (mAppResult == IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNKNOWN_RESULT) {
mAppResult = IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__CANCELED;
}
- ImsServiceEntitlementStatsLog.write(
- IMS_SERVICE_ENTITLEMENT_UPDATED,
- /* carrier_id= */ mTelephonyUtils.getCarrierId(),
- /* actual_carrier_id= */ mTelephonyUtils.getSpecificCarrierId(),
- mPurpose,
- IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI,
- mAppResult,
- mDurationMillis);
+ mMetricsLogger.write(IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI, mAppResult);
}
/**
@@ -268,9 +270,10 @@ public class WfcActivationController {
} else {
if (vowifiStatus.incompatible()) {
showErrorUi(R.string.failure_contact_carrier);
- turnOffWfc(() -> {
- finishStatsLog(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__INCOMPATIBLE);
- });
+ mImsUtils.turnOffWfc(
+ () -> finishStatsLog(
+ IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__INCOMPATIBLE)
+ );
} else {
Log.e(TAG, "Unexpected status. Show error UI.");
finishStatsLog(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__UNEXPECTED_RESULT);
@@ -334,10 +337,11 @@ public class WfcActivationController {
finishStatsLog(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__SUCCESSFUL);
} else if (vowifiStatus.serverDataMissing()) {
// Some carrier allows de-activating in updating flow.
- turnOffWfc(() -> {
- finishStatsLog(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__DISABLED);
- mActivationUi.setResultAndFinish(Activity.RESULT_OK);
- });
+ mImsUtils.turnOffWfc(
+ () -> {
+ finishStatsLog(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__DISABLED);
+ mActivationUi.setResultAndFinish(Activity.RESULT_OK);
+ });
} else {
Log.e(TAG, "Unexpected status. Show error UI.");
showGeneralErrorUi();
@@ -361,14 +365,7 @@ public class WfcActivationController {
}.start();
}
- /** Turns WFC off and then runs {@code action} on main thread. */
- @MainThread
- private void turnOffWfc(Runnable action) {
- ImsUtils.turnOffWfc(mImsUtils, action);
- }
-
private void finishStatsLog(int result) {
mAppResult = result;
- mDurationMillis = mTelephonyUtils.getUptimeMillis() - mStartTime;
}
}
diff --git a/src/com/android/imsserviceentitlement/utils/ImsUtils.java b/src/com/android/imsserviceentitlement/utils/ImsUtils.java
index 2ae94d8..d24456f 100644
--- a/src/com/android/imsserviceentitlement/utils/ImsUtils.java
+++ b/src/com/android/imsserviceentitlement/utils/ImsUtils.java
@@ -28,14 +28,15 @@ import android.util.SparseArray;
import androidx.annotation.GuardedBy;
import androidx.annotation.Nullable;
+import com.google.common.annotations.VisibleForTesting;
+
/** A helper class for IMS relevant APIs with subscription id. */
public class ImsUtils {
private static final String TAG = "IMSSE-ImsUtils";
- private final CarrierConfigManager mCarrierConfigManager;
+ @Nullable private final PersistableBundle mCarrierConfigs;
private final ImsMmTelManager mImsMmTelManager;
private final ProvisioningManager mProvisioningManager;
- private final int mSubId;
/**
* Turns Volte provisioning status ON/OFF.
@@ -63,11 +64,20 @@ public class ImsUtils {
private static SparseArray<ImsUtils> sInstances = new SparseArray<ImsUtils>();
private ImsUtils(Context context, int subId) {
- mCarrierConfigManager =
- (CarrierConfigManager) context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
- mImsMmTelManager = getImsMmTelManager(context, subId);
- mProvisioningManager = getProvisioningManager(subId);
- this.mSubId = subId;
+ this(
+ context.getSystemService(CarrierConfigManager.class).getConfigForSubId(subId),
+ getImsMmTelManager(subId),
+ getProvisioningManager(subId));
+ }
+
+ @VisibleForTesting
+ ImsUtils(
+ PersistableBundle carrierConfigs,
+ ImsMmTelManager imsMmTelManager,
+ ProvisioningManager provisioningManager) {
+ mCarrierConfigs = carrierConfigs;
+ mImsMmTelManager = imsMmTelManager;
+ mProvisioningManager = provisioningManager;
}
/** Returns {@link ImsUtils} instance. */
@@ -83,7 +93,7 @@ public class ImsUtils {
}
/** Changes persistent WFC enabled setting. */
- public void setWfcSetting(boolean enabled, boolean force) {
+ private void setWfcSetting(boolean enabled, boolean force) {
try {
if (force) {
mImsMmTelManager.setVoWiFiSettingEnabled(enabled);
@@ -134,21 +144,19 @@ public class ImsUtils {
}
/** Disables WFC and reset WFC mode to carrier default value */
- public void disableAndResetVoWiFiImsSettings() {
+ @VisibleForTesting
+ void disableAndResetVoWiFiImsSettings() {
try {
disableWfc();
// Reset WFC mode to carrier default value
- if (mCarrierConfigManager != null) {
- PersistableBundle b = mCarrierConfigManager.getConfigForSubId(mSubId);
- if (b != null) {
- mImsMmTelManager.setVoWiFiModeSetting(
- b.getInt(CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
- mImsMmTelManager.setVoWiFiRoamingModeSetting(
- b.getInt(
- CarrierConfigManager
- .KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT));
- }
+ if (mCarrierConfigs != null) {
+ mImsMmTelManager.setVoWiFiModeSetting(
+ mCarrierConfigs.getInt(
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
+ mImsMmTelManager.setVoWiFiRoamingModeSetting(
+ mCarrierConfigs.getInt(
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT));
}
} catch (RuntimeException e) {
// ignore this exception, possible exception should be NullPointerException or
@@ -161,7 +169,7 @@ public class ImsUtils {
* Returns {@code null} if provided subscription id invalid.
*/
@Nullable
- public static ImsMmTelManager getImsMmTelManager(Context context, int subId) {
+ private static ImsMmTelManager getImsMmTelManager(int subId) {
try {
return ImsMmTelManager.createForSubscriptionId(subId);
} catch (IllegalArgumentException e) {
@@ -176,7 +184,7 @@ public class ImsUtils {
* Returns {@code null} if provided subscription id invalid.
*/
@Nullable
- public static ProvisioningManager getProvisioningManager(int subId) {
+ private static ProvisioningManager getProvisioningManager(int subId) {
try {
return ProvisioningManager.createForSubscriptionId(subId);
} catch (IllegalArgumentException e) {
@@ -197,11 +205,11 @@ public class ImsUtils {
}
/** Calls {@link #disableAndResetVoWiFiImsSettings()} in background thread. */
- public static void turnOffWfc(ImsUtils imsUtils, Runnable action) {
+ public void turnOffWfc(Runnable action) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
- imsUtils.disableAndResetVoWiFiImsSettings();
+ disableAndResetVoWiFiImsSettings();
return null; // To satisfy compiler
}
diff --git a/src/com/android/imsserviceentitlement/utils/MetricsLogger.java b/src/com/android/imsserviceentitlement/utils/MetricsLogger.java
new file mode 100644
index 0000000..8eec246
--- /dev/null
+++ b/src/com/android/imsserviceentitlement/utils/MetricsLogger.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2021 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.imsserviceentitlement.utils;
+
+import static android.os.SystemClock.uptimeMillis;
+
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED;
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UNKNOWN_PURPOSE;
+
+import com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog;
+
+/** Utility for writing the metrics logs. */
+public class MetricsLogger {
+ private final TelephonyUtils mTelephonyUtils;
+
+ private int mPurpose = IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__UNKNOWN_PURPOSE;
+ private long mStartTime = uptimeMillis();
+
+ public MetricsLogger(TelephonyUtils telephonyUtils) {
+ mTelephonyUtils = telephonyUtils;
+ }
+
+ /** Starts the log session for the purpose as well as record the start time. */
+ public void start(int purpose) {
+ mStartTime = uptimeMillis();
+ mPurpose = purpose;
+ }
+
+ /** Writes the metrics log. */
+ public void write(int appId, int appResult) {
+ ImsServiceEntitlementStatsLog.write(
+ IMS_SERVICE_ENTITLEMENT_UPDATED,
+ mTelephonyUtils.getCarrierId(),
+ mTelephonyUtils.getSpecificCarrierId(),
+ mPurpose,
+ appId,
+ appResult,
+ uptimeMillis() - mStartTime);
+ }
+}
diff --git a/src/com/android/imsserviceentitlement/utils/TelephonyUtils.java b/src/com/android/imsserviceentitlement/utils/TelephonyUtils.java
index 2601fd8..d081016 100644
--- a/src/com/android/imsserviceentitlement/utils/TelephonyUtils.java
+++ b/src/com/android/imsserviceentitlement/utils/TelephonyUtils.java
@@ -19,7 +19,6 @@ package com.android.imsserviceentitlement.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.os.Build;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
@@ -62,32 +61,12 @@ public class TelephonyUtils {
return android.os.SystemClock.uptimeMillis();
}
- /** Returns device model name. */
- public String getDeviceName() {
- return Build.MODEL;
- }
-
- /** Returns device OS version. */
- public String getDeviceOsVersion() {
- return Build.VERSION.RELEASE;
- }
-
/** Returns {@code true} if network is connected (cellular or WiFi). */
public boolean isNetworkConnected() {
NetworkInfo activeNetwork = mConnectivityManager.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnected();
}
- /**
- * Returns the response of EAP-AKA authetication {@code data} or {@code null} on failure.
- *
- * <p>Requires permission: READ_PRIVILEGED_PHONE_STATE
- */
- public String getEapAkaAuthentication(String data) {
- return mTelephonyManager.getIccAuthentication(
- TelephonyManager.APPTYPE_USIM, TelephonyManager.AUTHTYPE_EAP_AKA, data);
- }
-
/** Returns carrier ID. */
public int getCarrierId() {
return mTelephonyManager.getSimCarrierId();
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java b/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
index 474e755..04477c9 100644
--- a/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
+++ b/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
@@ -44,10 +44,8 @@ public class EntitlementUtilsTest {
@Mock private EntitlementResult mEntitlementResult;
@Before
- public void setup() throws Exception {
- Field field = Executors.class.getDeclaredField("sUseDirectExecutorForTest");
- field.setAccessible(true);
- field.set(null, true);
+ public void setUp() throws Exception {
+ useDirectExecutor(true);
}
@Test
@@ -67,4 +65,21 @@ public class EntitlementUtilsTest {
verify(mEntitlementResultCallback, never()).onEntitlementResult(mEntitlementResult);
}
+
+ @Test
+ public void entitlementCheck_cancelEntitlementCheck_onFailure() throws Exception {
+ useDirectExecutor(false);
+ when(mMockImsEntitlementApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+
+ EntitlementUtils.entitlementCheck(mMockImsEntitlementApi, mEntitlementResultCallback);
+ EntitlementUtils.cancelEntitlementCheck();
+
+ verify(mEntitlementResultCallback, never()).onEntitlementResult(mEntitlementResult);
+ }
+
+ private void useDirectExecutor(boolean enable) throws Exception {
+ Field field = Executors.class.getDeclaredField("sUseDirectExecutorForTest");
+ field.setAccessible(true);
+ field.set(null, enable);
+ }
}
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementApiTest.java b/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementApiTest.java
index d0ea3ee..217ac7b 100644
--- a/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementApiTest.java
+++ b/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementApiTest.java
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.runner.AndroidJUnit4;
@@ -296,6 +297,16 @@ public class ImsEntitlementApiTest {
assertThat(result.getRetryAfterSeconds()).isEqualTo(120);
}
+ @Test
+ public void checkEntitlementStatus_invalidSubId_resultNull() {
+ ImsEntitlementApi imsEntitlementApi =
+ new ImsEntitlementApi(mContext, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+
+ EntitlementResult result = imsEntitlementApi.checkEntitlementStatus();
+
+ assertThat(result).isNull();
+ }
+
private ServiceEntitlementRequest authenticationRequest(String token) {
ServiceEntitlementRequest.Builder requestBuilder = ServiceEntitlementRequest.builder();
if (token != null) {
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementReceiverTest.java b/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementReceiverTest.java
index dbea9a1..91fab63 100644
--- a/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementReceiverTest.java
+++ b/tests/unittests/src/com/android/imsserviceentitlement/ImsEntitlementReceiverTest.java
@@ -29,6 +29,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.PersistableBundle;
import android.os.UserManager;
+import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -167,8 +168,6 @@ public class ImsEntitlementReceiverTest {
@Test
public void onReceive_isSystemUser_jobScheduled() {
- when(mMockUserManager.isSystemUser()).thenReturn(true);
-
mReceiver.onReceive(
mContext, getCarrierConfigChangedIntent(SUB_ID, /* slotId= */ 0));
@@ -177,9 +176,9 @@ public class ImsEntitlementReceiverTest {
@Test
public void onReceive_notSystemUser_noJobScheduled() {
- when(mMockUserManager.isSystemUser()).thenReturn(false);
+ ImsEntitlementReceiver receiver = new ImsEntitlementReceiver();
- mReceiver.onReceive(
+ receiver.onReceive(
mContext, getCarrierConfigChangedIntent(SUB_ID, /* slotId= */ 0));
verify(mMockJobManager, never()).queryEntitlementStatusOnceNetworkReady();
@@ -205,6 +204,27 @@ public class ImsEntitlementReceiverTest {
verify(mMockJobManager, never()).queryEntitlementStatusOnceNetworkReady();
}
+ @Test
+ public void onReceive_invalidSubId_noJobScheduled() {
+ mReceiver.onReceive(mContext,
+ getCarrierConfigChangedIntent(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 0));
+
+ verify(mMockJobManager, never()).queryEntitlementStatusOnceNetworkReady();
+ }
+
+ @Test
+ public void isBootUp_compareWithLastBootCount_returnResult() {
+ int currentBootCount =
+ Settings.Global.getInt(
+ mContext.getContentResolver(), Settings.Global.BOOT_COUNT, /* def= */ -1);
+ setLastBootCount(/* slotId= */ 0, /* count=*/ currentBootCount);
+ setLastBootCount(/* slotId= */ 1, /* count=*/ currentBootCount - 1);
+ ImsEntitlementReceiver receiver = new ImsEntitlementReceiver();
+
+ assertThat(receiver.isBootUp(mContext, 0)).isFalse();
+ assertThat(receiver.isBootUp(mContext, 1)).isTrue();
+ }
+
private Intent getCarrierConfigChangedIntent(int subId, int slotId) {
Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
@@ -228,6 +248,12 @@ public class ImsEntitlementReceiverTest {
preferences.edit().putInt("last_sub_id_" + slotId, subId).apply();
}
+ private void setLastBootCount(int slotId, int count) {
+ SharedPreferences preferences =
+ mContext.getSharedPreferences("PREFERENCE_ACTIVATION_INFO", Context.MODE_PRIVATE);
+ preferences.edit().putInt("last_boot_count_" + slotId, count).apply();
+ }
+
private void useDirectExecutor() throws Exception {
Field field = Executors.class.getDeclaredField("sUseDirectExecutorForTest");
field.setAccessible(true);
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/WfcActivationControllerTest.java b/tests/unittests/src/com/android/imsserviceentitlement/WfcActivationControllerTest.java
index 72b9341..cf72f1f 100644
--- a/tests/unittests/src/com/android/imsserviceentitlement/WfcActivationControllerTest.java
+++ b/tests/unittests/src/com/android/imsserviceentitlement/WfcActivationControllerTest.java
@@ -16,13 +16,19 @@
package com.android.imsserviceentitlement;
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__FAILED;
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__SUCCESSFUL;
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION;
+import static com.android.imsserviceentitlement.ImsServiceEntitlementStatsLog.IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
-import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
@@ -40,6 +46,8 @@ import com.android.imsserviceentitlement.ts43.Ts43VowifiStatus.EntitlementStatus
import com.android.imsserviceentitlement.ts43.Ts43VowifiStatus.ProvStatus;
import com.android.imsserviceentitlement.ts43.Ts43VowifiStatus.TcStatus;
import com.android.imsserviceentitlement.utils.Executors;
+import com.android.imsserviceentitlement.utils.ImsUtils;
+import com.android.imsserviceentitlement.utils.MetricsLogger;
import org.junit.Before;
import org.junit.Rule;
@@ -52,32 +60,32 @@ import org.mockito.junit.MockitoRule;
import java.lang.reflect.Field;
-// TODO(b/176127289) add tests
@RunWith(AndroidJUnit4.class)
public class WfcActivationControllerTest {
@Rule public final MockitoRule rule = MockitoJUnit.rule();
- @Mock private TelephonyManager mTelephonyManager;
- @Mock private ImsEntitlementApi mActivationApi;
- @Mock private WfcActivationUi mActivationUi;
- @Mock private ConnectivityManager mConnectivityManager;
- @Mock private NetworkInfo mNetworkInfo;
+ @Mock private TelephonyManager mMockTelephonyManager;
+ @Mock private ImsEntitlementApi mMockActivationApi;
+ @Mock private WfcActivationUi mMockActivationUi;
+ @Mock private ConnectivityManager mMockConnectivityManager;
+ @Mock private NetworkInfo mMockNetworkInfo;
+ @Mock private ImsUtils mMockImsUtils;
+ @Mock private MetricsLogger mMockMetricsLogger;
private static final int SUB_ID = 1;
+ private static final int CARRIER_ID = 1234;
private static final String EMERGENCY_ADDRESS_WEB_URL = "webUrl";
private static final String EMERGENCY_ADDRESS_WEB_DATA = "webData";
- private static final String TERMS_AND_CONDITION_WEB_URL = "tncUrl";
- private static final String WEBVIEW_JS_CONTROLLER_NAME = "webviewJsControllerName";
private WfcActivationController mWfcActivationController;
private Context mContext;
- private Instrumentation mInstrumentation;
@Before
public void setUp() throws Exception {
mContext = spy(ApplicationProvider.getApplicationContext());
- when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
- when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mMockTelephonyManager);
+ when(mMockTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(
+ mMockTelephonyManager);
setNetworkConnected(true);
Field field = Executors.class.getDeclaredField("sUseDirectExecutorForTest");
@@ -87,7 +95,7 @@ public class WfcActivationControllerTest {
@Test
public void startFlow_launchAppForActivation_setPurposeActivation() {
- InOrder mOrderVerifier = inOrder(mActivationUi);
+ InOrder mOrderVerifier = inOrder(mMockActivationUi);
setNetworkConnected(false);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
@@ -102,7 +110,7 @@ public class WfcActivationControllerTest {
@Test
public void startFlow_launchAppForUpdate_setPurposeUpdate() {
- InOrder mOrderVerifier = inOrder(mActivationUi);
+ InOrder mOrderVerifier = inOrder(mMockActivationUi);
setNetworkConnected(false);
buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
@@ -114,7 +122,7 @@ public class WfcActivationControllerTest {
@Test
public void startFlow_launchAppForShowTc_setPurposeUpdate() {
- InOrder mOrderVerifier = inOrder(mActivationUi);
+ InOrder mOrderVerifier = inOrder(mMockActivationUi);
setNetworkConnected(false);
buildActivity(ActivityConstants.LAUNCH_APP_SHOW_TC);
@@ -129,14 +137,14 @@ public class WfcActivationControllerTest {
@Test
public void finishFlow_isFinishing_showGeneralWaitingUi() {
- InOrder mOrderVerifier = inOrder(mActivationUi);
- when(mActivationApi.checkEntitlementStatus()).thenReturn(null);
+ InOrder mOrderVerifier = inOrder(mMockActivationUi);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(null);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.finishFlow();
mOrderVerifier
- .verify(mActivationUi)
+ .verify(mMockActivationUi)
.showActivationUi(
R.string.activate_title,
R.string.progress_text,
@@ -145,7 +153,7 @@ public class WfcActivationControllerTest {
Activity.RESULT_CANCELED,
0);
mOrderVerifier
- .verify(mActivationUi)
+ .verify(mMockActivationUi)
.showActivationUi(
R.string.activate_title,
R.string.wfc_activation_error,
@@ -156,8 +164,105 @@ public class WfcActivationControllerTest {
}
@Test
+ public void finishFlow_startForUpdate_showGeneralWaitingUi() {
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(
+ EntitlementResult
+ .builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus
+ .builder()
+ .setEntitlementStatus(EntitlementStatus.ENABLED)
+ .setProvStatus(ProvStatus.PROVISIONED)
+ .setTcStatus(TcStatus.AVAILABLE)
+ .setAddrStatus(AddrStatus.AVAILABLE)
+ .build())
+ .build());
+ setNetworkConnected(false);
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
+ intent.putExtra(ActivityConstants.EXTRA_LAUNCH_CARRIER_APP,
+ ActivityConstants.LAUNCH_APP_UPDATE);
+ mWfcActivationController =
+ new WfcActivationController(
+ mContext,
+ mMockActivationUi,
+ mMockActivationApi,
+ null,
+ mMockImsUtils,
+ mMockMetricsLogger);
+
+ mWfcActivationController.finishFlow();
+
+ verify(mMockActivationUi).setResultAndFinish(eq(Activity.RESULT_OK));
+ }
+
+ @Test
+ public void finish_startFlowForActivate_writeLoggerPurposeActivation() {
+ when(mMockTelephonyManager.getSimCarrierId()).thenReturn(CARRIER_ID);
+ when(mMockTelephonyManager.getSimSpecificCarrierId()).thenReturn(CARRIER_ID);
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
+ intent.putExtra(ActivityConstants.EXTRA_LAUNCH_CARRIER_APP,
+ ActivityConstants.LAUNCH_APP_ACTIVATE);
+ mWfcActivationController =
+ new WfcActivationController(
+ mContext,
+ mMockActivationUi,
+ mMockActivationApi,
+ intent,
+ mMockImsUtils,
+ mMockMetricsLogger);
+
+ mWfcActivationController.startFlow();
+ mWfcActivationController.finish();
+
+ verify(mMockMetricsLogger).start(eq(IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION));
+ verify(mMockMetricsLogger).write(
+ eq(IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI),
+ eq(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__FAILED));
+ }
+
+ @Test
+ public void finish_entitlementResultWfcEntitled_writeLoggerAppResultSuccessful() {
+ when(mMockTelephonyManager.getSimCarrierId()).thenReturn(CARRIER_ID);
+ when(mMockTelephonyManager.getSimSpecificCarrierId()).thenReturn(CARRIER_ID);
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
+ intent.putExtra(ActivityConstants.EXTRA_LAUNCH_CARRIER_APP,
+ ActivityConstants.LAUNCH_APP_ACTIVATE);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(
+ EntitlementResult
+ .builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus
+ .builder()
+ .setEntitlementStatus(EntitlementStatus.ENABLED)
+ .setProvStatus(ProvStatus.PROVISIONED)
+ .setTcStatus(TcStatus.AVAILABLE)
+ .setAddrStatus(AddrStatus.AVAILABLE)
+ .build())
+ .build());
+ mWfcActivationController =
+ new WfcActivationController(
+ mContext,
+ mMockActivationUi,
+ mMockActivationApi,
+ intent,
+ mMockImsUtils,
+ mMockMetricsLogger);
+
+ mWfcActivationController.startFlow();
+ mWfcActivationController.finish();
+
+ verify(mMockMetricsLogger).start(eq(IMS_SERVICE_ENTITLEMENT_UPDATED__PURPOSE__ACTIVATION));
+ verify(mMockMetricsLogger).write(
+ eq(IMS_SERVICE_ENTITLEMENT_UPDATED__SERVICE_TYPE__VOWIFI),
+ eq(IMS_SERVICE_ENTITLEMENT_UPDATED__APP_RESULT__SUCCESSFUL));
+ }
+
+ @Test
public void handleEntitlementStatusForActivation_isVowifiEntitledTrue_setActivityResultOk() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
@@ -167,17 +272,17 @@ public class WfcActivationControllerTest {
.setProvStatus(ProvStatus.PROVISIONED)
.build())
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.evaluateEntitlementStatus();
- verify(mActivationUi).setResultAndFinish(Activity.RESULT_OK);
+ verify(mMockActivationUi).setResultAndFinish(Activity.RESULT_OK);
}
@Test
public void handleEntitlementStatusForActivation_isServerDataMissingTrue_showWebview() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
@@ -188,24 +293,45 @@ public class WfcActivationControllerTest {
.setEmergencyAddressWebUrl(EMERGENCY_ADDRESS_WEB_URL)
.setEmergencyAddressWebData(EMERGENCY_ADDRESS_WEB_DATA)
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
+
+ mWfcActivationController.evaluateEntitlementStatus();
+
+ verify(mMockActivationUi).showWebview(EMERGENCY_ADDRESS_WEB_URL,
+ EMERGENCY_ADDRESS_WEB_DATA);
+ }
+
+ @Test
+ public void handleEntitlementStatusForActivation_showTc_showWebview() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.DISABLED)
+ .setTcStatus(TcStatus.NOT_AVAILABLE)
+ .setAddrStatus(AddrStatus.NOT_AVAILABLE)
+ .build())
+ .setTermsAndConditionsWebUrl(EMERGENCY_ADDRESS_WEB_URL)
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.evaluateEntitlementStatus();
- verify(mActivationUi).showWebview(EMERGENCY_ADDRESS_WEB_URL, EMERGENCY_ADDRESS_WEB_DATA);
+ verify(mMockActivationUi).showWebview(EMERGENCY_ADDRESS_WEB_URL, null);
}
@Test
public void handleEntitlementStatusForActivation_isIncompatibleTrue_showErrorUi() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
.setEntitlementStatus(EntitlementStatus.INCOMPATIBLE)
.build())
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.evaluateEntitlementStatus();
@@ -215,7 +341,7 @@ public class WfcActivationControllerTest {
@Test
public void handleEntitlementStatusForActivation_unexpectedStatus_showGeneralErrorUi() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
@@ -224,7 +350,7 @@ public class WfcActivationControllerTest {
.setAddrStatus(AddrStatus.IN_PROGRESS)
.build())
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.evaluateEntitlementStatus();
@@ -234,7 +360,7 @@ public class WfcActivationControllerTest {
@Test
public void handleEntitlementStatusAfterActivation_isVowifiEntitledTrue_setActivityResultOk() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
@@ -244,17 +370,17 @@ public class WfcActivationControllerTest {
.setProvStatus(ProvStatus.PROVISIONED)
.build())
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.reevaluateEntitlementStatus();
- verify(mActivationUi).setResultAndFinish(Activity.RESULT_OK);
+ verify(mMockActivationUi).setResultAndFinish(Activity.RESULT_OK);
}
@Test
public void handleEntitlementStatusAfterActivation_unexpectedStatus_showGeneralErrorUi() {
- EntitlementResult mEntitlementResult =
+ EntitlementResult entitlementResult =
EntitlementResult.builder()
.setVowifiStatus(
Ts43VowifiStatus.builder()
@@ -263,7 +389,7 @@ public class WfcActivationControllerTest {
.setAddrStatus(AddrStatus.IN_PROGRESS)
.build())
.build();
- when(mActivationApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
buildActivity(ActivityConstants.LAUNCH_APP_ACTIVATE);
mWfcActivationController.reevaluateEntitlementStatus();
@@ -271,24 +397,174 @@ public class WfcActivationControllerTest {
verifyErrorUi(R.string.activate_title, R.string.wfc_activation_error);
}
+ @Test
+ public void handleEntitlementStatusAfterUpdating_entitlementStatusEnabled_setResultOk() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.ENABLED)
+ .setTcStatus(TcStatus.AVAILABLE)
+ .setAddrStatus(AddrStatus.AVAILABLE)
+ .setProvStatus(ProvStatus.PROVISIONED)
+ .build())
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
+
+ mWfcActivationController.reevaluateEntitlementStatus();
+
+ verify(mMockActivationUi).setResultAndFinish(eq(Activity.RESULT_OK));
+ }
+
+ @Test
+ public void handleEntitlementStatusAfterUpdating_entitlementStatusNoServerData_turnOffWfc() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.DISABLED)
+ .setTcStatus(TcStatus.NOT_AVAILABLE)
+ .setAddrStatus(AddrStatus.NOT_AVAILABLE)
+ .build())
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
+ intent.putExtra(ActivityConstants.EXTRA_LAUNCH_CARRIER_APP,
+ ActivityConstants.LAUNCH_APP_UPDATE);
+ mWfcActivationController =
+ new WfcActivationController(
+ mContext,
+ mMockActivationUi,
+ mMockActivationApi,
+ intent,
+ mMockImsUtils,
+ mMockMetricsLogger);
+
+ mWfcActivationController.reevaluateEntitlementStatus();
+
+ verify(mMockImsUtils).turnOffWfc(any());
+ }
+
+ @Test
+ public void handleEntitlementStatusAfterUpdating_unexpectedStatus_showGeneralErrorUi() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.DISABLED)
+ .setTcStatus(TcStatus.IN_PROGRESS)
+ .setAddrStatus(AddrStatus.IN_PROGRESS)
+ .build())
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
+
+ mWfcActivationController.reevaluateEntitlementStatus();
+
+ verifyErrorUi(R.string.e911_title, R.string.address_update_error);
+ }
+
+ @Test
+ public void handleEntitlementStatusForUpdate_serviceEntitled_showWebview() {
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(
+ EntitlementResult
+ .builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus
+ .builder()
+ .setEntitlementStatus(EntitlementStatus.ENABLED)
+ .setProvStatus(ProvStatus.PROVISIONED)
+ .setTcStatus(TcStatus.AVAILABLE)
+ .setAddrStatus(AddrStatus.AVAILABLE)
+ .build())
+ .setEmergencyAddressWebUrl(EMERGENCY_ADDRESS_WEB_URL)
+ .setEmergencyAddressWebData(EMERGENCY_ADDRESS_WEB_DATA)
+ .build());
+ buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
+
+ mWfcActivationController.evaluateEntitlementStatus();
+
+ verify(mMockActivationUi).showWebview(EMERGENCY_ADDRESS_WEB_URL,
+ EMERGENCY_ADDRESS_WEB_DATA);
+ }
+
+ @Test
+ public void handleEntitlementStatusForUpdate_showTc_showWebview() {
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(
+ EntitlementResult
+ .builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus
+ .builder()
+ .setEntitlementStatus(EntitlementStatus.ENABLED)
+ .setProvStatus(ProvStatus.PROVISIONED)
+ .setTcStatus(TcStatus.AVAILABLE)
+ .setAddrStatus(AddrStatus.AVAILABLE)
+ .build())
+ .setTermsAndConditionsWebUrl(EMERGENCY_ADDRESS_WEB_URL)
+ .build());
+ buildActivity(ActivityConstants.LAUNCH_APP_SHOW_TC);
+
+ mWfcActivationController.evaluateEntitlementStatus();
+
+ verify(mMockActivationUi).showWebview(EMERGENCY_ADDRESS_WEB_URL, null);
+ }
+
+ @Test
+ public void handleEntitlementStatusForUpdate_entitlementStatusIncompatible_showErrorUi() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.INCOMPATIBLE)
+ .build())
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
+
+ mWfcActivationController.evaluateEntitlementStatus();
+
+ verifyErrorUi(R.string.e911_title, R.string.failure_contact_carrier);
+ }
+
+ @Test
+ public void handleEntitlementStatusForUpdate_entitlementStatusDisabled_showGenericErrorUi() {
+ EntitlementResult entitlementResult =
+ EntitlementResult.builder()
+ .setVowifiStatus(
+ Ts43VowifiStatus.builder()
+ .setEntitlementStatus(EntitlementStatus.DISABLED)
+ .build())
+ .build();
+ when(mMockActivationApi.checkEntitlementStatus()).thenReturn(entitlementResult);
+ buildActivity(ActivityConstants.LAUNCH_APP_UPDATE);
+
+ mWfcActivationController.evaluateEntitlementStatus();
+
+ verifyErrorUi(R.string.e911_title, R.string.address_update_error);
+ }
+
private void buildActivity(int extraLaunchCarrierApp) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
intent.putExtra(ActivityConstants.EXTRA_LAUNCH_CARRIER_APP, extraLaunchCarrierApp);
mWfcActivationController =
- new WfcActivationController(mContext, mActivationUi, mActivationApi, intent);
+ new WfcActivationController(mContext, mMockActivationUi, mMockActivationApi,
+ intent);
}
private void setNetworkConnected(boolean isConnected) {
- when(mNetworkInfo.isConnected()).thenReturn(isConnected);
+ when(mMockNetworkInfo.isConnected()).thenReturn(isConnected);
when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(
- mConnectivityManager);
- when(mConnectivityManager.getActiveNetworkInfo()).thenReturn(mNetworkInfo);
- when(mNetworkInfo.isConnected()).thenReturn(isConnected);
+ mMockConnectivityManager);
+ when(mMockConnectivityManager.getActiveNetworkInfo()).thenReturn(mMockNetworkInfo);
+ when(mMockNetworkInfo.isConnected()).thenReturn(isConnected);
}
private void verifyErrorUi(int title, int errorMesssage) {
- verify(mActivationUi)
+ verify(mMockActivationUi)
.showActivationUi(
title,
errorMesssage,
@@ -298,7 +574,7 @@ public class WfcActivationControllerTest {
}
private void verifyErrorUiInOrder(InOrder inOrder, int title, int errorMesssage) {
- inOrder.verify(mActivationUi)
+ inOrder.verify(mMockActivationUi)
.showActivationUi(
title,
errorMesssage,
@@ -308,7 +584,7 @@ public class WfcActivationControllerTest {
}
private void verifyGeneralWaitingUiInOrder(InOrder inOrder, int title) {
- inOrder.verify(mActivationUi)
+ inOrder.verify(mMockActivationUi)
.showActivationUi(title, R.string.progress_text, true, 0, 0, 0);
}
}
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/utils/ImsUtilsTest.java b/tests/unittests/src/com/android/imsserviceentitlement/utils/ImsUtilsTest.java
new file mode 100644
index 0000000..bd5397b
--- /dev/null
+++ b/tests/unittests/src/com/android/imsserviceentitlement/utils/ImsUtilsTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2021 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.imsserviceentitlement.utils;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ProvisioningManager;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+public class ImsUtilsTest {
+ @Rule public final MockitoRule rule = MockitoJUnit.rule();
+
+ @Mock CarrierConfigManager mMockCarrierConfigManager;
+ @Mock ImsMmTelManager mMockImsMmTelManager;
+ @Mock ProvisioningManager mMockProvisioningManager;
+
+ private Context mContext = ApplicationProvider.getApplicationContext();
+
+ @Test
+ public void isWfcEnabledByUser_invalidSubId_defaultValues() {
+ ImsUtils imsUtils =
+ ImsUtils.getInstance(mContext, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+
+ assertThat(imsUtils.isWfcEnabledByUser()).isFalse();
+ }
+
+ @Test
+ public void disableAndResetVoWiFiImsSettings_hasCarrierConfig_() {
+ PersistableBundle carrierConfig = new PersistableBundle();
+ carrierConfig.putInt(CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT, 1);
+ carrierConfig.putInt(CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT, 2);
+ ImsUtils imsUtils =
+ new ImsUtils(carrierConfig, mMockImsMmTelManager, mMockProvisioningManager);
+
+ imsUtils.disableAndResetVoWiFiImsSettings();
+
+ verify(mMockImsMmTelManager).setVoWiFiModeSetting(eq(1));
+ verify(mMockImsMmTelManager).setVoWiFiRoamingModeSetting(eq(2));
+ }
+}