Handle mobile data on internet page during setup

Change-Id: Id00e9ef135cd2748376c69596979826e764e9185
This commit is contained in:
Alexander Koskovich 2024-02-02 07:09:07 -05:00 committed by Michael Bestas
parent b3c3cdfbf4
commit 6ee00c8ce9
No known key found for this signature in database
2 changed files with 38 additions and 4 deletions

View file

@ -37,6 +37,7 @@ import android.os.PowerManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.EventLog;
@ -70,6 +71,7 @@ import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.location.WifiScanningFragment;
import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.AddNetworkFragment;
import com.android.settings.wifi.AddWifiNetworkPreference;
@ -112,7 +114,8 @@ import java.util.Optional;
public class NetworkProviderSettings extends RestrictedSettingsFragment
implements Indexable, WifiPickerTracker.WifiPickerTrackerCallback,
WifiDialog2.WifiDialog2Listener, DialogInterface.OnDismissListener,
AirplaneModeEnabler.OnAirplaneModeChangedListener, InternetUpdater.InternetChangeListener {
AirplaneModeEnabler.OnAirplaneModeChangedListener, InternetUpdater.InternetChangeListener,
MobileDataEnabledListener.Client {
private static final String TAG = "NetworkProviderSettings";
// IDs of context menu
@ -205,6 +208,9 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
protected WifiManager mWifiManager;
private WifiManager.ActionListener mSaveListener;
int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
MobileDataEnabledListener mDataStateListener;
protected InternetResetHelper mInternetResetHelper;
/**
@ -268,6 +274,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
public NetworkProviderSettings() {
super(DISALLOW_CONFIG_WIFI);
mSubId = SubscriptionManager.getActiveDataSubscriptionId();
}
@Override
@ -319,6 +326,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
return;
}
mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this);
mDataStateListener = new MobileDataEnabledListener(getContext(), this);
// TODO(b/37429702): Add animations and preference comparator back after initial screen is
// loaded (ODR).
@ -539,6 +547,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
return;
}
mAirplaneModeEnabler.start();
mDataStateListener.start(mSubId);
}
private void restrictUi() {
@ -567,7 +576,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
}
changeNextButtonState(mWifiPickerTracker != null
&& mWifiPickerTracker.getConnectedWifiEntry() != null);
&& mWifiPickerTracker.getConnectedWifiEntry() != null
|| getDataEnabled());
}
@Override
@ -576,6 +586,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
getView().removeCallbacks(mUpdateWifiEntryPreferencesRunnable);
getView().removeCallbacks(mHideProgressBarRunnable);
mAirplaneModeEnabler.stop();
mDataStateListener.stop();
super.onStop();
}
@ -954,7 +965,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
setProgressBarVisible(false);
}
changeNextButtonState(mWifiPickerTracker != null
&& mWifiPickerTracker.getConnectedWifiEntry() != null);
&& mWifiPickerTracker.getConnectedWifiEntry() != null
|| getDataEnabled());
// Edit the Wi-Fi network of specified SSID.
if (mOpenSsid != null && mWifiPickerTracker != null) {
@ -1241,7 +1253,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
* Renames/replaces "Next" button when appropriate. "Next" button usually exists in
* Wi-Fi setup screens, not in usual wifi settings screen.
*
* @param enabled true when the device is connected to a wifi network.
* @param enabled true when the device is connected to a mobile or wifi network.
*/
@VisibleForTesting
void changeNextButtonState(boolean enabled) {
@ -1522,6 +1534,17 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
}
}
/**
* Implementation of {@code MobileDataEnabledListener.Client}
*/
public void onMobileDataEnabledChange() {
changeNextButtonState(getDataEnabled());
}
boolean getDataEnabled() {
return getContext().getSystemService(TelephonyManager.class).getDataEnabled(mSubId);
}
/**
* A Wi-Fi preference for the connected Wi-Fi network without internet access.
*

View file

@ -20,6 +20,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
import android.content.Context;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@ -42,6 +43,8 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.ArrayList;
import java.util.List;
@ -130,6 +133,14 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
public boolean setChecked(boolean isChecked) {
mNeedDialog = isDialogNeeded();
// If we are still provisioning we need to allow enabling mobile data first.
// By default it is not allowed to use mobile network during provisioning so
// we need to allow it.
if (!WizardManagerHelper.isDeviceProvisioned(mContext)) {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, isChecked ? 1 : 0);
}
if (!mNeedDialog) {
// Update data directly if we don't need dialog
Log.d(DIALOG_TAG, "setMobileDataEnabled: " + isChecked);