diff options
author | Tony Wickham <twickham@google.com> | 2017-01-11 09:53:12 -0800 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2017-01-13 10:58:10 -0800 |
commit | 9a8d11f930ced4c2706db150b7bbbb21330bd68d (patch) | |
tree | 836cd603e38d3cb17ae0a5950757b479639c6c85 /src/com/android/launcher3/badge | |
parent | 19ea5cc0c853d48db59363f763d9a06c8691e00d (diff) | |
download | packages_apps_Trebuchet-9a8d11f930ced4c2706db150b7bbbb21330bd68d.tar.gz packages_apps_Trebuchet-9a8d11f930ced4c2706db150b7bbbb21330bd68d.tar.bz2 packages_apps_Trebuchet-9a8d11f930ced4c2706db150b7bbbb21330bd68d.zip |
FastBitmapDrawable can draw an icon badge (notification count)
- Added BadgeInfo to contain data to be shown in a badge
(currently just notification count).
- Added BadgeRenderer in DeviceProfile to contain things
relevant to drawing the badge, such as size and Paint's.
- Added IconPalette to compute colors for the badge based
on a dominant color (will also be used for notifications)
- FastBitmapDrawable uses these classes to draw the badge.
Bug: 32410600
Change-Id: I6595a4879943357590f7d20c22594691a573ecaf
Diffstat (limited to 'src/com/android/launcher3/badge')
-rw-r--r-- | src/com/android/launcher3/badge/BadgeInfo.java | 33 | ||||
-rw-r--r-- | src/com/android/launcher3/badge/BadgeRenderer.java | 70 |
2 files changed, 103 insertions, 0 deletions
diff --git a/src/com/android/launcher3/badge/BadgeInfo.java b/src/com/android/launcher3/badge/BadgeInfo.java new file mode 100644 index 000000000..0a9f87c6e --- /dev/null +++ b/src/com/android/launcher3/badge/BadgeInfo.java @@ -0,0 +1,33 @@ +/* + * 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.launcher3.badge; + +/** + * Contains data to be used in an icon badge. + */ +public class BadgeInfo { + + private int mNotificationCount; + + public void setNotificationCount(int count) { + mNotificationCount = count; + } + + public String getNotificationCount() { + return mNotificationCount == 0 ? null : String.valueOf(mNotificationCount); + } +} diff --git a/src/com/android/launcher3/badge/BadgeRenderer.java b/src/com/android/launcher3/badge/BadgeRenderer.java new file mode 100644 index 000000000..238b9188f --- /dev/null +++ b/src/com/android/launcher3/badge/BadgeRenderer.java @@ -0,0 +1,70 @@ +/* + * 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.launcher3.badge; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; + +import com.android.launcher3.graphics.IconPalette; + +/** + * Contains parameters necessary to draw a badge for an icon (e.g. the size of the badge). + * @see BadgeInfo for the data to draw + */ +public class BadgeRenderer { + + public int size; + public int textSize; + + private final RectF mBackgroundRect = new RectF(); + private final Paint mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final int mTextHeight; + + public BadgeRenderer(int size, int textSize) { + this.size = size; + this.textSize = textSize; + mTextPaint.setTextAlign(Paint.Align.CENTER); + mTextPaint.setTextSize(textSize); + // Measure the text height. + Rect temp = new Rect(); + mTextPaint.getTextBounds("0", 0, 1, temp); + mTextHeight = temp.height(); + } + + /** + * Draw a circle in the top right corner of the given bounds, and draw + * {@link BadgeInfo#getNotificationCount()} on top of the circle. + * @param palette The colors (based on the icon) to use for the badge. + * @param badgeInfo Contains data to draw on the badge. + * @param iconBounds The bounds of the icon being badged. + */ + public void draw(Canvas canvas, IconPalette palette, BadgeInfo badgeInfo, Rect iconBounds) { + mBackgroundPaint.setColor(palette.backgroundColor); + mTextPaint.setColor(palette.textColor); + mBackgroundRect.set(iconBounds.right - size, iconBounds.top, iconBounds.right, + iconBounds.top + size); + canvas.drawOval(mBackgroundRect, mBackgroundPaint); + String notificationCount = badgeInfo.getNotificationCount(); + canvas.drawText(notificationCount, + mBackgroundRect.centerX(), + mBackgroundRect.centerY() + mTextHeight / 2, + mTextPaint); + } +} |