diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle
index 404088eee..4ab052f38 100644
--- a/TMessagesProj/build.gradle
+++ b/TMessagesProj/build.gradle
@@ -72,7 +72,7 @@ android {
coreLibraryDesugaringEnabled true
}
- defaultConfig.versionCode = 2751
+ defaultConfig.versionCode = Integer.parseInt(APP_VERSION_CODE)
defaultConfig {
minSdkVersion 16
diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml
index 0af50b201..058893675 100644
--- a/TMessagesProj/src/main/AndroidManifest.xml
+++ b/TMessagesProj/src/main/AndroidManifest.xml
@@ -72,6 +72,10 @@
+
+
+
+
productDetails, boolean checkedConsume) {
- if (!isReady()) {
+ if (!isReady() || activity == null) {
return;
}
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java
index 34312bf07..327ce9a7e 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java
@@ -20,8 +20,8 @@ public class BuildVars {
public static boolean USE_CLOUD_STRINGS = true;
public static boolean CHECK_UPDATES = true;
public static boolean NO_SCOPED_STORAGE = Build.VERSION.SDK_INT <= 29;
- public static int BUILD_VERSION = 2751;
- public static String BUILD_VERSION_STRING = "8.9.0";
+ public static int BUILD_VERSION = 2756;
+ public static String BUILD_VERSION_STRING = "8.9.2";
public static int APP_ID = 4;
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/IMapsProvider.java b/TMessagesProj/src/main/java/org/telegram/messenger/IMapsProvider.java
index 18d8249d9..0034510b0 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/IMapsProvider.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/IMapsProvider.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.location.Location;
+import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
@@ -62,6 +63,9 @@ public interface IMapsProvider {
void setOnDispatchTouchEventInterceptor(ITouchInterceptor touchInterceptor);
void setOnInterceptTouchEventInterceptor(ITouchInterceptor touchInterceptor);
void setOnLayoutListener(Runnable callback);
+ default GLSurfaceView getGlSurfaceView() {
+ return null;
+ }
}
interface IUISettings {
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java
index 682880ac1..b48efe52d 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java
@@ -18,6 +18,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
+import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -959,6 +960,9 @@ public class ImageLoader {
if (cacheImage.filter != null && cacheImage.filter.contains("compress")) {
cacheOptions.compressQuality = BitmapsCache.COMPRESS_QUALITY_DEFAULT;
}
+ if (cacheImage.filter != null && cacheImage.filter.contains("flbk")) {
+ cacheOptions.fallback = true;
+ }
}
if (compressed) {
lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, decompressGzip(cacheImage.finalFilePath), w, h, cacheOptions, limitFps, null, fitzModifier);
@@ -1538,7 +1542,9 @@ public class ImageLoader {
if (!lastFrame) {
canvas.scale(currentBitmap.getWidth() / w, currentBitmap.getHeight() / h, w / 2f, h / 2f);
}
- canvas.drawBitmap(currentBitmap, 0, 0, null);
+ Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ paint.setFilterBitmap(true);
+ canvas.drawBitmap(currentBitmap, 0, 0, paint);
bitmapDrawable = new BitmapDrawable(bitmap);
}
onPostExecute(bitmapDrawable);
@@ -2772,7 +2778,7 @@ public class ImageLoader {
img.secureDocument = imageLocation.secureDocument;
onlyCache = img.secureDocument.secureFile.dc_id == Integer.MIN_VALUE;
cacheFile = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), url);
- } else if (!(hasAutoplayFilter(filter) || isAnimatedAvatar(filter)) && (cacheType != 0 || size <= 0 || imageLocation.path != null || isEncrypted)) {
+ } else if (!(AUTOPLAY_FILTER.equals(filter) || isAnimatedAvatar(filter)) && (cacheType != 0 || size <= 0 || imageLocation.path != null || isEncrypted)) {
cacheFile = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), url);
if (cacheFile.exists()) {
cacheFileExists = true;
@@ -2847,7 +2853,9 @@ public class ImageLoader {
if (hasAutoplayFilter(filter) || isAnimatedAvatar(filter)) {
img.imageType = FileLoader.IMAGE_TYPE_ANIMATION;
img.size = fileSize;
- onlyCache = true;
+ if (AUTOPLAY_FILTER.equals(filter) || isAnimatedAvatar(filter)) {
+ onlyCache = true;
+ }
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java
index 739332266..1a6b61790 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java
@@ -635,8 +635,9 @@ public class MediaDataController extends BaseController {
if (reactionsList == null) {
return;
}
- for (int i = 0; i < reactionsList.size(); i++) {
- TLRPC.TL_availableReaction reaction = reactionsList.get(i);
+ ArrayList arrayList = new ArrayList<>(reactionsList);
+ for (int i = 0; i < arrayList.size(); i++) {
+ TLRPC.TL_availableReaction reaction = arrayList.get(i);
int size = ReactionsEffectOverlay.sizeForBigReaction();
preloadImage(ImageLocation.getForDocument(reaction.effect_animation), size + "_" + size + "_pcache");
preloadImage(ImageLocation.getForDocument(reaction.activate_animation), null);
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java
index 3a19f918b..95a8f0625 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java
@@ -5416,7 +5416,8 @@ public class MessageObject {
if (document != null) {
for (int a = 0; a < document.attributes.size(); a++) {
TLRPC.DocumentAttribute attribute = document.attributes.get(a);
- if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
+ if (attribute instanceof TLRPC.TL_documentAttributeSticker ||
+ attribute instanceof TLRPC.TL_documentAttributeCustomEmoji) {
return "video/webm".equals(document.mime_type);
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
index 1c8cd927e..eba58634d 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java
@@ -13396,17 +13396,16 @@ public class MessagesController extends BaseController implements NotificationCe
if (value == null) {
value = getMessagesStorage().getDialogReadMax(false, dialogId);
}
- if (update.max_id > value || update.still_unread_count != 0) {
- if (markAsReadMessagesInbox == null) {
- markAsReadMessagesInbox = new LongSparseIntArray();
- }
- if (stillUnreadMessagesCount == null) {
- stillUnreadMessagesCount = new LongSparseIntArray();
- }
- markAsReadMessagesInbox.put(dialogId, update.max_id);
- stillUnreadMessagesCount.put(dialogId, update.still_unread_count);
- dialogs_read_inbox_max.put(dialogId, Math.max(value, update.max_id));
+
+ if (markAsReadMessagesInbox == null) {
+ markAsReadMessagesInbox = new LongSparseIntArray();
}
+ if (stillUnreadMessagesCount == null) {
+ stillUnreadMessagesCount = new LongSparseIntArray();
+ }
+ markAsReadMessagesInbox.put(dialogId, update.max_id);
+ stillUnreadMessagesCount.put(dialogId, update.still_unread_count);
+ dialogs_read_inbox_max.put(dialogId, Math.max(value, update.max_id));
} else if (baseUpdate instanceof TLRPC.TL_updateReadChannelOutbox) {
TLRPC.TL_updateReadChannelOutbox update = (TLRPC.TL_updateReadChannelOutbox) baseUpdate;
if (BuildVars.LOGS_ENABLED) {
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java
index efe42924f..89f78da6f 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java
@@ -2213,7 +2213,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state5 != null) {
state5.dispose();
}
@@ -3049,7 +3051,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -3789,7 +3793,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -4357,7 +4363,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -4641,7 +4649,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -4680,7 +4690,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -4718,7 +4730,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -4758,7 +4772,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -4794,7 +4810,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -5073,7 +5091,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -5729,24 +5749,32 @@ public class MessagesStorage extends BaseController {
}
cursor.dispose();
} else {
- if (!isEmpty(stillUnreadMessagesCount)) {
- for (int b = 0; b < stillUnreadMessagesCount.size(); b++) {
- long key = stillUnreadMessagesCount.keyAt(b);
- int unread = stillUnreadMessagesCount.get(key);
- dialogsToUpdate.put(key, unread);
-
- }
- }
if (!isEmpty(inbox)) {
for (int b = 0; b < inbox.size(); b++) {
long key = inbox.keyAt(b);
int messageId = inbox.get(key);
- if (dialogsToUpdate.get(key, -1) < 0) {
+ boolean canCountByMessageId = true;
+
+ if (stillUnreadMessagesCount != null && stillUnreadMessagesCount.get(key, -1) != -1) {
+ SQLiteCursor checkHolesCursor = database.queryFinalized(String.format(Locale.US, "SELECT start, end FROM messages_holes WHERE uid = %d AND end > %d", key, messageId));
+ while (checkHolesCursor.next()) {
+ canCountByMessageId = false;
+ }
+ checkHolesCursor.dispose();
+ }
+
+ if (canCountByMessageId) {
SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT COUNT(mid) FROM messages_v2 WHERE uid = %d AND mid > %d AND read_state IN(0,2) AND out = 0", key, messageId));
if (cursor.next()) {
- dialogsToUpdate.put(key, cursor.intValue(0));
+ int unread = cursor.intValue(0);
+ dialogsToUpdate.put(key, unread);
}
cursor.dispose();
+ } else {
+ int unread = stillUnreadMessagesCount.get(key);
+ if (unread > 0) {
+ dialogsToUpdate.put(key, unread);
+ }
}
SQLitePreparedStatement state = database.executeFast("UPDATE dialogs SET inbox_max = max((SELECT inbox_max FROM dialogs WHERE did = ?), ?) WHERE did = ?");
@@ -5994,7 +6022,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -6032,7 +6062,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -6514,7 +6546,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -6950,7 +6984,9 @@ public class MessagesStorage extends BaseController {
if (cursor != null) {
cursor.dispose();
}
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
});
}
@@ -6984,7 +7020,9 @@ public class MessagesStorage extends BaseController {
if (state != null) {
state.dispose();
}
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
});
}
@@ -7078,7 +7116,9 @@ public class MessagesStorage extends BaseController {
if (state2 != null) {
state2.dispose();
}
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
});
}
@@ -9219,7 +9259,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
}
@@ -9292,7 +9334,9 @@ public class MessagesStorage extends BaseController {
state.dispose();
}
if (transaction) {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
}
}
@@ -9469,7 +9513,9 @@ public class MessagesStorage extends BaseController {
if (state2 != null) {
state2.dispose();
}
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
});
}
@@ -9657,7 +9703,9 @@ public class MessagesStorage extends BaseController {
FileLog.e(e);
} finally {
if (inTransaction) {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
if (state != null) {
state.dispose();
@@ -9803,7 +9851,9 @@ public class MessagesStorage extends BaseController {
FileLog.e(e);
} finally {
if (databaseInTransaction) {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
if (state != null) {
state.dispose();
@@ -10500,7 +10550,9 @@ public class MessagesStorage extends BaseController {
FileLog.e(e);
} finally {
if (databaseInTransaction) {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
}
if (state_messages != null) {
state_messages.dispose();
@@ -10854,7 +10906,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -11326,7 +11380,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -11486,7 +11542,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -12029,7 +12087,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
@@ -12393,7 +12453,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state_messages != null) {
state_messages.dispose();
}
@@ -13056,7 +13118,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (cursor != null) {
cursor.dispose();
}
@@ -13163,7 +13227,9 @@ public class MessagesStorage extends BaseController {
} catch (Exception e) {
FileLog.e(e);
} finally {
- database.commitTransaction();
+ if (database != null) {
+ database.commitTransaction();
+ }
if (state != null) {
state.dispose();
}
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java
index e0bbb14c6..d99835295 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java
@@ -6356,8 +6356,8 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
cursor.moveToFirst();
len = cursor.getLong(sizeIndex);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
+ } catch (Exception e) {
+ FileLog.e(e);
}
}
if (!FileLoader.checkUploadFileSize(accountInstance.getCurrentAccount(), len)) {
@@ -6836,7 +6836,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
precachedKey[0] = getKeyForPhotoSize(accountInstance, photoSizeThumb, precahcedThumb, true, true);
}
TLRPC.InputPeer sendToPeer = !DialogObject.isEncryptedDialog(dialogId) ? accountInstance.getMessagesController().getInputPeer(dialogId) : null;
- if (sendToPeer.user_id != 0 && accountInstance.getMessagesController().getUserFull(sendToPeer.user_id) != null &&
+ if (sendToPeer != null && sendToPeer.user_id != 0 && accountInstance.getMessagesController().getUserFull(sendToPeer.user_id) != null &&
accountInstance.getMessagesController().getUserFull(sendToPeer.user_id).voice_messages_forbidden && document != null) {
if (MessageObject.isVoiceDocument(finalDocument)) {
diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BitmapsCache.java b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BitmapsCache.java
index 70511d97e..b8ca2f6d4 100644
--- a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BitmapsCache.java
+++ b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BitmapsCache.java
@@ -2,6 +2,7 @@ package org.telegram.messenger.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.os.Build;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.BuildVars;
@@ -128,7 +129,11 @@ public class BitmapsCache {
int finalFramePosition = framePosition;
RandomAccessFile finalRandomAccessFile1 = randomAccessFile;
bitmapCompressExecutor.execute(() -> {
- bitmap[finalIndex].compress(Bitmap.CompressFormat.WEBP, compressQuality, byteArrayOutputStream[finalIndex]);
+ Bitmap.CompressFormat format = Bitmap.CompressFormat.WEBP;
+ if (Build.VERSION.SDK_INT <= 26) {
+ format = Bitmap.CompressFormat.PNG;
+ }
+ bitmap[finalIndex].compress(format, compressQuality, byteArrayOutputStream[finalIndex]);
int size = byteArrayOutputStream[finalIndex].count;
try {
@@ -266,6 +271,8 @@ public class BitmapsCache {
source.getFirstFrame(bitmap);
return FRAME_RESULT_OK;
} else if (frameOffsets.isEmpty()) {
+ randomAccessFile.close();
+ randomAccessFile = null;
return FRAME_RESULT_NO_FRAME;
}
} else {
@@ -291,7 +298,7 @@ public class BitmapsCache {
return FRAME_RESULT_OK;
} catch (FileNotFoundException e) {
- } catch (IOException e) {
+ } catch (Exception e) {
FileLog.e(e);
}
@@ -415,5 +422,6 @@ public class BitmapsCache {
public static class CacheOptions {
public int compressQuality = 100;
+ public boolean fallback = false;
}
}
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 f18509549..7dbece69c 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java
@@ -5930,6 +5930,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
additionHeight -= AndroidUtilities.dp(17);
} else if (messageObject.isAnyKindOfSticker()) {
+
drawBackground = false;
boolean isWebpSticker = messageObject.type == MessageObject.TYPE_STICKER;
TLRPC.Document stickerDocument = messageObject.getDocument();
@@ -5951,6 +5952,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
if ((messageObject.isAnimatedSticker() || messageObject.isVideoSticker()) && photoWidth == 0 && photoHeight == 0) {
photoWidth = photoHeight = 512;
}
+ if (messageObject.isAnimatedAnimatedEmoji()) {
+ photoWidth = Math.max(512, photoWidth);
+ photoHeight = Math.max(512, photoHeight);
+ }
float maxHeight;
int maxWidth;
if (AndroidUtilities.isTablet()) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/StickerSetCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/StickerSetCell.java
index 0e6bae2b9..b9e4ab864 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/StickerSetCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/StickerSetCell.java
@@ -89,26 +89,6 @@ public class StickerSetCell extends FrameLayout {
super(context);
this.option = option;
- textView = new TextView(context);
- textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
- textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
- textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
- textView.setLines(1);
- textView.setMaxLines(1);
- textView.setSingleLine(true);
- textView.setEllipsize(TextUtils.TruncateAt.END);
- textView.setGravity(LayoutHelper.getAbsoluteGravityStart());
- addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START, 71, 9, 46, 0));
-
- valueTextView = new TextView(context);
- valueTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2));
- valueTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
- valueTextView.setLines(1);
- valueTextView.setMaxLines(1);
- valueTextView.setSingleLine(true);
- valueTextView.setGravity(LayoutHelper.getAbsoluteGravityStart());
- addView(valueTextView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START, 71, 32, 46, 0));
-
imageView = new BackupImageView(context);
imageView.setAspectFit(true);
imageView.setLayerNum(1);
@@ -202,6 +182,26 @@ public class StickerSetCell extends FrameLayout {
}
});
+ textView = new TextView(context);
+ textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
+ textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
+ textView.setLines(1);
+ textView.setMaxLines(1);
+ textView.setSingleLine(true);
+ textView.setEllipsize(TextUtils.TruncateAt.END);
+ textView.setGravity(LayoutHelper.getAbsoluteGravityStart());
+ addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START, 71, 9, 70, 0));
+
+ valueTextView = new TextView(context);
+ valueTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2));
+ valueTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
+ valueTextView.setLines(1);
+ valueTextView.setMaxLines(1);
+ valueTextView.setSingleLine(true);
+ valueTextView.setGravity(LayoutHelper.getAbsoluteGravityStart());
+ addView(valueTextView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START, 71, 32, 70, 0));
+
updateButtonState(BUTTON_STATE_EMPTY, false);
}
@@ -528,6 +528,18 @@ public class StickerSetCell extends FrameLayout {
}
}
+ public void updateRightMargin() {
+ sideButtons.measure(MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(58), MeasureSpec.EXACTLY));
+ final int margin = sideButtons.getMeasuredWidth();
+ if (LocaleController.isRTL) {
+ ((MarginLayoutParams) textView.getLayoutParams()).leftMargin = margin;
+ ((MarginLayoutParams) valueTextView.getLayoutParams()).leftMargin = margin;
+ } else {
+ ((MarginLayoutParams) textView.getLayoutParams()).rightMargin = margin;
+ ((MarginLayoutParams) valueTextView.getLayoutParams()).rightMargin = margin;
+ }
+ }
+
public static final int BUTTON_STATE_EMPTY = 0;
public static final int BUTTON_STATE_LOCKED = 1;
public static final int BUTTON_STATE_LOCKED_RESTORE = 2;
@@ -574,6 +586,7 @@ public class StickerSetCell extends FrameLayout {
premiumButtonView.setVisibility(state == BUTTON_STATE_LOCKED || state == BUTTON_STATE_LOCKED_RESTORE ? View.VISIBLE : View.GONE);
addButtonView.setVisibility(state == BUTTON_STATE_ADD ? View.VISIBLE : View.GONE);
removeButtonView.setVisibility(state == BUTTON_STATE_REMOVE ? View.VISIBLE : View.GONE);
+ updateRightMargin();
}
});
stateAnimator.setDuration(250);
@@ -592,6 +605,7 @@ public class StickerSetCell extends FrameLayout {
removeButtonView.setScaleX(state == BUTTON_STATE_REMOVE ? 1 : .6f);
removeButtonView.setScaleY(state == BUTTON_STATE_REMOVE ? 1 : .6f);
removeButtonView.setVisibility(state == BUTTON_STATE_REMOVE ? View.VISIBLE : View.GONE);
+ updateRightMargin();
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
index 37b16497d..0c1baeae4 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
@@ -11873,6 +11873,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
boolean allowPlayEffect = ((messageObject.messageOwner.media != null && !messageObject.messageOwner.media.nopremium) || (messageObject.isAnimatedEmojiStickerSingle() && dialog_id > 0));
if ((chatListItemAnimator == null || !chatListItemAnimator.isRunning()) && (!messageObject.isOutOwner() || messageObject.forcePlayEffect) && allowPlayEffect && !messageObject.messageOwner.premiumEffectWasPlayed && (messageObject.isPremiumSticker() || messageObject.isAnimatedEmojiStickerSingle()) && emojiAnimationsOverlay.isIdle() && emojiAnimationsOverlay.checkPosition(messageCell, chatListViewPaddingTop, chatListView.getMeasuredHeight() - blurredViewBottomOffset)) {
emojiAnimationsOverlay.onTapItem(messageCell, ChatActivity.this, false);
+ } else if (messageObject.isAnimatedAnimatedEmoji()) {
+ emojiAnimationsOverlay.preloadAnimation(messageCell);
}
} else if (view instanceof ChatActionCell) {
ChatActionCell cell = (ChatActionCell) view;
@@ -22599,7 +22601,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
- public void restartSticker(ChatMessageCell cell) {
+ public void setupStickerVibrationAndSound(ChatMessageCell cell) {
MessageObject message = cell.getMessageObject();
TLRPC.Document document = message.getDocument();
boolean isEmoji;
@@ -22609,6 +22611,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (drawable != null) {
if (isEmoji) {
String emoji = message.getStickerEmoji();
+ emoji = EmojiAnimationsOverlay.unwrapEmoji(emoji);
if (EmojiData.isHeartEmoji(emoji)) {
HashMap pattern = new HashMap<>();
pattern.put(1, 1);
@@ -22628,6 +22631,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
pattern.put(36, 0);
drawable.setVibrationPattern(pattern);
}
+ if (message.isAnimatedAnimatedEmoji()) {
+ drawable.resetVibrationAfterRestart(true);
+ }
if (!drawable.isRunning() && emoji != null) {
MessagesController.EmojiSound sound = getMessagesController().emojiSounds.get(emoji.replace("\uFE0F", ""));
if (sound != null) {
@@ -22635,6 +22641,20 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
}
+ }
+ }
+ }
+
+ public void restartSticker(ChatMessageCell cell) {
+ MessageObject message = cell.getMessageObject();
+ TLRPC.Document document = message.getDocument();
+ if (!message.isAnimatedAnimatedEmoji()) {
+ setupStickerVibrationAndSound(cell);
+ }
+ if ((message.isAnimatedEmoji()) || MessageObject.isAnimatedStickerDocument(document, currentEncryptedChat == null || message.isOut()) && !SharedConfig.loopStickers) {
+ ImageReceiver imageReceiver = cell.getPhotoImage();
+ RLottieDrawable drawable = imageReceiver.getLottieAnimation();
+ if (drawable != null) {
drawable.restart();
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiDrawable.java
index 515697a6a..77971040f 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiDrawable.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiDrawable.java
@@ -426,11 +426,13 @@ public class AnimatedEmojiDrawable extends Drawable {
if ("video/webm".equals(document.mime_type)) {
mediaLocation = ImageLocation.getForDocument(document);
mediaFilter = filter + "_" + ImageLoader.AUTOPLAY_FILTER;
+ SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(document.thumbs, Theme.key_windowBackgroundWhiteGrayIcon, 0.2f);
+ thumbDrawable = svgThumb;
} else {
String probableCacheKey = (cacheType != 0 ? cacheType + "_" : "") + documentId + "@" + filter;
if (cacheType == CACHE_TYPE_KEYBOARD || !ImageLoader.getInstance().hasLottieMemCache(probableCacheKey)) {
SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(document.thumbs, Theme.key_windowBackgroundWhiteGrayIcon, 0.2f);
- if (svgThumb != null) {
+ if (svgThumb != null && MessageObject.isAnimatedStickerDocument(document, false)) {
svgThumb.overrideWidthAndHeight(512, 512);
}
thumbDrawable = svgThumb;
@@ -443,10 +445,8 @@ public class AnimatedEmojiDrawable extends Drawable {
}
if (cacheType == STANDARD_LOTTIE_FRAME) {
imageReceiver.setImage(null, null, mediaLocation, mediaFilter, null, null, thumbDrawable, document.size, null, document, 1);
-
} else {
imageReceiver.setImage(mediaLocation, mediaFilter, ImageLocation.getForDocument(thumb, document), sizedp + "_" + sizedp, null, null, thumbDrawable, document.size, null, document, 1);
-
}
if (cacheType == CACHE_TYPE_ALERT_PREVIEW) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java
index 4be0e4c72..e3c487950 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java
@@ -34,6 +34,7 @@ import org.telegram.messenger.ImageLocation;
import org.telegram.messenger.ImageReceiver;
import org.telegram.messenger.utils.BitmapsCache;
import org.telegram.tgnet.TLRPC;
+import org.telegram.ui.ActionBar.Theme;
import java.io.File;
import java.util.ArrayList;
@@ -754,7 +755,19 @@ public class AnimatedFileDrawable extends BitmapDrawable implements Animatable,
}
if (renderingBitmap != null) {
- if (applyTransformation) {
+ float scaleX = this.scaleX;
+ float scaleY = this.scaleY;
+ if (drawInBackground) {
+ int bitmapW = renderingBitmap.getWidth();
+ int bitmapH = renderingBitmap.getHeight();
+ if (metaData[2] == 90 || metaData[2] == 270) {
+ int temp = bitmapW;
+ bitmapW = bitmapH;
+ bitmapH = temp;
+ }
+ scaleX = rect.width() / bitmapW;
+ scaleY = rect.height() / bitmapH;
+ } else if (applyTransformation) {
int bitmapW = renderingBitmap.getWidth();
int bitmapH = renderingBitmap.getHeight();
if (metaData[2] == 90 || metaData[2] == 270) {
@@ -763,8 +776,8 @@ public class AnimatedFileDrawable extends BitmapDrawable implements Animatable,
bitmapH = temp;
}
rect.set(getBounds());
- scaleX = rect.width() / bitmapW;
- scaleY = rect.height() / bitmapH;
+ this.scaleX = scaleX = rect.width() / bitmapW;
+ this.scaleY = scaleY = rect.height() / bitmapH;
applyTransformation = false;
}
if (hasRoundRadius()) {
@@ -981,7 +994,7 @@ public class AnimatedFileDrawable extends BitmapDrawable implements Animatable,
generatingCacheBitmap = Bitmap.createBitmap(metaData[0], metaData[1], Bitmap.Config.ARGB_8888);
}
getVideoFrame(cacheGenerateNativePtr, generatingCacheBitmap, metaData, generatingCacheBitmap.getRowBytes(), false, startTime, endTime);
- if (cacheGenerateTimestamp != 0 && metaData[3] == 0) {
+ if (cacheGenerateTimestamp != 0 && metaData[3] == 0 || cacheGenerateTimestamp > metaData[3]) {
return 0;
}
bitmap.eraseColor(Color.TRANSPARENT);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BotCommandsMenuView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BotCommandsMenuView.java
index 93b5888fb..f7b940e8a 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BotCommandsMenuView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BotCommandsMenuView.java
@@ -278,11 +278,7 @@ public class BotCommandsMenuView extends View {
TLRPC.TL_botCommand botCommand = info.commands.get(a);
if (botCommand != null && botCommand.command != null) {
newResult.add("/" + botCommand.command);
- if (botCommand.description != null && botCommand.description.length() > 1) {
- newResultHelp.add(botCommand.description.substring(0, 1).toUpperCase() + botCommand.description.substring(1).toLowerCase());
- } else {
- newResultHelp.add(botCommand.description);
- }
+ newResultHelp.add(botCommand.description);
}
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java
index ad073ad25..ba6b03336 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java
@@ -4772,7 +4772,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific
}
public static boolean checkPremiumAnimatedEmoji(int currentAccount, long dialogId, BaseFragment parentFragment, FrameLayout container, CharSequence message) {
- if (message == null) {
+ if (message == null || parentFragment == null) {
return false;
}
if (container == null) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java
index d67366d94..958758913 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java
@@ -50,6 +50,7 @@ import org.telegram.ui.Components.Premium.PremiumButtonView;
import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet;
import org.telegram.ui.LaunchActivity;
import org.telegram.ui.PremiumPreviewFragment;
+import org.telegram.ui.ProfileActivity;
import java.util.ArrayList;
@@ -941,7 +942,28 @@ public class EmojiPacksAlert extends BottomSheet implements NotificationCenter.N
if (context == null) {
context = getContext();
}
- ShareAlert alert = new ShareAlert(context, null, stickersUrl, false, stickersUrl, false, resourcesProvider);
+ ShareAlert alert = new ShareAlert(context, null, stickersUrl, false, stickersUrl, false, resourcesProvider) {
+ @Override
+ protected void onSend(androidx.collection.LongSparseArray dids, int count) {
+ AndroidUtilities.runOnUIThread(() -> {
+ UndoView undoView;
+ if (fragment instanceof ChatActivity) {
+ undoView = ((ChatActivity) fragment).getUndoView();
+ } else if (fragment instanceof ProfileActivity) {
+ undoView = ((ProfileActivity) fragment).getUndoView();
+ } else {
+ undoView = null;
+ }
+ if (undoView != null) {
+ if (dids.size() == 1) {
+ undoView.showWithAction(dids.valueAt(0).id, UndoView.ACTION_FWD_MESSAGES, count);
+ } else {
+ undoView.showWithAction(0, UndoView.ACTION_FWD_MESSAGES, count, dids.size(), null, null);
+ }
+ }
+ }, 100);
+ }
+ };
if (fragment != null) {
fragment.showDialog(alert);
} else {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java
index da8cc0dcd..5cc4ce211 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java
@@ -230,10 +230,12 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific
if (typeTabs != null) {
AndroidUtilities.updateViewVisibilityAnimated(typeTabs, currentTabs.size() > 1, 1, animated);
}
- pager.setAdapter(null);
- pager.setAdapter(emojiPagerAdapter);
- if (typeTabs != null) {
- typeTabs.setViewPager(pager);
+ if (pager != null) {
+ pager.setAdapter(null);
+ pager.setAdapter(emojiPagerAdapter);
+ if (typeTabs != null) {
+ typeTabs.setViewPager(pager);
+ }
}
}
@@ -2821,8 +2823,10 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific
drawable.update(time);
imageView.backgroundThreadDrawHolder = drawable.getImageReceiver().setDrawInBackgroundThread(imageView.backgroundThreadDrawHolder);
imageView.backgroundThreadDrawHolder.time = time;
+ imageView.backgroundThreadDrawHolder.overrideAlpha = 1f;
drawable.setAlpha(255);
- AndroidUtilities.rectTmp2.set(imageView.getLeft() + imageView.getPaddingLeft() - startOffset, 0, imageView.getRight() - imageView.getPaddingRight() - startOffset, imageView.getMeasuredHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom());
+ int topOffset = (int) (imageView.getHeight() * .03f);
+ AndroidUtilities.rectTmp2.set(imageView.getLeft() + imageView.getPaddingLeft() - startOffset, topOffset, imageView.getRight() - imageView.getPaddingRight() - startOffset, topOffset + imageView.getMeasuredHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom());
imageView.backgroundThreadDrawHolder.setBounds(AndroidUtilities.rectTmp2);
imageView.drawable = drawable;
imageView.imageReceiver = drawable.getImageReceiver();
@@ -2858,7 +2862,8 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific
continue;
}
- AndroidUtilities.rectTmp2.set(imageView.getLeft() + imageView.getPaddingLeft(), 0, imageView.getRight() - imageView.getPaddingRight(), imageView.getMeasuredHeight() - imageView.getPaddingBottom() - imageView.getPaddingTop());
+ int topOffset = (int) (imageView.getHeight() * .03f);
+ AndroidUtilities.rectTmp2.set(imageView.getLeft() + imageView.getPaddingLeft(), topOffset, imageView.getRight() - imageView.getPaddingRight(), topOffset + imageView.getMeasuredHeight() - imageView.getPaddingBottom() - imageView.getPaddingTop());
float alpha = 1f, scale = 1;
if (imageView.pressedProgress != 0) {
scale *= 0.8f + 0.2f * (1f - imageView.pressedProgress);
@@ -5378,7 +5383,11 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific
int previousCount2 = favouriteStickers.size();
recentStickers = MediaDataController.getInstance(currentAccount).getRecentStickers(MediaDataController.TYPE_IMAGE);
favouriteStickers = MediaDataController.getInstance(currentAccount).getRecentStickers(MediaDataController.TYPE_FAVE);
- premiumStickers = MediaDataController.getInstance(currentAccount).getRecentStickers(MediaDataController.TYPE_PREMIUM_STICKERS);
+ if (UserConfig.getInstance(currentAccount).isPremium()) {
+ premiumStickers = MediaDataController.getInstance(currentAccount).getRecentStickers(MediaDataController.TYPE_PREMIUM_STICKERS);
+ } else {
+ premiumStickers = new ArrayList<>();
+ }
for (int a = 0; a < favouriteStickers.size(); a++) {
TLRPC.Document favSticker = favouriteStickers.get(a);
for (int b = 0; b < recentStickers.size(); b++) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java
index a9983caca..fa4670717 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java
@@ -18,7 +18,9 @@ import android.graphics.drawable.Animatable;
import android.graphics.drawable.BitmapDrawable;
import android.os.Handler;
import android.os.Looper;
+import android.os.SystemClock;
import android.text.TextUtils;
+import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.View;
@@ -32,6 +34,7 @@ import org.telegram.messenger.ImageReceiver;
import org.telegram.messenger.R;
import org.telegram.messenger.Utilities;
import org.telegram.messenger.utils.BitmapsCache;
+import org.telegram.ui.ActionBar.Theme;
import java.io.File;
import java.io.FileInputStream;
@@ -63,6 +66,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
private HashMap newColorUpdates = new HashMap<>();
private volatile HashMap pendingColorUpdates = new HashMap<>();
private HashMap vibrationPattern;
+ private boolean resetVibrationAfterRestart = false;
private boolean allowVibration = true;
private WeakReference frameReadyCallback;
@@ -116,6 +120,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
protected boolean destroyAfterLoading;
protected int secondFramesCount;
protected volatile boolean setLastFrame;
+ private boolean fallbackCache;
private boolean invalidateOnProgressSet;
private boolean isInvalid;
@@ -219,7 +224,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
}
}
}
- if (nativePtr == 0 && secondNativePtr == 0 && bitmapsCache == null) {
+ if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null) {
recycleResources();
return;
}
@@ -255,6 +260,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
private boolean genCacheSend;
protected Runnable loadFrameRunnable = new Runnable() {
+ private long lastUpdate = 0;
@Override
public void run() {
if (isRecycled) {
@@ -290,26 +296,36 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
pendingReplaceColors = null;
}
try {
- long ptrToUse;
- if (isDice == 1) {
- ptrToUse = nativePtr;
- } else if (isDice == 2) {
- ptrToUse = secondNativePtr;
- if (setLastFrame) {
- currentFrame = secondFramesCount - 1;
- }
- } else {
- ptrToUse = nativePtr;
- }
int result = 0;
int framesPerUpdates = shouldLimitFps ? 2 : 1;
- if (precache && bitmapsCache != null) {
+ if (precache && bitmapsCache != null && (!fallbackCache || !generatingCache)) {
try {
result = bitmapsCache.getFrame(currentFrame / framesPerUpdates, backgroundBitmap);
} catch (Exception e) {
FileLog.e(e);
}
} else {
+ if (fallbackCache) {
+ final long now = SystemClock.elapsedRealtime();
+ if (lastUpdate > 0) {
+ framesPerUpdates = Math.max(1, Math.min(4, Math.round((now - lastUpdate) / 16f)));
+ if (currentFrame + framesPerUpdates > (customEndFrame >= 0 ? customEndFrame : metaData[0])) {
+ framesPerUpdates = (customEndFrame >= 0 ? customEndFrame : metaData[0]) - currentFrame;
+ }
+ }
+ lastUpdate = now;
+ }
+ long ptrToUse;
+ if (isDice == 1) {
+ ptrToUse = nativePtr;
+ } else if (isDice == 2) {
+ ptrToUse = secondNativePtr;
+ if (setLastFrame) {
+ currentFrame = secondFramesCount - 1;
+ }
+ } else {
+ ptrToUse = nativePtr;
+ }
result = getFrame(ptrToUse, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true);
}
if (bitmapsCache != null && bitmapsCache.needGenCache()) {
@@ -317,7 +333,9 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
genCacheSend = true;
uiHandler.post(uiRunnableGenerateCache);
}
- result = -1;
+ if (!fallbackCache) {
+ result = -1;
+ }
}
if (result == -1) {
uiHandler.post(uiRunnableNoFrame);
@@ -338,6 +356,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
if (secondNativePtr != 0) {
isDice = 2;
}
+ if (resetVibrationAfterRestart) {
+ vibrationPattern = null;
+ resetVibrationAfterRestart = false;
+ }
}
} else if (isDice == 2) {
if (currentFrame + framesPerUpdates < secondFramesCount) {
@@ -377,10 +399,18 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
} else if (autoRepeat == 1) {
currentFrame = 0;
nextFrameIsLast = false;
+ if (resetVibrationAfterRestart) {
+ vibrationPattern = null;
+ resetVibrationAfterRestart = false;
+ }
} else if (autoRepeat == 2) {
currentFrame = 0;
nextFrameIsLast = true;
autoRepeatPlayCount++;
+ if (resetVibrationAfterRestart) {
+ vibrationPattern = null;
+ resetVibrationAfterRestart = false;
+ }
} else {
nextFrameIsLast = true;
checkDispatchOnAnimationEnd();
@@ -407,6 +437,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
height = h;
shouldLimitFps = limitFps;
this.precache = cacheOptions != null;
+ this.fallbackCache = cacheOptions != null && cacheOptions.fallback;
getPaint().setFlags(Paint.FILTER_BITMAP_FLAG);
this.file = file;
@@ -421,8 +452,14 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
args.colorReplacement = colorReplacement;
args.fitzModifier = fitzModifier;
nativePtr = create(file.getAbsolutePath(), null, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier);
- destroy(nativePtr);
- nativePtr = 0;
+ if (fallbackCache) {
+ if (nativePtr == 0) {
+ file.delete();
+ }
+ } else {
+ destroy(nativePtr);
+ nativePtr = 0;
+ }
} else {
nativePtr = create(file.getAbsolutePath(), null, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier);
if (nativePtr == 0) {
@@ -453,10 +490,16 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
args.colorReplacement = colorReplacement;
args.fitzModifier = fitzModifier;
nativePtr = create(file.getAbsolutePath(), json, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier);
- if (nativePtr != 0) {
- destroy(nativePtr);
+ if (fallbackCache) {
+ if (nativePtr == 0) {
+ file.delete();
+ }
+ } else {
+ if (nativePtr != 0) {
+ destroy(nativePtr);
+ }
+ nativePtr = 0;
}
- nativePtr = 0;
} else {
nativePtr = create(file.getAbsolutePath(), json, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier);
if (nativePtr == 0) {
@@ -790,6 +833,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
vibrationPattern = pattern;
}
+ public boolean hasVibrationPattern() {
+ return vibrationPattern != null;
+ }
+
public void beginApplyLayerColors() {
applyingLayerColors = true;
}
@@ -845,7 +892,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
return false;
}
if (generatingCache) {
- return false;
+// return false;
}
if (!newColorUpdates.isEmpty()) {
pendingColorUpdates.putAll(newColorUpdates);
@@ -923,6 +970,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
invalidateSelf();
}
+ public boolean isCacheFallbacked() {
+ return fallbackCache;
+ }
+
public void setProgressMs(long ms) {
int frameNum = (int) ((Math.max(0, ms) / timeBetweenFrames) % metaData[0]);
setCurrentFrame(frameNum, true, true);
@@ -1107,6 +1158,10 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
allowVibration = allow;
}
+ public void resetVibrationAfterRestart(boolean value) {
+ resetVibrationAfterRestart = value;
+ }
+
@Override
public int getMinimumHeight() {
return height;
@@ -1216,7 +1271,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
public boolean canLoadFrames() {
if (precache) {
- return bitmapsCache != null;
+ return bitmapsCache != null || fallbackCache;
} else {
return nativePtr != 0;
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java
index 907d39bee..5eaeb9533 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SizeNotifierFrameLayout.java
@@ -280,11 +280,11 @@ public class SizeNotifierFrameLayout extends FrameLayout {
}
private void checkLayerType() {
- if (parallaxEffect == null && backgroundDrawable instanceof MotionBackgroundDrawable && SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_HIGH) {
- backgroundView.setLayerType(LAYER_TYPE_HARDWARE, null);
- } else {
- backgroundView.setLayerType(LAYER_TYPE_NONE, null);
- }
+// if (parallaxEffect == null && backgroundDrawable instanceof MotionBackgroundDrawable && SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_HIGH) {
+// backgroundView.setLayerType(LAYER_TYPE_HARDWARE, null);
+// } else {
+// backgroundView.setLayerType(LAYER_TYPE_NONE, null);
+// }
}
public Drawable getBackgroundImage() {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/StaticLayoutEx.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/StaticLayoutEx.java
index ea87796c8..aaf772f50 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/StaticLayoutEx.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/StaticLayoutEx.java
@@ -16,6 +16,7 @@ import android.text.TextDirectionHeuristic;
import android.text.TextDirectionHeuristics;
import android.text.TextPaint;
import android.text.TextUtils;
+import android.text.style.CharacterStyle;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.FileLog;
@@ -172,7 +173,7 @@ public class StaticLayoutEx {
.setAlignment(align)
.setLineSpacing(spacingAdd, spacingMult)
.setIncludePad(includePad)
- .setEllipsize(ellipsize)
+ .setEllipsize(stringBuilder.getSpans(0, stringBuilder.length(), CharacterStyle.class).length > 0 ? null : ellipsize)
.setEllipsizedWidth(ellipsisWidth)
.setMaxLines(maxLines)
.setBreakStrategy(canContainUrl ? StaticLayout.BREAK_STRATEGY_HIGH_QUALITY : StaticLayout.BREAK_STRATEGY_SIMPLE)
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java
index 1e1c17f74..a9a6c2caf 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java
@@ -49,6 +49,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.collection.LongSparseArray;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -87,6 +88,7 @@ import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet;
import org.telegram.ui.ContentPreviewViewer;
import org.telegram.ui.LaunchActivity;
import org.telegram.ui.PremiumPreviewFragment;
+import org.telegram.ui.ProfileActivity;
import java.io.File;
import java.util.ArrayList;
@@ -1004,6 +1006,27 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
}
}
}
+
+ @Override
+ protected void onSend(LongSparseArray dids, int count) {
+ AndroidUtilities.runOnUIThread(() -> {
+ UndoView undoView;
+ if (parentFragment instanceof ChatActivity) {
+ undoView = ((ChatActivity) parentFragment).getUndoView();
+ } else if (parentFragment instanceof ProfileActivity) {
+ undoView = ((ProfileActivity) parentFragment).getUndoView();
+ } else {
+ undoView = null;
+ }
+ if (undoView != null) {
+ if (dids.size() == 1) {
+ undoView.showWithAction(dids.valueAt(0).id, UndoView.ACTION_FWD_MESSAGES, count);
+ } else {
+ undoView.showWithAction(0, UndoView.ACTION_FWD_MESSAGES, count, dids.size(), null, null);
+ }
+ }
+ }, 100);
+ }
};
if (parentFragment != null) {
parentFragment.showDialog(alert);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/EmojiAnimationsOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/EmojiAnimationsOverlay.java
index 92f59f525..5f449a243 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/EmojiAnimationsOverlay.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/EmojiAnimationsOverlay.java
@@ -2,6 +2,7 @@ package org.telegram.ui;
import android.graphics.Canvas;
import android.text.TextUtils;
+import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.View;
import android.widget.FrameLayout;
@@ -12,6 +13,7 @@ import org.json.JSONObject;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.EmojiData;
import org.telegram.messenger.FileLog;
+import org.telegram.messenger.ImageLoader;
import org.telegram.messenger.ImageLocation;
import org.telegram.messenger.ImageReceiver;
import org.telegram.messenger.LocaleController;
@@ -217,7 +219,7 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
if (bestView != null) {
chatActivity.restartSticker(bestView);
- if (!EmojiData.hasEmojiSupportVibration(bestView.getMessageObject().getStickerEmoji()) && !bestView.getMessageObject().isPremiumSticker()) {
+ if (!EmojiData.hasEmojiSupportVibration(bestView.getMessageObject().getStickerEmoji()) && !bestView.getMessageObject().isPremiumSticker() && !bestView.getMessageObject().isAnimatedAnimatedEmoji()) {
bestView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
}
showAnimationForCell(bestView, animation, false, true);
@@ -308,7 +310,7 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
drawingObject.imageReceiver.draw(canvas);
}
}
- if (drawingObject.removeProgress == 1f || (drawingObject.wasPlayed && drawingObject.imageReceiver.getLottieAnimation() != null && drawingObject.imageReceiver.getLottieAnimation().getCurrentFrame() == drawingObject.imageReceiver.getLottieAnimation().getFramesCount() - 2)) {
+ if (drawingObject.removeProgress == 1f || (drawingObject.wasPlayed && drawingObject.imageReceiver.getLottieAnimation() != null && drawingObject.imageReceiver.getLottieAnimation().getCurrentFrame() >= drawingObject.imageReceiver.getLottieAnimation().getFramesCount() - 2)) {
drawingObjects.remove(i);
i--;
} else if (drawingObject.imageReceiver.getLottieAnimation() != null && drawingObject.imageReceiver.getLottieAnimation().isRunning()) {
@@ -338,7 +340,7 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
}
boolean show = showAnimationForCell(view, -1, userTapped, false);
- if (userTapped && show && !EmojiData.hasEmojiSupportVibration(view.getMessageObject().getStickerEmoji()) && !view.getMessageObject().isPremiumSticker()) {
+ if (userTapped && show && !EmojiData.hasEmojiSupportVibration(view.getMessageObject().getStickerEmoji()) && !view.getMessageObject().isPremiumSticker() && !view.getMessageObject().isAnimatedAnimatedEmoji()) {
view.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
}
if (view.getMessageObject().isPremiumSticker() || (!userTapped && view.getMessageObject().isAnimatedEmojiStickerSingle())) {
@@ -447,6 +449,45 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
return true;
}
+ public void preloadAnimation(ChatMessageCell cell) {
+// MessageObject messageObject = cell.getMessageObject();
+// if (messageObject.isPremiumSticker()) {
+// return;
+// }
+// String emoji = messageObject.getStickerEmoji();
+// if (emoji == null) {
+// emoji = messageObject.messageOwner.message;
+// }
+// emoji = unwrapEmoji(emoji);
+// if (!supportedEmoji.contains(emoji)) {
+// return;
+// }
+// ArrayList arrayList = emojiInteractionsStickersMap.get(emoji);
+// if (arrayList == null || arrayList.isEmpty()) {
+// return;
+// }
+// int size = (int) (2f * cell.getPhotoImage().getImageWidth() / AndroidUtilities.density);
+// int preloadCount = Math.min(1, arrayList.size());
+// for (int i = 0; i < preloadCount; ++i) {
+// this.preloadAnimation(arrayList.get(i), size);
+// }
+ }
+
+// private HashMap preloaded;
+// private void preloadAnimation(TLRPC.Document document, int size) {
+// if (document == null) {
+// return;
+// }
+// if (preloaded != null && preloaded.containsKey(document.id)) {
+// return;
+// }
+// if (preloaded == null) {
+// preloaded = new HashMap<>();
+// }
+// preloaded.put(document.id, true);
+// new ImageReceiver().setImage(ImageLocation.getForDocument(document), size + "_" + size + "_pcache_compress", null, "tgs", set, 1);
+// }
+
private boolean showAnimationForCell(ChatMessageCell view, int animation, boolean sendTap, boolean sendSeen) {
if (drawingObjects.size() > 12) {
return false;
@@ -517,6 +558,26 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
TLRPC.VideoSize videoSize = null;
if (isPremiumSticker) {
videoSize = messageObject.getPremiumStickerAnimation();
+ } else if (messageObject.isAnimatedAnimatedEmoji()) {
+// if (animation < 0 || animation > arrayList.size() - 1) {
+// ArrayList preloadedVariants = new ArrayList<>();
+// for (int i = 0; i < arrayList.size(); ++i) {
+// TLRPC.Document d = arrayList.get(i);
+// if (d == null) {
+// continue;
+// }
+// Boolean value = preloaded.get(d.id);
+// if (value != null && value) {
+// preloadedVariants.add(i);
+// }
+// }
+// if (preloadedVariants.isEmpty()) {
+ animation = Math.abs(random.nextInt()) % arrayList.size();
+// } else {
+// animation = preloadedVariants.get(Math.abs(random.nextInt()) % preloadedVariants.size());
+// }
+// }
+ document = arrayList.get(animation);
} else {
if (animation < 0 || animation > arrayList.size() - 1) {
animation = Math.abs(random.nextInt()) % arrayList.size();
@@ -547,7 +608,17 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
ImageLocation imageLocation = ImageLocation.getForDocument(document);
drawingObject.imageReceiver.setUniqKeyPrefix(currentIndex + "_" + drawingObject.messageId + "_");
- drawingObject.imageReceiver.setImage(imageLocation, w + "_" + w + "_pcache", null, "tgs", set, 1);
+ drawingObject.imageReceiver.setImage(imageLocation, w + "_" + w + "_pcache_compress_flbk", null, "tgs", set, 1);
+ drawingObject.imageReceiver.setDelegate(new ImageReceiver.ImageReceiverDelegate() {
+ @Override
+ public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb, boolean memCache) {}
+ @Override
+ public void onAnimationReady(ImageReceiver imageReceiver) {
+ if (sendTap && messageObject.isAnimatedAnimatedEmoji() && imageReceiver.getLottieAnimation() != null && !imageReceiver.getLottieAnimation().hasVibrationPattern()) {
+ view.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
+ }
+ }
+ });
} else {
w = (int) (1.5f * imageW / AndroidUtilities.density);
if (sameAnimationsCountDocumentId > 0) {
@@ -632,7 +703,7 @@ public class EmojiAnimationsOverlay implements NotificationCenter.NotificationCe
bulletin.show();
}
- private String unwrapEmoji(String emoji) {
+ public static String unwrapEmoji(String emoji) {
CharSequence fixedEmoji = emoji;
int length = emoji.length();
for (int a = 0; a < length; a++) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java
index f115db74d..5902c3bbb 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java
@@ -39,6 +39,8 @@ import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView;
import android.os.Build;
import android.text.TextUtils;
import android.util.TypedValue;
@@ -104,6 +106,7 @@ import org.telegram.ui.Components.RecyclerListView;
import org.telegram.ui.Components.UndoView;
import java.io.File;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -135,6 +138,7 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
private IMapsProvider.ICameraUpdate moveToBounds;
private IMapsProvider.IMapView mapView;
private IMapsProvider.ICameraUpdate forceUpdate;
+ private boolean hasScreenshot;
private float yOffset;
private IMapsProvider.ICircle proximityCircle;
@@ -2470,9 +2474,69 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
proximitySheet.dismiss();
return false;
}
+ if (onCheckGlScreenshot()) {
+ return false;
+ }
+
return super.onBackPressed();
}
+ @Override
+ public void finishFragment(boolean animated) {
+ if (onCheckGlScreenshot()) {
+ return;
+ }
+
+ super.finishFragment(animated);
+ }
+
+ private boolean onCheckGlScreenshot() {
+ if (mapView != null && mapView.getGlSurfaceView() != null && !hasScreenshot) {
+ GLSurfaceView glSurfaceView = mapView.getGlSurfaceView();
+ glSurfaceView.queueEvent(() -> {
+ if (glSurfaceView.getWidth() == 0 || glSurfaceView.getHeight() == 0) {
+ return;
+ }
+ ByteBuffer buffer = ByteBuffer.allocateDirect(glSurfaceView.getWidth() * glSurfaceView.getHeight() * 4);
+ GLES20.glReadPixels(0, 0, glSurfaceView.getWidth(), glSurfaceView.getHeight(), GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);
+ Bitmap bitmap = Bitmap.createBitmap(glSurfaceView.getWidth(), glSurfaceView.getHeight(), Bitmap.Config.ARGB_8888);
+ bitmap.copyPixelsFromBuffer(buffer);
+
+ Matrix flipVertically = new Matrix();
+ flipVertically.preScale(1, -1);
+
+ Bitmap flippedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), flipVertically, false);
+ bitmap.recycle();
+
+ AndroidUtilities.runOnUIThread(()->{
+ ImageView snapshotView = new ImageView(getContext());
+ snapshotView.setImageBitmap(flippedBitmap);
+
+ ViewGroup parent = (ViewGroup) glSurfaceView.getParent();
+ try {
+ parent.addView(snapshotView, parent.indexOfChild(glSurfaceView));
+ } catch (Exception e) {
+ FileLog.e(e);
+ }
+
+ AndroidUtilities.runOnUIThread(()->{
+ try {
+ parent.removeView(glSurfaceView);
+ } catch (Exception e) {
+ FileLog.e(e);
+ }
+
+ hasScreenshot = true;
+
+ finishFragment();
+ }, 100);
+ });
+ });
+ return true;
+ }
+ return false;
+ }
+
@Override
protected void onBecomeFullyHidden() {
if (undoView[0] != null) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java
index 2a97ac817..c685a0c7d 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java
@@ -37,6 +37,7 @@ import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.SimpleTextView;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.Cells.ChatMessageCell;
+import org.telegram.ui.Components.AnimatedEmojiDrawable;
import org.telegram.ui.Components.AnimatedEmojiSpan;
import org.telegram.ui.Components.ChatActivityEnterView;
import org.telegram.ui.Components.CubicBezierInterpolator;
@@ -97,6 +98,7 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
MessageObject.TextLayoutBlock textLayoutBlock;
Drawable fromMessageDrawable;
ChatActivityEnterView enterView;
+ private AnimatedEmojiSpan.EmojiGroupedSpans animatedEmojiStack;
float textX;
float textY;
@@ -194,9 +196,9 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
layoutH = chatActivityEnterView.getEditField().getLayout().getLineBottom(chatActivityEnterView.getEditField().getLayout().getLineForOffset(newStart[0] + trimmedStr.length())) - linesOffset;
}
text = Emoji.replaceEmoji(editText, textPaint.getFontMetricsInt(), emojiSize, false);
+ text = AnimatedEmojiSpan.cloneSpans(text);
}
-
scaleFrom = chatActivityEnterView.getEditField().getTextSize() / textPaint.getTextSize();
int n = chatActivityEnterView.getEditField().getLayout().getLineCount();
@@ -211,6 +213,7 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
} else {
layout = new StaticLayout(text, textPaint, width, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
}
+ animatedEmojiStack = AnimatedEmojiSpan.update(AnimatedEmojiDrawable.CACHE_TYPE_KEYBOARD, null, animatedEmojiStack, layout);
float textViewY = chatActivityEnterView.getY() + chatActivityEnterView.getEditField().getY() + ((View) chatActivityEnterView.getEditField().getParent()).getY() + ((View) chatActivityEnterView.getEditField().getParent().getParent()).getY();
fromStartX = chatActivityEnterView.getX() + chatActivityEnterView.getEditField().getX() + ((View) chatActivityEnterView.getEditField().getParent()).getX() + ((View) chatActivityEnterView.getEditField().getParent().getParent()).getX();
fromStartY = textViewY + AndroidUtilities.dp(10) - chatActivityEnterView.getEditField().getScrollY() + linesOffset;
@@ -386,6 +389,7 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
chatActivityEnterView.getEditField().setAlpha(1f);
chatActivity.getReplyNameTextView().setAlpha(1f);
chatActivity.getReplyObjectTextView().setAlpha(1f);
+ AnimatedEmojiSpan.release(null, animatedEmojiStack);
}
});
@@ -608,7 +612,9 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
canvas.save();
- canvas.clipRect(drawableX + AndroidUtilities.dp(4), drawableTop + AndroidUtilities.dp(4), drawableRight - AndroidUtilities.dp(4), drawableBottom - AndroidUtilities.dp(4));
+ if (messageView.getMessageObject() == null || messageView.getMessageObject().type != MessageObject.TYPE_EMOJIS) {
+ canvas.clipRect(drawableX + AndroidUtilities.dp(4), drawableTop + AndroidUtilities.dp(4), drawableRight - AndroidUtilities.dp(4), drawableBottom - AndroidUtilities.dp(4));
+ }
float scale = progressX + scaleFrom * (1f - progressX);
float scale2;
@@ -627,20 +633,23 @@ public class TextMessageEnterTransition implements MessageEnterTransitionContain
bitmapPaint.setAlpha((int) (255 * (1f - alphaProgress)));
}
canvas.drawBitmap(textLayoutBitmap, 0, 0, bitmapPaint);
- } else if (currentMessageObject == null || currentMessageObject.type != MessageObject.TYPE_EMOJIS) {
+ } else {
if (crossfade && changeColor) {
int oldColor = layout.getPaint().getColor();
int oldAlpha = Color.alpha(oldColor);
layout.getPaint().setColor(ColorUtils.setAlphaComponent(ColorUtils.blendARGB(fromColor, toColor, alphaProgress), (int) (oldAlpha * (1f - alphaProgress))));
layout.draw(canvas);
+ AnimatedEmojiSpan.drawAnimatedEmojis(canvas, layout, animatedEmojiStack, 0, null, 0, 0, 0, 1f - alphaProgress);
layout.getPaint().setColor(oldColor);
} else if (crossfade) {
int oldAlpha = Theme.chat_msgTextPaint.getAlpha();
Theme.chat_msgTextPaint.setAlpha((int) (oldAlpha * (1f - alphaProgress)));
layout.draw(canvas);
+ AnimatedEmojiSpan.drawAnimatedEmojis(canvas, layout, animatedEmojiStack, 0, null, 0, 0, 0, 1f - alphaProgress);
Theme.chat_msgTextPaint.setAlpha(oldAlpha);
} else {
layout.draw(canvas);
+ AnimatedEmojiSpan.drawAnimatedEmojis(canvas, layout, animatedEmojiStack, 0, null, 0, 0, 0, 1f);
}
}
canvas.restore();
diff --git a/TMessagesProj_AppHuawei/src/main/AndroidManifest.xml b/TMessagesProj_AppHuawei/src/main/AndroidManifest.xml
index f341ae0bc..942a9fc68 100644
--- a/TMessagesProj_AppHuawei/src/main/AndroidManifest.xml
+++ b/TMessagesProj_AppHuawei/src/main/AndroidManifest.xml
@@ -6,6 +6,10 @@
+
+
+
+
implToAbsMarkerMap = new HashMap<>();
private Map implToAbsCircleMap = new HashMap<>();
- private HuaweiMapImpl(HuaweiMap googleMap) {
- this.huaweiMap = googleMap;
+ private HuaweiMapImpl(HuaweiMap huaweiMap) {
+ this.huaweiMap = huaweiMap;
}
@Override
@@ -521,6 +526,8 @@ public class HuaweiMapsProvider implements IMapsProvider {
private ITouchInterceptor interceptInterceptor;
private Runnable onLayoutListener;
+ private GLSurfaceView glSurfaceView;
+
private HuaweiMapView(Context context) {
mapView = new MapView(context) {
@Override
@@ -571,7 +578,28 @@ public class HuaweiMapsProvider implements IMapsProvider {
@Override
public void getMapAsync(Consumer callback) {
- mapView.getMapAsync(googleMap -> callback.accept(new HuaweiMapImpl(googleMap)));
+ mapView.getMapAsync(huaweiMap -> {
+ callback.accept(new HuaweiMapImpl(huaweiMap));
+ findGlSurfaceView(mapView);
+ });
+ }
+
+ @Override
+ public GLSurfaceView getGlSurfaceView() {
+ return glSurfaceView;
+ }
+
+ private void findGlSurfaceView(View v) {
+ if (v instanceof GLSurfaceView) {
+ glSurfaceView = (GLSurfaceView) v;
+ }
+
+ if (v instanceof ViewGroup) {
+ ViewGroup vg = (ViewGroup) v;
+ for (int i = 0; i < vg.getChildCount(); i++) {
+ findGlSurfaceView(vg.getChildAt(i));
+ }
+ }
}
@Override
diff --git a/gradle.properties b/gradle.properties
index 29f7e68e1..a69122df0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,12 +13,12 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Sat Mar 12 05:53:50 MSK 2016
-APP_VERSION_NAME=8.9.0
-APP_VERSION_CODE=2751
+APP_VERSION_NAME=8.9.2
+APP_VERSION_CODE=2756
APP_PACKAGE=org.telegram.messenger
-RELEASE_KEY_PASSWORD=android
-RELEASE_KEY_ALIAS=androidkey
-RELEASE_STORE_PASSWORD=android
+RELEASE_KEY_PASSWORD=TelegramAndroidPswd
+RELEASE_KEY_ALIAS=tmessages
+RELEASE_STORE_PASSWORD=TelegramAndroidPswd
org.gradle.jvmargs=-Xmx4096M -XX:MaxPermSize=4096m
org.gradle.daemon=true
org.gradle.parallel=true