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

Commit 12694411 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 291401d2
Loading
Loading
Loading
Loading
+33 −0
Original line number Original line 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 nativeSetWindowCrop(long nativeObject, int l, int t, int r, int b);
    private static native void nativeSetLayerStack(long nativeObject, int layerStack);
    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 nativeClearContentFrameStats(long nativeObject);
    private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats);
    private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats);
    private static native boolean nativeClearAnimationFrameStats();
    private static native boolean nativeClearAnimationFrameStats();
@@ -169,6 +174,11 @@ public class SurfaceControl {
     */
     */
    public static final int FX_SURFACE_NORMAL   = 0x00000000;
    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.
     * Surface creation flag: Creates a Dim surface.
     * Everything behind this surface is dimmed by the amount specified
     * Everything behind this surface is dimmed by the amount specified
@@ -383,6 +393,29 @@ public class SurfaceControl {
        nativeSetSize(mNativeObject, w, h);
        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() {
    public void hide() {
        checkNotReleased();
        checkNotReleased();
        nativeSetFlags(mNativeObject, SURFACE_HIDDEN, SURFACE_HIDDEN);
        nativeSetFlags(mNativeObject, SURFACE_HIDDEN, SURFACE_HIDDEN);
+7 −0
Original line number Original line Diff line number Diff line
@@ -768,6 +768,13 @@ public abstract class Window {
        setPrivateFlags(flags, flags);
        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
     * Convenience function to clear the flag bits as specified in flags, as
     * per {@link #setFlags}.
     * per {@link #setFlags}.
+30 −1
Original line number Original line Diff line number Diff line
@@ -1119,7 +1119,6 @@ public interface WindowManager extends ViewManager {
         * {@hide} */
         * {@hide} */
        public static final int PRIVATE_FLAG_FULLY_TRANSPARENT = 0x10000000;
        public static final int PRIVATE_FLAG_FULLY_TRANSPARENT = 0x10000000;



        /**
        /**
         * {@hide}
         * {@hide}
         */
         */
@@ -1135,6 +1134,19 @@ public interface WindowManager extends ViewManager {
         */
         */
        public static final int PRIVATE_FLAG_WAS_NOT_FULLSCREEN = 0x00002000;
        public static final int PRIVATE_FLAG_WAS_NOT_FULLSCREEN = 0x00002000;


        /**
         * 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.
         * Control flags that are private to the platform.
         * @hide
         * @hide
@@ -1525,6 +1537,14 @@ public interface WindowManager extends ViewManager {
         */
         */
        public long userActivityTimeout = -1;
        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() {
        public LayoutParams() {
            super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            type = TYPE_APPLICATION;
            type = TYPE_APPLICATION;
@@ -1616,6 +1636,7 @@ public interface WindowManager extends ViewManager {
            out.writeInt(surfaceInsets.top);
            out.writeInt(surfaceInsets.top);
            out.writeInt(surfaceInsets.right);
            out.writeInt(surfaceInsets.right);
            out.writeInt(surfaceInsets.bottom);
            out.writeInt(surfaceInsets.bottom);
            out.writeFloat(blurMaskAlphaThreshold);
        }
        }
        
        
        public static final Parcelable.Creator<LayoutParams> CREATOR
        public static final Parcelable.Creator<LayoutParams> CREATOR
@@ -1663,6 +1684,7 @@ public interface WindowManager extends ViewManager {
            surfaceInsets.top = in.readInt();
            surfaceInsets.top = in.readInt();
            surfaceInsets.right = in.readInt();
            surfaceInsets.right = in.readInt();
            surfaceInsets.bottom = in.readInt();
            surfaceInsets.bottom = in.readInt();
            blurMaskAlphaThreshold = in.readFloat();
        }
        }
    
    
        @SuppressWarnings({"PointlessBitwiseExpression"})
        @SuppressWarnings({"PointlessBitwiseExpression"})
@@ -1698,6 +1720,8 @@ public interface WindowManager extends ViewManager {
        /** {@hide} */
        /** {@hide} */
        public static final int PREFERRED_REFRESH_RATE_CHANGED = 1 << 21;
        public static final int PREFERRED_REFRESH_RATE_CHANGED = 1 << 21;
        /** {@hide} */
        /** {@hide} */
        public static final int BLUR_MASK_ALPHA_THRESHOLD_CHANGED = 1 << 30;
        /** {@hide} */
        public static final int EVERYTHING_CHANGED = 0xffffffff;
        public static final int EVERYTHING_CHANGED = 0xffffffff;


        // internal buffer to backup/restore parameters under compatibility mode.
        // internal buffer to backup/restore parameters under compatibility mode.
@@ -1842,6 +1866,11 @@ public interface WindowManager extends ViewManager {
                changes |= SURFACE_INSETS_CHANGED;
                changes |= SURFACE_INSETS_CHANGED;
            }
            }


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

            return changes;
            return changes;
        }
        }
    
    
+41 −0
Original line number Original line 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) {
static jobject nativeGetBuiltInDisplay(JNIEnv* env, jclass clazz, jint id) {
    sp<IBinder> token(SurfaceComposerClient::getBuiltInDisplay(id));
    sp<IBinder> token(SurfaceComposerClient::getBuiltInDisplay(id));
    return javaObjectForIBinder(env, token);
    return javaObjectForIBinder(env, token);
@@ -613,6 +646,14 @@ static JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetWindowCrop },
            (void*)nativeSetWindowCrop },
    {"nativeSetLayerStack", "(JI)V",
    {"nativeSetLayerStack", "(JI)V",
            (void*)nativeSetLayerStack },
            (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;",
    {"nativeGetBuiltInDisplay", "(I)Landroid/os/IBinder;",
            (void*)nativeGetBuiltInDisplay },
            (void*)nativeGetBuiltInDisplay },
    {"nativeCreateDisplay", "(Ljava/lang/String;Z)Landroid/os/IBinder;",
    {"nativeCreateDisplay", "(Ljava/lang/String;Z)Landroid/os/IBinder;",
+3 −0
Original line number Original line Diff line number Diff line
@@ -241,4 +241,7 @@
    <!-- Ignored sms packages -->
    <!-- Ignored sms packages -->
    <java-symbol type="array" name="config_ignored_sms_packages" />
    <java-symbol type="array" name="config_ignored_sms_packages" />


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

</resources>
</resources>
Loading