From cf634decc1561a659a99f66db6ffd2e326fd355f Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Sat, 27 Feb 2021 22:10:43 +0800 Subject: [PATCH] [app] Check blur support --- .../manager/util/BlurBehindDialogBuilder.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/github/lsposed/manager/util/BlurBehindDialogBuilder.java b/app/src/main/java/io/github/lsposed/manager/util/BlurBehindDialogBuilder.java index 60e40e6d..52ee706a 100644 --- a/app/src/main/java/io/github/lsposed/manager/util/BlurBehindDialogBuilder.java +++ b/app/src/main/java/io/github/lsposed/manager/util/BlurBehindDialogBuilder.java @@ -20,6 +20,7 @@ package io.github.lsposed.manager.util; import android.animation.ValueAnimator; +import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; import android.view.SurfaceControl; @@ -31,8 +32,11 @@ import androidx.appcompat.app.AlertDialog; import java.lang.reflect.Method; -@SuppressWarnings("JavaReflectionMemberAccess") +@SuppressWarnings({"JavaReflectionMemberAccess", "ConstantConditions"}) +@SuppressLint("PrivateApi") public class BlurBehindDialogBuilder extends AlertDialog.Builder { + private static final boolean supportBlur = getSystemProperty("ro.surface_flinger.supports_background_blur", false) && getSystemProperty("persist.sys.sf.disable_blurs", false); + public BlurBehindDialogBuilder(@NonNull Context context) { super(context); } @@ -46,7 +50,7 @@ public class BlurBehindDialogBuilder extends AlertDialog.Builder { } private void setBackgroundBlurRadius(View view) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && supportBlur) { try { Object viewRootImpl = view.getClass().getMethod("getViewRootImpl").invoke(view); if (viewRootImpl == null) { @@ -84,4 +88,16 @@ public class BlurBehindDialogBuilder extends AlertDialog.Builder { } } } + + public static boolean getSystemProperty(String key, boolean defaultValue) { + boolean value = defaultValue; + try { + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("getBoolean", String.class, boolean.class); + value = (boolean) get.invoke(c, key, defaultValue); + } catch (Exception e) { + e.printStackTrace(); + } + return value; + } }