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 13093942c1
commit 20af3047f0
2 changed files with 37 additions and 4 deletions

View File

@@ -79,6 +79,7 @@ import com.android.settings.network.ethernet.EthernetInterfaceDetailsFragment;
import com.android.settings.network.ethernet.EthernetSwitchPreferenceController;
import com.android.settings.network.ethernet.EthernetTracker;
import com.android.settings.network.ethernet.EthernetTrackerImpl;
import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.AddNetworkFragment;
import com.android.settings.wifi.AddWifiNetworkPreference;
@@ -123,7 +124,8 @@ import java.util.Optional;
public class NetworkProviderSettings extends RestrictedDashboardFragment
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
@@ -219,6 +221,9 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
protected WifiManager mWifiManager;
private WifiManager.ActionListener mSaveListener;
int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
MobileDataEnabledListener mDataStateListener;
protected InternetResetHelper mInternetResetHelper;
/**
@@ -290,6 +295,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
public NetworkProviderSettings() {
super(DISALLOW_CONFIG_WIFI);
mSubId = SubscriptionManager.getActiveDataSubscriptionId();
}
@Override
@@ -341,6 +347,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
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).
@@ -593,6 +600,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
return;
}
mAirplaneModeEnabler.start();
mDataStateListener.start(mSubId);
if (com.android.settings.connectivity.Flags.ethernetSettings()) {
mEthernetTracker.registerInterfaceListener(this::onInterfaceListChanged);
}
@@ -624,7 +632,8 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
}
changeNextButtonState(mWifiPickerTracker != null
&& mWifiPickerTracker.getConnectedWifiEntry() != null);
&& mWifiPickerTracker.getConnectedWifiEntry() != null
|| getDataEnabled());
}
@Override
@@ -633,6 +642,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
getView().removeCallbacks(mUpdateWifiEntryPreferencesRunnable);
getView().removeCallbacks(mHideProgressBarRunnable);
mAirplaneModeEnabler.stop();
mDataStateListener.stop();
if (com.android.settings.connectivity.Flags.ethernetSettings()) {
mEthernetTracker.unregisterInterfaceListener(this::onInterfaceListChanged);
}
@@ -1022,7 +1032,8 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
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) {
@@ -1352,7 +1363,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
* 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) {
@@ -1633,6 +1644,17 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
}
}
/**
* 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);