From e2f7baf2bdcdd81bac4be4f9c43b41ff903d6720 Mon Sep 17 00:00:00 2001 From: DrKLO Date: Fri, 5 Jun 2020 05:40:01 +0300 Subject: [PATCH] Update to 6.2.0 (1985) --- TMessagesProj/build.gradle | 2 +- .../widget/ChatListItemAnimator.java | 6 - .../widget/GridLayoutManager.java | 5 +- .../recyclerview/widget/RecyclerView.java | 5 +- .../recyclerview/widget/ViewInfoStore.java | 28 +- .../telegram/messenger/ApplicationLoader.java | 25 +- .../org/telegram/messenger/BuildVars.java | 2 +- .../org/telegram/messenger/MessageObject.java | 18 +- .../messenger/MessagesController.java | 23 +- .../telegram/messenger/MessagesStorage.java | 244 +++++++++++++----- .../messenger/SendMessagesHelper.java | 10 +- .../messenger/camera/CameraController.java | 2 +- .../telegram/ui/ActionBar/SimpleTextView.java | 6 +- .../telegram/ui/Cells/ChatMessageCell.java | 166 ++++++------ .../java/org/telegram/ui/ChatActivity.java | 10 + .../telegram/ui/Components/Crop/CropView.java | 2 +- .../org/telegram/ui/Components/EmojiView.java | 2 +- .../ui/Components/FilterGLThread.java | 8 +- .../telegram/ui/Components/FilterShaders.java | 2 +- .../ui/Components/Paint/Painting.java | 21 +- .../ui/Components/Paint/ShaderSet.java | 2 +- .../telegram/ui/Components/Paint/Texture.java | 17 +- .../ui/Components/PhotoPaintView.java | 11 +- .../RecyclerAnimationScrollHelper.java | 4 - .../java/org/telegram/ui/PhotoViewer.java | 45 +++- .../org/telegram/ui/ThemePreviewActivity.java | 3 + 26 files changed, 430 insertions(+), 239 deletions(-) diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index c2815100c..32f624b81 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -276,7 +276,7 @@ android { } } - defaultConfig.versionCode = 1984 + defaultConfig.versionCode = 1985 def tgVoipDexFileName = "libtgvoip.dex" def tgVoipDexClasses = ["AudioRecordJNI", "AudioTrackJNI", "NativeTgVoipDelegate", "NativeTgVoipInstance", "TgVoipNativeLoader", "Resampler", "VLog"] diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java index eaf9ffee3..eb11ff6b9 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java @@ -141,14 +141,12 @@ public class ChatListItemAnimator extends DefaultItemAnimator { if (additionsPending) { final ArrayList additions = new ArrayList<>(); additions.addAll(mPendingAdditions); - mAdditionsList.add(additions); mPendingAdditions.clear(); for (RecyclerView.ViewHolder holder : additions) { animateAddImpl(holder); } additions.clear(); - mAdditionsList.remove(additions); } } @@ -181,26 +179,22 @@ public class ChatListItemAnimator extends DefaultItemAnimator { if (movesPending) { final ArrayList moves = new ArrayList<>(); moves.addAll(mPendingMoves); - mMovesList.add(moves); mPendingMoves.clear(); for (MoveInfo moveInfo : moves) { animateMoveImpl(moveInfo.holder, moveInfo); } moves.clear(); - mMovesList.remove(moves); } if (additionsPending) { final ArrayList additions = new ArrayList<>(); additions.addAll(mPendingAdditions); - mAdditionsList.add(additions); mPendingAdditions.clear(); for (RecyclerView.ViewHolder holder : additions) { animateAddImpl(holder, addedItemsHeight); } additions.clear(); - mAdditionsList.remove(additions); } } diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/GridLayoutManager.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/GridLayoutManager.java index 5f50bb49c..93a735d3f 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/GridLayoutManager.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/GridLayoutManager.java @@ -25,6 +25,9 @@ import android.view.ViewGroup; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BuildVars; + import java.util.Arrays; /** @@ -35,7 +38,7 @@ import java.util.Arrays; */ public class GridLayoutManager extends LinearLayoutManager { - private static final boolean DEBUG = false; + private static final boolean DEBUG = BuildVars.DEBUG_VERSION; private static final String TAG = "GridLayoutManager"; public static final int DEFAULT_SPAN_COUNT = -1; /** diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java index 9d929df27..fa6aa6f27 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java @@ -61,6 +61,7 @@ import android.widget.OverScroller; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BuildConfig; import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLog; import androidx.annotation.CallSuper; import androidx.annotation.IntDef; @@ -4473,8 +4474,8 @@ public class RecyclerView extends ViewGroup implements ScrollingView, for (int i = 0; i < childCount; i++) { final ViewHolder holder = getChildViewHolderInt(mChildHelper.getUnfilteredChildAt(i)); if (DEBUG && holder.mPosition == -1 && !holder.isRemoved()) { - throw new IllegalStateException("view holder cannot have position -1 unless it" - + " is removed" + exceptionLabel()); + FileLog.e(new IllegalStateException("view holder cannot have position -1 unless it" + + " is removed" + exceptionLabel())); } if (!holder.shouldIgnore()) { holder.saveOldPosition(); diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ViewInfoStore.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ViewInfoStore.java index bc9584b05..048b96571 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ViewInfoStore.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ViewInfoStore.java @@ -15,7 +15,7 @@ */ package androidx.recyclerview.widget; -import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLog; import static androidx.recyclerview.widget.ViewInfoStore.InfoRecord.FLAG_APPEAR; import static androidx.recyclerview.widget.ViewInfoStore.InfoRecord.FLAG_APPEAR_AND_DISAPPEAR; @@ -38,8 +38,6 @@ class ViewInfoStore { private static final boolean DEBUG = false; - private boolean processing; - /** * View data records for pre-layout */ @@ -117,12 +115,6 @@ class ViewInfoStore { } // if not pre-post flag is left, clear. if ((record.flags & (FLAG_PRE | FLAG_POST)) == 0) { - if (processing) { - if (BuildVars.DEBUG_VERSION) { - throw new RuntimeException("popFromLayoutStep while processing"); - } - return null; - } mLayoutHolderMap.removeAt(index); InfoRecord.recycle(record); } @@ -224,10 +216,17 @@ class ViewInfoStore { } void process(ProcessCallback callback) { - processing = true; for (int index = mLayoutHolderMap.size() - 1; index >= 0; index--) { final RecyclerView.ViewHolder viewHolder = mLayoutHolderMap.keyAt(index); - final InfoRecord record = mLayoutHolderMap.removeAt(index); + InfoRecord record = null; + try { + record = mLayoutHolderMap.removeAt(index); + } catch (Exception e) { + FileLog.e(e); + } + if (record == null) { + continue; + } if ((record.flags & FLAG_APPEAR_AND_DISAPPEAR) == FLAG_APPEAR_AND_DISAPPEAR) { // Appeared then disappeared. Not useful for animations. callback.unused(viewHolder); @@ -259,7 +258,6 @@ class ViewInfoStore { } InfoRecord.recycle(record); } - processing = false; } /** @@ -275,12 +273,6 @@ class ViewInfoStore { } final InfoRecord info = mLayoutHolderMap.get(holder); if (info != null) { - if (processing) { - if (BuildVars.DEBUG_VERSION) { - throw new RuntimeException("removeViewHolder while processing"); - } - return; - } mLayoutHolderMap.remove(holder); InfoRecord.recycle(info); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java index bdf06a759..e781aafb5 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java @@ -315,7 +315,7 @@ public class ApplicationLoader extends Application { public static boolean isConnectedOrConnectingToWiFi() { try { ensureCurrentNetworkGet(false); - if (currentNetworkInfo != null && currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + if (currentNetworkInfo != null && (currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI || currentNetworkInfo.getType() == ConnectivityManager.TYPE_ETHERNET)) { NetworkInfo.State state = currentNetworkInfo.getState(); if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING || state == NetworkInfo.State.SUSPENDED) { return true; @@ -330,7 +330,7 @@ public class ApplicationLoader extends Application { public static boolean isConnectedToWiFi() { try { ensureCurrentNetworkGet(false); - if (currentNetworkInfo != null && currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI && currentNetworkInfo.getState() == NetworkInfo.State.CONNECTED) { + if (currentNetworkInfo != null && (currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI || currentNetworkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) && currentNetworkInfo.getState() == NetworkInfo.State.CONNECTED) { return true; } } catch (Exception e) { @@ -360,19 +360,18 @@ public class ApplicationLoader extends Application { public static int getAutodownloadNetworkType() { try { - ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo netInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - if (netInfo != null) { - if (netInfo.getState() == NetworkInfo.State.CONNECTED) { - if (connectivityManager.isActiveNetworkMetered()) { - return StatsController.TYPE_MOBILE; - } else { - return StatsController.TYPE_WIFI; - } + ensureCurrentNetworkGet(false); + if (currentNetworkInfo == null) { + return StatsController.TYPE_MOBILE; + } + if (currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI || currentNetworkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) { + if (connectivityManager.isActiveNetworkMetered()) { + return StatsController.TYPE_MOBILE; + } else { + return StatsController.TYPE_WIFI; } } - netInfo = connectivityManager.getActiveNetworkInfo(); - if (netInfo != null && netInfo.isRoaming()) { + if (currentNetworkInfo.isRoaming()) { return StatsController.TYPE_ROAMING; } } catch (Exception e) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java index 329a02cb2..205c0dce0 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java @@ -19,7 +19,7 @@ public class BuildVars { public static boolean USE_CLOUD_STRINGS = true; public static boolean CHECK_UPDATES = true; public static boolean TON_WALLET_STANDALONE = false; - public static int BUILD_VERSION = 1984; + public static int BUILD_VERSION = 1985; public static String BUILD_VERSION_STRING = "6.2.0"; public static int APP_ID = 4; public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103"; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index 94192d65a..d108eda16 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -4802,13 +4802,17 @@ public class MessageObject { if (messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) { return messageOwner.media.photo != null && messageOwner.media.photo.has_stickers; } else if (messageOwner.media instanceof TLRPC.TL_messageMediaDocument) { - TLRPC.Document document = messageOwner.media.document; - if (document != null) { - for (int a = 0; a < document.attributes.size(); a++) { - TLRPC.DocumentAttribute attribute = document.attributes.get(a); - if (attribute instanceof TLRPC.TL_documentAttributeHasStickers) { - return true; - } + return isDocumentHasAttachedStickers(messageOwner.media.document); + } + return false; + } + + public static boolean isDocumentHasAttachedStickers(TLRPC.Document document) { + if (document != null) { + for (int a = 0; a < document.attributes.size(); a++) { + TLRPC.DocumentAttribute attribute = document.attributes.get(a); + if (attribute instanceof TLRPC.TL_documentAttributeHasStickers) { + return true; } } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index 1a92eee1d..1e392e2d9 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -272,6 +272,7 @@ public class MessagesController extends BaseController implements NotificationCe public int webFileDatacenterId; public String suggestedLangCode; public boolean qrLoginCamera; + public boolean saveGifsWithStickers; private String installReferer; public ArrayList gifSearchEmojies = new ArrayList<>(); public HashSet diceEmojies; @@ -621,6 +622,7 @@ public class MessagesController extends BaseController implements NotificationCe suggestedLangCode = mainPreferences.getString("suggestedLangCode", "en"); animatedEmojisZoom = mainPreferences.getFloat("animatedEmojisZoom", 0.625f); qrLoginCamera = mainPreferences.getBoolean("qrLoginCamera", false); + saveGifsWithStickers = mainPreferences.getBoolean("saveGifsWithStickers", false); filtersEnabled = mainPreferences.getBoolean("filtersEnabled", false); showFiltersTooltip = mainPreferences.getBoolean("showFiltersTooltip", false); @@ -1213,6 +1215,17 @@ public class MessagesController extends BaseController implements NotificationCe } break; } + case "save_gifs_with_stickers": { + if (value.value instanceof TLRPC.TL_jsonBool) { + TLRPC.TL_jsonBool bool = (TLRPC.TL_jsonBool) value.value; + if (bool.value != saveGifsWithStickers) { + saveGifsWithStickers = bool.value; + editor.putBoolean("saveGifsWithStickers", saveGifsWithStickers); + changed = true; + } + } + break; + } case "emojies_send_dice": { HashSet newEmojies = new HashSet<>(); if (value.value instanceof TLRPC.TL_jsonArray) { @@ -12070,7 +12083,15 @@ public class MessagesController extends BaseController implements NotificationCe } if (message.isOut() && !message.isSending() && !message.isForwarded()) { if (message.isNewGif()) { - getMediaDataController().addRecentGif(message.messageOwner.media.document, message.messageOwner.date); + boolean save; + if (MessageObject.isDocumentHasAttachedStickers(message.messageOwner.media.document)) { + save = getMessagesController().saveGifsWithStickers; + } else { + save = true; + } + if (save) { + getMediaDataController().addRecentGif(message.messageOwner.media.document, message.messageOwner.date); + } } else if (!message.isAnimatedEmoji() && (message.isSticker() || message.isAnimatedSticker())) { getMediaDataController().addRecentSticker(MediaDataController.TYPE_IMAGE, message, message.messageOwner.media.document, message.messageOwner.date, false); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java index 6623bf8b7..c369717f5 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java @@ -1764,6 +1764,7 @@ public class MessagesStorage extends BaseController { SparseArray encUsersDict = new SparseArray<>(); SparseArray encryptedChatsByUsersCount = new SparseArray<>(); SparseArray mutedDialogs = new SparseArray<>(); + SparseArray archivedDialogs = new SparseArray<>(); if (!usersToLoad.isEmpty()) { getUsersInternal(TextUtils.join(",", usersToLoad), users); for (int a = 0, N = users.size(); a < N; a++) { @@ -1774,6 +1775,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(user.id, true); } + if (idx1 == 1) { + archivedDialogs.put(user.id, true); + } if (user.bot) { bots[idx1][idx2]++; } else if (user.self || user.contact) { @@ -1807,6 +1811,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(user.id, true); } + if (idx1 == 1) { + archivedDialogs.put(user.id, true); + } if (user.self || user.contact) { contacts[idx1][idx2]++; } else { @@ -1832,6 +1839,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(-chat.id, true); } + if (idx1 == 1) { + archivedDialogs.put(-chat.id, true); + } if (ChatObject.isChannel(chat) && !chat.megagroup) { channels[idx1][idx2]++; } else { @@ -1945,62 +1955,51 @@ public class MessagesStorage extends BaseController { for (int b = 0, N2 = filter.alwaysShow.size(); b < N2; b++) { int did = filter.alwaysShow.get(b); if (did > 0) { - TLRPC.User user = usersDict.get(did); - if (user != null) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(user.id) >= 0) { - unreadCount++; - } else { - if (user.bot) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_BOTS) == 0) { - unreadCount++; - } - } else if (user.self || user.contact) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_CONTACTS) == 0) { - unreadCount++; - } + for (int i = 0; i < 2; i++) { + SparseArray dict = i == 0 ? usersDict : encUsersDict; + TLRPC.User user = dict.get(did); + if (user != null) { + int count; + if (i == 0) { + count = 1; } else { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS) == 0) { - unreadCount++; + count = encryptedChatsByUsersCount.get(did, 0); + if (count == 0) { + continue; } } - } - } - user = encUsersDict.get(did); - if (user != null) { - int count = encryptedChatsByUsersCount.get(did, 0); - if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(user.id) >= 0) { - unreadCount += count; - } else { + int flag; if (user.bot) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_BOTS) == 0) { - unreadCount += count; - } + flag = MessagesController.DIALOG_FILTER_FLAG_BOTS; } else if (user.self || user.contact) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_CONTACTS) == 0) { - unreadCount += count; - } + flag = MessagesController.DIALOG_FILTER_FLAG_CONTACTS; } else { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS) == 0) { - unreadCount += count; - } + flag = MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS; + } + if ((flags & flag) == 0) { + unreadCount += count; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(user.id) >= 0) { + unreadCount += count; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) != 0 && archivedDialogs.indexOfKey(user.id) >= 0) { + unreadCount += count; } } } } else { TLRPC.Chat chat = chatsDict.get(-did); if (chat != null) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(-chat.id) >= 0 && dialogsWithMentions.indexOfKey(-chat.id) < 0) { - unreadCount++; + int flag; + if (ChatObject.isChannel(chat) && !chat.megagroup) { + flag = MessagesController.DIALOG_FILTER_FLAG_CHANNELS; } else { - if (ChatObject.isChannel(chat) && !chat.megagroup) { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_CHANNELS) == 0) { - unreadCount++; - } - } else { - if ((flags & MessagesController.DIALOG_FILTER_FLAG_GROUPS) == 0) { - unreadCount++; - } - } + flag = MessagesController.DIALOG_FILTER_FLAG_GROUPS; + } + if ((flags & flag) == 0) { + unreadCount++; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(-chat.id) >= 0 && dialogsWithMentions.indexOfKey(-chat.id) < 0) { + unreadCount++; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) != 0 && archivedDialogs.indexOfKey(-chat.id) >= 0) { + unreadCount++; } } } @@ -2008,18 +2007,50 @@ public class MessagesStorage extends BaseController { for (int b = 0, N2 = filter.neverShow.size(); b < N2; b++) { int did = filter.neverShow.get(b); if (did > 0) { - TLRPC.User user = usersDict.get(did); - if (user != null) { - unreadCount--; - } - user = encUsersDict.get(did); - if (user != null) { - unreadCount -= encryptedChatsByUsersCount.get(did, 0); + for (int i = 0; i < 2; i++) { + SparseArray dict = i == 0 ? usersDict : encUsersDict; + TLRPC.User user = dict.get(did); + if (user != null) { + int count; + if (i == 0) { + count = 1; + } else { + count = encryptedChatsByUsersCount.get(did, 0); + if (count == 0) { + continue; + } + } + int flag; + if (user.bot) { + flag = MessagesController.DIALOG_FILTER_FLAG_BOTS; + } else if (user.self || user.contact) { + flag = MessagesController.DIALOG_FILTER_FLAG_CONTACTS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS; + } + if ((flags & flag) != 0) { + if (((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) == 0 || archivedDialogs.indexOfKey(user.id) < 0) && + ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0 || mutedDialogs.indexOfKey(user.id) < 0)) { + unreadCount -= count; + } + } + } } } else { TLRPC.Chat chat = chatsDict.get(-did); if (chat != null) { - unreadCount--; + int flag; + if (ChatObject.isChannel(chat) && !chat.megagroup) { + flag = MessagesController.DIALOG_FILTER_FLAG_CHANNELS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_GROUPS; + } + if ((flags & flag) != 0) { + if (((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) == 0 || archivedDialogs.indexOfKey(-chat.id) < 0 || dialogsWithMentions.indexOfKey(-chat.id) >= 0) && + ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0 || mutedDialogs.indexOfKey(-chat.id) < 0)) { + unreadCount--; + } + } } } } @@ -3726,6 +3757,7 @@ public class MessagesStorage extends BaseController { SparseArray encUsersDict = new SparseArray<>(); SparseArray encryptedChatsByUsersCount = new SparseArray<>(); SparseArray mutedDialogs = new SparseArray<>(); + SparseArray archivedDialogs = new SparseArray<>(); if (!usersToLoad.isEmpty()) { getUsersInternal(TextUtils.join(",", usersToLoad), users); for (int a = 0, N = users.size(); a < N; a++) { @@ -3736,6 +3768,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(user.id, true); } + if (idx1 == 1) { + archivedDialogs.put(user.id, true); + } if (user.bot) { bots[idx1][idx2]++; } else if (user.self || user.contact) { @@ -3769,6 +3804,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(user.id, true); } + if (idx1 == 1) { + archivedDialogs.put(user.id, true); + } if (user.self || user.contact) { contacts[idx1][idx2]++; } else { @@ -3794,6 +3832,9 @@ public class MessagesStorage extends BaseController { if (muted) { mutedDialogs.put(-chat.id, true); } + if (idx1 == 1) { + archivedDialogs.put(-chat.id, true); + } if (muted && dialogsToUpdateMentions != null && dialogsToUpdateMentions.indexOfKey(-chat.id) >= 0) { if (ChatObject.isChannel(chat) && !chat.megagroup) { mentionChannels[idx1]++; @@ -3993,24 +4034,109 @@ public class MessagesStorage extends BaseController { } } } + + for (int b = 0, N2 = filter.alwaysShow.size(); b < N2; b++) { + int did = filter.alwaysShow.get(b); + if (did > 0) { + for (int i = 0; i < 2; i++) { + SparseArray dict = i == 0 ? usersDict : encUsersDict; + TLRPC.User user = dict.get(did); + if (user != null) { + int count; + if (i == 0) { + count = 1; + } else { + count = encryptedChatsByUsersCount.get(did, 0); + if (count == 0) { + continue; + } + } + int flag; + if (user.bot) { + flag = MessagesController.DIALOG_FILTER_FLAG_BOTS; + } else if (user.self || user.contact) { + flag = MessagesController.DIALOG_FILTER_FLAG_CONTACTS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS; + } + if ((flags & flag) == 0) { + unreadCount -= count; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(user.id) >= 0) { + unreadCount -= count; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) != 0 && archivedDialogs.indexOfKey(user.id) >= 0) { + unreadCount -= count; + } + } + } + } else { + TLRPC.Chat chat = chatsDict.get(-did); + if (chat != null) { + int flag; + if (ChatObject.isChannel(chat) && !chat.megagroup) { + flag = MessagesController.DIALOG_FILTER_FLAG_CHANNELS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_GROUPS; + } + if ((flags & flag) == 0) { + unreadCount--; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) != 0 && mutedDialogs.indexOfKey(-chat.id) >= 0 && dialogsWithMentions.indexOfKey(-chat.id) < 0) { + unreadCount--; + } else if ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) != 0 && archivedDialogs.indexOfKey(-chat.id) >= 0) { + unreadCount--; + } + } + } + } for (int b = 0, N2 = filter.neverShow.size(); b < N2; b++) { int did = filter.neverShow.get(b); if (dialogsToUpdateMentions != null && dialogsToUpdateMentions.indexOfKey(did) >= 0 && mutedDialogs.indexOfKey(did) < 0) { continue; } if (did > 0) { - TLRPC.User user = usersDict.get(did); - if (user != null) { - unreadCount++; - } - user = encUsersDict.get(did); - if (user != null) { - unreadCount += encryptedChatsByUsersCount.get(did, 0); + for (int i = 0; i < 2; i++) { + SparseArray dict = i == 0 ? usersDict : encUsersDict; + TLRPC.User user = dict.get(did); + if (user != null) { + int count; + if (i == 0) { + count = 1; + } else { + count = encryptedChatsByUsersCount.get(did, 0); + if (count == 0) { + continue; + } + } + int flag; + if (user.bot) { + flag = MessagesController.DIALOG_FILTER_FLAG_BOTS; + } else if (user.self || user.contact) { + flag = MessagesController.DIALOG_FILTER_FLAG_CONTACTS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_NON_CONTACTS; + } + if ((flags & flag) != 0) { + if (((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) == 0 || archivedDialogs.indexOfKey(user.id) < 0) && + ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0 || mutedDialogs.indexOfKey(user.id) < 0)) { + unreadCount += count; + } + } + } } } else { TLRPC.Chat chat = chatsDict.get(-did); if (chat != null) { - unreadCount++; + int flag; + if (ChatObject.isChannel(chat) && !chat.megagroup) { + flag = MessagesController.DIALOG_FILTER_FLAG_CHANNELS; + } else { + flag = MessagesController.DIALOG_FILTER_FLAG_GROUPS; + } + if ((flags & flag) != 0) { + if (((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_ARCHIVED) == 0 || archivedDialogs.indexOfKey(-chat.id) < 0 || dialogsWithMentions.indexOfKey(-chat.id) >= 0) && + ((flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0 || mutedDialogs.indexOfKey(-chat.id) < 0)) { + unreadCount++; + } + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java index c0aca235e..09cc103b0 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java @@ -4766,7 +4766,15 @@ public class SendMessagesHelper extends BaseController implements NotificationCe if ((sentMessage.flags & TLRPC.MESSAGE_FLAG_FWD) == 0 && MessageObject.isOut(sentMessage)) { if (MessageObject.isNewGifDocument(sentMessage.media.document)) { - getMediaDataController().addRecentGif(sentMessage.media.document, sentMessage.date); + boolean save; + if (MessageObject.isDocumentHasAttachedStickers(sentMessage.media.document)) { + save = getMessagesController().saveGifsWithStickers; + } else { + save = true; + } + if (save) { + getMediaDataController().addRecentGif(sentMessage.media.document, sentMessage.date); + } } else if (MessageObject.isStickerDocument(sentMessage.media.document) || MessageObject.isAnimatedStickerDocument(sentMessage.media.document, true)) { getMediaDataController().addRecentSticker(MediaDataController.TYPE_IMAGE, sentMessage, sentMessage.media.document, sentMessage.date, false); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java index 354a19ff2..70bb29590 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java @@ -676,7 +676,7 @@ public class CameraController implements MediaRecorder.OnInfoListener { final File cacheFile = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); try { FileOutputStream stream = new FileOutputStream(cacheFile); - bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); + bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); } catch (Throwable e) { FileLog.e(e); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java index 1d18a714c..bee51da2f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java @@ -393,8 +393,9 @@ public class SimpleTextView extends View implements Drawable.Callback { int textOffsetX = 0; boolean fade = scrollNonFitText && (textDoesNotFit || scrollingOffset != 0); + int restore = Integer.MIN_VALUE; if (fade) { - canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), 255, Canvas.ALL_SAVE_FLAG); + restore = canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), 255, Canvas.ALL_SAVE_FLAG); } totalWidth = textWidth; @@ -487,6 +488,9 @@ public class SimpleTextView extends View implements Drawable.Callback { } updateScrollAnimation(); } + if (fade) { + canvas.restoreToCount(restore); + } } private void updateScrollAnimation() { 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 4a8587b74..66b4c6ae4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -6339,11 +6339,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate textX += diff; } } - if (transitionParams.animateChangeProgress != 1f && transitionParams.animateMessageText) { - drawMessageText(canvas, transitionParams.animateOutTextBlocks, false, (1f - transitionParams.animateChangeProgress)); + if (transitionParams.animateChangeProgress != 1.0f && transitionParams.animateMessageText) { + drawMessageText(canvas, transitionParams.animateOutTextBlocks, false, (1.0f - transitionParams.animateChangeProgress)); drawMessageText(canvas, currentMessageObject.textLayoutBlocks, true, transitionParams.animateChangeProgress); } else { - drawMessageText(canvas, currentMessageObject.textLayoutBlocks, true, 1f); + drawMessageText(canvas, currentMessageObject.textLayoutBlocks, true, 1.0f); } @@ -7063,75 +7063,77 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } private void drawMessageText(Canvas canvas, ArrayList textLayoutBlocks, boolean origin, float alpha) { - if (textLayoutBlocks != null && !textLayoutBlocks.isEmpty()) { - int oldAlpha = 0; - int firstVisibleBlockNum; - int lastVisibleBlockNum; - if (origin) { - if (fullyDraw) { - this.firstVisibleBlockNum = 0; - this.lastVisibleBlockNum = textLayoutBlocks.size(); + if (textLayoutBlocks == null || textLayoutBlocks.isEmpty()) { + return; + } + int oldAlpha = 0; + int firstVisibleBlockNum; + int lastVisibleBlockNum; + if (origin) { + if (fullyDraw) { + this.firstVisibleBlockNum = 0; + this.lastVisibleBlockNum = textLayoutBlocks.size(); + } + firstVisibleBlockNum = this.firstVisibleBlockNum; + lastVisibleBlockNum = this.lastVisibleBlockNum; + } else { + firstVisibleBlockNum = 0; + lastVisibleBlockNum = textLayoutBlocks.size(); + } + + if (firstVisibleBlockNum >= 0) { + int restore = Integer.MIN_VALUE; + if (alpha != 1.0f) { + if (currentBackgroundDrawable != null) { + int top = currentBackgroundDrawable.getBounds().top; + int bottom = currentBackgroundDrawable.getBounds().bottom; + + if (getY() < 0) { + top = (int) -getY(); + } + if (getY() + getMeasuredHeight() > parentHeight) { + bottom = (int) (parentHeight - getY()); + } + rect.set( + currentBackgroundDrawable.getBounds().left, top, + currentBackgroundDrawable.getBounds().right, bottom + ); + } else { + rect.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); } - firstVisibleBlockNum = this.firstVisibleBlockNum; - lastVisibleBlockNum = this.lastVisibleBlockNum; - } else { - firstVisibleBlockNum = 0; - lastVisibleBlockNum = textLayoutBlocks.size(); + restore = canvas.saveLayerAlpha(rect, (int) (alpha * 255), Canvas.ALL_SAVE_FLAG); + } + for (int a = firstVisibleBlockNum; a <= lastVisibleBlockNum; a++) { + if (a >= textLayoutBlocks.size()) { + break; + } + MessageObject.TextLayoutBlock block = textLayoutBlocks.get(a); + canvas.save(); + canvas.translate(textX - (block.isRtl() ? (int) Math.ceil(currentMessageObject.textXOffset) : 0), textY + block.textYOffset); + if (pressedLink != null && a == linkBlockNum) { + for (int b = 0; b < urlPath.size(); b++) { + canvas.drawPath(urlPath.get(b), Theme.chat_urlPaint); + } + } + if (a == linkSelectionBlockNum && !urlPathSelection.isEmpty()) { + for (int b = 0; b < urlPathSelection.size(); b++) { + canvas.drawPath(urlPathSelection.get(b), Theme.chat_textSearchSelectionPaint); + } + } + + if (delegate.getTextSelectionHelper() != null && transitionParams.animateChangeProgress == 1f) { + delegate.getTextSelectionHelper().draw(currentMessageObject, block, canvas); + } + try { + block.textLayout.draw(canvas); + } catch (Exception e) { + FileLog.e(e); + } + canvas.restore(); } - if (firstVisibleBlockNum >= 0) { - if (alpha != 1f) { - if (currentBackgroundDrawable != null) { - int top = currentBackgroundDrawable.getBounds().top; - int bottom = currentBackgroundDrawable.getBounds().bottom; - - if (getY() < 0) { - top = (int) -getY(); - } - if (getY() + getMeasuredHeight() > parentHeight) { - bottom = (int) (parentHeight - getY()); - } - rect.set( - currentBackgroundDrawable.getBounds().left, top, - currentBackgroundDrawable.getBounds().right, bottom - ); - } else { - rect.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); - } - canvas.saveLayerAlpha(rect, (int) (alpha * 255), Canvas.ALL_SAVE_FLAG); - } - for (int a = firstVisibleBlockNum; a <= lastVisibleBlockNum; a++) { - if (a >= textLayoutBlocks.size()) { - break; - } - MessageObject.TextLayoutBlock block = textLayoutBlocks.get(a); - canvas.save(); - canvas.translate(textX - (block.isRtl() ? (int) Math.ceil(currentMessageObject.textXOffset) : 0), textY + block.textYOffset); - if (pressedLink != null && a == linkBlockNum) { - for (int b = 0; b < urlPath.size(); b++) { - canvas.drawPath(urlPath.get(b), Theme.chat_urlPaint); - } - } - if (a == linkSelectionBlockNum && !urlPathSelection.isEmpty()) { - for (int b = 0; b < urlPathSelection.size(); b++) { - canvas.drawPath(urlPathSelection.get(b), Theme.chat_textSearchSelectionPaint); - } - } - - if (delegate.getTextSelectionHelper() != null && transitionParams.animateChangeProgress == 1f) { - delegate.getTextSelectionHelper().draw(currentMessageObject, block, canvas); - } - try { - block.textLayout.draw(canvas); - } catch (Exception e) { - FileLog.e(e); - } - canvas.restore(); - } - - if (alpha != 1f) { - canvas.restore(); - } + if (restore != Integer.MIN_VALUE) { + canvas.restoreToCount(restore); } } } @@ -9132,7 +9134,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } - if (alphaInternal != 1f) { + int restore = Integer.MIN_VALUE; + if (alphaInternal != 1.0f) { int top = 0; int left = 0; int bottom = getMeasuredHeight(); @@ -9159,7 +9162,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate bottom = (int) (parentHeight - getY()); } rect.set(left, top, right, bottom); - canvas.saveLayerAlpha(rect, (int) (255 * alphaInternal), Canvas.ALL_SAVE_FLAG); + restore = canvas.saveLayerAlpha(rect, (int) (255 * alphaInternal), Canvas.ALL_SAVE_FLAG); } if (transitionParams.animateBackgroundBoundsInner && currentBackgroundDrawable != null) { Rect r = currentBackgroundDrawable.getBounds(); @@ -9274,8 +9277,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate parent.invalidate(); } } - if (alphaInternal != 1f) { - canvas.restore(); + if (restore != Integer.MIN_VALUE) { + canvas.restoreToCount(restore); } updateSelectionTextPosition(); } @@ -9418,9 +9421,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate return; } + int restore = Integer.MIN_VALUE; if (alpha != 1f) { rect.set(0, 0, getMaxNameWidth(), getMeasuredHeight()); - canvas.saveLayerAlpha(rect, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG); + restore = canvas.saveLayerAlpha(rect, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG); } if (drawNameLayout && nameLayout != null) { @@ -9615,8 +9619,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } - if (alpha != 1f) { - canvas.restore(); + if (restore != Integer.MIN_VALUE) { + canvas.restoreToCount(restore); } } @@ -9751,14 +9755,14 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } } - if (renderingAlpha != 1f) { + int restore = Integer.MIN_VALUE; + if (renderingAlpha != 1.0f) { rect.set(captionX, captionY, captionX + captionLayout.getWidth(), captionY + captionLayout.getHeight()); - canvas.saveLayerAlpha(rect, (int) (255 * renderingAlpha), Canvas.ALL_SAVE_FLAG); + restore = canvas.saveLayerAlpha(rect, (int) (255 * renderingAlpha), Canvas.ALL_SAVE_FLAG); } canvas.translate(captionX, captionY); - if (pressedLink != null) { for (int b = 0; b < urlPath.size(); b++) { canvas.drawPath(urlPath.get(b), Theme.chat_urlPaint); @@ -9779,8 +9783,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate FileLog.e(e); } } - if (renderingAlpha != 1f) { - canvas.restore(); + if (restore != Integer.MIN_VALUE) { + canvas.restoreToCount(restore); } canvas.restore(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index dafd855cb..05ebf0299 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -3689,6 +3689,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } return false; } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (Exception e) { + FileLog.e(e); + AndroidUtilities.runOnUIThread(() -> chatAdapter.notifyDataSetChanged()); + } + } }; chatLayoutManager.setSpanSizeLookup(new GridLayoutManagerFixed.SpanSizeLookup() { @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Crop/CropView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Crop/CropView.java index bedb7a5b3..86a52323f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Crop/CropView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Crop/CropView.java @@ -788,7 +788,7 @@ public class CropView extends FrameLayout implements CropAreaView.AreaViewListen matrix.postTranslate(canvasBitmap.getWidth() / 2, canvasBitmap.getHeight() / 2); canvas.drawBitmap(b, matrix, new Paint(FILTER_BITMAP_FLAG)); FileOutputStream stream = new FileOutputStream(new File(path)); - canvasBitmap.compress(format, 83, stream); + canvasBitmap.compress(format, 87, stream); stream.close(); if (entities != null && !entities.isEmpty()) { 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 90445ea00..8df421053 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java @@ -4629,7 +4629,7 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific @MainThread private void processResponse(final String query, final String offset, boolean searchUser, boolean isEmoji, boolean cache, String key, TLObject response) { - if (!query.equals(lastSearchImageString)) { + if (query == null || !query.equals(lastSearchImageString)) { return; } reqId = 0; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterGLThread.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterGLThread.java index 2b6da1f49..40fb609e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterGLThread.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterGLThread.java @@ -298,7 +298,7 @@ public class FilterGLThread extends DispatchQueue { videoHeight /= 2; } } - if (!renderDataSet && videoWidth != 0 && videoHeight != 0) { + if (!renderDataSet && videoWidth > 0 && videoHeight > 0) { filterShaders.setRenderData(currentBitmap, orientation, videoTexture[0], videoWidth, videoHeight); renderDataSet = true; renderBufferWidth = filterShaders.getRenderBufferWidth(); @@ -382,8 +382,10 @@ public class FilterGLThread extends DispatchQueue { } public void setSurfaceTextureSize(int width, int height) { - surfaceWidth = width; - surfaceHeight = height; + postRunnable(() -> { + surfaceWidth = width; + surfaceHeight = height; + }); } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterShaders.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterShaders.java index 6adc464e1..686acd014 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterShaders.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterShaders.java @@ -907,7 +907,7 @@ public class FilterShaders { GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, hsvBuffer); + GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); } public static int loadShader(int type, String shaderCode) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Painting.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Painting.java index b817640d0..2265da0fd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Painting.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Painting.java @@ -389,10 +389,10 @@ public class Painting { int texture = buffers[0]; GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture); - GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); + GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture, 0); @@ -415,24 +415,15 @@ public class Painting { GLES20.glUniformMatrix4fv(shader.getUniform("mvpMatrix"), 1, false, FloatBuffer.wrap(finalProjection)); - if (undo) { - GLES20.glUniform1i(shader.getUniform("texture"), 0); + GLES20.glUniform1i(shader.getUniform("texture"), 0); - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, getTexture()); - } else { - GLES20.glUniform1i(shader.getUniform("texture"), 0); + GLES20.glActiveTexture(GLES20.GL_TEXTURE0); + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, getTexture()); - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, bitmapTexture.texture()); - - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, getTexture()); - } GLES20.glClearColor(0, 0, 0, 0); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); - GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); + GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ZERO); GLES20.glVertexAttribPointer(0, 2, GLES20.GL_FLOAT, false, 8, vertexBuffer); GLES20.glEnableVertexAttribArray(0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/ShaderSet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/ShaderSet.java index dd302cae7..0bf3a9b62 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/ShaderSet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/ShaderSet.java @@ -18,7 +18,7 @@ public class ShaderSet { private static final String PAINT_BRUSH_FSH = "precision highp float; varying vec2 varTexcoord; varying float varIntensity; uniform sampler2D texture; void main (void) { gl_FragColor = vec4(0, 0, 0, varIntensity * texture2D(texture, varTexcoord.st, 0.0).r); }"; private static final String PAINT_BRUSHLIGHT_FSH = "precision highp float; varying vec2 varTexcoord; varying float varIntensity; uniform sampler2D texture; void main (void) { vec4 f = texture2D(texture, varTexcoord.st, 0.0); gl_FragColor = vec4(f.r * varIntensity, f.g, f.b, 0.0); }"; private static final String PAINT_BLIT_VSH = "precision highp float; uniform mat4 mvpMatrix; attribute vec4 inPosition; attribute vec2 inTexcoord; varying vec2 varTexcoord; void main (void) { gl_Position = mvpMatrix * inPosition; varTexcoord = inTexcoord; }"; - private static final String PAINT_BLIT_FSH = "precision highp float; varying vec2 varTexcoord; uniform sampler2D texture; void main (void) { vec4 tex = texture2D(texture, varTexcoord.st, 0.0); gl_FragColor = texture2D(texture, varTexcoord.st, 0.0); gl_FragColor.rgb *= gl_FragColor.a; }"; + private static final String PAINT_BLIT_FSH = "precision highp float; varying vec2 varTexcoord; uniform sampler2D texture; void main (void) { gl_FragColor = texture2D(texture, varTexcoord.st, 0.0); gl_FragColor.rgb *= gl_FragColor.a; }"; private static final String PAINT_BLITWITHMASKLIGHT_FSH = "precision highp float; varying vec2 varTexcoord; uniform sampler2D texture; uniform sampler2D mask; uniform vec4 color; void main (void) { vec4 dst = texture2D(texture, varTexcoord.st, 0.0); vec3 maskColor = texture2D(mask, varTexcoord.st, 0.0).rgb; float srcAlpha = clamp(0.78 * maskColor.r + maskColor.b + maskColor.g, 0.0, 1.0); vec3 borderColor = mix(color.rgb, vec3(1.0, 1.0, 1.0), 0.86); vec3 finalColor = mix(color.rgb, borderColor, maskColor.g); finalColor = mix(finalColor.rgb, vec3(1.0, 1.0, 1.0), maskColor.b); float outAlpha = srcAlpha + dst.a * (1.0 - srcAlpha); gl_FragColor.rgb = (finalColor * srcAlpha + dst.rgb * dst.a * (1.0 - srcAlpha)) / outAlpha; gl_FragColor.a = outAlpha; gl_FragColor.rgb *= gl_FragColor.a; }"; private static final String PAINT_BLITWITHMASK_FSH = "precision highp float; varying vec2 varTexcoord; uniform sampler2D texture; uniform sampler2D mask; uniform vec4 color; void main (void) { vec4 dst = texture2D(texture, varTexcoord.st, 0.0); float srcAlpha = color.a * texture2D(mask, varTexcoord.st, 0.0).a; float outAlpha = srcAlpha + dst.a * (1.0 - srcAlpha); gl_FragColor.rgb = (color.rgb * srcAlpha + dst.rgb * dst.a * (1.0 - srcAlpha)) / outAlpha; gl_FragColor.a = outAlpha; gl_FragColor.rgb *= gl_FragColor.a; }"; private static final String PAINT_COMPOSITEWITHMASK_FSH = "precision highp float; varying vec2 varTexcoord; uniform sampler2D texture; uniform sampler2D mask; uniform vec4 color; void main(void) { vec4 dst = texture2D(texture, varTexcoord.st, 0.0); float srcAlpha = color.a * texture2D(mask, varTexcoord.st, 0.0).a; float outAlpha = srcAlpha + dst.a * (1.0 - srcAlpha); gl_FragColor.rgb = (color.rgb * srcAlpha + dst.rgb * dst.a * (1.0 - srcAlpha)) / outAlpha; gl_FragColor.a = outAlpha; }"; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Texture.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Texture.java index 8ad83be74..284d86338 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Texture.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Texture.java @@ -2,11 +2,11 @@ package org.telegram.ui.Components.Paint; import android.graphics.Bitmap; import android.opengl.GLES20; -import android.opengl.GLUtils; import org.telegram.ui.Components.Size; import java.nio.ByteBuffer; +import java.nio.IntBuffer; public class Texture { @@ -52,10 +52,19 @@ public class Texture { GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int[] pixels = new int[width * height]; + bitmap.getPixels(pixels, 0, width, 0, 0, width, height); + for (int i = 0; i < pixels.length; i += 1) { + int argb = pixels[i]; + pixels[i] = argb & 0xff00ff00 | ((argb & 0xff) << 16) | ((argb >> 16) & 0xff); + } + GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, IntBuffer.wrap(pixels)); + int px = bitmap.getPixel(0, 0); ByteBuffer buffer = ByteBuffer.allocateDirect(4); //fix for android 9.0 @@ -77,7 +86,7 @@ public class Texture { GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); int width = (int) size.width; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhotoPaintView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhotoPaintView.java index 4d988f919..c2c298772 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhotoPaintView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhotoPaintView.java @@ -1135,7 +1135,7 @@ public class PhotoPaintView extends FrameLayout implements EntityView.EntityView }, entityView, Gravity.CENTER, x, y); } - private FrameLayout buttonForBrush(final int brush, int resource, boolean selected) { + private FrameLayout buttonForBrush(final int brush, int resource, boolean applyColor, boolean selected) { FrameLayout button = new FrameLayout(getContext()); button.setBackgroundDrawable(Theme.getSelectorDrawable(false)); button.setOnClickListener(v -> { @@ -1148,6 +1148,9 @@ public class PhotoPaintView extends FrameLayout implements EntityView.EntityView ImageView preview = new ImageView(getContext()); preview.setImageResource(resource); + if (applyColor) { + preview.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), PorterDuff.Mode.SRC_IN)); + } button.addView(preview, LayoutHelper.createFrame(165, 44, Gravity.LEFT | Gravity.CENTER_VERTICAL, 46, 0, 8, 0)); if (selected) { @@ -1163,7 +1166,7 @@ public class PhotoPaintView extends FrameLayout implements EntityView.EntityView private void showBrushSettings() { showPopup(() -> { - View radial = buttonForBrush(0, R.drawable.paint_radial_preview, currentBrush == 0); + View radial = buttonForBrush(0, R.drawable.paint_radial_preview, true, currentBrush == 0); popupLayout.addView(radial); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) radial.getLayoutParams(); @@ -1171,7 +1174,7 @@ public class PhotoPaintView extends FrameLayout implements EntityView.EntityView layoutParams.height = AndroidUtilities.dp(52); radial.setLayoutParams(layoutParams); - View elliptical = buttonForBrush(1, R.drawable.paint_elliptical_preview, currentBrush == 1); + View elliptical = buttonForBrush(1, R.drawable.paint_elliptical_preview, true, currentBrush == 1); popupLayout.addView(elliptical); layoutParams = (LinearLayout.LayoutParams) elliptical.getLayoutParams(); @@ -1179,7 +1182,7 @@ public class PhotoPaintView extends FrameLayout implements EntityView.EntityView layoutParams.height = AndroidUtilities.dp(52); elliptical.setLayoutParams(layoutParams); - View neon = buttonForBrush(2, R.drawable.paint_neon_preview, currentBrush == 2); + View neon = buttonForBrush(2, R.drawable.paint_neon_preview, false, currentBrush == 2); popupLayout.addView(neon); layoutParams = (LinearLayout.LayoutParams) neon.getLayoutParams(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerAnimationScrollHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerAnimationScrollHelper.java index 792a9856b..2a07c0f22 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerAnimationScrollHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerAnimationScrollHelper.java @@ -241,10 +241,6 @@ public class RecyclerAnimationScrollHelper { if (recyclerView.mChildHelper.getHiddenChildCount() != 0) { throw new RuntimeException("hidden child count must be 0"); } - - if (recyclerView.getCachedChildCount() != 0) { - throw new RuntimeException("cached child count must be 0"); - } } int n = recyclerView.getChildCount(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index 5a06e085b..a929a0177 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -2778,7 +2778,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_POINTER_UP: - AndroidUtilities.runOnUIThread(hideActionBarRunnable, 3000); + scheduleActionBarHide(); break; } } @@ -3364,7 +3364,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat @Override public void onHideSubMenu() { if (videoPlayerControlVisible && isPlaying) { - AndroidUtilities.runOnUIThread(hideActionBarRunnable, 3000); + scheduleActionBarHide(); } } }); @@ -5117,6 +5117,27 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return injectingVideoPlayer != null; } + private void scheduleActionBarHide() { + scheduleActionBarHide(3000); + } + + private void scheduleActionBarHide(int delay) { + if (!isAccessibilityEnabled()) { + AndroidUtilities.cancelRunOnUIThread(hideActionBarRunnable); + AndroidUtilities.runOnUIThread(hideActionBarRunnable, delay); + } + } + + private boolean isAccessibilityEnabled() { + try { + AccessibilityManager am = (AccessibilityManager) actvityContext.getSystemService(Context.ACCESSIBILITY_SERVICE); + return am.isEnabled(); + } catch (Exception e) { + FileLog.e(e); + } + return false; + } + private void updatePlayerState(boolean playWhenReady, int playbackState) { if (videoPlayer == null) { return; @@ -5131,7 +5152,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (buffering) { AndroidUtilities.cancelRunOnUIThread(hideActionBarRunnable); } else { - AndroidUtilities.runOnUIThread(hideActionBarRunnable, 3000); + scheduleActionBarHide(); } toggleMiniProgress(buffering, true); } @@ -5503,7 +5524,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } setVideoPlayerControlVisible(!isCurrentVideo, true); if (!isCurrentVideo) { - AndroidUtilities.runOnUIThread(hideActionBarRunnable, playerAutoStarted ? 3000 : 1000); + scheduleActionBarHide(playerAutoStarted ? 3000 : 1000); } inPreview = preview; @@ -5802,7 +5823,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat stickers = photoPaintView.getMasks(); } if (bitmap != null) { - TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(bitmap, currentEditMode == 3 ? Bitmap.CompressFormat.PNG : Bitmap.CompressFormat.JPEG, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(bitmap, currentEditMode == 3 ? Bitmap.CompressFormat.PNG : Bitmap.CompressFormat.JPEG, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 87, false, 101, 101); if (size != null) { if (entry.thumbPath != null) { new File(entry.thumbPath).delete(); @@ -5837,7 +5858,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat Canvas b = new Canvas(canvasBitmap); b.drawBitmap(bitmap, null, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()), bitmapPaint); b.drawBitmap(paintBitmap, null, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()), bitmapPaint); - size = ImageLoader.scaleAndSaveImage(canvasBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + size = ImageLoader.scaleAndSaveImage(canvasBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 87, false, 101, 101); entry.imagePath = FileLoader.getPathToAttach(size, true).toString(); canvasBitmap.recycle(); paintingOverlay.setEntities(currentMediaEntities, isCurrentVideo, true); @@ -5872,7 +5893,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat Canvas b = new Canvas(canvasBitmap); b.drawBitmap(bitmap, null, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()), bitmapPaint); b.drawBitmap(paintBitmap, null, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()), bitmapPaint); - size = ImageLoader.scaleAndSaveImage(canvasBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + size = ImageLoader.scaleAndSaveImage(canvasBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 87, false, 101, 101); if (entry.imagePath != null) { new File(entry.imagePath).delete(); } @@ -5915,11 +5936,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat new File(entry.fullPaintPath).delete(); } } + entry.stickers = stickers; entry.paintPath = currentPaintPath = FileLoader.getPathToAttach(size, true).toString(); paintingOverlay.setEntities(entry.mediaEntities = currentMediaEntities = entities == null || entities.isEmpty() ? null : entities, isCurrentVideo, true); entry.averageDuration = currentAverageDuration = photoPaintView.getLcm(); if (entry.mediaEntities != null && paintThumbBitmap[0] != null) { - size = ImageLoader.scaleAndSaveImage(paintThumbBitmap[0], Bitmap.CompressFormat.PNG, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + size = ImageLoader.scaleAndSaveImage(paintThumbBitmap[0], Bitmap.CompressFormat.PNG, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 87, false, 101, 101); entry.fullPaintPath = FileLoader.getPathToAttach(size, true).toString(); } else { entry.fullPaintPath = entry.paintPath; @@ -5942,7 +5964,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (originalBitmap != null) { Canvas b = new Canvas(originalBitmap); b.drawBitmap(paintThumbBitmap[0] != null ? paintThumbBitmap[0] : bitmap, null, new Rect(0, 0, originalBitmap.getWidth(), originalBitmap.getHeight()), bitmapPaint); - size = ImageLoader.scaleAndSaveImage(originalBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 80, false, 101, 101); + size = ImageLoader.scaleAndSaveImage(originalBitmap, AndroidUtilities.getPhotoSize(), AndroidUtilities.getPhotoSize(), 87, false, 101, 101); if (entry.imagePath != null) { new File(entry.imagePath).delete(); } @@ -5986,7 +6008,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat SharedConfig.saveConfig(); - entry.stickers = stickers; if (savedFilterState != null) { entry.savedFilterState = currentSavedFilterState = savedFilterState; } @@ -6750,7 +6771,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat updateContainerFlags(show); if (videoPlayerControlVisible && isPlaying && show) { - AndroidUtilities.runOnUIThread(hideActionBarRunnable, 3000); + scheduleActionBarHide(); } else { AndroidUtilities.cancelRunOnUIThread(hideActionBarRunnable); } @@ -6889,7 +6910,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (Math.abs(videoPlayerSeekbar.getProgress() - 1.0f) < 0.01f || videoPlayer.getCurrentPosition() == videoPlayer.getDuration()) { videoPlayer.seekTo(0); } - AndroidUtilities.runOnUIThread(hideActionBarRunnable, 1000); + scheduleActionBarHide(); } videoPlayer.play(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemePreviewActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemePreviewActivity.java index bf39f96ba..fc5f23936 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemePreviewActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemePreviewActivity.java @@ -1630,6 +1630,9 @@ public class ThemePreviewActivity extends BaseFragment implements DownloadContro saveButtonsContainer.addView(doneButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.RIGHT)); doneButton.setOnClickListener(v -> { Theme.ThemeInfo previousTheme = Theme.getPreviousTheme(); + if (previousTheme == null) { + return; + } Theme.ThemeAccent previousAccent; if (previousTheme != null && previousTheme.prevAccentId >= 0) { previousAccent = previousTheme.themeAccentsMap.get(previousTheme.prevAccentId);