Merge "Add carrier config support to operator name in statusbar" into tm-dev
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user