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

377 lines
15 KiB
Java

package org.telegram.ui.Components;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.DocumentObject;
import org.telegram.messenger.ImageLocation;
import org.telegram.messenger.MediaDataController;
import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.SvgHelper;
import org.telegram.messenger.UserConfig;
import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.AdjustPanLayoutHelper;
import org.telegram.ui.ActionBar.Theme;
public class StickerEmptyView extends FrameLayout implements NotificationCenter.NotificationCenterDelegate {
public final static int STICKER_TYPE_NO_CONTACTS = 0;
public final static int STICKER_TYPE_SEARCH = 1;
public final static int STICKER_TYPE_DONE = 2;
private LinearLayout linearLayout;
public BackupImageView stickerView;
private RadialProgressView progressBar;
public final TextView title;
public final TextView subtitle;
private boolean progressShowing;
private final Theme.ResourcesProvider resourcesProvider;
private int stickerType;
public final View progressView;
int keyboardSize;
int currentAccount = UserConfig.selectedAccount;
boolean preventMoving;
Runnable showProgressRunnable = new Runnable() {
@Override
public void run() {
if (progressView != null) {
if (progressView.getVisibility() != View.VISIBLE) {
progressView.setVisibility(View.VISIBLE);
progressView.setAlpha(0f);
}
progressView.animate().setListener(null).cancel();
progressView.animate().alpha(1f).setDuration(150).start();
} else {
progressBar.animate().alpha(1f).scaleY(1f).scaleX(1f).setDuration(150).start();
}
}
};
private boolean animateLayoutChange;
public StickerEmptyView(@NonNull Context context, View progressView, int type) {
this(context, progressView, type, null);
}
public StickerEmptyView(@NonNull Context context, View progressView, int type, Theme.ResourcesProvider resourcesProvider) {
super(context);
this.resourcesProvider = resourcesProvider;
this.progressView = progressView;
stickerType = type;
linearLayout = new LinearLayout(context) {
@Override
public void setVisibility(int visibility) {
if (getVisibility() == View.GONE && visibility == View.VISIBLE) {
setSticker();
stickerView.getImageReceiver().startAnimation();
} else if (visibility == View.GONE) {
stickerView.getImageReceiver().clearImage();
}
super.setVisibility(visibility);
}
};
linearLayout.setOrientation(LinearLayout.VERTICAL);
stickerView = new BackupImageView(context);
stickerView.setOnClickListener(view -> stickerView.getImageReceiver().startAnimation());
title = new TextView(context);
title.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
title.setTag(Theme.key_windowBackgroundWhiteBlackText);
title.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText));
title.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
title.setGravity(Gravity.CENTER);
subtitle = new TextView(context);
subtitle.setTag(Theme.key_windowBackgroundWhiteGrayText);
subtitle.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteGrayText));
subtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
subtitle.setGravity(Gravity.CENTER);
linearLayout.addView(stickerView, LayoutHelper.createLinear(117, 117, Gravity.CENTER_HORIZONTAL));
linearLayout.addView(title, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 12, 0, 0));
linearLayout.addView(subtitle, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 8, 0, 0));
addView(linearLayout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 56, 0, 56, 30));
if (progressView == null) {
progressBar = new RadialProgressView(context, resourcesProvider);
progressBar.setAlpha(0);
progressBar.setScaleY(0.5f);
progressBar.setScaleX(0.5f);
addView(progressBar, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
}
}
private int lastH;
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if ((animateLayoutChange || preventMoving) && lastH > 0 && lastH != getMeasuredHeight()) {
float y = (lastH - getMeasuredHeight()) / 2f;
linearLayout.setTranslationY(linearLayout.getTranslationY() + y);
if (!preventMoving) {
linearLayout.animate().translationY(0).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(250);
}
if (progressBar != null) {
progressBar.setTranslationY(progressBar.getTranslationY() + y);
if (!preventMoving) {
progressBar.animate().translationY(0).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(250);
}
}
}
lastH = getMeasuredHeight();
}
String colorKey1 = Theme.key_emptyListPlaceholder;
public void setColors(String titleKey, String subtitleKey, String key1, String key2) {
title.setTag(titleKey);
title.setTextColor(getThemedColor(titleKey));
subtitle.setTag(subtitleKey);
subtitle.setTextColor(getThemedColor(subtitleKey));
colorKey1 = key1;
}
@Override
public void setVisibility(int visibility) {
if (getVisibility() != visibility) {
if (visibility == VISIBLE) {
if (progressShowing) {
linearLayout.animate().alpha(0f).scaleY(0.8f).scaleX(0.8f).setDuration(150).start();
progressView.setVisibility(VISIBLE);
progressView.setAlpha(1f);
//showProgressRunnable.run();
} else {
linearLayout.animate().alpha(1f).scaleY(1f).scaleX(1f).setDuration(150).start();
if (progressView != null) {
progressView.animate().setListener(null).cancel();
progressView.animate().setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
progressView.setVisibility(View.GONE);
}
}).alpha(0f).setDuration(150).start();
} else {
progressBar.animate().alpha(0f).scaleY(0.5f).scaleX(0.5f).setDuration(150).start();
}
stickerView.getImageReceiver().startAnimation();
}
}
}
super.setVisibility(visibility);
if (getVisibility() == VISIBLE) {
setSticker();
} else {
lastH = 0;
linearLayout.setAlpha(0f);
linearLayout.setScaleX(0.8f);
linearLayout.setScaleY(0.8f);
if (progressView != null) {
progressView.animate().setListener(null).cancel();
progressView.animate().setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
progressView.setVisibility(View.GONE);
}
}).alpha(0f).setDuration(150).start();
} else {
progressBar.setAlpha(0f);
progressBar.setScaleX(0.5f);
progressBar.setScaleY(0.5f);
}
stickerView.getImageReceiver().stopAnimation();
stickerView.getImageReceiver().clearImage();
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (getVisibility() == VISIBLE) {
setSticker();
}
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.diceStickersDidLoad);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.diceStickersDidLoad);
}
private void setSticker() {
String imageFilter = null;
TLRPC.Document document = null;
TLRPC.TL_messages_stickerSet set = null;
if (stickerType == STICKER_TYPE_DONE) {
document = MediaDataController.getInstance(currentAccount).getEmojiAnimatedSticker("\uD83D\uDC4D");
} else {
set = MediaDataController.getInstance(currentAccount).getStickerSetByName(AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME);
if (set == null) {
set = MediaDataController.getInstance(currentAccount).getStickerSetByEmojiOrName(AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME);
}
if (set != null && stickerType >= 0 && stickerType < set.documents.size() ) {
document = set.documents.get(stickerType);
}
imageFilter = "130_130";
}
if (document != null) {
SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(document.thumbs, colorKey1, 0.2f);
if (svgThumb != null) {
svgThumb.overrideWidthAndHeight(512, 512);
}
ImageLocation imageLocation = ImageLocation.getForDocument(document);
stickerView.setImage(imageLocation, imageFilter, "tgs", svgThumb, set);
if (stickerType == 9) {
stickerView.getImageReceiver().setAutoRepeat(1);
} else {
stickerView.getImageReceiver().setAutoRepeat(2);
}
} else {
MediaDataController.getInstance(currentAccount).loadStickersByEmojiOrName(AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME, false, set == null);
stickerView.getImageReceiver().clearImage();
}
}
@Override
public void didReceivedNotification(int id, int account, Object... args) {
if (id == NotificationCenter.diceStickersDidLoad) {
String name = (String) args[0];
if (AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME.equals(name) && getVisibility() == VISIBLE) {
setSticker();
}
}
}
public void setKeyboardHeight(int keyboardSize, boolean animated) {
if (this.keyboardSize != keyboardSize) {
if (getVisibility() != View.VISIBLE) {
animated = false;
}
this.keyboardSize = keyboardSize;
float y = -(keyboardSize >> 1) + (keyboardSize > 0 ? AndroidUtilities.dp(20) : 0);
if (animated) {
linearLayout.animate().translationY(y).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(250);
if (progressBar != null) {
progressBar.animate().translationY(y).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(250);
}
} else {
linearLayout.setTranslationY(y);
if (progressBar != null) {
progressBar.setTranslationY(y);
}
}
}
}
public void showProgress(boolean show) {
showProgress(show, true);
}
public void showProgress(boolean show, boolean animated) {
if (progressShowing != show) {
progressShowing = show;
if (getVisibility() != View.VISIBLE) {
return;
}
if (animated) {
if (show) {
linearLayout.animate().alpha(0f).scaleY(0.8f).scaleX(0.8f).setDuration(150).start();
showProgressRunnable.run();
} else {
linearLayout.animate().alpha(1f).scaleY(1f).scaleX(1f).setDuration(150).start();
if (progressView != null) {
progressView.animate().setListener(null).cancel();
progressView.animate().setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
progressView.setVisibility(View.GONE);
}
}).alpha(0).setDuration(150).start();
} else {
progressBar.animate().alpha(0f).scaleY(0.5f).scaleX(0.5f).setDuration(150).start();
}
stickerView.getImageReceiver().startAnimation();
}
} else {
if (show) {
linearLayout.animate().cancel();
linearLayout.setAlpha(0);
linearLayout.setScaleX(0.8f);
linearLayout.setScaleY(0.8f);
if (progressView != null) {
progressView.animate().setListener(null).cancel();
progressView.setAlpha(1);
progressView.setVisibility(View.VISIBLE);
} else {
progressBar.setAlpha(1f);
progressBar.setScaleX(1f);
progressBar.setScaleY(1f);
}
} else {
linearLayout.animate().cancel();
linearLayout.setAlpha(1f);
linearLayout.setScaleX(1f);
linearLayout.setScaleY(1f);
if (progressView != null) {
progressView.animate().setListener(null).cancel();
progressView.setVisibility(View.GONE);
} else {
progressBar.setAlpha(0f);
progressBar.setScaleX(0.5f);
progressBar.setScaleY(0.5f);
}
}
}
}
}
public void setAnimateLayoutChange(boolean animate) {
this.animateLayoutChange = animate;
}
public void setPreventMoving(boolean preventMoving) {
this.preventMoving = preventMoving;
if (!preventMoving) {
linearLayout.setTranslationY(0);
if (progressBar != null) {
progressBar.setTranslationY(0);
}
}
}
private int getThemedColor(String key) {
Integer color = resourcesProvider != null ? resourcesProvider.getColor(key) : null;
return color != null ? color : Theme.getColor(key);
}
public void setStickerType(int stickerType) {
if (this.stickerType != stickerType) {
this.stickerType = stickerType;
setSticker();
}
}
}