Merge changes from topic "caitlinshk-wifi-flag" into udc-qpr-dev am: 9a06bac5b5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24025523

Change-Id: Ib4de8b566453693086527ce4a6951cd432c69237
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-07-12 19:11:23 +00:00
committed by Automerger Merge Worker
18 changed files with 21 additions and 728 deletions

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2018, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<com.android.systemui.statusbar.StatusBarWifiView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/wifi_combo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical" >
<include layout="@layout/status_bar_wifi_group_inner" />
</com.android.systemui.statusbar.StatusBarWifiView>

View File

@@ -30,9 +30,8 @@ import android.view.View;
import androidx.annotation.NonNull;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarLocation;
@@ -130,7 +129,6 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
TunerService tunerService,
@Main Handler mainHandler,
ContentResolver contentResolver,
FeatureFlags featureFlags,
BatteryController batteryController) {
super(view);
mLocation = location;
@@ -142,7 +140,8 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
mBatteryController = batteryController;
mView.setBatteryEstimateFetcher(mBatteryController::getEstimatedTimeRemainingString);
mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON));
mView.setDisplayShieldEnabled(
getContext().getResources().getBoolean(R.bool.flag_battery_shield_icon));
mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery);
mSettingObserver = new SettingObserver(mMainHandler);

View File

