Merge "Revert systemui status bar provider model behavior" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-02 05:13:01 +00:00
committed by Android (Google) Code Review
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);