Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ad7fc68 authored by Byunghun Jeon's avatar Byunghun Jeon Committed by Steve Kondik
Browse files

WindowManager: Upper level changes to expose blur effect



Upper level changes to expose blur-behind and blur-mask effect

Change-Id: I6d37b43888c8c5e028974bd714596d8178cb5114

WindowManager: Adding template for BlurLayer file

Cyanogen changes:
  * Use config.xml instead of settings
  * Don't break stuff if not supported in SF
  * Incremental fade for insecure lockscreen
  * Disabled extra effects for now

Change-Id: Icefe452f7a015656661e8543849c9b88889dbb40

SystemUI: hide blur when showing keyguard media

It's still showing up behind eating up cycles

Change-Id: I8b1a0f2cfafcc1dcf2a9a472fc15b987e4a3992b
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 9fb080b2
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -58,6 +58,11 @@ public class SurfaceControl {
    private static native void nativeSetWindowCrop(long nativeObject, int l, int t, int r, int b);
    private static native void nativeSetLayerStack(long nativeObject, int layerStack);

    private static native void nativeSetBlur(long nativeObject, float blur);
    private static native void nativeSetBlurMaskSurface(long nativeObject, long maskLayerNativeObject);
    private static native void nativeSetBlurMaskSampling(long nativeObject, int blurMaskSampling);
    private static native void nativeSetBlurMaskAlphaThreshold(long nativeObject, float alpha);

    private static native boolean nativeClearContentFrameStats(long nativeObject);
    private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats);
    private static native boolean nativeClearAnimationFrameStats();
