Initial implementation wallpaper blur

This commit is contained in:
MrSluffy
2024-07-28 18:46:37 +08:00
parent 8244819d65
commit 90ecc23782
7 changed files with 103 additions and 1 deletions
+2
View File
@@ -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 {
+5 -1
View File
@@ -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);
+21
View File
@@ -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