Loading app/src/main/java/org/indin/blisslaunchero/AppUtil.java +19 −30 Original line number Diff line number Diff line Loading @@ -22,10 +22,8 @@ public class AppUtil { /** * Uses the PackageManager to find all launchable apps. * @param context * @return */ public static List<AppItem> loadLaunchableApps(Context context) { public static List<AppItem> loadLaunchableApps(Context context, int iconWidth) { PackageManager packageManager = context.getPackageManager(); List<ApplicationInfo> apps = packageManager.getInstalledApplications(0); Loading @@ -37,20 +35,17 @@ public class AppUtil { String componentName = intent.getComponent().toString(); boolean iconFromIconPack = true; Drawable appIcon; Drawable appIcon = null; // Load icon from icon pack if present if (IconPackUtil.iconPackPresent) { appIcon = IconPackUtil.getIconFromIconPack(context, componentName); } if (appIcon == null) { appIcon = app.loadIcon(packageManager); iconFromIconPack = false; appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f); appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f, iconWidth); appIcon = GraphicsUtil.maskImage(context, appIcon); } } else { appIcon = app.loadIcon(packageManager); iconFromIconPack = false; } AppItem launchableApp = new AppItem( app.loadLabel(packageManager), Loading @@ -77,10 +72,6 @@ public class AppUtil { /** * Currently picks four apps for the dock (Phone, SMS, Browser, Camera) * * @param context * @param launchableApps * @return */ public static List<AppItem> getPinnedApps(Context context, List<AppItem> launchableApps) { PackageManager pm = context.getPackageManager(); Loading Loading @@ -120,18 +111,16 @@ public class AppUtil { /** * Create an AppItem object given just a package name * @param context * @param packageName * @return */ public static AppItem createAppItem(Context context, String packageName) { public static AppItem createAppItem(Context context, String packageName, int iconWidth) { try { PackageManager packageManager = context.getPackageManager(); ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0); Intent intent = packageManager.getLaunchIntentForPackage(packageName); if(intent == null) if (intent == null) { return null; } String componentName = intent.getComponent().toString(); Drawable appIcon; Loading @@ -141,7 +130,7 @@ public class AppUtil { if (appIcon == null) { appIcon = appInfo.loadIcon(packageManager); iconFromIconPack = false; appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f); appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f, iconWidth); appIcon = GraphicsUtil.maskImage(context, appIcon); } } else { Loading app/src/main/java/org/indin/blisslaunchero/DesktopActivity.java +40 −21 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.Display; import android.view.DragEvent; import android.view.Gravity; Loading Loading @@ -227,7 +228,7 @@ public class DesktopActivity extends AppCompatActivity { } } AppItem appItem = AppUtil.createAppItem(this, packageName); AppItem appItem = AppUtil.createAppItem(this, packageName, iconWidth); if (appItem != null) { View view = prepareApp(appItem); int current = getCurrentAppsPageNumber(); Loading Loading @@ -256,7 +257,7 @@ public class DesktopActivity extends AppCompatActivity { // Cache icons before loading apps IconPackUtil.cacheIconsFromIconPack(this); launchableApps = AppUtil.loadLaunchableApps(getApplicationContext()); launchableApps = AppUtil.loadLaunchableApps(getApplicationContext(), iconWidth); pinnedApps = AppUtil.getPinnedApps(this, launchableApps); launchableApps.removeAll(pinnedApps); Loading Loading @@ -293,9 +294,9 @@ public class DesktopActivity extends AppCompatActivity { double screenInches = Math.sqrt(x + y); Log.d("debug", "Screen inches : " + screenInches); if (screenInches <= 4.7) { if (screenInches <= 4.5) { nRows = 4; } else if (screenInches <= 5.4) { } else if (screenInches <= 5.2) { nRows = 5; } else { nRows = 6; Loading @@ -316,7 +317,8 @@ public class DesktopActivity extends AppCompatActivity { hotBackground = getResources().getDrawable(R.drawable.rounded_corners_icon_hot, null); defaultBackground = getResources().getDrawable(R.drawable.rounded_corners_icon, null); scrollCorner = getResources().getDimensionPixelSize(R.dimen.scrollCorner); scrollCorner = getResources().getDimensionPixelSize(R.dimen.scrollCorner) * mPagerWidth / 480; wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); transparentBackground = getResources().getDrawable(R.drawable.transparent, null); Loading Loading @@ -751,7 +753,7 @@ public class DesktopActivity extends AppCompatActivity { } } folderItem.setIcon(GraphicsUtil.generateFolderIcon(this, folderItem)); folderItem.setIcon(GraphicsUtil.generateFolderIcon(this, folderItem, iconWidth)); //output = prepareApp(folderItem); return folderItem; } else { Loading Loading @@ -799,6 +801,11 @@ public class DesktopActivity extends AppCompatActivity { final Intent intent = app.getIntent(); icon.setImageDrawable(app.getIcon()); label.setText(app.getLabel()); if (nRows < 6) { label.setTextSize(12); } else { label.setTextSize(14); } List<Object> tags = new ArrayList<>(); tags.add(icon); tags.add(label); Loading Loading @@ -1245,8 +1252,18 @@ public class DesktopActivity extends AppCompatActivity { activeFolder.getSubApps().remove(app); assert app != null; app.setBelongsToFolder(false); Log.i(TAG, "removeAppFromFolder: Size:" + activeFolder.getSubApps().size()); if (activeFolder.getSubApps().size() == 0) { View view = prepareApp(app); if (folderFromDock) { addToDock(view, dock.indexOfChild(activeFolderView)); } else { GridLayout gridLayout = pages.get(getCurrentAppsPageNumber()); addAppToPage(gridLayout, view, gridLayout.indexOfChild(activeFolderView)); } ((ViewGroup) activeFolderView.getParent()).removeView(activeFolderView); } else { if (activeFolder.getSubApps().size() == 1) { AppItem item = activeFolder.getSubApps().get(0); activeFolder.getSubApps().remove(item); Loading @@ -1262,17 +1279,19 @@ public class DesktopActivity extends AppCompatActivity { ((ViewGroup) activeFolderView.getParent()).removeView(activeFolderView); } else { updateIcon(activeFolderView, activeFolder, GraphicsUtil.generateFolderIcon(this, activeFolder)); GraphicsUtil.generateFolderIcon(this, activeFolder, iconWidth)); } hideFolderWindowContainer(); if (movingApp.getParent() != null) { ((ViewGroup) movingApp.getParent()).removeView(movingApp); } movingApp.setVisibility(View.VISIBLE); int current = getCurrentAppsPageNumber(); addAppToPage(pages.get(current), movingApp); } hideFolderWindowContainer(); movingApp.setVisibility(View.VISIBLE); } } /** Loading Loading @@ -1329,7 +1348,7 @@ public class DesktopActivity extends AppCompatActivity { AppItem app1 = (AppItem) ((List<Object>) collidingApp.getTag()).get(2); AppItem app2 = (AppItem) ((List<Object>) movingApp.getTag()).get(2); Drawable folderIcon = GraphicsUtil.generateFolderIcon(this, Drawable folderIcon = GraphicsUtil.generateFolderIcon(this, iconWidth, app1.getIcon(), app2.getIcon()); AppItem folder; Loading Loading @@ -1357,7 +1376,7 @@ public class DesktopActivity extends AppCompatActivity { } else { app2.setBelongsToFolder(true); app1.getSubApps().add(app2); updateIcon(collidingApp, app1, GraphicsUtil.generateFolderIcon(this, app1)); updateIcon(collidingApp, app1, GraphicsUtil.generateFolderIcon(this, app1, iconWidth)); } Loading app/src/main/java/org/indin/blisslaunchero/GraphicsUtil.java +37 −36 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ package org.indin.blisslaunchero; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; Loading @@ -13,6 +12,7 @@ import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import android.support.v4.content.ContextCompat; import android.util.Log; public class GraphicsUtil { Loading Loading @@ -41,16 +41,14 @@ public class GraphicsUtil { /** * Takes 1 or more drawables and merges them to form a single Drawable. * However, if more than 4 drawables are provided, only the first 4 are used. * @param context * @param sources * @return */ public static Drawable generateFolderIcon(Context context, Drawable ...sources) { for(Drawable d:sources) public static Drawable generateFolderIcon(Context context, int iconWidth, Drawable... sources) { for (Drawable d : sources) { if (!(d instanceof BitmapDrawable)) { Log.d(TAG, "Unknown type of icon found"); return context.getResources().getDrawable(R.mipmap.ic_folder, null); } } int width = sources[0].getIntrinsicWidth(); int height = width; // Square icons Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Loading Loading @@ -83,7 +81,7 @@ public class GraphicsUtil { Drawable output = new BitmapDrawable(context.getResources(), bitmap); if (IconPackUtil.iconPackPresent) { output = GraphicsUtil.scaleImage(context, output, 0.90f); output = GraphicsUtil.scaleImage(context, output, 1f, iconWidth); output = GraphicsUtil.maskImage(context, output); } return output; Loading @@ -92,26 +90,20 @@ public class GraphicsUtil { /** * A utility method that simplifies calls to the generateFolderIcon() method that * expects an array of Drawables. * @param context * @param app * @return */ public static Drawable generateFolderIcon(Context context, AppItem app) { public static Drawable generateFolderIcon(Context context, AppItem app, int iconWidth) { Drawable[] drawables = new Drawable[app.getSubApps().size()]; for (int i = 0; i < app.getSubApps().size(); i++) { drawables[i] = app.getSubApps().get(i).getIcon(); } return generateFolderIcon(context, drawables); return generateFolderIcon(context, iconWidth, drawables); } /** * Scales icons to match the icon pack * @param context * @param image * @param scaleFactor * @return */ public static Drawable scaleImage(Context context, Drawable image, float scaleFactor) { public static Drawable scaleImage(Context context, Drawable image, float scaleFactor, int iconWidth) { if ((image == null) || !(image instanceof BitmapDrawable)) { return image; } Loading @@ -127,16 +119,25 @@ public class GraphicsUtil { if ((image == null) || !(image instanceof BitmapDrawable)) { return image; } double scale = 0.64; double scale = 0.85; Drawable maskDrawable; if(IconPackUtil.getIconMask() != null){ maskDrawable = IconPackUtil.getIconMask(); }else maskDrawable = ContextCompat.getDrawable(context, R.drawable.iconmask); Bitmap mask = ((BitmapDrawable) maskDrawable).getBitmap(); Bitmap original = Bitmap.createScaledBitmap(((BitmapDrawable) image).getBitmap(), (int)(image.getIntrinsicWidth() * scale), (int)(image.getIntrinsicWidth() * scale), true); Bitmap mask = ((BitmapDrawable)IconPackUtil.getIconMask()).getBitmap(); Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Bitmap.Config.ARGB_8888); (int) (mask.getWidth() * scale), (int) (mask.getHeight() * scale), true); Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); canvas.drawBitmap(original, (canvas.getWidth() - original.getWidth())/2, (canvas.getHeight() - original.getHeight())/2, null); canvas.drawBitmap(original, (canvas.getWidth() - original.getWidth()) / 2, (canvas.getHeight() - original.getHeight()) / 2, null); canvas.drawBitmap(mask, 0, 0, paint); paint.setXfermode(null); return new BitmapDrawable(context.getResources(), result); Loading app/src/main/java/org/indin/blisslaunchero/IconPackUtil.java +8 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.util.DisplayMetrics; import android.util.Log; Loading Loading @@ -85,12 +86,19 @@ public class IconPackUtil { iconMapper.put(componentName, drawableId); } } iconBackground1 = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); if(iconBackground1 == null){ iconBackground1 = ContextCompat.getDrawable(context, R.drawable.iconback_d); } iconBackground2 = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); if(iconBackground2 == null){ iconBackground2 = ContextCompat.getDrawable(context, R.drawable.iconback_d); } folderBackground = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); Loading app/src/main/java/org/indin/blisslaunchero/SquareImageView.java +4 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ import android.widget.ImageView; * Created by falcon on 16/2/18. */ public class SquareImageView extends ImageView { public class SquareImageView extends android.support.v7.widget.AppCompatImageView { public SquareImageView(Context context) { Loading @@ -30,7 +30,9 @@ public class SquareImageView extends ImageView { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); setMeasuredDimension(width, width); int height = getMeasuredHeight(); int size = width < height ? width : height; setMeasuredDimension(size, size); } Loading Loading
app/src/main/java/org/indin/blisslaunchero/AppUtil.java +19 −30 Original line number Diff line number Diff line Loading @@ -22,10 +22,8 @@ public class AppUtil { /** * Uses the PackageManager to find all launchable apps. * @param context * @return */ public static List<AppItem> loadLaunchableApps(Context context) { public static List<AppItem> loadLaunchableApps(Context context, int iconWidth) { PackageManager packageManager = context.getPackageManager(); List<ApplicationInfo> apps = packageManager.getInstalledApplications(0); Loading @@ -37,20 +35,17 @@ public class AppUtil { String componentName = intent.getComponent().toString(); boolean iconFromIconPack = true; Drawable appIcon; Drawable appIcon = null; // Load icon from icon pack if present if (IconPackUtil.iconPackPresent) { appIcon = IconPackUtil.getIconFromIconPack(context, componentName); } if (appIcon == null) { appIcon = app.loadIcon(packageManager); iconFromIconPack = false; appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f); appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f, iconWidth); appIcon = GraphicsUtil.maskImage(context, appIcon); } } else { appIcon = app.loadIcon(packageManager); iconFromIconPack = false; } AppItem launchableApp = new AppItem( app.loadLabel(packageManager), Loading @@ -77,10 +72,6 @@ public class AppUtil { /** * Currently picks four apps for the dock (Phone, SMS, Browser, Camera) * * @param context * @param launchableApps * @return */ public static List<AppItem> getPinnedApps(Context context, List<AppItem> launchableApps) { PackageManager pm = context.getPackageManager(); Loading Loading @@ -120,18 +111,16 @@ public class AppUtil { /** * Create an AppItem object given just a package name * @param context * @param packageName * @return */ public static AppItem createAppItem(Context context, String packageName) { public static AppItem createAppItem(Context context, String packageName, int iconWidth) { try { PackageManager packageManager = context.getPackageManager(); ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0); Intent intent = packageManager.getLaunchIntentForPackage(packageName); if(intent == null) if (intent == null) { return null; } String componentName = intent.getComponent().toString(); Drawable appIcon; Loading @@ -141,7 +130,7 @@ public class AppUtil { if (appIcon == null) { appIcon = appInfo.loadIcon(packageManager); iconFromIconPack = false; appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f); appIcon = GraphicsUtil.scaleImage(context, appIcon, 1f, iconWidth); appIcon = GraphicsUtil.maskImage(context, appIcon); } } else { Loading
app/src/main/java/org/indin/blisslaunchero/DesktopActivity.java +40 −21 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.Display; import android.view.DragEvent; import android.view.Gravity; Loading Loading @@ -227,7 +228,7 @@ public class DesktopActivity extends AppCompatActivity { } } AppItem appItem = AppUtil.createAppItem(this, packageName); AppItem appItem = AppUtil.createAppItem(this, packageName, iconWidth); if (appItem != null) { View view = prepareApp(appItem); int current = getCurrentAppsPageNumber(); Loading Loading @@ -256,7 +257,7 @@ public class DesktopActivity extends AppCompatActivity { // Cache icons before loading apps IconPackUtil.cacheIconsFromIconPack(this); launchableApps = AppUtil.loadLaunchableApps(getApplicationContext()); launchableApps = AppUtil.loadLaunchableApps(getApplicationContext(), iconWidth); pinnedApps = AppUtil.getPinnedApps(this, launchableApps); launchableApps.removeAll(pinnedApps); Loading Loading @@ -293,9 +294,9 @@ public class DesktopActivity extends AppCompatActivity { double screenInches = Math.sqrt(x + y); Log.d("debug", "Screen inches : " + screenInches); if (screenInches <= 4.7) { if (screenInches <= 4.5) { nRows = 4; } else if (screenInches <= 5.4) { } else if (screenInches <= 5.2) { nRows = 5; } else { nRows = 6; Loading @@ -316,7 +317,8 @@ public class DesktopActivity extends AppCompatActivity { hotBackground = getResources().getDrawable(R.drawable.rounded_corners_icon_hot, null); defaultBackground = getResources().getDrawable(R.drawable.rounded_corners_icon, null); scrollCorner = getResources().getDimensionPixelSize(R.dimen.scrollCorner); scrollCorner = getResources().getDimensionPixelSize(R.dimen.scrollCorner) * mPagerWidth / 480; wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); transparentBackground = getResources().getDrawable(R.drawable.transparent, null); Loading Loading @@ -751,7 +753,7 @@ public class DesktopActivity extends AppCompatActivity { } } folderItem.setIcon(GraphicsUtil.generateFolderIcon(this, folderItem)); folderItem.setIcon(GraphicsUtil.generateFolderIcon(this, folderItem, iconWidth)); //output = prepareApp(folderItem); return folderItem; } else { Loading Loading @@ -799,6 +801,11 @@ public class DesktopActivity extends AppCompatActivity { final Intent intent = app.getIntent(); icon.setImageDrawable(app.getIcon()); label.setText(app.getLabel()); if (nRows < 6) { label.setTextSize(12); } else { label.setTextSize(14); } List<Object> tags = new ArrayList<>(); tags.add(icon); tags.add(label); Loading Loading @@ -1245,8 +1252,18 @@ public class DesktopActivity extends AppCompatActivity { activeFolder.getSubApps().remove(app); assert app != null; app.setBelongsToFolder(false); Log.i(TAG, "removeAppFromFolder: Size:" + activeFolder.getSubApps().size()); if (activeFolder.getSubApps().size() == 0) { View view = prepareApp(app); if (folderFromDock) { addToDock(view, dock.indexOfChild(activeFolderView)); } else { GridLayout gridLayout = pages.get(getCurrentAppsPageNumber()); addAppToPage(gridLayout, view, gridLayout.indexOfChild(activeFolderView)); } ((ViewGroup) activeFolderView.getParent()).removeView(activeFolderView); } else { if (activeFolder.getSubApps().size() == 1) { AppItem item = activeFolder.getSubApps().get(0); activeFolder.getSubApps().remove(item); Loading @@ -1262,17 +1279,19 @@ public class DesktopActivity extends AppCompatActivity { ((ViewGroup) activeFolderView.getParent()).removeView(activeFolderView); } else { updateIcon(activeFolderView, activeFolder, GraphicsUtil.generateFolderIcon(this, activeFolder)); GraphicsUtil.generateFolderIcon(this, activeFolder, iconWidth)); } hideFolderWindowContainer(); if (movingApp.getParent() != null) { ((ViewGroup) movingApp.getParent()).removeView(movingApp); } movingApp.setVisibility(View.VISIBLE); int current = getCurrentAppsPageNumber(); addAppToPage(pages.get(current), movingApp); } hideFolderWindowContainer(); movingApp.setVisibility(View.VISIBLE); } } /** Loading Loading @@ -1329,7 +1348,7 @@ public class DesktopActivity extends AppCompatActivity { AppItem app1 = (AppItem) ((List<Object>) collidingApp.getTag()).get(2); AppItem app2 = (AppItem) ((List<Object>) movingApp.getTag()).get(2); Drawable folderIcon = GraphicsUtil.generateFolderIcon(this, Drawable folderIcon = GraphicsUtil.generateFolderIcon(this, iconWidth, app1.getIcon(), app2.getIcon()); AppItem folder; Loading Loading @@ -1357,7 +1376,7 @@ public class DesktopActivity extends AppCompatActivity { } else { app2.setBelongsToFolder(true); app1.getSubApps().add(app2); updateIcon(collidingApp, app1, GraphicsUtil.generateFolderIcon(this, app1)); updateIcon(collidingApp, app1, GraphicsUtil.generateFolderIcon(this, app1, iconWidth)); } Loading
app/src/main/java/org/indin/blisslaunchero/GraphicsUtil.java +37 −36 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ package org.indin.blisslaunchero; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; Loading @@ -13,6 +12,7 @@ import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import android.support.v4.content.ContextCompat; import android.util.Log; public class GraphicsUtil { Loading Loading @@ -41,16 +41,14 @@ public class GraphicsUtil { /** * Takes 1 or more drawables and merges them to form a single Drawable. * However, if more than 4 drawables are provided, only the first 4 are used. * @param context * @param sources * @return */ public static Drawable generateFolderIcon(Context context, Drawable ...sources) { for(Drawable d:sources) public static Drawable generateFolderIcon(Context context, int iconWidth, Drawable... sources) { for (Drawable d : sources) { if (!(d instanceof BitmapDrawable)) { Log.d(TAG, "Unknown type of icon found"); return context.getResources().getDrawable(R.mipmap.ic_folder, null); } } int width = sources[0].getIntrinsicWidth(); int height = width; // Square icons Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Loading Loading @@ -83,7 +81,7 @@ public class GraphicsUtil { Drawable output = new BitmapDrawable(context.getResources(), bitmap); if (IconPackUtil.iconPackPresent) { output = GraphicsUtil.scaleImage(context, output, 0.90f); output = GraphicsUtil.scaleImage(context, output, 1f, iconWidth); output = GraphicsUtil.maskImage(context, output); } return output; Loading @@ -92,26 +90,20 @@ public class GraphicsUtil { /** * A utility method that simplifies calls to the generateFolderIcon() method that * expects an array of Drawables. * @param context * @param app * @return */ public static Drawable generateFolderIcon(Context context, AppItem app) { public static Drawable generateFolderIcon(Context context, AppItem app, int iconWidth) { Drawable[] drawables = new Drawable[app.getSubApps().size()]; for (int i = 0; i < app.getSubApps().size(); i++) { drawables[i] = app.getSubApps().get(i).getIcon(); } return generateFolderIcon(context, drawables); return generateFolderIcon(context, iconWidth, drawables); } /** * Scales icons to match the icon pack * @param context * @param image * @param scaleFactor * @return */ public static Drawable scaleImage(Context context, Drawable image, float scaleFactor) { public static Drawable scaleImage(Context context, Drawable image, float scaleFactor, int iconWidth) { if ((image == null) || !(image instanceof BitmapDrawable)) { return image; } Loading @@ -127,16 +119,25 @@ public class GraphicsUtil { if ((image == null) || !(image instanceof BitmapDrawable)) { return image; } double scale = 0.64; double scale = 0.85; Drawable maskDrawable; if(IconPackUtil.getIconMask() != null){ maskDrawable = IconPackUtil.getIconMask(); }else maskDrawable = ContextCompat.getDrawable(context, R.drawable.iconmask); Bitmap mask = ((BitmapDrawable) maskDrawable).getBitmap(); Bitmap original = Bitmap.createScaledBitmap(((BitmapDrawable) image).getBitmap(), (int)(image.getIntrinsicWidth() * scale), (int)(image.getIntrinsicWidth() * scale), true); Bitmap mask = ((BitmapDrawable)IconPackUtil.getIconMask()).getBitmap(); Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Bitmap.Config.ARGB_8888); (int) (mask.getWidth() * scale), (int) (mask.getHeight() * scale), true); Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); canvas.drawBitmap(original, (canvas.getWidth() - original.getWidth())/2, (canvas.getHeight() - original.getHeight())/2, null); canvas.drawBitmap(original, (canvas.getWidth() - original.getWidth()) / 2, (canvas.getHeight() - original.getHeight()) / 2, null); canvas.drawBitmap(mask, 0, 0, paint); paint.setXfermode(null); return new BitmapDrawable(context.getResources(), result); Loading
app/src/main/java/org/indin/blisslaunchero/IconPackUtil.java +8 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.util.DisplayMetrics; import android.util.Log; Loading Loading @@ -85,12 +86,19 @@ public class IconPackUtil { iconMapper.put(componentName, drawableId); } } iconBackground1 = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); if(iconBackground1 == null){ iconBackground1 = ContextCompat.getDrawable(context, R.drawable.iconback_d); } iconBackground2 = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); if(iconBackground2 == null){ iconBackground2 = ContextCompat.getDrawable(context, R.drawable.iconback_d); } folderBackground = iconPackResources.getDrawable( iconPackResources.getIdentifier("iconback_d", "drawable", ICON_PACK_PACKAGE), null); Loading
app/src/main/java/org/indin/blisslaunchero/SquareImageView.java +4 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ import android.widget.ImageView; * Created by falcon on 16/2/18. */ public class SquareImageView extends ImageView { public class SquareImageView extends android.support.v7.widget.AppCompatImageView { public SquareImageView(Context context) { Loading @@ -30,7 +30,9 @@ public class SquareImageView extends ImageView { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); setMeasuredDimension(width, width); int height = getMeasuredHeight(); int size = width < height ? width : height; setMeasuredDimension(size, size); } Loading