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

Commit fc3a51ed authored by Weng Su's avatar Weng Su
Browse files

[Provider Model] Fix Internet preference crash

- Post on main thread for UI update

- Add NPE checking

Bug: 178670562
Test: manual test
- atest InternetPreferenceControllerTest

Change-Id: I6c37f7dc19f9f9bbc75b36415a47aa1366dc5f5e
parent ba845f7f
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;

import androidx.annotation.IdRes;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
@@ -42,6 +43,7 @@ import com.android.settings.widget.SummaryUpdater;
import com.android.settings.wifi.WifiSummaryUpdater;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.utils.ThreadUtils;

import java.util.HashMap;
import java.util.Map;
@@ -147,8 +149,13 @@ public class InternetPreferenceController extends AbstractPreferenceController i
     * @param internetType the internet type
     */
    public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) {
        final boolean needUpdate = (internetType != mInternetType);
        mInternetType = internetType;
        if (needUpdate) {
            ThreadUtils.postOnMainThread(() -> {
                updateState(mPreference);
            });
        }
    }

    @Override
@@ -158,13 +165,17 @@ public class InternetPreferenceController extends AbstractPreferenceController i
        }
    }

    private void updateCellularSummary() {
    @VisibleForTesting
    void updateCellularSummary() {
        final SubscriptionManager subscriptionManager =
                mContext.getSystemService(SubscriptionManager.class);
        if (subscriptionManager == null) {
            return;
        }
        SubscriptionInfo subInfo = subscriptionManager.getDefaultDataSubscriptionInfo();
        if (subInfo == null) {
            return;
        }
        mPreference.setSummary(subInfo.getDisplayName());
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;

import androidx.lifecycle.Lifecycle;
import androidx.preference.Preference;
@@ -123,4 +124,13 @@ public class InternetPreferenceControllerTest {

        assertThat(mPreference.getSummary()).isEqualTo(TEST_SUMMARY);
    }

    @Test
    public void updateCellularSummary_getNullSubscriptionInfo_shouldNotCrash() {
        final SubscriptionManager subscriptionManager = mock(SubscriptionManager.class);
        when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(subscriptionManager);
        when(subscriptionManager.getDefaultDataSubscriptionInfo()).thenReturn(null);

        mController.updateCellularSummary();
    }
}