Merge "Add carrier config support to operator name in statusbar" into tm-dev

This commit is contained in:
Evan Laird
2022-04-06 21:22:29 +00:00
committed by Android (Google) Code Review
8 changed files with 251 additions and 53 deletions

View File

@@ -65,6 +65,7 @@ import android.safetycenter.SafetyCenterManager;
import android.service.dreams.DreamService; import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager; import android.service.dreams.IDreamManager;
import android.telecom.TelecomManager; import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.CrossWindowBlurListeners; import android.view.CrossWindowBlurListeners;
@@ -450,6 +451,12 @@ public class FrameworkServicesModule {
return context.getSystemService(OverlayManager.class); return context.getSystemService(OverlayManager.class);
} }
@Provides
@Singleton
static CarrierConfigManager provideCarrierConfigManager(Context context) {
return context.getSystemService(CarrierConfigManager.class);
}
@Provides @Provides
@Singleton @Singleton
static WindowManager provideWindowManager(Context context) { static WindowManager provideWindowManager(Context context) {

View File

@@ -21,8 +21,6 @@ import android.widget.TextView;
import com.android.settingslib.WirelessUtils; import com.android.settingslib.WirelessUtils;
import java.util.List;
/** Shows the operator name */ /** Shows the operator name */
public class OperatorNameView extends TextView { public class OperatorNameView extends TextView {
private boolean mDemoMode; private boolean mDemoMode;
@@ -43,8 +41,10 @@ public class OperatorNameView extends TextView {
mDemoMode = demoMode; mDemoMode = demoMode;
} }
void update(boolean showOperatorName, boolean hasMobile, void update(boolean showOperatorName,
List<OperatorNameViewController.SubInfo> subs) { boolean hasMobile,
OperatorNameViewController.SubInfo sub
) {
setVisibility(showOperatorName ? VISIBLE : GONE); setVisibility(showOperatorName ? VISIBLE : GONE);
boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext); boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext);
@@ -55,24 +55,21 @@ public class OperatorNameView extends TextView {
} }
if (!mDemoMode) { if (!mDemoMode) {
updateText(subs); updateText(sub);
} }
} }
void updateText(List<OperatorNameViewController.SubInfo> subs) { void updateText(OperatorNameViewController.SubInfo subInfo) {
CharSequence carrierName = null;
CharSequence displayText = null; CharSequence displayText = null;
final int N = subs.size(); if (subInfo != null) {
for (int i = 0; i < N; i++) { carrierName = subInfo.getCarrierName();
OperatorNameViewController.SubInfo subInfo = subs.get(i); }
CharSequence carrierName = subs.get(i).getCarrierName(); if (!TextUtils.isEmpty(carrierName) && subInfo.simReady()) {
if (!TextUtils.isEmpty(carrierName) && subInfo.simReady()) { if (subInfo.stateInService()) {
if (subInfo.stateInService()) { displayText = carrierName;
displayText = subInfo.getCarrierName();
break;
}
} }
} }
setText(displayText); setText(displayText);
} }
} }

View File

