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

Commit 87efbbb5 authored by Joe Onorato's avatar Joe Onorato Committed by Android (Google) Code Review
Browse files

Merge "implement the number bubbles on the status bar" into gingerbread

parents ae1864c0 6c01a11a
Loading
Loading
Loading
Loading
−79 B (935 B)
Loading image diff...
+1 −0
Original line number Diff line number Diff line
@@ -19,4 +19,5 @@
<resources>
    <drawable name="shade_bgcolor">#ff282828</drawable>
    <drawable name="notification_header_text_color">#ff969696</drawable>
    <drawable name="notification_number_text_color">#ffffffff</drawable>
</resources>
+15 −29
Original line number Diff line number Diff line
@@ -23,28 +23,34 @@ import android.util.Slog;
import android.view.View;
import android.widget.LinearLayout;

import com.android.internal.statusbar.StatusBarIcon;

import com.android.systemui.R;


public class IconMerger extends LinearLayout {
    private static final String TAG = "IconMerger";

    private int mIconSize;
    private StatusBarIconView mMoreView;
    private StatusBarIcon mMoreIcon = new StatusBarIcon(null, R.drawable.stat_notify_more, 0);

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

    public void addMoreView(StatusBarIconView v, LinearLayout.LayoutParams lp) {
        super.addView(v, lp);
        mMoreView = v;
        mIconSize = context.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.status_bar_icon_size);

        mMoreView = new StatusBarIconView(context, "more");
        mMoreView.set(mMoreIcon);
        addView(mMoreView, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
    }

    public void addView(StatusBarIconView v, int index, LinearLayout.LayoutParams lp) {
    public void addView(StatusBarIconView v, int index) {
        if (index == 0) {
            throw new RuntimeException("Attempt to put view before the more view: " + v);
        }
        super.addView(v, index, lp);
        addView(v, index, new LinearLayout.LayoutParams(mIconSize, mIconSize));
    }

    @Override
@@ -128,27 +134,7 @@ public class IconMerger extends LinearLayout {
            }
        }

        // BUG: Updating the text during the layout here doesn't seem to cause
        // the view to be redrawn fully.  The text view gets resized correctly, but the
        // text contents aren't drawn properly.  To work around this, we post a message
        // and provide the value later.  We're the only one changing this value show it
        // should be ordered correctly.
        if (false) {
            // TODO this.moreIcon.update(number);
        } else {
            mBugWorkaroundNumber = number;
            mBugWorkaroundHandler.post(mBugWorkaroundRunnable);
        }
    }

    private int mBugWorkaroundNumber;
    private Handler mBugWorkaroundHandler = new Handler();
    private Runnable mBugWorkaroundRunnable = new Runnable() {
        public void run() {
            /* TODO
            IconMerger.this.moreIcon.update(mBugWorkaroundNumber);
            IconMerger.this.moreIcon.view.invalidate();
            */
        mMoreIcon.number = number;
        mMoreView.set(mMoreIcon);
    }
    };
}
+69 −1
Original line number Diff line number Diff line
@@ -21,22 +21,37 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.Slog;
import android.util.Log;
import android.view.View;
import android.view.ViewDebug;
import android.widget.FrameLayout;

import com.android.internal.statusbar.StatusBarIcon;

import com.android.systemui.R;

public class StatusBarIconView extends AnimatedImageView {
    private static final String TAG = "StatusBarIconView";

    private StatusBarIcon mIcon;
    @ViewDebug.ExportedProperty private String mSlot;
    private Drawable mNumberBackground;
    private Paint mNumberPain;
    private int mNumberX;
    private int mNumberY;
    private String mNumberText;

    public StatusBarIconView(Context context, String slot) {
        super(context);
        final Resources res = context.getResources();
        mSlot = slot;
        mNumberPain = new Paint();
        mNumberPain.setTextAlign(Paint.Align.CENTER);
        mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color));
        mNumberPain.setAntiAlias(true);
    }

    private static boolean streq(String a, String b) {
@@ -63,6 +78,9 @@ public class StatusBarIconView extends AnimatedImageView {
                && mIcon.iconLevel == icon.iconLevel;
        final boolean visibilityEquals = mIcon != null
                && mIcon.visible == icon.visible;
        final boolean numberEquals = mIcon != null
                && mIcon.number == icon.number;
        mIcon = icon.clone();
        if (!iconEquals) {
            Drawable drawable = getIcon(icon);
            if (drawable == null) {
@@ -74,10 +92,22 @@ public class StatusBarIconView extends AnimatedImageView {
        if (!levelEquals) {
            setImageLevel(icon.iconLevel);
        }
        if (!numberEquals) {
            if (icon.number > 0) {
                if (mNumberBackground == null) {
                    mNumberBackground = getContext().getResources().getDrawable(
                            R.drawable.ic_notification_overlay);
                }
                placeNumber();
            } else {
                mNumberBackground = null;
                mNumberText = null;
            }
            invalidate();
        }
        if (!visibilityEquals) {
            setVisibility(icon.visible ? VISIBLE : GONE);
        }
        mIcon = icon.clone();
        return true;
    }

@@ -126,9 +156,47 @@ public class StatusBarIconView extends AnimatedImageView {
        return mIcon;
    }

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (mNumberBackground != null) {
            placeNumber();
        }
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mNumberBackground != null) {
            mNumberBackground.draw(canvas);
            canvas.drawText(mNumberText, mNumberX, mNumberY, mNumberPain);
        }
    }

    protected void debug(int depth) {
        super.debug(depth);
        Log.d("View", debugIndent(depth) + "slot=" + mSlot);
        Log.d("View", debugIndent(depth) + "icon=" + mIcon);
    }

    void placeNumber() {
        final String str = mNumberText = Integer.toString(mIcon.number);
        final int w = getWidth();
        final int h = getHeight();
        final Rect r = new Rect();
        mNumberPain.getTextBounds(str, 0, str.length(), r);
        final int tw = r.right - r.left;
        final int th = r.bottom - r.top;
        mNumberBackground.getPadding(r);
        int dw = r.left + tw + r.right;
        if (dw < mNumberBackground.getMinimumWidth()) {
            dw = mNumberBackground.getMinimumWidth();
        }
        mNumberX = w-r.right-((dw-r.right-r.left)/2);
        int dh = r.top + th + r.bottom;
        if (dh < mNumberBackground.getMinimumWidth()) {
            dh = mNumberBackground.getMinimumWidth();
        }
        mNumberY = h-r.bottom-((dh-r.top-th-r.bottom)/2);
        mNumberBackground.setBounds(w-dw, h-dh, w, h);
    }
}
+1 −8
Original line number Diff line number Diff line
@@ -309,12 +309,6 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks

        mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);

        // the more notifications icon
        StatusBarIconView moreView = new StatusBarIconView(this, "more");
        moreView.set(new StatusBarIcon(null, R.drawable.stat_notify_more, 0));
        mNotificationIcons.addMoreView(moreView,
                new LinearLayout.LayoutParams(mIconSize, mIconSize));

        // set the inital view visibility
        setAreThereNotifications();
        mDateView.setVisibility(View.INVISIBLE);
@@ -580,8 +574,7 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
        parent.addView(row, viewIndex);
        // Add the icon.
        final int iconIndex = chooseIconIndex(isOngoing, viewIndex);
        mNotificationIcons.addView(iconView, iconIndex,
                new LinearLayout.LayoutParams(mIconSize, mIconSize));
        mNotificationIcons.addView(iconView, iconIndex);
        return iconView;
    }

Loading