package im.actor.sdk.controllers.conversation.view;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import im.actor.sdk.util.Screen;
public class TypingDrawable extends Drawable {
private static final int DURATION = 600;
private static final int ANIMATION_DELTA = 800;
private static final int ANIMATION_OFFSET = DURATION / 3;
private static final int OFFSET = 1;
private static final int RADIUS = 3;
private static final int DIAMETER = RADIUS * 2;
private static final int PADDING = 3;
private Paint paint;
private int height;
public TypingDrawable() {
height = Screen.dp(DIAMETER);
paint = new Paint();
paint.setColor(0xffdae1ea);
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
}
@Override
public int getIntrinsicWidth() {
return Screen.dp(((DIAMETER + OFFSET) * 3 + PADDING));
}
@Override
public int getIntrinsicHeight() {
return height;
}
private float process(int offset) {
long time = (System.currentTimeMillis() + offset) % (DURATION + ANIMATION_DELTA);
if (time > DURATION) {
return 0;
}
float p = time / (float) (DURATION);
return (float) Math.abs(Math.sin(Math.PI * p));
}
@Override
public void draw(Canvas canvas) {
float size1 = 0.7f + (0.3f * process(ANIMATION_OFFSET * 2));
float size2 = 0.7f + (0.3f * process(ANIMATION_OFFSET));
float size3 = 0.7f + (0.3f * process(0));
Rect bounds = getBounds();
int top = ((getBounds().height() - Screen.dp(DIAMETER)) / 2) + bounds.top;
canvas.drawCircle(Screen.dp(RADIUS), Screen.dp(RADIUS) + top, size1 * Screen.dp(RADIUS), paint);
canvas.drawCircle(Screen.dp(RADIUS + DIAMETER + OFFSET), Screen.dp(RADIUS) + top, size2 * Screen.dp(RADIUS), paint);
canvas.drawCircle(Screen.dp(RADIUS + (DIAMETER + OFFSET) * 2), Screen.dp(RADIUS) + top, size3 * Screen.dp(RADIUS), paint);
invalidateSelf();
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
@Override
public int getOpacity() {
return 0;
}
}