diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml
index 37592ed80..db39e2c20 100644
--- a/TMessagesProj/src/main/AndroidManifest.xml
+++ b/TMessagesProj/src/main/AndroidManifest.xml
@@ -122,19 +122,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
= 0) {
+ String ext = filename.substring(index + 1);
+ switch (ext.toLowerCase().hashCode()) {
+ case 0x17a1c: case 0x3107ab: case 0x19a1b:
+ case 0xe55: case 0x18417: case 0x184fe:
+ case 0x18181:
+ return false;
+ }
}
}
if (isAnimated && (width > 1280 || height > 1280)) {
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
index 3e0d871d3..01b68e243 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
@@ -19972,13 +19972,13 @@ public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObj
@Override
public void onMessagesLoaded(boolean fromCache) {
progress.end();
- fragment.presentFragment(new ChatActivity(bundle), true);
+ fragment.presentFragment(new ChatActivity(bundle));
}
@Override
public void onError() {
progress.end();
- fragment.presentFragment(new ChatActivity(bundle), true);
+ fragment.presentFragment(new ChatActivity(bundle));
}
}));
return false;
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java
index 2df6a348f..e68cf58b1 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java
@@ -60,6 +60,7 @@
import java.lang.ref.WeakReference;
import java.net.URLEncoder;
+import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
@@ -264,11 +265,9 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom,
boolean[] forceBrowser = new boolean[]{false};
boolean internalUri = isInternalUri(uri, forceBrowser);
String browserPackage = getBrowserPackageName(browser);
- if (isBrowserPackageInstalled(context, browserPackage, uri)) {
+ if (browserPackage != null) {
tryTelegraph = false;
_allowCustom = false;
- } else {
- browserPackage = null;
}
final boolean allowCustom = _allowCustom;
if (tryTelegraph) {
@@ -442,7 +441,16 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom,
intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps);
((LaunchActivity) context).onNewIntent(intent, inCaseLoading);
} else {
- context.startActivity(intent);
+ try {
+ context.startActivity(intent);
+ } catch (Exception e2) {
+ if (browserPackage != null) {
+ intent.setPackage(browserPackage = null);
+ context.startActivity(intent);
+ } else {
+ FileLog.e(e2);
+ }
+ }
}
} catch (Exception e) {
FileLog.e(e);
@@ -599,14 +607,6 @@ public static String getBrowserPackageName(String browser) {
return null;
}
- public static boolean isBrowserPackageInstalled(Context context, String packageName, Uri uri) {
- if (packageName == null) return false;
- PackageManager packageManager = context.getPackageManager();
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- intent.setPackage(packageName);
- return packageManager.resolveActivity(intent, 0) != null;
- }
-
public static String replaceHostname(Uri originalUri, String newHostname) {
String scheme = originalUri.getScheme();
String userInfo = originalUri.getUserInfo();
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java
index 8c2ba1304..61ff78d3e 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java
@@ -332,7 +332,7 @@ private void openItem(CacheModel.FileInfo fileInfo, CacheCell cacheCell) {
photoEntries.add(new MediaController.PhotoEntry(0, 0, 0, fileInfo.file.getPath(), 0, fileInfo.type == TYPE_VIDEOS, 0, 0, 0));
PhotoViewer.getInstance().openPhotoForSelect(photoEntries, 0, PhotoViewer.SELECT_TYPE_NO_SELECT, false, placeProvider, null);
} else {
- AndroidUtilities.openForView(fileInfo.file, fileInfo.file.getName(), null, parentFragment.getParentActivity(), null);
+ AndroidUtilities.openForView(fileInfo.file, fileInfo.file.getName(), null, parentFragment.getParentActivity(), null, false);
}
}
if (cacheCell.type == TYPE_MUSIC) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java
index ac51b6ea1..30c33f61c 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java
@@ -19632,7 +19632,7 @@ private void drawCaptionLayout(Canvas canvas, MessageObject.TextLayoutBlocks cap
buttonX -= AndroidUtilities.dp(10);
}
commentButtonRect.set(
- buttonX - AndroidUtilities.dp((currentMessageObject == null || !currentMessageObject.isOut()) && !drawPinnedBottom && currentPosition == null && (currentMessageObject == null || currentMessageObject.type != MessageObject.TYPE_POLL || pollInstantViewTouchesBottom) ? 6 : 0),
+ buttonX - AndroidUtilities.dp((currentMessageObject == null || !currentMessageObject.isOutOwner()) && !drawPinnedBottom && currentPosition == null && (currentMessageObject == null || currentMessageObject.type != MessageObject.TYPE_POLL || pollInstantViewTouchesBottom) ? 6 : 0),
(int) buttonY,
endX - AndroidUtilities.dp(14),
layoutHeight - AndroidUtilities.dp(h) + 1
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java
index e231098cc..94ba25eff 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java
@@ -3177,7 +3177,7 @@ public void didPressImage(ChatMessageCell cell, float x, float y) {
}
}
try {
- AndroidUtilities.openForView(message, getParentActivity(), null);
+ AndroidUtilities.openForView(message, getParentActivity(), null, false);
} catch (Exception e) {
alertUserOpenError(message);
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java
index 306ed5561..f86021428 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java
@@ -313,6 +313,7 @@ public boolean dispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event);
}
};
+ starsBalanceEditTextContainer.setVisibility(GONE);
starsBalanceEditTextContainer.setText(getString(R.string.BotStarsWithdrawPlaceholder));
starsBalanceEditTextContainer.setLeftPadding(dp(14 + 22));
starsBalanceEditText = new EditTextBoldCursor(context) {
@@ -691,13 +692,14 @@ private void setStarsBalance(long crypto_amount, int blockedUntil) {
starsBalance = crypto_amount;
starsBalanceTitle.setText(ssb);
starsBalanceSubtitle.setText("≈" + BillingController.getInstance().formatCurrency(amount, "USD"));
+ starsBalanceEditTextContainer.setVisibility(crypto_amount > 0 ? VISIBLE : GONE);
if (starsBalanceEditTextAll) {
starsBalanceEditTextIgnore = true;
starsBalanceEditText.setText(Long.toString(starsBalanceEditTextValue = crypto_amount));
starsBalanceEditText.setSelection(starsBalanceEditText.getText().length());
starsBalanceEditTextIgnore = false;
- balanceButton.setEnabled(starsBalanceEditTextValue > 0);
+ starsBalanceButton.setEnabled(starsBalanceEditTextValue > 0);
}
starsBalanceBlockedUntil = blockedUntil;
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java
index 6a5fc6dfc..e47fe48f2 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java
@@ -1174,8 +1174,10 @@ public long findMinValue(int startXIndex, int endXIndex) {
return minValue;
}
- public void setData(T chartData) {
+ public boolean setData(T chartData) {
+ boolean updated = false;
if (this.chartData != chartData) {
+ updated = true;
invalidate();
lines.clear();
if (chartData != null && chartData.lines != null) {
@@ -1235,6 +1237,7 @@ public void setData(T chartData) {
alphaAnimator.cancel();
}
}
+ return updated;
}
protected float getMinDistance() {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java
index aeae132b7..669b47984 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java
@@ -233,6 +233,12 @@ public boolean move(int x, int y, int pointer) {
return true;
}
+ public void set(float start, float end) {
+ pickerStart = start;
+ pickerEnd = end;
+ view.onPickerDataChanged();
+ }
+
public boolean uncapture(MotionEvent event, int pointerIndex) {
if (pointerIndex == 0) {
if (tryMoveTo) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java
index 3976f658c..718a5e02b 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java
@@ -312,13 +312,14 @@ void drawBottomSignature(Canvas canvas) {
@Override
- public void setData(StackLinearChartData chartData) {
- super.setData(chartData);
+ public boolean setData(StackLinearChartData chartData) {
+ boolean u = super.setData(chartData);
if (chartData != null) {
values = new float[chartData.lines.size()];
darawingValuesPercentage = new float[chartData.lines.size()];
onPickerDataChanged(false, true, false);
}
+ return u;
}
@Override
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
index 7fa6e8e1f..cb68f283d 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
@@ -938,6 +938,7 @@ public int getColor(int key) {
private boolean premiumInvoiceBot;
private boolean showScrollToMessageError;
private int startLoadFromMessageId;
+ private int startReplyTo;
private int startLoadFromDate;
private int startLoadFromMessageIdSaved;
private int startLoadFromMessageOffset = Integer.MAX_VALUE;
@@ -2574,6 +2575,7 @@ public boolean onFragmentCreate() {
textToSet = arguments.getString("start_text");
premiumInvoiceBot = arguments.getBoolean("premium_bot", false);
startLoadFromMessageId = arguments.getInt("message_id", 0);
+ startReplyTo = arguments.getInt("reply_to", 0);
startLoadFromDate = arguments.getInt("start_from_date", 0);
startFromVideoTimestamp = arguments.getInt("video_timestamp", -1);
threadUnreadMessagesCount = arguments.getInt("unread_count", 0);
@@ -20363,6 +20365,13 @@ public void didReceivedNotification(int id, int account, final Object... args) {
if (chatMode == MODE_SEARCH) {
updateSearchUpDownButtonVisibility(true);
}
+ if (startReplyTo != 0) {
+ MessageObject msg = messagesDict[0].get(startReplyTo);
+ if (msg != null) {
+ showFieldPanelForReply(msg);
+ startReplyTo = 0;
+ }
+ }
} else if (id == NotificationCenter.invalidateMotionBackground) {
if (chatListView != null) {
chatListView.invalidateViews();
@@ -37431,7 +37440,7 @@ public void didPressImage(ChatMessageCell cell, float x, float y) {
}
if (!handled) {
try {
- AndroidUtilities.openForView(message, getParentActivity(), themeDelegate);
+ AndroidUtilities.openForView(message, getParentActivity(), themeDelegate, false);
} catch (Exception e) {
FileLog.e(e);
alertUserOpenError(message);
@@ -40203,7 +40212,22 @@ public void didLongPressLink(ChatMessageCell cell, MessageObject messageObject,
dialog.setItemOptions(options);
if (span instanceof URLSpanReplacement) {
- SpannableString s = new SpannableString(((URLSpanReplacement) span).getURL());
+ String formattedUrl = ((URLSpanReplacement) span).getURL();
+ try {
+ try {
+ Uri uri = Uri.parse(formattedUrl);
+ formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED));
+ } catch (Exception e) {
+ FileLog.e(e, false);
+ }
+ formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8");
+ } catch (Exception e) {
+ FileLog.e(e);
+ }
+ if (formattedUrl.length() > 204) {
+ formattedUrl = formattedUrl.substring(0, 204) + "…";
+ }
+ SpannableString s = new SpannableString(formattedUrl);
s.setSpan(span, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
dialog.setScrim(cell, span, s);
} else {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java
index cc7fa843f..38d05ef37 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java
@@ -402,8 +402,10 @@ private void resizeInternal(int width, int height) {
public void kill() {
if (!alive) {
+ FileLog.d("ThanosEffect: kill failed, already dead");
return;
}
+ FileLog.d("ThanosEffect: kill");
try {
Handler handler = getHandler();
if (handler != null) {
@@ -414,8 +416,10 @@ public void kill() {
private void killInternal() {
if (!alive) {
+ FileLog.d("ThanosEffect: killInternal failed, already dead");
return;
}
+ FileLog.d("ThanosEffect: killInternal");
alive = false;
for (int i = 0; i < pendingAnimations.size(); ++i) {
Animation animation = pendingAnimations.get(i);
@@ -468,11 +472,13 @@ private void init() {
eglDisplay = egl.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
if (eglDisplay == egl.EGL_NO_DISPLAY) {
+ FileLog.e("ThanosEffect: eglDisplay == egl.EGL_NO_DISPLAY");
killInternal();
return;
}
int[] version = new int[2];
if (!egl.eglInitialize(eglDisplay, version)) {
+ FileLog.e("ThanosEffect: failed eglInitialize");
killInternal();
return;
}
@@ -488,6 +494,7 @@ private void init() {
EGLConfig[] eglConfigs = new EGLConfig[1];
int[] numConfigs = new int[1];
if (!egl.eglChooseConfig(eglDisplay, configAttributes, eglConfigs, 1, numConfigs)) {
+ FileLog.e("ThanosEffect: failed eglChooseConfig");
kill();
return;
}
@@ -499,17 +506,20 @@ private void init() {
};
eglContext = egl.eglCreateContext(eglDisplay, eglConfig, egl.EGL_NO_CONTEXT, contextAttributes);
if (eglContext == null) {
+ FileLog.e("ThanosEffect: eglContext == null");
killInternal();
return;
}
eglSurface = egl.eglCreateWindowSurface(eglDisplay, eglConfig, surfaceTexture, null);
if (eglSurface == null) {
+ FileLog.e("ThanosEffect: eglSurface == null");
killInternal();
return;
}
if (!egl.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext)) {
+ FileLog.e("ThanosEffect: failed eglMakeCurrent");
killInternal();
return;
}
@@ -517,6 +527,7 @@ private void init() {
int vertexShader = GLES31.glCreateShader(GLES31.GL_VERTEX_SHADER);
int fragmentShader = GLES31.glCreateShader(GLES31.GL_FRAGMENT_SHADER);
if (vertexShader == 0 || fragmentShader == 0) {
+ FileLog.e("ThanosEffect: vertexShader == 0 || fragmentShader == 0");
killInternal();
return;
}
@@ -541,6 +552,7 @@ private void init() {
}
drawProgram = GLES31.glCreateProgram();
if (drawProgram == 0) {
+ FileLog.e("ThanosEffect: drawProgram == 0");
killInternal();
return;
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java
index f4c9c37e8..235024806 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java
@@ -2017,6 +2017,7 @@ public interface PageBlocksAdapter {
private final static int gallery_menu_translate = 91;
private final static int gallery_menu_paint = 20;
+ private final static int gallery_menu_reply = 23;
private static DecelerateInterpolator decelerateInterpolator;
private static Paint progressPaint;
@@ -4886,7 +4887,7 @@ public void onItemClick(int id) {
((LaunchActivity) parentActivity).presentFragment(mediaActivity, false, true);
}
}
- } else if (id == gallery_menu_showinchat) {
+ } else if (id == gallery_menu_showinchat || id == gallery_menu_reply) {
if (currentMessageObject == null) {
return;
}
@@ -4908,6 +4909,9 @@ public void onItemClick(int id) {
args.putLong("chat_id", -dialogId);
}
args.putInt("message_id", currentMessageObject.getId());
+ if (id == gallery_menu_reply) {
+ args.putInt("reply_to", currentMessageObject.getId());
+ }
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats);
if (parentActivity instanceof LaunchActivity) {
LaunchActivity launchActivity = (LaunchActivity) parentActivity;
@@ -5239,7 +5243,7 @@ public void onItemClick(int id) {
Browser.openUrl(parentActivity, MessageObject.getMedia(currentMessageObject.messageOwner).webpage.url);
closePhoto(false, false);
} else if (currentMessageObject != null) {
- if (AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider)) {
+ if (AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, currentMessageObject.isVideo() || currentMessageObject.isPhoto() || currentMessageObject.isSticker())) {
closePhoto(false, false);
} else {
showDownloadAlert();
@@ -5511,6 +5515,7 @@ public void onSpeedSelected(float speed, boolean isFinal, boolean closeMenu) {
menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, LocaleController.getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa);
menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, LocaleController.getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa);
menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, LocaleController.getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa);
+ menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, LocaleController.getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa);
menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, LocaleController.getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa);
menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, LocaleController.getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa);
//menuItem.addSubItem(gallery_menu_edit_avatar, R.drawable.photo_paint, LocaleController.getString("EditPhoto", R.string.EditPhoto)).setColors(0xfffafafa, 0xfffafafa);
@@ -9308,7 +9313,7 @@ public void onError(VideoPlayer player, Exception e) {
builder.setMessage(LocaleController.getString("CantPlayVideo", R.string.CantPlayVideo));
builder.setPositiveButton(LocaleController.getString("Open", R.string.Open), (dialog, which) -> {
try {
- AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider);
+ AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, true);
closePhoto(false, false);
} catch (Exception e1) {
FileLog.e(e1);
@@ -12477,6 +12482,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca
dateOverride = 0;
menuItem.hideSubItem(gallery_menu_showall);
menuItem.hideSubItem(gallery_menu_showinchat);
+ menuItem.hideSubItem(gallery_menu_reply);
menuItem.hideSubItem(gallery_menu_share);
menuItem.hideSubItem(gallery_menu_openin);
menuItem.hideSubItem(gallery_menu_savegif);
@@ -12623,6 +12629,17 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca
imagesByIds[0].put(messageObject.getId(), messageObject);
if (parentChatActivity == null || !parentChatActivity.isThreadChat() && parentChatActivity.getChatMode() != ChatActivity.MODE_SAVED && parentChatActivity.getChatMode() != ChatActivity.MODE_QUICK_REPLIES) {
menuItem.showSubItem(gallery_menu_showinchat);
+ boolean canWrite = true;
+ long dialogId = messageObject.getDialogId();
+ if (dialogId < 0) {
+ TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-dialogId);
+ canWrite = ChatObject.canWriteToChat(chat);
+ }
+ if (canWrite) {
+ menuItem.showSubItem(gallery_menu_reply);
+ } else {
+ menuItem.hideSubItem(gallery_menu_reply);
+ }
menuItem.showSubItem(gallery_menu_showall);
}
setItemVisible(sendItem, !noforwards, false);
@@ -12693,6 +12710,17 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca
startOffset = object.starOffset;
}
menuItem.showSubItem(gallery_menu_showinchat);
+ boolean canWrite = true;
+ long dialogId = openingObject.getDialogId();
+ if (dialogId < 0) {
+ TLRPC.Chat chat = MessagesController.getInstance(openingObject.currentAccount).getChat(-dialogId);
+ canWrite = ChatObject.canWriteToChat(chat);
+ }
+ if (canWrite) {
+ menuItem.showSubItem(gallery_menu_reply);
+ } else {
+ menuItem.hideSubItem(gallery_menu_reply);
+ }
if (openingObject.canForwardMessage() && !noforwards) {
setItemVisible(sendItem, true, false);
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java
index c58c090aa..119ef1061 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java
@@ -30,6 +30,7 @@
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.Space;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -116,7 +117,7 @@ public class BotStarsActivity extends BaseFragment implements NotificationCenter
private boolean balanceEditTextAll = true;
private long balanceEditTextValue;
private EditTextBoldCursor balanceEditText;
- private ButtonWithCounterView balanceButton;
+ private ButtonWithCounterView balanceButton, adsButton;
private ColoredImageSpan[] starRef = new ColoredImageSpan[1];
private int shakeDp = 4;
@@ -241,7 +242,7 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
- long balance = BotStarsController.getInstance(currentAccount).getBalance(bot_id);
+ long balance = BotStarsController.getInstance(currentAccount).getAvailableBalance(bot_id);
balanceEditTextValue = TextUtils.isEmpty(s) ? 0 : Long.parseLong(s.toString());
if (balanceEditTextValue > balance) {
balanceEditTextValue = balance;
@@ -274,37 +275,46 @@ public void afterTextChanged(Editable s) {
return false;
});
balanceLayout.addView(balanceEditTextContainer, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 18, 14, 18, 2));
+ balanceEditTextContainer.setVisibility(View.GONE);
- final CircularProgressDrawable circularProgressDrawable = new CircularProgressDrawable(dp(15), dpf2(2), Theme.getColor(Theme.key_featuredStickers_buttonText, getResourceProvider())) {
- @Override
- public int getIntrinsicWidth() {
- return dp(24);
- }
- @Override
- public int getIntrinsicHeight() {
- return dp(24);
- }
- };
- circularProgressDrawable.setBounds(0, 0, dp(24), dp(24));
+ LinearLayout balanceButtonsLayout = new LinearLayout(context);
+ balanceButtonsLayout.setOrientation(LinearLayout.HORIZONTAL);
balanceButton = new ButtonWithCounterView(context, getResourceProvider()) {
- @Override
- protected boolean verifyDrawable(@NonNull Drawable who) {
- return who == circularProgressDrawable || super.verifyDrawable(who);
- }
-
@Override
protected boolean subTextSplitToWords() {
return false;
}
};
balanceButton.setEnabled(MessagesController.getInstance(currentAccount).channelRevenueWithdrawalEnabled);
- circularProgressDrawable.setCallback(balanceButton);
- balanceButton.setText(getString(R.string.BotStarsButtonWithdrawAll), false);
+ balanceButton.setText(getString(R.string.BotStarsButtonWithdrawShortAll), false);
balanceButton.setOnClickListener(v -> {
withdraw();
});
- balanceLayout.addView(balanceButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.FILL_HORIZONTAL, 18, 13, 18, 0));
+
+ adsButton = new ButtonWithCounterView(context, getResourceProvider());
+ adsButton.setEnabled(true);
+ adsButton.setText(getString(R.string.MonetizationStarsAds), false);
+ adsButton.setOnClickListener(v -> {
+ if (!v.isEnabled() || adsButton.isLoading()) return;
+
+ adsButton.setLoading(true);
+ TLRPC.TL_payments_getStarsRevenueAdsAccountUrl req = new TLRPC.TL_payments_getStarsRevenueAdsAccountUrl();
+ req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id);
+ ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> {
+ if (res instanceof TLRPC.TL_payments_starsRevenueAdsAccountUrl) {
+ Browser.openUrl(context, ((TLRPC.TL_payments_starsRevenueAdsAccountUrl) res).url);
+ }
+ AndroidUtilities.runOnUIThread(() -> {
+ adsButton.setLoading(false);
+ }, 1000);
+ }));
+ });
+
+ balanceButtonsLayout.addView(balanceButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 1, Gravity.FILL));
+ balanceButtonsLayout.addView(new Space(context), LayoutHelper.createLinear(8, 48, 0, Gravity.FILL));
+ balanceButtonsLayout.addView(adsButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 1, Gravity.FILL));
+ balanceLayout.addView(balanceButtonsLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.FILL_HORIZONTAL, 18, 13, 18, 0));
listView = new UniversalRecyclerView(this, this::fillItems, this::onItemClick, this::onItemLongClick);
@@ -330,7 +340,7 @@ private void withdraw() {
Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate();
BulletinFactory.of(this).createSimpleBulletin(starDrawable, AndroidUtilities.replaceSingleTag(LocaleController.formatPluralString("BotStarsWithdrawMinLimit", (int) getMessagesController().starsRevenueWithdrawalMin), () -> {
Bulletin.hideVisible();
- long balance = BotStarsController.getInstance(currentAccount).getBalance(bot_id);
+ long balance = BotStarsController.getInstance(currentAccount).getAvailableBalance(bot_id);
if (balance < getMessagesController().starsRevenueWithdrawalMin) {
balanceEditTextAll = true;
balanceEditTextValue = balance;
@@ -407,6 +417,7 @@ private void setBalance(long crypto_amount, int blockedUntil) {
}
balanceTitle.setText(ssb);
balanceSubtitle.setText("≈" + BillingController.getInstance().formatCurrency(amount, "USD"));
+ balanceEditTextContainer.setVisibility(amount > 0 ? View.VISIBLE : View.GONE);
if (balanceEditTextAll) {
balanceEditTextIgnore = true;
balanceEditText.setText(Long.toString(balanceEditTextValue = crypto_amount));
@@ -426,7 +437,7 @@ private void setBalance(long crypto_amount, int blockedUntil) {
final int now = getConnectionsManager().getCurrentTime();
balanceButton.setEnabled(balanceEditTextValue > 0 || balanceBlockedUntil > now);
if (now < balanceBlockedUntil) {
- balanceButton.setText(getString(R.string.BotStarsButtonWithdrawUntil), true);
+ balanceButton.setText(getString(R.string.BotStarsButtonWithdrawShortUntil), true);
if (lock == null) {
lock = new SpannableStringBuilder("l");
@@ -446,7 +457,7 @@ private void setBalance(long crypto_amount, int blockedUntil) {
AndroidUtilities.runOnUIThread(this.setBalanceButtonText, 1000);
} else {
balanceButton.setSubText(null, true);
- balanceButton.setText(StarsIntroActivity.replaceStars(balanceEditTextAll ? getString(R.string.BotStarsButtonWithdrawAll) : LocaleController.formatPluralStringComma("BotStarsButtonWithdraw", (int) balanceEditTextValue, ' '), starRef), true);
+ balanceButton.setText(StarsIntroActivity.replaceStars(balanceEditTextAll ? getString(R.string.BotStarsButtonWithdrawShortAll) : LocaleController.formatPluralStringComma("BotStarsButtonWithdrawShort", (int) balanceEditTextValue, ' '), starRef), true);
}
};
@@ -492,7 +503,8 @@ private void checkStats() {
rate = stats.usd_rate;
revenueChartData = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.BotStarsChartRevenue), 2);
if (revenueChartData != null && revenueChartData.chartData != null && revenueChartData.chartData.lines != null && !revenueChartData.chartData.lines.isEmpty() && revenueChartData.chartData.lines.get(0) != null) {
- revenueChartData.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden;
+ revenueChartData.showAll = true;
+ revenueChartData.chartData.lines.get(0).colorKey = Theme.key_color_yellow;
revenueChartData.chartData.yRate = (float) (1.0 / rate / 100.0);
}
setBalance(stats.status.available_balance, stats.status.next_withdrawal_at);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java
index f813d0435..ddfd69ba3 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java
@@ -79,6 +79,11 @@ public long getBalance(long bot_id) {
return botStats == null ? 0 : botStats.status.current_balance;
}
+ public long getAvailableBalance(long bot_id) {
+ TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id);
+ return botStats == null ? 0 : botStats.status.available_balance;
+ }
+
public boolean isBalanceAvailable(long bot_id) {
return getRevenueStats(bot_id) != null;
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java
index 534a9df69..4d0e7dec9 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java
@@ -668,7 +668,7 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i
b.createSimpleBulletin(starDrawable, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show();
}
if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) {
- LaunchActivity.instance.getFireworksOverlay().start();
+ LaunchActivity.instance.getFireworksOverlay().start(true);
}
invalidateTransactions(true);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java
index e8106ecae..9abad43c6 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java
@@ -1636,7 +1636,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
}
currentW += getChildAt(i).getMeasuredWidth();
}
- setMeasuredDimension(getMeasuredWidth(), firstH + currentH + dp(16));
+ setMeasuredDimension(getMeasuredWidth(), getChildCount() == 0 ? 0 : firstH + currentH + dp(16));
}
@Override
@@ -1999,7 +1999,11 @@ public void updateData(ChartViewData viewData, boolean enterTransition) {
progressView.setVisibility(View.GONE);
}
- chartView.setData(viewData.chartData);
+ if (chartView.setData(viewData.chartData)) {
+ if (viewData.showAll) {
+ chartView.pickerDelegate.set(0f, 1f);
+ }
+ }
chartHeaderView.setUseWeekInterval(viewData.useWeekFormat);
chartView.legendSignatureView.setUseWeek(viewData.useWeekFormat);
@@ -2191,6 +2195,7 @@ public static class ChartViewData {
ChartData childChartData;
String token;
String zoomToken;
+ public boolean showAll;
final int graphType;
final String title;
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java
index 38c87082a..c384d929a 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java
@@ -2202,21 +2202,27 @@ private void startOpenAnimation() {
openCloseAnimator = ValueAnimator.ofFloat(0, 1f);
openCloseAnimator.addUpdateListener(animation -> {
progressToOpen = (float) animation.getAnimatedValue();
- containerView.checkHwAcceleration(progressToOpen);
+ if (containerView != null) {
+ containerView.checkHwAcceleration(progressToOpen);
+ }
checkNavBarColor();
if (windowView != null) {
windowView.invalidate();
}
});
locker.lock();
- containerView.enableHwAcceleration();
+ if (containerView != null) {
+ containerView.enableHwAcceleration();
+ }
openCloseAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
progressToOpen = 1f;
checkNavBarColor();
animationInProgress = false;
- containerView.disableHwAcceleration();
+ if (containerView != null) {
+ containerView.disableHwAcceleration();
+ }
if (windowView != null) {
windowView.invalidate();
}
@@ -2238,42 +2244,43 @@ public void onAnimationEnd(Animator animation) {
showViewsAfterOpening = false;
openViews();
} else if (!SharedConfig.storiesIntroShown) {
- if (storiesIntro == null) {
+ if (storiesIntro == null && containerView != null) {
storiesIntro = new StoriesIntro(containerView.getContext(), windowView);
storiesIntro.setAlpha(0f);
containerView.addView(storiesIntro);
}
-
- storiesIntro.setOnClickListener(v -> {
+ if (storiesIntro != null) {
+ storiesIntro.setOnClickListener(v -> {
+ storiesIntro.animate()
+ .alpha(0f)
+ .setDuration(150L)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ if (storiesIntro != null) {
+ storiesIntro.stopAnimation();
+ containerView.removeView(storiesIntro);
+ }
+ storiesIntro = null;
+ updatePlayingMode();
+ }
+ })
+ .start();
+ });
storiesIntro.animate()
- .alpha(0f)
+ .alpha(1f)
.setDuration(150L)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (storiesIntro != null) {
- storiesIntro.stopAnimation();
- containerView.removeView(storiesIntro);
+ storiesIntro.startAnimation(true);
}
- storiesIntro = null;
- updatePlayingMode();
}
- })
- .start();
- });
- storiesIntro.animate()
- .alpha(1f)
- .setDuration(150L)
- .setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- if (storiesIntro != null) {
- storiesIntro.startAnimation(true);
- }
- }
- }).start();
+ }).start();
+ }
SharedConfig.setStoriesIntroShown(true);
}
@@ -2314,7 +2321,9 @@ public void instantClose() {
}
transitionViewHolder.storyImage = null;
transitionViewHolder.avatarImage = null;
- containerView.disableHwAcceleration();
+ if (containerView != null) {
+ containerView.disableHwAcceleration();
+ }
locker.unlock();
if (currentPlayerScope != null) {
currentPlayerScope.invalidate();
@@ -2366,17 +2375,21 @@ private void startCloseAnimation(boolean backAnimation) {
if (openCloseAnimator == null) {
return;
}
- containerView.enableHwAcceleration();
+ if (containerView != null) {
+ containerView.enableHwAcceleration();
+ }
openCloseAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
- containerView.disableHwAcceleration();
+ if (containerView != null) {
+ containerView.disableHwAcceleration();
+ }
checkNavBarColor();
locker.unlock();
if (storiesIntro != null) {
storiesIntro.stopAnimation();
- containerView.removeView(storiesIntro);
+ AndroidUtilities.removeFromParent(storiesIntro);
storiesIntro = null;
}
if (transitionViewHolder.avatarImage != null) {
@@ -2638,7 +2651,9 @@ public void setSelfStoriesViewsOffset(float currentTranslation) {
if (peerStoriesView != null) {
peerStoriesView.invalidate();
}
- containerView.invalidate();
+ if (containerView != null) {
+ containerView.invalidate();
+ }
}
public void openViews() {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java
index 3d399fcdd..77a916886 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java
@@ -146,7 +146,7 @@ public void requestToken(String reason, Utilities.Callback2 whe
public void updateToken(String reason, String token, Utilities.Callback whenDone) {
prompt(reason, false, token, result -> {
- boolean success = true;
+ boolean success = result != null;
if (result != null) {
try {
BiometricPrompt.CryptoObject cryptoObject = result.getCryptoObject();
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java
index 41264821f..c53e40562 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java
@@ -250,9 +250,6 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta
if (backDrawable != null) {
backDrawable.setRotation(backButtonShown ? 0f : 1f, false);
}
- if (settingsItem != null) {
- settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE);
- }
if (tab.main != null) {
setMainButton(tab.main);
}
@@ -288,6 +285,9 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta
tab.props.responseTime = 0;
}
requestWebView(fragment, tab.props);
+ if (settingsItem != null) {
+ settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE);
+ }
return true;
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java
index 620f5e82c..6132a7b38 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java
@@ -249,6 +249,7 @@ public BottomSheetTabs.WebTabData saveState() {
tab.backButton = backButtonShown;
tab.main = mainButtonSettings;
tab.confirmDismiss = needCloseConfirmation;
+ tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE;
BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView();
if (webView != null) {
webViewContainer.preserveWebView();
@@ -312,6 +313,9 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta
tab.props.responseTime = 0;
}
requestWebView(fragment, tab.props);
+ if (settingsItem != null) {
+ settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE);
+ }
return true;
}
diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml
index 995267ee8..f77d3a682 100644
--- a/TMessagesProj/src/main/res/values/strings.xml
+++ b/TMessagesProj/src/main/res/values/strings.xml
@@ -9043,6 +9043,10 @@
https://telegram.org/privacy
Withdraw via Fragment
Withdraw all via Fragment
+ Withdraw all
+ Withdraw ⭐️%d
+ Withdraw ⭐️%d
+ Withdraw
Enter amount to withdraw
Withdraw ⭐️%d via Fragment
Withdraw ⭐️%d via Fragment
diff --git a/buildSrc/src/main/kotlin/Version.kt b/buildSrc/src/main/kotlin/Version.kt
index dfd7dce40..60144dd79 100644
--- a/buildSrc/src/main/kotlin/Version.kt
+++ b/buildSrc/src/main/kotlin/Version.kt
@@ -25,8 +25,8 @@ object Version {
val java = JavaVersion.VERSION_17
@JvmStatic
- val officialVersionName = "10.14.3"
+ val officialVersionName = "10.14.5"
@JvmStatic
- val isStable = false
+ val isStable = true
}