summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-build-prod@system.gserviceaccount.com>2020-04-07 18:14:38 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-04-07 18:14:38 +0000
commitf5f79ea645af49389ee3b51ccb07ad7f97f16d17 (patch)
treeddbe99c4aa5d7439e2b65ff8d244d3440d54fefd
parent788ea36823d94ae6ce3866befb516236e6112e05 (diff)
parentc8a9a496d2a5ffa8d063adff3f6315b25978c008 (diff)
Merge "Redesign 5G switch" into r-keystone-qcom-dev
-rw-r--r--res/values-zh-rCN/strings.xml2
-rw-r--r--res/values/strings.xml2
-rwxr-xr-x[-rw-r--r--]res/xml/mobile_network_settings.xml7
-rwxr-xr-xsrc/com/android/settings/network/telephony/Enabled5GPreferenceController.java192
-rw-r--r--src/com/android/settings/network/telephony/MobileNetworkSettings.java1
-rw-r--r--src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java16
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