Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0997bc8a authored by Xiaohui Chen's avatar Xiaohui Chen Committed by Android (Google) Code Review
Browse files

Merge "sysui: refactor for extensibility" into nyc-dev

parents 3e2b413d eb04a999
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.ViewMediatorCallback;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarWindowManager;
import com.android.systemui.statusbar.phone.StatusBarWindowManager;
@@ -75,6 +77,11 @@ public class SystemUIFactory {
        return new ScrimController(scrimBehind, scrimInFront, headsUpScrim);
        return new ScrimController(scrimBehind, scrimInFront, headsUpScrim);
    }
    }


    public NotificationIconAreaController createNotificationIconAreaController(Context context,
            PhoneStatusBar phoneStatusBar) {
        return new NotificationIconAreaController(context, phoneStatusBar);
    }

    public <T> T createInstance(Class<T> classType) {
    public <T> T createInstance(Class<T> classType) {
        return null;
        return null;
    }
    }
+13 −5
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone;
package com.android.systemui.statusbar.phone;


import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.view.View;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout;
@@ -27,14 +28,17 @@ public class IconMerger extends LinearLayout {
    private static final String TAG = "IconMerger";
    private static final String TAG = "IconMerger";
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = false;


    private int mIconSize;
    private final int mIconSize;
    private final int mIconHPadding;

    private View mMoreView;
    private View mMoreView;


    public IconMerger(Context context, AttributeSet attrs) {
    public IconMerger(Context context, AttributeSet attrs) {
        super(context, attrs);
        super(context, attrs);


        mIconSize = context.getResources().getDimensionPixelSize(
        Resources res = context.getResources();
                R.dimen.status_bar_icon_size);
        mIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
        mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding);


        if (DEBUG) {
        if (DEBUG) {
            setBackgroundColor(0x800099FF);
            setBackgroundColor(0x800099FF);
@@ -45,12 +49,16 @@ public class IconMerger extends LinearLayout {
        mMoreView = v;
        mMoreView = v;
    }
    }


    private int getFullIconWidth() {
        return mIconSize + 2 * mIconHPadding;
    }

    @Override
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        // we need to constrain this to an integral multiple of our children
        // we need to constrain this to an integral multiple of our children
        int width = getMeasuredWidth();
        int width = getMeasuredWidth();
        setMeasuredDimension(width - (width % mIconSize), getMeasuredHeight());
        setMeasuredDimension(width - (width % getFullIconWidth()), getMeasuredHeight());
    }
    }


    @Override
    @Override
@@ -70,7 +78,7 @@ public class IconMerger extends LinearLayout {
        final boolean overflowShown = (mMoreView.getVisibility() == View.VISIBLE);
        final boolean overflowShown = (mMoreView.getVisibility() == View.VISIBLE);
        // let's assume we have one more slot if the more icon is already showing
        // let's assume we have one more slot if the more icon is already showing
        if (overflowShown) visibleChildren --;
        if (overflowShown) visibleChildren --;
        final boolean moreRequired = visibleChildren * mIconSize > width;
        final boolean moreRequired = visibleChildren * getFullIconWidth() > width;
        if (moreRequired != overflowShown) {
        if (moreRequired != overflowShown) {
            post(new Runnable() {
            post(new Runnable() {
                @Override
                @Override
+38 −17
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@ import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.notification.NotificationUtils;
import com.android.systemui.statusbar.notification.NotificationUtils;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;


/**
/**
 * A controller for the space in the status bar to the left of the system icons. This area is
 * A controller for the space in the status bar to the left of the system icons. This area is
@@ -42,6 +43,10 @@ public class NotificationIconAreaController {
        initializeNotificationAreaViews(context);
        initializeNotificationAreaViews(context);
    }
    }


    protected View inflateIconArea(LayoutInflater inflater) {
        return inflater.inflate(R.layout.notification_icon_area, null);
    }

    /**
    /**
     * Initializes the views that will represent the notification area.
     * Initializes the views that will represent the notification area.
     */
     */
@@ -51,15 +56,17 @@ public class NotificationIconAreaController {
        mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding);
        mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding);


        LayoutInflater layoutInflater = LayoutInflater.from(context);
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        mNotificationIconArea = layoutInflater.inflate(R.layout.notification_icon_area, null);
        mNotificationIconArea = inflateIconArea(layoutInflater);

        mMoreIcon = (ImageView) mNotificationIconArea.findViewById(R.id.moreIcon);
        mMoreIcon.setImageTintList(ColorStateList.valueOf(mIconTint));


        mNotificationIcons =
        mNotificationIcons =
                (IconMerger) mNotificationIconArea.findViewById(R.id.notificationIcons);
                (IconMerger) mNotificationIconArea.findViewById(R.id.notificationIcons);

        mMoreIcon = (ImageView) mNotificationIconArea.findViewById(R.id.moreIcon);
        if (mMoreIcon != null) {
            mMoreIcon.setImageTintList(ColorStateList.valueOf(mIconTint));
            mNotificationIcons.setOverflowIndicator(mMoreIcon);
            mNotificationIcons.setOverflowIndicator(mMoreIcon);
        }
        }
    }


    /**
    /**
     * Returns the view that represents the notification area.
     * Returns the view that represents the notification area.
@@ -88,16 +95,38 @@ public class NotificationIconAreaController {
     */
     */
    public void setIconTint(int iconTint) {
    public void setIconTint(int iconTint) {
        mIconTint = iconTint;
        mIconTint = iconTint;
        if (mMoreIcon != null) {
            mMoreIcon.setImageTintList(ColorStateList.valueOf(mIconTint));
            mMoreIcon.setImageTintList(ColorStateList.valueOf(mIconTint));
        }
        applyNotificationIconsTint();
        applyNotificationIconsTint();
    }
    }


    protected int getHeight() {
        return mPhoneStatusBar.getStatusBarHeight();
    }

    protected boolean shouldShowNotification(NotificationData.Entry entry,
            NotificationData notificationData) {
        if (notificationData.isAmbient(entry.key)
                && !NotificationData.showNotificationEvenIfUnprovisioned(entry.notification)) {
            return false;
        }
        if (!PhoneStatusBar.isTopLevelChild(entry)) {
            return false;
        }
        if (entry.row.getVisibility() == View.GONE) {
            return false;
        }

        return true;
    }

    /**
    /**
     * Updates the notifications with the given list of notifications to display.
     * Updates the notifications with the given list of notifications to display.
     */
     */
    public void updateNotificationIcons(NotificationData notificationData) {
    public void updateNotificationIcons(NotificationData notificationData) {
        final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                mIconSize + 2 * mIconHPadding, mPhoneStatusBar.getStatusBarHeight());
                mIconSize + 2 * mIconHPadding, getHeight());


        ArrayList<NotificationData.Entry> activeNotifications =
        ArrayList<NotificationData.Entry> activeNotifications =
                notificationData.getActiveNotifications();
                notificationData.getActiveNotifications();
@@ -107,18 +136,10 @@ public class NotificationIconAreaController {
        // Filter out ambient notifications and notification children.
        // Filter out ambient notifications and notification children.
        for (int i = 0; i < size; i++) {
        for (int i = 0; i < size; i++) {
            NotificationData.Entry ent = activeNotifications.get(i);
            NotificationData.Entry ent = activeNotifications.get(i);
            if (notificationData.isAmbient(ent.key)
            if (shouldShowNotification(ent, notificationData)) {
                    && !NotificationData.showNotificationEvenIfUnprovisioned(ent.notification)) {
                continue;
            }
            if (!PhoneStatusBar.isTopLevelChild(ent)) {
                continue;
            }
            if (ent.row.getVisibility() == View.GONE) {
                continue;
            }
                toShow.add(ent.icon);
                toShow.add(ent.icon);
            }
            }
        }


        ArrayList<View> toRemove = new ArrayList<>();
        ArrayList<View> toRemove = new ArrayList<>();
        for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {
        for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {
+10 −8
Original line number Original line Diff line number Diff line
@@ -48,7 +48,6 @@ import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.hardware.display.DisplayManager;
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.InputMethodService;
import android.media.AudioAttributes;
import android.media.AudioAttributes;
import android.media.MediaMetadata;
import android.media.MediaMetadata;
@@ -132,7 +131,6 @@ import com.android.systemui.statusbar.DismissView;
import com.android.systemui.statusbar.DragDownHelper;
import com.android.systemui.statusbar.DragDownHelper;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.GestureRecorder;
import com.android.systemui.statusbar.GestureRecorder;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationData;
@@ -305,7 +303,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    Point mCurrentDisplaySize = new Point();
    Point mCurrentDisplaySize = new Point();


    protected StatusBarWindowView mStatusBarWindow;
    protected StatusBarWindowView mStatusBarWindow;
    PhoneStatusBarView mStatusBarView;
    protected PhoneStatusBarView mStatusBarView;
    private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
    private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
    protected StatusBarWindowManager mStatusBarWindowManager;
    protected StatusBarWindowManager mStatusBarWindowManager;
    private UnlockMethodCache mUnlockMethodCache;
    private UnlockMethodCache mUnlockMethodCache;
@@ -317,7 +315,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    int mPixelFormat;
    int mPixelFormat;
    Object mQueueLock = new Object();
    Object mQueueLock = new Object();


    StatusBarIconController mIconController;
    protected StatusBarIconController mIconController;


    // expanded notifications
    // expanded notifications
    protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
    protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
@@ -329,7 +327,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,


    // top bar
    // top bar
    BaseStatusBarHeader mHeader;
    BaseStatusBarHeader mHeader;
    KeyguardStatusBarView mKeyguardStatusBar;
    protected KeyguardStatusBarView mKeyguardStatusBar;
    View mKeyguardStatusView;
    View mKeyguardStatusView;
    KeyguardBottomAreaView mKeyguardBottomArea;
    KeyguardBottomAreaView mKeyguardBottomArea;
    boolean mLeaveOpenOnKeyguardHide;
    boolean mLeaveOpenOnKeyguardHide;
@@ -678,6 +676,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        mFalsingManager = FalsingManager.getInstance(mContext);
        mFalsingManager = FalsingManager.getInstance(mContext);
    }
    }


    protected void createIconController() {
        mIconController = new StatusBarIconController(
                mContext, mStatusBarView, mKeyguardStatusBar, this);
    }

    // ================================================================================
    // ================================================================================
    // Constructing the view
    // Constructing the view
    // ================================================================================
    // ================================================================================
@@ -811,8 +814,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        // set the initial view visibility
        // set the initial view visibility
        setAreThereNotifications();
        setAreThereNotifications();


        mIconController = new StatusBarIconController(
        createIconController();
                mContext, mStatusBarView, mKeyguardStatusBar, this);


        // Background thread for any controllers that need it.
        // Background thread for any controllers that need it.
        mHandlerThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
        mHandlerThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
@@ -1989,7 +1991,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        }
        }
    }
    }


    private int adjustDisableFlags(int state) {
    protected int adjustDisableFlags(int state) {
        if (!mLaunchTransitionFadingAway && !mKeyguardFadingAway
        if (!mLaunchTransitionFadingAway && !mKeyguardFadingAway
                && (mExpandedVisible || mBouncerShowing || mWaitingForKeyguardExit)) {
                && (mExpandedVisible || mBouncerShowing || mWaitingForKeyguardExit)) {
            state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
            state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
+3 −2
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.BatteryMeterView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.Interpolators;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarIconView;
@@ -116,8 +117,8 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl
        mStatusIcons = (LinearLayout) statusBar.findViewById(R.id.statusIcons);
        mStatusIcons = (LinearLayout) statusBar.findViewById(R.id.statusIcons);
        mSignalCluster = (SignalClusterView) statusBar.findViewById(R.id.signal_cluster);
        mSignalCluster = (SignalClusterView) statusBar.findViewById(R.id.signal_cluster);


        mNotificationIconAreaController =
        mNotificationIconAreaController = SystemUIFactory.getInstance()
                new NotificationIconAreaController(context, phoneStatusBar);
                .createNotificationIconAreaController(context, phoneStatusBar);
        mNotificationIconAreaInner =
        mNotificationIconAreaInner =
                mNotificationIconAreaController.getNotificationInnerAreaView();
                mNotificationIconAreaController.getNotificationInnerAreaView();