Update search for mobile network settings
This CL make all mobile related preferences support: 1. If subId is manually set, check visibility by subId 2. If not, try find whether there is one active subId meets requirement. If so, isAvailable() will return true to enable search. Bug: 77276236 Test: RunSettingsRoboTests Change-Id: I24e2d2f5e882284ba8e997b844caee7722b6b07d
This commit is contained in:
@@ -77,7 +77,8 @@
|
|||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="calling_category"
|
android:key="calling_category"
|
||||||
android:title="@string/call_category">
|
android:title="@string/call_category"
|
||||||
|
settings:searchable="false">
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:key="wifi_calling_key"
|
android:key="wifi_calling_key"
|
||||||
|
@@ -32,7 +32,6 @@ import androidx.preference.Preference;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
import com.android.settings.network.ApnSettings;
|
import com.android.settings.network.ApnSettings;
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||||
import com.android.settingslib.RestrictedPreference;
|
import com.android.settingslib.RestrictedPreference;
|
||||||
@@ -43,12 +42,11 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Apn settings"
|
* Preference controller for "Apn settings"
|
||||||
*/
|
*/
|
||||||
public class ApnPreferenceController extends BasePreferenceController implements
|
public class ApnPreferenceController extends TelephonyBasePreferenceController implements
|
||||||
LifecycleObserver, OnStart, OnStop {
|
LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
CarrierConfigManager mCarrierConfigManager;
|
CarrierConfigManager mCarrierConfigManager;
|
||||||
private int mSubId;
|
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private DpcApnEnforcedObserver mDpcApnEnforcedObserver;
|
private DpcApnEnforcedObserver mDpcApnEnforcedObserver;
|
||||||
|
|
||||||
@@ -59,12 +57,12 @@ public class ApnPreferenceController extends BasePreferenceController implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
final boolean isCdmaApn = MobileNetworkUtils.isCdmaOptions(mContext, mSubId)
|
final boolean isCdmaApn = MobileNetworkUtils.isCdmaOptions(mContext, subId)
|
||||||
&& carrierConfig != null
|
&& carrierConfig != null
|
||||||
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL);
|
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_APN_SETTING_CDMA_BOOL);
|
||||||
final boolean isGsmApn = MobileNetworkUtils.isGsmOptions(mContext, mSubId)
|
final boolean isGsmApn = MobileNetworkUtils.isGsmOptions(mContext, subId)
|
||||||
&& carrierConfig != null
|
&& carrierConfig != null
|
||||||
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_APN_EXPAND_BOOL);
|
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_APN_EXPAND_BOOL);
|
||||||
|
|
||||||
|
@@ -28,21 +28,17 @@ import android.telephony.SubscriptionManager;
|
|||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Carrier Settings"
|
* Preference controller for "Carrier Settings"
|
||||||
*/
|
*/
|
||||||
public class CarrierPreferenceController extends BasePreferenceController {
|
public class CarrierPreferenceController extends TelephonyBasePreferenceController {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
CarrierConfigManager mCarrierConfigManager;
|
CarrierConfigManager mCarrierConfigManager;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public CarrierPreferenceController(Context context, String key) {
|
public CarrierPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = new CarrierConfigManager(context);
|
mCarrierConfigManager = new CarrierConfigManager(context);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(int subId) {
|
public void init(int subId) {
|
||||||
@@ -50,14 +46,14 @@ public class CarrierPreferenceController extends BasePreferenceController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
|
|
||||||
// Return available if it is in CDMA or GSM mode, and the flag is on
|
// Return available if it is in CDMA or GSM mode, and the flag is on
|
||||||
return carrierConfig != null
|
return carrierConfig != null
|
||||||
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL)
|
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL)
|
||||||
&& (MobileNetworkUtils.isCdmaOptions(mContext, mSubId)
|
&& (MobileNetworkUtils.isCdmaOptions(mContext, subId)
|
||||||
|| MobileNetworkUtils.isGsmOptions(mContext, mSubId))
|
|| MobileNetworkUtils.isGsmOptions(mContext, subId))
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
@@ -29,18 +29,15 @@ import android.text.TextUtils;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Data service setup"
|
* Preference controller for "Data service setup"
|
||||||
*/
|
*/
|
||||||
public class DataServiceSetupPreferenceController extends BasePreferenceController {
|
public class DataServiceSetupPreferenceController extends TelephonyBasePreferenceController {
|
||||||
|
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private PersistableBundle mCarrierConfig;
|
|
||||||
private String mSetupUrl;
|
private String mSetupUrl;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public DataServiceSetupPreferenceController(Context context, String key) {
|
public DataServiceSetupPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
@@ -48,16 +45,16 @@ public class DataServiceSetupPreferenceController extends BasePreferenceControll
|
|||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
mSetupUrl = Settings.Global.getString(mContext.getContentResolver(),
|
mSetupUrl = Settings.Global.getString(mContext.getContentResolver(),
|
||||||
Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
|
Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
final boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
|
final boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
|
||||||
== PhoneConstants.LTE_ON_CDMA_TRUE;
|
== PhoneConstants.LTE_ON_CDMA_TRUE;
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
&& mCarrierConfig != null
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
&& !mCarrierConfig.getBoolean(
|
&& carrierConfig != null
|
||||||
|
&& !carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
|
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
|
||||||
&& isLteOnCdma && !TextUtils.isEmpty(mSetupUrl)
|
&& isLteOnCdma && !TextUtils.isEmpty(mSetupUrl)
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
@@ -67,7 +64,6 @@ public class DataServiceSetupPreferenceController extends BasePreferenceControll
|
|||||||
public void init(int subId) {
|
public void init(int subId) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
||||||
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -28,27 +28,24 @@ import android.text.format.Formatter;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
import com.android.settingslib.net.DataUsageController;
|
import com.android.settingslib.net.DataUsageController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Data usage"
|
* Preference controller for "Data usage"
|
||||||
*/
|
*/
|
||||||
public class DataUsagePreferenceController extends BasePreferenceController {
|
public class DataUsagePreferenceController extends TelephonyBasePreferenceController {
|
||||||
|
|
||||||
private NetworkTemplate mTemplate;
|
private NetworkTemplate mTemplate;
|
||||||
private DataUsageController.DataUsageInfo mDataUsageInfo;
|
private DataUsageController.DataUsageInfo mDataUsageInfo;
|
||||||
private Intent mIntent;
|
private Intent mIntent;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public DataUsagePreferenceController(Context context, String key) {
|
public DataUsagePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: AVAILABLE_UNSEARCHABLE;
|
: AVAILABLE_UNSEARCHABLE;
|
||||||
}
|
}
|
||||||
|
@@ -31,18 +31,16 @@ import androidx.preference.Preference;
|
|||||||
import com.android.internal.telephony.Phone;
|
import com.android.internal.telephony.Phone;
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Enabled network mode"
|
* Preference controller for "Enabled network mode"
|
||||||
*/
|
*/
|
||||||
public class EnabledNetworkModePreferenceController extends BasePreferenceController implements
|
public class EnabledNetworkModePreferenceController extends
|
||||||
|
TelephonyBasePreferenceController implements
|
||||||
ListPreference.OnPreferenceChangeListener {
|
ListPreference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private PersistableBundle mPersistableBundle;
|
|
||||||
private int mSubId;
|
|
||||||
private boolean mIsGlobalCdma;
|
private boolean mIsGlobalCdma;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean mShow4GForLTE;
|
boolean mShow4GForLTE;
|
||||||
@@ -50,26 +48,26 @@ public class EnabledNetworkModePreferenceController extends BasePreferenceContro
|
|||||||
public EnabledNetworkModePreferenceController(Context context, String key) {
|
public EnabledNetworkModePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
boolean visible;
|
boolean visible;
|
||||||
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
|
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle == null) {
|
} else if (carrierConfig == null) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(
|
} else if (carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
|
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(
|
} else if (carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
|
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
|
||||||
&& !mTelephonyManager.getServiceState().getRoaming()
|
&& !mTelephonyManager.getServiceState().getRoaming()
|
||||||
&& mTelephonyManager.getServiceState().getDataRegState()
|
&& mTelephonyManager.getServiceState().getDataRegState()
|
||||||
== ServiceState.STATE_IN_SERVICE) {
|
== ServiceState.STATE_IN_SERVICE) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else {
|
} else {
|
||||||
visible = true;
|
visible = true;
|
||||||
@@ -104,15 +102,15 @@ public class EnabledNetworkModePreferenceController extends BasePreferenceContro
|
|||||||
|
|
||||||
public void init(int subId) {
|
public void init(int subId) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mPersistableBundle = mCarrierConfigManager.getConfigForSubId(mSubId);
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||||
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
||||||
|
|
||||||
final boolean isLteOnCdma =
|
final boolean isLteOnCdma =
|
||||||
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
|
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
|
||||||
mIsGlobalCdma = isLteOnCdma
|
mIsGlobalCdma = isLteOnCdma
|
||||||
&& mPersistableBundle.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
||||||
mShow4GForLTE = mPersistableBundle != null
|
mShow4GForLTE = carrierConfig != null
|
||||||
? mPersistableBundle.getBoolean(
|
? carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
|
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
|
||||||
: false;
|
: false;
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,6 @@ import androidx.preference.SwitchPreference;
|
|||||||
|
|
||||||
import com.android.ims.ImsManager;
|
import com.android.ims.ImsManager;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
@@ -42,8 +41,8 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Enhanced 4G LTE"
|
* Preference controller for "Enhanced 4G LTE"
|
||||||
*/
|
*/
|
||||||
public class Enhanced4gLtePreferenceController extends TogglePreferenceController implements
|
public class Enhanced4gLtePreferenceController extends TelephonyTogglePreferenceController
|
||||||
LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
@@ -53,24 +52,23 @@ public class Enhanced4gLtePreferenceController extends TogglePreferenceControlle
|
|||||||
ImsManager mImsManager;
|
ImsManager mImsManager;
|
||||||
private PhoneCallStateListener mPhoneStateListener;
|
private PhoneCallStateListener mPhoneStateListener;
|
||||||
private final List<On4gLteUpdateListener> m4gLteListeners;
|
private final List<On4gLteUpdateListener> m4gLteListeners;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public Enhanced4gLtePreferenceController(Context context, String key) {
|
public Enhanced4gLtePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
m4gLteListeners = new ArrayList<>();
|
m4gLteListeners = new ArrayList<>();
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
final boolean isVisible = mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
&& mImsManager != null && mCarrierConfig != null
|
final boolean isVisible = subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
|
&& mImsManager != null && carrierConfig != null
|
||||||
&& mImsManager.isVolteEnabledByPlatform()
|
&& mImsManager.isVolteEnabledByPlatform()
|
||||||
&& mImsManager.isVolteProvisionedOnDevice()
|
&& mImsManager.isVolteProvisionedOnDevice()
|
||||||
&& MobileNetworkUtils.isImsServiceStateReady(mImsManager)
|
&& MobileNetworkUtils.isImsServiceStateReady(mImsManager)
|
||||||
&& !mCarrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
|
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
|
||||||
return isVisible
|
return isVisible
|
||||||
? (is4gLtePrefEnabled() ? AVAILABLE : AVAILABLE_UNSEARCHABLE)
|
? (is4gLtePrefEnabled() ? AVAILABLE : AVAILABLE_UNSEARCHABLE)
|
||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
|
@@ -18,31 +18,26 @@ package com.android.settings.network.telephony;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.telephony.SubscriptionManager;
|
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.euicc.EuiccManager;
|
import android.telephony.euicc.EuiccManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference controller for "Euicc preference"
|
* Preference controller for "Euicc preference"
|
||||||
*/
|
*/
|
||||||
public class EuiccPreferenceController extends BasePreferenceController {
|
public class EuiccPreferenceController extends TelephonyBasePreferenceController {
|
||||||
|
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public EuiccPreferenceController(Context context, String key) {
|
public EuiccPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return MobileNetworkUtils.showEuiccSettings(mContext)
|
return MobileNetworkUtils.showEuiccSettings(mContext)
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
|
@@ -40,7 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Mobile data"
|
* Preference controller for "Mobile data"
|
||||||
*/
|
*/
|
||||||
public class MobileDataPreferenceController extends TogglePreferenceController
|
public class MobileDataPreferenceController extends TelephonyTogglePreferenceController
|
||||||
implements LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
private static final String DIALOG_TAG = "MobileDataDialog";
|
private static final String DIALOG_TAG = "MobileDataDialog";
|
||||||
@@ -50,7 +50,6 @@ public class MobileDataPreferenceController extends TogglePreferenceController
|
|||||||
private SubscriptionManager mSubscriptionManager;
|
private SubscriptionManager mSubscriptionManager;
|
||||||
private DataContentObserver mDataContentObserver;
|
private DataContentObserver mDataContentObserver;
|
||||||
private FragmentManager mFragmentManager;
|
private FragmentManager mFragmentManager;
|
||||||
private int mSubId;
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
int mDialogType;
|
int mDialogType;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -58,15 +57,13 @@ public class MobileDataPreferenceController extends TogglePreferenceController
|
|||||||
|
|
||||||
public MobileDataPreferenceController(Context context, String key) {
|
public MobileDataPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
|
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
|
||||||
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
@@ -74,7 +71,7 @@ public class MobileDataPreferenceController extends TogglePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(screen);
|
super.displayPreference(screen);
|
||||||
mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
|
mPreference = screen.findPreference(getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -114,7 +114,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
|
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
|
||||||
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
MobileNetworkUtils.getSearchableSubscriptionId(context));
|
||||||
|
|
||||||
if (FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2) &&
|
if (FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2) &&
|
||||||
mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
@@ -250,11 +250,6 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
|
|||||||
|
|
||||||
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider() {
|
new BaseSearchIndexProvider() {
|
||||||
@Override
|
|
||||||
protected boolean isPageSearchEnabled(Context context) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
|
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
|
||||||
boolean enabled) {
|
boolean enabled) {
|
||||||
|
@@ -44,6 +44,8 @@ import com.android.ims.ImsException;
|
|||||||
import com.android.ims.ImsManager;
|
import com.android.ims.ImsManager;
|
||||||
import com.android.internal.telephony.Phone;
|
import com.android.internal.telephony.Phone;
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
|
import com.android.internal.util.ArrayUtils;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -403,4 +405,52 @@ public class MobileNetworkUtils {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return subId that supported by search. If there are more than one, return first one,
|
||||||
|
* otherwise return {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID}
|
||||||
|
*/
|
||||||
|
public static int getSearchableSubscriptionId(Context context) {
|
||||||
|
final SubscriptionManager subscriptionManager = context.getSystemService(
|
||||||
|
SubscriptionManager.class);
|
||||||
|
final int subIds[] = subscriptionManager.getActiveSubscriptionIdList();
|
||||||
|
|
||||||
|
return subIds.length >= 1 ? subIds[0] : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return availability for a default subscription id. If subId already been set, use it to
|
||||||
|
* check, otherwise traverse all active subIds on device to check.
|
||||||
|
* @param context context
|
||||||
|
* @param defSubId Default subId get from telephony preference controller
|
||||||
|
* @param callback Callback to check availability for a specific subId
|
||||||
|
* @return Availability
|
||||||
|
*
|
||||||
|
* @see BasePreferenceController#getAvailabilityStatus()
|
||||||
|
*/
|
||||||
|
public static int getAvailability(Context context, int defSubId,
|
||||||
|
TelephonyAvailabilityCallback callback) {
|
||||||
|
final SubscriptionManager subscriptionManager = context.getSystemService(
|
||||||
|
SubscriptionManager.class);
|
||||||
|
if (defSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
// If subId has been set, return the corresponding status
|
||||||
|
return callback.getAvailabilityStatus(defSubId);
|
||||||
|
} else {
|
||||||
|
// Otherwise, search whether there is one subId in device that support this preference
|
||||||
|
final int[] subIds = subscriptionManager.getActiveSubscriptionIdList();
|
||||||
|
if (ArrayUtils.isEmpty(subIds)) {
|
||||||
|
return callback.getAvailabilityStatus(
|
||||||
|
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||||
|
} else {
|
||||||
|
for (final int subId : subIds) {
|
||||||
|
final int status = callback.getAvailabilityStatus(subId);
|
||||||
|
if (status == BasePreferenceController.AVAILABLE) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback.getAvailabilityStatus(subIds[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -35,38 +35,37 @@ import com.android.settings.core.BasePreferenceController;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Preferred network mode"
|
* Preference controller for "Preferred network mode"
|
||||||
*/
|
*/
|
||||||
public class PreferredNetworkModePreferenceController extends BasePreferenceController implements
|
public class PreferredNetworkModePreferenceController extends TelephonyBasePreferenceController
|
||||||
ListPreference.OnPreferenceChangeListener {
|
implements ListPreference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private PersistableBundle mPersistableBundle;
|
private PersistableBundle mPersistableBundle;
|
||||||
private int mSubId;
|
|
||||||
private boolean mIsGlobalCdma;
|
private boolean mIsGlobalCdma;
|
||||||
|
|
||||||
public PreferredNetworkModePreferenceController(Context context, String key) {
|
public PreferredNetworkModePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
|
||||||
boolean visible;
|
boolean visible;
|
||||||
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle == null) {
|
} else if (carrierConfig == null) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(
|
} else if (carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
|
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(
|
} else if (carrierConfig.getBoolean(
|
||||||
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
|
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
|
||||||
&& !mTelephonyManager.getServiceState().getRoaming()
|
&& !mTelephonyManager.getServiceState().getRoaming()
|
||||||
&& mTelephonyManager.getServiceState().getDataRegState()
|
&& mTelephonyManager.getServiceState().getDataRegState()
|
||||||
== ServiceState.STATE_IN_SERVICE) {
|
== ServiceState.STATE_IN_SERVICE) {
|
||||||
visible = false;
|
visible = false;
|
||||||
} else if (mPersistableBundle.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
||||||
visible = true;
|
visible = true;
|
||||||
} else {
|
} else {
|
||||||
visible = false;
|
visible = false;
|
||||||
@@ -100,13 +99,13 @@ public class PreferredNetworkModePreferenceController extends BasePreferenceCont
|
|||||||
|
|
||||||
public void init(int subId) {
|
public void init(int subId) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mPersistableBundle = mCarrierConfigManager.getConfigForSubId(mSubId);
|
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||||
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
||||||
|
|
||||||
final boolean isLteOnCdma =
|
final boolean isLteOnCdma =
|
||||||
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
|
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
|
||||||
mIsGlobalCdma = isLteOnCdma
|
mIsGlobalCdma = isLteOnCdma
|
||||||
&& mPersistableBundle.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getPreferredNetworkMode() {
|
private int getPreferredNetworkMode() {
|
||||||
|
@@ -42,7 +42,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Roaming"
|
* Preference controller for "Roaming"
|
||||||
*/
|
*/
|
||||||
public class RoamingPreferenceController extends TogglePreferenceController implements
|
public class RoamingPreferenceController extends TelephonyTogglePreferenceController implements
|
||||||
LifecycleObserver, OnStart, OnStop {
|
LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
private static final String DIALOG_TAG = "MobileDataDialog";
|
private static final String DIALOG_TAG = "MobileDataDialog";
|
||||||
@@ -50,7 +50,6 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
|
|||||||
private RestrictedSwitchPreference mSwitchPreference;
|
private RestrictedSwitchPreference mSwitchPreference;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
private int mSubId;
|
|
||||||
private DataContentObserver mDataContentObserver;
|
private DataContentObserver mDataContentObserver;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean mNeedDialog;
|
boolean mNeedDialog;
|
||||||
@@ -59,10 +58,8 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
|
|||||||
|
|
||||||
public RoamingPreferenceController(Context context, String key) {
|
public RoamingPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -78,12 +75,12 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
|
|||||||
@Override
|
@Override
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(screen);
|
super.displayPreference(screen);
|
||||||
mSwitchPreference = (RestrictedSwitchPreference) screen.findPreference(getPreferenceKey());
|
mSwitchPreference = screen.findPreference(getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: AVAILABLE_UNSEARCHABLE;
|
: AVAILABLE_UNSEARCHABLE;
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback to decide whether preference is available based on subscription id
|
||||||
|
*/
|
||||||
|
public interface TelephonyAvailabilityCallback {
|
||||||
|
/**
|
||||||
|
* Return availability status for a specific subId
|
||||||
|
*
|
||||||
|
* @see TelephonyBasePreferenceController
|
||||||
|
* @see TelephonyTogglePreferenceController
|
||||||
|
*/
|
||||||
|
int getAvailabilityStatus(int subId);
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link BasePreferenceController} that used by all preferences that requires subscription id.
|
||||||
|
*/
|
||||||
|
public abstract class TelephonyBasePreferenceController extends BasePreferenceController
|
||||||
|
implements TelephonyAvailabilityCallback {
|
||||||
|
protected int mSubId;
|
||||||
|
|
||||||
|
public TelephonyBasePreferenceController(Context context, String preferenceKey) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return MobileNetworkUtils.getAvailability(mContext, mSubId, this::getAvailabilityStatus);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
|
||||||
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link TogglePreferenceController} that used by all preferences that requires subscription id.
|
||||||
|
*/
|
||||||
|
public abstract class TelephonyTogglePreferenceController extends TogglePreferenceController
|
||||||
|
implements TelephonyAvailabilityCallback {
|
||||||
|
protected int mSubId;
|
||||||
|
|
||||||
|
public TelephonyTogglePreferenceController(Context context, String preferenceKey) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return MobileNetworkUtils.getAvailability(mContext, mSubId, this::getAvailabilityStatus);
|
||||||
|
}
|
||||||
|
}
|
@@ -42,7 +42,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Video Calling"
|
* Preference controller for "Video Calling"
|
||||||
*/
|
*/
|
||||||
public class VideoCallingPreferenceController extends TogglePreferenceController implements
|
public class VideoCallingPreferenceController extends TelephonyTogglePreferenceController implements
|
||||||
LifecycleObserver, OnStart, OnStop,
|
LifecycleObserver, OnStart, OnStop,
|
||||||
Enhanced4gLtePreferenceController.On4gLteUpdateListener {
|
Enhanced4gLtePreferenceController.On4gLteUpdateListener {
|
||||||
|
|
||||||
@@ -54,21 +54,19 @@ public class VideoCallingPreferenceController extends TogglePreferenceController
|
|||||||
ImsManager mImsManager;
|
ImsManager mImsManager;
|
||||||
private PhoneCallStateListener mPhoneStateListener;
|
private PhoneCallStateListener mPhoneStateListener;
|
||||||
private DataContentObserver mDataContentObserver;
|
private DataContentObserver mDataContentObserver;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public VideoCallingPreferenceController(Context context, String key) {
|
public VideoCallingPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
|
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
|
||||||
SubscriptionManager.getPhoneId(mSubId))
|
SubscriptionManager.getPhoneId(subId))
|
||||||
&& isVideoCallEnabled()
|
&& isVideoCallEnabled()
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
: CONDITIONALLY_UNAVAILABLE;
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
|
@@ -33,7 +33,6 @@ import androidx.preference.PreferenceScreen;
|
|||||||
|
|
||||||
import com.android.ims.ImsConfig;
|
import com.android.ims.ImsConfig;
|
||||||
import com.android.ims.ImsManager;
|
import com.android.ims.ImsManager;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
@@ -43,7 +42,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* Preference controller for "Wifi Calling"
|
* Preference controller for "Wifi Calling"
|
||||||
*/
|
*/
|
||||||
public class WifiCallingPreferenceController extends BasePreferenceController implements
|
public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
|
||||||
LifecycleObserver, OnStart, OnStop {
|
LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -56,19 +55,17 @@ public class WifiCallingPreferenceController extends BasePreferenceController im
|
|||||||
PhoneAccountHandle mSimCallManager;
|
PhoneAccountHandle mSimCallManager;
|
||||||
private PhoneCallStateListener mPhoneStateListener;
|
private PhoneCallStateListener mPhoneStateListener;
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private int mSubId;
|
|
||||||
|
|
||||||
public WifiCallingPreferenceController(Context context, String key) {
|
public WifiCallingPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
|
mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
||||||
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus(int subId) {
|
||||||
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
|
||||||
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
|
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
|
||||||
SubscriptionManager.getPhoneId(mSubId))
|
SubscriptionManager.getPhoneId(mSubId))
|
||||||
? AVAILABLE
|
? AVAILABLE
|
||||||
|
@@ -41,7 +41,6 @@ import android.telephony.SubscriptionManager;
|
|||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -184,4 +183,19 @@ public class MobileNetworkUtilsTest {
|
|||||||
|
|
||||||
assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
|
assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSearchableSubscriptionId_oneActive_returnValid() {
|
||||||
|
when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{SUB_ID_1});
|
||||||
|
|
||||||
|
assertThat(MobileNetworkUtils.getSearchableSubscriptionId(mContext)).isEqualTo(SUB_ID_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSearchableSubscriptionId_nonActive_returnInvalid() {
|
||||||
|
when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[0]);
|
||||||
|
|
||||||
|
assertThat(MobileNetworkUtils.getSearchableSubscriptionId(mContext))
|
||||||
|
.isEqualTo(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
public class TelephonyBasePreferenceControllerTest {
|
||||||
|
private static final int VALID_SUB_ID = 1;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private SubscriptionManager mSubscriptionManager;
|
||||||
|
|
||||||
|
private TestPreferenceController mPreferenceController;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
|
when(mContext.getSystemService(SubscriptionManager.class))
|
||||||
|
.thenReturn(mSubscriptionManager);
|
||||||
|
when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{});
|
||||||
|
mPreferenceController = new TestPreferenceController(mContext, "prefKey");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isAvailable_validSubIdSet_returnTrue() {
|
||||||
|
mPreferenceController.init(VALID_SUB_ID);
|
||||||
|
|
||||||
|
assertThat(mPreferenceController.isAvailable()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isAvailable_noIdSetHoweverHasDefaultOne_returnTrue() {
|
||||||
|
when(mSubscriptionManager.getActiveSubscriptionIdList())
|
||||||
|
.thenReturn(new int[]{VALID_SUB_ID});
|
||||||
|
|
||||||
|
assertThat(mPreferenceController.isAvailable()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isAvailable_noDefaultAndNoSet_returnFalse() {
|
||||||
|
assertThat(mPreferenceController.isAvailable()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test preference controller for {@link TelephonyBasePreferenceController}
|
||||||
|
*/
|
||||||
|
public class TestPreferenceController extends TelephonyBasePreferenceController {
|
||||||
|
public TestPreferenceController(Context context, String prefKey) {
|
||||||
|
super(context, prefKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(int subId) {
|
||||||
|
mSubId = subId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus(int subId) {
|
||||||
|
return subId == VALID_SUB_ID ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user