NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/ProxyDrawable.java

128 lines
4.0 KiB
Java

package org.telegram.ui.Components;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.SystemClock;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.R;
import org.telegram.ui.ActionBar.Theme;
public class ProxyDrawable extends Drawable {
private Drawable emptyDrawable;
private Drawable fullDrawable;
private Paint outerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private RectF cicleRect = new RectF();
private int radOffset = 0;
private long lastUpdateTime;
private int currentColorType;
private float connectedAnimationProgress;
private boolean connected;
private boolean isEnabled;
public ProxyDrawable(Context context) {
super();
emptyDrawable = context.getResources().getDrawable(R.drawable.proxy_off);
fullDrawable = context.getResources().getDrawable(R.drawable.proxy_on);
outerPaint.setStyle(Paint.Style.STROKE);
outerPaint.setStrokeWidth(AndroidUtilities.dp(2));
outerPaint.setStrokeCap(Paint.Cap.ROUND);
lastUpdateTime = SystemClock.elapsedRealtime();
}
public void setConnected(boolean enabled, boolean value, boolean animated) {
isEnabled = enabled;
connected = value;
lastUpdateTime = SystemClock.elapsedRealtime();
if (!animated) {
connectedAnimationProgress = connected ? 1.0f : 0.0f;
}
invalidateSelf();
}
@Override
public void draw(Canvas canvas) {
long newTime = SystemClock.elapsedRealtime();
long dt = newTime - lastUpdateTime;
lastUpdateTime = newTime;
if (!isEnabled) {
emptyDrawable.setBounds(getBounds());
emptyDrawable.draw(canvas);
} else if (!connected || connectedAnimationProgress != 1.0f) {
emptyDrawable.setBounds(getBounds());
emptyDrawable.draw(canvas);
outerPaint.setColor(Theme.getColor(Theme.key_contextProgressOuter2));
outerPaint.setAlpha((int) (255 * (1.0f - connectedAnimationProgress)));
radOffset += 360 * dt / 1000.0f;
int width = getBounds().width();
int height = getBounds().height();
int x = width / 2 - AndroidUtilities.dp(3);
int y = height / 2 - AndroidUtilities.dp(3);
cicleRect.set(x, y, x + AndroidUtilities.dp(6), y + AndroidUtilities.dp(6));
canvas.drawArc(cicleRect, -90 + radOffset, 90, false, outerPaint);
invalidateSelf();
}
if (isEnabled && (connected || connectedAnimationProgress != 0.0f)) {
fullDrawable.setAlpha((int) (255 * connectedAnimationProgress));
fullDrawable.setBounds(getBounds());
fullDrawable.draw(canvas);
}
if (connected && connectedAnimationProgress != 1.0f) {
connectedAnimationProgress += dt / 300.0f;
if (connectedAnimationProgress > 1.0f) {
connectedAnimationProgress = 1.0f;
}
invalidateSelf();
} else if (!connected && connectedAnimationProgress != 0.0f) {
connectedAnimationProgress -= dt / 300.0f;
if (connectedAnimationProgress < 0.0f) {
connectedAnimationProgress = 0.0f;
}
invalidateSelf();
}
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
emptyDrawable.setColorFilter(cf);
fullDrawable.setColorFilter(cf);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSPARENT;
}
@Override
public int getIntrinsicWidth() {
return AndroidUtilities.dp(24);
}
@Override
public int getIntrinsicHeight() {
return AndroidUtilities.dp(24);
}
}