From 20af3047f02b51bf4cdf729095b0c6ae007b848e Mon Sep 17 00:00:00 2001 From: Alexander Koskovich Date: Fri, 2 Feb 2024 07:09:07 -0500 Subject: [PATCH] Handle mobile data on internet page during setup Change-Id: Id00e9ef135cd2748376c69596979826e764e9185 --- .../network/NetworkProviderSettings.java | 30 ++++++++++++++++--- .../MobileDataPreferenceController.java | 11 +++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 1a9ec062a5b..0040cdf3798 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -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. * diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index 6adc5052145..17639fcdd9d 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -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);