[updater] fixes, mono and italic support for changelog

This commit is contained in:
immat0x1
2022-10-11 22:51:44 +05:00
parent ae90308617
commit acb87d5f7a
3 changed files with 50 additions and 21 deletions

View File

@@ -51,8 +51,6 @@ public class UpdaterBottomSheet extends BottomSheet {
private RLottieImageView imageView;
private TextView changelogTextView;
private boolean animationInProgress;
private boolean isTranslated = false;
private CharSequence translatedC;
@@ -118,10 +116,10 @@ public class UpdaterBottomSheet extends BottomSheet {
TextCell changelog = new TextCell(context);
changelog.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 100, 0));
changelog.setTextAndIcon(LocaleController.getString("Changelog", R.string.Changelog), R.drawable.msg_log, false);
changelog.setOnClickListener(v -> copyText(changelog.getTextView().getText() + "\n" + (isTranslated ? translatedC : AndroidUtilities.replaceTags(args[1]))));
changelog.setOnClickListener(v -> copyText(changelog.getTextView().getText() + "\n" + (isTranslated ? translatedC : UpdaterUtils.replaceTags(args[1]))));
linearLayout.addView(changelog);
changelogTextView = new androidx.appcompat.widget.AppCompatTextView(context) {
changelogTextView = new TextView(context) {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
@@ -132,12 +130,12 @@ public class UpdaterBottomSheet extends BottomSheet {
changelogTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
changelogTextView.setMovementMethod(new AndroidUtilities.LinkMovementMethodMy());
changelogTextView.setLinkTextColor(Theme.getColor(Theme.key_dialogTextLink));
changelogTextView.setText(AndroidUtilities.replaceTags(args[1]));
changelogTextView.setText(UpdaterUtils.replaceTags(args[1]));
changelogTextView.setPadding(AndroidUtilities.dp(21), 0, AndroidUtilities.dp(21), AndroidUtilities.dp(10));
changelogTextView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
changelogTextView.setOnClickListener(v -> UpdaterUtils.translate(AndroidUtilities.replaceTags(args[1]), (String translated) -> {
changelogTextView.setOnClickListener(v -> UpdaterUtils.translate(args[1], (String translated) -> {
translatedC = translated;
animateChangelog(isTranslated ? AndroidUtilities.replaceTags(args[1]) : translatedC);
animateChangelog(UpdaterUtils.replaceTags(isTranslated ? args[1] : (String) translatedC));
isTranslated ^= true;
}, () -> {}));
linearLayout.addView(changelogTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
@@ -234,20 +232,13 @@ public class UpdaterBottomSheet extends BottomSheet {
private void animateChangelog(CharSequence text) {
changelogTextView.setText(text);
animationInProgress = true;
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(200);
animatorSet.setDuration(250);
animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT);
animatorSet.playTogether(
ObjectAnimator.ofFloat(changelogTextView, View.ALPHA, 0.0f, 1.0f),
ObjectAnimator.ofFloat(changelogTextView, View.TRANSLATION_Y, AndroidUtilities.dp(10), 0)
ObjectAnimator.ofFloat(changelogTextView, View.TRANSLATION_Y, AndroidUtilities.dp(12), 0)
);
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
animationInProgress = false;
}
});
animatorSet.start();
}

View File

@@ -22,6 +22,8 @@ import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.net.Uri;
import android.os.Build;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import androidx.core.content.FileProvider;
@@ -33,9 +35,11 @@ import org.json.JSONTokener;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.ApplicationLoader;
import org.telegram.messenger.BuildVars;
import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.Utilities;
import org.telegram.ui.Components.AlertsCreator;
import org.telegram.ui.Components.TypefaceSpan;
import java.io.BufferedReader;
import java.io.File;
@@ -291,11 +295,45 @@ public class UpdaterUtils {
}
}
/*
// TODO
public CharSequence formatChangelog(String text) {
public static SpannableStringBuilder replaceTags(String str) {
try {
int start;
int end;
StringBuilder stringBuilder = new StringBuilder(str);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(str);
String symbol = "", font = "fonts/rregular.ttf";
for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
symbol = "**";
font = "fonts/rmedium.ttf";
break;
case 1:
symbol = "_";
font = "fonts/ritalic.ttf";
break;
case 2:
symbol = "`";
font = "fonts/rmono.ttf";
break;
}
while ((start = stringBuilder.indexOf(symbol)) != -1) {
stringBuilder.replace(start, start + symbol.length(), "");
spannableStringBuilder.replace(start, start + symbol.length(), "");
end = stringBuilder.indexOf(symbol);
if (end >= 0) {
stringBuilder.replace(end, end + symbol.length(), "");
spannableStringBuilder.replace(end, end + symbol.length(), "");
spannableStringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface(font)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return spannableStringBuilder;
} catch (Exception e) {
FileLog.e(e);
}
return new SpannableStringBuilder(str);
}
*/
public interface OnTranslationSuccess {
void run(String translated);

View File

@@ -2760,7 +2760,7 @@ public class LaunchActivity extends BasePermissionsActivity implements ActionBar
if (currentFragment != null && (currentFragment.isRemovingFromStack() || currentFragment.isInPreviewMode())) {
currentFragment = mainFragmentsStack.size() > 1 ? mainFragmentsStack.get(mainFragmentsStack.size() - 2) : null;
}
UpdaterUtils.checkUpdates(currentFragment.getParentActivity(), false, () -> showBulletin(factory -> factory.createErrorBulletin(LocaleController.getString("NoUpdates", R.string.NoUpdates))), null);
UpdaterUtils.checkUpdates(currentFragment.getParentActivity(), true, () -> showBulletin(factory -> factory.createErrorBulletin(LocaleController.getString("NoUpdates", R.string.NoUpdates))), null);
} else if (newContact) {
final NewContactActivity fragment = new NewContactActivity();
if (newContactName != null) {