/**
* Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
* This file is part of CSipSimple.
*
* CSipSimple is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* If you own a pjsip commercial license you can also redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License
* as an android library.
*
* CSipSimple is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CSipSimple. If not, see <http://www.gnu.org/licenses/>.
*/
package com.csipsimple.widgets.contactbadge;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.net.Uri;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.csipsimple.utils.Compatibility;
import com.csipsimple.utils.Log;
import java.lang.reflect.Constructor;
public class QuickContactBadge extends FrameLayout {
private static final String THIS_FILE = "QuickContactBadgeCompat";
private ContactBadgeContract badge;
public QuickContactBadge(Context context) {
this(context, null, 0);
}
public QuickContactBadge(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
String className = "com.csipsimple.widgets.contactbadge.ContactBadge";
if (Compatibility.isCompatible(5)) {
className += "5";
} else {
className += "3";
}
try {
Class<? extends ContactBadgeContract> wrappedClass = Class.forName(className)
.asSubclass(ContactBadgeContract.class);
Constructor<? extends ContactBadgeContract> constructor = wrappedClass.getConstructor(
Context.class, AttributeSet.class, int.class, QuickContactBadge.class);
badge = constructor.newInstance(context, attrs, defStyle, this);
} catch (Exception e) {
Log.e(THIS_FILE, "Problem when trying to load for compat mode");
}
if (badge != null) {
ImageView imageView = badge.getImageView();
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
addView(imageView, params);
}
setDrawable();
}
public ImageView getImageView() {
if(badge != null) {
return badge.getImageView();
}
return null;
}
public void assignContactUri(Uri uri) {
if(badge != null) {
badge.assignContactUri(uri);
}
}
public enum ArrowPosition {
LEFT,
RIGHT,
NONE
};
private ArrowPosition arrowPos = ArrowPosition.NONE;
public void setPosition(ArrowPosition position) {
arrowPos = position;
setDrawable();
invalidate();
}
private void setDrawable() {
setWillNotDraw(arrowPos == ArrowPosition.NONE);
}
public void overlay(Canvas c, ImageView img) {
if (arrowPos != ArrowPosition.NONE) {
int x_border = (arrowPos == ArrowPosition.LEFT) ? 0 : img.getWidth();
int x_inside = x_border + ((arrowPos == ArrowPosition.LEFT) ? 1 : -1 ) * (int)(img.getWidth() * 0.2f);
int y_top = (int) (img.getHeight() * 0.2f);
int y_bottom = (int) (img.getHeight() * 0.6f);
c.save();
Path path = new Path();
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(x_border, y_top);
path.lineTo(x_inside, (y_top + y_bottom)/2);
path.lineTo(x_border, y_bottom);
path.lineTo(x_border, y_top);
path.close();
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(0);
paint.setColor(android.graphics.Color.BLACK);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);
c.drawPath(path, paint);
c.restore();
}
}
}