From 969a6a613c0ff9d1d9c30c22d64e0e1381ea40e1 Mon Sep 17 00:00:00 2001 From: tom hsu Date: Fri, 17 Apr 2020 03:38:35 +0800 Subject: [PATCH] Fix failures on com.android.settings.network.ApnEditorTest Bug: 152376182 Test: make RunSettingsRoboTests Change-Id: Ib718a4ed0163e07be748857a0dc7b2af92036c3f --- .../android/settings/network/ApnEditor.java | 193 ++++++++++-------- .../settings/network/ApnEditorTest.java | 5 + 2 files changed, 111 insertions(+), 87 deletions(-) diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java index 6de2550c385..5da6e2c7401 100644 --- a/src/com/android/settings/network/ApnEditor.java +++ b/src/com/android/settings/network/ApnEditor.java @@ -130,7 +130,8 @@ public class ApnEditor extends SettingsPreferenceFragment private boolean mNewApn; private int mSubId; - private ProxySubscriptionManager mProxySubscriptionMgr; + @VisibleForTesting + ProxySubscriptionManager mProxySubscriptionMgr; private int mBearerInitialVal = 0; private String mMvnoTypeStr; private String mMvnoMatchDataStr; @@ -263,34 +264,7 @@ public class ApnEditor extends SettingsPreferenceFragment public void onCreate(Bundle icicle) { super.onCreate(icicle); - // enable ProxySubscriptionMgr with Lifecycle support for all controllers - // live within this fragment - mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(getContext()); - mProxySubscriptionMgr.setLifecycle(getLifecycle()); - - addPreferencesFromResource(R.xml.apn_editor); - - sNotSet = getResources().getString(R.string.apn_not_set); - mName = (EditTextPreference) findPreference("apn_name"); - mApn = (EditTextPreference) findPreference("apn_apn"); - mProxy = (EditTextPreference) findPreference("apn_http_proxy"); - mPort = (EditTextPreference) findPreference("apn_http_port"); - mUser = (EditTextPreference) findPreference("apn_user"); - mServer = (EditTextPreference) findPreference("apn_server"); - mPassword = (EditTextPreference) findPreference(KEY_PASSWORD); - mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy"); - mMmsPort = (EditTextPreference) findPreference("apn_mms_port"); - mMmsc = (EditTextPreference) findPreference("apn_mmsc"); - mMcc = (EditTextPreference) findPreference("apn_mcc"); - mMnc = (EditTextPreference) findPreference("apn_mnc"); - mApnType = (EditTextPreference) findPreference("apn_type"); - mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE); - mProtocol = (ListPreference) findPreference(KEY_PROTOCOL); - mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL); - mCarrierEnabled = (SwitchPreference) findPreference(KEY_CARRIER_ENABLED); - mBearerMulti = (MultiSelectListPreference) findPreference(KEY_BEARER_MULTI); - mMvnoType = (ListPreference) findPreference(KEY_MVNO_TYPE); - mMvnoMatchData = (EditTextPreference) findPreference("mvno_match_data"); + setLifecycleForAllControllers(); final Intent intent = getIntent(); final String action = intent.getAction(); @@ -298,47 +272,11 @@ public class ApnEditor extends SettingsPreferenceFragment finish(); return; } - mSubId = intent.getIntExtra(ApnSettings.SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); - mReadOnlyApn = false; - mReadOnlyApnTypes = null; - mReadOnlyApnFields = null; - final CarrierConfigManager configManager = (CarrierConfigManager) - getSystemService(Context.CARRIER_CONFIG_SERVICE); - if (configManager != null) { - final PersistableBundle b = configManager.getConfigForSubId(mSubId); - if (b != null) { - mReadOnlyApnTypes = b.getStringArray( - CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY); - if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)) { - Log.d(TAG, - "onCreate: read only APN type: " + Arrays.toString(mReadOnlyApnTypes)); - } - mReadOnlyApnFields = b.getStringArray( - CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY); - - mDefaultApnTypes = b.getStringArray( - CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY); - if (!ArrayUtils.isEmpty(mDefaultApnTypes)) { - Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes)); - } - - mDefaultApnProtocol = b.getString( - CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_PROTOCOL_STRING); - if (!TextUtils.isEmpty(mDefaultApnProtocol)) { - Log.d(TAG, "onCreate: default apn protocol: " + mDefaultApnProtocol); - } - - mDefaultApnRoamingProtocol = b.getString( - CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING); - if (!TextUtils.isEmpty(mDefaultApnRoamingProtocol)) { - Log.d(TAG, "onCreate: default apn roaming protocol: " - + mDefaultApnRoamingProtocol); - } - } - } + initApnEditorUi(); + getCarrierCustomizedConfig(); Uri uri = null; if (action.equals(Intent.ACTION_EDIT)) { @@ -391,6 +329,17 @@ public class ApnEditor extends SettingsPreferenceFragment } } + /** + * Enable ProxySubscriptionMgr with Lifecycle support for all controllers + * live within this fragment + */ + private void setLifecycleForAllControllers() { + if (mProxySubscriptionMgr == null) { + mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(getContext()); + } + mProxySubscriptionMgr.setLifecycle(getLifecycle()); + } + @Override public void onViewStateRestored(@Nullable Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); @@ -1279,32 +1228,102 @@ public class ApnEditor extends SettingsPreferenceFragment if (TextUtils.isEmpty(userEnteredApnType) && !ArrayUtils.isEmpty(mDefaultApnTypes)) { apnTypeList = mDefaultApnTypes; } - - final StringBuilder editableApnTypes = new StringBuilder(); - final List readOnlyApnTypes = Arrays.asList(mReadOnlyApnTypes); - boolean first = true; - for (String apnType : apnTypeList) { - // add APN type if it is not read-only and is not wild-cardable - if (!readOnlyApnTypes.contains(apnType) - && !apnType.equals(APN_TYPE_IA) - && !apnType.equals(APN_TYPE_EMERGENCY) - && !apnType.equals(APN_TYPE_MCX)) { - if (first) { - first = false; - } else { - editableApnTypes.append(","); - } - editableApnTypes.append(apnType); - } - } - userEnteredApnType = editableApnTypes.toString(); + userEnteredApnType = getEditableApnType(apnTypeList); Log.d(TAG, "getUserEnteredApnType: changed apn type to editable apn types: " + userEnteredApnType); } - return userEnteredApnType; } + private String getEditableApnType(String[] apnTypeList) { + final StringBuilder editableApnTypes = new StringBuilder(); + final List readOnlyApnTypes = Arrays.asList(mReadOnlyApnTypes); + boolean first = true; + for (String apnType : apnTypeList) { + // add APN type if it is not read-only and is not wild-cardable + if (!readOnlyApnTypes.contains(apnType) + && !apnType.equals(APN_TYPE_IA) + && !apnType.equals(APN_TYPE_EMERGENCY) + && !apnType.equals(APN_TYPE_MCX)) { + if (first) { + first = false; + } else { + editableApnTypes.append(","); + } + editableApnTypes.append(apnType); + } + } + return editableApnTypes.toString(); + } + + private void initApnEditorUi() { + addPreferencesFromResource(R.xml.apn_editor); + + sNotSet = getResources().getString(R.string.apn_not_set); + mName = (EditTextPreference) findPreference("apn_name"); + mApn = (EditTextPreference) findPreference("apn_apn"); + mProxy = (EditTextPreference) findPreference("apn_http_proxy"); + mPort = (EditTextPreference) findPreference("apn_http_port"); + mUser = (EditTextPreference) findPreference("apn_user"); + mServer = (EditTextPreference) findPreference("apn_server"); + mPassword = (EditTextPreference) findPreference(KEY_PASSWORD); + mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy"); + mMmsPort = (EditTextPreference) findPreference("apn_mms_port"); + mMmsc = (EditTextPreference) findPreference("apn_mmsc"); + mMcc = (EditTextPreference) findPreference("apn_mcc"); + mMnc = (EditTextPreference) findPreference("apn_mnc"); + mApnType = (EditTextPreference) findPreference("apn_type"); + mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE); + mProtocol = (ListPreference) findPreference(KEY_PROTOCOL); + mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL); + mCarrierEnabled = (SwitchPreference) findPreference(KEY_CARRIER_ENABLED); + mBearerMulti = (MultiSelectListPreference) findPreference(KEY_BEARER_MULTI); + mMvnoType = (ListPreference) findPreference(KEY_MVNO_TYPE); + mMvnoMatchData = (EditTextPreference) findPreference("mvno_match_data"); + } + + private void getCarrierCustomizedConfig() { + mReadOnlyApn = false; + mReadOnlyApnTypes = null; + mReadOnlyApnFields = null; + + final CarrierConfigManager configManager = (CarrierConfigManager) + getSystemService(Context.CARRIER_CONFIG_SERVICE); + if (configManager != null) { + final PersistableBundle b = configManager.getConfigForSubId(mSubId); + if (b != null) { + mReadOnlyApnTypes = b.getStringArray( + CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY); + if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)) { + Log.d(TAG, + "onCreate: read only APN type: " + Arrays.toString(mReadOnlyApnTypes)); + } + mReadOnlyApnFields = b.getStringArray( + CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY); + + mDefaultApnTypes = b.getStringArray( + CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY); + + if (!ArrayUtils.isEmpty(mDefaultApnTypes)) { + Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes)); + } + + mDefaultApnProtocol = b.getString( + CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_PROTOCOL_STRING); + if (!TextUtils.isEmpty(mDefaultApnProtocol)) { + Log.d(TAG, "onCreate: default apn protocol: " + mDefaultApnProtocol); + } + + mDefaultApnRoamingProtocol = b.getString( + CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING); + if (!TextUtils.isEmpty(mDefaultApnRoamingProtocol)) { + Log.d(TAG, "onCreate: default apn roaming protocol: " + + mDefaultApnRoamingProtocol); + } + } + } + } + public static class ErrorDialog extends InstrumentedDialogFragment { public static void showError(ApnEditor editor) { diff --git a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java index e291a437656..20334e045b6 100644 --- a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java +++ b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java @@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -99,6 +100,8 @@ public class ApnEditorTest { @Mock private FragmentActivity mActivity; + @Mock + private ProxySubscriptionManager mProxySubscriptionMgr; @Captor private ArgumentCaptor mUriCaptor; @@ -450,6 +453,8 @@ public class ApnEditorTest { @Test @Config(shadows = ShadowFragment.class) public void onCreate_noAction_shouldFinishAndNoCrash() { + ProxySubscriptionManager proxySubscriptionMgr = mock(ProxySubscriptionManager.class); + mApnEditorUT.mProxySubscriptionMgr = proxySubscriptionMgr; doReturn(new Intent()).when(mActivity).getIntent(); doNothing().when(mApnEditorUT).addPreferencesFromResource(anyInt());