@@ -372,22 +372,10 @@ object Flags {
// TODO(b/256614753): Tracking Bug
val NEW_STATUS_BAR_MOBILE_ICONS = releasedFlag(606, "new_status_bar_mobile_icons")
// TODO(b/256614210): Tracking Bug
val NEW_STATUS_BAR_WIFI_ICON = releasedFlag(607, "new_status_bar_wifi_icon")
// TODO(b/256614751): Tracking Bug
val NEW_STATUS_BAR_MOBILE_ICONS_BACKEND =
unreleasedFlag(608, "new_status_bar_mobile_icons_backend", teamfood = true)
// TODO(b/256613548): Tracking Bug
val NEW_STATUS_BAR_WIFI_ICON_BACKEND =
unreleasedFlag(609, "new_status_bar_wifi_icon_backend", teamfood = true)
// TODO(b/256623670): Tracking Bug
@JvmField
val BATTERY_SHIELD_ICON =
resourceBooleanFlag(610, R.bool.flag_battery_shield_icon, "battery_shield_icon")
// TODO(b/260881289): Tracking Bug
val NEW_STATUS_BAR_ICONS_DEBUG_COLORING =
unreleasedFlag(611, "new_status_bar_icons_debug_coloring")

View File

@@ -282,7 +282,6 @@ abstract class ShadeModule {
tunerService: TunerService,
@Main mainHandler: Handler,
contentResolver: ContentResolver,
featureFlags: FeatureFlags,
batteryController: BatteryController,
): BatteryMeterViewController {
return BatteryMeterViewController(
@@ -293,7 +292,6 @@ abstract class ShadeModule {
tunerService,
mainHandler,
contentResolver,
featureFlags,
batteryController,
)
}

View File

@@ -21,8 +21,8 @@ import android.widget.FrameLayout
/**
* A temporary base class that's shared between our old status bar connectivity view implementations
* ([StatusBarWifiView], [StatusBarMobileView]) and our new status bar implementations (
* [ModernStatusBarWifiView], [ModernStatusBarMobileView]).
* ([StatusBarMobileView]) and our new status bar implementations ([ModernStatusBarWifiView],
* [ModernStatusBarMobileView]).
*
* Once our refactor is over, we should be able to delete this go-between class and the old view
* class.

View File

@@ -1,249 +0,0 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar;
import static com.android.systemui.plugins.DarkIconDispatcher.getTint;
import static com.android.systemui.statusbar.StatusBarIconView.STATE_DOT;
import static com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN;
import static com.android.systemui.statusbar.StatusBarIconView.STATE_ICON;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.android.systemui.R;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import java.util.ArrayList;
/**
* Start small: StatusBarWifiView will be able to layout from a WifiIconState
*/
public class StatusBarWifiView extends BaseStatusBarFrameLayout implements DarkReceiver {
private static final String TAG = "StatusBarWifiView";
/// Used to show etc dots
private StatusBarIconView mDotView;
/// Contains the main icon layout
private LinearLayout mWifiGroup;
private ImageView mWifiIcon;
private ImageView mIn;
private ImageView mOut;
private View mInoutContainer;
private View mSignalSpacer;
private View mAirplaneSpacer;
private WifiIconState mState;
private String mSlot;
@StatusBarIconView.VisibleState
private int mVisibleState = STATE_HIDDEN;
public static StatusBarWifiView fromContext(Context context, String slot) {
LayoutInflater inflater = LayoutInflater.from(context);
StatusBarWifiView v = (StatusBarWifiView) inflater.inflate(R.layout.status_bar_wifi_group, null);
v.setSlot(slot);
v.init();
v.setVisibleState(STATE_ICON);
return v;
}
public StatusBarWifiView(Context context) {
super(context);
}
public StatusBarWifiView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StatusBarWifiView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setSlot(String slot) {
mSlot = slot;
}
@Override
public void setStaticDrawableColor(int color) {
ColorStateList list = ColorStateList.valueOf(color);
mWifiIcon.setImageTintList(list);
mIn.setImageTintList(list);
mOut.setImageTintList(list);
mDotView.setDecorColor(color);
}
@Override
public void setDecorColor(int color) {
mDotView.setDecorColor(color);
}
@Override
public String getSlot() {
return mSlot;
}
@Override
public boolean isIconVisible() {
return mState != null && mState.visible;
}
@Override
public void setVisibleState(@StatusBarIconView.VisibleState int state, boolean animate) {
if (state == mVisibleState) {
return;
}
mVisibleState = state;
switch (state) {
case STATE_ICON:
mWifiGroup.setVisibility(View.VISIBLE);
mDotView.setVisibility(View.GONE);
break;
case STATE_DOT:
mWifiGroup.setVisibility(View.GONE);
mDotView.setVisibility(View.VISIBLE);
break;
case STATE_HIDDEN:
default:
mWifiGroup.setVisibility(View.GONE);
mDotView.setVisibility(View.GONE);
break;
}
}
@Override
@StatusBarIconView.VisibleState
public int getVisibleState() {
return mVisibleState;
}
@Override
public void getDrawingRect(Rect outRect) {
super.getDrawingRect(outRect);
float translationX = getTranslationX();
float translationY = getTranslationY();
outRect.left += translationX;
outRect.right += translationX;
outRect.top += translationY;
outRect.bottom += translationY;
}
private void init() {
mWifiGroup = findViewById(R.id.wifi_group);
mWifiIcon = findViewById(R.id.wifi_signal);
mIn = findViewById(R.id.wifi_in);
mOut = findViewById(R.id.wifi_out);
mSignalSpacer = findViewById(R.id.wifi_signal_spacer);
mAirplaneSpacer = findViewById(R.id.wifi_airplane_spacer);
mInoutContainer = findViewById(R.id.inout_container);
initDotView();
}
private void initDotView() {
mDotView = new StatusBarIconView(mContext, mSlot, null);
mDotView.setVisibleState(STATE_DOT);
int width = mContext.getResources().getDimensionPixelSize(R.dimen.status_bar_icon_size_sp);
LayoutParams lp = new LayoutParams(width, width);
lp.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
addView(mDotView, lp);
}
public void applyWifiState(WifiIconState state) {
boolean requestLayout = false;
if (state == null) {
requestLayout = getVisibility() != View.GONE;
setVisibility(View.GONE);
mState = null;
} else if (mState == null) {
requestLayout = true;
mState = state.copy();
initViewState();
} else if (!mState.equals(state)) {
requestLayout = updateState(state.copy());
}
if (requestLayout) {
requestLayout();
}
}
private boolean updateState(WifiIconState state) {
setContentDescription(state.contentDescription);
if (mState.resId != state.resId && state.resId >= 0) {
mWifiIcon.setImageDrawable(mContext.getDrawable(state.resId));
}
mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
mOut.setVisibility(state.activityOut ? View.VISIBLE : View.GONE);
mInoutContainer.setVisibility(
(state.activityIn || state.activityOut) ? View.VISIBLE : View.GONE);
mAirplaneSpacer.setVisibility(state.airplaneSpacerVisible ? View.VISIBLE : View.GONE);
mSignalSpacer.setVisibility(state.signalSpacerVisible ? View.VISIBLE : View.GONE);
boolean needsLayout = state.activityIn != mState.activityIn
||state.activityOut != mState.activityOut;
if (mState.visible != state.visible) {
needsLayout |= true;
setVisibility(state.visible ? View.VISIBLE : View.GONE);
}
mState = state;
return needsLayout;
}
private void initViewState() {
setContentDescription(mState.contentDescription);
if (mState.resId >= 0) {
mWifiIcon.setImageDrawable(mContext.getDrawable(mState.resId));
}
mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
mOut.setVisibility(mState.activityOut ? View.VISIBLE : View.GONE);
mInoutContainer.setVisibility(
(mState.activityIn || mState.activityOut) ? View.VISIBLE : View.GONE);
mAirplaneSpacer.setVisibility(mState.airplaneSpacerVisible ? View.VISIBLE : View.GONE);
mSignalSpacer.setVisibility(mState.signalSpacerVisible ? View.VISIBLE : View.GONE);
setVisibility(mState.visible ? View.VISIBLE : View.GONE);
}
@Override
public void onDarkChanged(ArrayList<Rect> areas, float darkIntensity, int tint) {
int areaTint = getTint(areas, this, tint);
ColorStateList color = ColorStateList.valueOf(areaTint);
mWifiIcon.setImageTintList(color);
mIn.setImageTintList(color);
mOut.setImageTintList(color);
mDotView.setDecorColor(areaTint);
mDotView.setIconColor(areaTint, false);
}
@Override
public String toString() {
return "StatusBarWifiView(slot=" + mSlot + " state=" + mState + ")";
}
}

View File

@@ -18,10 +18,6 @@ package com.android.systemui.statusbar.connectivity;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_OUT;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import android.annotation.Nullable;
@@ -557,10 +553,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
mBroadcastDispatcher.unregisterReceiver(this);
}
public int getConnectedWifiLevel() {
return mWifiSignalController.getState().level;
}
@Override
public AccessPointController getAccessPointController() {
return mAccessPoints;
@@ -654,14 +646,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
return mWifiSignalController.isCarrierMergedWifi(subId);
}
boolean hasDefaultNetwork() {
return !mNoDefaultNetwork;
}
boolean isNonCarrierWifiNetworkAvailable() {
return !mNoNetworksAvailable;
}
boolean isEthernetDefault() {
return mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
}
@@ -1242,15 +1226,12 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
private boolean mDemoInetCondition;
private WifiState mDemoWifiState;
@Override
public void onDemoModeStarted() {
if (DEBUG) Log.d(TAG, "Entering demo mode");
unregisterListeners();
mDemoInetCondition = mInetCondition;
mDemoWifiState = mWifiSignalController.getState();
mDemoWifiState.ssid = "DemoMode";
}
@Override
@@ -1300,41 +1281,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
controller.updateConnectivity(connected, connected);
}
}
String wifi = args.getString("wifi");
if (wifi != null && !mStatusBarPipelineFlags.runNewWifiIconBackend()) {
boolean show = wifi.equals("show");
String level = args.getString("level");
if (level != null) {
mDemoWifiState.level = level.equals("null") ? -1
: Math.min(Integer.parseInt(level), WifiIcons.WIFI_LEVEL_COUNT - 1);
mDemoWifiState.connected = mDemoWifiState.level >= 0;
}
String activity = args.getString("activity");
if (activity != null) {
switch (activity) {
case "inout":
mWifiSignalController.setActivity(DATA_ACTIVITY_INOUT);
break;
case "in":
mWifiSignalController.setActivity(DATA_ACTIVITY_IN);
break;
case "out":
mWifiSignalController.setActivity(DATA_ACTIVITY_OUT);
break;
default:
mWifiSignalController.setActivity(DATA_ACTIVITY_NONE);
break;
}
} else {
mWifiSignalController.setActivity(DATA_ACTIVITY_NONE);
}
String ssid = args.getString("ssid");
if (ssid != null) {
mDemoWifiState.ssid = ssid;
}
mDemoWifiState.enabled = show;
mWifiSignalController.notifyListeners();
}
String sims = args.getString("sims");
if (sims != null && !mStatusBarPipelineFlags.useNewMobileIcons()) {
int num = MathUtils.constrain(Integer.parseInt(sims), 1, 8);

View File

@@ -35,11 +35,9 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
import com.android.systemui.statusbar.StatusIconDisplayable;
import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger;
import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView;
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel;
@@ -58,7 +56,6 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
private final ArrayList<ModernStatusBarMobileView> mModernMobileViews = new ArrayList<>();
private final int mIconSize;
private StatusBarWifiView mWifiView;
private ModernStatusBarWifiView mModernWifiView;
private boolean mDemoMode;
private int mColor;
@@ -238,36 +235,6 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
addView(v, 0, createLayoutParams());
}
public void addDemoWifiView(WifiIconState state) {
Log.d(TAG, "addDemoWifiView: ");
StatusBarWifiView view = StatusBarWifiView.fromContext(mContext, state.slot);
int viewIndex = getChildCount();
// If we have mobile views, put wifi before them
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if (child instanceof StatusBarMobileView
|| child instanceof ModernStatusBarMobileView) {
viewIndex = i;
break;
}
}
mWifiView = view;
mWifiView.applyWifiState(state);
mWifiView.setStaticDrawableColor(mColor);
addView(view, viewIndex, createLayoutParams());
}
public void updateWifiState(WifiIconState state) {
Log.d(TAG, "updateWifiState: ");
if (mWifiView == null) {
addDemoWifiView(state);
} else {
mWifiView.applyWifiState(state);
}
}
/**
* Add a new mobile icon view
*/
@@ -352,10 +319,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
public void onRemoveIcon(StatusIconDisplayable view) {
if (view.getSlot().equals("wifi")) {
if (view instanceof StatusBarWifiView) {
removeView(mWifiView);
mWifiView = null;
} else if (view instanceof ModernStatusBarWifiView) {
if (view instanceof ModernStatusBarWifiView) {
Log.d(TAG, "onRemoveIcon: removing modern wifi view");
removeView(mModernWifiView);
mModernWifiView = null;
@@ -409,9 +373,6 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
public void onDarkChanged(ArrayList<Rect> areas, float darkIntensity, int tint) {
setColor(DarkIconDispatcher.getTint(areas, mStatusIcons, tint));
if (mWifiView != null) {
mWifiView.onDarkChanged(areas, darkIntensity, tint);
}
if (mModernWifiView != null) {
mModernWifiView.onDarkChanged(areas, darkIntensity, tint);
}

View File

@@ -17,7 +17,6 @@ package com.android.systemui.statusbar.phone;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE_NEW;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI_NEW;
import android.annotation.Nullable;
@@ -43,12 +42,10 @@ import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.BaseStatusBarFrameLayout;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
import com.android.systemui.statusbar.StatusIconDisplayable;
import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter;
import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinder;
@@ -97,16 +94,9 @@ public interface StatusBarIconController {
*/
void setIcon(String slot, int resourceId, CharSequence contentDescription);
/** */
void setWifiIcon(String slot, WifiIconState state);
/**
* Sets up a wifi icon using the new data pipeline. No effect if the wifi icon has already been
* set up (inflated and added to the view hierarchy).
*
* This method completely replaces {@link #setWifiIcon} with the information from the new wifi
* data pipeline. Icons will automatically keep their state up to date, so we don't have to
* worry about funneling state objects through anymore.
*/
void setNewWifiIcon();
@@ -408,13 +398,7 @@ public interface StatusBarIconController {
mMobileIconsViewModel = null;
}
if (statusBarPipelineFlags.runNewWifiIconBackend()) {
// This starts the flow for the new pipeline, and will notify us of changes if
// {@link StatusBarPipelineFlags#useNewWifiIcon} is also true.
mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, mLocation);
} else {
mWifiViewModel = null;
}
mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, mLocation);
}
public boolean isDemoable() {
@@ -462,9 +446,6 @@ public interface StatusBarIconController {
case TYPE_ICON:
return addIcon(index, slot, blocked, holder.getIcon());
case TYPE_WIFI:
return addWifiIcon(index, slot, holder.getWifiState());
case TYPE_WIFI_NEW:
return addNewWifiIcon(index, slot);
@@ -487,29 +468,7 @@ public interface StatusBarIconController {
return view;
}
@VisibleForTesting
protected StatusIconDisplayable addWifiIcon(int index, String slot, WifiIconState state) {
if (mStatusBarPipelineFlags.useNewWifiIcon()) {
throw new IllegalStateException("Attempting to add a wifi icon while the new "
+ "icons are enabled is not supported");
}
final StatusBarWifiView view = onCreateStatusBarWifiView(slot);
view.applyWifiState(state);
mGroup.addView(view, index, onCreateLayoutParams());
if (mIsInDemoMode) {
mDemoStatusIcons.addDemoWifiView(state);
}
return view;
}
protected StatusIconDisplayable addNewWifiIcon(int index, String slot) {
if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
throw new IllegalStateException("Attempting to add a wifi icon using the new"
+ "pipeline, but the enabled flag is false.");
}
ModernStatusBarWifiView view = onCreateModernStatusBarWifiView(slot);
mGroup.addView(view, index, onCreateLayoutParams());
@@ -573,11 +532,6 @@ public interface StatusBarIconController {
return new StatusBarIconView(mContext, slot, null, blocked);
}
private StatusBarWifiView onCreateStatusBarWifiView(String slot) {
StatusBarWifiView view = StatusBarWifiView.fromContext(mContext, slot);
return view;
}
private ModernStatusBarWifiView onCreateModernStatusBarWifiView(String slot) {
return ModernStatusBarWifiView.constructAndBind(mContext, slot, mWifiViewModel);
}
@@ -640,9 +594,6 @@ public interface StatusBarIconController {
case TYPE_ICON:
onSetIcon(viewIndex, holder.getIcon());
return;
case TYPE_WIFI:
onSetWifiIcon(viewIndex, holder.getWifiState());
return;
case TYPE_MOBILE:
onSetMobileIcon(viewIndex, holder.getMobileState());
return;
@@ -655,23 +606,6 @@ public interface StatusBarIconController {
}
}
public void onSetWifiIcon(int viewIndex, WifiIconState state) {
View view = mGroup.getChildAt(viewIndex);
if (view instanceof StatusBarWifiView) {
((StatusBarWifiView) view).applyWifiState(state);
} else if (view instanceof ModernStatusBarWifiView) {
// ModernStatusBarWifiView will automatically apply state based on its callbacks, so
// we don't need to call applyWifiState.
} else {
throw new IllegalStateException("View at " + viewIndex + " must be of type "
+ "StatusBarWifiView or ModernStatusBarWifiView");
}
if (mIsInDemoMode) {
mDemoStatusIcons.updateWifiState(state);
}
}
public void onSetMobileIcon(int viewIndex, MobileIconState state) {
View view = mGroup.getChildAt(viewIndex);
if (view instanceof StatusBarMobileView) {
@@ -703,9 +637,7 @@ public interface StatusBarIconController {
mIsInDemoMode = true;
if (mDemoStatusIcons == null) {
mDemoStatusIcons = createDemoStatusIcons();
if (mStatusBarPipelineFlags.useNewWifiIcon()) {
mDemoStatusIcons.addModernWifiView(mWifiViewModel);
}
mDemoStatusIcons.addModernWifiView(mWifiViewModel);
}
mDemoStatusIcons.onDemoModeStarted();
}

View File

@@ -40,7 +40,6 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusIconDisplayable;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -201,36 +200,8 @@ public class StatusBarIconControllerImpl implements Tunable,
}
}
@Override
public void setWifiIcon(String slot, WifiIconState state) {
if (mStatusBarPipelineFlags.useNewWifiIcon()) {
Log.d(TAG, "ignoring old pipeline callback because the new wifi icon is enabled");
return;
}
if (state == null) {
removeIcon(slot, 0);
return;
}
StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, 0);
if (holder == null) {
holder = StatusBarIconHolder.fromWifiIconState(state);
setIcon(slot, holder);
} else {
holder.setWifiState(state);
handleSet(slot, holder);
}
}
@Override
public void setNewWifiIcon() {
if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
Log.d(TAG, "ignoring new pipeline callback because the new wifi icon is disabled");
return;
}
String slot = mContext.getString(com.android.internal.R.string.status_bar_wifi);
StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, /* tag= */ 0);
if (holder == null) {

View File

@@ -25,7 +25,6 @@ import android.os.UserHandle;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconViewModel;
import java.lang.annotation.Retention;
@@ -36,7 +35,6 @@ import java.lang.annotation.RetentionPolicy;
*/
public class StatusBarIconHolder {
public static final int TYPE_ICON = 0;
public static final int TYPE_WIFI = 1;
public static final int TYPE_MOBILE = 2;
/**
* TODO (b/249790733): address this once the new pipeline is in place
@@ -65,7 +63,6 @@ public class StatusBarIconHolder {
@IntDef({
TYPE_ICON,
TYPE_WIFI,
TYPE_MOBILE,
TYPE_MOBILE_NEW,
TYPE_WIFI_NEW
@@ -74,7 +71,6 @@ public class StatusBarIconHolder {
@interface IconType {}
private StatusBarIcon mIcon;
private WifiIconState mWifiState;
private MobileIconState mMobileState;
private @IconType int mType = TYPE_ICON;
private int mTag = 0;
@@ -83,7 +79,6 @@ public class StatusBarIconHolder {
public static String getTypeString(@IconType int type) {
switch(type) {
case TYPE_ICON: return "ICON";
case TYPE_WIFI: return "WIFI_OLD";
case TYPE_MOBILE: return "MOBILE_OLD";
case TYPE_MOBILE_NEW: return "MOBILE_NEW";
case TYPE_WIFI_NEW: return "WIFI_NEW";
@@ -101,25 +96,6 @@ public class StatusBarIconHolder {
return wrapper;
}
/** */
public static StatusBarIconHolder fromResId(
Context context,
int resId,
CharSequence contentDescription) {
StatusBarIconHolder holder = new StatusBarIconHolder();
holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(),
Icon.createWithResource( context, resId), 0, 0, contentDescription);
return holder;
}
/** */
public static StatusBarIconHolder fromWifiIconState(WifiIconState state) {
StatusBarIconHolder holder = new StatusBarIconHolder();
holder.mWifiState = state;
holder.mType = TYPE_WIFI;
return holder;
}
/** Creates a new holder with for the new wifi icon. */
public static StatusBarIconHolder forNewWifiIcon() {
StatusBarIconHolder holder = new StatusBarIconHolder();
@@ -177,15 +153,6 @@ public class StatusBarIconHolder {
mIcon = icon;
}
@Nullable
public WifiIconState getWifiState() {
return mWifiState;
}
public void setWifiState(WifiIconState state) {
mWifiState = state;
}
@Nullable
public MobileIconState getMobileState() {
return mMobileState;
@@ -199,8 +166,6 @@ public class StatusBarIconHolder {
switch (mType) {
case TYPE_ICON:
return mIcon.visible;
case TYPE_WIFI:
return mWifiState.visible;
case TYPE_MOBILE:
return mMobileState.visible;
case TYPE_MOBILE_NEW:
@@ -223,10 +188,6 @@ public class StatusBarIconHolder {
mIcon.visible = visible;
break;
case TYPE_WIFI:
mWifiState.visible = visible;
break;
case TYPE_MOBILE:
mMobileState.visible = visible;
break;

View File

@@ -30,7 +30,6 @@ import com.android.systemui.statusbar.connectivity.IconState;
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.SignalCallback;
import com.android.systemui.statusbar.connectivity.WifiIndicators;
import com.android.systemui.statusbar.policy.SecurityController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
@@ -51,7 +50,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
private final String mSlotAirplane;
private final String mSlotMobile;
private final String mSlotWifi;
private final String mSlotEthernet;
private final String mSlotVpn;
private final String mSlotNoCalling;
@@ -67,17 +65,14 @@ public class StatusBarSignalPolicy implements SignalCallback,
private boolean mHideAirplane;
private boolean mHideMobile;
private boolean mHideWifi;
private boolean mHideEthernet;
private boolean mActivityEnabled;
// Track as little state as possible, and only for padding purposes
private boolean mIsAirplaneMode = false;
private boolean mIsWifiEnabled = false;
private ArrayList<MobileIconState> mMobileStates = new ArrayList<>();
private ArrayList<CallIndicatorIconState> mCallIndicatorStates = new ArrayList<>();
private WifiIconState mWifiIconState = new WifiIconState();
private boolean mInitialized;
@Inject
@@ -99,7 +94,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
mSlotAirplane = mContext.getString(com.android.internal.R.string.status_bar_airplane);
mSlotMobile = mContext.getString(com.android.internal.R.string.status_bar_mobile);
mSlotWifi = mContext.getString(com.android.internal.R.string.status_bar_wifi);
mSlotEthernet = mContext.getString(com.android.internal.R.string.status_bar_ethernet);
mSlotVpn = mContext.getString(com.android.internal.R.string.status_bar_vpn);
mSlotNoCalling = mContext.getString(com.android.internal.R.string.status_bar_no_calling);
@@ -154,71 +148,19 @@ public class StatusBarSignalPolicy implements SignalCallback,
ArraySet<String> hideList = StatusBarIconController.getIconHideList(mContext, newValue);
boolean hideAirplane = hideList.contains(mSlotAirplane);
boolean hideMobile = hideList.contains(mSlotMobile);
boolean hideWifi = hideList.contains(mSlotWifi);
boolean hideEthernet = hideList.contains(mSlotEthernet);
if (hideAirplane != mHideAirplane || hideMobile != mHideMobile
|| hideEthernet != mHideEthernet || hideWifi != mHideWifi) {
|| hideEthernet != mHideEthernet) {
mHideAirplane = hideAirplane;
mHideMobile = hideMobile;
mHideEthernet = hideEthernet;
mHideWifi = hideWifi;
// Re-register to get new callbacks.
mNetworkController.removeCallback(this);
mNetworkController.addCallback(this);
}
}
@Override
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
if (DEBUG) {
Log.d(TAG, "setWifiIndicators: " + indicators);
}
boolean visible = indicators.statusIcon.visible && !mHideWifi;
boolean in = indicators.activityIn && mActivityEnabled && visible;
boolean out = indicators.activityOut && mActivityEnabled && visible;
mIsWifiEnabled = indicators.enabled;
WifiIconState newState = mWifiIconState.copy();
if (mWifiIconState.noDefaultNetwork && mWifiIconState.noNetworksAvailable
&& !mIsAirplaneMode) {
newState.visible = true;
newState.resId = R.drawable.ic_qs_no_internet_unavailable;
} else if (mWifiIconState.noDefaultNetwork && !mWifiIconState.noNetworksAvailable
&& (!mIsAirplaneMode || (mIsAirplaneMode && mIsWifiEnabled))) {
newState.visible = true;
newState.resId = R.drawable.ic_qs_no_internet_available;
} else {
newState.visible = visible;
newState.resId = indicators.statusIcon.icon;
newState.activityIn = in;
newState.activityOut = out;
newState.contentDescription = indicators.statusIcon.contentDescription;
MobileIconState first = getFirstMobileState();
newState.signalSpacerVisible = first != null && first.typeId != 0;
}
newState.slot = mSlotWifi;
newState.airplaneSpacerVisible = mIsAirplaneMode;
updateWifiIconWithState(newState);
mWifiIconState = newState;
}
private void updateShowWifiSignalSpacer(WifiIconState state) {
MobileIconState first = getFirstMobileState();
state.signalSpacerVisible = first != null && first.typeId != 0;
}
private void updateWifiIconWithState(WifiIconState state) {
if (DEBUG) Log.d(TAG, "WifiIconState: " + state == null ? "" : state.toString());
if (state.visible && state.resId > 0) {
mIconController.setWifiIcon(mSlotWifi, state);
mIconController.setIconVisibility(mSlotWifi, true);
} else {
mIconController.setIconVisibility(mSlotWifi, false);
}
}
@Override
public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
if (DEBUG) {
@@ -257,10 +199,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
return;
}
// Visibility of the data type indicator changed
boolean typeChanged = indicators.statusType != state.typeId
&& (indicators.statusType == 0 || state.typeId == 0);
state.visible = indicators.statusIcon.visible && !mHideMobile;
state.strengthId = indicators.statusIcon.icon;
state.typeId = indicators.statusType;
@@ -277,15 +215,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
}
// Always send a copy to maintain value type semantics
mIconController.setMobileIcons(mSlotMobile, MobileIconState.copyStates(mMobileStates));
if (typeChanged) {
WifiIconState wifiCopy = mWifiIconState.copy();
updateShowWifiSignalSpacer(wifiCopy);
if (!Objects.equals(wifiCopy, mWifiIconState)) {
updateWifiIconWithState(wifiCopy);
mWifiIconState = wifiCopy;
}
}
}
private CallIndicatorIconState getNoCallingState(int subId) {
@@ -308,15 +237,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
return null;
}
private MobileIconState getFirstMobileState() {
if (mMobileStates.size() > 0) {
return mMobileStates.get(0);
}
return null;
}
/**
* It is expected that a call to setSubs will be immediately followed by setMobileDataIndicators
* so we don't have to update the icon manager at this point, just remove the old ones
@@ -504,60 +424,6 @@ public class StatusBarSignalPolicy implements SignalCallback,
}
}
public static class WifiIconState extends SignalIconState{
public int resId;
public boolean airplaneSpacerVisible;
public boolean signalSpacerVisible;
public boolean noDefaultNetwork;
public boolean noValidatedNetwork;
public boolean noNetworksAvailable;
@Override
public boolean equals(Object o) {
// Skipping reference equality bc this should be more of a value type
if (o == null || getClass() != o.getClass()) {
return false;
}
if (!super.equals(o)) {
return false;
}
WifiIconState that = (WifiIconState) o;
return resId == that.resId
&& airplaneSpacerVisible == that.airplaneSpacerVisible
&& signalSpacerVisible == that.signalSpacerVisible
&& noDefaultNetwork == that.noDefaultNetwork
&& noValidatedNetwork == that.noValidatedNetwork
&& noNetworksAvailable == that.noNetworksAvailable;
}
public void copyTo(WifiIconState other) {
super.copyTo(other);
other.resId = resId;
other.airplaneSpacerVisible = airplaneSpacerVisible;
other.signalSpacerVisible = signalSpacerVisible;
other.noDefaultNetwork = noDefaultNetwork;
other.noValidatedNetwork = noValidatedNetwork;
other.noNetworksAvailable = noNetworksAvailable;
}
public WifiIconState copy() {
WifiIconState newState = new WifiIconState();
copyTo(newState);
return newState;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(),
resId, airplaneSpacerVisible, signalSpacerVisible, noDefaultNetwork,
noValidatedNetwork, noNetworksAvailable);
}
@Override public String toString() {
return "WifiIconState(resId=" + resId + ", visible=" + visible + ")";
}
}
/**
* A little different. This one delegates to SignalDrawable instead of a specific resId
*/

View File

@@ -45,18 +45,6 @@ constructor(
fun runNewMobileIconsBackend(): Boolean =
featureFlags.isEnabled(Flags.NEW_STATUS_BAR_MOBILE_ICONS_BACKEND) || useNewMobileIcons()
/** True if we should display the wifi icon using the new status bar data pipeline. */
fun useNewWifiIcon(): Boolean = featureFlags.isEnabled(Flags.NEW_STATUS_BAR_WIFI_ICON)
/**
* True if we should run the new wifi icon backend to get the logging.
*
* Does *not* affect whether we render the wifi icon using the new backend data. See
* [useNewWifiIcon] for that.
*/
fun runNewWifiIconBackend(): Boolean =
featureFlags.isEnabled(Flags.NEW_STATUS_BAR_WIFI_ICON_BACKEND) || useNewWifiIcon()
/**
* Returns true if we should apply some coloring to the icons that were rendered with the new
* pipeline to help with debugging.
@@ -71,5 +59,5 @@ constructor(
* @return true if this icon is controlled by any of the status bar pipeline flags
*/
fun isIconControlledByFlags(slotName: String): Boolean =
slotName == wifiSlot && useNewWifiIcon() || slotName == mobileSlot && useNewMobileIcons()
slotName == wifiSlot || (slotName == mobileSlot && useNewMobileIcons())
}

View File

@@ -101,12 +101,7 @@ open class ModernStatusBarView(context: Context, attrs: AttributeSet?) :
this.binding = bindingCreator.invoke()
}
/**
* Creates a [StatusBarIconView] that is always in DOT mode and adds it to this view.
*
* Mostly duplicated from [com.android.systemui.statusbar.StatusBarWifiView] and
* [com.android.systemui.statusbar.StatusBarMobileView].
*/
/** Creates a [StatusBarIconView] that is always in DOT mode and adds it to this view. */
private fun initDotView() {
// TODO(b/238425913): Could we just have this dot view be part of the layout with a dot
// drawable so we don't need to inflate it manually? Would that not work with animations?

View File

@@ -68,12 +68,7 @@ constructor(
launch {
locationViewModel.wifiIcon.collect { wifiIcon ->
// Only notify the icon controller if we want to *render* the new icon.
// Note that this flow may still run if
// [statusBarPipelineFlags.runNewWifiIconBackend] is true because we may
// want to get the logging data without rendering.
if (
wifiIcon is WifiIcon.Visible && statusBarPipelineFlags.useNewWifiIcon()
) {
if (wifiIcon is WifiIcon.Visible) {
iconController.setNewWifiIcon()
}
}

View File

@@ -33,9 +33,8 @@ import android.provider.Settings;
import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarLocation;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -62,7 +61,6 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
private Handler mHandler;
@Mock
private ContentResolver mContentResolver;
private FakeFeatureFlags mFeatureFlags;
@Mock
private BatteryController mBatteryController;
@@ -75,8 +73,8 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
when(mBatteryMeterView.getContext()).thenReturn(mContext);
when(mBatteryMeterView.getResources()).thenReturn(mContext.getResources());
mFeatureFlags = new FakeFeatureFlags();
mFeatureFlags.set(Flags.BATTERY_SHIELD_ICON, false);
mContext.getOrCreateTestableResources().addOverride(
R.bool.flag_battery_shield_icon, false);
}
@Test
@@ -135,7 +133,8 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
@Test
public void shieldFlagDisabled_viewNotified() {
mFeatureFlags.set(Flags.BATTERY_SHIELD_ICON, false);
mContext.getOrCreateTestableResources().addOverride(
R.bool.flag_battery_shield_icon, false);
initController();
@@ -144,7 +143,8 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
@Test
public void shieldFlagEnabled_viewNotified() {
mFeatureFlags.set(Flags.BATTERY_SHIELD_ICON, true);
mContext.getOrCreateTestableResources().addOverride(
R.bool.flag_battery_shield_icon, true);
initController();
@@ -160,7 +160,6 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
mTunerService,
mHandler,
mContentResolver,
mFeatureFlags,
mBatteryController
);
}

View File

@@ -16,7 +16,6 @@ package com.android.systemui.statusbar.phone;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI;
import static junit.framework.Assert.assertTrue;
@@ -41,13 +40,11 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarMobileView;
import com.android.systemui.statusbar.StatusBarWifiView;
import com.android.systemui.statusbar.StatusIconDisplayable;
import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider;
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter;
import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter;
@@ -156,13 +153,9 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
assertTrue("Expected StatusBarIconView",
(manager.getViewAt(0) instanceof StatusBarIconView));
holder = holderForType(TYPE_WIFI);
manager.onIconAdded(1, "test_wifi", false, holder);
assertTrue(manager.getViewAt(1) instanceof StatusBarWifiView);
holder = holderForType(TYPE_MOBILE);
manager.onIconAdded(2, "test_mobile", false, holder);
assertTrue(manager.getViewAt(2) instanceof StatusBarMobileView);
manager.onIconAdded(1, "test_mobile", false, holder);
assertTrue(manager.getViewAt(1) instanceof StatusBarMobileView);
}
private StatusBarIconHolder holderForType(int type) {
@@ -170,9 +163,6 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
case TYPE_MOBILE:
return StatusBarIconHolder.fromMobileIconState(mock(MobileIconState.class));
case TYPE_WIFI:
return StatusBarIconHolder.fromWifiIconState(mock(WifiIconState.class));
case TYPE_ICON:
default:
return StatusBarIconHolder.fromIcon(mock(StatusBarIcon.class));
@@ -213,13 +203,6 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
return mock;
}
@Override
protected StatusBarWifiView addWifiIcon(int index, String slot, WifiIconState state) {
StatusBarWifiView mock = mock(StatusBarWifiView.class);
mGroup.addView(mock, index);
return mock;
}
@Override
protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) {
StatusBarMobileView mock = mock(StatusBarMobileView.class);
@@ -253,13 +236,6 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
return mock;
}
@Override
protected StatusBarWifiView addWifiIcon(int index, String slot, WifiIconState state) {
StatusBarWifiView mock = mock(StatusBarWifiView.class);
mGroup.addView(mock, index);
return mock;
}
@Override
protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) {
StatusBarMobileView mock = mock(StatusBarMobileView.class);

View File

@@ -21,7 +21,6 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import java.util.List;
@@ -61,10 +60,6 @@ public class FakeStatusBarIconController extends BaseLeakChecker<IconManager>
}
@Override
public void setWifiIcon(String slot, WifiIconState state) {
}
@Override
public void setNewWifiIcon() {
}