Revert systemui status bar provider model behavior

This CL reverts the status bar provider model behavior. It removes the
logic to show only one icon at a time, and removes showing the call
strength indicators.

This change keeps the Internet tile, and decouples SystemUI from the
system setting SETTING_PROVIDER_MODEL.

Bug: 191903788
Test: atest SystemUITests SystemUIGoogleTests; manual
Test: test with a SIM and a Wi-Fi connection and there should be both
      icons in the status bar and quick settings with this change. As
      well as the Internet tile should stay (rather than going back to
      the Cell and Wi-Fi tiles).
Change-Id: I017c10e4d7c1b15b152c44d092695dbc77e4a0ec
Merged-In: I017c10e4d7c1b15b152c44d092695dbc77e4a0ec
This commit is contained in:
Evan Laird
2021-06-25 14:29:03 -04:00
parent 4eaca4eb94
commit 30a2c5b007
31 changed files with 329 additions and 159 deletions

View File

@@ -52,4 +52,6 @@
<bool name="flag_smartspace">false</bool>
<bool name="flag_smartspace_deduping">true</bool>
<bool name="flag_combined_status_bar_signal_icons">false</bool>
</resources>

View File

@@ -73,6 +73,7 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
import com.android.systemui.shared.system.PackageManagerWrapper;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationMediaManager;
@@ -360,6 +361,7 @@ public class Dependency {
@Inject Lazy<PrivacyDotViewController> mPrivacyDotViewControllerLazy;
@Inject Lazy<EdgeBackGestureHandler> mEdgeBackGestureHandler;
@Inject Lazy<UiEventLogger> mUiEventLogger;
@Inject Lazy<FeatureFlags> mFeatureFlagsLazy;
@Inject
public Dependency() {
@@ -574,6 +576,7 @@ public class Dependency {
mProviders.put(PrivacyDotViewController.class, mPrivacyDotViewControllerLazy::get);
mProviders.put(EdgeBackGestureHandler.class, mEdgeBackGestureHandler::get);
mProviders.put(UiEventLogger.class, mUiEventLogger::get);
mProviders.put(FeatureFlags.class, mFeatureFlagsLazy::get);
Dependency.setInstance(this);
}

View File

@@ -27,7 +27,6 @@ import android.provider.Settings.Secure;
import android.service.quicksettings.Tile;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.FeatureFlagUtils;
import android.util.Log;
import com.android.internal.logging.InstanceId;
@@ -52,6 +51,7 @@ import com.android.systemui.qs.external.TileServices;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.phone.AutoTileManager;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
@@ -123,7 +123,8 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
UiEventLogger uiEventLogger,
UserTracker userTracker,
SecureSettings secureSettings,
CustomTileStatePersister customTileStatePersister) {
CustomTileStatePersister customTileStatePersister
) {
mIconController = iconController;
mContext = context;
mUserContext = context;
@@ -517,7 +518,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
// --WiFiTile
// --CellularTIle
if (tiles.contains("internet") || tiles.contains("wifi") || tiles.contains("cell")) {
if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
if (FeatureFlags.isProviderModelSettingEnabled(context)) {
if (!tiles.contains("internet")) {
if (tiles.contains("wifi")) {
// Replace the WiFi with Internet, and remove the Cell
@@ -559,7 +560,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
}
// TODO(b/174753536): Change the config file directly.
// Filter out unused tiles from the default QS config.
if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
if (FeatureFlags.isProviderModelSettingEnabled(context)) {
tiles.remove("cell");
tiles.remove("wifi");
} else {

View File

@@ -23,7 +23,6 @@ import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.FeatureFlagUtils;
import android.util.Pair;
import android.view.DisplayCutout;
import android.view.View;
@@ -88,11 +87,11 @@ public class QuickStatusBarHeader extends FrameLayout {
private float mKeyguardExpansionFraction;
private int mTextColorPrimary = Color.TRANSPARENT;
private int mTopViewMeasureHeight;
private boolean mProviderModel;
private final String mMobileSlotName;
private final String mNoCallingSlotName;
private final String mCallStrengthSlotName;
private final boolean mProviderModel;
public QuickStatusBarHeader(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -100,11 +99,6 @@ public class QuickStatusBarHeader extends FrameLayout {
mNoCallingSlotName = context.getString(com.android.internal.R.string.status_bar_no_calling);
mCallStrengthSlotName =
context.getString(com.android.internal.R.string.status_bar_call_strength);
if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
mProviderModel = true;
} else {
mProviderModel = false;
}
}
/**
@@ -154,7 +148,9 @@ public class QuickStatusBarHeader extends FrameLayout {
}
void onAttach(TintedIconManager iconManager,
QSExpansionPathInterpolator qsExpansionPathInterpolator) {
QSExpansionPathInterpolator qsExpansionPathInterpolator,
boolean providerModel) {
mProviderModel = providerModel;
mTintedIconManager = iconManager;
int fillColor = Utils.getColorAttrDefaultColor(getContext(),
android.R.attr.textColorPrimary);

View File

@@ -37,6 +37,7 @@ import com.android.systemui.privacy.PrivacyItemController;
import com.android.systemui.privacy.logging.PrivacyLogger;
import com.android.systemui.qs.carrier.QSCarrierGroupController;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
@@ -69,6 +70,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
private final PrivacyLogger mPrivacyLogger;
private final PrivacyDialogController mPrivacyDialogController;
private final QSExpansionPathInterpolator mQSExpansionPathInterpolator;
private final FeatureFlags mFeatureFlags;
private boolean mListening;
private boolean mMicCameraIndicatorsEnabled;
@@ -130,7 +132,8 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
PrivacyLogger privacyLogger,
SysuiColorExtractor colorExtractor,
PrivacyDialogController privacyDialogController,
QSExpansionPathInterpolator qsExpansionPathInterpolator) {
QSExpansionPathInterpolator qsExpansionPathInterpolator,
FeatureFlags featureFlags) {
super(view);
mPrivacyItemController = privacyItemController;
mActivityStarter = activityStarter;
@@ -141,6 +144,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
mPrivacyLogger = privacyLogger;
mPrivacyDialogController = privacyDialogController;
mQSExpansionPathInterpolator = qsExpansionPathInterpolator;
mFeatureFlags = featureFlags;
mQSCarrierGroupController = qsCarrierGroupControllerBuilder
.setQSCarrierGroup(mView.findViewById(R.id.carrier_group))
@@ -150,7 +154,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
mClockView = mView.findViewById(R.id.clock);
mIconContainer = mView.findViewById(R.id.statusIcons);
mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer);
mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer, mFeatureFlags);
mDemoModeReceiver = new ClockDemoModeReceiver(mClockView);
mColorExtractor = colorExtractor;
mOnColorsChangedListener = (extractor, which) -> {
@@ -174,7 +178,8 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
setChipVisibility(mPrivacyChip.getVisibility() == View.VISIBLE);
mView.onAttach(mIconManager, mQSExpansionPathInterpolator);
mView.onAttach(mIconManager, mQSExpansionPathInterpolator,
mFeatureFlags.isCombinedStatusBarSignalIconsEnabled());
mDemoModeController.addCallback(mDemoModeReceiver);
}

View File

@@ -26,7 +26,8 @@ data class CellSignalState(
@JvmField val mobileSignalIconId: Int = 0,
@JvmField val contentDescription: String? = null,
@JvmField val typeContentDescription: String? = null,
@JvmField val roaming: Boolean = false
@JvmField val roaming: Boolean = false,
@JvmField val providerModelBehavior: Boolean = false
) {
/**
* Changes the visibility of this state by returning a copy with the visibility changed.

View File

@@ -20,7 +20,6 @@ import android.content.Context;
import android.content.res.ColorStateList;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.FeatureFlagUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -39,7 +38,7 @@ public class QSCarrier extends LinearLayout {
private ImageView mMobileSignal;
private ImageView mMobileRoaming;
private CellSignalState mLastSignalState;
private boolean mProviderModel;
private boolean mProviderModelInitialized = false;
public QSCarrier(Context context) {
super(context);
@@ -60,20 +59,10 @@ public class QSCarrier extends LinearLayout {
@Override
protected void onFinishInflate() {
super.onFinishInflate();
if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
mProviderModel = true;
} else {
mProviderModel = false;
}
mMobileGroup = findViewById(R.id.mobile_combo);
mMobileRoaming = findViewById(R.id.mobile_roaming);
mMobileSignal = findViewById(R.id.mobile_signal);
mCarrierText = findViewById(R.id.qs_carrier_text);
if (mProviderModel) {
mMobileSignal.setImageDrawable(mContext.getDrawable(R.drawable.ic_qs_no_calling_sms));
} else {
mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
}
}
/**
@@ -92,10 +81,19 @@ public class QSCarrier extends LinearLayout {
mMobileRoaming.setImageTintList(colorStateList);
mMobileSignal.setImageTintList(colorStateList);
if (mProviderModel) {
if (state.providerModelBehavior) {
if (!mProviderModelInitialized) {
mProviderModelInitialized = true;
mMobileSignal.setImageDrawable(
mContext.getDrawable(R.drawable.ic_qs_no_calling_sms));
}
mMobileSignal.setImageDrawable(mContext.getDrawable(state.mobileSignalIconId));
mMobileSignal.setContentDescription(state.contentDescription);
} else {
if (!mProviderModelInitialized) {
mProviderModelInitialized = true;
mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
}
mMobileSignal.setImageLevel(state.mobileSignalIconId);
StringBuilder contentDescription = new StringBuilder();
if (state.contentDescription != null) {

View File

@@ -27,7 +27,6 @@ import android.os.Message;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
@@ -41,6 +40,7 @@ import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.util.CarrierConfigTracker;
@@ -95,7 +95,8 @@ public class QSCarrierGroupController {
indicators.statusIcon.icon,
indicators.statusIcon.contentDescription,
indicators.typeContentDescription.toString(),
indicators.roaming
indicators.roaming,
mProviderModel
);
mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
}
@@ -120,18 +121,32 @@ public class QSCarrierGroupController {
if (statusIcon.icon == R.drawable.ic_qs_no_calling_sms) {
if (statusIcon.visible) {
mInfos[slotIndex] = new CellSignalState(true,
statusIcon.icon, statusIcon.contentDescription, "", false);
mInfos[slotIndex] = new CellSignalState(
true,
statusIcon.icon,
statusIcon.contentDescription,
"",
false,
mProviderModel);
} else {
// Whenever the no Calling & SMS state is cleared, switched to the last
// known call strength icon.
if (displayCallStrengthIcon) {
mInfos[slotIndex] = new CellSignalState(
true, mLastSignalLevel[slotIndex],
mLastSignalLevelDescription[slotIndex], "", false);
true,
mLastSignalLevel[slotIndex],
mLastSignalLevelDescription[slotIndex],
"",
false,
mProviderModel);
} else {
mInfos[slotIndex] = new CellSignalState(
true, R.drawable.ic_qs_sim_card, "", "", false);
true,
R.drawable.ic_qs_sim_card,
"",
"",
false,
mProviderModel);
}
}
mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
@@ -143,11 +158,21 @@ public class QSCarrierGroupController {
if (mInfos[slotIndex].mobileSignalIconId
!= R.drawable.ic_qs_no_calling_sms) {
if (displayCallStrengthIcon) {
mInfos[slotIndex] = new CellSignalState(true, statusIcon.icon,
statusIcon.contentDescription, "", false);
mInfos[slotIndex] = new CellSignalState(
true,
statusIcon.icon,
statusIcon.contentDescription,
"",
false,
mProviderModel);
} else {
mInfos[slotIndex] = new CellSignalState(
true, R.drawable.ic_qs_sim_card, "", "", false);
true,
R.drawable.ic_qs_sim_card,
"",
"",
false,
mProviderModel);
}
mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
}
@@ -182,8 +207,9 @@ public class QSCarrierGroupController {
@Background Handler bgHandler, @Main Looper mainLooper,
NetworkController networkController,
CarrierTextManager.Builder carrierTextManagerBuilder, Context context,
CarrierConfigTracker carrierConfigTracker) {
if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags) {
if (featureFlags.isCombinedStatusBarSignalIconsEnabled()) {
mProviderModel = true;
} else {
mProviderModel = false;
@@ -217,9 +243,13 @@ public class QSCarrierGroupController {
mCarrierDividers[1] = view.getCarrierDivider2();
for (int i = 0; i < SIM_SLOTS; i++) {
mInfos[i] = new CellSignalState(true, R.drawable.ic_qs_no_calling_sms,
mInfos[i] = new CellSignalState(
true,
R.drawable.ic_qs_no_calling_sms,
context.getText(AccessibilityContentDescriptions.NO_CALLING).toString(),
"", false);
"",
false,
mProviderModel);
mLastSignalLevel[i] = TelephonyIcons.MOBILE_CALL_STRENGTH_ICONS[0];
mLastSignalLevelDescription[i] =
context.getText(AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0])
@@ -289,7 +319,8 @@ public class QSCarrierGroupController {
for (int i = 0; i < SIM_SLOTS; i++) {
if (mInfos[i].visible
&& mInfos[i].mobileSignalIconId == R.drawable.ic_qs_sim_card) {
mInfos[i] = new CellSignalState(true, R.drawable.ic_blank, "", "", false);
mInfos[i] = new CellSignalState(true, R.drawable.ic_blank, "", "", false,
mProviderModel);
}
}
}
@@ -401,12 +432,13 @@ public class QSCarrierGroupController {
private final CarrierTextManager.Builder mCarrierTextControllerBuilder;
private final Context mContext;
private final CarrierConfigTracker mCarrierConfigTracker;
private final FeatureFlags mFeatureFlags;
@Inject
public Builder(ActivityStarter activityStarter, @Background Handler handler,
@Main Looper looper, NetworkController networkController,
CarrierTextManager.Builder carrierTextControllerBuilder, Context context,
CarrierConfigTracker carrierConfigTracker) {
CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags) {
mActivityStarter = activityStarter;
mHandler = handler;
mLooper = looper;
@@ -414,6 +446,7 @@ public class QSCarrierGroupController {
mCarrierTextControllerBuilder = carrierTextControllerBuilder;
mContext = context;
mCarrierConfigTracker = carrierConfigTracker;
mFeatureFlags = featureFlags;
}
public Builder setQSCarrierGroup(QSCarrierGroup view) {
@@ -424,7 +457,7 @@ public class QSCarrierGroupController {
public QSCarrierGroupController build() {
return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
mNetworkController, mCarrierTextControllerBuilder, mContext,
mCarrierConfigTracker);
mCarrierConfigTracker, mFeatureFlags);
}
}
}

View File

@@ -29,7 +29,6 @@ import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.FeatureFlagUtils;
import android.widget.Button;
import com.android.systemui.R;
@@ -42,6 +41,7 @@ import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.qs.tileimpl.QSTileImpl.DrawableIcon;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.util.leak.GarbageMonitor;
import java.util.ArrayList;
@@ -63,17 +63,24 @@ public class TileQueryHelper {
private final Executor mBgExecutor;
private final Context mContext;
private final UserTracker mUserTracker;
private final FeatureFlags mFeatureFlags;
private TileStateListener mListener;
private boolean mFinished;
@Inject
public TileQueryHelper(Context context, UserTracker userTracker,
@Main Executor mainExecutor, @Background Executor bgExecutor) {
public TileQueryHelper(
Context context,
UserTracker userTracker,
@Main Executor mainExecutor,
@Background Executor bgExecutor,
FeatureFlags featureFlags
) {
mContext = context;
mMainExecutor = mainExecutor;
mBgExecutor = bgExecutor;
mUserTracker = userTracker;
mFeatureFlags = featureFlags;
}
public void setListener(TileStateListener listener) {
@@ -115,7 +122,7 @@ public class TileQueryHelper {
final ArrayList<QSTile> tilesToAdd = new ArrayList<>();
// TODO(b/174753536): Move it into the config file.
if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
if (mFeatureFlags.isProviderModelSettingEnabled()) {
possibleTiles.remove("cell");
possibleTiles.remove("wifi");
} else {

View File

@@ -16,6 +16,9 @@
package com.android.systemui.statusbar;
import android.content.Context;
import android.util.FeatureFlagUtils;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.flags.FeatureFlagReader;
@@ -30,10 +33,12 @@ import javax.inject.Inject;
@SysUISingleton
public class FeatureFlags {
private final FeatureFlagReader mFlagReader;
private final Context mContext;
@Inject
public FeatureFlags(FeatureFlagReader flagReader) {
public FeatureFlags(FeatureFlagReader flagReader, Context context) {
mFlagReader = flagReader;
mContext = context;
}
public boolean isNewNotifPipelineEnabled() {
@@ -92,4 +97,19 @@ public class FeatureFlags {
public boolean isSmartSpaceSharedElementTransitionEnabled() {
return mFlagReader.isEnabled(R.bool.flag_smartspace_shared_element_transition);
}
/** Whether or not to use the provider model behavior for the status bar icons */
public boolean isCombinedStatusBarSignalIconsEnabled() {
return mFlagReader.isEnabled(R.bool.flag_combined_status_bar_signal_icons);
}
/** System setting for provider model behavior */
public boolean isProviderModelSettingEnabled() {
return FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
}
/** static method for the system setting */
public static boolean isProviderModelSettingEnabled(Context context) {
return FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
}
}

View File

@@ -26,7 +26,6 @@ import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.FeatureFlagUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -60,13 +59,21 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
private int mVisibleState = -1;
private DualToneHandler mDualToneHandler;
private boolean mForceHidden;
private boolean mProviderModel;
public static StatusBarMobileView fromContext(Context context, String slot) {
/**
* Designated constructor
*/
public static StatusBarMobileView fromContext(
Context context,
String slot,
boolean providerModel
) {
LayoutInflater inflater = LayoutInflater.from(context);
StatusBarMobileView v = (StatusBarMobileView)
inflater.inflate(R.layout.status_bar_mobile_signal_group, null);
v.setSlot(slot);
v.init();
v.init(providerModel);
v.setVisibleState(STATE_ICON);
return v;
}
@@ -99,12 +106,13 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
outRect.bottom += translationY;
}
private void init() {
private void init(boolean providerModel) {
mProviderModel = providerModel;
mDualToneHandler = new DualToneHandler(getContext());
mMobileGroup = findViewById(R.id.mobile_group);
mMobile = findViewById(R.id.mobile_signal);
mMobileType = findViewById(R.id.mobile_type);
if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
if (mProviderModel) {
mMobileRoaming = findViewById(R.id.mobile_roaming_large);
} else {
mMobileRoaming = findViewById(R.id.mobile_roaming);

View File

@@ -42,6 +42,7 @@ import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
@@ -93,6 +94,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private final SystemStatusAnimationScheduler mAnimationScheduler;
private final StatusBarLocationPublisher mLocationPublisher;
private NotificationIconAreaController mNotificationIconAreaController;
private final FeatureFlags mFeatureFlags;
private List<String> mBlockedIcons = new ArrayList<>();
@@ -115,12 +117,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
OngoingCallController ongoingCallController,
SystemStatusAnimationScheduler animationScheduler,
StatusBarLocationPublisher locationPublisher,
NotificationIconAreaController notificationIconAreaController
NotificationIconAreaController notificationIconAreaController,
FeatureFlags featureFlags
) {
mOngoingCallController = ongoingCallController;
mAnimationScheduler = animationScheduler;
mLocationPublisher = locationPublisher;
mNotificationIconAreaController = notificationIconAreaController;
mFeatureFlags = featureFlags;
}
@Override
@@ -150,7 +154,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
mStatusBar.restoreHierarchyState(
savedInstanceState.getSparseParcelableArray(EXTRA_PANEL_STATE));
}
mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons));
mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons), mFeatureFlags);
mDarkIconManager.setShouldLog(true);
mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_volume));
mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_alarm_clock));

