// Copyright 2011 Google Inc.
// All Rights Reserved.
package com.tweetlanes.android.core.view;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.tweetlanes.android.core.AppSettings;
import com.tweetlanes.android.core.R;
public class QuickContactDivot extends ImageView implements Divot {
private Drawable mDrawable;
private int mDrawableIntrinsicWidth;
private int mDrawableIntrinsicHeight;
private int mPosition;
// The screen density. Multiple this by dips to get pixels.
private float mDensity;
public QuickContactDivot(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize(attrs);
}
public QuickContactDivot(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(attrs);
}
public QuickContactDivot(Context context) {
super(context);
initialize(null);
}
private void initialize(AttributeSet attrs) {
if (attrs != null) {
mPosition = attrs.getAttributeListValue(null, "position",
sPositionChoices, -1);
}
Resources r = getContext().getResources();
mDensity = r.getDisplayMetrics().density;
setDrawable();
}
private void setDrawable() {
Resources r = getContext().getResources();
switch (mPosition) {
case LEFT_UPPER:
case LEFT_MIDDLE:
case LEFT_LOWER:
mDrawable = r.getDrawable(R.drawable.msg_bubble_right);
break;
case RIGHT_UPPER:
case RIGHT_MIDDLE:
case RIGHT_LOWER:
mDrawable = r
.getDrawable(AppSettings.get().getCurrentTheme() == AppSettings.Theme.Holo_Dark ? R.drawable.msg_bubble_left_dark
: R.drawable.msg_bubble_left_light);
break;
// case TOP_LEFT:
// case TOP_MIDDLE:
// case TOP_RIGHT:
// mDrawable = r.getDrawable(R.drawable.msg_bubble_bottom);
// break;
//
// case BOTTOM_LEFT:
// case BOTTOM_MIDDLE:
// case BOTTOM_RIGHT:
// mDrawable = r.getDrawable(R.drawable.msg_bubble_top);
// break;
}
mDrawableIntrinsicWidth = mDrawable.getIntrinsicWidth();
mDrawableIntrinsicHeight = mDrawable.getIntrinsicHeight();
}
@Override
public void onDraw(Canvas c) {
super.onDraw(c);
c.save();
computeBounds(c);
mDrawable.draw(c);
c.restore();
}
public void setPosition(int position) {
mPosition = position;
setDrawable();
invalidate();
}
public int getPosition() {
return mPosition;
}
public float getCloseOffset() {
return CORNER_OFFSET * mDensity; // multiply by density to get pixels
}
public ImageView asImageView() {
return this;
}
// public void assignContactFromEmail(String emailAddress) {
// assignContactFromEmail(emailAddress, true);
// }
public float getFarOffset() {
return getCloseOffset() + mDrawableIntrinsicHeight;
}
private void computeBounds(Canvas c) {
final int left = 0;
final int top = 0;
final int right = getWidth();
final int middle = right / 2;
final int bottom = getHeight();
final int cornerOffset = (int) getCloseOffset();
switch (mPosition) {
case RIGHT_UPPER:
mDrawable.setBounds(right - mDrawableIntrinsicWidth, cornerOffset, right, top + cornerOffset
+ mDrawableIntrinsicHeight);
break;
case LEFT_UPPER:
mDrawable.setBounds(left, cornerOffset, mDrawableIntrinsicWidth, top + cornerOffset
+ mDrawableIntrinsicHeight);
break;
case BOTTOM_MIDDLE:
int halfWidth = mDrawableIntrinsicWidth / 2;
mDrawable.setBounds(middle - halfWidth,
bottom - mDrawableIntrinsicHeight,
middle + halfWidth,
bottom);
break;
}
}
}