[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:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user