Add a mobile data toggle for setup

mIsInSetupWizard was moved to top of NetworkProviderSetting's onCreate
so it is available for addPreferences().

Change-Id: I9299c3033e96bcd30450ec239f14fb5daa800d63
This commit is contained in:
Alexander Koskovich 2024-10-30 17:49:38 -04:00 committed by Michael Bestas
parent 6cf58fed50
commit 2e10956562
No known key found for this signature in database
6 changed files with 50 additions and 22 deletions

View file

@ -42,6 +42,13 @@
android:summary="@string/to_switch_networks_disconnect_ethernet" android:summary="@string/to_switch_networks_disconnect_ethernet"
android:icon="@drawable/ic_settings_ethernet"/> android:icon="@drawable/ic_settings_ethernet"/>
<SwitchPreferenceCompat
android:key="main_toggle_mobile_data"
android:title="@string/mobile_data_settings_title"
android:summary="@string/mobile_data_settings_summary"
settings:isPreferenceVisible="@bool/config_show_sim_info"
settings:controller="com.android.settings.network.telephony.MobileDataPreferenceController"/>
<PreferenceCategory <PreferenceCategory
android:key="provider_model_mobile_network" android:key="provider_model_mobile_network"
android:title="@string/summary_placeholder" android:title="@string/summary_placeholder"

View file

