Show mobile data icon with carrier Wi-Fi level in Settings

- If carrier Wi-Fi is active then use carrier Wi-Fi level instead of
  mobile data level.

- If carrier Wi-Fi level is less than min-level, use min-level instead.

Bug: 222885558
Test: manual test
atest -c SubscriptionsPreferenceControllerTest \
         WifiPickerTrackerHelperTest

Change-Id: I46ba5129357bae47e5e44dcbbb26e6673581fdc8
This commit is contained in:
Weng Su
2022-05-19 05:03:58 +08:00
parent 1cf78b8b83
commit f8f2d17b66
4 changed files with 120 additions and 38 deletions

View File

@@ -30,7 +30,6 @@ import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.net.wifi.WifiManager;
import android.os.UserManager;
import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
@@ -65,6 +64,7 @@ import com.android.settingslib.mobile.MobileMappings;
import com.android.settingslib.mobile.MobileMappings.Config;
import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.net.SignalStrengthUtil;
import com.android.wifitrackerlib.WifiEntry;
import java.util.Collections;
import java.util.List;
@@ -282,16 +282,18 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
return Html.fromHtml(result, Html.FROM_HTML_MODE_LEGACY);
}
private Drawable getIcon(int subId) {
@VisibleForTesting
Drawable getIcon(int subId) {
final TelephonyManager tmForSubId = mTelephonyManager.createForSubscriptionId(subId);
final SignalStrength strength = tmForSubId.getSignalStrength();
int level = (strength == null) ? 0 : strength.getLevel();
int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
boolean isCarrierNetworkActive = isCarrierNetworkActive();
if (shouldInflateSignalStrength(subId) || isCarrierNetworkActive) {
level = isCarrierNetworkActive
? SignalStrength.NUM_SIGNAL_STRENGTH_BINS
: (level + 1);
if (isCarrierNetworkActive) {
level = getCarrierNetworkLevel();
numLevels = WifiEntry.WIFI_LEVEL_MAX + 1;
} else if (shouldInflateSignalStrength(subId)) {
level += 1;
numLevels += 1;
}
@@ -484,6 +486,11 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
&& mWifiPickerTrackerHelper.isCarrierNetworkActive();
}
private int getCarrierNetworkLevel() {
if (mWifiPickerTrackerHelper == null) return WifiEntry.WIFI_LEVEL_MIN;
return mWifiPickerTrackerHelper.getCarrierNetworkLevel();
}
/**
* To inject necessary data from each static api.
*/