Merge Android R
Bug: 168057903
Merged-In: I76a40f211cb9022b7ee1c372266c8cc1e2537e57
Change-Id: I0e116f3777af27d0e768ac234e4cc97b23fe23f8
diff --git a/Android.bp b/Android.bp
index fe7c040..297565e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -19,7 +19,10 @@
name: "ONS",
platform_apis: true,
privileged: true,
- libs: ["telephony-common"],
+ libs: [
+ "telephony-common",
+ "app-compat-annotations",
+ ],
srcs: ["src/**/*.java"],
aaptflags: ["--auto-add-overlay"],
certificate: "platform",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b1163dd..dfee080 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -35,7 +35,7 @@
<service android:name=".OpportunisticNetworkService"
android:enabled="true"
- android:exported="true"
+ android:exported="false"
android:directBootAware="true"
android:singleUser="true" />
diff --git a/CleanSpec.mk b/CleanSpec.mk
index fbabcab..c21bc41 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -48,6 +48,7 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/ANS_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/ANS)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/ANS_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/ONSLib)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/src/com/android/ons/ONSProfileSelector.java b/src/com/android/ons/ONSProfileSelector.java
index 7266660..3e903c9 100644
--- a/src/com/android/ons/ONSProfileSelector.java
+++ b/src/com/android/ons/ONSProfileSelector.java
@@ -28,13 +28,13 @@
import android.os.HandlerThread;
import android.os.Message;
import android.os.RemoteException;
-import android.os.ServiceManager;
import android.telephony.AvailableNetworkInfo;
import android.telephony.CellInfo;
import android.telephony.CellInfoLte;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -148,7 +148,8 @@
.UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS);
} else {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService
+ .CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(mNetworkScanCallback,
TelephonyManager
.UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED);
@@ -172,7 +173,8 @@
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS);
} else {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService
+ .CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(mNetworkScanCallback,
TelephonyManager
.UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL);
@@ -294,7 +296,6 @@
}
}
}
-
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@@ -379,7 +380,7 @@
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS);
} else {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(mNetworkScanCallback,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL);
} else {
@@ -484,7 +485,7 @@
if (mOppSubscriptionInfos == null) {
logDebug("null subscription infos");
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
} else {
@@ -538,14 +539,13 @@
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS);
} else {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL);
} else {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_ABORTED);
}
-
}
mProfileSelectionCallback.onProfileSelectionDone();
mAvailableNetworkInfos = null;
@@ -557,7 +557,7 @@
}
} else if (mOppSubscriptionInfos.size() == 0) {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
} else {
@@ -647,7 +647,7 @@
int subId = getActiveOpportunisticSubId();
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
} else {
@@ -661,7 +661,7 @@
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS);
} else {
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL);
} else {
@@ -672,7 +672,9 @@
}
private boolean enableModem(int subId, boolean enable) {
- if (!mSubscriptionManager.isActiveSubId(subId)) {
+ SubscriptionInfo info = mSubscriptionManager.getActiveSubscriptionInfo(subId);
+ if (info == null) {
+ // Subscription is not active. Do nothing.
return false;
}
@@ -682,7 +684,7 @@
selectProfileForData(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, false, null);
}
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = info.getSimSlotIndex();
/* Todo: b/135067156
* Reenable this code once 135067156 is fixed
if (mSubscriptionBoundTelephonyManager.isModemEnabledForSlot(phoneId) == enable) {
@@ -800,11 +802,15 @@
ISetOpportunisticDataCallback callbackStub) {
if ((subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
|| (isOpprotunisticSub(subId) && mSubscriptionManager.isActiveSubId(subId))) {
- ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
+ ISub iSub = ISub.Stub.asInterface(
+ TelephonyFrameworkInitializer
+ .getTelephonyServiceManager()
+ .getSubscriptionServiceRegisterer()
+ .get());
if (iSub == null) {
log("Could not get Subscription Service handle");
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendSetOpptCallbackHelper(callbackStub,
TelephonyManager.SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION);
} else {
@@ -818,7 +824,7 @@
} catch (RemoteException ex) {
log("Could not connect to Subscription Service");
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendSetOpptCallbackHelper(callbackStub,
TelephonyManager.SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION);
} else {
@@ -831,7 +837,7 @@
} else {
log("Inactive sub passed for preferred data " + subId);
if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ OpportunisticNetworkService.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
if (isOpprotunisticSub(subId)) {
sendSetOpptCallbackHelper(callbackStub,
TelephonyManager.SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION);
@@ -863,9 +869,14 @@
protected void updateOpportunisticSubscriptions() {
synchronized (mLock) {
mOppSubscriptionInfos = mSubscriptionManager
- .getOpportunisticSubscriptions().stream()
- .filter(subInfo -> subInfo.isGroupDisabled() != true)
- .collect(Collectors.toList());
+ .getOpportunisticSubscriptions().stream()
+ .filter(subInfo -> subInfo.isGroupDisabled() != true)
+ .collect(Collectors.toList());
+ if (mOppSubscriptionInfos != null) {
+ mStandaloneOppSubInfos = mOppSubscriptionInfos.stream()
+ .filter(subInfo -> subInfo.getGroupUuid() == null)
+ .collect(Collectors.toList());
+ }
}
}
diff --git a/src/com/android/ons/OpportunisticNetworkService.java b/src/com/android/ons/OpportunisticNetworkService.java
index 62e292b..1178538 100644
--- a/src/com/android/ons/OpportunisticNetworkService.java
+++ b/src/com/android/ons/OpportunisticNetworkService.java
@@ -18,6 +18,8 @@
import android.app.Service;
import android.compat.Compatibility;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -25,14 +27,16 @@
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Binder;
+import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
-import android.os.ServiceManager;
+import android.os.TelephonyServiceManager.ServiceRegisterer;
import android.telephony.AvailableNetworkInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyManager;
import com.android.internal.annotations.VisibleForTesting;
@@ -66,7 +70,6 @@
private static final String TAG = "ONS";
private static final String PREF_NAME = TAG;
private static final String PREF_ENABLED = "isEnabled";
- private static final String SERVICE_NAME = "ions";
private static final String CARRIER_APP_CONFIG_NAME = "carrierApp";
private static final String SYSTEM_APP_CONFIG_NAME = "systemApp";
private static final boolean DBG = true;
@@ -74,6 +77,14 @@
private static final int MSG_SIM_STATE_CHANGE = 1;
/**
+ * To expand the error codes for {@link TelephonyManager#updateAvailableNetworks} and
+ * {@link TelephonyManager#setPreferredOpportunisticDataSubscription}.
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
+ static final long CALLBACK_ON_MORE_ERROR_CODE_CHANGE = 130595455L;
+
+ /**
* Profile selection callback. Will be called once Profile selector decides on
* the opportunistic data profile.
*/
@@ -325,8 +336,11 @@
initialize(getBaseContext());
/* register the service */
- if (ServiceManager.getService(SERVICE_NAME) == null) {
- ServiceManager.addService(SERVICE_NAME, mBinder);
+ ServiceRegisterer opportunisticNetworkServiceRegisterer = TelephonyFrameworkInitializer
+ .getTelephonyServiceManager()
+ .getOpportunisticNetworkServiceRegisterer();
+ if (opportunisticNetworkServiceRegisterer.get() == null) {
+ opportunisticNetworkServiceRegisterer.register(mBinder);
}
}
@@ -388,8 +402,7 @@
/* carrier apps should report only subscription */
if (availableNetworks.size() > 1) {
log("Carrier app should not pass more than one subscription");
- if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ if (Compatibility.isChangeEnabled(CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager
.UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED);
@@ -402,8 +415,7 @@
if (!mProfileSelector.hasOpprotunisticSub(availableNetworks)) {
log("No opportunistic subscriptions received");
- if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ if (Compatibility.isChangeEnabled(CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager
.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
@@ -415,9 +427,15 @@
}
for (AvailableNetworkInfo availableNetworkInfo : availableNetworks) {
- if (Binder.withCleanCallingIdentity(
- () -> mSubscriptionManager.isActiveSubId(
- availableNetworkInfo.getSubId()))) {
+ final long identity = Binder.clearCallingIdentity();
+ boolean isActiveSubId = false;
+ try {
+ isActiveSubId =
+ mSubscriptionManager.isActiveSubId(availableNetworkInfo.getSubId());
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ if (isActiveSubId) {
TelephonyPermissions.enforceCallingOrSelfCarrierPrivilege(mContext,
availableNetworkInfo.getSubId(), "updateAvailableNetworks");
} else {
@@ -454,8 +472,7 @@
/* if carrier is reporting availability, then it takes higher priority. */
mProfileSelector.startProfileSelection(availableNetworks, callbackStub);
} else {
- if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ if (Compatibility.isChangeEnabled(CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED);
} else {
@@ -521,8 +538,7 @@
/* all subscriptions should be opportunistic subscriptions */
if (!mProfileSelector.hasOpprotunisticSub(availableNetworks)) {
log("No opportunistic subscriptions received");
- if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ if (Compatibility.isChangeEnabled(CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager
.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
@@ -534,7 +550,6 @@
}
mONSConfigInputHashMap.put(SYSTEM_APP_CONFIG_NAME,
new ONSConfigInput(availableNetworks, callbackStub));
-
/* reporting availability. proceed if carrier app has not requested any, but
standalone opportunistic subscription should be handled in priority. */
if (mIsEnabled) {
@@ -543,8 +558,7 @@
mProfileSelector.startProfileSelection(availableNetworks, callbackStub);
}
} else {
- if (Compatibility.isChangeEnabled(
- TelephonyManager.CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
+ if (Compatibility.isChangeEnabled(CALLBACK_ON_MORE_ERROR_CODE_CHANGE)) {
sendUpdateNetworksCallbackHelper(callbackStub,
TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED);
} else {
diff --git a/tests/src/com/android/ons/ONSProfileSelectorTest.java b/tests/src/com/android/ons/ONSProfileSelectorTest.java
index 4816ec6..e86726a 100644
--- a/tests/src/com/android/ons/ONSProfileSelectorTest.java
+++ b/tests/src/com/android/ons/ONSProfileSelectorTest.java
@@ -20,7 +20,9 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.os.IBinder;
import android.os.Looper;
+import android.os.ServiceManager;
import android.telephony.AvailableNetworkInfo;
import android.telephony.CellIdentityLte;
import android.telephony.CellInfo;
@@ -30,6 +32,7 @@
import android.telephony.TelephonyManager;
import android.util.Log;
+import com.android.internal.telephony.ISub;
import com.android.internal.telephony.IUpdateAvailableNetworksCallback;
import org.junit.After;
@@ -38,8 +41,10 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class ONSProfileSelectorTest extends ONSBaseTest {
@@ -52,6 +57,12 @@
ONSNetworkScanCtlr mONSNetworkScanCtlr;
@Mock
TelephonyManager mSubscriptionBoundTelephonyManager;
+ @Mock
+ ISub mISubMock;
+ @Mock
+ IBinder mISubBinderMock;
+ @Mock
+ SubscriptionInfo mSubInfo;
private Looper mLooper;
private static final String TAG = "ONSProfileSelectorTest";
@@ -103,15 +114,30 @@
}
}
+ private void addISubService() throws Exception {
+ Field field = ServiceManager.class.getDeclaredField("sCache");
+ field.setAccessible(true);
+ ((Map<String, IBinder>)field.get(null)).put("isub", mISubBinderMock);
+ doReturn(mISubMock).when(mISubBinderMock).queryLocalInterface(any());
+ }
+
+ private void removeISubService() throws Exception {
+ Field field = ServiceManager.class.getDeclaredField("sCache");
+ field.setAccessible(true);
+ ((Map<String, IBinder>)field.get(null)).remove("isub");
+ }
+
@Before
public void setUp() throws Exception {
super.setUp("ONSTest");
mLooper = null;
MockitoAnnotations.initMocks(this);
+ addISubService();
}
@After
public void tearDown() throws Exception {
+ removeISubService();
super.tearDown();
if (mLooper != null) {
mLooper.quit();
@@ -174,15 +200,16 @@
assertFalse(mCallbackInvoked);
}
-
@Test
public void testStartProfileSelectionSuccess() {
+ int subId = 5;
List<SubscriptionInfo> subscriptionInfoList = new ArrayList<SubscriptionInfo>();
- SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ SubscriptionInfo subscriptionInfo = new SubscriptionInfo(subId, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", false, null, "1");
SubscriptionInfo subscriptionInfo2 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "211", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(subId);
List<CellInfo> results2 = new ArrayList<CellInfo>();
CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
@@ -191,7 +218,7 @@
results2.add((CellInfo) cellInfoLte);
ArrayList<String> mccMncs = new ArrayList<>();
mccMncs.add("310210");
- AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
+ AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(subId, 1, mccMncs,
new ArrayList<Integer>());
ArrayList<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
availableNetworkInfos.add(availableNetworkInfo);
@@ -211,7 +238,7 @@
Looper.prepare();
doReturn(subscriptionInfoList).when(mSubscriptionManager)
.getOpportunisticSubscriptions();
- doReturn(true).when(mSubscriptionManager).isActiveSubId(anyInt());
+ doReturn(true).when(mSubscriptionManager).isActiveSubId(subId);
doReturn(true).when(mSubscriptionBoundTelephonyManager).enableModemForSlot(
anyInt(), anyBoolean());
mONSProfileSelector = new MyONSProfileSelector(mContext,
@@ -240,7 +267,7 @@
mONSProfileSelector.mNetworkAvailableCallBackCpy.onNetworkAvailability(results2);
Intent callbackIntent = new Intent(MyONSProfileSelector.ACTION_SUB_SWITCH);
callbackIntent.putExtra("sequenceId", 1);
- callbackIntent.putExtra("subId", 5);
+ callbackIntent.putExtra("subId", subId);
waitUntilReady();
assertEquals(TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS, mResult);
assertTrue(mReady);
@@ -258,6 +285,8 @@
SubscriptionInfo subscriptionInfo_2 = new SubscriptionInfo(8, "", 1, "Vzw", "Vzw", 1, 1,
"123", 1, null, "311", "480", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo_2);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
+ doReturn(subscriptionInfo_2).when(mSubscriptionManager).getActiveSubscriptionInfo(8);
List<CellInfo> results2 = new ArrayList<CellInfo>();
CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
@@ -331,6 +360,8 @@
"123", 1, null, "310", "211", "", true, null, "1", false, null, 1839, 1);
opportunisticSubscriptionInfoList.add(subscriptionInfo);
activeSubscriptionInfoList.add(subscriptionInfo2);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
+ doReturn(subscriptionInfo2).when(mSubscriptionManager).getActiveSubscriptionInfo(6);
ArrayList<String> mccMncs = new ArrayList<>();
mccMncs.add("310210");
@@ -428,6 +459,7 @@
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
mReady = false;
doReturn(new ArrayList<>()).when(mSubscriptionManager).getOpportunisticSubscriptions();
new Thread(new Runnable() {
@@ -458,6 +490,7 @@
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
mReady = false;
doReturn(subscriptionInfoList).when(mSubscriptionManager).getOpportunisticSubscriptions();
doNothing().when(mSubscriptionManager).setPreferredDataSubscriptionId(
@@ -492,6 +525,7 @@
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
mReady = false;
doReturn(subscriptionInfoList).when(mSubscriptionManager)
.getActiveSubscriptionInfoList();
@@ -528,9 +562,11 @@
List<SubscriptionInfo> subscriptionInfoList = new ArrayList<SubscriptionInfo>();
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", false, null, "1");
- SubscriptionInfo subscriptionInfo2 = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
+ SubscriptionInfo subscriptionInfo2 = new SubscriptionInfo(6, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "211", "", false, null, "1");
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
+ doReturn(subscriptionInfo2).when(mSubscriptionManager).getActiveSubscriptionInfo(6);
List<CellInfo> results2 = new ArrayList<CellInfo>();
CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
@@ -539,7 +575,7 @@
results2.add((CellInfo) cellInfoLte);
ArrayList<String> mccMncs = new ArrayList<>();
mccMncs.add("310210");
- AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
+ AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(5, 1, mccMncs,
new ArrayList<Integer>());
ArrayList<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
availableNetworkInfos.add(availableNetworkInfo);
@@ -634,6 +670,7 @@
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", true, null, "1", true, null, 0, 0);
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
IUpdateAvailableNetworksCallback mCallback = new IUpdateAvailableNetworksCallback.Stub() {
@Override
@@ -673,7 +710,7 @@
}).start();
waitUntilReady();
waitForMs(500);
- assertEquals(mONSProfileSelector.getCurrentPreferredData(), SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ assertEquals(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, mONSProfileSelector.getCurrentPreferredData());
}
@Test
@@ -682,6 +719,7 @@
SubscriptionInfo subscriptionInfo = new SubscriptionInfo(5, "", 1, "TMO", "TMO", 1, 1,
"123", 1, null, "310", "210", "", true, null, "1", true, null, 0, 0);
subscriptionInfoList.add(subscriptionInfo);
+ doReturn(subscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(5);
IUpdateAvailableNetworksCallback mCallback = new IUpdateAvailableNetworksCallback.Stub() {
@Override
@@ -723,5 +761,4 @@
waitForMs(500);
assertEquals(mONSProfileSelector.getCurrentPreferredData(), 5);
}
-
}
diff --git a/tests/src/com/android/ons/OpportunisticNetworkServiceTest.java b/tests/src/com/android/ons/OpportunisticNetworkServiceTest.java
index 05a7f17..0a75371 100644
--- a/tests/src/com/android/ons/OpportunisticNetworkServiceTest.java
+++ b/tests/src/com/android/ons/OpportunisticNetworkServiceTest.java
@@ -15,6 +15,7 @@
*/
package com.android.ons;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -23,13 +24,15 @@
import android.content.Intent;
import android.os.Looper;
import android.os.RemoteException;
-import android.os.ServiceManager;
import android.telephony.AvailableNetworkInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyManager;
import android.util.Log;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.telephony.IOns;
import com.android.internal.telephony.ISetOpportunisticDataCallback;
import com.android.internal.telephony.IUpdateAvailableNetworksCallback;
@@ -39,13 +42,10 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import static org.mockito.Mockito.any;
import java.util.ArrayList;
import java.util.HashMap;
-import androidx.test.runner.AndroidJUnit4;
-
@RunWith(AndroidJUnit4.class)
public class OpportunisticNetworkServiceTest extends ONSBaseTest {
private static final String TAG = "ONSTest";
@@ -67,30 +67,22 @@
public void setUp() throws Exception {
super.setUp("ONSTest");
pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>";
- pkgForFeature = null;
+ pkgForFeature = mContext != null ? mContext.getAttributionTag() : null;
Intent intent = new Intent(mContext, OpportunisticNetworkService.class);
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
mOpportunisticNetworkService = new OpportunisticNetworkService();
- mContext.startService(intent);
mOpportunisticNetworkService.initialize(mContext);
- mOpportunisticNetworkService.mContext = mContext;
mOpportunisticNetworkService.mSubscriptionManager = mSubscriptionManager;
+ iOpportunisticNetworkService = (IOns) mOpportunisticNetworkService.onBind(null);
mLooper = Looper.myLooper();
+ setReady(true);
Looper.loop();
}
}).start();
- iOpportunisticNetworkService = getIOns();
- for (int i = 0; i < 5; i++) {
- if (iOpportunisticNetworkService == null) {
- waitForMs(500);
- iOpportunisticNetworkService = getIOns();
- } else {
- break;
- }
- }
+ waitUntilReady(200);
}
@After
@@ -359,7 +351,11 @@
}
private IOns getIOns() {
- return IOns.Stub.asInterface(ServiceManager.getService("ions"));
+ return IOns.Stub.asInterface(
+ TelephonyFrameworkInitializer
+ .getTelephonyServiceManager()
+ .getOpportunisticNetworkServiceRegisterer()
+ .get());
}
public static void waitForMs(long ms) {