private void applyNotificationIconsTint() { for (int i = 0; i < mNotificationIcons.getChildCount(); i++) { StatusBarIconView v = (StatusBarIconView) mNotificationIcons.getChildAt(i); boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L)); boolean colorize = !isPreL || isGrayscale(v); if (colorize) { v.setImageTintList(ColorStateList.valueOf(mIconTint)); } } }
public StatusBarIconController( Context context, View statusBar, View keyguardStatusBar, PhoneStatusBar phoneStatusBar) { mContext = context; mPhoneStatusBar = phoneStatusBar; mNotificationColorUtil = NotificationColorUtil.getInstance(context); mSystemIconArea = (LinearLayout) statusBar.findViewById(R.id.system_icon_area); mStatusIcons = (LinearLayout) statusBar.findViewById(R.id.statusIcons); mSignalCluster = (SignalClusterView) statusBar.findViewById(R.id.signal_cluster); mNotificationIconArea = statusBar.findViewById(R.id.notification_icon_area_inner); mNotificationIcons = (IconMerger) statusBar.findViewById(R.id.notificationIcons); mMoreIcon = (ImageView) statusBar.findViewById(R.id.moreIcon); mNotificationIcons.setOverflowIndicator(mMoreIcon); mStatusIconsKeyguard = (LinearLayout) keyguardStatusBar.findViewById(R.id.statusIcons); mBatteryMeterView = (BatteryMeterView) statusBar.findViewById(R.id.battery); mNetworkTraffic = (NetworkTraffic) statusBar.findViewById(R.id.networkTraffic); mCarrier = (TextView) statusBar.findViewById(R.id.statusbar_carrier_text); mLinearOutSlowIn = AnimationUtils.loadInterpolator(mContext, android.R.interpolator.linear_out_slow_in); mFastOutSlowIn = AnimationUtils.loadInterpolator(mContext, android.R.interpolator.fast_out_slow_in); mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); mHandler = new Handler(); mClockController = new ClockController(statusBar, mNotificationIcons, mHandler); mCenterClockLayout = statusBar.findViewById(R.id.center_clock_layout); updateResources(); TunerService.get(mContext).addTunable(this, ICON_BLACKLIST); }
public void updateNotificationIcons(NotificationData notificationData) { final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( mIconSize + 2 * mIconHPadding, mPhoneStatusBar.getStatusBarHeight()); ArrayList<NotificationData.Entry> activeNotifications = notificationData.getActiveNotifications(); final int N = activeNotifications.size(); ArrayList<StatusBarIconView> toShow = new ArrayList<>(N); // Filter out ambient notifications and notification children. for (int i = 0; i < N; i++) { NotificationData.Entry ent = activeNotifications.get(i); if (notificationData.isAmbient(ent.key) && !NotificationData.showNotificationEvenIfUnprovisioned(ent.notification)) { continue; } if (!PhoneStatusBar.isTopLevelChild(ent)) { continue; } toShow.add(ent.icon); } ArrayList<View> toRemove = new ArrayList<>(); for (int i = 0; i < mNotificationIcons.getChildCount(); i++) { View child = mNotificationIcons.getChildAt(i); if (!toShow.contains(child)) { toRemove.add(child); } } final int toRemoveCount = toRemove.size(); for (int i = 0; i < toRemoveCount; i++) { mNotificationIcons.removeView(toRemove.get(i)); } for (int i = 0; i < toShow.size(); i++) { View v = toShow.get(i); if (v.getParent() == null) { mNotificationIcons.addView(v, i, params); } } // Resort notification icons final int childCount = mNotificationIcons.getChildCount(); for (int i = 0; i < childCount; i++) { View actual = mNotificationIcons.getChildAt(i); StatusBarIconView expected = toShow.get(i); if (actual == expected) { continue; } mNotificationIcons.removeView(expected); mNotificationIcons.addView(expected, i); } applyNotificationIconsTint(); }