@@ -169,6 +174,11 @@ public class SurfaceControl {
     */
    public static final int FX_SURFACE_NORMAL   = 0x00000000;

    /**
     * Surface creation flag: Creates a blur surface.
     */
    public static final int FX_SURFACE_BLUR = 0x00010000;

    /**
     * Surface creation flag: Creates a Dim surface.
     * Everything behind this surface is dimmed by the amount specified
@@ -384,6 +394,29 @@ public class SurfaceControl {
        nativeSetSize(mNativeObject, w, h);
    }

    public void setBlur(float blur) {
        checkNotReleased();
        nativeSetBlur(mNativeObject, blur);
    }

    public void setBlurMaskSurface(SurfaceControl maskSurface) {
        checkNotReleased();
        if (maskSurface != null) {
            maskSurface.checkNotReleased();
        }
        nativeSetBlurMaskSurface(mNativeObject, maskSurface == null ? 0:maskSurface.mNativeObject);
    }

    public void setBlurMaskSampling(int blurMaskSampling) {
        checkNotReleased();
        nativeSetBlurMaskSampling(mNativeObject, blurMaskSampling);
    }

    public void setBlurMaskAlphaThreshold(float alpha) {
        checkNotReleased();
        nativeSetBlurMaskAlphaThreshold(mNativeObject, alpha);
    }

    public void hide() {
        checkNotReleased();
        nativeSetFlags(mNativeObject, SURFACE_HIDDEN, SURFACE_HIDDEN);
+26 −0
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ public abstract class Window {

    private boolean mHaveWindowFormat = false;
    private boolean mHaveDimAmount = false;
    private boolean mHaveBlurAmount = false;
    private int mDefaultWindowFormat = PixelFormat.OPAQUE;

    private boolean mHasSoftInputMode = false;
@@ -818,6 +819,13 @@ public abstract class Window {
        setPrivateFlags(flags, flags);
    }

    /** @hide */
    public void setBlurMaskAlphaThreshold(float alpha) {
        final WindowManager.LayoutParams attrs = getAttributes();
        attrs.blurMaskAlphaThreshold = alpha;
        dispatchWindowAttributesChanged(attrs);
    }

    /**
     * Convenience function to clear the flag bits as specified in flags, as
     * per {@link #setFlags}.
@@ -898,6 +906,19 @@ public abstract class Window {
        dispatchWindowAttributesChanged(attrs);
    }

    /**
     * Set the amount of blur behind the window when using
     * {@link WindowManager.LayoutParams#FLAG_BLUR_BEHIND}.
     * This feature may not be supported by all devices.
     * {@hide}
     */
    public void setBlurAmount(float amount) {
        final WindowManager.LayoutParams attrs = getAttributes();
        attrs.blurAmount = amount;
        mHaveBlurAmount = true;
        dispatchWindowAttributesChanged(attrs);
    }

    /**
     * Specify custom window attributes.  <strong>PLEASE NOTE:</strong> the
     * layout params you give here should generally be from values previously
@@ -1408,6 +1429,11 @@ public abstract class Window {
        return mHaveDimAmount;
    }

    /** @hide */
    protected boolean haveBlurAmount() {
        return mHaveBlurAmount;
    }

    public abstract void setChildDrawable(int featureId, Drawable drawable);

    public abstract void setChildInt(int featureId, int value);
+47 −0
Original line number Diff line number Diff line
@@ -1133,6 +1133,19 @@ public interface WindowManager extends ViewManager {
         */
        public static final int PRIVATE_FLAG_PREVENT_POWER_KEY = 0x20000000;

        /**
         * Window flag: adding additional blur layer and set this as masking layer
         * {@hide}
         */
        public static final int PRIVATE_FLAG_BLUR_WITH_MASKING = 0x40000000;

        /**
         * Window flag: adding additional blur layer and set this as masking layer.
         * This is faster and ugglier than non-scaled version.
         * {@hide}
         */
        public static final int PRIVATE_FLAG_BLUR_WITH_MASKING_SCALED = 0x80000000;

        /**
         * Control flags that are private to the platform.
         * @hide
@@ -1394,6 +1407,15 @@ public interface WindowManager extends ViewManager {
         */
        public float dimAmount = 1.0f;

        /**
         * When {@link #FLAG_BLUR_BEHIND} is set, this is the amount of blur
         * to apply.  Range is from 1.0 for maximum to 0.0 for no
         * blur.
         * @hide
         */
        public float blurAmount = 1.0f;


        /**
         * Default value for {@link #screenBrightness} and {@link #buttonBrightness}
         * indicating that the brightness value is not overridden for this window
@@ -1587,6 +1609,14 @@ public interface WindowManager extends ViewManager {
         */
        public long userActivityTimeout = -1;

        /**
         * Threshold value that blur masking layer uses to determine whether
         * to use or discard the blurred color.
         * Value should be between 0.0 and 1.0
         * @hide
         */
        public float blurMaskAlphaThreshold = 0.0f;

        public LayoutParams() {
            super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            type = TYPE_APPLICATION;
@@ -1673,6 +1703,7 @@ public interface WindowManager extends ViewManager {
            out.writeInt(windowAnimations);
            out.writeFloat(alpha);
            out.writeFloat(dimAmount);
            out.writeFloat(blurAmount);
            out.writeFloat(screenBrightness);
            out.writeFloat(buttonBrightness);
            out.writeInt(rotationAnimation);
@@ -1693,6 +1724,7 @@ public interface WindowManager extends ViewManager {
            out.writeInt(surfaceInsets.bottom);
            out.writeInt(hasManualSurfaceInsets ? 1 : 0);
            out.writeInt(needsMenuKey);
            out.writeFloat(blurMaskAlphaThreshold);
        }

        public static final Parcelable.Creator<LayoutParams> CREATOR
@@ -1723,6 +1755,7 @@ public interface WindowManager extends ViewManager {
            windowAnimations = in.readInt();
            alpha = in.readFloat();
            dimAmount = in.readFloat();
            blurAmount = in.readFloat();
            screenBrightness = in.readFloat();
            buttonBrightness = in.readFloat();
            rotationAnimation = in.readInt();
@@ -1743,6 +1776,7 @@ public interface WindowManager extends ViewManager {
            surfaceInsets.bottom = in.readInt();
            hasManualSurfaceInsets = in.readInt() != 0;
            needsMenuKey = in.readInt();
            blurMaskAlphaThreshold = in.readFloat();
        }

        @SuppressWarnings({"PointlessBitwiseExpression"})
@@ -1782,6 +1816,10 @@ public interface WindowManager extends ViewManager {
        /** {@hide} */
        public static final int PREFERRED_DISPLAY_MODE_ID = 1 << 23;
        /** {@hide} */
        public static final int BLUR_AMOUNT_CHANGED = 1 << 29;
        /** {@hide} */
        public static final int BLUR_MASK_ALPHA_THRESHOLD_CHANGED = 1 << 30;
        /** {@hide} */
        public static final int EVERYTHING_CHANGED = 0xffffffff;

        // internal buffer to backup/restore parameters under compatibility mode.
@@ -1876,6 +1914,10 @@ public interface WindowManager extends ViewManager {
                dimAmount = o.dimAmount;
                changes |= DIM_AMOUNT_CHANGED;
            }
            if (blurAmount != o.blurAmount) {
                blurAmount = o.blurAmount;
                changes |= BLUR_AMOUNT_CHANGED;
            }
            if (screenBrightness != o.screenBrightness) {
                screenBrightness = o.screenBrightness;
                changes |= SCREEN_BRIGHTNESS_CHANGED;
@@ -1941,6 +1983,11 @@ public interface WindowManager extends ViewManager {
                changes |= NEEDS_MENU_KEY_CHANGED;
            }

            if (blurMaskAlphaThreshold != o.blurMaskAlphaThreshold) {
                blurMaskAlphaThreshold = o.blurMaskAlphaThreshold;
                changes |= BLUR_MASK_ALPHA_THRESHOLD_CHANGED;
            }

            return changes;
        }

+41 −0
Original line number Diff line number Diff line
@@ -316,6 +316,39 @@ static void nativeSetLayerStack(JNIEnv* env, jclass clazz, jlong nativeObject, j
    }
}

static void nativeSetBlur(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat blur) {
    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
    status_t err = ctrl->setBlur(blur);
    if (err < 0 && err != NO_INIT) {
        doThrowIAE(env);
    }
}

static void nativeSetBlurMaskSurface(JNIEnv* env, jclass clazz, jlong nativeObject, jlong maskLayerNativeObject) {
    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
    SurfaceControl* const maskLayer = reinterpret_cast<SurfaceControl *>(maskLayerNativeObject);
    status_t err = ctrl->setBlurMaskSurface(maskLayer);
    if (err < 0 && err != NO_INIT) {
        doThrowIAE(env);
    }
}

static void nativeSetBlurMaskSampling(JNIEnv* env, jclass clazz, jlong nativeObject, jint blurMaskSampling) {
    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
    status_t err = ctrl->setBlurMaskSampling(blurMaskSampling);
    if (err < 0 && err != NO_INIT) {
        doThrowIAE(env);
    }
}

static void nativeSetBlurMaskAlphaThreshold(JNIEnv* env, jclass clazz, jlong nativeObject, jfloat alpha) {
    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
    status_t err = ctrl->setBlurMaskAlphaThreshold(alpha);
    if (err < 0 && err != NO_INIT) {
        doThrowIAE(env);
    }
}

static jobject nativeGetBuiltInDisplay(JNIEnv* env, jclass clazz, jint id) {
    sp<IBinder> token(SurfaceComposerClient::getBuiltInDisplay(id));
    return javaObjectForIBinder(env, token);
@@ -614,6 +647,14 @@ static JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetWindowCrop },
    {"nativeSetLayerStack", "(JI)V",
            (void*)nativeSetLayerStack },
    {"nativeSetBlur", "(JF)V",
            (void*)nativeSetBlur },
    {"nativeSetBlurMaskSurface", "(JJ)V",
            (void*)nativeSetBlurMaskSurface },
    {"nativeSetBlurMaskSampling", "(JI)V",
            (void*)nativeSetBlurMaskSampling },
    {"nativeSetBlurMaskAlphaThreshold", "(JF)V",
            (void*)nativeSetBlurMaskAlphaThreshold },
    {"nativeGetBuiltInDisplay", "(I)Landroid/os/IBinder;",
            (void*)nativeGetBuiltInDisplay },
    {"nativeCreateDisplay", "(Ljava/lang/String;Z)Landroid/os/IBinder;",
+4 −0
Original line number Diff line number Diff line
@@ -120,4 +120,8 @@
    <java-symbol type="string" name="privacy_guard_notification_detail" />
    <java-symbol type="string" name="privacy_guard_dialog_title" />
    <java-symbol type="string" name="privacy_guard_dialog_summary" />

    <!-- Blur effects -->
    <java-symbol type="bool" name="config_ui_blur_enabled" />

</resources>
Loading