diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java index eedcdab68b9fd..b1689f665ebb4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java @@ -48,7 +48,6 @@ import com.android.systemui.privacy.logging.PrivacyLogger; import com.android.systemui.qs.carrier.QSCarrierGroupController; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.settings.UserTracker; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusIconContainer; import com.android.systemui.statusbar.policy.Clock; @@ -86,7 +85,6 @@ class QuickStatusBarHeaderController extends ViewController { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 39f5847ce2a60..562d0ec06a633 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -42,6 +42,9 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import java.util.ArrayList; +import java.util.List; + /** * 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 @@ -70,6 +73,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private View mOperatorNameFrame; private CommandQueue mCommandQueue; + private List mBlockedIcons = new ArrayList<>(); + private SignalCallback mSignalCallback = new SignalCallback() { @Override public void setIsAirplaneMode(NetworkController.IconState icon) { @@ -101,9 +106,12 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mStatusBar.restoreHierarchyState( savedInstanceState.getSparseParcelableArray(EXTRA_PANEL_STATE)); } - mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons), - Dependency.get(CommandQueue.class)); + mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons)); mDarkIconManager.setShouldLog(true); + mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_volume)); + mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_alarm_clock)); + mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_call_strength)); + mDarkIconManager.setBlockList(mBlockedIcons); Dependency.get(StatusBarIconController.class).addIconGroup(mDarkIconManager); mSystemIconArea = mStatusBar.findViewById(R.id.system_icon_area); mClockView = mStatusBar.findViewById(R.id.clock); 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 33798d680d058..2d760e6fc1769 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -47,7 +47,6 @@ import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; @@ -59,6 +58,8 @@ import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; /** * The header group on Keyguard. @@ -89,6 +90,7 @@ public class KeyguardStatusBarView extends RelativeLayout private int mSystemIconsBaseMargin; private View mSystemIconsContainer; private TintedIconManager mIconManager; + private List mBlockedIcons = new ArrayList<>(); private View mCutoutSpace; private ViewGroup mStatusIconArea; @@ -121,6 +123,7 @@ public class KeyguardStatusBarView extends RelativeLayout mStatusIconContainer = findViewById(R.id.statusIcons); loadDimens(); + loadBlockList(); mBatteryController = Dependency.get(BatteryController.class); } @@ -181,6 +184,14 @@ public class KeyguardStatusBarView extends RelativeLayout R.dimen.rounded_corner_content_padding); } + // Set hidden status bar items + private void loadBlockList() { + Resources r = getResources(); + mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_volume)); + mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_alarm_clock)); + mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_call_strength)); + } + private void updateVisibilities() { if (mMultiUserAvatar.getParent() != mStatusIconArea && !mKeyguardUserSwitcherEnabled) { @@ -336,8 +347,8 @@ public class KeyguardStatusBarView extends RelativeLayout userInfoController.addCallback(this); userInfoController.reloadUserInfo(); Dependency.get(ConfigurationController.class).addCallback(this); - mIconManager = new TintedIconManager(findViewById(R.id.statusIcons), - Dependency.get(CommandQueue.class)); + mIconManager = new TintedIconManager(findViewById(R.id.statusIcons)); + mIconManager.setBlockList(mBlockedIcons); Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager); onThemeChanged(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 8fe9a481ccf63..93b83d3cbcbd6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -18,6 +18,7 @@ import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE; import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI; +import android.annotation.Nullable; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; @@ -37,7 +38,6 @@ import com.android.systemui.R; import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.StatusBarMobileView; import com.android.systemui.statusbar.StatusBarWifiView; @@ -46,6 +46,7 @@ import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorI import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; +import java.util.ArrayList; import java.util.List; public interface StatusBarIconController { @@ -54,15 +55,22 @@ 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. */ - public static final int TAG_PRIMARY = 0; + int TAG_PRIMARY = 0; - public void addIconGroup(IconManager iconManager); - public void removeIconGroup(IconManager iconManager); - public void setExternalIcon(String slot); - public void setIcon(String slot, int resourceId, CharSequence contentDescription); - public void setIcon(String slot, StatusBarIcon icon); - public void setSignalIcon(String slot, WifiIconState state); - public void setMobileIcons(String slot, List states); + /** */ + void addIconGroup(IconManager iconManager); + /** */ + void removeIconGroup(IconManager iconManager); + /** */ + void setExternalIcon(String slot); + /** */ + void setIcon(String slot, int resourceId, CharSequence contentDescription); + /** */ + void setIcon(String slot, StatusBarIcon icon); + /** */ + void setSignalIcon(String slot, WifiIconState state); + /** */ + void setMobileIcons(String slot, List states); /** * Display the no calling & SMS icons. */ @@ -85,8 +93,9 @@ public interface StatusBarIconController { * 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. */ - public void removeIcon(String slot, int tag); - public void removeAllIconsForSlot(String slot); + void removeIcon(String slot, int tag); + /** */ + void removeAllIconsForSlot(String slot); // TODO: See if we can rename this tunable name. String ICON_HIDE_LIST = "icon_blacklist"; @@ -108,12 +117,12 @@ public interface StatusBarIconController { /** * Version of ViewGroup that observes state from the DarkIconDispatcher. */ - public static class DarkIconManager extends IconManager { + class DarkIconManager extends IconManager { private final DarkIconDispatcher mDarkIconDispatcher; private int mIconHPadding; - public DarkIconManager(LinearLayout linearLayout, CommandQueue commandQueue) { - super(linearLayout, commandQueue); + public DarkIconManager(LinearLayout linearLayout) { + super(linearLayout); mIconHPadding = mContext.getResources().getDimensionPixelSize( R.dimen.status_bar_icon_padding); mDarkIconDispatcher = Dependency.get(DarkIconDispatcher.class); @@ -169,11 +178,12 @@ public interface StatusBarIconController { } } - public static class TintedIconManager extends IconManager { + /** */ + class TintedIconManager extends IconManager { private int mColor; - public TintedIconManager(ViewGroup group, CommandQueue commandQueue) { - super(group, commandQueue); + public TintedIconManager(ViewGroup group) { + super(group); } @Override @@ -219,7 +229,9 @@ public interface StatusBarIconController { private boolean mIsInDemoMode; protected DemoStatusIcons mDemoStatusIcons; - public IconManager(ViewGroup group, CommandQueue commandQueue) { + protected ArrayList mBlockList = new ArrayList<>(); + + public IconManager(ViewGroup group) { mGroup = group; mContext = group.getContext(); mIconSize = mContext.getResources().getDimensionPixelSize( @@ -234,6 +246,15 @@ public interface StatusBarIconController { mDemoable = demoable; } + public void setBlockList(@Nullable List blockList) { + mBlockList.clear(); + if (blockList == null || blockList.isEmpty()) { + return; + } + + mBlockList.addAll(blockList); + } + public void setShouldLog(boolean should) { mShouldLog = should; } @@ -249,6 +270,11 @@ public interface StatusBarIconController { 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()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java index 6404aea05a4d6..75900a2bffa12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java @@ -66,6 +66,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu private Context mContext; + /** */ @Inject public StatusBarIconControllerImpl( Context context, @@ -84,6 +85,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu demoModeController.addCallback(this); } + /** */ @Override public void addIconGroup(IconManager group) { mIconGroups.add(group); @@ -101,12 +103,14 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ @Override public void removeIconGroup(IconManager group) { group.destroy(); mIconGroups.remove(group); } + /** */ @Override public void onTuningChanged(String key, String newValue) { if (!ICON_HIDE_LIST.equals(key)) { @@ -149,6 +153,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu mIconGroups.forEach(l -> l.onIconAdded(viewIndex, slot, hidden, holder)); } + /** */ @Override public void setIcon(String slot, int resourceId, CharSequence contentDescription) { int index = getSlotIndex(slot); @@ -290,8 +295,9 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu * For backwards compatibility, in the event that someone gives us a slot and a status bar icon */ private void setIcon(int index, StatusBarIcon icon) { + String slot = getSlotName(index); if (icon == null) { - removeAllIconsForSlot(getSlotName(index)); + removeAllIconsForSlot(slot); return; } @@ -299,6 +305,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu setIcon(index, holder); } + /** */ @Override public void setIcon(int index, @NonNull StatusBarIconHolder holder) { boolean isNew = getIcon(index, holder.getTag()) == null; @@ -328,6 +335,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu handleSet(index, holder); } + /** */ @Override public void setIconAccessibilityLiveRegion(String slotName, int accessibilityLiveRegion) { Slot slot = getSlot(slotName); @@ -344,15 +352,18 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ public void removeIcon(String slot) { removeAllIconsForSlot(slot); } + /** */ @Override public void removeIcon(String slot, int tag) { removeIcon(getSlotIndex(slot), tag); } + /** */ @Override public void removeAllIconsForSlot(String slotName) { Slot slot = getSlot(slotName); @@ -369,6 +380,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ @Override public void removeIcon(int index, int tag) { if (getIcon(index, tag) == null) { @@ -384,6 +396,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu mIconGroups.forEach(l -> l.onSetIconHolder(viewIndex, holder)); } + /** */ @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(TAG + " state:"); @@ -402,6 +415,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu super.dump(pw); } + /** */ @Override public void onDemoModeStarted() { for (IconManager manager : mIconGroups) { @@ -411,6 +425,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ @Override public void onDemoModeFinished() { for (IconManager manager : mIconGroups) { @@ -420,6 +435,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ @Override public void dispatchDemoCommand(String command, Bundle args) { for (IconManager manager : mIconGroups) { @@ -429,6 +445,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } } + /** */ @Override public List demoCommands() { List s = new ArrayList<>(); @@ -436,6 +453,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu return s; } + /** */ @Override public void onDensityOrFontScaleChanged() { loadDimens(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java index 19db02a71777a..af342dd31a764 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java @@ -39,7 +39,10 @@ public class StatusBarIconHolder { private MobileIconState mMobileState; private int mType = TYPE_ICON; private int mTag = 0; - private boolean mVisible = true; + + private StatusBarIconHolder() { + + } public static StatusBarIconHolder fromIcon(StatusBarIcon icon) { StatusBarIconHolder wrapper = new StatusBarIconHolder(); @@ -48,7 +51,10 @@ public class StatusBarIconHolder { return wrapper; } - public static StatusBarIconHolder fromResId(Context context, int resId, + /** */ + public static StatusBarIconHolder fromResId( + Context context, + int resId, CharSequence contentDescription) { StatusBarIconHolder holder = new StatusBarIconHolder(); holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(), @@ -56,6 +62,7 @@ public class StatusBarIconHolder { return holder; } + /** */ public static StatusBarIconHolder fromWifiIconState(WifiIconState state) { StatusBarIconHolder holder = new StatusBarIconHolder(); holder.mWifiState = state; @@ -63,6 +70,7 @@ public class StatusBarIconHolder { return holder; } + /** */ public static StatusBarIconHolder fromMobileIconState(MobileIconState state) { StatusBarIconHolder holder = new StatusBarIconHolder(); holder.mMobileState = state; @@ -75,7 +83,8 @@ public class StatusBarIconHolder { * Creates a new StatusBarIconHolder from a CallIndicatorIconState. */ public static StatusBarIconHolder fromCallIndicatorState( - Context context, CallIndicatorIconState state) { + Context context, + CallIndicatorIconState state) { StatusBarIconHolder holder = new StatusBarIconHolder(); int resId = state.isNoCalling ? state.noCallingResId : state.callStrengthResId; String contentDescription = state.isNoCalling diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt index 4948c2b187461..3595095ba6154 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt @@ -33,7 +33,6 @@ import com.android.systemui.privacy.logging.PrivacyLogger import com.android.systemui.qs.carrier.QSCarrierGroup import com.android.systemui.qs.carrier.QSCarrierGroupController import com.android.systemui.settings.UserTracker -import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.policy.Clock @@ -78,8 +77,6 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var statusBarIconController: StatusBarIconController @Mock - private lateinit var commandQueue: CommandQueue - @Mock private lateinit var demoModeController: DemoModeController @Mock private lateinit var userTracker: UserTracker @@ -130,7 +127,6 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { uiEventLogger, qsTileHost, statusBarIconController, - commandQueue, demoModeController, userTracker, quickQSPanelController, @@ -233,4 +229,4 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { `when`(privacyItemController.micCameraAvailable).thenReturn(micCamera) `when`(privacyItemController.locationAvailable).thenReturn(location) } -} \ No newline at end of file +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java index 7b7e2d3e34df7..f147f1cec9edb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java @@ -31,7 +31,6 @@ import androidx.test.filters.SmallTest; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.plugins.DarkIconDispatcher; -import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.StatusBarMobileView; import com.android.systemui.statusbar.StatusBarWifiView; @@ -60,14 +59,14 @@ public class StatusBarIconControllerTest extends LeakCheckedTest { @Test public void testSetCalledOnAdd_IconManager() { LinearLayout layout = new LinearLayout(mContext); - TestIconManager manager = new TestIconManager(layout, new CommandQueue(mContext)); + TestIconManager manager = new TestIconManager(layout); testCallOnAdd_forManager(manager); } @Test public void testSetCalledOnAdd_DarkIconManager() { LinearLayout layout = new LinearLayout(mContext); - TestDarkIconManager manager = new TestDarkIconManager(layout, new CommandQueue(mContext)); + TestDarkIconManager manager = new TestDarkIconManager(layout); testCallOnAdd_forManager(manager); } @@ -104,8 +103,8 @@ public class StatusBarIconControllerTest extends LeakCheckedTest { private static class TestDarkIconManager extends DarkIconManager implements TestableIconManager { - TestDarkIconManager(LinearLayout group, CommandQueue commandQueue) { - super(group, commandQueue); + TestDarkIconManager(LinearLayout group) { + super(group); } @Override @@ -139,8 +138,8 @@ public class StatusBarIconControllerTest extends LeakCheckedTest { } private static class TestIconManager extends IconManager implements TestableIconManager { - TestIconManager(ViewGroup group, CommandQueue commandQueue) { - super(group, commandQueue); + TestIconManager(ViewGroup group) { + super(group); } @Override