blob: f2031932306e51a7bd087852037d335585afc194 [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.contacts.widget;
import android.content.Context;
import android.view.View;
import android.widget.FrameLayout;
import com.android.contacts.detail.ContactDisplayUtils;
import com.android.contacts.util.ThemeUtils;
/**
* A View that other Views can use to create a touch-interceptor layer above
* their other sub-views. This layer can be enabled and disabled; when enabled,
* clicks are intercepted and passed to a listener.
*
* Also supports an alpha layer to dim the content underneath. By default, the
* alpha layer is the same View as the touch-interceptor layer. However, for
* some use-cases, you want a few Views to not be dimmed, but still have touches
* intercepted (for example, {@link CarouselTab}'s label appears above the alpha
* layer). In this case, you can specify the View to use as the alpha layer via
* setAlphaLayer(); in this case you are responsible for managing the z-order of
* the alpha-layer with respect to your other sub-views.
*
* Typically, you would not use this class directly, but rather use another class
* that uses it, for example {@link FrameLayoutWithOverlay}.
*/
public class AlphaTouchInterceptorOverlay extends FrameLayout {
private View mInterceptorLayer;
private View mAlphaLayer;
private float mAlpha = 0.0f;
public AlphaTouchInterceptorOverlay(Context context) {
super(context);
mInterceptorLayer = new View(context);
final int resId = ThemeUtils.getSelectableItemBackground(context.getTheme());
mInterceptorLayer.setBackgroundResource(resId);
addView(mInterceptorLayer);
mAlphaLayer = this;
}
/**
* Set the View that the overlay will use as its alpha-layer. If
* none is set it will use itself. Only necessary to set this if
* some child views need to appear above the alpha-layer but below
* the touch-interceptor.
*/
public void setAlphaLayer(View alphaLayer) {
if (mAlphaLayer == alphaLayer) return;
// We're no longer the alpha-layer, so make ourself invisible.
if (mAlphaLayer == this) ContactDisplayUtils.setAlphaOnViewBackground(this, 0.0f);
mAlphaLayer = (alphaLayer == null) ? this : alphaLayer;
setAlphaLayerValue(mAlpha);
}
/** Sets the alpha value on the alpha layer. */
public void setAlphaLayerValue(float alpha) {
mAlpha = alpha;
if (mAlphaLayer != null) {
ContactDisplayUtils.setAlphaOnViewBackground(mAlphaLayer, mAlpha);
}
}
/** Delegate to interceptor-layer. */
public void setOverlayOnClickListener(OnClickListener listener) {
mInterceptorLayer.setOnClickListener(listener);
}
/** Delegate to interceptor-layer. */
public void setOverlayClickable(boolean clickable) {
mInterceptorLayer.setClickable(clickable);
}
}