NekoX/TMessagesProj/src/main/java/org/telegram/ui/Cells/SendLocationCell.java

175 lines
8.4 KiB
Java

/*
* This is the source code of Telegram for Android v. 5.x.x
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2018.
*/
package org.telegram.ui.Cells;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.LocationController;
import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.Components.CombinedDrawable;
import org.telegram.ui.Components.LayoutHelper;
import org.telegram.ui.ActionBar.SimpleTextView;
import org.telegram.ui.Components.ShareLocationDrawable;
public class SendLocationCell extends FrameLayout {
private int currentAccount = UserConfig.selectedAccount;
private SimpleTextView accurateTextView;
private SimpleTextView titleTextView;
private ImageView imageView;
private long dialogId;
private RectF rect;
private Runnable invalidateRunnable = new Runnable() {
@Override
public void run() {
checkText();
invalidate((int) rect.left - 5, (int) rect.top - 5, (int) rect.right + 5, (int) rect.bottom + 5);
AndroidUtilities.runOnUIThread(invalidateRunnable, 1000);
}
};
public SendLocationCell(Context context, boolean live) {
super(context);
imageView = new ImageView(context);
imageView.setTag(live ? Theme.key_location_sendLiveLocationBackground + Theme.key_location_sendLiveLocationIcon : Theme.key_location_sendLocationBackground + Theme.key_location_sendLocationIcon);
Drawable circle = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(42), Theme.getColor(live ? Theme.key_location_sendLiveLocationBackground : Theme.key_location_sendLocationBackground), Theme.getColor(live ? Theme.key_location_sendLiveLocationBackground : Theme.key_location_sendLocationBackground));
if (live) {
rect = new RectF();
Drawable drawable = new ShareLocationDrawable(context, 4);
drawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_location_sendLiveLocationIcon), PorterDuff.Mode.MULTIPLY));
CombinedDrawable combinedDrawable = new CombinedDrawable(circle, drawable);
combinedDrawable.setCustomSize(AndroidUtilities.dp(42), AndroidUtilities.dp(42));
imageView.setBackgroundDrawable(combinedDrawable);
AndroidUtilities.runOnUIThread(invalidateRunnable, 1000);
setWillNotDraw(false);
} else {
Drawable drawable = getResources().getDrawable(R.drawable.pin);
drawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_location_sendLocationIcon), PorterDuff.Mode.MULTIPLY));
CombinedDrawable combinedDrawable = new CombinedDrawable(circle, drawable);
combinedDrawable.setCustomSize(AndroidUtilities.dp(42), AndroidUtilities.dp(42));
combinedDrawable.setIconSize(AndroidUtilities.dp(24), AndroidUtilities.dp(24));
imageView.setBackgroundDrawable(combinedDrawable);
}
addView(imageView, LayoutHelper.createFrame(42, 42, Gravity.TOP | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), LocaleController.isRTL ? 0 : 15, 12, LocaleController.isRTL ? 15 : 0, 0));
titleTextView = new SimpleTextView(context);
titleTextView.setTextSize(16);
titleTextView.setTag(live ? Theme.key_location_sendLiveLocationText : Theme.key_location_sendLocationText);
titleTextView.setTextColor(Theme.getColor(live ? Theme.key_location_sendLiveLocationText : Theme.key_location_sendLocationText));
titleTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
titleTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
addView(titleTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, Gravity.TOP | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), LocaleController.isRTL ? 16 : 73, 12, LocaleController.isRTL ? 73 : 16, 0));
accurateTextView = new SimpleTextView(context);
accurateTextView.setTextSize(14);
accurateTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText3));
accurateTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
addView(accurateTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, Gravity.TOP | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), LocaleController.isRTL ? 16 : 73, 37, LocaleController.isRTL ? 73 : 16, 0));
}
private ImageView getImageView() {
return imageView;
}
public void setHasLocation(boolean value) {
LocationController.SharingLocationInfo info = LocationController.getInstance(currentAccount).getSharingLocationInfo(dialogId);
if (info == null) {
titleTextView.setAlpha(value ? 1.0f : 0.5f);
accurateTextView.setAlpha(value ? 1.0f : 0.5f);
imageView.setAlpha(value ? 1.0f : 0.5f);
}
checkText();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(66), MeasureSpec.EXACTLY));
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
AndroidUtilities.cancelRunOnUIThread(invalidateRunnable);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (rect != null) {
AndroidUtilities.runOnUIThread(invalidateRunnable, 1000);
}
}
public void setText(String title, String text) {
titleTextView.setText(title);
accurateTextView.setText(text);
}
public void setDialogId(long did) {
dialogId = did;
checkText();
}
private void checkText() {
LocationController.SharingLocationInfo info = LocationController.getInstance(currentAccount).getSharingLocationInfo(dialogId);
if (info != null) {
setText(LocaleController.getString("StopLiveLocation", R.string.StopLiveLocation), LocaleController.formatLocationUpdateDate(info.messageObject.messageOwner.edit_date != 0 ? info.messageObject.messageOwner.edit_date : info.messageObject.messageOwner.date));
} else {
setText(LocaleController.getString("SendLiveLocation", R.string.SendLiveLocation), LocaleController.getString("SendLiveLocationInfo", R.string.SendLiveLocationInfo));
}
}
@Override
protected void onDraw(Canvas canvas) {
LocationController.SharingLocationInfo currentInfo = LocationController.getInstance(currentAccount).getSharingLocationInfo(dialogId);
if (currentInfo == null) {
return;
}
int currentTime = ConnectionsManager.getInstance(currentAccount).getCurrentTime();
if (currentInfo.stopTime < currentTime) {
return;
}
float progress = Math.abs(currentInfo.stopTime - currentTime) / (float) currentInfo.period;
if (LocaleController.isRTL) {
rect.set(AndroidUtilities.dp(13), AndroidUtilities.dp(18), AndroidUtilities.dp(43), AndroidUtilities.dp(48));
} else {
rect.set(getMeasuredWidth() - AndroidUtilities.dp(43), AndroidUtilities.dp(18), getMeasuredWidth() - AndroidUtilities.dp(13), AndroidUtilities.dp(48));
}
int color = Theme.getColor(Theme.key_location_liveLocationProgress);
Theme.chat_radialProgress2Paint.setColor(color);
Theme.chat_livePaint.setColor(color);
canvas.drawArc(rect, -90, -360 * progress, false, Theme.chat_radialProgress2Paint);
String text = LocaleController.formatLocationLeftTime(Math.abs(currentInfo.stopTime - currentTime));
float size = Theme.chat_livePaint.measureText(text);
canvas.drawText(text, rect.centerX() - size / 2, AndroidUtilities.dp(37), Theme.chat_livePaint);
}
}