Commit 9a6bc052 authored by Amit Kumar's avatar Amit Kumar
Browse files

tag point with some fixes

parent c79a932c
......@@ -13,6 +13,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.text.SpannableString;
import android.util.Log;
import org.indin.blisslaunchero.R;
......@@ -34,83 +35,6 @@ public class AppUtil {
/**
* Uses the PackageManager to find all launchable apps.
*/
public static List<AppItem> loadLaunchableApps(Context context) {
List<AppItem> launchableApps = new ArrayList<>();
PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
// Handle multi-profile support introduced in Android 5 (#542)
for (ApplicationInfo appInfo : apps) {
String packageName = appInfo.packageName;
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
if (intent != null) {
ActivityInfo activityInfo = intent.resolveActivityInfo(packageManager, 0);
String componentName = intent.getComponent().toString();
Log.i(TAG, "loadLaunchableApps: " + componentName);
boolean iconFromIconPack = true;
Drawable appIcon = null;
boolean isClock = false;
boolean isCalendar = false;
boolean isAdaptive = false;
// Load icon from icon pack if present
if (IconPackUtil.iconPackPresent) {
isClock = IconPackUtil.isClock(componentName);
isCalendar = IconPackUtil.isCalendar(componentName);
appIcon = IconPackUtil.getIconFromIconPack(context, componentName);
}
if (appIcon == null) {
isAdaptive = true;
appIcon = new AdaptiveIconProvider().load(context, packageName);
if (appIcon == null) {
Drawable iconDrawable = appInfo.loadIcon(packageManager);
if (Utilities.ATLEAST_OREO
&& iconDrawable instanceof AdaptiveIconDrawable) {
appIcon = new AdaptiveIconDrawableCompat(
((AdaptiveIconDrawable) iconDrawable).getBackground(),
((AdaptiveIconDrawable) iconDrawable).getForeground());
} else {
GraphicsUtil graphicsUtil = new GraphicsUtil(context);
appIcon = graphicsUtil.convertToRoundedCorner(context,
graphicsUtil.addBackground(iconDrawable, false));
}
}
}
boolean isSystemApp = false;
if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
isSystemApp = true;
}
AppItem launchableApp = new AppItem(activityInfo.loadLabel(packageManager),
packageName,
appIcon,
intent,
componentName,
iconFromIconPack,
isSystemApp,
isClock,
isCalendar,
isAdaptive);
launchableApps.add(launchableApp);
}
}
Collections.sort(launchableApps, (app1, app2) -> {
Collator collator = Collator.getInstance();
return collator.compare(app1.getLabel(), app2.getLabel());
});
Log.i(TAG, "loadLaunchableApps: " + launchableApps.size());
return launchableApps;
}
public static AllAppsList loadAllApps(Context context) {
List<AppItem> launchableApps = new ArrayList<>();
PackageManager packageManager = context.getPackageManager();
......@@ -168,7 +92,7 @@ public class AppUtil {
isSystemApp = true;
}
AppItem launchableApp = new AppItem(activityInfo.loadLabel(packageManager),
AppItem launchableApp = new AppItem(activityInfo.loadLabel(packageManager).toString(),
packageName,
appIcon,
intent,
......@@ -251,6 +175,7 @@ public class AppUtil {
boolean isClock = false;
boolean isCalendar = false;
boolean isAdaptive = false;
// Load icon from icon pack if present
if (IconPackUtil.iconPackPresent) {
isClock = IconPackUtil.isClock(componentName);
......@@ -278,7 +203,7 @@ public class AppUtil {
}
}
return new AppItem(appInfo.loadLabel(packageManager),
return new AppItem(appInfo.loadLabel(packageManager).toString(),
packageName,
appIcon,
intent,
......@@ -292,6 +217,7 @@ public class AppUtil {
return null;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
......
package org.indin.blisslaunchero.framework.util;
import android.graphics.Bitmap;
public class FastBlur {
public static Bitmap doBlur(Bitmap sentBitmap, int radius, boolean canReuseInBitmap) {
// Stack Blur v1.0 from
// http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
//
// Java Author: Mario Klingemann <mario at quasimondo.com>
// http://incubator.quasimondo.com
// created Feburary 29, 2004
// Android port : Yahel Bouaziz <yahel at kayenko.com>
// http://www.kayenko.com
// ported april 5th, 2012
// This is a compromise between Gaussian Blur and Box blur
// It creates much better looking blurs than Box Blur, but is
// 7x faster than my Gaussian Blur implementation.
//
// I called it Stack Blur because this describes best how this
// filter works internally: it creates a kind of moving stack
// of colors whilst scanning through the image. Thereby it
// just has to add one new block of color to the right side
// of the stack and remove the leftmost color. The remaining
// colors on the topmost layer of the stack are either added on
// or reduced by one, depending on if they are on the right or
// on the left side of the stack.
//
// If you are using this algorithm in your code please add
// the following line:
//
// Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com>
Bitmap bitmap;
if (canReuseInBitmap) {
bitmap = sentBitmap;
} else {
bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);
}
if (radius < 1) {
return (null);
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
bitmap.getPixels(pix, 0, w, 0, 0, w, h);
int wm = w - 1;
int hm = h - 1;
int wh = w * h;
int div = radius + radius + 1;
int r[] = new int[wh];
int g[] = new int[wh];
int b[] = new int[wh];
int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
int vmin[] = new int[Math.max(w, h)];
int divsum = (div + 1) >> 1;
divsum *= divsum;
int dv[] = new int[256 * divsum];
for (i = 0; i < 256 * divsum; i++) {
dv[i] = (i / divsum);
}
yw = yi = 0;
int[][] stack = new int[div][3];
int stackpointer;
int stackstart;
int[] sir;
int rbs;
int r1 = radius + 1;
int routsum, goutsum, boutsum;
int rinsum, ginsum, binsum;
for (y = 0; y < h; y++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
for (i = -radius; i <= radius; i++) {
p = pix[yi + Math.min(wm, Math.max(i, 0))];
sir = stack[i + radius];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rbs = r1 - Math.abs(i);
rsum += sir[0] * rbs;
gsum += sir[1] * rbs;
bsum += sir[2] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
}
stackpointer = radius;
for (x = 0; x < w; x++) {
r[yi] = dv[rsum];
g[yi] = dv[gsum];
b[yi] = dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (y == 0) {
vmin[x] = Math.min(x + radius + 1, wm);
}
p = pix[yw + vmin[x]];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer = (stackpointer + 1) % div;
sir = stack[(stackpointer) % div];
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
rinsum -= sir[0];
ginsum -= sir[1];
binsum -= sir[2];
yi++;
}
yw += w;
}
for (x = 0; x < w; x++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
yp = -radius * w;
for (i = -radius; i <= radius; i++) {
yi = Math.max(0, yp) + x;
sir = stack[i + radius];
sir[0] = r[yi];
sir[1] = g[yi];
sir[2] = b[yi];
rbs = r1 - Math.abs(i);
rsum += r[yi] * rbs;
gsum += g[yi] * rbs;
bsum += b[yi] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
if (i < hm) {
yp += w;
}
}
yi = x;
stackpointer = radius;
for (y = 0; y < h; y++) {
// Preserve alpha channel: ( 0xff000000 & pix[yi] )
pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (x == 0) {
vmin[y] = Math.min(y + r1, hm) * w;
}
p = x + vmin[y];
sir[0] = r[p];
sir[1] = g[p];
sir[2] = b[p];
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer = (stackpointer + 1) % div;
sir = stack[stackpointer];
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
rinsum -= sir[0];
ginsum -= sir[1];
binsum -= sir[2];
yi += w;
}
}
bitmap.setPixels(pix, 0, w, 0, 0, w, h);
return (bitmap);
}
}
package org.indin.blisslaunchero.framework.util;
import android.graphics.Bitmap;
import android.os.Build;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.renderscript.Type;
public class RSBlurProcessor {
private RenderScript rs;
private static final boolean IS_BLUR_SUPPORTED = Build.VERSION.SDK_INT >= 17;
private static final int MAX_RADIUS = 25;
public RSBlurProcessor(RenderScript rs) {
this.rs = rs;
}
public Bitmap blur(Bitmap bitmap, float radius, int repeat) {
if (!IS_BLUR_SUPPORTED) {
return null;
}
if (radius > MAX_RADIUS) {
radius = MAX_RADIUS;
}
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// Create allocation type
Type bitmapType = new Type.Builder(rs, Element.RGBA_8888(rs))
.setX(width)
.setY(height)
.setMipmaps(false) // We are using MipmapControl.MIPMAP_NONE
.create();
// Create allocation
Allocation allocation = Allocation.createTyped(rs, bitmapType);
// Create blur script
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
blurScript.setRadius(radius);
// Copy data to allocation
allocation.copyFrom(bitmap);
// set blur script input
blurScript.setInput(allocation);
// invoke the script to blur
blurScript.forEach(allocation);
// Repeat the blur for extra effect
for (int i=0; i<repeat; i++) {
blurScript.forEach(allocation);
}
// copy data back to the bitmap
allocation.copyTo(bitmap);
// release memory
allocation.destroy();
blurScript.destroy();
allocation = null;
blurScript = null;
return bitmap;
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment