Initial implementation wallpaper blur
This commit is contained in:
@@ -416,6 +416,8 @@ dependencies {
|
||||
implementation('com.kieronquinn.smartspacer:sdk-client:1.0.11') {
|
||||
exclude group: "com.github.skydoves", module: "balloon"
|
||||
}
|
||||
|
||||
implementation("com.github.android:renderscript-intrinsics-replacement-toolkit:b6363490c3")
|
||||
}
|
||||
|
||||
ksp {
|
||||
|
||||
@@ -470,6 +470,10 @@
|
||||
<string name="home_screen_rotation_label">Home screen rotation</string>
|
||||
<string name="home_screen_rotation_description">Allow home screen rotation when device is rotated</string>
|
||||
|
||||
<string name="wallpaper_blur">Enable wallpaper blur</string>
|
||||
<string name="wallpaper_background_blur">Blur intensity</string>
|
||||
<string name="wallpaper_background_blur_factor">Factor threshold</string>
|
||||
|
||||
<string name="auto_add_shortcuts_label">Add new apps to home screen</string>
|
||||
|
||||
<string name="minus_one_enable">Show feed</string>
|
||||
@@ -524,7 +528,7 @@
|
||||
<string name="hotseat_mode_lawnchair" translatable="false">Lawnchair</string>
|
||||
<string name="hotseat_mode_google_search">Google Search bar</string>
|
||||
|
||||
<string name="search_background_transparency">Tranparency</string>
|
||||
<string name="search_background_transparency">Opacity</string>
|
||||
<string name="corner_radius_label">Corner radius</string>
|
||||
<string name="apply_accent_color_label">Apply accent color</string>
|
||||
<string name="search_provider">Search provider</string>
|
||||
|
||||
@@ -96,6 +96,10 @@ class PreferenceManager private constructor(private val context: Context) : Base
|
||||
val hotseatQsbCornerRadius = FloatPref("pref_hotseatQsbCornerRadius", 1F, recreate)
|
||||
val searchBackgroundHotseatTransparency = IntPref("pref_searchHotseatTranparency", 0, recreate)
|
||||
|
||||
val enableWallpaperBlur = BoolPref("pref_enableWallpaperBlur", false, recreate)
|
||||
val wallpaperBlur = IntPref("pref_wallpaperBlur", 25, recreate)
|
||||
val wallpaperBlurFactorThreshold = IntPref("pref_wallpaperBlurFactor", 25, recreate)
|
||||
|
||||
val recentsActionScreenshot = BoolPref("pref_recentsActionScreenshot", !isOnePlusStock)
|
||||
val recentsActionShare = BoolPref("pref_recentsActionShare", isOnePlusStock)
|
||||
val recentsActionLens = BoolPref("pref_recentsActionLens", true)
|
||||
|
||||
@@ -107,6 +107,31 @@ fun HomeScreenPreferences(
|
||||
adapter = prefs2.showTopShadow.getAdapter(),
|
||||
label = stringResource(id = R.string.show_sys_ui_scrim),
|
||||
)
|
||||
|
||||
val enableWallpaperBlur = prefs.enableWallpaperBlur.getAdapter()
|
||||
|
||||
SwitchPreference(
|
||||
adapter = enableWallpaperBlur,
|
||||
label = stringResource(id = R.string.wallpaper_blur),
|
||||
)
|
||||
ExpandAndShrink(visible = enableWallpaperBlur.state.value) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.wallpaper_background_blur),
|
||||
adapter = prefs.wallpaperBlur.getAdapter(),
|
||||
step = 5,
|
||||
valueRange = 0..100,
|
||||
showUnit = "%",
|
||||
)
|
||||
}
|
||||
ExpandAndShrink(visible = enableWallpaperBlur.state.value) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.wallpaper_background_blur_factor),
|
||||
adapter = prefs.wallpaperBlurFactorThreshold.getAdapter(),
|
||||
step = 5,
|
||||
valueRange = 0..100,
|
||||
showUnit = "%",
|
||||
)
|
||||
}
|
||||
}
|
||||
PreferenceGroup(heading = stringResource(id = R.string.layout)) {
|
||||
val columns by prefs.workspaceColumns.getAdapter()
|
||||
|
||||
@@ -29,9 +29,15 @@ import android.content.pm.PackageManager
|
||||
import android.content.pm.ResolveInfo
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.graphics.RectF
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Looper
|
||||
import android.provider.OpenableColumns
|
||||
import android.util.Log
|
||||
import android.util.Size
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
@@ -45,6 +51,7 @@ import com.android.launcher3.Utilities
|
||||
import com.android.launcher3.util.Executors.MAIN_EXECUTOR
|
||||
import com.android.launcher3.util.Themes
|
||||
import com.android.systemui.shared.system.QuickStepContract
|
||||
import com.google.android.renderscript.Toolkit
|
||||
import com.patrykmichalik.opto.core.firstBlocking
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.ExecutionException
|
||||
@@ -245,3 +252,41 @@ fun Context.getDefaultResolveInfo(): ResolveInfo? {
|
||||
val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)
|
||||
return packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)
|
||||
}
|
||||
|
||||
fun Drawable.toBitmap(): Bitmap {
|
||||
if (this is BitmapDrawable) {
|
||||
return bitmap
|
||||
}
|
||||
|
||||
val bitmap = Bitmap.createBitmap(
|
||||
intrinsicWidth.takeIf { it > 0 } ?: 1,
|
||||
intrinsicHeight.takeIf { it > 0 } ?: 1,
|
||||
Bitmap.Config.ARGB_8888,
|
||||
)
|
||||
val canvas = Canvas(bitmap)
|
||||
setBounds(0, 0, canvas.width, canvas.height)
|
||||
draw(canvas)
|
||||
|
||||
return bitmap
|
||||
}
|
||||
|
||||
fun createRoundedBitmap(color: Int, cornerRadius: Float): Bitmap {
|
||||
val bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
|
||||
val canvas = Canvas(bitmap)
|
||||
val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
this.color = color
|
||||
}
|
||||
val rect = RectF(0f, 0f, canvas.width.toFloat(), canvas.height.toFloat())
|
||||
canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paint)
|
||||
return bitmap
|
||||
}
|
||||
|
||||
fun blurBitmap(source: Bitmap, percent: Int, factorThreshold: Int = 25): Bitmap {
|
||||
try {
|
||||
val factor = percent.toFloat().div(100f) * factorThreshold
|
||||
return Toolkit.blur(source, factor.toInt())
|
||||
} catch (e: Exception) {
|
||||
Log.e("LawnchairUtil", "Error bluring bitmap: $e")
|
||||
return source
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6249,6 +6249,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
}
|
||||
|
||||
public float getScrollScale(RemoteTargetHandle rth) {
|
||||
if (mPageScrolls == null) return 1f;
|
||||
int childCount = Math.min(mPageScrolls.length, getChildCount());
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View child = getChildAt(i);
|
||||
|
||||
@@ -35,6 +35,8 @@ import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPELEFT;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPERIGHT;
|
||||
|
||||
import static app.lawnchair.util.LawnchairUtilsKt.toBitmap;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.LayoutTransition;
|
||||
@@ -50,6 +52,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
@@ -69,6 +72,7 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.core.graphics.drawable.DrawableKt;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.app.animation.Interpolators;
|
||||
@@ -128,6 +132,7 @@ import com.android.launcher3.widget.WidgetManagerHelper;
|
||||
import com.android.launcher3.widget.dragndrop.AppWidgetHostViewDragListener;
|
||||
import com.android.launcher3.widget.util.WidgetSizes;
|
||||
import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlay;
|
||||
import com.google.android.renderscript.Toolkit;
|
||||
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
|
||||
import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayCallbacks;
|
||||
|
||||
@@ -138,10 +143,12 @@ import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import app.lawnchair.preferences.PreferenceManager;
|
||||
import app.lawnchair.preferences2.PreferenceManager2;
|
||||
import app.lawnchair.smartspace.SmartspaceAppWidgetProvider;
|
||||
import app.lawnchair.smartspace.model.LawnchairSmartspace;
|
||||
import app.lawnchair.smartspace.model.SmartspaceMode;
|
||||
import app.lawnchair.util.LawnchairUtilsKt;
|
||||
|
||||
/**
|
||||
* The workspace is a wide area with a wallpaper and a finite number of pages.
|
||||
@@ -301,6 +308,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
private final StatsLogManager mStatsLogManager;
|
||||
|
||||
PreferenceManager2 mPreferenceManager2;
|
||||
PreferenceManager mPreferenceManger;
|
||||
|
||||
/**
|
||||
* Used to inflate the Workspace from XML.
|
||||
@@ -329,6 +337,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
mAllAppsIconSize = mLauncher.getDeviceProfile().allAppsIconSizePx;
|
||||
mWallpaperManager = WallpaperManager.getInstance(context);
|
||||
mPreferenceManager2 = PreferenceManager2.getInstance(context);
|
||||
mPreferenceManger = PreferenceManager.getInstance(context);
|
||||
|
||||
mWallpaperOffset = new WallpaperOffsetInterpolator(this);
|
||||
|
||||
@@ -339,6 +348,18 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
setMotionEventSplittingEnabled(true);
|
||||
setOnTouchListener(new WorkspaceTouchListener(mLauncher, this));
|
||||
mStatsLogManager = StatsLogManager.newInstance(context);
|
||||
|
||||
if (mPreferenceManger.getEnableWallpaperBlur().get() && mWallpaperManager.getDrawable() != null) {
|
||||
var blurWallpaper = mPreferenceManger.getWallpaperBlur().get();
|
||||
var blurThreshold = mPreferenceManger.getWallpaperBlurFactorThreshold().get();
|
||||
var wallpaperBitmap = mWallpaperManager.getDrawable();
|
||||
try {
|
||||
mWallpaperManager.setBitmap(LawnchairUtilsKt.blurBitmap(toBitmap(wallpaperBitmap),blurWallpaper, blurThreshold), null, true, WallpaperManager.FLAG_SYSTEM);
|
||||
mWallpaperManager.forgetLoadedWallpaper();
|
||||
} catch (Exception ex) {
|
||||
Log.e(TAG, "error failed bluring wallpaper");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user