Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 19bc8e0b authored by Weng Su's avatar Weng Su
Browse files

Fix NPE issue in Internet Settings

- Ignore onWifiEntriesChanged callback when Activity does not exist

Bug: 389552565
Flag: EXEMPT bugfix
Test: Manual testing
atest -c NetworkProviderSettingsTest

Change-Id: I031043616f7c38d4bb27aa81ae3a0a0a32991c62
parent e8afedea
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -924,6 +924,9 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment

    @Override
    public void onWifiEntriesChanged(@WifiPickerTracker.WifiEntriesChangedReason int reason) {
        if (isFinishingOrDestroyed()) {
            return;
        }
        updateWifiEntryPreferences();
        if (reason == WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_SCAN_RESULTS) {
            setProgressBarVisible(false);
+22 −30
Original line number Diff line number Diff line
@@ -118,6 +118,8 @@ public class NetworkProviderSettingsTest {
    @Spy
    Context mContext = ApplicationProvider.getApplicationContext();
    @Mock
    private FragmentActivity mFragmentActivity;
    @Mock
    private PowerManager mPowerManager;
    @Mock
    private WifiManager mWifiManager;
@@ -129,7 +131,6 @@ public class NetworkProviderSettingsTest {
    private AirplaneModeEnabler mAirplaneModeEnabler;
    @Mock
    private DataUsagePreference mDataUsagePreference;
    private NetworkProviderSettings mNetworkProviderSettings;
    @Mock
    private WifiPickerTracker mMockWifiPickerTracker;
    @Mock
@@ -157,8 +158,11 @@ public class NetworkProviderSettingsTest {
    @Mock
    NetworkProviderSettings.WifiRestriction mWifiRestriction;

    private NetworkProviderSettings mNetworkProviderSettings;

    @Before
    public void setUp() {
        when(mFragmentActivity.getApplicationContext()).thenReturn(mContext);
        when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem);

        mNetworkProviderSettings = spy(new NetworkProviderSettings() {
@@ -166,6 +170,8 @@ public class NetworkProviderSettingsTest {
            boolean showAnySubscriptionInfo(Context context) { return true; }
        });
        doReturn(mContext).when(mNetworkProviderSettings).getContext();
        doReturn(mFragmentActivity).when(mNetworkProviderSettings).getActivity();
        doReturn(mFragmentActivity).when(mNetworkProviderSettings).requireActivity();
        doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager();
        doReturn(null).when(mNetworkProviderSettings).getPreferenceScreenBindingKey(mContext);
        doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class);
@@ -294,13 +300,10 @@ public class NetworkProviderSettingsTest {
    }

    private void setUpForOnCreate() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        doReturn(activity).when(mNetworkProviderSettings).requireActivity();
        doReturn(activity).when(mNetworkProviderSettings).getActivity();
        final Resources.Theme theme = mContext.getTheme();
        when(activity.getTheme()).thenReturn(theme);
        when(mFragmentActivity.getTheme()).thenReturn(theme);
        UserManager userManager = mock(UserManager.class);
        when(activity.getSystemService(Context.USER_SERVICE))
        when(mFragmentActivity.getSystemService(Context.USER_SERVICE))
                .thenReturn(userManager);

        when(mNetworkProviderSettings.findPreference(NetworkProviderSettings.PREF_KEY_DATA_USAGE))
@@ -343,10 +346,6 @@ public class NetworkProviderSettingsTest {

    @Test
    public void onCreateContextMenu_shouldHaveForgetAndDisconnectMenuForConnectedWifiEntry() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(activity.getApplicationContext()).thenReturn(mContext);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);

        when(mWifiEntry.canDisconnect()).thenReturn(true);
        when(mWifiEntry.canForget()).thenReturn(true);
        when(mWifiEntry.isSaved()).thenReturn(true);
@@ -365,10 +364,6 @@ public class NetworkProviderSettingsTest {

    @Test
    public void onCreateContextMenu_canShare_shouldHaveShareMenuForConnectedWifiEntry() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(activity.getApplicationContext()).thenReturn(mContext);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);

        when(mWifiEntry.canDisconnect()).thenReturn(true);
        when(mWifiEntry.canShare()).thenReturn(true);
        when(mWifiEntry.canForget()).thenReturn(true);
@@ -387,10 +382,6 @@ public class NetworkProviderSettingsTest {

    @Test
    public void onCreateContextMenu_canNotShare_shouldDisappearShareMenuForConnectedWifiEntry() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(activity.getApplicationContext()).thenReturn(mContext);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);

        when(mWifiEntry.canDisconnect()).thenReturn(true);
        when(mWifiEntry.canShare()).thenReturn(false);
        when(mWifiEntry.canForget()).thenReturn(true);
@@ -414,6 +405,13 @@ public class NetworkProviderSettingsTest {
        verify(mNetworkProviderSettings).changeNextButtonState(anyBoolean());
    }

    @Test
    public void onWifiEntriesChanged_activityIsNull_shouldNotCrash() {
        doReturn(null).when(mNetworkProviderSettings).getActivity();

        mNetworkProviderSettings.onWifiEntriesChanged(WIFI_ENTRIES_CHANGED_REASON_GENERAL);
    }

    @Test
    public void openSubscriptionHelpPage_shouldCallStartActivityForResult() {
        doReturn(new Intent()).when(mNetworkProviderSettings).getHelpIntent(mContext,
@@ -428,20 +426,16 @@ public class NetworkProviderSettingsTest {
    }

    @Test
    public void onNumSavedNetworksChanged_isFinishing_ShouldNotCrash() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(activity.isFinishing()).thenReturn(true);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);
    public void onNumSavedNetworksChanged_isFinishing_shouldNotCrash() {
        when(mFragmentActivity.isFinishing()).thenReturn(true);
        when(mNetworkProviderSettings.getContext()).thenReturn(null);

        mNetworkProviderSettings.onNumSavedNetworksChanged();
    }

    @Test
    public void onNumSavedSubscriptionsChanged_isFinishing_ShouldNotCrash() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(activity.isFinishing()).thenReturn(true);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);
    public void onNumSavedSubscriptionsChanged_isFinishing_shouldNotCrash() {
        when(mFragmentActivity.isFinishing()).thenReturn(true);
        when(mNetworkProviderSettings.getContext()).thenReturn(null);

        mNetworkProviderSettings.onNumSavedSubscriptionsChanged();
@@ -634,7 +628,7 @@ public class NetworkProviderSettingsTest {
    }

    @Test
    public void updateWifiEntryPreferences_activityIsNull_ShouldNotCrash() {
    public void updateWifiEntryPreferences_activityIsNull_shouldNotCrash() {
        when(mNetworkProviderSettings.getActivity()).thenReturn(null);

        // should not crash
@@ -642,9 +636,7 @@ public class NetworkProviderSettingsTest {
    }

    @Test
    public void updateWifiEntryPreferences_viewIsNull_ShouldNotCrash() {
        final FragmentActivity activity = mock(FragmentActivity.class);
        when(mNetworkProviderSettings.getActivity()).thenReturn(activity);
    public void updateWifiEntryPreferences_viewIsNull_shouldNotCrash() {
        when(mNetworkProviderSettings.getView()).thenReturn(null);

        // should not crash