diff --git a/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java b/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java index 65b31314ce430abe6fff1d55c3399572648c4840..3131e67f65ca8cb419044423a3c32227a6b5043c 100644 --- a/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java +++ b/iconloaderlib/src/com/android/launcher3/icons/DotRenderer.java @@ -42,7 +42,7 @@ public class DotRenderer { // The dot size is defined as a percentage of the app icon size. private static final float SIZE_PERCENTAGE = 0.21f; - private static final float SIZE_PERCENTAGE_WITH_COUNT = 0.28f; + private static final float SIZE_PERCENTAGE_WITH_COUNT = 0.24f; // The max number to draw on dots private static final int MAX_COUNT = 999; @@ -145,19 +145,22 @@ public class DotRenderer { // Ensure dot fits entirely in canvas clip bounds. Rect canvasBounds = canvas.getClipBounds(); - float offsetX = params.leftAlign - ? Math.max(0, canvasBounds.left - (dotCenterX + mBitmapOffset)) - : Math.min(0, canvasBounds.right - (dotCenterX - mBitmapOffset)); - float offsetY = Math.max(0, canvasBounds.top - (dotCenterY + mBitmapOffset)); // We draw the dot relative to its center. - float dx = dotCenterX + offsetX - (isTablet && !isTaskbar ? 15f : 0f); - float dy = dotCenterY + offsetY - (isTablet ? 20f : 15f); - - if (numNotifications > 9 && numNotifications < 1000) { - canvas.translate(dx - 17f, dy); + float availableWidth = (float) (canvasBounds.width() - iconBounds.width()) / 2; + + // We check if the dot is too close to the edge of the screen and nudge it if necessary. + boolean mustNudge = isTablet && availableWidth < mCircleRadius; + float dx = mustNudge? mCircleRadius: dotCenterX; + + // Taskbar icons are too small and do not show the dot text. + // We will displace the dot to the correct position. + if (isTaskbar) { + canvas.translate(dotCenterX - mCircleRadius, dotCenterY - mCircleRadius); + } else if (numNotifications > 9 && numNotifications < 1000) { + canvas.translate(dx - (mustNudge ? 12f : 17f), dotCenterY); } else if (numNotifications > 0) { - canvas.translate(dx - 12f, dy); + canvas.translate(dx - 12f, dotCenterY); } float scale = params.scale * (isTablet && !isTaskbar ? 0.75f : 1f);