Don't crash Network settings if Wi-Fi is not supported.

Bug: 209906859
Test: flash & boot wifi-less device
Change-Id: If212e7a667e60812c14ece9ef4386de0efb606c2
This commit is contained in:
Tomasz Wasilczyk
2021-12-10 09:22:41 -08:00
parent 1511407370
commit 00e29015f9

View File

@@ -19,8 +19,6 @@ package com.android.settings.network;
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED; import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED;
import static android.os.UserManager.DISALLOW_CONFIG_WIFI; import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
import static com.android.settings.Settings.WifiSettingsActivity;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
@@ -339,6 +337,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
} }
private void addWifiSwitchPreferenceController() { private void addWifiSwitchPreferenceController() {
if (mWifiManager == null) return;
if (mWifiSwitchPreferenceController == null) { if (mWifiSwitchPreferenceController == null) {
mWifiSwitchPreferenceController = mWifiSwitchPreferenceController =
new WifiSwitchPreferenceController(getContext(), getSettingsLifecycle()); new WifiSwitchPreferenceController(getContext(), getSettingsLifecycle());
@@ -350,9 +349,11 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
mWifiPickerTrackerHelper = if (mWifiManager != null) {
new WifiPickerTrackerHelper(getSettingsLifecycle(), getContext(), this); mWifiPickerTrackerHelper =
mWifiPickerTracker = mWifiPickerTrackerHelper.getWifiPickerTracker(); new WifiPickerTrackerHelper(getSettingsLifecycle(), getContext(), this);
mWifiPickerTracker = mWifiPickerTrackerHelper.getWifiPickerTracker();
}
mInternetUpdater = new InternetUpdater(getContext(), getSettingsLifecycle(), this); mInternetUpdater = new InternetUpdater(getContext(), getSettingsLifecycle(), this);
mConnectListener = new WifiConnectListener(getActivity()); mConnectListener = new WifiConnectListener(getActivity());
@@ -419,7 +420,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
if (mIsViewLoading) { if (mIsViewLoading) {
final long delayMillis = mWifiManager.isWifiEnabled() ? 1000 : 100; final long delayMillis = (mWifiManager != null && mWifiManager.isWifiEnabled())
? 1000 : 100;
getView().postDelayed(mRemoveLoadingRunnable, delayMillis); getView().postDelayed(mRemoveLoadingRunnable, delayMillis);
} }
if (mIsRestricted) { if (mIsRestricted) {
@@ -454,7 +456,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
restrictUi(); restrictUi();
} }
changeNextButtonState(mWifiPickerTracker.getConnectedWifiEntry() != null); changeNextButtonState(mWifiPickerTracker != null
&& mWifiPickerTracker.getConnectedWifiEntry() != null);
} }
@Override @Override
@@ -479,7 +482,9 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_NETWORK_REQUEST) { if (mWifiManager == null) {
// Do nothing
} else if (requestCode == ADD_NETWORK_REQUEST) {
handleAddNetworkRequest(resultCode, data); handleAddNetworkRequest(resultCode, data);
return; return;
} else if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) { } else if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) {
@@ -715,7 +720,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
/** Called when the state of Wifi has changed. */ /** Called when the state of Wifi has changed. */
@Override @Override
public void onWifiStateChanged() { public void onWifiStateChanged() {
if (mIsRestricted) { if (mIsRestricted || mWifiManager == null) {
return; return;
} }
final int wifiState = mWifiPickerTracker.getWifiState(); final int wifiState = mWifiPickerTracker.getWifiState();
@@ -765,7 +770,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
} }
final LocationManager locationManager = context.getSystemService(LocationManager.class); final LocationManager locationManager = context.getSystemService(LocationManager.class);
if (isWifiEnabled || !locationManager.isLocationEnabled() if (mWifiManager == null || isWifiEnabled || !locationManager.isLocationEnabled()
|| !mWifiManager.isScanAlwaysAvailable()) { || !mWifiManager.isScanAlwaysAvailable()) {
mWifiStatusMessagePreference.setVisible(false); mWifiStatusMessagePreference.setVisible(false);
return; return;
@@ -796,10 +801,11 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
} else { } else {
updateWifiEntryPreferencesDelayed(); updateWifiEntryPreferencesDelayed();
} }
changeNextButtonState(mWifiPickerTracker.getConnectedWifiEntry() != null); changeNextButtonState(mWifiPickerTracker != null
&& mWifiPickerTracker.getConnectedWifiEntry() != null);
// Edit the Wi-Fi network of specified SSID. // Edit the Wi-Fi network of specified SSID.
if (mOpenSsid != null) { if (mOpenSsid != null && mWifiPickerTracker != null) {
Optional<WifiEntry> matchedWifiEntry = mWifiPickerTracker.getWifiEntries().stream() Optional<WifiEntry> matchedWifiEntry = mWifiPickerTracker.getWifiEntries().stream()
.filter(wifiEntry -> TextUtils.equals(mOpenSsid, wifiEntry.getSsid())) .filter(wifiEntry -> TextUtils.equals(mOpenSsid, wifiEntry.getSsid()))
.filter(wifiEntry -> wifiEntry.getSecurity() != WifiEntry.SECURITY_NONE .filter(wifiEntry -> wifiEntry.getSecurity() != WifiEntry.SECURITY_NONE
@@ -836,7 +842,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
*/ */
private void updateWifiEntryPreferencesDelayed() { private void updateWifiEntryPreferencesDelayed() {
// Safeguard from some delayed event handling // Safeguard from some delayed event handling
if (getActivity() != null && !mIsRestricted if (getActivity() != null && !mIsRestricted && mWifiPickerTracker != null
&& mWifiPickerTracker.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { && mWifiPickerTracker.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
final View view = getView(); final View view = getView();
final Handler handler = view.getHandler(); final Handler handler = view.getHandler();
@@ -854,7 +860,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
return; return;
} }
// in case state has changed // in case state has changed
if (mWifiPickerTracker.getWifiState() != WifiManager.WIFI_STATE_ENABLED) { if (mWifiPickerTracker == null
|| mWifiPickerTracker.getWifiState() != WifiManager.WIFI_STATE_ENABLED) {
return; return;
} }
@@ -1018,8 +1025,10 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
? R.string.wifi_configure_settings_preference_summary_wakeup_on ? R.string.wifi_configure_settings_preference_summary_wakeup_on
: R.string.wifi_configure_settings_preference_summary_wakeup_off)); : R.string.wifi_configure_settings_preference_summary_wakeup_off));
final int numSavedNetworks = mWifiPickerTracker.getNumSavedNetworks(); final int numSavedNetworks = mWifiPickerTracker == null ? 0 :
final int numSavedSubscriptions = mWifiPickerTracker.getNumSavedSubscriptions(); mWifiPickerTracker.getNumSavedNetworks();
final int numSavedSubscriptions = mWifiPickerTracker == null ? 0 :
mWifiPickerTracker.getNumSavedSubscriptions();
if (numSavedNetworks + numSavedSubscriptions > 0) { if (numSavedNetworks + numSavedSubscriptions > 0) {
mSavedNetworksPreference.setVisible(true); mSavedNetworksPreference.setVisible(true);
mSavedNetworksPreference.setSummary( mSavedNetworksPreference.setSummary(
@@ -1054,7 +1063,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
final Context context = getContext(); final Context context = getContext();
final PowerManager powerManager = context.getSystemService(PowerManager.class); final PowerManager powerManager = context.getSystemService(PowerManager.class);
final ContentResolver contentResolver = context.getContentResolver(); final ContentResolver contentResolver = context.getContentResolver();
return mWifiManager.isAutoWakeupEnabled() return mWifiManager != null
&& mWifiManager.isAutoWakeupEnabled()
&& mWifiManager.isScanAlwaysAvailable() && mWifiManager.isScanAlwaysAvailable()
&& Settings.Global.getInt(contentResolver, && Settings.Global.getInt(contentResolver,
Settings.Global.AIRPLANE_MODE_ON, 0) == 0 Settings.Global.AIRPLANE_MODE_ON, 0) == 0
@@ -1075,7 +1085,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
private void handleAddNetworkSubmitEvent(Intent data) { private void handleAddNetworkSubmitEvent(Intent data) {
final WifiConfiguration wifiConfiguration = data.getParcelableExtra( final WifiConfiguration wifiConfiguration = data.getParcelableExtra(
AddNetworkFragment.WIFI_CONFIG_KEY); AddNetworkFragment.WIFI_CONFIG_KEY);
if (wifiConfiguration != null) { if (wifiConfiguration != null && mWifiManager != null) {
mWifiManager.save(wifiConfiguration, mSaveListener); mWifiManager.save(wifiConfiguration, mSaveListener);
} }
} }
@@ -1112,6 +1122,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
@Override @Override
public void onSubmit(WifiDialog2 dialog) { public void onSubmit(WifiDialog2 dialog) {
if (mWifiManager == null) return;
final int dialogMode = dialog.getMode(); final int dialogMode = dialog.getMode();
final WifiConfiguration config = dialog.getController().getConfig(); final WifiConfiguration config = dialog.getController().getConfig();
final WifiEntry wifiEntry = dialog.getWifiEntry(); final WifiEntry wifiEntry = dialog.getWifiEntry();
@@ -1182,6 +1194,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
final List<String> keys = super.getNonIndexableKeys(context); final List<String> keys = super.getNonIndexableKeys(context);
final WifiManager wifiManager = context.getSystemService(WifiManager.class); final WifiManager wifiManager = context.getSystemService(WifiManager.class);
if (wifiManager == null) return keys;
if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) { if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
keys.add(PREF_KEY_SAVED_NETWORKS); keys.add(PREF_KEY_SAVED_NETWORKS);
} }