/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.shade; import android.content.Context; import android.content.res.Configuration; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.FrameLayout; import com.android.systemui.scene.shared.flag.SceneContainerFlag; /** The shade view. */ public final class NotificationPanelView extends FrameLayout { static final boolean DEBUG = false; private final Paint mAlphaPaint = new Paint(); private int mCurrentPanelAlpha; private boolean mDozing; private RtlChangeListener mRtlChangeListener; private NotificationPanelViewController.TouchHandler mTouchHandler; private OnConfigurationChangedListener mOnConfigurationChangedListener; public NotificationPanelView(Context context, AttributeSet attrs) { super(context, attrs); if (!SceneContainerFlag.isEnabled()) { setWillNotDraw(!DEBUG); mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); setBackgroundColor(Color.TRANSPARENT); } } @Override public void onRtlPropertiesChanged(int layoutDirection) { if (SceneContainerFlag.isEnabled()) { super.onRtlPropertiesChanged(layoutDirection); return; } if (mRtlChangeListener != null) { mRtlChangeListener.onRtlPropertielsChanged(layoutDirection); } } @Override public boolean shouldDelayChildPressedState() { if (SceneContainerFlag.isEnabled()) { return super.shouldDelayChildPressedState(); } return true; } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (!SceneContainerFlag.isEnabled()) { if (mCurrentPanelAlpha != 255) { canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), mAlphaPaint); } } } float getCurrentPanelAlpha() { return mCurrentPanelAlpha; } void setPanelAlphaInternal(float alpha) { mCurrentPanelAlpha = (int) alpha; mAlphaPaint.setARGB(mCurrentPanelAlpha, 255, 255, 255); invalidate(); } public void setDozing(boolean dozing) { mDozing = dozing; } @Override public boolean hasOverlappingRendering() { if (SceneContainerFlag.isEnabled()) { return super.hasOverlappingRendering(); } return !mDozing; } void setRtlChangeListener(RtlChangeListener listener) { mRtlChangeListener = listener; } /** Sets the touch handler for this view. */ public void setOnTouchListener(NotificationPanelViewController.TouchHandler touchHandler) { super.setOnTouchListener(touchHandler); mTouchHandler = touchHandler; } void setOnConfigurationChangedListener(OnConfigurationChangedListener listener) { mOnConfigurationChangedListener = listener; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (SceneContainerFlag.isEnabled()) { return super.onInterceptTouchEvent(event); } return mTouchHandler.onInterceptTouchEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return TouchLogger.logDispatchTouch("NPV", ev, super.dispatchTouchEvent(ev)); } @Override public void dispatchConfigurationChanged(Configuration newConfig) { super.dispatchConfigurationChanged(newConfig); if (!SceneContainerFlag.isEnabled()) { mOnConfigurationChangedListener.onConfigurationChanged(newConfig); } } /** Callback for right-to-left setting changes. */ interface RtlChangeListener { /** Called when right-to-left setting changes. */ void onRtlPropertielsChanged(int layoutDirection); } /** Callback for config changes. */ interface OnConfigurationChangedListener { /** Called when configuration changes. */ void onConfigurationChanged(Configuration newConfig); } }