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

Commit 946cd72f 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
parent 42bba560
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
@@ -383,6 +393,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);
+7 −0
Original line number Diff line number Diff line
@@ -776,6 +776,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}.
+30 −1
Original line number Diff line number Diff line
@@ -1105,7 +1105,6 @@ public interface WindowManager extends ViewManager {
         * {@hide} */
        public static final int PRIVATE_FLAG_FULLY_TRANSPARENT = 0x10000000;


        /**
         * {@hide}
         */
@@ -1128,6 +1127,19 @@ public interface WindowManager extends ViewManager {
         */
        public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800;

        /**
         * 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
@@ -1557,6 +1569,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;
@@ -1649,6 +1669,7 @@ public interface WindowManager extends ViewManager {
            out.writeInt(surfaceInsets.right);
            out.writeInt(surfaceInsets.bottom);
            out.writeInt(needsMenuKey);
            out.writeFloat(blurMaskAlphaThreshold);
        }

        public static final Parcelable.Creator<LayoutParams> CREATOR
@@ -1697,6 +1718,7 @@ public interface WindowManager extends ViewManager {
            surfaceInsets.right = in.readInt();
            surfaceInsets.bottom = in.readInt();
            needsMenuKey = in.readInt();
            blurMaskAlphaThreshold = in.readFloat();
        }

        @SuppressWarnings({"PointlessBitwiseExpression"})
@@ -1734,6 +1756,8 @@ public interface WindowManager extends ViewManager {
        /** {@hide} */
        public static final int NEEDS_MENU_KEY_CHANGED = 1 << 22;
        /** {@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.
@@ -1883,6 +1907,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
@@ -317,6 +317,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);
@@ -613,6 +646,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;",
+3 −0
Original line number Diff line number Diff line
@@ -241,4 +241,7 @@
    <!-- Ignored sms packages -->
    <java-symbol type="array" name="config_ignored_sms_packages" />

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

</resources>
Loading