[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 android.telephony.SubscriptionManager;
|
||||||
|
|
||||||
import androidx.annotation.IdRes;
|
import androidx.annotation.IdRes;
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.LifecycleObserver;
|
import androidx.lifecycle.LifecycleObserver;
|
||||||
import androidx.lifecycle.OnLifecycleEvent;
|
import androidx.lifecycle.OnLifecycleEvent;
|
||||||
@@ -42,6 +43,7 @@ import com.android.settings.widget.SummaryUpdater;
|
|||||||
import com.android.settings.wifi.WifiSummaryUpdater;
|
import com.android.settings.wifi.WifiSummaryUpdater;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -147,8 +149,13 @@ public class InternetPreferenceController extends AbstractPreferenceController i
|
|||||||
* @param internetType the internet type
|
* @param internetType the internet type
|
||||||
*/
|
*/
|
||||||
public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) {
|
public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) {
|
||||||
|
final boolean needUpdate = (internetType != mInternetType);
|
||||||
mInternetType = internetType;
|
mInternetType = internetType;
|
||||||
updateState(mPreference);
|
if (needUpdate) {
|
||||||
|
ThreadUtils.postOnMainThread(() -> {
|
||||||
|
updateState(mPreference);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -158,13 +165,17 @@ public class InternetPreferenceController extends AbstractPreferenceController i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCellularSummary() {
|
@VisibleForTesting
|
||||||
|
void updateCellularSummary() {
|
||||||
final SubscriptionManager subscriptionManager =
|
final SubscriptionManager subscriptionManager =
|
||||||
mContext.getSystemService(SubscriptionManager.class);
|
mContext.getSystemService(SubscriptionManager.class);
|
||||||
if (subscriptionManager == null) {
|
if (subscriptionManager == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SubscriptionInfo subInfo = subscriptionManager.getDefaultDataSubscriptionInfo();
|
SubscriptionInfo subInfo = subscriptionManager.getDefaultDataSubscriptionInfo();
|
||||||
|
if (subInfo == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
mPreference.setSummary(subInfo.getDisplayName());
|
mPreference.setSummary(subInfo.getDisplayName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,6 +36,7 @@ import android.net.NetworkScoreManager;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -123,4 +124,13 @@ public class InternetPreferenceControllerTest {
|
|||||||
|
|
||||||
assertThat(mPreference.getSummary()).isEqualTo(TEST_SUMMARY);
|
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