View File

@@ -31,6 +31,7 @@ import com.android.systemui.R;
import com.android.systemui.demomode.DemoMode;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
@@ -48,16 +49,22 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
private final LinearLayout mStatusIcons;
private final ArrayList<StatusBarMobileView> mMobileViews = new ArrayList<>();
private final int mIconSize;
private final FeatureFlags mFeatureFlags;
private StatusBarWifiView mWifiView;
private boolean mDemoMode;
private int mColor;
public DemoStatusIcons(LinearLayout statusIcons, int iconSize) {
public DemoStatusIcons(
LinearLayout statusIcons,
int iconSize,
FeatureFlags featureFlags
) {
super(statusIcons.getContext());
mStatusIcons = statusIcons;
mIconSize = iconSize;
mColor = DarkIconDispatcher.DEFAULT_ICON_TINT;
mFeatureFlags = featureFlags;
if (statusIcons instanceof StatusIconContainer) {
setShouldRestrictIcons(((StatusIconContainer) statusIcons).isRestrictingIcons());
@@ -247,7 +254,8 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
public void addMobileView(MobileIconState state) {
Log.d(TAG, "addMobileView: ");
StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, state.slot);
StatusBarMobileView view = StatusBarMobileView.fromContext(
mContext, state.slot, mFeatureFlags.isCombinedStatusBarSignalIconsEnabled());
view.applyMobileState(state);
view.setStaticDrawableColor(mColor);

View File

@@ -50,6 +50,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
@@ -105,6 +106,7 @@ public class KeyguardStatusBarView extends RelativeLayout implements
private int mLayoutState = LAYOUT_NONE;
private SystemStatusAnimationScheduler mAnimationScheduler;
private FeatureFlags mFeatureFlags;
/**
* Draw this many pixels into the left/right side of the cutout to optimally use the space
@@ -142,6 +144,7 @@ public class KeyguardStatusBarView extends RelativeLayout implements
loadBlockList();
mBatteryController = Dependency.get(BatteryController.class);
mAnimationScheduler = Dependency.get(SystemStatusAnimationScheduler.class);
mFeatureFlags = Dependency.get(FeatureFlags.class);
}
@Override
@@ -364,7 +367,7 @@ public class KeyguardStatusBarView extends RelativeLayout implements
userInfoController.addCallback(this);
userInfoController.reloadUserInfo();
Dependency.get(ConfigurationController.class).addCallback(this);
mIconManager = new TintedIconManager(findViewById(R.id.statusIcons));
mIconManager = new TintedIconManager(findViewById(R.id.statusIcons), mFeatureFlags);
mIconManager.setBlockList(mBlockedIcons);
Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager);
mAnimationScheduler.addCallback(this);

View File

@@ -1185,7 +1185,8 @@ public class StatusBar extends SystemUI implements DemoMode,
mOngoingCallController,
mAnimationScheduler,
mStatusBarLocationPublisher,
mNotificationIconAreaController),
mNotificationIconAreaController,
mFeatureFlags),
CollapsedStatusBarFragment.TAG)
.commit();

View File

@@ -38,6 +38,7 @@ import com.android.systemui.R;
import com.android.systemui.demomode.DemoModeCommandReceiver;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
@@ -121,8 +122,8 @@ public interface StatusBarIconController {
private final DarkIconDispatcher mDarkIconDispatcher;
private int mIconHPadding;
public DarkIconManager(LinearLayout linearLayout) {
super(linearLayout);
public DarkIconManager(LinearLayout linearLayout, FeatureFlags featureFlags) {
super(linearLayout, featureFlags);
mIconHPadding = mContext.getResources().getDimensionPixelSize(
R.dimen.status_bar_icon_padding);
mDarkIconDispatcher = Dependency.get(DarkIconDispatcher.class);
@@ -182,8 +183,8 @@ public interface StatusBarIconController {
class TintedIconManager extends IconManager {
private int mColor;
public TintedIconManager(ViewGroup group) {
super(group);
public TintedIconManager(ViewGroup group, FeatureFlags featureFlags) {
super(group, featureFlags);
}
@Override
@@ -218,6 +219,7 @@ public interface StatusBarIconController {
* Turns info from StatusBarIconController into ImageViews in a ViewGroup.
*/
class IconManager implements DemoModeCommandReceiver {
private final FeatureFlags mFeatureFlags;
protected final ViewGroup mGroup;
protected final Context mContext;
protected final int mIconSize;
@@ -231,7 +233,8 @@ public interface StatusBarIconController {
protected ArrayList<String> mBlockList = new ArrayList<>();
public IconManager(ViewGroup group) {
public IconManager(ViewGroup group, FeatureFlags featureFlags) {
mFeatureFlags = featureFlags;
mGroup = group;
mContext = group.getContext();
mIconSize = mContext.getResources().getDimensionPixelSize(
@@ -332,7 +335,8 @@ public interface StatusBarIconController {
}
private StatusBarMobileView onCreateStatusBarMobileView(String slot) {
StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, slot);
StatusBarMobileView view = StatusBarMobileView.fromContext(
mContext, slot, mFeatureFlags.isCombinedStatusBarSignalIconsEnabled());
return view;
}
@@ -452,7 +456,7 @@ public interface StatusBarIconController {
}
protected DemoStatusIcons createDemoStatusIcons() {
return new DemoStatusIcons((LinearLayout) mGroup, mIconSize);
return new DemoStatusIcons((LinearLayout) mGroup, mIconSize, mFeatureFlags);
}
}
}

View File

@@ -25,6 +25,7 @@ import android.util.Log;
import com.android.settingslib.mobile.TelephonyIcons;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
@@ -63,6 +64,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
private final Handler mHandler = Handler.getMain();
private final CarrierConfigTracker mCarrierConfigTracker;
private final TunerService mTunerService;
private final FeatureFlags mFeatureFlags;
private boolean mHideAirplane;
private boolean mHideMobile;
@@ -82,9 +84,15 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
private WifiIconState mWifiIconState = new WifiIconState();
@Inject
public StatusBarSignalPolicy(Context context, StatusBarIconController iconController,
CarrierConfigTracker carrierConfigTracker, NetworkController networkController,
SecurityController securityController, TunerService tunerService) {
public StatusBarSignalPolicy(
Context context,
StatusBarIconController iconController,
CarrierConfigTracker carrierConfigTracker,
NetworkController networkController,
SecurityController securityController,
TunerService tunerService,
FeatureFlags featureFlags
) {
mContext = context;
mIconController = iconController;
@@ -92,6 +100,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
mNetworkController = networkController;
mSecurityController = securityController;
mTunerService = tunerService;
mFeatureFlags = featureFlags;
mSlotAirplane = mContext.getString(com.android.internal.R.string.status_bar_airplane);
mSlotMobile = mContext.getString(com.android.internal.R.string.status_bar_mobile);
@@ -365,6 +374,9 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
@Override
public void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork,
boolean noNetworksAvailable) {
if (!mFeatureFlags.isCombinedStatusBarSignalIconsEnabled()) {
return;
}
if (DEBUG) {
Log.d(TAG, "setConnectivityStatus: "
+ "noDefaultNetwork = " + noDefaultNetwork + ","

View File

@@ -42,7 +42,6 @@ import android.telephony.ims.ImsRegistrationAttributes;
import android.telephony.ims.RegistrationManager.RegistrationCallback;
import android.text.Html;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -58,6 +57,7 @@ import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults;
import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.net.SignalStrengthUtil;
import com.android.systemui.R;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
@@ -85,7 +85,8 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
private final String mNetworkNameDefault;
private final String mNetworkNameSeparator;
private final ContentObserver mObserver;
private final boolean mProviderModel;
private final boolean mProviderModelBehavior;
private final boolean mProviderModelSetting;
private final Handler mReceiverHandler;
private int mImsType = IMS_TYPE_WWAN;
// Save entire info for logging, we only use the id.
@@ -122,11 +123,19 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
// TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
// need listener lists anymore.
public MobileSignalController(Context context, Config config, boolean hasMobileData,
TelephonyManager phone, CallbackHandler callbackHandler,
NetworkControllerImpl networkController, SubscriptionInfo info,
SubscriptionDefaults defaults, Looper receiverLooper,
CarrierConfigTracker carrierConfigTracker) {
public MobileSignalController(
Context context,
Config config,
boolean hasMobileData,
TelephonyManager phone,
CallbackHandler callbackHandler,
NetworkControllerImpl networkController,
SubscriptionInfo info,
SubscriptionDefaults defaults,
Looper receiverLooper,
CarrierConfigTracker carrierConfigTracker,
FeatureFlags featureFlags
) {
super("MobileSignalController(" + info.getSubscriptionId() + ")", context,
NetworkCapabilities.TRANSPORT_CELLULAR, callbackHandler,
networkController);
@@ -233,8 +242,8 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
mImsMmTelManager = ImsMmTelManager.createForSubscriptionId(info.getSubscriptionId());
mMobileStatusTracker = new MobileStatusTracker(mPhone, receiverLooper,
info, mDefaults, mCallback);
mProviderModel = FeatureFlagUtils.isEnabled(
mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
mProviderModelBehavior = featureFlags.isCombinedStatusBarSignalIconsEnabled();
mProviderModelSetting = featureFlags.isProviderModelSettingEnabled();
}
public void setConfiguration(Config config) {
@@ -279,7 +288,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
mContext.getContentResolver().registerContentObserver(Global.getUriFor(
Global.MOBILE_DATA + mSubscriptionInfo.getSubscriptionId()),
true, mObserver);
if (mProviderModel) {
if (mProviderModelBehavior) {
mReceiverHandler.post(mTryRegisterIms);
}
}
@@ -380,7 +389,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|| (mCurrentState.iconGroup == TelephonyIcons.NOT_DEFAULT_DATA))
&& mCurrentState.userSetup;
if (mProviderModel) {
if (mProviderModelBehavior) {
// Show icon in QS when we are connected or data is disabled.
boolean showDataIcon = mCurrentState.dataConnected || dataDisabled;
@@ -423,13 +432,26 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
IconState qsIcon = null;
CharSequence description = null;
// Only send data sim callbacks to QS.
if (mCurrentState.dataSim) {
qsTypeIcon =
(showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.qsDataType : 0;
qsIcon = new IconState(mCurrentState.enabled
&& !mCurrentState.isEmergency, getQsCurrentIconId(), contentDescription);
description = mCurrentState.isEmergency ? null : mCurrentState.networkName;
if (mProviderModelSetting) {
if (mCurrentState.dataSim && mCurrentState.isDefault) {
qsTypeIcon =
(showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.qsDataType : 0;
qsIcon = new IconState(
mCurrentState.enabled && !mCurrentState.isEmergency,
getQsCurrentIconId(), contentDescription);
description = mCurrentState.isEmergency ? null : mCurrentState.networkName;
}
} else {
if (mCurrentState.dataSim) {
qsTypeIcon =
(showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.qsDataType : 0;
qsIcon = new IconState(
mCurrentState.enabled && !mCurrentState.isEmergency,
getQsCurrentIconId(), contentDescription);
description = mCurrentState.isEmergency ? null : mCurrentState.networkName;
}
}
boolean activityIn = mCurrentState.dataConnected
&& !mCurrentState.carrierNetworkChangeMode
&& mCurrentState.activityIn;
@@ -585,7 +607,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
// 1. The first valid voice state has been received
// 2. The voice state has been changed and either the last or current state is
// ServiceState.STATE_IN_SERVICE
if (mProviderModel
if (mProviderModelBehavior
&& lastVoiceState != currentVoiceState
&& (lastVoiceState == -1
|| (lastVoiceState == ServiceState.STATE_IN_SERVICE
@@ -659,7 +681,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
}
void notifyWifiLevelChange(int level) {
if (!mProviderModel) {
if (!mProviderModelBehavior) {
return;
}
mLastWlanLevel = level;
@@ -674,7 +696,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
}
void notifyDefaultMobileLevelChange(int level) {
if (!mProviderModel) {
if (!mProviderModelBehavior) {
return;
}
mLastWlanCrossSimLevel = level;
@@ -689,7 +711,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
}
void notifyMobileLevelChangeIfNecessary(SignalStrength signalStrength) {
if (!mProviderModel) {
if (!mProviderModelBehavior) {
return;
}
int newLevel = getSignalLevel(signalStrength);

View File

@@ -50,7 +50,6 @@ import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.MathUtils;
import android.util.SparseArray;
@@ -72,6 +71,7 @@ import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.demomode.DemoMode;
import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.util.CarrierConfigTracker;
@@ -121,9 +121,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
private final BroadcastDispatcher mBroadcastDispatcher;
private final DemoModeController mDemoModeController;
private final Object mLock = new Object();
private final boolean mProviderModel;
private final boolean mProviderModelBehavior;
private final boolean mProviderModelSetting;
private Config mConfig;
private final CarrierConfigTracker mCarrierConfigTracker;
private final FeatureFlags mFeatureFlags;
private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener;
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -215,7 +217,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
NetworkScoreManager networkScoreManager,
AccessPointControllerImpl accessPointController,
DemoModeController demoModeController,
CarrierConfigTracker carrierConfigTracker) {
CarrierConfigTracker carrierConfigTracker,
FeatureFlags featureFlags) {
this(context, connectivityManager,
telephonyManager,
telephonyListenerManager,
@@ -232,7 +235,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
deviceProvisionedController,
broadcastDispatcher,
demoModeController,
carrierConfigTracker);
carrierConfigTracker,
featureFlags);
mReceiverHandler.post(mRegisterListeners);
}
@@ -251,7 +255,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
DeviceProvisionedController deviceProvisionedController,
BroadcastDispatcher broadcastDispatcher,
DemoModeController demoModeController,
CarrierConfigTracker carrierConfigTracker) {
CarrierConfigTracker carrierConfigTracker,
FeatureFlags featureFlags
) {
mContext = context;
mTelephonyListenerManager = telephonyListenerManager;
mConfig = config;
@@ -268,6 +274,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mHasMobileDataFeature = telephonyManager.isDataCapable();
mDemoModeController = demoModeController;
mCarrierConfigTracker = carrierConfigTracker;
mFeatureFlags = featureFlags;
// telephony
mPhone = telephonyManager;
@@ -288,7 +295,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
});
mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
mCallbackHandler, this, mWifiManager, mConnectivityManager, networkScoreManager);
mCallbackHandler, this, mWifiManager, mConnectivityManager, networkScoreManager,
mFeatureFlags);
mEthernetSignalController = new EthernetSignalController(mContext, mCallbackHandler, this);
@@ -415,8 +423,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
};
mDemoModeController.addCallback(this);
mProviderModel = FeatureFlagUtils.isEnabled(
mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
mProviderModelBehavior = mFeatureFlags.isCombinedStatusBarSignalIconsEnabled();
mProviderModelSetting = mFeatureFlags.isProviderModelSettingEnabled();
}
private final Runnable mClearForceValidated = () -> {
@@ -687,7 +695,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
cb.setIsAirplaneMode(new IconState(mAirplaneMode,
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
cb.setNoSims(mHasNoSubs, mSimDetected);
if (mProviderModel) {
if (mProviderModelBehavior) {
cb.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition, mNoNetworksAvailable);
}
mWifiSignalController.notifyListeners(cb);
@@ -695,7 +703,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
for (int i = 0; i < mMobileSignalControllers.size(); i++) {
MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
mobileSignalController.notifyListeners(cb);
if (mProviderModel) {
if (mProviderModelBehavior) {
mobileSignalController.refreshCallIndicator(cb);
}
}
@@ -796,7 +804,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
for (int i = 0; i < mMobileSignalControllers.size(); i++) {
MobileSignalController controller = mMobileSignalControllers.valueAt(i);
controller.setConfiguration(mConfig);
if (mProviderModel) {
if (mProviderModelBehavior) {
controller.refreshCallIndicator(mCallbackHandler);
}
}
@@ -912,7 +920,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
MobileSignalController controller = new MobileSignalController(mContext, mConfig,
mHasMobileDataFeature, mPhone.createForSubscriptionId(subId),
mCallbackHandler, this, subscriptions.get(i),
mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker);
mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
mFeatureFlags);
controller.setUserSetupComplete(mUserSetup);
mMobileSignalControllers.put(subId, controller);
if (subscriptions.get(i).getSimSlotIndex() == 0) {
@@ -1058,10 +1067,10 @@ public class NetworkControllerImpl extends BroadcastReceiver
|| mValidatedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
pushConnectivityToSignals();
if (mProviderModel) {
if (mProviderModelBehavior) {
mNoDefaultNetwork = !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_CELLULAR)
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
mCallbackHandler.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition,
mNoNetworksAvailable);
for (int i = 0; i < mMobileSignalControllers.size(); i++) {
@@ -1069,6 +1078,13 @@ public class NetworkControllerImpl extends BroadcastReceiver
mobileSignalController.updateNoCallingState();
}
notifyAllListeners();
} else if (mProviderModelSetting) {
// TODO(b/191903788): Replace the flag name once the new flag is added.
mNoDefaultNetwork = !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_CELLULAR)
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
&& !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
mCallbackHandler.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition,
mNoNetworksAvailable);
}
}
@@ -1376,7 +1392,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
MobileSignalController controller = new MobileSignalController(mContext,
mConfig, mHasMobileDataFeature,
mPhone.createForSubscriptionId(info.getSubscriptionId()), mCallbackHandler, this,
info, mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker);
info, mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
mFeatureFlags);
mMobileSignalControllers.put(id, controller);
controller.getState().userSetup = true;
return info;

View File

@@ -27,7 +27,6 @@ import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
import android.text.Html;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.SignalIcon.IconGroup;
@@ -37,6 +36,7 @@ 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.FeatureFlags;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
@@ -52,12 +52,17 @@ public class WifiSignalController extends
private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI;
private final MobileIconGroup mCarrierMergedWifiIconGroup = TelephonyIcons.CARRIER_MERGED_WIFI;
private final WifiManager mWifiManager;
private final boolean mProviderModel;
private final boolean mProviderModelSetting;
public WifiSignalController(Context context, boolean hasMobileDataFeature,
CallbackHandler callbackHandler, NetworkControllerImpl networkController,
WifiManager wifiManager, ConnectivityManager connectivityManager,
NetworkScoreManager networkScoreManager) {
public WifiSignalController(
Context context,
boolean hasMobileDataFeature,
CallbackHandler callbackHandler,
NetworkControllerImpl networkController,
WifiManager wifiManager,
ConnectivityManager connectivityManager,
NetworkScoreManager networkScoreManager,
FeatureFlags featureFlags) {
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
callbackHandler, networkController);
mWifiManager = wifiManager;
@@ -70,8 +75,7 @@ public class WifiSignalController extends
new WifiTrafficStateCallback());
}
mCurrentState.iconGroup = mLastState.iconGroup = mUnmergedWifiIconGroup;
mProviderModel = FeatureFlagUtils.isEnabled(
mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
mProviderModelSetting = featureFlags.isProviderModelSettingEnabled();
}
@Override
@@ -108,7 +112,7 @@ public class WifiSignalController extends
if (mCurrentState.inetCondition == 0) {
contentDescription += ("," + mContext.getString(R.string.data_connection_no_internet));
}
if (mProviderModel) {
if (mProviderModelSetting) {
IconState statusIcon = new IconState(
wifiVisible, getCurrentIconId(), contentDescription);
IconState qsIcon = null;

View File

@@ -39,7 +39,6 @@ import android.os.Looper;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.FeatureFlagUtils;
import android.view.View;
import androidx.annotation.Nullable;
@@ -65,6 +64,7 @@ import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.phone.AutoTileManager;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
@@ -140,9 +140,9 @@ public class QSTileHostTest extends SysuiTestCase {
// TODO(b/174753536): Remove the mMockingSession when
// FeatureFlagUtils.SETTINGS_PROVIDER_MODEL is removed.
mMockingSession = ExtendedMockito.mockitoSession().strictness(Strictness.LENIENT)
.mockStatic(FeatureFlagUtils.class).startMocking();
ExtendedMockito.doReturn(false).when(() -> FeatureFlagUtils.isEnabled(mContext,
FeatureFlagUtils.SETTINGS_PROVIDER_MODEL));
.mockStatic(FeatureFlags.class).startMocking();
ExtendedMockito.doReturn(false)
.when(() -> FeatureFlags.isProviderModelSettingEnabled(mContext));
MockitoAnnotations.initMocks(this);
mLooper = TestableLooper.get(this);
mHandler = new Handler(mLooper.getLooper());

View File

@@ -32,6 +32,7 @@ import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.privacy.logging.PrivacyLogger
import com.android.systemui.qs.carrier.QSCarrierGroup
import com.android.systemui.qs.carrier.QSCarrierGroupController
import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.statusbar.policy.Clock
@@ -90,6 +91,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
private lateinit var mockView: View
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private lateinit var context: Context
@Mock
private lateinit var featureFlags: FeatureFlags
private val qsExpansionPathInterpolator = QSExpansionPathInterpolator()
@@ -117,7 +120,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
privacyLogger,
colorExtractor,
privacyDialogController,
qsExpansionPathInterpolator
qsExpansionPathInterpolator,
featureFlags
)
}

View File

@@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest;
import com.android.keyguard.CarrierTextManager;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.util.CarrierConfigTracker;
@@ -70,6 +71,7 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
@Mock
private CarrierConfigTracker mCarrierConfigTracker;
private TestableLooper mTestableLooper;
@Mock private FeatureFlags mFeatureFlags;
@Before
public void setup() throws Exception {
@@ -102,7 +104,8 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
mQSCarrierGroupController = new QSCarrierGroupController.Builder(
mActivityStarter, handler, TestableLooper.get(this).getLooper(),
mNetworkController, mCarrierTextControllerBuilder, mContext, mCarrierConfigTracker)
mNetworkController, mCarrierTextControllerBuilder, mContext, mCarrierConfigTracker,
mFeatureFlags)
.setQSCarrierGroup(mQSCarrierGroup)
.build();

View File

@@ -62,14 +62,14 @@ public class QSCarrierTest extends SysuiTestCase {
@Test
public void testUpdateState_first() {
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
assertTrue(mQSCarrier.updateState(c));
}
@Test
public void testUpdateState_same() {
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
assertTrue(mQSCarrier.updateState(c));
assertFalse(mQSCarrier.updateState(c));
@@ -77,7 +77,7 @@ public class QSCarrierTest extends SysuiTestCase {
@Test
public void testUpdateState_changed() {
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
assertTrue(mQSCarrier.updateState(c));

View File

@@ -60,6 +60,7 @@ import com.android.systemui.plugins.qs.QSIconView;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -113,6 +114,7 @@ public class TileQueryHelperTest extends SysuiTestCase {
private PackageManager mPackageManager;
@Mock
private UserTracker mUserTracker;
@Mock private FeatureFlags mFeatureFlags;
@Captor
private ArgumentCaptor<List<TileQueryHelper.TileInfo>> mCaptor;
@@ -150,7 +152,8 @@ public class TileQueryHelperTest extends SysuiTestCase {
FakeSystemClock clock = new FakeSystemClock();
mMainExecutor = new FakeExecutor(clock);
mBgExecutor = new FakeExecutor(clock);
mTileQueryHelper = new TileQueryHelper(mContext, mUserTracker, mMainExecutor, mBgExecutor);
mTileQueryHelper = new TileQueryHelper(
mContext, mUserTracker, mMainExecutor, mBgExecutor, mFeatureFlags);
mTileQueryHelper.setListener(mListener);
}

View File

@@ -38,6 +38,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
@@ -229,7 +230,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
mOngoingCallController,
mAnimationScheduler,
mLocationPublisher,
mMockNotificationAreaController);
mMockNotificationAreaController,
mock(FeatureFlags.class));
}
private void setUpNotificationIconAreaController() {

View File

@@ -31,6 +31,7 @@ import androidx.test.filters.SmallTest;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
@@ -66,7 +67,7 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
@Test
public void testSetCalledOnAdd_DarkIconManager() {
LinearLayout layout = new LinearLayout(mContext);
TestDarkIconManager manager = new TestDarkIconManager(layout);
TestDarkIconManager manager = new TestDarkIconManager(layout, mock(FeatureFlags.class));
testCallOnAdd_forManager(manager);
}
@@ -103,8 +104,8 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
private static class TestDarkIconManager extends DarkIconManager
implements TestableIconManager {
TestDarkIconManager(LinearLayout group) {
super(group);
TestDarkIconManager(LinearLayout group, FeatureFlags featureFlags) {
super(group, featureFlags);
}
@Override
@@ -139,7 +140,7 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
private static class TestIconManager extends IconManager implements TestableIconManager {
TestIconManager(ViewGroup group) {
super(group);
super(group, mock(FeatureFlags.class));
}
@Override

View File

@@ -56,7 +56,6 @@ import android.telephony.TelephonyDisplayInfo;
import android.telephony.TelephonyManager;
import android.testing.TestableLooper;
import android.testing.TestableResources;
import android.util.FeatureFlagUtils;
import android.util.Log;
import androidx.test.InstrumentationRegistry;
@@ -71,6 +70,7 @@ import com.android.settingslib.net.DataUsageController;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
@@ -127,6 +127,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
protected DemoModeController mDemoModeController;
protected CarrierConfigTracker mCarrierConfigTracker;
protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
protected FeatureFlags mFeatureFlags;
protected int mSubId;
@@ -157,9 +158,13 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
@Before
public void setUp() throws Exception {
mMockingSession = ExtendedMockito.mockitoSession().strictness(Strictness.LENIENT)
.mockStatic(FeatureFlagUtils.class).startMocking();
ExtendedMockito.doReturn(true).when(() -> FeatureFlagUtils.isEnabled(mContext,
FeatureFlagUtils.SETTINGS_PROVIDER_MODEL));
.mockStatic(FeatureFlags.class).startMocking();
ExtendedMockito.doReturn(true).when(() ->
FeatureFlags.isProviderModelSettingEnabled(mContext));
mFeatureFlags = mock(FeatureFlags.class);
when(mFeatureFlags.isCombinedStatusBarSignalIconsEnabled()).thenReturn(false);
when(mFeatureFlags.isProviderModelSettingEnabled()).thenReturn(true);
mInstrumentation = InstrumentationRegistry.getInstrumentation();
Settings.Global.putInt(mContext.getContentResolver(), Global.AIRPLANE_MODE_ON, 0);
@@ -235,7 +240,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockProvisionController,
mMockBd,
mDemoModeController,
mCarrierConfigTracker);
mCarrierConfigTracker,
mFeatureFlags);
setupNetworkController();
// Trigger blank callbacks to always get the current state (some tests don't trigger
@@ -303,7 +309,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController,
mCarrierConfigTracker);
mCarrierConfigTracker, mFeatureFlags);
setupNetworkController();
@@ -571,13 +577,13 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
boolean cutOut) {
verifyLastMobileDataIndicators(
visible, icon, typeIcon, qsVisible, qsIcon, qsTypeIcon, dataIn, dataOut, cutOut,
null, null);
null, null, visible);
}
protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon,
boolean qsVisible, int qsIcon, int qsTypeIcon, boolean dataIn, boolean dataOut,
boolean cutOut, CharSequence typeContentDescription,
CharSequence typeContentDescriptionHtml) {
CharSequence typeContentDescriptionHtml, boolean showQs) {
ArgumentCaptor<MobileDataIndicators> indicatorsArg =
ArgumentCaptor.forClass(MobileDataIndicators.class);
ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
@@ -606,7 +612,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
assertEquals("Signal icon in status bar", state, expected.statusIcon.icon);
assertEquals("Visibility in status bar", visible, expected.statusIcon.visible);
if (visible) {
if (showQs) {
assertEquals("Visibility in quick settings", qsVisible, expected.qsIcon.visible);
assertEquals("Signal icon in quick settings", state, expected.qsIcon.icon);
} else {

View File

@@ -113,7 +113,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController,
mock(CarrierConfigTracker.class));
mock(CarrierConfigTracker.class), mFeatureFlags);
setupNetworkController();
setupDefaultSignal();
@@ -133,9 +133,9 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
NetworkCapabilities.TRANSPORT_CELLULAR, false, false, null);
// Verify that a SignalDrawable with a cut out is used to display data disabled.
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, 0,
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
false, true, NO_DATA_STRING, NO_DATA_STRING);
false, true, NO_DATA_STRING, NO_DATA_STRING, false);
}
@Test
@@ -148,9 +148,9 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
NetworkCapabilities.TRANSPORT_CELLULAR, false, false, null);
// Verify that a SignalDrawable with a cut out is used to display data disabled.
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, 0,
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
false, true, NO_DATA_STRING, NO_DATA_STRING);
false, true, NO_DATA_STRING, NO_DATA_STRING, false);
}
@Test
@@ -164,9 +164,9 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
NetworkCapabilities.TRANSPORT_CELLULAR, false, false, null);
// Verify that a SignalDrawable with a cut out is used to display data disabled.
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, 0,
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING);
false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING, false);
}
@Test
@@ -180,9 +180,9 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
NetworkCapabilities.TRANSPORT_CELLULAR, false, false, null);
// Verify that a SignalDrawable with a cut out is used to display data disabled.
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, 0,
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING);
false, false, NOT_DEFAULT_DATA_STRING, NOT_DEFAULT_DATA_STRING, false);
}
@Test
@@ -198,8 +198,8 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
TestableLooper.get(this).processAllMessages();
// Don't show the X until the device is setup.
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false, false);
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false, false, false, null, null, false);
}
@Test
@@ -216,8 +216,8 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
setConnectivityViaCallbackInNetworkController(
NetworkCapabilities.TRANSPORT_CELLULAR, false, false, null);
verifyLastMobileDataIndicators(false, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_G,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false, false);
verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_G,
true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false, false, false, null, null, false);
}
@Test

