blob: c501d88b77ce760a1aaaac0c496963b073361842 [file] [log] [blame]
/*
* 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;
/** 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);
setWillNotDraw(!DEBUG);
mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
setBackgroundColor(Color.TRANSPARENT);
}
@Override
public void onRtlPropertiesChanged(int layoutDirection) {
if (mRtlChangeListener != null) {
mRtlChangeListener.onRtlPropertielsChanged(layoutDirection);
}
}
@Override
public boolean shouldDelayChildPressedState() {
return true;
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
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() {
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) {
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);
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);
}
}