@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.os.Bundle; import android.os.Bundle;
import android.telephony.ServiceState; import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.View; import android.view.View;
@@ -30,12 +31,11 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.IconState;
import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.connectivity.SignalCallback;
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.ViewController; import com.android.systemui.util.ViewController;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
/** Controller for {@link OperatorNameView}. */ /** Controller for {@link OperatorNameView}. */
@@ -47,19 +47,22 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
private final TunerService mTunerService; private final TunerService mTunerService;
private final TelephonyManager mTelephonyManager; private final TelephonyManager mTelephonyManager;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final CarrierConfigTracker mCarrierConfigTracker;
private OperatorNameViewController(OperatorNameView view, private OperatorNameViewController(OperatorNameView view,
DarkIconDispatcher darkIconDispatcher, DarkIconDispatcher darkIconDispatcher,
NetworkController networkController, NetworkController networkController,
TunerService tunerService, TunerService tunerService,
TelephonyManager telephonyManager, TelephonyManager telephonyManager,
KeyguardUpdateMonitor keyguardUpdateMonitor) { KeyguardUpdateMonitor keyguardUpdateMonitor,
CarrierConfigTracker carrierConfigTracker) {
super(view); super(view);
mDarkIconDispatcher = darkIconDispatcher; mDarkIconDispatcher = darkIconDispatcher;
mNetworkController = networkController; mNetworkController = networkController;
mTunerService = tunerService; mTunerService = tunerService;
mTelephonyManager = telephonyManager; mTelephonyManager = telephonyManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mCarrierConfigTracker = carrierConfigTracker;
} }
@Override @Override
@@ -79,24 +82,22 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
} }
private void update() { private void update() {
mView.update(mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0, SubInfo defaultSubInfo = getDefaultSubInfo();
mTelephonyManager.isDataCapable(), getSubInfos()); boolean showOperatorName =
mCarrierConfigTracker
.getShowOperatorNameInStatusBarConfig(defaultSubInfo.getSubId())
&& (mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0);
mView.update(showOperatorName, mTelephonyManager.isDataCapable(), getDefaultSubInfo());
} }
private List<SubInfo> getSubInfos() { private SubInfo getDefaultSubInfo() {
List<SubInfo> result = new ArrayList<>(); int defaultSubId = SubscriptionManager.getDefaultDataSubscriptionId();
List<SubscriptionInfo> subscritionInfos = SubscriptionInfo sI = mKeyguardUpdateMonitor.getSubscriptionInfoForSubId(defaultSubId);
mKeyguardUpdateMonitor.getFilteredSubscriptionInfo(false); return new SubInfo(
sI.getSubscriptionId(),
for (SubscriptionInfo subscriptionInfo : subscritionInfos) { sI.getCarrierName(),
int subId = subscriptionInfo.getSubscriptionId(); mKeyguardUpdateMonitor.getSimState(defaultSubId),
result.add(new SubInfo( mKeyguardUpdateMonitor.getServiceState(defaultSubId));
subscriptionInfo.getCarrierName(),
mKeyguardUpdateMonitor.getSimState(subId),
mKeyguardUpdateMonitor.getServiceState(subId)));
}
return result;
} }
/** Factory for constructing an {@link OperatorNameViewController}. */ /** Factory for constructing an {@link OperatorNameViewController}. */
@@ -106,22 +107,32 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
private final TunerService mTunerService; private final TunerService mTunerService;
private final TelephonyManager mTelephonyManager; private final TelephonyManager mTelephonyManager;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final CarrierConfigTracker mCarrierConfigTracker;
@Inject @Inject
public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController, public Factory(DarkIconDispatcher darkIconDispatcher,
TunerService tunerService, TelephonyManager telephonyManager, NetworkController networkController,
KeyguardUpdateMonitor keyguardUpdateMonitor) { TunerService tunerService,
TelephonyManager telephonyManager,
KeyguardUpdateMonitor keyguardUpdateMonitor,
CarrierConfigTracker carrierConfigTracker) {
mDarkIconDispatcher = darkIconDispatcher; mDarkIconDispatcher = darkIconDispatcher;
mNetworkController = networkController; mNetworkController = networkController;
mTunerService = tunerService; mTunerService = tunerService;
mTelephonyManager = telephonyManager; mTelephonyManager = telephonyManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mCarrierConfigTracker = carrierConfigTracker;
} }
/** Create an {@link OperatorNameViewController}. */ /** Create an {@link OperatorNameViewController}. */
public OperatorNameViewController create(OperatorNameView view) { public OperatorNameViewController create(OperatorNameView view) {
return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController, return new OperatorNameViewController(view,
mTunerService, mTelephonyManager, mKeyguardUpdateMonitor); mDarkIconDispatcher,
mNetworkController,
mTunerService,
mTelephonyManager,
mKeyguardUpdateMonitor,
mCarrierConfigTracker);
} }
} }
@@ -152,7 +163,7 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
new KeyguardUpdateMonitorCallback() { new KeyguardUpdateMonitorCallback() {
@Override @Override
public void onRefreshCarrierInfo() { public void onRefreshCarrierInfo() {
mView.updateText(getSubInfos()); mView.updateText(getDefaultSubInfo());
} }
}; };
@@ -176,17 +187,26 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
}; };
static class SubInfo { static class SubInfo {
private final int mSubId;
private final CharSequence mCarrierName; private final CharSequence mCarrierName;
private final int mSimState; private final int mSimState;
private final ServiceState mServiceState; private final ServiceState mServiceState;
private SubInfo(CharSequence carrierName, private SubInfo(
int simState, ServiceState serviceState) { int subId,
CharSequence carrierName,
int simState,
ServiceState serviceState) {
mSubId = subId;
mCarrierName = carrierName; mCarrierName = carrierName;
mSimState = simState; mSimState = simState;
mServiceState = serviceState; mServiceState = serviceState;
} }
int getSubId() {
return mSubId;
}
boolean simReady() { boolean simReady() {
return mSimState == TelephonyManager.SIM_STATE_READY; return mSimState == TelephonyManager.SIM_STATE_READY;
} }

View File

@@ -61,6 +61,7 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -263,6 +264,7 @@ public abstract class StatusBarViewModule {
NetworkController networkController, NetworkController networkController,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
CommandQueue commandQueue, CommandQueue commandQueue,
CarrierConfigTracker carrierConfigTracker,
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger, CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
OperatorNameViewController.Factory operatorNameViewControllerFactory, OperatorNameViewController.Factory operatorNameViewControllerFactory,
SecureSettings secureSettings, SecureSettings secureSettings,
@@ -282,6 +284,7 @@ public abstract class StatusBarViewModule {
networkController, networkController,
statusBarStateController, statusBarStateController,
commandQueue, commandQueue,
carrierConfigTracker,
collapsedStatusBarFragmentLogger, collapsedStatusBarFragmentLogger,
operatorNameViewControllerFactory, operatorNameViewControllerFactory,
secureSettings, secureSettings,

View File

@@ -32,6 +32,7 @@ import android.database.ContentObserver;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -69,6 +70,9 @@ import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener;
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
import com.android.systemui.statusbar.policy.EncryptionHelper; import com.android.systemui.statusbar.policy.EncryptionHelper;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.CarrierConfigTracker.CarrierConfigChangedListener;
import com.android.systemui.util.CarrierConfigTracker.DefaultDataSubscriptionChangedListener;
import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings;
import java.util.ArrayList; import java.util.ArrayList;
@@ -115,6 +119,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private final NotificationIconAreaController mNotificationIconAreaController; private final NotificationIconAreaController mNotificationIconAreaController;
private final PanelExpansionStateManager mPanelExpansionStateManager; private final PanelExpansionStateManager mPanelExpansionStateManager;
private final StatusBarIconController mStatusBarIconController; private final StatusBarIconController mStatusBarIconController;
private final CarrierConfigTracker mCarrierConfigTracker;
private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
private final SecureSettings mSecureSettings; private final SecureSettings mSecureSettings;
private final Executor mMainExecutor; private final Executor mMainExecutor;
@@ -137,6 +142,28 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private OperatorNameViewController mOperatorNameViewController; private OperatorNameViewController mOperatorNameViewController;
private StatusBarSystemEventAnimator mSystemEventAnimator; private StatusBarSystemEventAnimator mSystemEventAnimator;
private final CarrierConfigChangedListener mCarrierConfigCallback =
new CarrierConfigChangedListener() {
@Override
public void onCarrierConfigChanged() {
if (mOperatorNameViewController == null) {
initOperatorName();
} else {
// Already initialized, KeyguardUpdateMonitorCallback will handle the update
}
}
};
private final DefaultDataSubscriptionChangedListener mDefaultDataListener =
new DefaultDataSubscriptionChangedListener() {
@Override
public void onDefaultSubscriptionChanged(int subId) {
if (mOperatorNameViewController == null) {
initOperatorName();
}
}
};
@SuppressLint("ValidFragment") @SuppressLint("ValidFragment")
public CollapsedStatusBarFragment( public CollapsedStatusBarFragment(
StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory, StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory,
@@ -153,6 +180,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
NetworkController networkController, NetworkController networkController,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
CommandQueue commandQueue, CommandQueue commandQueue,
CarrierConfigTracker carrierConfigTracker,
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger, CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
OperatorNameViewController.Factory operatorNameViewControllerFactory, OperatorNameViewController.Factory operatorNameViewControllerFactory,
SecureSettings secureSettings, SecureSettings secureSettings,
@@ -172,6 +200,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
mNetworkController = networkController; mNetworkController = networkController;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
mCarrierConfigTracker = carrierConfigTracker;
mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger; mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
mOperatorNameViewControllerFactory = operatorNameViewControllerFactory; mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
mSecureSettings = secureSettings; mSecureSettings = secureSettings;
@@ -212,6 +241,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
initNotificationIconArea(); initNotificationIconArea();
mSystemEventAnimator = mSystemEventAnimator =
new StatusBarSystemEventAnimator(mSystemIconArea, getResources()); new StatusBarSystemEventAnimator(mSystemIconArea, getResources());
mCarrierConfigTracker.addCallback(mCarrierConfigCallback);
mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener);
} }
@VisibleForTesting @VisibleForTesting
@@ -283,6 +314,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
if (mNetworkController.hasEmergencyCryptKeeperText()) { if (mNetworkController.hasEmergencyCryptKeeperText()) {
mNetworkController.removeCallback(mSignalCallback); mNetworkController.removeCallback(mSignalCallback);
} }
mCarrierConfigTracker.removeCallback(mCarrierConfigCallback);
mCarrierConfigTracker.removeDataSubscriptionChangedListener(mDefaultDataListener);
} }
/** Initializes views related to the notification icon area. */ /** Initializes views related to the notification icon area. */
@@ -569,11 +602,16 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
} }
private void initOperatorName() { private void initOperatorName() {
if (getResources().getBoolean(R.bool.config_showOperatorNameInStatusBar)) { int subId = SubscriptionManager.getDefaultDataSubscriptionId();
if (mCarrierConfigTracker.getShowOperatorNameInStatusBarConfig(subId)) {
ViewStub stub = mStatusBar.findViewById(R.id.operator_name); ViewStub stub = mStatusBar.findViewById(R.id.operator_name);
mOperatorNameViewController = mOperatorNameViewController =
mOperatorNameViewControllerFactory.create((OperatorNameView) stub.inflate()); mOperatorNameViewControllerFactory.create((OperatorNameView) stub.inflate());
mOperatorNameViewController.init(); mOperatorNameViewController.init();
// This view should not be visible on lock-screen
if (mKeyguardStateController.isShowing()) {
hideOperatorName(false);
}
} }
} }

