summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java')
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java196
1 files changed, 196 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java
new file mode 100644
index 0000000..a966409
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BlurLayer.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import android.graphics.PixelFormat;
+import android.util.Slog;
+import android.view.SurfaceControl;
+import android.view.SurfaceSession;
+
+import java.io.PrintWriter;
+
+public class BlurLayer {
+ private static final String TAG = "BlurLayer";
+ private static final boolean DEBUG = true;
+ private SurfaceControl mBlurSurface;
+ private int mLayer = -1;
+ private float mAlpha = 0;
+ private float mBlur = 0;
+ private int mX, mY;
+ private int mW, mH;
+ private boolean mIsShow;
+
+ public BlurLayer(SurfaceSession mFxSession, int w, int h, String tag) {
+ this(mFxSession, 0, 0, w, h, tag);
+ }
+
+ public BlurLayer(SurfaceSession mFxSession, int x, int y, int w, int h, String tag) {
+ mX = x;
+ mY = y;
+ mW = w;
+ mH = h;
+ mIsShow = false;
+
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface = new SurfaceControl(mFxSession, TAG+"_"+tag, 16, 16, PixelFormat.OPAQUE,
+ SurfaceControl.FX_SURFACE_BLUR | SurfaceControl.HIDDEN);
+ mBlurSurface.setLayerStack(0);
+ mBlurSurface.setPosition(mX, mY);
+ mBlurSurface.setSize(mW, mH);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception creating BlurLayer surface", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+
+ public void setSize(int w, int h) {
+ if (mBlurSurface != null && (mW != w || mH != h) ) {
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface.setSize(w, h);
+ mW = w;
+ mH = h;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting setSize immediately", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception setSize", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void setPosition(int x, int y) {
+ if (mBlurSurface != null && (mX != x || mY != y) ) {
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface.setPosition(x, y);
+ mX = x;
+ mY = y;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting setPosition immediately", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception setPosition", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void setLayer(int layer) {
+ if (mBlurSurface != null && mLayer != layer) {
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface.setLayer(layer);
+ mLayer = layer;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting setLayer immediately", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception setLayer", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void setAlpha(float alpha){
+ if(mBlurSurface != null && mAlpha != alpha){
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface.setAlpha(alpha);
+ mAlpha = alpha;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting alpha immediately", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception setAlpha", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void setBlur(float blur){
+ if(mBlurSurface != null && mBlur != blur ){
+ SurfaceControl.openTransaction();
+ try {
+ mBlurSurface.setBlur(blur);
+ mBlur = blur;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting blur immediately", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception setBlur", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void show() {
+ if(mBlurSurface != null && !mIsShow ){
+ try {
+ mBlurSurface.show();
+ mIsShow = true;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure show()", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception show()", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void hide(){
+ if(mBlurSurface != null && mIsShow ){
+ try {
+ mBlurSurface.hide();
+ mIsShow = false;
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure hide()", e);
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception hide()", e);
+ } finally {
+ SurfaceControl.closeTransaction();
+ }
+ }
+ }
+
+ public void destroySurface() {
+ if (DEBUG) Slog.v(TAG, "destroySurface.");
+ if (mBlurSurface != null) {
+ mBlurSurface.destroy();
+ mBlurSurface = null;
+ }
+ }
+
+}
+