From dcf701efc33a18b9d82b89ff3882a4a1880aa7fb Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Wed, 25 Mar 2020 05:48:37 +0800 Subject: [PATCH] [Settings] Avoid from Settings crash Avoid from crash when null pointer. Bug: 152336444 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=MobileNetworkActivityTest Change-Id: I77314f697d8a99d77b9f5fe0a48ddbae69634743 --- .../telephony/MobileNetworkActivity.java | 20 ++++++++++++++----- .../telephony/MobileNetworkActivityTest.java | 8 ++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java index 4416a0e9c46..935b13ebf9c 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java +++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java @@ -53,7 +53,8 @@ public class MobileNetworkActivity extends SettingsBaseActivity @VisibleForTesting static final int SUB_ID_NULL = Integer.MIN_VALUE; - private ProxySubscriptionManager mProxySubscriptionMgr; + @VisibleForTesting + ProxySubscriptionManager mProxySubscriptionMgr; private int mCurSubscriptionId; @Override @@ -102,9 +103,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity actionBar.setDisplayHomeAsUpEnabled(true); } - mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(this); - mProxySubscriptionMgr.setLifecycle(getLifecycle()); - mProxySubscriptionMgr.addActiveSubscriptionsListener(this); + registerActiveSubscriptionsListener(); final Intent startIntent = getIntent(); validate(startIntent); @@ -119,15 +118,26 @@ public class MobileNetworkActivity extends SettingsBaseActivity maybeShowContactDiscoveryDialog(mCurSubscriptionId); } + @VisibleForTesting + void registerActiveSubscriptionsListener() { + mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(this); + mProxySubscriptionMgr.setLifecycle(getLifecycle()); + mProxySubscriptionMgr.addActiveSubscriptionsListener(this); + } + /** * Implementation of ProxySubscriptionManager.OnActiveSubscriptionChangedListener */ public void onChanged() { SubscriptionInfo info = getSubscription(); int oldSubIndex = mCurSubscriptionId; - int subIndex = info.getSubscriptionId(); updateSubscriptions(info); + // Remove the dialog if the subscription associated with this activity changes. + if (info == null) { + return; + } + int subIndex = info.getSubscriptionId(); if (subIndex != oldSubIndex) { removeContactDiscoveryDialog(oldSubIndex); } diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java index eaa0011e4c0..2f9bf95d0b5 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java @@ -22,6 +22,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.robolectric.Shadows.shadowOf; import android.content.Context; @@ -39,6 +40,7 @@ import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.android.internal.telephony.TelephonyIntents; +import com.android.settings.network.ProxySubscriptionManager; import org.junit.After; import org.junit.Before; @@ -109,6 +111,12 @@ public class MobileNetworkActivityTest { private SubscriptionInfo mSubscriptionInFragment; + @Override + void registerActiveSubscriptionsListener() { + mProxySubscriptionMgr = mock(ProxySubscriptionManager.class); + onChanged(); + } + @Override void switchFragment(SubscriptionInfo subInfo) { mSubscriptionInFragment = subInfo;