Loading res/values-v31/colors.xml +5 −0 Original line number Diff line number Diff line Loading @@ -56,4 +56,9 @@ <color name="workspace_accent_color_light">@android:color/system_accent1_100</color> <color name="workspace_accent_color_dark">@android:color/system_accent2_600</color> <color name="preload_icon_accent_color_light">@android:color/system_accent1_600</color> <color name="preload_icon_background_color_light">@android:color/system_accent2_200</color> <color name="preload_icon_accent_color_dark">@android:color/system_accent1_300</color> <color name="preload_icon_background_color_dark">@android:color/system_neutral2_700</color> </resources> res/values/attrs.xml +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ <attr name="workProfileOverlayTextColor" format="color" /> <attr name="workspaceAccentColor" format="color" /> <attr name="dropTargetHoverTextColor" format="color" /> <attr name="preloadIconAccentColor" format="color" /> <attr name="preloadIconBackgroundColor" format="color" /> <attr name="allAppsButtonBgColor" format="color" /> <attr name="allAppsButtonColor1" format="color" /> Loading res/values/colors.xml +5 −0 Original line number Diff line number Diff line Loading @@ -85,4 +85,9 @@ <color name="all_apps_button_color_2">#00677E</color> <color name="all_apps_button_color_3">#5F757E</color> <color name="all_apps_button_color_4">#005A6E</color> <color name="preload_icon_accent_color_light">#00668B</color> <color name="preload_icon_background_color_light">#B5CAD7</color> <color name="preload_icon_accent_color_dark">#4BB6E8</color> <color name="preload_icon_background_color_dark">#40484D</color> </resources> res/values/styles.xml +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ <item name="workspaceAccentColor">@color/workspace_accent_color_light</item> <item name="dropTargetHoverTextColor">@color/workspace_text_color_dark</item> <item name="overviewScrimColor">@color/overview_scrim</item> <item name="preloadIconAccentColor">@color/preload_icon_accent_color_light</item> <item name="preloadIconBackgroundColor">@color/preload_icon_background_color_light</item> <item name="android:windowTranslucentStatus">false</item> <item name="android:windowTranslucentNavigation">false</item> Loading Loading @@ -123,6 +125,8 @@ <item name="workProfileOverlayTextColor">@android:color/white</item> <item name="eduHalfSheetBGColor">#DD000000</item> <item name="overviewScrimColor">@color/overview_scrim_dark</item> <item name="preloadIconAccentColor">@color/preload_icon_accent_color_dark</item> <item name="preloadIconBackgroundColor">@color/preload_icon_background_color_dark</item> </style> <style name="LauncherTheme.Dark.DarkMainColor" parent="@style/LauncherTheme.Dark"> Loading src/com/android/launcher3/graphics/PreloadIconDrawable.java +29 −56 Original line number Diff line number Diff line Loading @@ -28,11 +28,9 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathMeasure; import android.graphics.Rect; import android.util.Pair; import android.util.Property; import android.util.SparseArray; import android.view.ContextThemeWrapper; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.Interpolators; import com.android.launcher3.icons.FastBitmapDrawable; Loading @@ -40,8 +38,6 @@ import com.android.launcher3.icons.GraphicsUtils; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.util.Themes; import java.lang.ref.WeakReference; /** * Extension of {@link FastBitmapDrawable} which shows a progress bar around the icon. */ Loading @@ -61,9 +57,9 @@ public class PreloadIconDrawable extends FastBitmapDrawable { }; private static final int DEFAULT_PATH_SIZE = 100; private static final float PROGRESS_WIDTH = 7; private static final float PROGRESS_GAP = 2; private static final int MAX_PAINT_ALPHA = 255; private static final int TRACK_ALPHA = (int) (0.27f * MAX_PAINT_ALPHA); private static final int DISABLED_ICON_ALPHA = (int) (0.6f * MAX_PAINT_ALPHA); private static final long DURATION_SCALE = 500; Loading @@ -71,13 +67,8 @@ public class PreloadIconDrawable extends FastBitmapDrawable { // Duration = COMPLETE_ANIM_FRACTION * DURATION_SCALE private static final float COMPLETE_ANIM_FRACTION = 0.3f; private static final int COLOR_TRACK = 0x77EEEEEE; private static final int COLOR_SHADOW = 0x55000000; private static final float SMALL_SCALE = 0.6f; private static final SparseArray<WeakReference<Pair<Path, Bitmap>>> sShadowCache = new SparseArray<>(); private static final float SMALL_SCALE = 0.7f; private static final float PROGRESS_STROKE_SCALE = 0.075f; private static final int PRELOAD_ACCENT_COLOR_INDEX = 0; private static final int PRELOAD_BACKGROUND_COLOR_INDEX = 1; Loading @@ -94,7 +85,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable { private final Path mScaledProgressPath; private final Paint mProgressPaint; private Bitmap mShadowBitmap; private final int mIndicatorColor; private final int mSystemAccentColor; private final int mSystemBackgroundColor; Loading Loading @@ -134,7 +124,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mScaledProgressPath = new Path(); mProgressPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeCap(Paint.Cap.ROUND); mIndicatorColor = indicatorColor; Loading @@ -149,47 +138,22 @@ public class PreloadIconDrawable extends FastBitmapDrawable { @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); float progressWidth = PROGRESS_STROKE_SCALE * bounds.width(); mTmpMatrix.setScale( (bounds.width() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE, (bounds.height() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE); mTmpMatrix.postTranslate( bounds.left + PROGRESS_WIDTH + PROGRESS_GAP, bounds.top + PROGRESS_WIDTH + PROGRESS_GAP); (bounds.width() - 2 * progressWidth) / DEFAULT_PATH_SIZE, (bounds.height() - 2 * progressWidth) / DEFAULT_PATH_SIZE); mTmpMatrix.postTranslate(bounds.left + progressWidth, bounds.top + progressWidth); mShapePath.transform(mTmpMatrix, mScaledTrackPath); float scale = bounds.width() / DEFAULT_PATH_SIZE; mProgressPaint.setStrokeWidth(PROGRESS_WIDTH * scale); mProgressPaint.setStrokeWidth(progressWidth); mShadowBitmap = getShadowBitmap(bounds.width(), bounds.height(), (PROGRESS_GAP ) * scale); mPathMeasure.setPath(mScaledTrackPath, true); mTrackLength = mPathMeasure.getLength(); setInternalProgress(mInternalStateProgress); } private Bitmap getShadowBitmap(int width, int height, float shadowRadius) { int key = ((width << 16) | height) * (mIsDarkMode ? -1 : 1); WeakReference<Pair<Path, Bitmap>> shadowRef = sShadowCache.get(key); Pair<Path, Bitmap> cache = shadowRef != null ? shadowRef.get() : null; Bitmap shadow = cache != null && cache.first.equals(mShapePath) ? cache.second : null; if (shadow != null) { return shadow; } shadow = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(shadow); mProgressPaint.setShadowLayer(shadowRadius, 0, 0, mIsStartable ? COLOR_SHADOW : mSystemAccentColor); mProgressPaint.setColor(mIsStartable ? COLOR_TRACK : mSystemBackgroundColor); mProgressPaint.setAlpha(MAX_PAINT_ALPHA); c.drawPath(mScaledTrackPath, mProgressPaint); mProgressPaint.clearShadowLayer(); c.setBitmap(null); sShadowCache.put(key, new WeakReference<>(Pair.create(mShapePath, shadow))); return shadow; } @Override public void drawInternal(Canvas canvas, Rect bounds) { if (mRanFinishAnimation) { Loading @@ -197,12 +161,17 @@ public class PreloadIconDrawable extends FastBitmapDrawable { return; } // Draw track. // Draw background. mProgressPaint.setStyle(Paint.Style.FILL_AND_STROKE); mProgressPaint.setColor(mSystemBackgroundColor); canvas.drawPath(mScaledTrackPath, mProgressPaint); // Draw track and progress. mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setColor(mIsStartable ? mIndicatorColor : mSystemAccentColor); mProgressPaint.setAlpha(TRACK_ALPHA); canvas.drawPath(mScaledTrackPath, mProgressPaint); mProgressPaint.setAlpha(mTrackAlpha); if (mShadowBitmap != null) { canvas.drawBitmap(mShadowBitmap, bounds.left, bounds.top, mProgressPaint); } canvas.drawPath(mScaledProgressPath, mProgressPaint); int saveCount = canvas.save(); Loading @@ -211,6 +180,11 @@ public class PreloadIconDrawable extends FastBitmapDrawable { canvas.restoreToCount(saveCount); } @Override protected void updateFilter() { setAlpha(mIsDisabled ? DISABLED_ICON_ALPHA : MAX_PAINT_ALPHA); } /** * Updates the install progress based on the level */ Loading Loading @@ -326,13 +300,12 @@ public class PreloadIconDrawable extends FastBitmapDrawable { } private static int[] getPreloadColors(Context context) { Context dayNightThemeContext = new ContextThemeWrapper( context, android.R.style.Theme_DeviceDefault_DayNight); int[] preloadColors = new int[2]; preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getColorAccent(dayNightThemeContext); preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getColorBackgroundFloating( dayNightThemeContext); preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getAttrColor(context, R.attr.preloadIconAccentColor); preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getAttrColor(context, R.attr.preloadIconBackgroundColor); return preloadColors; } Loading Loading
res/values-v31/colors.xml +5 −0 Original line number Diff line number Diff line Loading @@ -56,4 +56,9 @@ <color name="workspace_accent_color_light">@android:color/system_accent1_100</color> <color name="workspace_accent_color_dark">@android:color/system_accent2_600</color> <color name="preload_icon_accent_color_light">@android:color/system_accent1_600</color> <color name="preload_icon_background_color_light">@android:color/system_accent2_200</color> <color name="preload_icon_accent_color_dark">@android:color/system_accent1_300</color> <color name="preload_icon_background_color_dark">@android:color/system_neutral2_700</color> </resources>
res/values/attrs.xml +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ <attr name="workProfileOverlayTextColor" format="color" /> <attr name="workspaceAccentColor" format="color" /> <attr name="dropTargetHoverTextColor" format="color" /> <attr name="preloadIconAccentColor" format="color" /> <attr name="preloadIconBackgroundColor" format="color" /> <attr name="allAppsButtonBgColor" format="color" /> <attr name="allAppsButtonColor1" format="color" /> Loading
res/values/colors.xml +5 −0 Original line number Diff line number Diff line Loading @@ -85,4 +85,9 @@ <color name="all_apps_button_color_2">#00677E</color> <color name="all_apps_button_color_3">#5F757E</color> <color name="all_apps_button_color_4">#005A6E</color> <color name="preload_icon_accent_color_light">#00668B</color> <color name="preload_icon_background_color_light">#B5CAD7</color> <color name="preload_icon_accent_color_dark">#4BB6E8</color> <color name="preload_icon_background_color_dark">#40484D</color> </resources>
res/values/styles.xml +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ <item name="workspaceAccentColor">@color/workspace_accent_color_light</item> <item name="dropTargetHoverTextColor">@color/workspace_text_color_dark</item> <item name="overviewScrimColor">@color/overview_scrim</item> <item name="preloadIconAccentColor">@color/preload_icon_accent_color_light</item> <item name="preloadIconBackgroundColor">@color/preload_icon_background_color_light</item> <item name="android:windowTranslucentStatus">false</item> <item name="android:windowTranslucentNavigation">false</item> Loading Loading @@ -123,6 +125,8 @@ <item name="workProfileOverlayTextColor">@android:color/white</item> <item name="eduHalfSheetBGColor">#DD000000</item> <item name="overviewScrimColor">@color/overview_scrim_dark</item> <item name="preloadIconAccentColor">@color/preload_icon_accent_color_dark</item> <item name="preloadIconBackgroundColor">@color/preload_icon_background_color_dark</item> </style> <style name="LauncherTheme.Dark.DarkMainColor" parent="@style/LauncherTheme.Dark"> Loading
src/com/android/launcher3/graphics/PreloadIconDrawable.java +29 −56 Original line number Diff line number Diff line Loading @@ -28,11 +28,9 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathMeasure; import android.graphics.Rect; import android.util.Pair; import android.util.Property; import android.util.SparseArray; import android.view.ContextThemeWrapper; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.Interpolators; import com.android.launcher3.icons.FastBitmapDrawable; Loading @@ -40,8 +38,6 @@ import com.android.launcher3.icons.GraphicsUtils; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.util.Themes; import java.lang.ref.WeakReference; /** * Extension of {@link FastBitmapDrawable} which shows a progress bar around the icon. */ Loading @@ -61,9 +57,9 @@ public class PreloadIconDrawable extends FastBitmapDrawable { }; private static final int DEFAULT_PATH_SIZE = 100; private static final float PROGRESS_WIDTH = 7; private static final float PROGRESS_GAP = 2; private static final int MAX_PAINT_ALPHA = 255; private static final int TRACK_ALPHA = (int) (0.27f * MAX_PAINT_ALPHA); private static final int DISABLED_ICON_ALPHA = (int) (0.6f * MAX_PAINT_ALPHA); private static final long DURATION_SCALE = 500; Loading @@ -71,13 +67,8 @@ public class PreloadIconDrawable extends FastBitmapDrawable { // Duration = COMPLETE_ANIM_FRACTION * DURATION_SCALE private static final float COMPLETE_ANIM_FRACTION = 0.3f; private static final int COLOR_TRACK = 0x77EEEEEE; private static final int COLOR_SHADOW = 0x55000000; private static final float SMALL_SCALE = 0.6f; private static final SparseArray<WeakReference<Pair<Path, Bitmap>>> sShadowCache = new SparseArray<>(); private static final float SMALL_SCALE = 0.7f; private static final float PROGRESS_STROKE_SCALE = 0.075f; private static final int PRELOAD_ACCENT_COLOR_INDEX = 0; private static final int PRELOAD_BACKGROUND_COLOR_INDEX = 1; Loading @@ -94,7 +85,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable { private final Path mScaledProgressPath; private final Paint mProgressPaint; private Bitmap mShadowBitmap; private final int mIndicatorColor; private final int mSystemAccentColor; private final int mSystemBackgroundColor; Loading Loading @@ -134,7 +124,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mScaledProgressPath = new Path(); mProgressPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeCap(Paint.Cap.ROUND); mIndicatorColor = indicatorColor; Loading @@ -149,47 +138,22 @@ public class PreloadIconDrawable extends FastBitmapDrawable { @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); float progressWidth = PROGRESS_STROKE_SCALE * bounds.width(); mTmpMatrix.setScale( (bounds.width() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE, (bounds.height() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE); mTmpMatrix.postTranslate( bounds.left + PROGRESS_WIDTH + PROGRESS_GAP, bounds.top + PROGRESS_WIDTH + PROGRESS_GAP); (bounds.width() - 2 * progressWidth) / DEFAULT_PATH_SIZE, (bounds.height() - 2 * progressWidth) / DEFAULT_PATH_SIZE); mTmpMatrix.postTranslate(bounds.left + progressWidth, bounds.top + progressWidth); mShapePath.transform(mTmpMatrix, mScaledTrackPath); float scale = bounds.width() / DEFAULT_PATH_SIZE; mProgressPaint.setStrokeWidth(PROGRESS_WIDTH * scale); mProgressPaint.setStrokeWidth(progressWidth); mShadowBitmap = getShadowBitmap(bounds.width(), bounds.height(), (PROGRESS_GAP ) * scale); mPathMeasure.setPath(mScaledTrackPath, true); mTrackLength = mPathMeasure.getLength(); setInternalProgress(mInternalStateProgress); } private Bitmap getShadowBitmap(int width, int height, float shadowRadius) { int key = ((width << 16) | height) * (mIsDarkMode ? -1 : 1); WeakReference<Pair<Path, Bitmap>> shadowRef = sShadowCache.get(key); Pair<Path, Bitmap> cache = shadowRef != null ? shadowRef.get() : null; Bitmap shadow = cache != null && cache.first.equals(mShapePath) ? cache.second : null; if (shadow != null) { return shadow; } shadow = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(shadow); mProgressPaint.setShadowLayer(shadowRadius, 0, 0, mIsStartable ? COLOR_SHADOW : mSystemAccentColor); mProgressPaint.setColor(mIsStartable ? COLOR_TRACK : mSystemBackgroundColor); mProgressPaint.setAlpha(MAX_PAINT_ALPHA); c.drawPath(mScaledTrackPath, mProgressPaint); mProgressPaint.clearShadowLayer(); c.setBitmap(null); sShadowCache.put(key, new WeakReference<>(Pair.create(mShapePath, shadow))); return shadow; } @Override public void drawInternal(Canvas canvas, Rect bounds) { if (mRanFinishAnimation) { Loading @@ -197,12 +161,17 @@ public class PreloadIconDrawable extends FastBitmapDrawable { return; } // Draw track. // Draw background. mProgressPaint.setStyle(Paint.Style.FILL_AND_STROKE); mProgressPaint.setColor(mSystemBackgroundColor); canvas.drawPath(mScaledTrackPath, mProgressPaint); // Draw track and progress. mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setColor(mIsStartable ? mIndicatorColor : mSystemAccentColor); mProgressPaint.setAlpha(TRACK_ALPHA); canvas.drawPath(mScaledTrackPath, mProgressPaint); mProgressPaint.setAlpha(mTrackAlpha); if (mShadowBitmap != null) { canvas.drawBitmap(mShadowBitmap, bounds.left, bounds.top, mProgressPaint); } canvas.drawPath(mScaledProgressPath, mProgressPaint); int saveCount = canvas.save(); Loading @@ -211,6 +180,11 @@ public class PreloadIconDrawable extends FastBitmapDrawable { canvas.restoreToCount(saveCount); } @Override protected void updateFilter() { setAlpha(mIsDisabled ? DISABLED_ICON_ALPHA : MAX_PAINT_ALPHA); } /** * Updates the install progress based on the level */ Loading Loading @@ -326,13 +300,12 @@ public class PreloadIconDrawable extends FastBitmapDrawable { } private static int[] getPreloadColors(Context context) { Context dayNightThemeContext = new ContextThemeWrapper( context, android.R.style.Theme_DeviceDefault_DayNight); int[] preloadColors = new int[2]; preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getColorAccent(dayNightThemeContext); preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getColorBackgroundFloating( dayNightThemeContext); preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getAttrColor(context, R.attr.preloadIconAccentColor); preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getAttrColor(context, R.attr.preloadIconBackgroundColor); return preloadColors; } Loading