Merge "Update search for mobile network settings"

This commit is contained in:
Lei Yu
2019-02-11 18:00:57 +00:00
committed by Android (Google) Code Review
20 changed files with 338 additions and 109 deletions

View File

@@ -32,7 +32,6 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.SettingsActivity;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.ApnSettings;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
@@ -43,12 +42,11 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
/**
* Preference controller for "Apn settings"
*/
public class ApnPreferenceController extends BasePreferenceController implements
public class ApnPreferenceController extends TelephonyBasePreferenceController implements
LifecycleObserver, OnStart, OnStop {
@VisibleForTesting
CarrierConfigManager mCarrierConfigManager;
private int mSubId;
private Preference mPreference;
private DpcApnEnforcedObserver mDpcApnEnforcedObserver;
@@ -59,12 +57,12 @@ public class ApnPreferenceController extends BasePreferenceController implements
}
@Override
public int getAvailabilityStatus() {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
final boolean isCdmaApn = MobileNetworkUtils.isCdmaOptions(mContext, mSubId)
public int getAvailabilityStatus(int subId) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
final boolean isCdmaApn = MobileNetworkUtils.isCdmaOptions(mContext, subId)
&& carrierConfig != null
&& 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.getBoolean(CarrierConfigManager.KEY_APN_EXPAND_BOOL);

View File

@@ -28,21 +28,17 @@ import android.telephony.SubscriptionManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
/**
* Preference controller for "Carrier Settings"
*/
public class CarrierPreferenceController extends BasePreferenceController {
public class CarrierPreferenceController extends TelephonyBasePreferenceController {
@VisibleForTesting
CarrierConfigManager mCarrierConfigManager;
private int mSubId;
public CarrierPreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = new CarrierConfigManager(context);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
public void init(int subId) {
@@ -50,14 +46,14 @@ public class CarrierPreferenceController extends BasePreferenceController {
}
@Override
public int getAvailabilityStatus() {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
public int getAvailabilityStatus(int subId) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
// Return available if it is in CDMA or GSM mode, and the flag is on
return carrierConfig != null
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL)
&& (MobileNetworkUtils.isCdmaOptions(mContext, mSubId)
|| MobileNetworkUtils.isGsmOptions(mContext, mSubId))
&& (MobileNetworkUtils.isCdmaOptions(mContext, subId)
|| MobileNetworkUtils.isGsmOptions(mContext, subId))
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;
}

View File

@@ -29,18 +29,15 @@ import android.text.TextUtils;
import androidx.preference.Preference;
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.core.BasePreferenceController;
/**
* Preference controller for "Data service setup"
*/
public class DataServiceSetupPreferenceController extends BasePreferenceController {
public class DataServiceSetupPreferenceController extends TelephonyBasePreferenceController {
private CarrierConfigManager mCarrierConfigManager;
private TelephonyManager mTelephonyManager;
private PersistableBundle mCarrierConfig;
private String mSetupUrl;
private int mSubId;
public DataServiceSetupPreferenceController(Context context, String key) {
super(context, key);
@@ -48,16 +45,16 @@ public class DataServiceSetupPreferenceController extends BasePreferenceControll
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSetupUrl = Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
public int getAvailabilityStatus(int subId) {
final boolean isLteOnCdma = mTelephonyManager.getLteOnCdmaMode()
== PhoneConstants.LTE_ON_CDMA_TRUE;
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& mCarrierConfig != null
&& !mCarrierConfig.getBoolean(
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& carrierConfig != null
&& !carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
&& isLteOnCdma && !TextUtils.isEmpty(mSetupUrl)
? AVAILABLE
@@ -67,7 +64,6 @@ public class DataServiceSetupPreferenceController extends BasePreferenceControll
public void init(int subId) {
mSubId = subId;
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
}
@Override

View File

@@ -28,27 +28,24 @@ import android.text.format.Formatter;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.net.DataUsageController;
/**
* Preference controller for "Data usage"
*/
public class DataUsagePreferenceController extends BasePreferenceController {
public class DataUsagePreferenceController extends TelephonyBasePreferenceController {
private NetworkTemplate mTemplate;
private DataUsageController.DataUsageInfo mDataUsageInfo;
private Intent mIntent;
private int mSubId;
public DataUsagePreferenceController(Context context, String key) {
super(context, key);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
? AVAILABLE
: AVAILABLE_UNSEARCHABLE;
}

View File

@@ -31,18 +31,16 @@ import androidx.preference.Preference;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
/**
* Preference controller for "Enabled network mode"
*/
public class EnabledNetworkModePreferenceController extends BasePreferenceController implements
public class EnabledNetworkModePreferenceController extends
TelephonyBasePreferenceController implements
ListPreference.OnPreferenceChangeListener {
private CarrierConfigManager mCarrierConfigManager;
private TelephonyManager mTelephonyManager;
private PersistableBundle mPersistableBundle;
private int mSubId;
private boolean mIsGlobalCdma;
@VisibleForTesting
boolean mShow4GForLTE;
@@ -50,26 +48,26 @@ public class EnabledNetworkModePreferenceController extends BasePreferenceContro
public EnabledNetworkModePreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
public int getAvailabilityStatus(int subId) {
boolean visible;
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
visible = false;
} else if (mPersistableBundle == null) {
} else if (carrierConfig == null) {
visible = false;
} else if (mPersistableBundle.getBoolean(
} else if (carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
visible = false;
} else if (mPersistableBundle.getBoolean(
} else if (carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
&& !mTelephonyManager.getServiceState().getRoaming()
&& mTelephonyManager.getServiceState().getDataRegState()
== ServiceState.STATE_IN_SERVICE) {
visible = false;
} else if (mPersistableBundle.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
visible = false;
} else {
visible = true;
@@ -104,15 +102,15 @@ public class EnabledNetworkModePreferenceController extends BasePreferenceContro
public void init(int subId) {
mSubId = subId;
mPersistableBundle = mCarrierConfigManager.getConfigForSubId(mSubId);
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
final boolean isLteOnCdma =
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
mIsGlobalCdma = isLteOnCdma
&& mPersistableBundle.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
mShow4GForLTE = mPersistableBundle != null
? mPersistableBundle.getBoolean(
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
mShow4GForLTE = carrierConfig != null
? carrierConfig.getBoolean(
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
: false;
}

View File

@@ -31,7 +31,6 @@ import androidx.preference.SwitchPreference;
import com.android.ims.ImsManager;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -42,8 +41,8 @@ import java.util.List;
/**
* Preference controller for "Enhanced 4G LTE"
*/
public class Enhanced4gLtePreferenceController extends TogglePreferenceController implements
LifecycleObserver, OnStart, OnStop {
public class Enhanced4gLtePreferenceController extends TelephonyTogglePreferenceController
implements LifecycleObserver, OnStart, OnStop {
private Preference mPreference;
private TelephonyManager mTelephonyManager;
@@ -53,24 +52,23 @@ public class Enhanced4gLtePreferenceController extends TogglePreferenceControlle
ImsManager mImsManager;
private PhoneCallStateListener mPhoneStateListener;
private final List<On4gLteUpdateListener> m4gLteListeners;
private int mSubId;
public Enhanced4gLtePreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
m4gLteListeners = new ArrayList<>();
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
final boolean isVisible = mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& mImsManager != null && mCarrierConfig != null
public int getAvailabilityStatus(int subId) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
final boolean isVisible = subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& mImsManager != null && carrierConfig != null
&& mImsManager.isVolteEnabledByPlatform()
&& mImsManager.isVolteProvisionedOnDevice()
&& MobileNetworkUtils.isImsServiceStateReady(mImsManager)
&& !mCarrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
return isVisible
? (is4gLtePrefEnabled() ? AVAILABLE : AVAILABLE_UNSEARCHABLE)
: CONDITIONALLY_UNAVAILABLE;

View File

@@ -18,31 +18,26 @@ package com.android.settings.network.telephony;
import android.content.Context;
import android.content.Intent;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
/**
* Preference controller for "Euicc preference"
*/
public class EuiccPreferenceController extends BasePreferenceController {
public class EuiccPreferenceController extends TelephonyBasePreferenceController {
private TelephonyManager mTelephonyManager;
private int mSubId;
public EuiccPreferenceController(Context context, String key) {
super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
public int getAvailabilityStatus(int subId) {
return MobileNetworkUtils.showEuiccSettings(mContext)
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;

View File

@@ -40,7 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
/**
* Preference controller for "Mobile data"
*/
public class MobileDataPreferenceController extends TogglePreferenceController
public class MobileDataPreferenceController extends TelephonyTogglePreferenceController
implements LifecycleObserver, OnStart, OnStop {
private static final String DIALOG_TAG = "MobileDataDialog";
@@ -50,7 +50,6 @@ public class MobileDataPreferenceController extends TogglePreferenceController
private SubscriptionManager mSubscriptionManager;
private DataContentObserver mDataContentObserver;
private FragmentManager mFragmentManager;
private int mSubId;
@VisibleForTesting
int mDialogType;
@VisibleForTesting
@@ -58,15 +57,13 @@ public class MobileDataPreferenceController extends TogglePreferenceController
public MobileDataPreferenceController(Context context, String key) {
super(context, key);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;
}
@@ -74,7 +71,7 @@ public class MobileDataPreferenceController extends TogglePreferenceController
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
mPreference = screen.findPreference(getPreferenceKey());
}
@Override

View File

@@ -114,7 +114,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
MobileNetworkUtils.getSearchableSubscriptionId(context));
if (FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2) &&
mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
@@ -250,11 +250,6 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
protected boolean isPageSearchEnabled(Context context) {
return false;
}
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {

View File

@@ -44,6 +44,8 @@ import com.android.ims.ImsException;
import com.android.ims.ImsManager;
import com.android.internal.telephony.Phone;
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.List;
@@ -403,4 +405,52 @@ public class MobileNetworkUtils {
}
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]);
}
}
}
}

View File

@@ -35,38 +35,37 @@ import com.android.settings.core.BasePreferenceController;
/**
* Preference controller for "Preferred network mode"
*/
public class PreferredNetworkModePreferenceController extends BasePreferenceController implements
ListPreference.OnPreferenceChangeListener {
public class PreferredNetworkModePreferenceController extends TelephonyBasePreferenceController
implements ListPreference.OnPreferenceChangeListener {
private CarrierConfigManager mCarrierConfigManager;
private TelephonyManager mTelephonyManager;
private PersistableBundle mPersistableBundle;
private int mSubId;
private boolean mIsGlobalCdma;
public PreferredNetworkModePreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
public int getAvailabilityStatus(int subId) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
boolean visible;
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
visible = false;
} else if (mPersistableBundle == null) {
} else if (carrierConfig == null) {
visible = false;
} else if (mPersistableBundle.getBoolean(
} else if (carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
visible = false;
} else if (mPersistableBundle.getBoolean(
} else if (carrierConfig.getBoolean(
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
&& !mTelephonyManager.getServiceState().getRoaming()
&& mTelephonyManager.getServiceState().getDataRegState()
== ServiceState.STATE_IN_SERVICE) {
visible = false;
} else if (mPersistableBundle.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
visible = true;
} else {
visible = false;
@@ -100,13 +99,13 @@ public class PreferredNetworkModePreferenceController extends BasePreferenceCont
public void init(int subId) {
mSubId = subId;
mPersistableBundle = mCarrierConfigManager.getConfigForSubId(mSubId);
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
final boolean isLteOnCdma =
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
mIsGlobalCdma = isLteOnCdma
&& mPersistableBundle.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
}
private int getPreferredNetworkMode() {

View File

@@ -42,7 +42,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
/**
* Preference controller for "Roaming"
*/
public class RoamingPreferenceController extends TogglePreferenceController implements
public class RoamingPreferenceController extends TelephonyTogglePreferenceController implements
LifecycleObserver, OnStart, OnStop {
private static final String DIALOG_TAG = "MobileDataDialog";
@@ -50,7 +50,6 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
private RestrictedSwitchPreference mSwitchPreference;
private TelephonyManager mTelephonyManager;
private CarrierConfigManager mCarrierConfigManager;
private int mSubId;
private DataContentObserver mDataContentObserver;
@VisibleForTesting
boolean mNeedDialog;
@@ -59,10 +58,8 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
public RoamingPreferenceController(Context context, String key) {
super(context, key);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
@@ -78,12 +75,12 @@ public class RoamingPreferenceController extends TogglePreferenceController impl
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mSwitchPreference = (RestrictedSwitchPreference) screen.findPreference(getPreferenceKey());
mSwitchPreference = screen.findPreference(getPreferenceKey());
}
@Override
public int getAvailabilityStatus() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
? AVAILABLE
: AVAILABLE_UNSEARCHABLE;
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -42,7 +42,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
/**
* Preference controller for "Video Calling"
*/
public class VideoCallingPreferenceController extends TogglePreferenceController implements
public class VideoCallingPreferenceController extends TelephonyTogglePreferenceController implements
LifecycleObserver, OnStart, OnStop,
Enhanced4gLtePreferenceController.On4gLteUpdateListener {
@@ -54,21 +54,19 @@ public class VideoCallingPreferenceController extends TogglePreferenceController
ImsManager mImsManager;
private PhoneCallStateListener mPhoneStateListener;
private DataContentObserver mDataContentObserver;
private int mSubId;
public VideoCallingPreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper()));
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
SubscriptionManager.getPhoneId(mSubId))
SubscriptionManager.getPhoneId(subId))
&& isVideoCallEnabled()
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;

View File

@@ -33,7 +33,6 @@ import androidx.preference.PreferenceScreen;
import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -43,7 +42,7 @@ import java.util.List;
/**
* Preference controller for "Wifi Calling"
*/
public class WifiCallingPreferenceController extends BasePreferenceController implements
public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
LifecycleObserver, OnStart, OnStop {
@VisibleForTesting
@@ -56,19 +55,17 @@ public class WifiCallingPreferenceController extends BasePreferenceController im
PhoneAccountHandle mSimCallManager;
private PhoneCallStateListener mPhoneStateListener;
private Preference mPreference;
private int mSubId;
public WifiCallingPreferenceController(Context context, String key) {
super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
@Override
public int getAvailabilityStatus() {
return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
SubscriptionManager.getPhoneId(mSubId))
? AVAILABLE