From b2ad802ba56ab67f90697b1988cff7ef6e1ad9af Mon Sep 17 00:00:00 2001 From: DrKLO Date: Tue, 14 Oct 2014 12:13:16 +0400 Subject: [PATCH] Update secret chats layer --- .../telegram/android/AndroidUtilities.java | 47 ++-- .../org/telegram/android/MessageObject.java | 2 +- .../telegram/android/MessagesController.java | 63 +++++- .../org/telegram/android/MessagesStorage.java | 69 ++++-- .../telegram/android/SendMessagesHelper.java | 208 +++++++++++++----- .../org/telegram/messenger/DispatchQueue.java | 2 +- .../java/org/telegram/messenger/TLRPC.java | 48 ++-- .../java/org/telegram/ui/LoginActivity.java | 9 +- 8 files changed, 295 insertions(+), 153 deletions(-) diff --git a/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java index 8de3f997b..3c2dda04f 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java @@ -9,7 +9,6 @@ package org.telegram.android; import android.app.Activity; -import android.app.ProgressDialog; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -34,8 +33,6 @@ import java.util.Locale; public class AndroidUtilities { - public static ProgressDialog progressDialog; - private static final Hashtable typefaceCache = new Hashtable(); private static int prevOrientation = -10; private static boolean waitingForSms = false; @@ -266,6 +263,22 @@ public class AndroidUtilities { return 0x0000000100000000L | ((long)id & 0x00000000FFFFFFFFL); } + public static int getMyLayerVersion(int layer) { + return layer & 0xffff; + } + + public static int getPeerLayerVersion(int layer) { + return (layer >> 16) & 0xffff; + } + + public static int setMyLayerVersion(int layer, int version) { + return layer & 0xffff0000 | version; + } + + public static int setPeerLayerVersion(int layer, int version) { + return layer & 0x0000ffff | (version << 16); + } + public static void RunOnUIThread(Runnable runnable) { RunOnUIThread(runnable, 0); } @@ -375,32 +388,4 @@ public class AndroidUtilities { } return photoSize; } - - public static void ShowProgressDialog(final Activity activity, final String message) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - if(activity != null && !activity.isFinishing()) { - progressDialog = new ProgressDialog(activity); - if (message != null) { - progressDialog.setMessage(message); - } - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); - progressDialog.show(); - } - } - }); - } - - public static void HideProgressDialog() { - RunOnUIThread(new Runnable() { - @Override - public void run() { - if (progressDialog != null) { - progressDialog.dismiss(); - } - } - }); - } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java index f01e0b358..20c7c11b7 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java @@ -616,7 +616,7 @@ public class MessageObject { } public boolean isSecretMedia() { - return messageOwner.media instanceof TLRPC.TL_messageMediaPhoto && messageOwner.ttl != 0 && messageOwner.ttl <= 60; + return messageOwner instanceof TLRPC.TL_message_secret && messageOwner.media instanceof TLRPC.TL_messageMediaPhoto && messageOwner.ttl != 0 && messageOwner.ttl <= 60; } public static void setIsUnread(TLRPC.Message message, boolean unread) { diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java index da42b0192..f2ee4c2f3 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java @@ -71,6 +71,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter private boolean gettingNewDeleteTask = false; private int currentDeletingTaskTime = 0; private ArrayList currentDeletingTaskMids = null; + private Runnable currentDeleteTaskRunnable = null; public int totalDialogsCount = 0; public boolean loadingDialogs = false; @@ -336,6 +337,12 @@ public class MessagesController implements NotificationCenter.NotificationCenter startingSecretChat = false; statusRequest = 0; statusSettingState = 0; + + if (currentDeleteTaskRunnable != null) { + Utilities.stageQueue.cancelRunnable(currentDeleteTaskRunnable); + currentDeleteTaskRunnable = null; + } + addSupportUser(); } @@ -530,11 +537,15 @@ public class MessagesController implements NotificationCenter.NotificationCenter }); } - private void checkDeletingTask() { + private boolean checkDeletingTask(boolean runnable) { int currentServerTime = ConnectionsManager.getInstance().getCurrentTime(); - if (currentDeletingTaskMids != null && currentDeletingTaskTime != 0 && currentDeletingTaskTime <= currentServerTime) { + if (currentDeletingTaskMids != null && (runnable || currentDeletingTaskTime != 0 && currentDeletingTaskTime <= currentServerTime)) { currentDeletingTaskTime = 0; + if (currentDeleteTaskRunnable != null && !runnable) { + Utilities.stageQueue.cancelRunnable(currentDeleteTaskRunnable); + } + currentDeleteTaskRunnable = null; AndroidUtilities.RunOnUIThread(new Runnable() { @Override public void run() { @@ -550,7 +561,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter }); } }); + return true; } + return false; } public void processLoadedDeleteTask(final int taskTime, final ArrayList messages) { @@ -562,7 +575,21 @@ public class MessagesController implements NotificationCenter.NotificationCenter currentDeletingTaskTime = taskTime; currentDeletingTaskMids = messages; - checkDeletingTask(); + if (currentDeleteTaskRunnable != null) { + Utilities.stageQueue.cancelRunnable(currentDeleteTaskRunnable); + currentDeleteTaskRunnable = null; + } + + if (!checkDeletingTask(false)) { + currentDeleteTaskRunnable = new Runnable() { + @Override + public void run() { + checkDeletingTask(true); + } + }; + int currentServerTime = ConnectionsManager.getInstance().getCurrentTime(); + Utilities.stageQueue.postRunnable(currentDeleteTaskRunnable, (long)Math.abs(currentServerTime - currentDeletingTaskTime) * 1000); + } } else { currentDeletingTaskTime = 0; currentDeletingTaskMids = null; @@ -1069,7 +1096,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter public void updateTimerProc() { long currentTime = System.currentTimeMillis(); - checkDeletingTask(); + checkDeletingTask(false); if (UserConfig.isClientActivated()) { if (ConnectionsManager.getInstance().getPauseTime() == 0 && ApplicationLoader.isScreenOn && !ApplicationLoader.mainInterfacePaused) { @@ -3499,7 +3526,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter } public TLRPC.Message decryptMessage(TLRPC.EncryptedMessage message) { - TLRPC.EncryptedChat chat = getEncryptedChatDB(message.chat_id); + final TLRPC.EncryptedChat chat = getEncryptedChatDB(message.chat_id); if (chat == null) { return null; } @@ -3522,9 +3549,18 @@ public class MessagesController implements NotificationCenter.NotificationCenter from_id = chat.participant_id; } + if (object instanceof TLRPC.TL_decryptedMessageLayer) { + object = ((TLRPC.TL_decryptedMessageLayer) object).message; + } + if (object instanceof TLRPC.TL_decryptedMessage) { TLRPC.TL_decryptedMessage decryptedMessage = (TLRPC.TL_decryptedMessage)object; - TLRPC.TL_message_secret newMessage = new TLRPC.TL_message_secret(); + TLRPC.TL_message newMessage = null; + if (AndroidUtilities.getPeerLayerVersion(chat.layer) >= 17) { + newMessage = new TLRPC.TL_message_secret(); + } else { + newMessage = new TLRPC.TL_message(); + } newMessage.message = decryptedMessage.message; newMessage.date = message.date; newMessage.local_id = newMessage.id = UserConfig.getNewMessageId(); @@ -3666,7 +3702,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter } return newMessage; } else if (object instanceof TLRPC.TL_decryptedMessageService) { - TLRPC.TL_decryptedMessageService serviceMessage = (TLRPC.TL_decryptedMessageService)object; + final TLRPC.TL_decryptedMessageService serviceMessage = (TLRPC.TL_decryptedMessageService)object; if (serviceMessage.action instanceof TLRPC.TL_decryptedMessageActionSetMessageTTL || serviceMessage.action instanceof TLRPC.TL_decryptedMessageActionScreenshotMessages) { TLRPC.TL_messageService newMessage = new TLRPC.TL_messageService(); if (serviceMessage.action instanceof TLRPC.TL_decryptedMessageActionSetMessageTTL) { @@ -3727,6 +3763,19 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (!serviceMessage.action.random_ids.isEmpty()) { MessagesStorage.getInstance().createTaskForSecretChat(chat.id, 0, message.date, 1, serviceMessage.action.random_ids); } + } else if (serviceMessage.action instanceof TLRPC.TL_decryptedMessageActionNotifyLayer) { + AndroidUtilities.RunOnUIThread(new Runnable() { + @Override + public void run() { + int currentPeerLayer = AndroidUtilities.getPeerLayerVersion(chat.layer); + chat.layer = 0; + chat.layer = AndroidUtilities.setPeerLayerVersion(chat.layer, serviceMessage.action.layer); + MessagesStorage.getInstance().updateEncryptedChatLayer(chat); + if (currentPeerLayer < 17) { + SendMessagesHelper.getInstance().sendNotifyLayerMessage(chat); + } + } + }); } else { return null; } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java index e47cb8667..ff3b6c2d4 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java @@ -93,7 +93,7 @@ public class MessagesStorage { database.executeFast("CREATE TABLE users(uid INTEGER PRIMARY KEY, name TEXT, status INTEGER, data BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER, media INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)").stepThis().dispose(); - database.executeFast("CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)").stepThis().dispose(); + database.executeFast("CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER, layer INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)").stepThis().dispose(); @@ -136,7 +136,7 @@ public class MessagesStorage { database.executeFast("CREATE INDEX IF NOT EXISTS mid_out_idx_messages ON messages(mid, out);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS task_idx_messages ON messages(uid, out, read_state, ttl, date, send_state);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS send_state_idx_messages ON messages(mid, send_state, date) WHERE mid < 0 AND send_state = 1;").stepThis().dispose(); - database.executeFast("PRAGMA user_version = 6").stepThis().dispose(); + database.executeFast("PRAGMA user_version = 7").stepThis().dispose(); } else { try { SQLiteCursor cursor = database.queryFinalized("SELECT seq, pts, date, qts, lsv, sg, pbytes FROM params WHERE id = 1"); @@ -168,7 +168,7 @@ public class MessagesStorage { } int version = database.executeInt("PRAGMA user_version"); - if (version < 6) { + if (version < 7) { updateDbToLastVersion(version); } } @@ -291,7 +291,7 @@ public class MessagesStorage { } if (version == 6 && version < 7) { database.executeFast("ALTER TABLE enc_chats ADD COLUMN layer INTEGER default 0").stepThis().dispose(); - database.executeFast("PRAGMA user_version = 6").stepThis().dispose(); + database.executeFast("PRAGMA user_version = 7").stepThis().dispose(); version = 7; } } catch (Exception e) { @@ -491,7 +491,7 @@ public class MessagesStorage { if (!encryptedChatIds.isEmpty()) { String stringToLoad = TextUtils.join(",", encryptedChatIds); - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid IN(%s)", stringToLoad)); + cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid IN(%s)", stringToLoad)); while (cursor.next()) { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { @@ -504,6 +504,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } buffersStorage.reuseFreeBuffer(data); } @@ -1231,7 +1232,7 @@ public class MessagesStorage { cursor.dispose(); if (needEncrypted) { - cursor = database.queryFinalized("SELECT q.data, q.name, q.user, q.g, q.authkey, q.ttl, u.data, u.status FROM enc_chats as q INNER JOIN dialogs as d ON (q.uid << 32) = d.did INNER JOIN users as u ON q.user = u.uid"); + cursor = database.queryFinalized("SELECT q.data, u.name, q.user, q.g, q.authkey, q.ttl, u.data, u.status, q.layer FROM enc_chats as q INNER JOIN dialogs as d ON (q.uid << 32) = d.did INNER JOIN users as u ON q.user = u.uid"); while (cursor.next()) { String name = cursor.stringValue(1); if (name.startsWith(q) || name.contains(" " + q)) { @@ -1243,6 +1244,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(3); chat.auth_key = cursor.byteArrayValue(4); chat.ttl = cursor.intValue(5); + chat.layer = cursor.intValue(8); TLRPC.User user = (TLRPC.User)TLClassStore.Instance().TLdeserialize(data2, data2.readInt32()); if (user.status != null) { @@ -1718,7 +1720,7 @@ public class MessagesStorage { if (!encryptedChatIds.isEmpty()) { String stringToLoad = TextUtils.join(",", encryptedChatIds); - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid IN(%s)", stringToLoad)); + cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid IN(%s)", stringToLoad)); while (cursor.next()) { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { @@ -1731,6 +1733,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } buffersStorage.reuseFreeBuffer(data); } @@ -2147,6 +2150,30 @@ public class MessagesStorage { }); } + public void updateEncryptedChatLayer(final TLRPC.EncryptedChat chat) { + if (chat == null) { + return; + } + storageQueue.postRunnable(new Runnable() { + @Override + public void run() { + SQLitePreparedStatement state = null; + try { + state = database.executeFast("UPDATE enc_chats SET layer = ? WHERE uid = ?"); + state.bindInteger(1, chat.layer); + state.bindInteger(2, chat.id); + state.step(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } finally { + if (state != null) { + state.dispose(); + } + } + } + }); + } + public void updateEncryptedChat(final TLRPC.EncryptedChat chat) { if (chat == null) { return; @@ -2156,7 +2183,7 @@ public class MessagesStorage { public void run() { SQLitePreparedStatement state = null; try { - state = database.executeFast("UPDATE enc_chats SET data = ?, g = ?, authkey = ?, ttl = ? WHERE uid = ?"); + state = database.executeFast("UPDATE enc_chats SET data = ?, g = ?, authkey = ?, ttl = ?, layer = ? WHERE uid = ?"); ByteBufferDesc data = buffersStorage.getFreeBuffer(chat.getObjectSize()); ByteBufferDesc data2 = buffersStorage.getFreeBuffer(chat.a_or_b != null ? chat.a_or_b.length : 1); ByteBufferDesc data3 = buffersStorage.getFreeBuffer(chat.auth_key != null ? chat.auth_key.length : 1); @@ -2172,6 +2199,7 @@ public class MessagesStorage { state.bindByteBuffer(3, data3.buffer); state.bindInteger(4, chat.ttl); state.bindInteger(5, chat.id); + state.bindInteger(6, chat.layer); state.step(); buffersStorage.reuseFreeBuffer(data); buffersStorage.reuseFreeBuffer(data2); @@ -2196,7 +2224,7 @@ public class MessagesStorage { public void run() { try { int userToLoad = 0; - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid = %d", chat_id)); + SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid = %d", chat_id)); if (cursor.next()) { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { @@ -2207,6 +2235,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } buffersStorage.reuseFreeBuffer(data); } @@ -2247,7 +2276,7 @@ public class MessagesStorage { @Override public void run() { try { - SQLitePreparedStatement state = database.executeFast("REPLACE INTO enc_chats VALUES(?, ?, ?, ?, ?, ?, ?)"); + SQLitePreparedStatement state = database.executeFast("REPLACE INTO enc_chats VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); ByteBufferDesc data = buffersStorage.getFreeBuffer(chat.getObjectSize()); ByteBufferDesc data2 = buffersStorage.getFreeBuffer(chat.a_or_b != null ? chat.a_or_b.length : 1); ByteBufferDesc data3 = buffersStorage.getFreeBuffer(chat.auth_key != null ? chat.auth_key.length : 1); @@ -2271,6 +2300,7 @@ public class MessagesStorage { state.bindByteBuffer(5, data2.buffer); state.bindByteBuffer(6, data3.buffer); state.bindInteger(7, chat.ttl); + state.bindInteger(8, chat.layer); state.step(); state.dispose(); buffersStorage.reuseFreeBuffer(data); @@ -2441,7 +2471,7 @@ public class MessagesStorage { } private int getMessageMediaType(TLRPC.Message message) { - if (message.media instanceof TLRPC.TL_messageMediaPhoto && message.ttl != 0 && message.ttl <= 60) { + if (message instanceof TLRPC.TL_message_secret && message.media instanceof TLRPC.TL_messageMediaPhoto && message.ttl != 0 && message.ttl <= 60) { return 1; } return 0; @@ -2482,7 +2512,7 @@ public class MessagesStorage { messagesIdsMap.put(message.id, dialog_id); } - if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto && (message.ttl == 0 || message.ttl > 60)) { + if (getMessageMediaType(message) == 0) { if (messageMediaIds.length() > 0) { messageMediaIds.append(","); } @@ -2566,7 +2596,7 @@ public class MessagesStorage { state3.step(); } - if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto && (message.ttl == 0 || message.ttl > 60)) { + if (getMessageMediaType(message) == 0) { state2.requery(); state2.bindInteger(1, messageId); state2.bindLong(2, dialog_id); @@ -3128,7 +3158,7 @@ public class MessagesStorage { if (!encryptedToLoad.isEmpty()) { String toLoad = TextUtils.join(",", encryptedToLoad); - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid IN(%s)", toLoad)); + cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid IN(%s)", toLoad)); while (cursor.next()) { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { @@ -3141,6 +3171,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } buffersStorage.reuseFreeBuffer(data); } @@ -3242,7 +3273,7 @@ public class MessagesStorage { state.bindByteBuffer(6, data.buffer); state.bindInteger(7, (MessageObject.isOut(message) ? 1 : 0)); state.bindInteger(8, 0); - state.bindInteger(9, getMessageMediaType(message)); + state.bindInteger(9, 0); state.step(); if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto) { @@ -3384,7 +3415,7 @@ public class MessagesStorage { if (!encryptedToLoad.isEmpty()) { String toLoad = TextUtils.join(",", encryptedToLoad); - cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid IN(%s)", toLoad)); + cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid IN(%s)", toLoad)); while (cursor.next()) { try { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); @@ -3399,6 +3430,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } } buffersStorage.reuseFreeBuffer(data); @@ -3509,7 +3541,7 @@ public class MessagesStorage { state.bindByteBuffer(6, data.buffer); state.bindInteger(7, (MessageObject.isOut(message) ? 1 : 0)); state.bindInteger(8, 0); - state.bindInteger(9, getMessageMediaType(message)); + state.bindInteger(9, 0); state.step(); state2.bindLong(1, uid); @@ -3672,7 +3704,7 @@ public class MessagesStorage { public TLRPC.EncryptedChat getEncryptedChat(final int chat_id) { TLRPC.EncryptedChat chat = null; try { - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl FROM enc_chats WHERE uid = %d", chat_id)); + SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT data, user, g, authkey, ttl, layer FROM enc_chats WHERE uid = %d", chat_id)); if (cursor.next()) { ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(0)); if (data != null && cursor.byteBufferValue(0, data.buffer) != 0) { @@ -3682,6 +3714,7 @@ public class MessagesStorage { chat.a_or_b = cursor.byteArrayValue(2); chat.auth_key = cursor.byteArrayValue(3); chat.ttl = cursor.intValue(4); + chat.layer = cursor.intValue(5); } } buffersStorage.reuseFreeBuffer(data); diff --git a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java index 63b2b1c1c..f8fb052be 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java @@ -29,9 +29,12 @@ import java.util.HashMap; public class SendMessagesHelper implements NotificationCenter.NotificationCenterDelegate { + public static final int CURRENT_SECRET_CHAT_LAYER = 17; + private TLRPC.ChatParticipants currentChatInfo = null; private HashMap> delayedMessages = new HashMap>(); private HashMap unsentMessages = new HashMap(); + private ArrayList sendingNotifyLayer = new ArrayList(); private class DelayedMessage { public TLObject sendRequest; @@ -70,6 +73,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter public void cleanUp() { delayedMessages.clear(); + sendingNotifyLayer.clear(); + unsentMessages.clear(); currentChatInfo = null; } @@ -135,7 +140,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } else if (encryptedFile != null && message.sendEncryptedRequest != null) { message.sendEncryptedRequest.media.key = encryptedFile.key; message.sendEncryptedRequest.media.iv = encryptedFile.iv; - performSendEncryptedRequest(message.sendEncryptedRequest, message.obj, message.encryptedChat, encryptedFile, message.originalPath); + performSendEncryptedRequest(message.sendEncryptedRequest, message.obj, message.encryptedChat, encryptedFile, message.originalPath, null); arr.remove(a); a--; } @@ -366,6 +371,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter int type = -1; int lower_id = (int) peer; int high_id = (int) (peer >> 32); + TLRPC.EncryptedChat encryptedChat = null; + TLRPC.InputPeer sendToPeer = null; + ArrayList sendToPeers = null; + if (lower_id == 0) { + encryptedChat = MessagesController.getInstance().getEncryptedChat(high_id); + } if (retry) { newMsg = msgObj.messageOwner; @@ -412,19 +423,19 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } } else { if (message != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaEmpty(); type = 0; newMsg.message = message; } else if (lat != null && lon != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaGeo(); newMsg.media.geo = new TLRPC.TL_geoPoint(); @@ -433,10 +444,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.message = ""; type = 1; } else if (photo != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaPhoto(); newMsg.media.photo = photo; @@ -445,10 +456,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter TLRPC.FileLocation location1 = photo.sizes.get(photo.sizes.size() - 1).location; newMsg.attachPath = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + location1.volume_id + "_" + location1.local_id + ".jpg"; } else if (video != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaVideo(); newMsg.media.video = video; @@ -480,10 +491,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter type = 4; } } else if (user != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaContact(); newMsg.media.phone_number = user.phone; @@ -493,10 +504,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.message = ""; type = 6; } else if (document != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaDocument(); newMsg.media.document = document; @@ -504,10 +515,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.message = "-1"; newMsg.attachPath = path; } else if (audio != null) { - if (lower_id != 0) { - newMsg = new TLRPC.TL_message(); - } else { + if (encryptedChat != null && AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { newMsg = new TLRPC.TL_message_secret(); + } else { + newMsg = new TLRPC.TL_message(); } newMsg.media = new TLRPC.TL_messageMediaAudio(); newMsg.media.audio = audio; @@ -526,9 +537,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.date = ConnectionsManager.getInstance().getCurrentTime(); newMsg.flags |= TLRPC.MESSAGE_FLAG_UNREAD; newMsg.dialog_id = peer; - TLRPC.EncryptedChat encryptedChat = null; - TLRPC.InputPeer sendToPeer = null; - ArrayList sendToPeers = null; if (lower_id != 0) { if (high_id == 1) { if (currentChatInfo == null) { @@ -571,7 +579,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } } } else { - encryptedChat = MessagesController.getInstance().getEncryptedChat(high_id); newMsg.to_id = new TLRPC.TL_peerUser(); if (encryptedChat.participant_id == UserConfig.getClientUserId()) { newMsg.to_id.user_id = encryptedChat.admin_id; @@ -581,7 +588,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.ttl = encryptedChat.ttl; } - MessageObject newMsgObj = new MessageObject(newMsg, null, 2); newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING; @@ -616,7 +622,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter Utilities.random.nextBytes(reqSend.random_bytes); reqSend.message = message; reqSend.media = new TLRPC.TL_decryptedMessageMediaEmpty(); - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null, null); } } else if (type >= 1 && type <= 3 || type >= 5 && type <= 8) { if (encryptedChat == null) { @@ -771,7 +777,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter reqSend.media = new TLRPC.TL_decryptedMessageMediaGeoPoint(); reqSend.media.lat = lat; reqSend.media._long = lon; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null, null); } else if (type == 2) { TLRPC.PhotoSize small = photo.sizes.get(0); TLRPC.PhotoSize big = photo.sizes.get(photo.sizes.size() - 1); @@ -797,10 +803,14 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter encryptedFile.access_hash = big.location.secret; reqSend.media.key = big.location.key; reqSend.media.iv = big.location.iv; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null, null); } } else if (type == 3) { - reqSend.media = new TLRPC.TL_decryptedMessageMediaVideo_old(); + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend.media = new TLRPC.TL_decryptedMessageMediaVideo(); + } else { + reqSend.media = new TLRPC.TL_decryptedMessageMediaVideo_old(); + } reqSend.media.duration = video.duration; reqSend.media.size = video.size; reqSend.media.w = video.w; @@ -824,7 +834,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter encryptedFile.access_hash = video.access_hash; reqSend.media.key = video.key; reqSend.media.iv = video.iv; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null, null); } } else if (type == 6) { reqSend.media = new TLRPC.TL_decryptedMessageMediaContact(); @@ -832,7 +842,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter reqSend.media.first_name = user.first_name; reqSend.media.last_name = user.last_name; reqSend.media.user_id = user.id; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null, null); } else if (type == 7) { reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument(); reqSend.media.size = document.size; @@ -862,10 +872,14 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter encryptedFile.access_hash = document.access_hash; reqSend.media.key = document.key; reqSend.media.iv = document.iv; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null, null); } } else if (type == 8) { - reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio_old(); + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio(); + } else { + reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio_old(); + } reqSend.media.duration = audio.duration; reqSend.media.size = audio.size; reqSend.media.mime_type = "audio/ogg"; @@ -1102,14 +1116,28 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter }), true, RPCRequest.RPCRequestClassGeneric | RPCRequest.RPCRequestClassCanCompress, ConnectionsManager.DEFAULT_DATACENTER_ID); } - private void performSendEncryptedRequest(final TLRPC.DecryptedMessage req, final MessageObject newMsgObj, final TLRPC.EncryptedChat chat, final TLRPC.InputEncryptedFile encryptedFile, final String originalPath) { + private void performSendEncryptedRequest(final TLRPC.DecryptedMessage req, final MessageObject newMsgObj, final TLRPC.EncryptedChat chat, final TLRPC.InputEncryptedFile encryptedFile, final String originalPath, final Runnable callback) { if (req == null || chat.auth_key == null || chat instanceof TLRPC.TL_encryptedChatRequested || chat instanceof TLRPC.TL_encryptedChatWaiting) { return; } - int len = req.getObjectSize(); + TLObject toEncryptObject = null; + if (AndroidUtilities.getPeerLayerVersion(chat.layer) >= 17) { + TLRPC.TL_decryptedMessageLayer layer = new TLRPC.TL_decryptedMessageLayer(); + layer.layer = CURRENT_SECRET_CHAT_LAYER; + layer.in_seq_no = 0; //TODO + layer.out_seq_no = 0; + layer.message = req; + layer.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(layer.random_bytes); + toEncryptObject = layer; + } else { + toEncryptObject = req; + } + + int len = toEncryptObject.getObjectSize(); ByteBufferDesc toEncrypt = BuffersStorage.getInstance().getFreeBuffer(4 + len); toEncrypt.writeInt32(len); - req.serializeToStream(toEncrypt); + toEncryptObject.serializeToStream(toEncrypt); byte[] messageKeyFull = Utilities.computeSHA1(toEncrypt.buffer); byte[] messageKey = new byte[16]; @@ -1162,6 +1190,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ConnectionsManager.getInstance().performRpc(reqToSend, new RPCRequest.RPCRequestDelegate() { @Override public void run(TLObject response, TLRPC.TL_error error) { + if (error == null && callback != null) { + callback.run(); + } if (newMsgObj != null) { if (error == null) { final String attachPath = newMsgObj.messageOwner.attachPath; @@ -1436,38 +1467,89 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (!(encryptedChat instanceof TLRPC.TL_encryptedChat)) { return; } - TLRPC.TL_decryptedMessageService_old reqSend = new TLRPC.TL_decryptedMessageService_old(); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } reqSend.random_id = getNextRandomId(); - reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; - Utilities.random.nextBytes(reqSend.random_bytes); reqSend.action = new TLRPC.TL_decryptedMessageActionReadMessages(); reqSend.action.random_ids = random_ids; - performSendEncryptedRequest(reqSend, null, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, null, encryptedChat, null, null, null); } public void sendMessagesDeleteMessage(ArrayList random_ids, TLRPC.EncryptedChat encryptedChat) { if (!(encryptedChat instanceof TLRPC.TL_encryptedChat)) { return; } - TLRPC.TL_decryptedMessageService_old reqSend = new TLRPC.TL_decryptedMessageService_old(); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } reqSend.random_id = getNextRandomId(); - reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; - Utilities.random.nextBytes(reqSend.random_bytes); reqSend.action = new TLRPC.TL_decryptedMessageActionDeleteMessages(); reqSend.action.random_ids = random_ids; - performSendEncryptedRequest(reqSend, null, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, null, encryptedChat, null, null, null); } public void sendClearHistoryMessage(TLRPC.EncryptedChat encryptedChat) { if (!(encryptedChat instanceof TLRPC.TL_encryptedChat)) { return; } - TLRPC.TL_decryptedMessageService_old reqSend = new TLRPC.TL_decryptedMessageService_old(); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } reqSend.random_id = getNextRandomId(); - reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; - Utilities.random.nextBytes(reqSend.random_bytes); reqSend.action = new TLRPC.TL_decryptedMessageActionFlushHistory(); - performSendEncryptedRequest(reqSend, null, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, null, encryptedChat, null, null, null); + } + + public void sendNotifyLayerMessage(final TLRPC.EncryptedChat encryptedChat) { + if (!(encryptedChat instanceof TLRPC.TL_encryptedChat)) { + return; + } + if (sendingNotifyLayer.contains(encryptedChat.id)) { + return; + } + sendingNotifyLayer.add(encryptedChat.id); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } + reqSend.random_id = getNextRandomId(); + reqSend.action = new TLRPC.TL_decryptedMessageActionNotifyLayer(); + reqSend.action.layer = CURRENT_SECRET_CHAT_LAYER; + Runnable callback = new Runnable() { + @Override + public void run() { + AndroidUtilities.RunOnUIThread(new Runnable() { + @Override + public void run() { + TLRPC.EncryptedChat chat = MessagesController.getInstance().getEncryptedChat(encryptedChat.id); + sendingNotifyLayer.remove(chat.id); + chat.layer = AndroidUtilities.setMyLayerVersion(chat.layer, CURRENT_SECRET_CHAT_LAYER); + MessagesStorage.getInstance().updateEncryptedChatLayer(chat); + } + }); + } + }; + performSendEncryptedRequest(reqSend, null, encryptedChat, null, null, callback); } public void sendTTLMessage(TLRPC.EncryptedChat encryptedChat) { @@ -1502,13 +1584,18 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter MessagesController.getInstance().updateInterfaceWithMessages(newMsg.dialog_id, objArr); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); - TLRPC.TL_decryptedMessageService_old reqSend = new TLRPC.TL_decryptedMessageService_old(); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } reqSend.random_id = newMsg.random_id; - reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; - Utilities.random.nextBytes(reqSend.random_bytes); reqSend.action = new TLRPC.TL_decryptedMessageActionSetMessageTTL(); reqSend.action.ttl_seconds = encryptedChat.ttl; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null, null); } public void sendScreenshotMessage(TLRPC.EncryptedChat encryptedChat, ArrayList random_ids) { @@ -1548,12 +1635,17 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter MessagesController.getInstance().updateInterfaceWithMessages(newMsg.dialog_id, objArr); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); - TLRPC.TL_decryptedMessageService_old reqSend = new TLRPC.TL_decryptedMessageService_old(); + TLRPC.TL_decryptedMessageService reqSend = null; + if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) { + reqSend = new TLRPC.TL_decryptedMessageService(); + } else { + reqSend = new TLRPC.TL_decryptedMessageService_old(); + reqSend.random_bytes = new byte[Math.max(1, (int) Math.ceil(Utilities.random.nextDouble() * 16))]; + Utilities.random.nextBytes(reqSend.random_bytes); + } reqSend.random_id = newMsg.random_id; - reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; - Utilities.random.nextBytes(reqSend.random_bytes); reqSend.action = action; - performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null); + performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null, null); } private void putToDelayedMessages(String location, DelayedMessage message) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/DispatchQueue.java b/TMessagesProj/src/main/java/org/telegram/messenger/DispatchQueue.java index 15a573a93..2c68fdf6e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/DispatchQueue.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/DispatchQueue.java @@ -63,7 +63,7 @@ public class DispatchQueue extends Thread { postRunnable(runnable, 0); } - public void postRunnable(Runnable runnable, int delay) { + public void postRunnable(Runnable runnable, long delay) { if (handler == null) { synchronized (handlerSyncObject) { if (handler == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java index eb33d9199..1de7d7df0 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java @@ -2557,8 +2557,6 @@ public class TLRPC { public static class DecryptedMessage extends TLObject { public long random_id; public byte[] random_bytes; - public int in_seq_no; - public int out_seq_no; public DecryptedMessageAction action; public int ttl; public String message; @@ -2566,36 +2564,27 @@ public class TLRPC { } public static class TL_decryptedMessageService extends DecryptedMessage { - public static int constructor = 0xda431693; + public static int constructor = 0x73164160; public void readParams(AbsSerializedData stream) { random_id = stream.readInt64(); - random_bytes = stream.readByteArray(); - in_seq_no = stream.readInt32(); - out_seq_no = stream.readInt32(); action = (DecryptedMessageAction)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); } public void serializeToStream(AbsSerializedData stream) { stream.writeInt32(constructor); stream.writeInt64(random_id); - stream.writeByteArray(random_bytes); - stream.writeInt32(in_seq_no); - stream.writeInt32(out_seq_no); action.serializeToStream(stream); } } public static class TL_decryptedMessage extends DecryptedMessage { - public static int constructor = 0x4e748938; + public static int constructor = 0x204d3878; public void readParams(AbsSerializedData stream) { random_id = stream.readInt64(); - random_bytes = stream.readByteArray(); - in_seq_no = stream.readInt32(); - out_seq_no = stream.readInt32(); ttl = stream.readInt32(); message = stream.readString(); media = (DecryptedMessageMedia)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); @@ -2604,9 +2593,6 @@ public class TLRPC { public void serializeToStream(AbsSerializedData stream) { stream.writeInt32(constructor); stream.writeInt64(random_id); - stream.writeByteArray(random_bytes); - stream.writeInt32(in_seq_no); - stream.writeInt32(out_seq_no); stream.writeInt32(ttl); stream.writeString(message); media.serializeToStream(stream); @@ -6281,19 +6267,28 @@ public class TLRPC { } public static class TL_decryptedMessageLayer extends TLObject { - public static int constructor = 0x99a438cf; + public static int constructor = 0x1be31789; + public byte[] random_bytes; public int layer; + public int in_seq_no; + public int out_seq_no; public DecryptedMessage message; public void readParams(AbsSerializedData stream) { + random_bytes = stream.readByteArray(); layer = stream.readInt32(); + in_seq_no = stream.readInt32(); + out_seq_no = stream.readInt32(); message = (DecryptedMessage)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); } public void serializeToStream(AbsSerializedData stream) { stream.writeInt32(constructor); + stream.writeByteArray(random_bytes); stream.writeInt32(layer); + stream.writeInt32(in_seq_no); + stream.writeInt32(out_seq_no); message.serializeToStream(stream); } } @@ -8781,6 +8776,7 @@ public class TLRPC { public long dialog_id; public int ttl; public int destroyTime; + public int layer; public VideoEditedInfo videoEditedInfo = null; } @@ -9663,24 +9659,6 @@ public class TLRPC { } } - public static class decryptedMessageLayer extends TLObject { - public static int constructor = 0x99a438cf; - - public int layer; - public TLObject message; - - public void readParams(AbsSerializedData stream) { - layer = stream.readInt32(); - message = TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); - } - - public void serializeToStream(AbsSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(layer); - message.serializeToStream(stream); - } - } - public static class TL_encryptedChat_old extends TL_encryptedChat { public static int constructor = 0x6601d14f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java index aa2495a78..4dc2997f9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java @@ -26,7 +26,6 @@ import org.telegram.android.AndroidUtilities; import org.telegram.messenger.FileLog; import org.telegram.android.LocaleController; import org.telegram.messenger.R; -import org.telegram.messenger.Utilities; import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.BaseFragment; @@ -55,7 +54,13 @@ public class LoginActivity extends BaseFragment implements SlideView.SlideViewDe v.onDestroyActivity(); } } - Utilities.HideProgressDialog(getParentActivity()); + if (progressDialog != null) { + try { + progressDialog.dismiss(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } } @Override