From 8fa54b7c205604e5aed83bee965df11b5b832cb6 Mon Sep 17 00:00:00 2001 From: Yomna Nasser Date: Mon, 18 Jan 2021 22:00:55 +0000 Subject: [PATCH] Implementation of "Enable 2G" for Settings. (1) Adds KEY_HIDE_ENABLE_2G_BOOL to CarrierConfigManager, and (2) Adds new reason ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G. Test: manual & atest -c Enable2gPreferenceControllerTest Bug: b/163168917 Change-Id: I81052549f8dde491697c35365320145fd24c3842 --- core/api/current.txt | 1 + core/api/system-current.txt | 1 + core/java/android/provider/Telephony.java | 3 ++- .../java/android/telephony/PhoneStateListener.java | 8 +++++--- .../android/telephony/CarrierConfigManager.java | 9 +++++++++ .../java/android/telephony/TelephonyManager.java | 14 +++++++++++++- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 1296dd19cc7ea..ae9378e0cd513 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -40270,6 +40270,7 @@ package android.telephony { field public static final String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array"; field public static final String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool"; field public static final String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool"; + field public static final String KEY_HIDE_ENABLE_2G = "hide_enable_2g_bool"; field public static final String KEY_HIDE_ENHANCED_4G_LTE_BOOL = "hide_enhanced_4g_lte_bool"; field public static final String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool"; field public static final String KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL = "hide_lte_plus_data_icon_bool"; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index d7dc6ef45cb4d..96ea49a44adc7 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -11944,6 +11944,7 @@ package android.telephony { field public static final String ACTION_SIM_CARD_STATE_CHANGED = "android.telephony.action.SIM_CARD_STATE_CHANGED"; field public static final String ACTION_SIM_SLOT_STATUS_CHANGED = "android.telephony.action.SIM_SLOT_STATUS_CHANGED"; field public static final int ALLOWED_NETWORK_TYPES_REASON_CARRIER = 2; // 0x2 + field public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; // 0x3 field public static final int ALLOWED_NETWORK_TYPES_REASON_POWER = 1; // 0x1 field public static final int ALLOWED_NETWORK_TYPES_REASON_USER = 0; // 0x0 field public static final int CALL_WAITING_STATUS_DISABLED = 2; // 0x2 diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index f013976e8d0a9..7996f090b1a40 100644 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -5286,7 +5286,8 @@ public final class Telephony { * which network types are allowed for * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_USER}, * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_POWER}, - * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER}. + * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER}, + * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G}. *

Type: TEXT

* * @hide diff --git a/core/java/android/telephony/PhoneStateListener.java b/core/java/android/telephony/PhoneStateListener.java index 77f9c1a6fc90d..e7ceada6180ad 100644 --- a/core/java/android/telephony/PhoneStateListener.java +++ b/core/java/android/telephony/PhoneStateListener.java @@ -1840,13 +1840,15 @@ public class PhoneStateListener { * * @param allowedNetworkTypesList Map associating all allowed network type reasons * ({@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_USER}, - * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_POWER}, and - * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER}) with reason's allowed + * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_POWER}, + * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER}, and + * {@link TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G}) with reason's allowed * network type values. * For example: * map{{TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_USER, long type value}, * {TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_POWER, long type value}, - * {TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER, long type value}} + * {TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_CARRIER, long type value}, + * {TelephonyManager#ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G, long type value}} */ @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) void onAllowedNetworkTypesChanged( diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 21cf3e57115d0..dc6d7d5433f9b 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -4763,6 +4763,14 @@ public class CarrierConfigManager { public static final String KEY_STORE_SIM_PIN_FOR_UNATTENDED_REBOOT_BOOL = "store_sim_pin_for_unattended_reboot_bool"; + /** + * Determine whether "Enable 2G" toggle can be shown. + * + * Used to trade privacy/security against potentially reduced carrier coverage for some + * carriers. + */ + public static final String KEY_HIDE_ENABLE_2G = "hide_enable_2g_bool"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -5320,6 +5328,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_NETWORK_TEMP_NOT_METERED_SUPPORTED_BOOL, true); sDefaults.putInt(KEY_DEFAULT_RTT_MODE_INT, 0); sDefaults.putBoolean(KEY_STORE_SIM_PIN_FOR_UNATTENDED_REBOOT_BOOL, true); + sDefaults.putBoolean(KEY_HIDE_ENABLE_2G, false); } /** diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index ee3a0ef5f4fe0..b1d8607ad1aeb 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -8591,7 +8591,8 @@ public class TelephonyManager { @IntDef({ ALLOWED_NETWORK_TYPES_REASON_USER, ALLOWED_NETWORK_TYPES_REASON_POWER, - ALLOWED_NETWORK_TYPES_REASON_CARRIER + ALLOWED_NETWORK_TYPES_REASON_CARRIER, + ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G }) @Retention(RetentionPolicy.SOURCE) public @interface AllowedNetworkTypesReason { @@ -8627,6 +8628,14 @@ public class TelephonyManager { @SystemApi public static final int ALLOWED_NETWORK_TYPES_REASON_CARRIER = 2; + /** + * To indicate allowed network type change is requested by the user via the 2G toggle. + * + * @hide + */ + @SystemApi + public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; + /** * Set the allowed network types of the device and * provide the reason triggering the allowed network change. @@ -8636,6 +8645,8 @@ public class TelephonyManager { *
  • Allowed network types control by power manager * {@link #ALLOWED_NETWORK_TYPES_REASON_POWER} *
  • Allowed network types control by carrier {@link #ALLOWED_NETWORK_TYPES_REASON_CARRIER} + *
  • Allowed network types control by the user-controlled "Allow 2G" toggle + * {@link #ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G} * * This API will result in allowing an intersection of allowed network types for all reasons, * including the configuration done through other reasons. @@ -8719,6 +8730,7 @@ public class TelephonyManager { case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER: case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_POWER: case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER: + case TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G: return true; } return false;