View File

@@ -23,43 +23,73 @@ import android.content.IntentFilter;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.util.ArraySet;
import android.util.SparseBooleanArray; import android.util.SparseBooleanArray;
import androidx.annotation.NonNull;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.policy.CallbackController;
import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
/** /**
* Tracks the Carrier Config values. * Tracks CarrierConfigs for each subId, as well as the default configuration. CarrierConfigurations
* do not trigger a device configuration event, so any UI that relies on carrier configurations must
* register with the tracker to get proper updates.
*
* The tracker also listens for `TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED`
*
* @see CarrierConfigChangedListener to listen for updates
*/ */
@SysUISingleton @SysUISingleton
public class CarrierConfigTracker extends BroadcastReceiver { public class CarrierConfigTracker
extends BroadcastReceiver
implements CallbackController<CarrierConfigTracker.CarrierConfigChangedListener> {
private final SparseBooleanArray mCallStrengthConfigs = new SparseBooleanArray(); private final SparseBooleanArray mCallStrengthConfigs = new SparseBooleanArray();
private final SparseBooleanArray mNoCallingConfigs = new SparseBooleanArray(); private final SparseBooleanArray mNoCallingConfigs = new SparseBooleanArray();
private final SparseBooleanArray mCarrierProvisionsWifiMergedNetworks = private final SparseBooleanArray mCarrierProvisionsWifiMergedNetworks =
new SparseBooleanArray(); new SparseBooleanArray();
private final SparseBooleanArray mShowOperatorNameConfigs = new SparseBooleanArray();
private final CarrierConfigManager mCarrierConfigManager; private final CarrierConfigManager mCarrierConfigManager;
private final Set<CarrierConfigChangedListener> mListeners = new ArraySet<>();
private final Set<DefaultDataSubscriptionChangedListener> mDataListeners =
new ArraySet<>();
private boolean mDefaultCallStrengthConfigLoaded; private boolean mDefaultCallStrengthConfigLoaded;
private boolean mDefaultCallStrengthConfig; private boolean mDefaultCallStrengthConfig;
private boolean mDefaultNoCallingConfigLoaded; private boolean mDefaultNoCallingConfigLoaded;
private boolean mDefaultNoCallingConfig; private boolean mDefaultNoCallingConfig;
private boolean mDefaultCarrierProvisionsWifiMergedNetworksLoaded; private boolean mDefaultCarrierProvisionsWifiMergedNetworksLoaded;
private boolean mDefaultCarrierProvisionsWifiMergedNetworks; private boolean mDefaultCarrierProvisionsWifiMergedNetworks;
private boolean mDefaultShowOperatorNameConfigLoaded;
private boolean mDefaultShowOperatorNameConfig;
@Inject @Inject
public CarrierConfigTracker(Context context, BroadcastDispatcher broadcastDispatcher) { public CarrierConfigTracker(
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); CarrierConfigManager carrierConfigManager,
broadcastDispatcher.registerReceiver( BroadcastDispatcher broadcastDispatcher) {
this, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)); mCarrierConfigManager = carrierConfigManager;
IntentFilter filter = new IntentFilter();
filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
filter.addAction(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
broadcastDispatcher.registerReceiver(this, filter);
} }
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (!CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) { String action = intent.getAction();
return; if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action)) {
updateFromNewCarrierConfig(intent);
} else if (TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) {
updateDefaultDataSubscription(intent);
} }
}
private void updateFromNewCarrierConfig(Intent intent) {
final int subId = intent.getIntExtra( final int subId = intent.getIntExtra(
CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX,
SubscriptionManager.INVALID_SUBSCRIPTION_ID); SubscriptionManager.INVALID_SUBSCRIPTION_ID);
@@ -84,6 +114,29 @@ public class CarrierConfigTracker extends BroadcastReceiver {
mCarrierProvisionsWifiMergedNetworks.put(subId, config.getBoolean( mCarrierProvisionsWifiMergedNetworks.put(subId, config.getBoolean(
CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL)); CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL));
} }
synchronized (mShowOperatorNameConfigs) {
mShowOperatorNameConfigs.put(subId, config.getBoolean(
CarrierConfigManager.KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL));
}
notifyCarrierConfigChanged();
}
private void updateDefaultDataSubscription(Intent intent) {
int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, -1);
notifyDefaultDataSubscriptionChanged(subId);
}
private void notifyCarrierConfigChanged() {
for (CarrierConfigChangedListener l : mListeners) {
l.onCarrierConfigChanged();
}
}
private void notifyDefaultDataSubscriptionChanged(int subId) {
for (DefaultDataSubscriptionChangedListener l : mDataListeners) {
l.onDefaultSubscriptionChanged(subId);
}
} }
/** /**
@@ -139,4 +192,73 @@ public class CarrierConfigTracker extends BroadcastReceiver {
} }
return mDefaultCarrierProvisionsWifiMergedNetworks; return mDefaultCarrierProvisionsWifiMergedNetworks;
} }
/**
* Returns the KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL value for the default config
*/
public boolean getShowOperatorNameInStatusBarConfigDefault() {
if (!mDefaultShowOperatorNameConfigLoaded) {
mDefaultShowOperatorNameConfig = CarrierConfigManager.getDefaultConfig().getBoolean(
CarrierConfigManager.KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL);
mDefaultShowOperatorNameConfigLoaded = true;
}
return mDefaultShowOperatorNameConfig;
}
/**
* Returns the KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL value for the given subId, or the
* default value if no override exists
*
* @param subId the subscription id for which to query the config
*/
public boolean getShowOperatorNameInStatusBarConfig(int subId) {
if (mShowOperatorNameConfigs.indexOfKey(subId) >= 0) {
return mShowOperatorNameConfigs.get(subId);
} else {
return getShowOperatorNameInStatusBarConfigDefault();
}
}
@Override
public void addCallback(@NonNull CarrierConfigChangedListener listener) {
mListeners.add(listener);
}
@Override
public void removeCallback(@NonNull CarrierConfigChangedListener listener) {
mListeners.remove(listener);
}
/** */
public void addDefaultDataSubscriptionChangedListener(
@NonNull DefaultDataSubscriptionChangedListener listener) {
mDataListeners.add(listener);
}
/** */
public void removeDataSubscriptionChangedListener(
DefaultDataSubscriptionChangedListener listener) {
mDataListeners.remove(listener);
}
/**
* Called when carrier config changes
*/
public interface CarrierConfigChangedListener {
/** */
void onCarrierConfigChanged();
}
/**
* Called when the default data subscription changes. Listeners may want to query
* subId-dependent configuration values when this event happens
*/
public interface DefaultDataSubscriptionChangedListener {
/**
* @param subId the new default data subscription id per
* {@link SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX}
*/
void onDefaultSubscriptionChanged(int subId);
}
} }

