diff options
| -rw-r--r-- | Android.bp | 5 | ||||
| -rw-r--r-- | AndroidManifest.xml | 2 | ||||
| -rw-r--r-- | CleanSpec.mk | 1 | ||||
| -rw-r--r-- | src/com/android/ons/ONSProfileSelector.java | 51 | ||||
| -rw-r--r-- | src/com/android/ons/OpportunisticNetworkService.java | 50 | ||||
| -rw-r--r-- | tests/src/com/android/ons/ONSProfileSelectorTest.java | 55 | ||||
| -rw-r--r-- | tests/src/com/android/ons/OpportunisticNetworkServiceTest.java | 30 |
7 files changed, 128 insertions, 66 deletions
@@ -19,7 +19,10 @@ android_app { 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.Handler; 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 @@ public class ONSProfileSelector { .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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { } } } - return SubscriptionManager.INVALID_SUBSCRIPTION_ID; } @@ -379,7 +380,7 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { } } 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { } 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { 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 @@ public class ONSProfileSelector { } 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 @@ public class ONSProfileSelector { } 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 @@ public class ONSProfileSelector { 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 @@ package com.android.ons; 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.IntentFilter; 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 @@ public class OpportunisticNetworkService extends Service { 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 @@ public class OpportunisticNetworkService extends Service { 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 @@ public class OpportunisticNetworkService extends Service { 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 @@ public class OpportunisticNetworkService extends Service { /* 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 @@ public class OpportunisticNetworkService extends Service { 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 @@ public class OpportunisticNetworkService extends Service { } 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 @@ public class OpportunisticNetworkService extends Service { /* 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 @@ public class OpportunisticNetworkService extends Service { /* 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 @@ public class OpportunisticNetworkService extends Service { } 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 @@ public class OpportunisticNetworkService extends Service { 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 static org.mockito.Mockito.*; 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.SubscriptionManager; 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.junit.Test; 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { } } + 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { "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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { }).start(); waitUntilReady(); waitForMs(500); - assertEquals(mONSProfileSelector.getCurrentPreferredData(), SubscriptionManager.DEFAULT_SUBSCRIPTION_ID); + assertEquals(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, mONSProfileSelector.getCurrentPreferredData()); } @Test @@ -682,6 +719,7 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 @@ public class ONSProfileSelectorTest extends ONSBaseTest { 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 static org.mockito.Mockito.verify; 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.Before; 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 class OpportunisticNetworkServiceTest extends ONSBaseTest { 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 @@ public class OpportunisticNetworkServiceTest extends ONSBaseTest { } private IOns getIOns() { - return IOns.Stub.asInterface(ServiceManager.getService("ions")); + return IOns.Stub.asInterface( + TelephonyFrameworkInitializer + .getTelephonyServiceManager() + .getOpportunisticNetworkServiceRegisterer() + .get()); } public static void waitForMs(long ms) { |