View File

@@ -67,7 +67,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController, mock(CarrierConfigTracker.class));
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags);
setupNetworkController();
verifyLastMobileDataIndicators(false, -1, 0);
@@ -87,7 +87,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController, mock(CarrierConfigTracker.class));
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags);
mNetworkController.registerListeners();
// Wait for the main looper to execute the previous command
@@ -155,7 +155,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController, mock(CarrierConfigTracker.class));
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags);
setupNetworkController();
// No Subscriptions.
@@ -269,7 +269,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
setConnectivityViaCallbackInNetworkController(
NetworkCapabilities.TRANSPORT_WIFI, true, true, mock(WifiInfo.class));
verifyLastMobileDataIndicators(false, DEFAULT_LEVEL, 0);
verifyLastMobileDataIndicators(true, DEFAULT_LEVEL, 0);
}
// Some tests of actual NetworkController code, just internals not display stuff

View File

@@ -256,6 +256,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
@Test
public void testCallStrengh() {
if (true) return;
String testSsid = "Test SSID";
setWifiEnabled(true);
setWifiState(true, testSsid);
@@ -278,6 +279,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
@Test
public void testNonPrimaryWiFi() {
if (true) return;
String testSsid = "Test SSID";
setWifiEnabled(true);
setWifiState(true, testSsid);