View File

@@ -59,6 +59,7 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
@@ -90,6 +91,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
private OperatorNameViewController mOperatorNameViewController; private OperatorNameViewController mOperatorNameViewController;
private SecureSettings mSecureSettings; private SecureSettings mSecureSettings;
private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
private final CarrierConfigTracker mCarrierConfigTracker = mock(CarrierConfigTracker.class);
@Mock @Mock
private StatusBarFragmentComponent.Factory mStatusBarFragmentComponentFactory; private StatusBarFragmentComponent.Factory mStatusBarFragmentComponentFactory;
@@ -373,6 +375,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
mNetworkController, mNetworkController,
mStatusBarStateController, mStatusBarStateController,
mCommandQueue, mCommandQueue,
mCarrierConfigTracker,
new CollapsedStatusBarFragmentLogger( new CollapsedStatusBarFragmentLogger(
new LogBuffer("TEST", 1, 1, mock(LogcatEchoTracker.class)), new LogBuffer("TEST", 1, 1, mock(LogcatEchoTracker.class)),
new DisableFlagsLogger() new DisableFlagsLogger()

View File

@@ -1958,6 +1958,13 @@ public class CarrierConfigManager {
public static final String KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT = public static final String KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT =
"nr_advanced_threshold_bandwidth_khz_int"; "nr_advanced_threshold_bandwidth_khz_int";
/**
* Boolean indicating if operator name should be shown in the status bar
* @hide
*/
public static final String KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL =
"show_operator_name_in_statusbar_bool";
/** /**
* The string is used to filter redundant string from PLMN Network Name that's supplied by * The string is used to filter redundant string from PLMN Network Name that's supplied by
* specific carrier. * specific carrier.
@@ -8913,6 +8920,7 @@ public class CarrierConfigManager {
sDefaults.putStringArray(KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY, null); sDefaults.putStringArray(KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY, null);
sDefaults.putBoolean(KEY_WORLD_MODE_ENABLED_BOOL, false); sDefaults.putBoolean(KEY_WORLD_MODE_ENABLED_BOOL, false);
sDefaults.putString(KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING, ""); sDefaults.putString(KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING, "");
sDefaults.putBoolean(KEY_SHOW_OPERATOR_NAME_IN_STATUSBAR_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false);
sDefaults.putBoolean(KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL, false); sDefaults.putBoolean(KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL, false);
sDefaults.putBoolean(KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL, false); sDefaults.putBoolean(KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL, false);