diff options
author | Treehugger Robot <android-build-prod@system.gserviceaccount.com> | 2020-04-07 18:14:38 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-04-07 18:14:38 +0000 |
commit | f5f79ea645af49389ee3b51ccb07ad7f97f16d17 (patch) | |
tree | ddbe99c4aa5d7439e2b65ff8d244d3440d54fefd | |
parent | 788ea36823d94ae6ce3866befb516236e6112e05 (diff) | |
parent | c8a9a496d2a5ffa8d063adff3f6315b25978c008 (diff) |
Merge "Redesign 5G switch" into r-keystone-qcom-dev
-rw-r--r-- | res/values-zh-rCN/strings.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | res/xml/mobile_network_settings.xml | 7 | ||||
-rwxr-xr-x | src/com/android/settings/network/telephony/Enabled5GPreferenceController.java | 192 | ||||
-rw-r--r-- | src/com/android/settings/network/telephony/MobileNetworkSettings.java | 1 | ||||
-rw-r--r-- | src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java | 16 |
6 files changed, 218 insertions, 2 deletions
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index e847fc4c91..41910dd41e 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -3111,6 +3111,8 @@ <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"允许运营商了解您的联系人支持哪些通话功能。"</string> <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"要启用联系人探索功能吗?"</string> <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"启用此功能将允许运营商访问您通讯录中的电话号码,以便了解这些电话号码支持哪些通话功能。"</string> + <!-- Enabled 5G Mode title. [CHAR LIMIT=50] --> + <string name="enabled_5g_mode_title">启用5G</string> <string name="preferred_network_type_title" msgid="812509938714590857">"首选网络类型"</string> <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE(推荐)"</string> <string name="mms_message_title" msgid="6624505196063391964">"彩信"</string> diff --git a/res/values/strings.xml b/res/values/strings.xml index a0d0fcf7d1..33701c4af3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7288,6 +7288,8 @@ <!-- Text displayed in the dialog shown when the user tries to enable Contact Discovery. [CHAR LIMIT=NONE]--> <string name="contact_discovery_opt_in_dialog_message">All of the phone numbers in your contacts will be periodically sent to your carrier in order to discover which calling features are supported.</string> + <!-- Enabled 5G Mode title. [CHAR LIMIT=50] --> + <string name="enabled_5g_mode_title">Enable 5G</string> <!-- Preferred network type title. [CHAR LIMIT=50] --> <string name="preferred_network_type_title">Preferred network type</string> <!-- Preferred network type summary. [CHAR LIMIT=100] --> diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml index 32817e7ff2..8f80b79f1e 100644..100755 --- a/res/xml/mobile_network_settings.xml +++ b/res/xml/mobile_network_settings.xml @@ -112,7 +112,6 @@ android:summary="@string/enhanced_4g_lte_mode_summary_4g_calling" settings:keywords="@string/keywords_enhance_4g_lte" settings:controller="com.android.settings.network.telephony.Enhanced4gCallingPreferenceController"/> - <SwitchPreference android:key="advance_call" android:title="@string/enhanced_4g_lte_mode_title_advanced_calling" @@ -120,6 +119,11 @@ android:summary="@string/enhanced_4g_lte_mode_summary" settings:keywords="@string/keywords_enhance_4g_lte" settings:controller="com.android.settings.network.telephony.Enhanced4gAdvancedCallingPreferenceController"/> + <SwitchPreference + android:key="enabled_5g" + android:title="@string/enabled_5g_mode_title" + android:persistent="true" + settings:controller="com.android.settings.network.telephony.Enabled5GPreferenceController"/> <SwitchPreference android:key="contact_discovery_opt_in" @@ -177,7 +181,6 @@ android:title="@string/video_calling_settings_title" android:persistent="true" settings:controller="com.android.settings.network.telephony.VideoCallingPreferenceController"/> - </PreferenceCategory> <com.android.settings.network.telephony.cdma.CdmaListPreference diff --git a/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java b/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java new file mode 100755 index 0000000000..972634d066 --- /dev/null +++ b/src/com/android/settings/network/telephony/Enabled5GPreferenceController.java @@ -0,0 +1,192 @@ +/** + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.android.settings.network.telephony; + +import android.content.Context; +import android.database.ContentObserver; +import android.os.Handler; +import android.os.Looper; +import android.os.PersistableBundle; +import android.provider.Settings; +import android.telephony.CarrierConfigManager; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; +import android.util.Log; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; + +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnStart; +import com.android.settingslib.core.lifecycle.events.OnStop; + +import com.android.settings.R; +import com.android.settings.network.telephony.MobileNetworkUtils; + + +/** + * Preference controller for "Enabled 5G Switch" +*/ + +public class Enabled5GPreferenceController extends TelephonyTogglePreferenceController + implements LifecycleObserver, OnStart, OnStop { + private static final String TAG = "Enable5g"; + + Preference mPreference; + private CarrierConfigManager mCarrierConfigManager; + private PersistableBundle mCarrierConfig; + private TelephonyManager mTelephonyManager; + + private ContentObserver mPreferredNetworkModeObserver; + private ContentObserver mSubsidySettingsObserver; + + public Enabled5GPreferenceController(Context context, String key) { + super(context, key); + mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + if (mPreference != null) { + Log.d(TAG, "mPreferredNetworkModeObserver#onChange"); + updateState(mPreference); + } + } + }; + mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); + } + + public Enabled5GPreferenceController init(int subId) { + if (SubscriptionManager.isValidSubscriptionId(mSubId) && mSubId == subId) { + return this; + } + mSubId = subId; + mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); + mTelephonyManager = mContext.getSystemService(TelephonyManager.class) + .createForSubscriptionId(mSubId); + return this; + } + + @Override + public int getAvailabilityStatus(int subId) { + init(subId); + final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); + int defaultDdsSubId = SubscriptionManager.getDefaultDataSubscriptionId(); + final boolean isDds = defaultDdsSubId == subId; + final boolean is5gEnabledByCarrier = (mTelephonyManager.getAllowedNetworkTypes() + & TelephonyManager.NETWORK_TYPE_BITMASK_NR) > 0; + final boolean isVisible = SubscriptionManager.isValidSubscriptionId(subId) + && !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENABLED_5G_BOOL) + && is5gEnabledByCarrier + && isDds; + return isVisible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + mPreference = screen.findPreference(getPreferenceKey()); + } + + @Override + public void onStart() { + mContext.getContentResolver().registerContentObserver( + Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true, + mPreferredNetworkModeObserver); + } + + @Override + public void onStop() { + if (mPreferredNetworkModeObserver != null) { + mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver); + } + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + final SwitchPreference switchPreference = (SwitchPreference) preference; + switchPreference.setVisible(true); + switchPreference.setEnabled(true); + long preferredNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType( + Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.PREFERRED_NETWORK_MODE + mSubId, + TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE)); + switchPreference.setChecked(isNrNetworkModeType(preferredNetworkBitMask)); + } + + @Override + public boolean setChecked(boolean isChecked) { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } + int preNetworkMode = Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.PREFERRED_NETWORK_MODE + mSubId, + TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE); + long newNetworkBitMask; + if (TelephonyManager.NETWORK_MODE_NR_ONLY != preNetworkMode) { + long preNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(preNetworkMode); + newNetworkBitMask = isChecked ? + (preNetworkBitMask | TelephonyManager.NETWORK_TYPE_BITMASK_NR) + : (preNetworkBitMask & ~TelephonyManager.NETWORK_TYPE_BITMASK_NR); + } else { + newNetworkBitMask = MobileNetworkUtils + .getRafFromNetworkType(TelephonyManager.NETWORK_MODE_LTE_ONLY); + } + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.PREFERRED_NETWORK_MODE + mSubId, + MobileNetworkUtils.getNetworkTypeFromRaf((int)newNetworkBitMask)); + if (mTelephonyManager.setPreferredNetworkTypeBitmask(newNetworkBitMask)) { + Log.d(TAG, "setPreferredNetworkTypeBitmask"); + return true; + } + return false; + } + + @Override + public boolean isChecked(){ + long preNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType( + Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.PREFERRED_NETWORK_MODE + mSubId, + TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE)); + return isNrNetworkModeType(preNetworkBitMask); + } + + private boolean isNrNetworkModeType(long currentRadioBitmask) { + return checkSupportedRadioBitmask(currentRadioBitmask, + TelephonyManager.NETWORK_TYPE_BITMASK_NR); + } + + boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) { + Log.d(TAG, "supportedRadioBitmask: " + supportedRadioBitmask); + if ((targetBitmask & supportedRadioBitmask) > 0) { + return true; + } + return false; + } +} diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index 1bbc1a263f..8dc1172598 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -209,6 +209,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment { final VideoCallingPreferenceController videoCallingPreferenceController = use(VideoCallingPreferenceController.class).init(mSubId); + use(Enabled5GPreferenceController.class).init(mSubId); use(CallingPreferenceCategoryController.class).setChildren( Arrays.asList(wifiCallingPreferenceController, videoCallingPreferenceController)); use(Enhanced4gLtePreferenceController.class).init(mSubId) diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java index 43a71c902e..7a4b05ec5d 100644 --- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java @@ -48,6 +48,7 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe private static final String LOG_TAG = "PreferredNetworkMode"; private CarrierConfigManager mCarrierConfigManager; + private ContentObserver mPreferredNetworkModeObserver; private ContentObserver mSubsidySettingsObserver; private TelephonyManager mTelephonyManager; private PersistableBundle mPersistableBundle; @@ -75,6 +76,15 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe } } }; + mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + if (mPreference != null) { + Log.d(LOG_TAG, "mPreferredNetworkModeObserver#onChange"); + updateState(mPreference); + } + } + }; } @Override @@ -107,6 +117,9 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe Settings.Secure.getUriFor(PrimaryCardAndSubsidyLockUtils.SUBSIDY_STATUS), false, mSubsidySettingsObserver); } + mContext.getContentResolver().registerContentObserver( + Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true, + mPreferredNetworkModeObserver); } @OnLifecycleEvent(ON_STOP) @@ -114,6 +127,9 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe if (mSubsidySettingsObserver != null) { mContext.getContentResolver().unregisterContentObserver(mSubsidySettingsObserver); } + if (mPreferredNetworkModeObserver != null) { + mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver); + } } @Override |