@ -74,6 +74,7 @@ import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.datausage.DataUsageUtils; import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.location.WifiScanningFragment; import com.android.settings.location.WifiScanningFragment;
import com.android.settings.network.MobileDataEnabledListener; import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.network.telephony.MobileDataPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.AddNetworkFragment; import com.android.settings.wifi.AddNetworkFragment;
import com.android.settings.wifi.AddWifiNetworkPreference; import com.android.settings.wifi.AddWifiNetworkPreference;
@ -262,6 +263,12 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
@VisibleForTesting @VisibleForTesting
MenuProvider mMenuProvider; MenuProvider mMenuProvider;
/**
* Mobile data toggle
*/
private static final String PREF_KEY_MOBILE_DATA_TOGGLE = "main_toggle_mobile_data";
private MobileDataPreferenceController mMobileDataPreferenceController;
/** /**
* Mobile networks list for provider model * Mobile networks list for provider model
*/ */
@ -322,6 +329,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
final Context context = getContext(); final Context context = getContext();
final Intent intent = this.getIntent();
if (context != null && !context.getResources().getBoolean( if (context != null && !context.getResources().getBoolean(
R.bool.config_show_internet_settings)) { R.bool.config_show_internet_settings)) {
finish(); finish();
@ -329,6 +337,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
} }
mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this); mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this);
mDataStateListener = new MobileDataEnabledListener(getContext(), this); mDataStateListener = new MobileDataEnabledListener(getContext(), this);
mIsInSetupWizard = WizardManagerHelper.isAnySetupWizard(intent);
// TODO(b/37429702): Add animations and preference comparator back after initial screen is // TODO(b/37429702): Add animations and preference comparator back after initial screen is
// loaded (ODR). // loaded (ODR).
@ -376,8 +385,6 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
fixConnectivityItem.setVisible(!mIsGuest && (!isAirplaneModeOn || isWifiEnabled)); fixConnectivityItem.setVisible(!mIsGuest && (!isAirplaneModeOn || isWifiEnabled));
} }
}; };
final Intent intent = this.getIntent();
mIsInSetupWizard = WizardManagerHelper.isAnySetupWizard(intent);
} }
private void updateUserType() { private void updateUserType() {
@ -428,6 +435,7 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
if (mResetInternetPreference != null) { if (mResetInternetPreference != null) {
mResetInternetPreference.setVisible(false); mResetInternetPreference.setVisible(false);
} }
addMobileDataPreferenceController();
addNetworkMobileProviderController(); addNetworkMobileProviderController();
addConnectedEthernetNetworkController(); addConnectedEthernetNetworkController();
addWifiSwitchPreferenceController(); addWifiSwitchPreferenceController();
@ -450,6 +458,18 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
return (context != null) && SubscriptionUtil.isSimHardwareVisible(context); return (context != null) && SubscriptionUtil.isSimHardwareVisible(context);
} }
private void addMobileDataPreferenceController() {
if (!showAnySubscriptionInfo(getContext())) {
return;
}
if (mMobileDataPreferenceController == null) {
mMobileDataPreferenceController = new MobileDataPreferenceController(
getContext(), PREF_KEY_MOBILE_DATA_TOGGLE, getSettingsLifecycle(),
mSubId, mIsInSetupWizard);
}
mMobileDataPreferenceController.displayPreference(getPreferenceScreen());
}
private void addNetworkMobileProviderController() { private void addNetworkMobileProviderController() {
if (!showAnySubscriptionInfo(getContext())) { if (!showAnySubscriptionInfo(getContext())) {
return; return;

View file

@ -16,9 +16,6 @@
package com.android.settings.network.telephony; package com.android.settings.network.telephony;
import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
@ -26,9 +23,10 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent; import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference; import androidx.preference.Preference;
@ -36,6 +34,7 @@ import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference; import androidx.preference.TwoStatePreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.flags.Flags; import com.android.settings.flags.Flags;
import com.android.settings.network.MobileNetworkRepository; import com.android.settings.network.MobileNetworkRepository;
import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.settings.wifi.WifiPickerTrackerHelper;
@ -52,7 +51,7 @@ import java.util.List;
* Preference controller for "Mobile data" * Preference controller for "Mobile data"
*/ */
public class MobileDataPreferenceController extends TelephonyTogglePreferenceController public class MobileDataPreferenceController extends TelephonyTogglePreferenceController
implements LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback { implements DefaultLifecycleObserver, MobileNetworkRepository.MobileNetworkCallback {
private static final String DIALOG_TAG = "MobileDataDialog"; private static final String DIALOG_TAG = "MobileDataDialog";
@ -64,10 +63,10 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
int mDialogType; int mDialogType;
@VisibleForTesting @VisibleForTesting
boolean mNeedDialog; boolean mNeedDialog;
boolean mIsInSetupWizard;
private WifiPickerTrackerHelper mWifiPickerTrackerHelper; private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
protected MobileNetworkRepository mMobileNetworkRepository; protected MobileNetworkRepository mMobileNetworkRepository;
protected LifecycleOwner mLifecycleOwner;
private List<SubscriptionInfoEntity> mSubscriptionInfoEntityList = new ArrayList<>(); private List<SubscriptionInfoEntity> mSubscriptionInfoEntityList = new ArrayList<>();
private List<MobileNetworkInfoEntity> mMobileNetworkInfoEntityList = new ArrayList<>(); private List<MobileNetworkInfoEntity> mMobileNetworkInfoEntityList = new ArrayList<>();
private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@ -75,10 +74,10 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
MobileNetworkInfoEntity mMobileNetworkInfoEntity; MobileNetworkInfoEntity mMobileNetworkInfoEntity;
public MobileDataPreferenceController(Context context, String key, Lifecycle lifecycle, public MobileDataPreferenceController(Context context, String key, Lifecycle lifecycle,
LifecycleOwner lifecycleOwner, int subId) { int subId, boolean isInSetupWizard) {
this(context, key); this(context, key);
mSubId = subId; mSubId = subId;
mLifecycleOwner = lifecycleOwner; mIsInSetupWizard = isInSetupWizard;
if (lifecycle != null) { if (lifecycle != null) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
@ -92,12 +91,13 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public int getAvailabilityStatus(int subId) { public int getAvailabilityStatus(int subId) {
if (Flags.isDualSimOnboardingEnabled()) { if ((Flags.isDualSimOnboardingEnabled() && !mIsInSetupWizard)
|| mSubscriptionManager.getActiveSubscriptionInfo(subId) == null
|| !mSubscriptionManager.isUsableSubscriptionId(subId)
|| !DataUsageUtils.hasMobileData(mContext)) {
return CONDITIONALLY_UNAVAILABLE; return CONDITIONALLY_UNAVAILABLE;
} }
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID return AVAILABLE;
? AVAILABLE
: AVAILABLE_UNSEARCHABLE;
} }
@Override @Override
@ -106,14 +106,14 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
mPreference = screen.findPreference(getPreferenceKey()); mPreference = screen.findPreference(getPreferenceKey());
} }
@OnLifecycleEvent(ON_START) @Override
public void onStart() { public void onResume(@NonNull LifecycleOwner owner) {
mMobileNetworkRepository.addRegister(mLifecycleOwner, this, mSubId); mMobileNetworkRepository.addRegister(owner, this, mSubId);
mMobileNetworkRepository.updateEntity(); mMobileNetworkRepository.updateEntity();
} }
@OnLifecycleEvent(ON_STOP) @Override
public void onStop() { public void onPause(@NonNull LifecycleOwner owner) {
mMobileNetworkRepository.removeRegister(this); mMobileNetworkRepository.removeRegister(this);
} }
@ -174,6 +174,7 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
return; return;
} }
mPreference.setVisible(isAvailable());
mPreference.setChecked(isChecked()); mPreference.setChecked(isChecked());
if (mSubscriptionInfoEntity.isOpportunistic) { if (mSubscriptionInfoEntity.isOpportunistic) {
mPreference.setEnabled(false); mPreference.setEnabled(false);

View file

@ -197,7 +197,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
new SmsDefaultSubscriptionController(context, KEY_SMS_PREF, getSettingsLifecycle(), new SmsDefaultSubscriptionController(context, KEY_SMS_PREF, getSettingsLifecycle(),
this), this),
new MobileDataPreferenceController(context, KEY_MOBILE_DATA_PREF, new MobileDataPreferenceController(context, KEY_MOBILE_DATA_PREF,
getSettingsLifecycle(), this, mSubId), getSettingsLifecycle(), mSubId, false),
new ConvertToEsimPreferenceController(context, KEY_CONVERT_TO_ESIM_PREF, new ConvertToEsimPreferenceController(context, KEY_CONVERT_TO_ESIM_PREF,
getSettingsLifecycle(), this, mSubId), eid); getSettingsLifecycle(), this, mSubId), eid);
} }

View file

@ -131,7 +131,7 @@ public class MobileDataPreferenceControllerComponentTest {
URL url = new URL("https://www.google.net"); URL url = new URL("https://www.google.net");
MobileDataPreferenceController controller = new MobileDataPreferenceController( MobileDataPreferenceController controller = new MobileDataPreferenceController(
mInstrumentation.getTargetContext(), "mobile_data", mLifecycle, mInstrumentation.getTargetContext(), "mobile_data", mLifecycle,
mLifecycleOwner, sSubscriptionId); sSubscriptionId, false);
FragmentManager manager = ((FragmentActivity) activity).getSupportFragmentManager(); FragmentManager manager = ((FragmentActivity) activity).getSupportFragmentManager();
controller.init(manager, sSubscriptionId, mock(SubscriptionInfoEntity.class), mock( controller.init(manager, sSubscriptionId, mock(SubscriptionInfoEntity.class), mock(
MobileNetworkInfoEntity.class)); MobileNetworkInfoEntity.class));

View file

@ -109,7 +109,7 @@ public class MobileDataPreferenceControllerTest {
mPreference = new SwitchPreference(mContext); mPreference = new SwitchPreference(mContext);
mController = new MobileDataPreferenceController(mContext, "mobile_data", mLifecycle, mController = new MobileDataPreferenceController(mContext, "mobile_data", mLifecycle,
mLifecycleOwner, SUB_ID); SUB_ID, false);
mController.init(mFragmentManager, SUB_ID, mSubInfo1, mNetworkInfo1); mController.init(mFragmentManager, SUB_ID, mSubInfo1, mNetworkInfo1);
mPreference.setKey(mController.getPreferenceKey()); mPreference.setKey(mController.getPreferenceKey());
mLifecycleRegistry = new LifecycleRegistry(mLifecycleOwner); mLifecycleRegistry = new LifecycleRegistry(mLifecycleOwner);