Loading src/com/android/settings/mobilenetwork/MobileNetworkUtils.java +46 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; import android.os.PersistableBundle; import android.os.SystemProperties; Loading @@ -36,6 +37,8 @@ import android.telephony.ims.feature.ImsFeature; import android.text.TextUtils; import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.ims.ImsException; import com.android.ims.ImsManager; Loading @@ -54,6 +57,8 @@ public class MobileNetworkUtils { // the default value is false. private static final String KEY_ENABLE_ESIM_UI_BY_DEFAULT = "esim.enable_esim_system_ui_by_default"; private static final String LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONNECTION_SERVICE_CONFIGURE"; /** * Returns if DPC APNs are enforced. Loading Loading @@ -91,11 +96,10 @@ public class MobileNetworkUtils { boolean isWifiCallingEnabled; if (simCallManager != null) { //TODO(b/114749736): build intent to query wifi calling feature final Intent intent = null; PackageManager pm = context.getPackageManager(); isWifiCallingEnabled = intent != null && !pm.queryIntentActivities(intent, 0 /* flags */).isEmpty(); Intent intent = buildPhoneAccountConfigureIntent( context, simCallManager); isWifiCallingEnabled = intent != null; } else { ImsManager imsMgr = ImsManager.getInstance(context, phoneId); isWifiCallingEnabled = imsMgr != null Loading @@ -107,6 +111,43 @@ public class MobileNetworkUtils { return isWifiCallingEnabled; } @VisibleForTesting static Intent buildPhoneAccountConfigureIntent( Context context, PhoneAccountHandle accountHandle) { Intent intent = buildConfigureIntent( context, accountHandle, TelecomManager.ACTION_CONFIGURE_PHONE_ACCOUNT); if (intent == null) { // If the new configuration didn't work, try the old configuration intent. intent = buildConfigureIntent(context, accountHandle, LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT); } return intent; } private static Intent buildConfigureIntent( Context context, PhoneAccountHandle accountHandle, String actionStr) { if (accountHandle == null || accountHandle.getComponentName() == null || TextUtils.isEmpty(accountHandle.getComponentName().getPackageName())) { return null; } // Build the settings intent. Intent intent = new Intent(actionStr); intent.setPackage(accountHandle.getComponentName().getPackageName()); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle); // Check to see that the phone account package can handle the setting intent. PackageManager pm = context.getPackageManager(); List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0); if (resolutions.size() == 0) { intent = null; // set no intent if the package cannot handle it. } return intent; } public static boolean isImsServiceStateReady(ImsManager imsMgr) { boolean isImsServiceStateReady = false; Loading tests/robotests/src/com/android/settings/mobilenetwork/MobileNetworkUtilsTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -16,13 +16,24 @@ package com.android.settings.mobilenetwork; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.telecom.PhoneAccountHandle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading @@ -36,10 +47,12 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.Arrays; @RunWith(SettingsRobolectricTestRunner.class) public class MobileNetworkUtilsTest { private static final String PACKAGE_NAME = "com.android.app"; private static final int SUB_ID_1 = 1; private static final int SUB_ID_2 = 2; Loading @@ -53,6 +66,14 @@ public class MobileNetworkUtilsTest { private SubscriptionInfo mSubscriptionInfo1; @Mock private SubscriptionInfo mSubscriptionInfo2; @Mock private PackageManager mPackageManager; @Mock private PhoneAccountHandle mPhoneAccountHandle; @Mock private ComponentName mComponentName; @Mock private ResolveInfo mResolveInfo; private Context mContext; Loading @@ -65,6 +86,9 @@ public class MobileNetworkUtilsTest { doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE); doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID_1); doReturn(mTelephonyManager2).when(mTelephonyManager).createForSubscriptionId(SUB_ID_2); doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mComponentName).when(mPhoneAccountHandle).getComponentName(); doReturn(PACKAGE_NAME).when(mComponentName).getPackageName(); doReturn(SUB_ID_1).when(mSubscriptionInfo1).getSubscriptionId(); doReturn(SUB_ID_2).when(mSubscriptionInfo2).getSubscriptionId(); Loading Loading @@ -96,4 +120,27 @@ public class MobileNetworkUtilsTest { verify(mTelephonyManager).setDataEnabled(true); verify(mTelephonyManager2).setDataEnabled(false); } @Test public void buildConfigureIntent_nullHandle_returnNull() { assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, null)).isNull(); } @Test public void buildConfigureIntent_noActivityHandleIntent_returnNull() { doReturn(new ArrayList<ResolveInfo>()).when(mPackageManager).queryIntentActivities( nullable(Intent.class), anyInt()); assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mPhoneAccountHandle)).isNull(); } @Test public void buildConfigureIntent_hasActivityHandleIntent_returnIntent() { doReturn(Arrays.asList(mResolveInfo)).when(mPackageManager).queryIntentActivities( nullable(Intent.class), anyInt()); assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mPhoneAccountHandle)).isNotNull(); } } Loading
src/com/android/settings/mobilenetwork/MobileNetworkUtils.java +46 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; import android.os.PersistableBundle; import android.os.SystemProperties; Loading @@ -36,6 +37,8 @@ import android.telephony.ims.feature.ImsFeature; import android.text.TextUtils; import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.ims.ImsException; import com.android.ims.ImsManager; Loading @@ -54,6 +57,8 @@ public class MobileNetworkUtils { // the default value is false. private static final String KEY_ENABLE_ESIM_UI_BY_DEFAULT = "esim.enable_esim_system_ui_by_default"; private static final String LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONNECTION_SERVICE_CONFIGURE"; /** * Returns if DPC APNs are enforced. Loading Loading @@ -91,11 +96,10 @@ public class MobileNetworkUtils { boolean isWifiCallingEnabled; if (simCallManager != null) { //TODO(b/114749736): build intent to query wifi calling feature final Intent intent = null; PackageManager pm = context.getPackageManager(); isWifiCallingEnabled = intent != null && !pm.queryIntentActivities(intent, 0 /* flags */).isEmpty(); Intent intent = buildPhoneAccountConfigureIntent( context, simCallManager); isWifiCallingEnabled = intent != null; } else { ImsManager imsMgr = ImsManager.getInstance(context, phoneId); isWifiCallingEnabled = imsMgr != null Loading @@ -107,6 +111,43 @@ public class MobileNetworkUtils { return isWifiCallingEnabled; } @VisibleForTesting static Intent buildPhoneAccountConfigureIntent( Context context, PhoneAccountHandle accountHandle) { Intent intent = buildConfigureIntent( context, accountHandle, TelecomManager.ACTION_CONFIGURE_PHONE_ACCOUNT); if (intent == null) { // If the new configuration didn't work, try the old configuration intent. intent = buildConfigureIntent(context, accountHandle, LEGACY_ACTION_CONFIGURE_PHONE_ACCOUNT); } return intent; } private static Intent buildConfigureIntent( Context context, PhoneAccountHandle accountHandle, String actionStr) { if (accountHandle == null || accountHandle.getComponentName() == null || TextUtils.isEmpty(accountHandle.getComponentName().getPackageName())) { return null; } // Build the settings intent. Intent intent = new Intent(actionStr); intent.setPackage(accountHandle.getComponentName().getPackageName()); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, accountHandle); // Check to see that the phone account package can handle the setting intent. PackageManager pm = context.getPackageManager(); List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0); if (resolutions.size() == 0) { intent = null; // set no intent if the package cannot handle it. } return intent; } public static boolean isImsServiceStateReady(ImsManager imsMgr) { boolean isImsServiceStateReady = false; Loading
tests/robotests/src/com/android/settings/mobilenetwork/MobileNetworkUtilsTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -16,13 +16,24 @@ package com.android.settings.mobilenetwork; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.telecom.PhoneAccountHandle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading @@ -36,10 +47,12 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.Arrays; @RunWith(SettingsRobolectricTestRunner.class) public class MobileNetworkUtilsTest { private static final String PACKAGE_NAME = "com.android.app"; private static final int SUB_ID_1 = 1; private static final int SUB_ID_2 = 2; Loading @@ -53,6 +66,14 @@ public class MobileNetworkUtilsTest { private SubscriptionInfo mSubscriptionInfo1; @Mock private SubscriptionInfo mSubscriptionInfo2; @Mock private PackageManager mPackageManager; @Mock private PhoneAccountHandle mPhoneAccountHandle; @Mock private ComponentName mComponentName; @Mock private ResolveInfo mResolveInfo; private Context mContext; Loading @@ -65,6 +86,9 @@ public class MobileNetworkUtilsTest { doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE); doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID_1); doReturn(mTelephonyManager2).when(mTelephonyManager).createForSubscriptionId(SUB_ID_2); doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mComponentName).when(mPhoneAccountHandle).getComponentName(); doReturn(PACKAGE_NAME).when(mComponentName).getPackageName(); doReturn(SUB_ID_1).when(mSubscriptionInfo1).getSubscriptionId(); doReturn(SUB_ID_2).when(mSubscriptionInfo2).getSubscriptionId(); Loading Loading @@ -96,4 +120,27 @@ public class MobileNetworkUtilsTest { verify(mTelephonyManager).setDataEnabled(true); verify(mTelephonyManager2).setDataEnabled(false); } @Test public void buildConfigureIntent_nullHandle_returnNull() { assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, null)).isNull(); } @Test public void buildConfigureIntent_noActivityHandleIntent_returnNull() { doReturn(new ArrayList<ResolveInfo>()).when(mPackageManager).queryIntentActivities( nullable(Intent.class), anyInt()); assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mPhoneAccountHandle)).isNull(); } @Test public void buildConfigureIntent_hasActivityHandleIntent_returnIntent() { doReturn(Arrays.asList(mResolveInfo)).when(mPackageManager).queryIntentActivities( nullable(Intent.class), anyInt()); assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mPhoneAccountHandle)).isNotNull(); } }