Dual SIM search for Preferred network type
Bug: 358238959 Flag: EXEMPT bug fix Test: manual - search preferred Test: atest EnabledNetworkModePreferenceControllerHelperTest Change-Id: Icb86d88eec3bcaaaf1db67f7008173a90957cbbc
This commit is contained in:
@@ -19,9 +19,11 @@ package com.android.settings.network.telephony;
|
||||
import static androidx.lifecycle.Lifecycle.Event.ON_START;
|
||||
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
|
||||
|
||||
import static com.android.settings.network.telephony.EnabledNetworkModePreferenceControllerHelperKt.getNetworkModePreferenceType;
|
||||
import static com.android.settings.network.telephony.EnabledNetworkModePreferenceControllerHelperKt.setAllowedNetworkTypes;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
@@ -44,6 +46,7 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.internal.telephony.flags.Flags;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.network.AllowedNetworkTypesListener;
|
||||
import com.android.settings.network.CarrierConfigCache;
|
||||
import com.android.settings.network.SubscriptionsChangeListener;
|
||||
@@ -61,16 +64,17 @@ import java.util.stream.Stream;
|
||||
* Preference controller for "Enabled network mode"
|
||||
*/
|
||||
public class EnabledNetworkModePreferenceController extends
|
||||
TelephonyBasePreferenceController implements
|
||||
BasePreferenceController implements
|
||||
ListPreference.OnPreferenceChangeListener, LifecycleObserver,
|
||||
SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
|
||||
|
||||
private static final String LOG_TAG = "EnabledNetworkMode";
|
||||
|
||||
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
|
||||
private Preference mPreference;
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
private CarrierConfigCache mCarrierConfigCache;
|
||||
private PreferenceEntriesBuilder mBuilder;
|
||||
private SubscriptionsChangeListener mSubscriptionsListener;
|
||||
private int mCallState = TelephonyManager.CALL_STATE_IDLE;
|
||||
@@ -81,36 +85,16 @@ public class EnabledNetworkModePreferenceController extends
|
||||
public EnabledNetworkModePreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
|
||||
mCarrierConfigCache = CarrierConfigCache.getInstance(context);
|
||||
if (mTelephonyCallback == null) {
|
||||
mTelephonyCallback = new PhoneCallStateTelephonyCallback();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus(int subId) {
|
||||
boolean visible;
|
||||
|
||||
final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
|
||||
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||
visible = false;
|
||||
} else if (carrierConfig == null
|
||||
|| !CarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfig)) {
|
||||
visible = false;
|
||||
} else if (carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
|
||||
|| carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)) {
|
||||
visible = false;
|
||||
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
||||
visible = false;
|
||||
} else if (!isCallStateIdle()) {
|
||||
return AVAILABLE_UNSEARCHABLE;
|
||||
} else {
|
||||
visible = true;
|
||||
}
|
||||
|
||||
return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
public int getAvailabilityStatus() {
|
||||
return getNetworkModePreferenceType(mContext, mSubId)
|
||||
== NetworkModePreferenceType.EnabledNetworkMode
|
||||
? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
|
||||
protected boolean isCallStateIdle() {
|
||||
@@ -953,9 +937,14 @@ public class EnabledNetworkModePreferenceController extends
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the resources associated with Subscription.
|
||||
*
|
||||
* @return Resources associated with Subscription.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
PhoneCallStateTelephonyCallback getTelephonyCallback() {
|
||||
return mTelephonyCallback;
|
||||
Resources getResourcesForSubId() {
|
||||
return SubscriptionManager.getResourcesForSubId(mContext, mSubId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,9 +16,15 @@
|
||||
|
||||
package com.android.settings.network.telephony
|
||||
|
||||
import android.content.Context
|
||||
import android.telephony.CarrierConfigManager
|
||||
import android.telephony.SubscriptionManager
|
||||
import android.telephony.TelephonyManager
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.android.settings.R
|
||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -33,3 +39,62 @@ fun TelephonyManager.setAllowedNetworkTypes(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
enum class NetworkModePreferenceType {
|
||||
EnabledNetworkMode,
|
||||
PreferredNetworkMode,
|
||||
None,
|
||||
}
|
||||
|
||||
fun getNetworkModePreferenceType(context: Context, subId: Int): NetworkModePreferenceType {
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subId)) return NetworkModePreferenceType.None
|
||||
data class Config(
|
||||
val carrierConfigApplied: Boolean,
|
||||
val hideCarrierNetworkSettings: Boolean,
|
||||
val hidePreferredNetworkType: Boolean,
|
||||
val worldPhone: Boolean,
|
||||
)
|
||||
|
||||
val config =
|
||||
CarrierConfigRepository(context).transformConfig(subId) {
|
||||
Config(
|
||||
carrierConfigApplied =
|
||||
getBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL),
|
||||
hideCarrierNetworkSettings =
|
||||
getBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL),
|
||||
hidePreferredNetworkType =
|
||||
getBoolean(CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL),
|
||||
worldPhone = getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL),
|
||||
)
|
||||
}
|
||||
|
||||
return when {
|
||||
!config.carrierConfigApplied ||
|
||||
config.hideCarrierNetworkSettings ||
|
||||
config.hidePreferredNetworkType -> NetworkModePreferenceType.None
|
||||
config.worldPhone -> NetworkModePreferenceType.PreferredNetworkMode
|
||||
else -> NetworkModePreferenceType.EnabledNetworkMode
|
||||
}
|
||||
}
|
||||
|
||||
class PreferredNetworkModeSearchItem(private val context: Context) :
|
||||
MobileNetworkSettingsSearchItem {
|
||||
private val title: String = context.getString(R.string.preferred_network_mode_title)
|
||||
|
||||
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? =
|
||||
when (getNetworkModePreferenceType(context, subId)) {
|
||||
NetworkModePreferenceType.PreferredNetworkMode ->
|
||||
MobileNetworkSettingsSearchResult(
|
||||
key = "preferred_network_mode_key",
|
||||
title = title,
|
||||
)
|
||||
|
||||
NetworkModePreferenceType.EnabledNetworkMode ->
|
||||
MobileNetworkSettingsSearchResult(
|
||||
key = "enabled_networks_key",
|
||||
title = title,
|
||||
)
|
||||
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,6 +116,7 @@ class MobileNetworkSettingsSearchIndex(
|
||||
listOf(
|
||||
MmsMessageSearchItem(context),
|
||||
NrAdvancedCallingSearchItem(context),
|
||||
PreferredNetworkModeSearchItem(context),
|
||||
RoamingSearchItem(context),
|
||||
WifiCallingSearchItem(context),
|
||||
)
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import static com.android.settings.network.telephony.EnabledNetworkModePreferenceControllerHelperKt.getNetworkModePreferenceType;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
@@ -27,16 +29,18 @@ import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.network.CarrierConfigCache;
|
||||
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
|
||||
|
||||
/**
|
||||
* Preference controller for "Preferred network mode"
|
||||
*/
|
||||
public class PreferredNetworkModePreferenceController extends TelephonyBasePreferenceController
|
||||
public class PreferredNetworkModePreferenceController extends BasePreferenceController
|
||||
implements ListPreference.OnPreferenceChangeListener {
|
||||
private static final String TAG = "PrefNetworkModeCtrl";
|
||||
|
||||
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
private CarrierConfigCache mCarrierConfigCache;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
private boolean mIsGlobalCdma;
|
||||
@@ -47,25 +51,10 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus(int subId) {
|
||||
final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
|
||||
boolean visible;
|
||||
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||
visible = false;
|
||||
} else if (carrierConfig == null) {
|
||||
visible = false;
|
||||
} else if (carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
|
||||
|| carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)) {
|
||||
visible = false;
|
||||
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
|
||||
visible = true;
|
||||
} else {
|
||||
visible = false;
|
||||
}
|
||||
|
||||
return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
public int getAvailabilityStatus() {
|
||||
return getNetworkModePreferenceType(mContext, mSubId)
|
||||
== NetworkModePreferenceType.PreferredNetworkMode
|
||||
? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
@@ -59,29 +56,4 @@ public abstract class TelephonyBasePreferenceController extends BasePreferenceCo
|
||||
public void unsetAvailabilityStatus() {
|
||||
mSetSessionCount.getAndDecrement();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get carrier config based on specific subscription id.
|
||||
*
|
||||
* @param subId is the subscription id
|
||||
* @return {@link PersistableBundle} of carrier config, or {@code null} when carrier config
|
||||
* is not available.
|
||||
*/
|
||||
public PersistableBundle getCarrierConfigForSubId(int subId) {
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
return null;
|
||||
}
|
||||
final CarrierConfigManager carrierConfigMgr =
|
||||
mContext.getSystemService(CarrierConfigManager.class);
|
||||
return carrierConfigMgr.getConfigForSubId(subId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the resources associated with Subscription.
|
||||
*
|
||||
* @return Resources associated with Subscription.
|
||||
*/
|
||||
public Resources getResourcesForSubId() {
|
||||
return SubscriptionManager.getResourcesForSubId(mContext, mSubId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user