[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
This commit is contained in:
Weng Su
2021-01-29 02:04:19 +08:00
parent ba845f7fe4
commit fc3a51ed3f
2 changed files with 23 additions and 2 deletions

View File

@@ -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;
updateState(mPreference);
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());
}
}

View File

@@ -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();
}
}