diff options
| author | 2024-04-26 02:14:45 +0000 | |
|---|---|---|
| committer | 2024-04-26 02:14:45 +0000 | |
| commit | ffeed61e0d2ea28db3567180aece667671e1fcde (patch) | |
| tree | 263b48473bb4ffbdc8b1bc73e64414fa29e7f8a6 | |
| parent | 8cf22a2f172f0dcb943c6fd6bd95b89dc5ad2378 (diff) | |
| parent | 03f9f8ada2925390fac4c7f6af3d6c394ce6a261 (diff) | |
Merge "[SB][Misc] Move IconManager classes into their own files." into main
39 files changed, 799 insertions, 704 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt index fc32440e40fe..f6575dc9768b 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt @@ -78,9 +78,9 @@ import com.android.systemui.shade.ui.composable.ExpandedShadeHeader import com.android.systemui.shade.ui.composable.Shade import com.android.systemui.shade.ui.composable.ShadeHeader import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel -import com.android.systemui.statusbar.phone.StatusBarIconController -import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager import com.android.systemui.statusbar.phone.StatusBarLocation +import com.android.systemui.statusbar.phone.ui.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.TintedIconManager import javax.inject.Inject import kotlin.math.roundToInt import kotlinx.coroutines.CoroutineScope diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt index cfb069a4414e..d3b3d1585f83 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt @@ -69,10 +69,10 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.CollapsedHeight import com.android.systemui.shade.ui.composable.ShadeHeader.Values.ClockScale import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel -import com.android.systemui.statusbar.phone.StatusBarIconController -import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusIconContainer +import com.android.systemui.statusbar.phone.ui.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernShadeCarrierGroupMobileView import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.ShadeCarrierGroupMobileIconViewModel import com.android.systemui.statusbar.policy.Clock diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt index 944d6ef76272..91a9d2af7959 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt @@ -82,9 +82,9 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel -import com.android.systemui.statusbar.phone.StatusBarIconController -import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager import com.android.systemui.statusbar.phone.StatusBarLocation +import com.android.systemui.statusbar.phone.ui.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.util.animation.MeasurementInput import javax.inject.Inject import javax.inject.Named diff --git a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java index 3cb612f7801b..4f13e6ffd0b5 100644 --- a/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java @@ -36,8 +36,8 @@ import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; -import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarLocation; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.tuner.TunerService; diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java index c3744df5faeb..8278c790226b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java @@ -46,7 +46,7 @@ import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepositor import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt index f7c435898137..37da114137fe 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt @@ -59,10 +59,11 @@ import com.android.systemui.shade.ShadeViewProviderModule.Companion.SHADE_HEADER import com.android.systemui.shade.carrier.ShadeCarrierGroup import com.android.systemui.shade.carrier.ShadeCarrierGroupController import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider -import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.phone.StatusOverlayHoverListenerFactory +import com.android.systemui.statusbar.phone.ui.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.NextAlarmController @@ -88,7 +89,7 @@ class ShadeHeaderController constructor( @Named(SHADE_HEADER) private val header: MotionLayout, private val statusBarIconController: StatusBarIconController, - private val tintedIconManagerFactory: StatusBarIconController.TintedIconManager.Factory, + private val tintedIconManagerFactory: TintedIconManager.Factory, private val privacyIconsController: HeaderPrivacyIconsController, private val insetsProvider: StatusBarContentInsetsProvider, private val configurationController: ConfigurationController, @@ -127,7 +128,7 @@ constructor( var shadeCollapseAction: Runnable? = null - private lateinit var iconManager: StatusBarIconController.TintedIconManager + private lateinit var iconManager: TintedIconManager private lateinit var carrierIconSlots: List<String> private lateinit var mShadeCarrierGroupController: ShadeCarrierGroupController diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java index 594c1913fd33..8a53e0ce94c4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java @@ -55,10 +55,10 @@ import com.android.systemui.statusbar.notification.collection.render.Notificatio import com.android.systemui.statusbar.phone.CentralSurfacesImpl; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; -import com.android.systemui.statusbar.phone.StatusBarIconController; -import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; -import com.android.systemui.statusbar.phone.StatusBarIconList; +import com.android.systemui.statusbar.phone.ui.StatusBarIconList; import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconControllerImpl; import com.android.systemui.statusbar.policy.KeyguardStateController; import dagger.Binds; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index c055a8214a91..3cdf68f5c231 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -48,6 +48,7 @@ import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.res.R; import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher.DarkChange; +import com.android.systemui.statusbar.phone.ui.TintedIconManager; import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer; import com.android.systemui.user.ui.binder.StatusBarUserChipViewBinder; import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel; @@ -421,7 +422,7 @@ public class KeyguardStatusBarView extends RelativeLayout { } /** Should only be called from {@link KeyguardStatusBarViewController}. */ - void onThemeChanged(StatusBarIconController.TintedIconManager iconManager) { + void onThemeChanged(TintedIconManager iconManager) { mBatteryView.setColorsFromContext(mContext); updateIconsAndTextColors(iconManager); } @@ -438,7 +439,7 @@ public class KeyguardStatusBarView extends RelativeLayout { } } - private void updateIconsAndTextColors(StatusBarIconController.TintedIconManager iconManager) { + private void updateIconsAndTextColors(TintedIconManager iconManager) { @ColorInt int textColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColor); float luminance = Color.luminance(textColor); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java index a5ad68f7bd1d..45d86c0e765c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java @@ -64,6 +64,8 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.fragment.StatusBarIconBlocklistKt; import com.android.systemui.statusbar.phone.fragment.StatusBarSystemEventDefaultAnimator; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.TintedIconManager; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -107,7 +109,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final BatteryController mBatteryController; private final UserInfoController mUserInfoController; private final StatusBarIconController mStatusBarIconController; - private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory; + private final TintedIconManager.Factory mTintedIconManagerFactory; private final BatteryMeterViewController mBatteryMeterViewController; private final ShadeViewStateProvider mShadeViewStateProvider; private final KeyguardStateController mKeyguardStateController; @@ -248,7 +250,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final int mNotificationsHeaderCollideDistance; private boolean mBatteryListening; - private StatusBarIconController.TintedIconManager mTintedIconManager; + private TintedIconManager mTintedIconManager; private float mKeyguardStatusBarAnimateAlpha = 1f; /** @@ -281,7 +283,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat BatteryController batteryController, UserInfoController userInfoController, StatusBarIconController statusBarIconController, - StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory, + TintedIconManager.Factory tintedIconManagerFactory, BatteryMeterViewController batteryMeterViewController, ShadeViewStateProvider shadeViewStateProvider, KeyguardStateController keyguardStateController, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 44acb070a032..3c688057c17f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -59,6 +59,7 @@ import com.android.systemui.res.R; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java deleted file mode 100644 index d7cbe5df419b..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ /dev/null @@ -1,602 +0,0 @@ -/* - * Copyright (C) 2017 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.phone; - -import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_BINDABLE; -import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON; -import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE_NEW; -import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI_NEW; - -import android.annotation.Nullable; -import android.content.Context; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.ArraySet; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.LinearLayout.LayoutParams; - -import androidx.annotation.VisibleForTesting; - -import com.android.internal.statusbar.StatusBarIcon; -import com.android.systemui.dagger.SysUISingleton; -import com.android.systemui.demomode.DemoModeCommandReceiver; -import com.android.systemui.plugins.DarkIconDispatcher; -import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; -import com.android.systemui.res.R; -import com.android.systemui.statusbar.BaseStatusBarFrameLayout; -import com.android.systemui.statusbar.StatusBarIconView; -import com.android.systemui.statusbar.StatusIconDisplayable; -import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider; -import com.android.systemui.statusbar.phone.StatusBarIconHolder.BindableIconHolder; -import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState; -import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter; -import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinder; -import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView; -import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel; -import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView; -import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter; -import com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView; -import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel; -import com.android.systemui.util.Assert; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -public interface StatusBarIconController { - - /** - * When an icon is added with TAG_PRIMARY, it will be treated as the primary icon - * in that slot and not added as a sub slot. - */ - int TAG_PRIMARY = 0; - - /** */ - void addIconGroup(IconManager iconManager); - /** */ - void removeIconGroup(IconManager iconManager); - - /** Refresh the state of an IconManager by recreating the views */ - void refreshIconGroup(IconManager iconManager); - - /** - * Adds or updates an icon that comes from an active tile service. - * - * If the icon is null, the icon will be removed. - */ - void setIconFromTile(String slot, @Nullable StatusBarIcon icon); - - /** Removes an icon that had come from an active tile service. */ - void removeIconForTile(String slot); - - /** Adds or updates an icon for the given slot for **internal system icons**. */ - void setIcon(String slot, int resourceId, CharSequence contentDescription); - - /** - * 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). - */ - void setNewWifiIcon(); - - /** - * Notify this class that there is a new set of mobile icons to display, keyed off of this list - * of subIds. The icons will be added and bound to the mobile data pipeline via - * {@link com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder}. - */ - void setNewMobileIconSubIds(List<Integer> subIds); - /** - * Display the no calling & SMS icons. - */ - void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states); - - /** - * Display the no calling & SMS icons. - */ - void setNoCallingIcons(String slot, List<CallIndicatorIconState> states); - - public void setIconVisibility(String slot, boolean b); - - /** - * Sets the live region mode for the icon - * - * @param slot Icon slot to set region for - * @param accessibilityLiveRegion live region mode for the icon - * @see android.view.View#setAccessibilityLiveRegion(int) - */ - void setIconAccessibilityLiveRegion(String slot, int accessibilityLiveRegion); - - /** - * If you don't know what to pass for `tag`, either remove all icons for slot, or use - * TAG_PRIMARY to refer to the first icon at a given slot. - */ - void removeIcon(String slot, int tag); - - // TODO: See if we can rename this tunable name. - String ICON_HIDE_LIST = "icon_blacklist"; - - /** Reads the default hide list from config value unless hideListStr is provided. */ - static ArraySet<String> getIconHideList(Context context, String hideListStr) { - ArraySet<String> ret = new ArraySet<>(); - String[] hideList = hideListStr == null - ? context.getResources().getStringArray(R.array.config_statusBarIconsToExclude) - : hideListStr.split(","); - for (String slot : hideList) { - if (!TextUtils.isEmpty(slot)) { - ret.add(slot); - } - } - return ret; - } - - /** - * Version of ViewGroup that observes state from the DarkIconDispatcher. - */ - class DarkIconManager extends IconManager { - private final DarkIconDispatcher mDarkIconDispatcher; - private final int mIconHorizontalMargin; - - public DarkIconManager( - LinearLayout linearLayout, - StatusBarLocation location, - WifiUiAdapter wifiUiAdapter, - MobileUiAdapter mobileUiAdapter, - MobileContextProvider mobileContextProvider, - DarkIconDispatcher darkIconDispatcher) { - super(linearLayout, - location, - wifiUiAdapter, - mobileUiAdapter, - mobileContextProvider); - mIconHorizontalMargin = mContext.getResources().getDimensionPixelSize( - R.dimen.status_bar_icon_horizontal_margin); - mDarkIconDispatcher = darkIconDispatcher; - } - - @Override - protected void onIconAdded(int index, String slot, boolean blocked, - StatusBarIconHolder holder) { - StatusIconDisplayable view = addHolder(index, slot, blocked, holder); - mDarkIconDispatcher.addDarkReceiver((DarkReceiver) view); - } - - @Override - protected LayoutParams onCreateLayoutParams() { - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); - lp.setMargins(mIconHorizontalMargin, 0, mIconHorizontalMargin, 0); - return lp; - } - - @Override - protected void destroy() { - for (int i = 0; i < mGroup.getChildCount(); i++) { - mDarkIconDispatcher.removeDarkReceiver((DarkReceiver) mGroup.getChildAt(i)); - } - mGroup.removeAllViews(); - } - - @Override - protected void onRemoveIcon(int viewIndex) { - mDarkIconDispatcher.removeDarkReceiver((DarkReceiver) mGroup.getChildAt(viewIndex)); - super.onRemoveIcon(viewIndex); - } - - @Override - public void onSetIcon(int viewIndex, StatusBarIcon icon) { - super.onSetIcon(viewIndex, icon); - mDarkIconDispatcher.applyDark((DarkReceiver) mGroup.getChildAt(viewIndex)); - } - - @Override - protected DemoStatusIcons createDemoStatusIcons() { - DemoStatusIcons icons = super.createDemoStatusIcons(); - mDarkIconDispatcher.addDarkReceiver(icons); - - return icons; - } - - @Override - protected void exitDemoMode() { - mDarkIconDispatcher.removeDarkReceiver(mDemoStatusIcons); - super.exitDemoMode(); - } - - @SysUISingleton - public static class Factory { - private final WifiUiAdapter mWifiUiAdapter; - private final MobileContextProvider mMobileContextProvider; - private final MobileUiAdapter mMobileUiAdapter; - private final DarkIconDispatcher mDarkIconDispatcher; - - @Inject - public Factory( - WifiUiAdapter wifiUiAdapter, - MobileContextProvider mobileContextProvider, - MobileUiAdapter mobileUiAdapter, - DarkIconDispatcher darkIconDispatcher) { - mWifiUiAdapter = wifiUiAdapter; - mMobileContextProvider = mobileContextProvider; - mMobileUiAdapter = mobileUiAdapter; - mDarkIconDispatcher = darkIconDispatcher; - } - - public DarkIconManager create(LinearLayout group, StatusBarLocation location) { - return new DarkIconManager( - group, - location, - mWifiUiAdapter, - mMobileUiAdapter, - mMobileContextProvider, - mDarkIconDispatcher); - } - } - } - - /** - * - */ - class TintedIconManager extends IconManager { - // The main tint, used as the foreground in non layer drawables - private int mColor; - // To be used as the main tint in drawables that wish to have a layer - private int mForegroundColor; - - public TintedIconManager( - ViewGroup group, - StatusBarLocation location, - WifiUiAdapter wifiUiAdapter, - MobileUiAdapter mobileUiAdapter, - MobileContextProvider mobileContextProvider - ) { - super(group, - location, - wifiUiAdapter, - mobileUiAdapter, - mobileContextProvider); - } - - @Override - protected void onIconAdded(int index, String slot, boolean blocked, - StatusBarIconHolder holder) { - StatusIconDisplayable view = addHolder(index, slot, blocked, holder); - view.setStaticDrawableColor(mColor, mForegroundColor); - view.setDecorColor(mColor); - } - - /** - * Most icons are a single layer, and tintColor will be used as the tint in those cases. - * For icons that have a background, foregroundColor becomes the contrasting tint used - * for the foreground. - * - * @param tintColor the main tint to use for the icons in the group - * @param foregroundColor used as the main tint for layer-ish drawables where tintColor is - * being used as the background - */ - public void setTint(int tintColor, int foregroundColor) { - mColor = tintColor; - mForegroundColor = foregroundColor; - - for (int i = 0; i < mGroup.getChildCount(); i++) { - View child = mGroup.getChildAt(i); - if (child instanceof StatusIconDisplayable) { - StatusIconDisplayable icon = (StatusIconDisplayable) child; - icon.setStaticDrawableColor(mColor, mForegroundColor); - icon.setDecorColor(mColor); - } - } - - if (mDemoStatusIcons != null) { - mDemoStatusIcons.setColor(tintColor, foregroundColor); - } - } - - @Override - protected DemoStatusIcons createDemoStatusIcons() { - DemoStatusIcons icons = super.createDemoStatusIcons(); - icons.setColor(mColor, mForegroundColor); - return icons; - } - - @SysUISingleton - public static class Factory { - private final WifiUiAdapter mWifiUiAdapter; - private final MobileContextProvider mMobileContextProvider; - private final MobileUiAdapter mMobileUiAdapter; - - @Inject - public Factory( - WifiUiAdapter wifiUiAdapter, - MobileUiAdapter mobileUiAdapter, - MobileContextProvider mobileContextProvider - ) { - mWifiUiAdapter = wifiUiAdapter; - mMobileUiAdapter = mobileUiAdapter; - mMobileContextProvider = mobileContextProvider; - } - - public TintedIconManager create(ViewGroup group, StatusBarLocation location) { - return new TintedIconManager( - group, - location, - mWifiUiAdapter, - mMobileUiAdapter, - mMobileContextProvider); - } - } - } - - /** - * Turns info from StatusBarIconController into ImageViews in a ViewGroup. - */ - class IconManager implements DemoModeCommandReceiver { - protected final ViewGroup mGroup; - private final MobileContextProvider mMobileContextProvider; - private final LocationBasedWifiViewModel mWifiViewModel; - private final MobileIconsViewModel mMobileIconsViewModel; - - protected final Context mContext; - protected int mIconSize; - // Whether or not these icons show up in dumpsys - protected boolean mShouldLog = false; - private StatusBarIconController mController; - private final StatusBarLocation mLocation; - - // Enables SystemUI demo mode to take effect in this group - protected boolean mDemoable = true; - private boolean mIsInDemoMode; - protected DemoStatusIcons mDemoStatusIcons; - - protected ArrayList<String> mBlockList = new ArrayList<>(); - - public IconManager( - ViewGroup group, - StatusBarLocation location, - WifiUiAdapter wifiUiAdapter, - MobileUiAdapter mobileUiAdapter, - MobileContextProvider mobileContextProvider - ) { - mGroup = group; - mMobileContextProvider = mobileContextProvider; - mContext = group.getContext(); - mLocation = location; - - reloadDimens(); - - // This starts the flow for the new pipeline, and will notify us of changes via - // {@link #setNewMobileIconIds} - mMobileIconsViewModel = mobileUiAdapter.getMobileIconsViewModel(); - MobileIconsBinder.bind(mGroup, mMobileIconsViewModel); - - mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, mLocation); - } - - public boolean isDemoable() { - return mDemoable; - } - - public void setIsDemoable(boolean demoable) { - mDemoable = demoable; - } - - void setController(StatusBarIconController controller) { - mController = controller; - } - - public void setBlockList(@Nullable List<String> blockList) { - Assert.isMainThread(); - mBlockList.clear(); - mBlockList.addAll(blockList); - if (mController != null) { - mController.refreshIconGroup(this); - } - } - - public void setShouldLog(boolean should) { - mShouldLog = should; - } - - public boolean shouldLog() { - return mShouldLog; - } - - protected void onIconAdded(int index, String slot, boolean blocked, - StatusBarIconHolder holder) { - addHolder(index, slot, blocked, holder); - } - - protected StatusIconDisplayable addHolder(int index, String slot, boolean blocked, - StatusBarIconHolder holder) { - // This is a little hacky, and probably regrettable, but just set `blocked` on any icon - // that is in our blocked list, then we'll never see it - if (mBlockList.contains(slot)) { - blocked = true; - } - switch (holder.getType()) { - case TYPE_ICON: - return addIcon(index, slot, blocked, holder.getIcon()); - - case TYPE_WIFI_NEW: - return addNewWifiIcon(index, slot); - - case TYPE_MOBILE_NEW: - return addNewMobileIcon(index, slot, holder.getTag()); - - case TYPE_BINDABLE: - // Safe cast, since only BindableIconHolders can set this tag on themselves - return addBindableIcon((BindableIconHolder) holder, index); - } - - return null; - } - - @VisibleForTesting - protected StatusBarIconView addIcon(int index, String slot, boolean blocked, - StatusBarIcon icon) { - StatusBarIconView view = onCreateStatusBarIconView(slot, blocked); - view.set(icon); - mGroup.addView(view, index, onCreateLayoutParams()); - return view; - } - - /** - * ModernStatusBarViews can be created and bound, and thus do not need to update their - * drawable by sending multiple calls to setIcon. Instead, by using a bindable - * icon view, we can simply create the icon when requested and allow the - * ViewBinder to control its visual state. - */ - protected StatusIconDisplayable addBindableIcon(BindableIconHolder holder, int index) { - ModernStatusBarView view = holder.getInitializer().createAndBind(mContext); - mGroup.addView(view, index, onCreateLayoutParams()); - return view; - } - - protected StatusIconDisplayable addNewWifiIcon(int index, String slot) { - ModernStatusBarWifiView view = onCreateModernStatusBarWifiView(slot); - mGroup.addView(view, index, onCreateLayoutParams()); - - if (mIsInDemoMode) { - mDemoStatusIcons.addModernWifiView(mWifiViewModel); - } - - return view; - } - - - protected StatusIconDisplayable addNewMobileIcon( - int index, - String slot, - int subId - ) { - BaseStatusBarFrameLayout view = onCreateModernStatusBarMobileView(slot, subId); - mGroup.addView(view, index, onCreateLayoutParams()); - - if (mIsInDemoMode) { - Context mobileContext = mMobileContextProvider - .getMobileContextForSub(subId, mContext); - mDemoStatusIcons.addModernMobileView( - mobileContext, - mMobileIconsViewModel.getLogger(), - subId); - } - - return view; - } - - private StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { - return new StatusBarIconView(mContext, slot, null, blocked); - } - - private ModernStatusBarWifiView onCreateModernStatusBarWifiView(String slot) { - return ModernStatusBarWifiView.constructAndBind(mContext, slot, mWifiViewModel); - } - - private ModernStatusBarMobileView onCreateModernStatusBarMobileView( - String slot, int subId) { - Context mobileContext = mMobileContextProvider.getMobileContextForSub(subId, mContext); - return ModernStatusBarMobileView - .constructAndBind( - mobileContext, - mMobileIconsViewModel.getLogger(), - slot, - mMobileIconsViewModel.viewModelForSub(subId, mLocation) - ); - } - - protected LinearLayout.LayoutParams onCreateLayoutParams() { - return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); - } - - protected void destroy() { - mGroup.removeAllViews(); - } - - protected void reloadDimens() { - mIconSize = mContext.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.status_bar_icon_size_sp); - } - - protected void onRemoveIcon(int viewIndex) { - if (mIsInDemoMode) { - mDemoStatusIcons.onRemoveIcon((StatusIconDisplayable) mGroup.getChildAt(viewIndex)); - } - mGroup.removeViewAt(viewIndex); - } - - public void onSetIcon(int viewIndex, StatusBarIcon icon) { - StatusBarIconView view = (StatusBarIconView) mGroup.getChildAt(viewIndex); - view.set(icon); - } - - public void onSetIconHolder(int viewIndex, StatusBarIconHolder holder) { - switch (holder.getType()) { - case TYPE_ICON: - onSetIcon(viewIndex, holder.getIcon()); - return; - case TYPE_MOBILE_NEW: - case TYPE_WIFI_NEW: - case TYPE_BINDABLE: - // Nothing, the new icons update themselves - return; - default: - break; - } - } - - @Override - public void dispatchDemoCommand(String command, Bundle args) { - if (!mDemoable) { - return; - } - - mDemoStatusIcons.dispatchDemoCommand(command, args); - } - - @Override - public void onDemoModeStarted() { - mIsInDemoMode = true; - if (mDemoStatusIcons == null) { - mDemoStatusIcons = createDemoStatusIcons(); - mDemoStatusIcons.addModernWifiView(mWifiViewModel); - } - mDemoStatusIcons.onDemoModeStarted(); - } - - @Override - public void onDemoModeFinished() { - if (mDemoStatusIcons != null) { - mDemoStatusIcons.onDemoModeFinished(); - exitDemoMode(); - mIsInDemoMode = false; - } - } - - protected void exitDemoMode() { - mDemoStatusIcons.remove(); - mDemoStatusIcons = null; - } - - protected DemoStatusIcons createDemoStatusIcons() { - return new DemoStatusIcons( - (LinearLayout) mGroup, - mMobileIconsViewModel, - mLocation, - mIconSize - ); - } - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java index ac6783f8b11f..ba5939835a08 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -28,6 +28,7 @@ import com.android.systemui.res.R; import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.connectivity.SignalCallback; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java index 7910e6f7413c..144939d1086f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java @@ -38,6 +38,7 @@ import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.notification.stack.AnimationFilter; import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.ViewState; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import java.util.ArrayList; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 2ce710c26f08..4fc11df5aaa5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -60,14 +60,14 @@ import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.NotificationIconContainer; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; -import com.android.systemui.statusbar.phone.StatusBarIconController; -import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; import com.android.systemui.statusbar.phone.StatusBarLocation; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent; import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent.Startable; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener; +import com.android.systemui.statusbar.phone.ui.DarkIconManager; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.CollapsedStatusBarViewModel; @@ -79,10 +79,6 @@ import com.android.systemui.util.CarrierConfigTracker.CarrierConfigChangedListen import com.android.systemui.util.CarrierConfigTracker.DefaultDataSubscriptionChangedListener; import com.android.systemui.util.settings.SecureSettings; -import kotlin.Unit; - -import kotlinx.coroutines.DisposableHandle; - import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; @@ -93,6 +89,10 @@ import java.util.concurrent.Executor; import javax.inject.Inject; +import kotlin.Unit; + +import kotlinx.coroutines.DisposableHandle; + /** * Contains the collapsed status bar and handles hiding/showing based on disable flags * and keyguard state. Also manages lifecycle to make sure the views it contains are being @@ -143,7 +143,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final CollapsedStatusBarViewModel mCollapsedStatusBarViewModel; private final CollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder; private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; - private final StatusBarIconController.DarkIconManager.Factory mDarkIconManagerFactory; + private final DarkIconManager.Factory mDarkIconManagerFactory; private final SecureSettings mSecureSettings; private final Executor mMainExecutor; private final DumpManager mDumpManager; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/DarkIconManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/DarkIconManager.java new file mode 100644 index 000000000000..8871dae3c620 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/DarkIconManager.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2024 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.phone.ui; + +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.android.internal.statusbar.StatusBarIcon; +import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.plugins.DarkIconDispatcher; +import com.android.systemui.statusbar.StatusIconDisplayable; +import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider; +import com.android.systemui.statusbar.phone.DemoStatusIcons; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; +import com.android.systemui.statusbar.phone.StatusBarLocation; +import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter; +import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter; + +import javax.inject.Inject; + +/** + * Version of {@link IconManager} that observes state from the DarkIconDispatcher. + */ +public class DarkIconManager extends IconManager { + private final DarkIconDispatcher mDarkIconDispatcher; + private final int mIconHorizontalMargin; + + public DarkIconManager( + LinearLayout linearLayout, + StatusBarLocation location, + WifiUiAdapter wifiUiAdapter, + MobileUiAdapter mobileUiAdapter, + MobileContextProvider mobileContextProvider, + DarkIconDispatcher darkIconDispatcher) { + super(linearLayout, + location, + wifiUiAdapter, + mobileUiAdapter, + mobileContextProvider); + mIconHorizontalMargin = mContext.getResources().getDimensionPixelSize( + com.android.systemui.res.R.dimen.status_bar_icon_horizontal_margin); + mDarkIconDispatcher = darkIconDispatcher; + } + + @Override + protected void onIconAdded(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + StatusIconDisplayable view = addHolder(index, slot, blocked, holder); + mDarkIconDispatcher.addDarkReceiver(view); + } + + @Override + protected LinearLayout.LayoutParams onCreateLayoutParams() { + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); + lp.setMargins(mIconHorizontalMargin, 0, mIconHorizontalMargin, 0); + return lp; + } + + @Override + protected void destroy() { + for (int i = 0; i < mGroup.getChildCount(); i++) { + mDarkIconDispatcher.removeDarkReceiver( + (DarkIconDispatcher.DarkReceiver) mGroup.getChildAt(i)); + } + mGroup.removeAllViews(); + } + + @Override + protected void onRemoveIcon(int viewIndex) { + mDarkIconDispatcher.removeDarkReceiver( + (DarkIconDispatcher.DarkReceiver) mGroup.getChildAt(viewIndex)); + super.onRemoveIcon(viewIndex); + } + + @Override + public void onSetIcon(int viewIndex, StatusBarIcon icon) { + super.onSetIcon(viewIndex, icon); + mDarkIconDispatcher.applyDark( + (DarkIconDispatcher.DarkReceiver) mGroup.getChildAt(viewIndex)); + } + + @Override + protected DemoStatusIcons createDemoStatusIcons() { + DemoStatusIcons icons = super.createDemoStatusIcons(); + mDarkIconDispatcher.addDarkReceiver(icons); + + return icons; + } + + @Override + protected void exitDemoMode() { + mDarkIconDispatcher.removeDarkReceiver(mDemoStatusIcons); + super.exitDemoMode(); + } + + @SysUISingleton + public static class Factory { + private final WifiUiAdapter mWifiUiAdapter; + private final MobileContextProvider mMobileContextProvider; + private final MobileUiAdapter mMobileUiAdapter; + private final DarkIconDispatcher mDarkIconDispatcher; + + @Inject + public Factory( + WifiUiAdapter wifiUiAdapter, + MobileContextProvider mobileContextProvider, + MobileUiAdapter mobileUiAdapter, + DarkIconDispatcher darkIconDispatcher) { + mWifiUiAdapter = wifiUiAdapter; + mMobileContextProvider = mobileContextProvider; + mMobileUiAdapter = mobileUiAdapter; + mDarkIconDispatcher = darkIconDispatcher; + } + + /** Creates a new {@link DarkIconManager} for the given view group and location. */ + public DarkIconManager create(LinearLayout group, StatusBarLocation location) { + return new DarkIconManager( + group, + location, + mWifiUiAdapter, + mMobileUiAdapter, + mMobileContextProvider, + mDarkIconDispatcher); + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/IconManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/IconManager.java new file mode 100644 index 000000000000..0ed94203ffa0 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/IconManager.java @@ -0,0 +1,307 @@ +/* + * Copyright (C) 2024 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.phone.ui; + +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_BINDABLE; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE_NEW; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI_NEW; + +import android.annotation.Nullable; +import android.content.Context; +import android.os.Bundle; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import androidx.annotation.VisibleForTesting; + +import com.android.internal.statusbar.StatusBarIcon; +import com.android.systemui.demomode.DemoModeCommandReceiver; +import com.android.systemui.statusbar.BaseStatusBarFrameLayout; +import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusIconDisplayable; +import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider; +import com.android.systemui.statusbar.phone.DemoStatusIcons; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; +import com.android.systemui.statusbar.phone.StatusBarLocation; +import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter; +import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinder; +import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView; +import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel; +import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView; +import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter; +import com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView; +import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel; +import com.android.systemui.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +/** + * Turns info from StatusBarIconController into ImageViews in a ViewGroup. + */ +public class IconManager implements DemoModeCommandReceiver { + protected final ViewGroup mGroup; + private final MobileContextProvider mMobileContextProvider; + private final LocationBasedWifiViewModel mWifiViewModel; + private final MobileIconsViewModel mMobileIconsViewModel; + + protected final Context mContext; + protected int mIconSize; + // Whether or not these icons show up in dumpsys + protected boolean mShouldLog = false; + private StatusBarIconController mController; + private final StatusBarLocation mLocation; + + // Enables SystemUI demo mode to take effect in this group + protected boolean mDemoable = true; + private boolean mIsInDemoMode; + protected DemoStatusIcons mDemoStatusIcons; + + protected ArrayList<String> mBlockList = new ArrayList<>(); + + public IconManager( + ViewGroup group, + StatusBarLocation location, + WifiUiAdapter wifiUiAdapter, + MobileUiAdapter mobileUiAdapter, + MobileContextProvider mobileContextProvider + ) { + mGroup = group; + mMobileContextProvider = mobileContextProvider; + mContext = group.getContext(); + mLocation = location; + + reloadDimens(); + + // This starts the flow for the new pipeline, and will notify us of changes via + // {@link #setNewMobileIconIds} + mMobileIconsViewModel = mobileUiAdapter.getMobileIconsViewModel(); + MobileIconsBinder.bind(mGroup, mMobileIconsViewModel); + + mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, mLocation); + } + + public boolean isDemoable() { + return mDemoable; + } + + void setController(StatusBarIconController controller) { + mController = controller; + } + + /** Sets the list of slots that should be blocked from showing in the status bar. */ + public void setBlockList(@Nullable List<String> blockList) { + Assert.isMainThread(); + mBlockList.clear(); + mBlockList.addAll(blockList); + if (mController != null) { + mController.refreshIconGroup(this); + } + } + + /** Sets whether this manager's changes should be dumped in a bug report. */ + public void setShouldLog(boolean should) { + mShouldLog = should; + } + + /** Returns true if this manager's changes should be dumped in a bug report. */ + public boolean shouldLog() { + return mShouldLog; + } + + protected void onIconAdded(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + addHolder(index, slot, blocked, holder); + } + + protected StatusIconDisplayable addHolder(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + // This is a little hacky, and probably regrettable, but just set `blocked` on any icon + // that is in our blocked list, then we'll never see it + if (mBlockList.contains(slot)) { + blocked = true; + } + return switch (holder.getType()) { + case TYPE_ICON -> addIcon(index, slot, blocked, holder.getIcon()); + case TYPE_WIFI_NEW -> addNewWifiIcon(index, slot); + case TYPE_MOBILE_NEW -> addNewMobileIcon(index, slot, holder.getTag()); + case TYPE_BINDABLE -> + // Safe cast, since only BindableIconHolders can set this tag on themselves + addBindableIcon((StatusBarIconHolder.BindableIconHolder) holder, index); + default -> null; + }; + } + + @VisibleForTesting + protected StatusBarIconView addIcon(int index, String slot, boolean blocked, + StatusBarIcon icon) { + StatusBarIconView view = onCreateStatusBarIconView(slot, blocked); + view.set(icon); + mGroup.addView(view, index, onCreateLayoutParams()); + return view; + } + + /** + * ModernStatusBarViews can be created and bound, and thus do not need to update their + * drawable by sending multiple calls to setIcon. Instead, by using a bindable + * icon view, we can simply create the icon when requested and allow the + * ViewBinder to control its visual state. + */ + protected StatusIconDisplayable addBindableIcon(StatusBarIconHolder.BindableIconHolder holder, + int index) { + ModernStatusBarView view = holder.getInitializer().createAndBind(mContext); + mGroup.addView(view, index, onCreateLayoutParams()); + return view; + } + + protected StatusIconDisplayable addNewWifiIcon(int index, String slot) { + ModernStatusBarWifiView view = onCreateModernStatusBarWifiView(slot); + mGroup.addView(view, index, onCreateLayoutParams()); + + if (mIsInDemoMode) { + mDemoStatusIcons.addModernWifiView(mWifiViewModel); + } + + return view; + } + + + protected StatusIconDisplayable addNewMobileIcon( + int index, + String slot, + int subId + ) { + BaseStatusBarFrameLayout view = onCreateModernStatusBarMobileView(slot, subId); + mGroup.addView(view, index, onCreateLayoutParams()); + + if (mIsInDemoMode) { + Context mobileContext = mMobileContextProvider + .getMobileContextForSub(subId, mContext); + mDemoStatusIcons.addModernMobileView( + mobileContext, + mMobileIconsViewModel.getLogger(), + subId); + } + + return view; + } + + private StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { + return new StatusBarIconView(mContext, slot, null, blocked); + } + + private ModernStatusBarWifiView onCreateModernStatusBarWifiView(String slot) { + return ModernStatusBarWifiView.constructAndBind(mContext, slot, mWifiViewModel); + } + + private ModernStatusBarMobileView onCreateModernStatusBarMobileView( + String slot, int subId) { + Context mobileContext = mMobileContextProvider.getMobileContextForSub(subId, mContext); + return ModernStatusBarMobileView + .constructAndBind( + mobileContext, + mMobileIconsViewModel.getLogger(), + slot, + mMobileIconsViewModel.viewModelForSub(subId, mLocation) + ); + } + + protected LinearLayout.LayoutParams onCreateLayoutParams() { + return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); + } + + protected void destroy() { + mGroup.removeAllViews(); + } + + protected void reloadDimens() { + mIconSize = mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.status_bar_icon_size_sp); + } + + protected void onRemoveIcon(int viewIndex) { + if (mIsInDemoMode) { + mDemoStatusIcons.onRemoveIcon((StatusIconDisplayable) mGroup.getChildAt(viewIndex)); + } + mGroup.removeViewAt(viewIndex); + } + + /** Called once an icon has been set. */ + public void onSetIcon(int viewIndex, StatusBarIcon icon) { + StatusBarIconView view = (StatusBarIconView) mGroup.getChildAt(viewIndex); + view.set(icon); + } + + /** Called once an icon holder has been set. */ + public void onSetIconHolder(int viewIndex, StatusBarIconHolder holder) { + switch (holder.getType()) { + case TYPE_ICON: + onSetIcon(viewIndex, holder.getIcon()); + return; + case TYPE_MOBILE_NEW: + case TYPE_WIFI_NEW: + case TYPE_BINDABLE: + // Nothing, the new icons update themselves + return; + default: + break; + } + } + + @Override + public void dispatchDemoCommand(String command, Bundle args) { + if (!mDemoable) { + return; + } + + mDemoStatusIcons.dispatchDemoCommand(command, args); + } + + @Override + public void onDemoModeStarted() { + mIsInDemoMode = true; + if (mDemoStatusIcons == null) { + mDemoStatusIcons = createDemoStatusIcons(); + mDemoStatusIcons.addModernWifiView(mWifiViewModel); + } + mDemoStatusIcons.onDemoModeStarted(); + } + + @Override + public void onDemoModeFinished() { + if (mDemoStatusIcons != null) { + mDemoStatusIcons.onDemoModeFinished(); + exitDemoMode(); + mIsInDemoMode = false; + } + } + + protected void exitDemoMode() { + mDemoStatusIcons.remove(); + mDemoStatusIcons = null; + } + + protected DemoStatusIcons createDemoStatusIcons() { + return new DemoStatusIcons( + (LinearLayout) mGroup, + mMobileIconsViewModel, + mLocation, + mIconSize + ); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconController.java new file mode 100644 index 000000000000..1ada30e3518a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconController.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2024 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.phone.ui; + +import android.annotation.Nullable; +import android.content.Context; +import android.text.TextUtils; +import android.util.ArraySet; + +import com.android.internal.statusbar.StatusBarIcon; +import com.android.systemui.res.R; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState; + +import java.util.List; + +/** Interface controlling the icons shown in the status bar. */ +public interface StatusBarIconController { + + /** + * When an icon is added with TAG_PRIMARY, it will be treated as the primary icon + * in that slot and not added as a sub slot. + */ + int TAG_PRIMARY = 0; + + /** */ + void addIconGroup(IconManager iconManager); + /** */ + void removeIconGroup(IconManager iconManager); + + /** Refresh the state of an IconManager by recreating the views */ + void refreshIconGroup(IconManager iconManager); + + /** + * Adds or updates an icon that comes from an active tile service. + * + * If the icon is null, the icon will be removed. + */ + void setIconFromTile(String slot, @Nullable StatusBarIcon icon); + + /** Removes an icon that had come from an active tile service. */ + void removeIconForTile(String slot); + + /** Adds or updates an icon for the given slot for **internal system icons**. */ + void setIcon(String slot, int resourceId, CharSequence contentDescription); + + /** + * 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). + */ + void setNewWifiIcon(); + + /** + * Notify this class that there is a new set of mobile icons to display, keyed off of this list + * of subIds. The icons will be added and bound to the mobile data pipeline via + * {@link com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder}. + */ + void setNewMobileIconSubIds(List<Integer> subIds); + /** + * Display the no calling & SMS icons. + */ + void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states); + + /** + * Display the no calling & SMS icons. + */ + void setNoCallingIcons(String slot, List<CallIndicatorIconState> states); + + /** Sets whether the icon in the given slot should be visible or not. */ + void setIconVisibility(String slot, boolean b); + + /** + * Sets the live region mode for the icon + * + * @param slot Icon slot to set region for + * @param accessibilityLiveRegion live region mode for the icon + * @see android.view.View#setAccessibilityLiveRegion(int) + */ + void setIconAccessibilityLiveRegion(String slot, int accessibilityLiveRegion); + + /** + * If you don't know what to pass for `tag`, either remove all icons for slot, or use + * TAG_PRIMARY to refer to the first icon at a given slot. + */ + void removeIcon(String slot, int tag); + + // TODO: See if we can rename this tunable name. + String ICON_HIDE_LIST = "icon_blacklist"; + + /** Reads the default hide list from config value unless hideListStr is provided. */ + static ArraySet<String> getIconHideList(Context context, String hideListStr) { + ArraySet<String> ret = new ArraySet<>(); + String[] hideList = hideListStr == null + ? context.getResources().getStringArray(R.array.config_statusBarIconsToExclude) + : hideListStr.split(","); + for (String slot : hideList) { + if (!TextUtils.isEmpty(slot)) { + ret.add(slot); + } + } + return ret; + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerImpl.java index 4f148f112c52..92d90af6f921 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerImpl.java @@ -11,12 +11,12 @@ * 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 + * limitations under the License. */ -package com.android.systemui.statusbar.phone; +package com.android.systemui.statusbar.phone.ui; -import static com.android.systemui.statusbar.phone.StatusBarIconList.Slot; +import static com.android.systemui.statusbar.phone.ui.StatusBarIconList.Slot; import android.annotation.NonNull; import android.content.Context; @@ -38,6 +38,7 @@ import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.StatusIconDisplayable; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; import com.android.systemui.statusbar.phone.StatusBarIconHolder.BindableIconHolder; import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState; import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags; @@ -459,9 +460,9 @@ public class StatusBarIconControllerImpl implements Tunable, for (IconManager manager : mIconGroups) { if (manager.shouldLog()) { ViewGroup group = manager.mGroup; - int N = group.getChildCount(); - pw.println(" icon views: " + N); - for (int i = 0; i < N; i++) { + int n = group.getChildCount(); + pw.println(" icon views: " + n); + for (int i = 0; i < n; i++) { StatusIconDisplayable ic = (StatusIconDisplayable) group.getChildAt(i); pw.println(" [" + i + "] icon=" + ic); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconList.java index 565481a20d95..724251ccb20a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/StatusBarIconList.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 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. @@ -14,14 +14,15 @@ * limitations under the License. */ -package com.android.systemui.statusbar.phone; +package com.android.systemui.statusbar.phone.ui; -import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; +import static com.android.systemui.statusbar.phone.ui.StatusBarIconController.TAG_PRIMARY; import android.annotation.NonNull; import android.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; import java.io.PrintWriter; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/TintedIconManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/TintedIconManager.java new file mode 100644 index 000000000000..e520148e925a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ui/TintedIconManager.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2024 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.phone.ui; + +import android.view.View; +import android.view.ViewGroup; + +import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.statusbar.StatusIconDisplayable; +import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider; +import com.android.systemui.statusbar.phone.DemoStatusIcons; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; +import com.android.systemui.statusbar.phone.StatusBarLocation; +import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter; +import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter; + +import javax.inject.Inject; + +/** + * Version of {@link IconManager} that can tint the icons to a particular color. + */ +public class TintedIconManager extends IconManager { + // The main tint, used as the foreground in non layer drawables + private int mColor; + // To be used as the main tint in drawables that wish to have a layer + private int mForegroundColor; + + public TintedIconManager( + ViewGroup group, + StatusBarLocation location, + WifiUiAdapter wifiUiAdapter, + MobileUiAdapter mobileUiAdapter, + MobileContextProvider mobileContextProvider + ) { + super(group, + location, + wifiUiAdapter, + mobileUiAdapter, + mobileContextProvider); + } + + @Override + protected void onIconAdded(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + StatusIconDisplayable view = addHolder(index, slot, blocked, holder); + view.setStaticDrawableColor(mColor, mForegroundColor); + view.setDecorColor(mColor); + } + + /** + * Most icons are a single layer, and tintColor will be used as the tint in those cases. + * For icons that have a background, foregroundColor becomes the contrasting tint used + * for the foreground. + * + * @param tintColor the main tint to use for the icons in the group + * @param foregroundColor used as the main tint for layer-ish drawables where tintColor is + * being used as the background + */ + public void setTint(int tintColor, int foregroundColor) { + mColor = tintColor; + mForegroundColor = foregroundColor; + + for (int i = 0; i < mGroup.getChildCount(); i++) { + View child = mGroup.getChildAt(i); + if (child instanceof StatusIconDisplayable icon) { + icon.setStaticDrawableColor(mColor, mForegroundColor); + icon.setDecorColor(mColor); + } + } + + if (mDemoStatusIcons != null) { + mDemoStatusIcons.setColor(tintColor, foregroundColor); + } + } + + @Override + protected DemoStatusIcons createDemoStatusIcons() { + DemoStatusIcons icons = super.createDemoStatusIcons(); + icons.setColor(mColor, mForegroundColor); + return icons; + } + + @SysUISingleton + public static class Factory { + private final WifiUiAdapter mWifiUiAdapter; + private final MobileContextProvider mMobileContextProvider; + private final MobileUiAdapter mMobileUiAdapter; + + @Inject + public Factory( + WifiUiAdapter wifiUiAdapter, + MobileUiAdapter mobileUiAdapter, + MobileContextProvider mobileContextProvider + ) { + mWifiUiAdapter = wifiUiAdapter; + mMobileUiAdapter = mobileUiAdapter; + mMobileContextProvider = mobileContextProvider; + } + + /** Creates a new {@link TintedIconManager} for the given view group and location. */ + public TintedIconManager create(ViewGroup group, StatusBarLocation location) { + return new TintedIconManager( + group, + location, + mWifiUiAdapter, + mMobileUiAdapter, + mMobileContextProvider); + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt index 02e50a007f50..5a49f8eb8f3b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt @@ -20,7 +20,7 @@ import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.shade.carrier.ShadeCarrierGroupController -import com.android.systemui.statusbar.phone.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel import java.io.PrintWriter diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconsBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconsBinder.kt index e7d5ee264efe..fc0ba131c457 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconsBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconsBinder.kt @@ -20,10 +20,9 @@ import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.lifecycle.repeatWhenAttached -import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager +import com.android.systemui.statusbar.phone.ui.IconManager import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch object MobileIconsBinder { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt index 4227f9eb8f10..1a55f7d90e97 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepository.kt @@ -31,12 +31,12 @@ import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import androidx.annotation.ArrayRes import androidx.annotation.VisibleForTesting import com.android.systemui.Dumpable -import com.android.systemui.res.R import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.phone.StatusBarIconController +import com.android.systemui.res.R +import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.pipeline.shared.ConnectivityInputLogger import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlots diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt index 7a60d96d1661..2800c9404c4b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt @@ -21,14 +21,13 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.repeatWhenAttached -import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarLocation +import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel.Companion.viewModelForLocation import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel import javax.inject.Inject -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index a25f8e96f59f..ccd75602aa13 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -55,7 +55,7 @@ import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java b/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java index b71aafdf6b96..77fcd259461b 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java @@ -27,7 +27,7 @@ import androidx.preference.DropDownPreference; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; public class BatteryPreference extends DropDownPreference implements TunerService.Tunable { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java b/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java index c92d7bbfe0b7..e94d8ea2dd07 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java @@ -21,7 +21,7 @@ import android.util.AttributeSet; import androidx.preference.DropDownPreference; import com.android.systemui.Dependency; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.Clock; public class ClockPreference extends DropDownPreference implements TunerService.Tunable { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java index cc0050b64d60..2f6fa5130b6e 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java @@ -27,7 +27,7 @@ import androidx.preference.SwitchPreference; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.tuner.TunerService.Tunable; import java.util.Set; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java index fd0f7cb04807..05ee35b36c7f 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java @@ -44,8 +44,8 @@ import com.android.systemui.demomode.DemoModeController; import com.android.systemui.qs.QSHost; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; -import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.SystemUIDialog; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.util.leak.LeakDetector; import dagger.Lazy; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java index 248af1e859f1..b62d59d3a2f2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java @@ -47,7 +47,7 @@ import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepositor import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.FakeExecutor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt index 9fa173ab040a..0846ced1826c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt @@ -22,6 +22,7 @@ import android.app.StatusBarManager import android.content.Context import android.content.res.Resources import android.content.res.XmlResourceParser +import android.graphics.Insets import android.graphics.Rect import android.testing.AndroidTestingRunner import android.view.Display @@ -35,7 +36,6 @@ import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest import com.android.app.animation.Interpolators -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView @@ -46,6 +46,7 @@ import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.ChipVisibilityListener import com.android.systemui.qs.HeaderPrivacyIconsController +import com.android.systemui.res.R import com.android.systemui.shade.ShadeHeaderController.Companion.DEFAULT_CLOCK_INTENT import com.android.systemui.shade.ShadeHeaderController.Companion.LARGE_SCREEN_HEADER_CONSTRAINT import com.android.systemui.shade.ShadeHeaderController.Companion.QQS_HEADER_CONSTRAINT @@ -53,9 +54,10 @@ import com.android.systemui.shade.ShadeHeaderController.Companion.QS_HEADER_CONS import com.android.systemui.shade.carrier.ShadeCarrierGroup import com.android.systemui.shade.carrier.ShadeCarrierGroupController import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider -import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.phone.StatusOverlayHoverListenerFactory +import com.android.systemui.statusbar.phone.ui.StatusBarIconController +import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.statusbar.policy.NextAlarmController @@ -83,7 +85,6 @@ import org.mockito.Mockito.reset import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever -import android.graphics.Insets import org.mockito.junit.MockitoJUnit private val EMPTY_CHANGES = ConstraintsChanges() @@ -95,8 +96,8 @@ class ShadeHeaderControllerTest : SysuiTestCase() { @Mock(answer = Answers.RETURNS_MOCKS) private lateinit var view: MotionLayout @Mock private lateinit var statusIcons: StatusIconContainer @Mock private lateinit var statusBarIconController: StatusBarIconController - @Mock private lateinit var iconManagerFactory: StatusBarIconController.TintedIconManager.Factory - @Mock private lateinit var iconManager: StatusBarIconController.TintedIconManager + @Mock private lateinit var iconManagerFactory: TintedIconManager.Factory + @Mock private lateinit var iconManager: TintedIconManager @Mock private lateinit var mShadeCarrierGroupController: ShadeCarrierGroupController @Mock private lateinit var mShadeCarrierGroupControllerBuilder: ShadeCarrierGroupController.Builder @@ -145,12 +146,14 @@ class ShadeHeaderControllerTest : SysuiTestCase() { whenever<TextView>(view.requireViewById(R.id.date)).thenReturn(date) whenever(date.context).thenReturn(mockedContext) - whenever<ShadeCarrierGroup>(view.requireViewById(R.id.carrier_group)).thenReturn(carrierGroup) + whenever<ShadeCarrierGroup>(view.requireViewById(R.id.carrier_group)) + .thenReturn(carrierGroup) whenever<BatteryMeterView>(view.requireViewById(R.id.batteryRemainingIcon)) .thenReturn(batteryMeterView) - whenever<StatusIconContainer>(view.requireViewById(R.id.statusIcons)).thenReturn(statusIcons) + whenever<StatusIconContainer>(view.requireViewById(R.id.statusIcons)) + .thenReturn(statusIcons) whenever<View>(view.requireViewById(R.id.hover_system_icons_container)) .thenReturn(systemIconsHoverContainer) @@ -933,14 +936,14 @@ class ShadeHeaderControllerTest : SysuiTestCase() { private fun mockInsetsProvider(insets: Pair<Int, Int> = 0 to 0, cornerCutout: Boolean = false) { whenever(insetsProvider.getStatusBarContentInsetsForCurrentRotation()) - .thenReturn( - Insets.of( - /* left= */ insets.first, - /* top= */ 0, - /* right= */ insets.second, - /* bottom= */ 0 - ) + .thenReturn( + Insets.of( + /* left= */ insets.first, + /* top= */ 0, + /* right= */ insets.second, + /* bottom= */ 0 ) + ) whenever(insetsProvider.currentRotationHasCornerCutout()).thenReturn(cornerCutout) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java index 141c938efece..8e9840acc414 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java @@ -76,6 +76,8 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.data.repository.FakeKeyguardStatusBarRepository; import com.android.systemui.statusbar.domain.interactor.KeyguardStatusBarInteractor; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.TintedIconManager; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; @@ -114,9 +116,9 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { @Mock private StatusBarIconController mStatusBarIconController; @Mock - private StatusBarIconController.TintedIconManager.Factory mIconManagerFactory; + private TintedIconManager.Factory mIconManagerFactory; @Mock - private StatusBarIconController.TintedIconManager mIconManager; + private TintedIconManager mIconManager; @Mock private BatteryMeterViewController mBatteryMeterViewController; @Mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt index 7deee5a70809..8d2c1588fb62 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt @@ -36,6 +36,7 @@ import com.android.systemui.privacy.logging.PrivacyLogger import com.android.systemui.screenrecord.RecordingController import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.CommandQueue +import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.policy.BluetoothController import com.android.systemui.statusbar.policy.CastController import com.android.systemui.statusbar.policy.DataSaverController diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index 9c3d9c669adc..66211c922abb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -61,10 +61,11 @@ import com.android.systemui.statusbar.notification.icon.ui.viewbinder.Notificati import com.android.systemui.statusbar.phone.HeadsUpAppearanceController; import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager; -import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; +import com.android.systemui.statusbar.phone.ui.DarkIconManager; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewBinder; import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.FakeCollapsedStatusBarViewModel; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -117,9 +118,9 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { @Mock private PanelExpansionInteractor mPanelExpansionInteractor; @Mock - private StatusBarIconController.DarkIconManager.Factory mIconManagerFactory; + private DarkIconManager.Factory mIconManagerFactory; @Mock - private StatusBarIconController.DarkIconManager mIconManager; + private DarkIconManager mIconManager; private FakeCollapsedStatusBarViewModel mCollapsedStatusBarViewModel; private FakeCollapsedStatusBarViewBinder mCollapsedStatusBarViewBinder; @Mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerImplTest.kt index f6a8243c7a46..617c553d773d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerImplTest.kt @@ -14,15 +14,16 @@ * limitations under the License. */ -package com.android.systemui.statusbar.phone +package com.android.systemui.statusbar.phone.ui import android.os.UserHandle import androidx.test.filters.SmallTest import com.android.internal.statusbar.StatusBarIcon import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.CommandQueue -import com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY -import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl.EXTERNAL_SLOT_SUFFIX +import com.android.systemui.statusbar.phone.StatusBarIconHolder +import com.android.systemui.statusbar.phone.ui.StatusBarIconController.TAG_PRIMARY +import com.android.systemui.statusbar.phone.ui.StatusBarIconControllerImpl.EXTERNAL_SLOT_SUFFIX import com.android.systemui.statusbar.pipeline.icons.shared.BindableIconsRegistry import com.android.systemui.statusbar.pipeline.icons.shared.model.BindableIcon import com.android.systemui.statusbar.pipeline.icons.shared.model.ModernStatusBarViewCreator @@ -42,7 +43,7 @@ class StatusBarIconControllerImplTest : SysuiTestCase() { private lateinit var iconList: StatusBarIconList private lateinit var commandQueueCallbacks: CommandQueue.Callbacks - private val iconGroup: StatusBarIconController.IconManager = mock() + private val iconGroup: IconManager = mock() @Mock private lateinit var commandQueue: CommandQueue diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerTest.java index ca316230fb01..14bce9c54a20 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconControllerTest.java @@ -1,20 +1,20 @@ /* * Copyright (C) 2017 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 + * 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. + * 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.phone; - -import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON; +package com.android.systemui.statusbar.phone.ui; import static junit.framework.Assert.assertTrue; @@ -40,8 +40,8 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.StatusBarIconView; 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.StatusBarIconHolder; +import com.android.systemui.statusbar.phone.StatusBarLocation; import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags; import com.android.systemui.statusbar.pipeline.icons.shared.BindableIconsRegistry; import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter; @@ -60,9 +60,9 @@ import org.junit.runner.RunWith; @SmallTest public class StatusBarIconControllerTest extends LeakCheckedTest { - private MobileContextProvider mMobileContextProvider = mock(MobileContextProvider.class); - private MobileUiAdapter mMobileUiAdapter = mock(MobileUiAdapter.class); - private MobileIconsViewModel mMobileIconsViewModel = mock(MobileIconsViewModel.class); + private final MobileContextProvider mMobileContextProvider = mock(MobileContextProvider.class); + private final MobileUiAdapter mMobileUiAdapter = mock(MobileUiAdapter.class); + private final MobileIconsViewModel mMobileIconsViewModel = mock(MobileIconsViewModel.class); @Before public void setup() { @@ -123,22 +123,13 @@ public class StatusBarIconControllerTest extends LeakCheckedTest { } private <T extends IconManager & TestableIconManager> void testCallOnAdd_forManager(T manager) { - StatusBarIconHolder holder = holderForType(TYPE_ICON); + StatusBarIconHolder holder = StatusBarIconHolder.fromIcon(mock(StatusBarIcon.class)); manager.onIconAdded(0, "test_slot", false, holder); assertTrue("Expected StatusBarIconView", (manager.getViewAt(0) instanceof StatusBarIconView)); } - private StatusBarIconHolder holderForType(int type) { - switch (type) { - - case TYPE_ICON: - default: - return StatusBarIconHolder.fromIcon(mock(StatusBarIcon.class)); - } - } - private static class TestDarkIconManager extends DarkIconManager implements TestableIconManager { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconListTest.java index f0a4f3f2bf7a..02a6301a14e5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconListTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ui/StatusBarIconListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2024 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. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.android.systemui.statusbar.phone; +package com.android.systemui.statusbar.phone.ui; -import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; +import static com.android.systemui.statusbar.phone.ui.StatusBarIconController.TAG_PRIMARY; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; @@ -29,7 +29,9 @@ import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; -import com.android.systemui.statusbar.phone.StatusBarIconList.Slot; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; +import com.android.systemui.statusbar.phone.ui.StatusBarIconList; +import com.android.systemui.statusbar.phone.ui.StatusBarIconList.Slot; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java index 3774d1d16e4e..a8328e4ab991 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java @@ -17,9 +17,9 @@ package com.android.systemui.utils.leaks; import android.testing.LeakCheck; import com.android.internal.statusbar.StatusBarIcon; -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.ui.IconManager; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import java.util.List; diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java index ec1f352e1439..5d21ddd9c9bc 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java @@ -21,7 +21,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.PluginManager; import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.phone.ManagedProfileController; -import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; |