Merge "Support the Carrier WiFi for Provider Model"
This commit is contained in:
committed by
Android (Google) Code Review
commit
a0ab2cbe77
30
packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
Normal file
30
packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<!--
|
||||
Copyright (C) 2020 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="38dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="38.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M9.45,14.48h1.8c-0.05,0.98 -0.24,1.82 -0.6,2.53c-0.35,0.7 -0.85,1.24 -1.51,1.62c-0.66,0.38 -1.48,0.57 -2.47,0.57c-0.71,0 -1.35,-0.14 -1.92,-0.42c-0.57,-0.28 -1.06,-0.68 -1.47,-1.2c-0.4,-0.53 -0.71,-1.16 -0.93,-1.89c-0.21,-0.74 -0.32,-1.56 -0.32,-2.48v-2.63c0,-0.91 0.11,-1.74 0.32,-2.47c0.22,-0.74 0.54,-1.36 0.95,-1.88C3.71,5.69 4.21,5.29 4.8,5.01c0.6,-0.28 1.28,-0.42 2.03,-0.42c0.92,0 1.71,0.19 2.34,0.56c0.64,0.36 1.14,0.9 1.48,1.61c0.35,0.7 0.55,1.57 0.59,2.59h-1.8C9.41,8.59 9.29,7.98 9.1,7.52C8.91,7.04 8.63,6.69 8.26,6.47C7.9,6.24 7.42,6.13 6.84,6.13c-0.52,0 -0.97,0.1 -1.36,0.31C5.1,6.65 4.79,6.95 4.54,7.34C4.3,7.72 4.12,8.19 3.99,8.74c-0.12,0.54 -0.18,1.15 -0.18,1.82v2.65c0,0.62 0.05,1.21 0.15,1.75c0.1,0.54 0.27,1.02 0.49,1.43c0.23,0.4 0.52,0.72 0.89,0.95c0.36,0.23 0.81,0.34 1.33,0.34c0.66,0 1.18,-0.11 1.56,-0.32c0.38,-0.21 0.67,-0.56 0.85,-1.03C9.27,15.85 9.39,15.23 9.45,14.48z"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M24.87,4.78l-1.74,9.72l-0.2,1.64l-0.29,-1.44l-2.21,-9.92l-0.2,0l-1.06,0l-0.22,0l-2.28,9.92l-0.28,1.4l-0.18,-1.59l-1.78,-9.73l-1.79,0l2.83,14.22l0.34,0l0.92,0l0.35,0l2.48,-10.36l0.14,-0.84l0.15,0.84l2.36,10.36l0.36,0l0.92,0l0.34,0l2.82,-14.22z"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M35.72,6.32l0,-1.54l-5.61,0l-0.34,0l-1.45,0l0,14.22l1.79,0l0,-6.28l4.8,0l0,-1.54l-4.8,0l0,-4.86z"/>
|
||||
</vector>
|
||||
@@ -1447,6 +1447,9 @@
|
||||
<!-- Content description of the data connection type 5G+. [CHAR LIMIT=NONE] -->
|
||||
<string name="data_connection_5g_plus" translatable="false">5G+</string>
|
||||
|
||||
<!-- Content description of the data connection type Carrier WiFi. [CHAR LIMIT=NONE] -->
|
||||
<string name="data_connection_carrier_wifi">CWF</string>
|
||||
|
||||
<!-- Content description of the cell data being disabled. [CHAR LIMIT=NONE] -->
|
||||
<string name="cell_data_off_content_description">Mobile data off</string>
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ public class TelephonyIcons {
|
||||
public static final int ICON_1X = R.drawable.ic_1x_mobiledata;
|
||||
public static final int ICON_5G = R.drawable.ic_5g_mobiledata;
|
||||
public static final int ICON_5G_PLUS = R.drawable.ic_5g_plus_mobiledata;
|
||||
public static final int ICON_CWF = R.drawable.ic_carrier_wifi;
|
||||
|
||||
public static final MobileIconGroup CARRIER_NETWORK_CHANGE = new MobileIconGroup(
|
||||
"CARRIER_NETWORK_CHANGE",
|
||||
@@ -276,6 +277,20 @@ public class TelephonyIcons {
|
||||
0,
|
||||
false);
|
||||
|
||||
public static final MobileIconGroup CARRIER_MERGED_WIFI = new MobileIconGroup(
|
||||
"CWF",
|
||||
/* sbIcons= */ null,
|
||||
/* qsIcons= */ null,
|
||||
AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH,
|
||||
/* sbNullState= */ 0,
|
||||
/* qsNullState= */ 0,
|
||||
/* sbDiscState= */ 0,
|
||||
/* qsDiscState= */ 0,
|
||||
AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0],
|
||||
R.string.data_connection_carrier_wifi,
|
||||
TelephonyIcons.ICON_CWF,
|
||||
/* isWide= */ true);
|
||||
|
||||
// When adding a new MobileIconGround, check if the dataContentDescription has to be filtered
|
||||
// in QSCarrier#hasValidTypeContentDescription
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.net.wifi.WifiNetworkScoreCache;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.provider.Settings;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settingslib.R;
|
||||
|
||||
@@ -103,11 +104,14 @@ public class WifiStatusTracker {
|
||||
private Network mDefaultNetwork = null;
|
||||
private NetworkCapabilities mDefaultNetworkCapabilities = null;
|
||||
private final Runnable mCallback;
|
||||
private final boolean mProviderModel;
|
||||
|
||||
private WifiInfo mWifiInfo;
|
||||
public boolean enabled;
|
||||
public boolean isCaptivePortal;
|
||||
public boolean isDefaultNetwork;
|
||||
public boolean isCarrierMerged;
|
||||
public int subId;
|
||||
public int state;
|
||||
public boolean connected;
|
||||
public String ssid;
|
||||
@@ -124,6 +128,8 @@ public class WifiStatusTracker {
|
||||
mNetworkScoreManager = networkScoreManager;
|
||||
mConnectivityManager = connectivityManager;
|
||||
mCallback = callback;
|
||||
mProviderModel = FeatureFlagUtils.isEnabled(
|
||||
mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
|
||||
}
|
||||
|
||||
public void setListening(boolean listening) {
|
||||
@@ -193,6 +199,10 @@ public class WifiStatusTracker {
|
||||
} else {
|
||||
ssid = getValidSsid(mWifiInfo);
|
||||
}
|
||||
if (mProviderModel) {
|
||||
isCarrierMerged = mWifiInfo.isCarrierMerged();
|
||||
subId = mWifiInfo.getSubscriptionId();
|
||||
}
|
||||
updateRssi(mWifiInfo.getRssi());
|
||||
maybeRequestNetworkScore();
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
|
||||
// broadcasts
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
||||
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
||||
filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
|
||||
filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
|
||||
filter.addAction(TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED);
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import com.android.settingslib.AccessibilityContentDescriptions;
|
||||
import com.android.settingslib.SignalIcon.IconGroup;
|
||||
import com.android.systemui.R;
|
||||
|
||||
public class WifiIcons {
|
||||
@@ -40,6 +42,7 @@ public class WifiIcons {
|
||||
WIFI_NO_INTERNET_ICONS,
|
||||
WIFI_FULL_ICONS
|
||||
};
|
||||
|
||||
static final int[][] WIFI_SIGNAL_STRENGTH = QS_WIFI_SIGNAL_STRENGTH;
|
||||
|
||||
public static final int QS_WIFI_DISABLED = com.android.internal.R.drawable.ic_wifi_signal_0;
|
||||
@@ -47,4 +50,16 @@ public class WifiIcons {
|
||||
static final int WIFI_NO_NETWORK = QS_WIFI_NO_NETWORK;
|
||||
|
||||
static final int WIFI_LEVEL_COUNT = WIFI_SIGNAL_STRENGTH[0].length;
|
||||
|
||||
public static final IconGroup UNMERGED_WIFI = new IconGroup(
|
||||
"Wi-Fi Icons",
|
||||
WifiIcons.WIFI_SIGNAL_STRENGTH,
|
||||
WifiIcons.QS_WIFI_SIGNAL_STRENGTH,
|
||||
AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH,
|
||||
WifiIcons.WIFI_NO_NETWORK,
|
||||
WifiIcons.QS_WIFI_NO_NETWORK,
|
||||
WifiIcons.WIFI_NO_NETWORK,
|
||||
WifiIcons.QS_WIFI_NO_NETWORK,
|
||||
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
||||
);
|
||||
}
|
||||
|
||||
@@ -25,12 +25,15 @@ import android.net.ConnectivityManager;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkScoreManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.text.Html;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settingslib.AccessibilityContentDescriptions;
|
||||
import com.android.settingslib.SignalIcon.IconGroup;
|
||||
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
||||
import com.android.settingslib.SignalIcon.State;
|
||||
import com.android.settingslib.graph.SignalDrawable;
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.settingslib.wifi.WifiStatusTracker;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||
@@ -42,6 +45,9 @@ public class WifiSignalController extends
|
||||
SignalController<WifiSignalController.WifiState, IconGroup> {
|
||||
private final boolean mHasMobileDataFeature;
|
||||
private final WifiStatusTracker mWifiTracker;
|
||||
private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI;
|
||||
private final MobileIconGroup mCarrierMergedWifiIconGroup = TelephonyIcons.CARRIER_MERGED_WIFI;
|
||||
private final WifiManager mWifiManager;
|
||||
|
||||
public WifiSignalController(Context context, boolean hasMobileDataFeature,
|
||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController,
|
||||
@@ -49,6 +55,7 @@ public class WifiSignalController extends
|
||||
NetworkScoreManager networkScoreManager) {
|
||||
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
|
||||
callbackHandler, networkController);
|
||||
mWifiManager = wifiManager;
|
||||
mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager,
|
||||
connectivityManager, this::handleStatusUpdated);
|
||||
mWifiTracker.setListening(true);
|
||||
@@ -57,18 +64,7 @@ public class WifiSignalController extends
|
||||
wifiManager.registerTrafficStateCallback(context.getMainExecutor(),
|
||||
new WifiTrafficStateCallback());
|
||||
}
|
||||
// WiFi only has one state.
|
||||
mCurrentState.iconGroup = mLastState.iconGroup = new IconGroup(
|
||||
"Wi-Fi Icons",
|
||||
WifiIcons.WIFI_SIGNAL_STRENGTH,
|
||||
WifiIcons.QS_WIFI_SIGNAL_STRENGTH,
|
||||
AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH,
|
||||
WifiIcons.WIFI_NO_NETWORK,
|
||||
WifiIcons.QS_WIFI_NO_NETWORK,
|
||||
WifiIcons.WIFI_NO_NETWORK,
|
||||
WifiIcons.QS_WIFI_NO_NETWORK,
|
||||
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
||||
);
|
||||
mCurrentState.iconGroup = mLastState.iconGroup = mUnmergedWifiIconGroup;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,6 +78,14 @@ public class WifiSignalController extends
|
||||
|
||||
@Override
|
||||
public void notifyListeners(SignalCallback callback) {
|
||||
if (mCurrentState.isCarrierMerged) {
|
||||
notifyListenersForCarrierWifi(callback);
|
||||
} else {
|
||||
notifyListenersForNonCarrierWifi(callback);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyListenersForNonCarrierWifi(SignalCallback callback) {
|
||||
// only show wifi in the cluster if connected or if wifi-only
|
||||
boolean visibleWhenEnabled = mContext.getResources().getBoolean(
|
||||
R.bool.config_showWifiIndicatorWhenEnabled);
|
||||
@@ -104,14 +108,49 @@ public class WifiSignalController extends
|
||||
wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel);
|
||||
}
|
||||
|
||||
private void copyWifiStates() {
|
||||
mCurrentState.enabled = mWifiTracker.enabled;
|
||||
mCurrentState.isDefault = mWifiTracker.isDefaultNetwork;
|
||||
mCurrentState.connected = mWifiTracker.connected;
|
||||
mCurrentState.ssid = mWifiTracker.ssid;
|
||||
mCurrentState.rssi = mWifiTracker.rssi;
|
||||
mCurrentState.level = mWifiTracker.level;
|
||||
mCurrentState.statusLabel = mWifiTracker.statusLabel;
|
||||
private void notifyListenersForCarrierWifi(SignalCallback callback) {
|
||||
MobileIconGroup icons = mCarrierMergedWifiIconGroup;
|
||||
String contentDescription = getTextIfExists(getContentDescription()).toString();
|
||||
CharSequence dataContentDescriptionHtml = getTextIfExists(icons.dataContentDescription);
|
||||
|
||||
CharSequence dataContentDescription = Html.fromHtml(
|
||||
dataContentDescriptionHtml.toString(), 0).toString();
|
||||
if (mCurrentState.inetCondition == 0) {
|
||||
dataContentDescription = mContext.getString(R.string.data_connection_no_internet);
|
||||
}
|
||||
boolean qsVisible = mCurrentState.enabled
|
||||
&& (mCurrentState.connected && mCurrentState.inetCondition == 1);
|
||||
|
||||
IconState statusIcon =
|
||||
new IconState(qsVisible, getCurrentIconIdForCarrierWifi(), contentDescription);
|
||||
int qsTypeIcon = mCurrentState.connected ? icons.qsDataType : 0;
|
||||
int typeIcon = mCurrentState.connected ? icons.dataType : 0;
|
||||
IconState qsIcon = new IconState(
|
||||
mCurrentState.connected, getQsCurrentIconIdForCarrierWifi(), contentDescription);
|
||||
CharSequence description = mNetworkController.getMobileDataNetworkName();
|
||||
callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
|
||||
mCurrentState.activityIn, mCurrentState.activityOut, dataContentDescription,
|
||||
dataContentDescriptionHtml, description, icons.isWide,
|
||||
mCurrentState.subId, /* roaming= */ false);
|
||||
}
|
||||
|
||||
private int getCurrentIconIdForCarrierWifi() {
|
||||
int level = mCurrentState.level;
|
||||
// The WiFi signal level returned by WifiManager#calculateSignalLevel start from 0, so
|
||||
// WifiManager#getMaxSignalLevel + 1 represents the total level buckets count.
|
||||
int totalLevel = mWifiManager.getMaxSignalLevel() + 1;
|
||||
boolean noInternet = mCurrentState.inetCondition == 0;
|
||||
if (mCurrentState.connected) {
|
||||
return SignalDrawable.getState(level, totalLevel, noInternet);
|
||||
} else if (mCurrentState.enabled) {
|
||||
return SignalDrawable.getEmptyState(totalLevel);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private int getQsCurrentIconIdForCarrierWifi() {
|
||||
return getCurrentIconIdForCarrierWifi();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -137,6 +176,21 @@ public class WifiSignalController extends
|
||||
notifyListenersIfNecessary();
|
||||
}
|
||||
|
||||
private void copyWifiStates() {
|
||||
mCurrentState.enabled = mWifiTracker.enabled;
|
||||
mCurrentState.isDefault = mWifiTracker.isDefaultNetwork;
|
||||
mCurrentState.connected = mWifiTracker.connected;
|
||||
mCurrentState.ssid = mWifiTracker.ssid;
|
||||
mCurrentState.rssi = mWifiTracker.rssi;
|
||||
mCurrentState.level = mWifiTracker.level;
|
||||
mCurrentState.statusLabel = mWifiTracker.statusLabel;
|
||||
mCurrentState.isCarrierMerged = mWifiTracker.isCarrierMerged;
|
||||
mCurrentState.subId = mWifiTracker.subId;
|
||||
mCurrentState.iconGroup =
|
||||
mCurrentState.isCarrierMerged ? mCarrierMergedWifiIconGroup
|
||||
: mUnmergedWifiIconGroup;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setActivity(int wifiActivity) {
|
||||
mCurrentState.activityIn = wifiActivity == DATA_ACTIVITY_INOUT
|
||||
@@ -157,10 +211,12 @@ public class WifiSignalController extends
|
||||
}
|
||||
|
||||
static class WifiState extends State {
|
||||
String ssid;
|
||||
boolean isTransient;
|
||||
boolean isDefault;
|
||||
String statusLabel;
|
||||
public String ssid;
|
||||
public boolean isTransient;
|
||||
public boolean isDefault;
|
||||
public String statusLabel;
|
||||
public boolean isCarrierMerged;
|
||||
public int subId;
|
||||
|
||||
@Override
|
||||
public void copyFrom(State s) {
|
||||
@@ -170,6 +226,8 @@ public class WifiSignalController extends
|
||||
isTransient = state.isTransient;
|
||||
isDefault = state.isDefault;
|
||||
statusLabel = state.statusLabel;
|
||||
isCarrierMerged = state.isCarrierMerged;
|
||||
subId = state.subId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -178,7 +236,9 @@ public class WifiSignalController extends
|
||||
builder.append(",ssid=").append(ssid)
|
||||
.append(",isTransient=").append(isTransient)
|
||||
.append(",isDefault=").append(isDefault)
|
||||
.append(",statusLabel=").append(statusLabel);
|
||||
.append(",statusLabel=").append(statusLabel)
|
||||
.append(",isCarrierMerged=").append(isCarrierMerged)
|
||||
.append(",subId=").append(subId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -190,7 +250,9 @@ public class WifiSignalController extends
|
||||
return Objects.equals(other.ssid, ssid)
|
||||
&& other.isTransient == isTransient
|
||||
&& other.isDefault == isDefault
|
||||
&& TextUtils.equals(other.statusLabel, statusLabel);
|
||||
&& TextUtils.equals(other.statusLabel, statusLabel)
|
||||
&& other.isCarrierMerged == isCarrierMerged
|
||||
&& other.subId == subId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user