Show signal strength of current active subscription
For grouped primary and opportunistic use-case, if both are active, mobile signal bar should by default show which one is currently used for Internet data. Unless carrier set it otherwise -- if they want to always show signal bar of primary subscription. Bug: 123780907 Test: manual Change-Id: I62e298e7b9bdc82dd44f0c8ae783c623e101b0ef
This commit is contained in:
@@ -21,7 +21,9 @@ import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN
|
|||||||
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
|
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
|
||||||
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE;
|
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE;
|
||||||
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT;
|
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT;
|
||||||
|
import static android.telephony.PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE;
|
||||||
|
|
||||||
|
import static com.android.internal.telephony.PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM;
|
||||||
import static com.android.systemui.Dependency.BG_LOOPER_NAME;
|
import static com.android.systemui.Dependency.BG_LOOPER_NAME;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -41,6 +43,7 @@ import android.os.Looper;
|
|||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
|
import android.telephony.PhoneStateListener;
|
||||||
import android.telephony.ServiceState;
|
import android.telephony.ServiceState;
|
||||||
import android.telephony.SignalStrength;
|
import android.telephony.SignalStrength;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
@@ -107,6 +110,16 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
private final CurrentUserTracker mUserTracker;
|
private final CurrentUserTracker mUserTracker;
|
||||||
private Config mConfig;
|
private Config mConfig;
|
||||||
|
|
||||||
|
private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
|
||||||
|
@Override
|
||||||
|
public void onActiveDataSubscriptionIdChanged(int subId) {
|
||||||
|
mActiveMobileDataSubscription = subId;
|
||||||
|
doUpdateMobileControllers();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
|
||||||
// Subcontrollers.
|
// Subcontrollers.
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final WifiSignalController mWifiSignalController;
|
final WifiSignalController mWifiSignalController;
|
||||||
@@ -281,6 +294,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
mSubscriptionListener = new SubListener();
|
mSubscriptionListener = new SubListener();
|
||||||
}
|
}
|
||||||
mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
|
mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
|
||||||
|
mPhone.listen(mPhoneStateListener, LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE);
|
||||||
|
|
||||||
// broadcasts
|
// broadcasts
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
@@ -525,6 +539,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void handleConfigurationChanged() {
|
void handleConfigurationChanged() {
|
||||||
|
updateMobileControllers();
|
||||||
for (int i = 0; i < mMobileSignalControllers.size(); i++) {
|
for (int i = 0; i < mMobileSignalControllers.size(); i++) {
|
||||||
MobileSignalController controller = mMobileSignalControllers.valueAt(i);
|
MobileSignalController controller = mMobileSignalControllers.valueAt(i);
|
||||||
controller.setConfiguration(mConfig);
|
controller.setConfiguration(mConfig);
|
||||||
@@ -539,13 +554,39 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
doUpdateMobileControllers();
|
doUpdateMobileControllers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void filterMobileSubscriptionInSameGroup(List<SubscriptionInfo> subscriptions) {
|
||||||
|
if (subscriptions.size() == MAX_PHONE_COUNT_DUAL_SIM) {
|
||||||
|
SubscriptionInfo info1 = subscriptions.get(0);
|
||||||
|
SubscriptionInfo info2 = subscriptions.get(1);
|
||||||
|
if (info1.getGroupUuid() != null && info1.getGroupUuid().equals(info2.getGroupUuid())) {
|
||||||
|
// If both subscriptions are primary, show both.
|
||||||
|
if (!info1.isOpportunistic() && !info2.isOpportunistic()) return;
|
||||||
|
|
||||||
|
// If carrier required, always show signal bar of primary subscription.
|
||||||
|
// Otherwise, show whichever subscription is currently active for Internet.
|
||||||
|
boolean alwaysShowPrimary = CarrierConfigManager.getDefaultConfig()
|
||||||
|
.getBoolean(CarrierConfigManager
|
||||||
|
.KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN);
|
||||||
|
if (alwaysShowPrimary) {
|
||||||
|
subscriptions.remove(info1.isOpportunistic() ? info1 : info2);
|
||||||
|
} else {
|
||||||
|
subscriptions.remove(info1.getSubscriptionId() == mActiveMobileDataSubscription
|
||||||
|
? info2 : info1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void doUpdateMobileControllers() {
|
void doUpdateMobileControllers() {
|
||||||
List<SubscriptionInfo> subscriptions = mSubscriptionManager
|
List<SubscriptionInfo> subscriptions = mSubscriptionManager
|
||||||
.getActiveSubscriptionInfoList(true);
|
.getActiveSubscriptionInfoList(false);
|
||||||
if (subscriptions == null) {
|
if (subscriptions == null) {
|
||||||
subscriptions = Collections.emptyList();
|
subscriptions = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterMobileSubscriptionInSameGroup(subscriptions);
|
||||||
|
|
||||||
// If there have been no relevant changes to any of the subscriptions, we can leave as is.
|
// If there have been no relevant changes to any of the subscriptions, we can leave as is.
|
||||||
if (hasCorrectMobileControllers(subscriptions)) {
|
if (hasCorrectMobileControllers(subscriptions)) {
|
||||||
// Even if the controllers are correct, make sure we have the right no sims state.
|
// Even if the controllers are correct, make sure we have the right no sims state.
|
||||||
|
|||||||
@@ -2519,6 +2519,18 @@ public class CarrierConfigManager {
|
|||||||
public static final String KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY =
|
public static final String KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY =
|
||||||
"emergency_number_prefix_string_array";
|
"emergency_number_prefix_string_array";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates when a carrier has a primary subscription and an opportunistic subscription active,
|
||||||
|
* and when Internet data is switched to opportunistic network, whether to still show
|
||||||
|
* signal bar of primary network. By default it will be false, meaning whenever data
|
||||||
|
* is going over opportunistic network, signal bar will reflect signal strength and rat
|
||||||
|
* icon of that network.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN =
|
||||||
|
"always_show_primary_signal_bar_in_opportunistic_network_boolean";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GPS configs. See android.hardware.gnss@1.0 IGnssConfiguration.
|
* GPS configs. See android.hardware.gnss@1.0 IGnssConfiguration.
|
||||||
* @hide
|
* @hide
|
||||||
@@ -3052,6 +3064,8 @@ public class CarrierConfigManager {
|
|||||||
sDefaults.putStringArray(KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY, new String[0]);
|
sDefaults.putStringArray(KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY, new String[0]);
|
||||||
sDefaults.putBoolean(KEY_USE_USIM_BOOL, false);
|
sDefaults.putBoolean(KEY_USE_USIM_BOOL, false);
|
||||||
sDefaults.putBoolean(KEY_AUTO_CANCEL_CS_REJECT_NOTIFICATION, false);
|
sDefaults.putBoolean(KEY_AUTO_CANCEL_CS_REJECT_NOTIFICATION, false);
|
||||||
|
sDefaults.putBoolean(KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user