Update to 2.3.2

This commit is contained in:
DrKLO 2015-01-09 15:50:15 +03:00
parent 4e03bc1a75
commit 213c2269c0
14 changed files with 234 additions and 66 deletions

View File

@ -82,7 +82,7 @@ android {
defaultConfig {
minSdkVersion 8
targetSdkVersion 21
versionCode 414
versionName "2.3.1"
versionCode 415
versionName "2.3.2"
}
}

View File

@ -87,7 +87,11 @@ LOCAL_SRC_FILES := \
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_ARM_MODE := thumb
else
LOCAL_ARM_MODE := arm
endif
LOCAL_MODULE := sqlite
LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
@ -106,7 +110,11 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops
LOCAL_LDLIBS := -ljnigraphics -llog
LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_ARM_MODE := thumb
else
LOCAL_ARM_MODE := arm
endif
LOCAL_SRC_FILES := \
./opus/src/opus.c \

View File

@ -1350,10 +1350,14 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
fileDecodingQueue.postRunnable(new Runnable() {
@Override
public void run() {
try {
if (playingMessageObject != null && playingMessageObject.audioProgress != 0) {
lastPlayPcm = (long)(currentTotalPcmDuration * playingMessageObject.audioProgress);
seekOpusFile(playingMessageObject.audioProgress);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
synchronized (playerSync) {
freePlayerBuffers.addAll(usedPlayerBuffers);
usedPlayerBuffers.clear();

View File

@ -60,6 +60,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
private ArrayList<Integer> loadingFullChats = new ArrayList<>();
private ArrayList<Integer> loadedFullChats = new ArrayList<>();
private ArrayList<Integer> reloadingMessages = new ArrayList<>();
private boolean gettingNewDeleteTask = false;
private int currentDeletingTaskTime = 0;
private ArrayList<Integer> currentDeletingTaskMids = null;
@ -314,6 +316,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
loadedFullUsers.clear();
loadingFullUsers.clear();
loadedFullUsers.clear();
reloadingMessages.clear();
updatesStartWaitTime = 0;
currentDeletingTaskTime = 0;
@ -548,6 +551,47 @@ public class MessagesController implements NotificationCenter.NotificationCenter
ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid);
}
private void reloadMessages(final ArrayList<Integer> mids, final long dialog_id) {
final TLRPC.TL_messages_getMessages req = new TLRPC.TL_messages_getMessages();
for (Integer mid : mids) {
if (reloadingMessages.contains(mid)) {
continue;
}
req.id.add(mid);
}
if (req.id.isEmpty()) {
return;
}
reloadingMessages.addAll(req.id);
ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() {
@Override
public void run(TLObject response, TLRPC.TL_error error) {
if (error == null) {
TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response;
MessagesStorage.getInstance().putMessages(messagesRes, dialog_id);
final ArrayList<MessageObject> objects = new ArrayList<>();
ArrayList<Integer> messagesToReload = null;
for (TLRPC.Message message : messagesRes.messages) {
message.dialog_id = dialog_id;
final HashMap<Integer, TLRPC.User> usersLocal = new HashMap<>();
for (TLRPC.User u : messagesRes.users) {
usersLocal.put(u.id, u);
}
objects.add(new MessageObject(message, usersLocal, 2));
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.replaceMessagesObjects, dialog_id, objects);
}
});
}
reloadingMessages.removeAll(req.id);
}
});
}
protected void processNewDifferenceParams(int seq, int pts, int date) {
if (MessagesStorage.lastSeqValue + 1 == seq) {
if (seq != -1) {
@ -1443,9 +1487,21 @@ public class MessagesController implements NotificationCenter.NotificationCenter
usersLocal.put(u.id, u);
}
final ArrayList<MessageObject> objects = new ArrayList<>();
ArrayList<Integer> messagesToReload = null;
for (TLRPC.Message message : messagesRes.messages) {
message.dialog_id = dialog_id;
objects.add(new MessageObject(message, usersLocal, 2));
if (isCache && message.media instanceof TLRPC.TL_messageMediaUnsupported) {
if (message.media.bytes.length == 0 || message.media.bytes.length == 1 && message.media.bytes[0] < TLRPC.LAYER) {
if (messagesToReload == null) {
messagesToReload = new ArrayList<>();
}
messagesToReload.add(message.id);
}
}
}
if (messagesToReload != null) {
reloadMessages(messagesToReload, dialog_id);
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override

View File

@ -2734,6 +2734,8 @@ public class MessagesStorage {
int downloadMediaMask = 0;
for (TLRPC.Message message : messages) {
fixUnsupportedMedia(message);
long dialog_id = message.dialog_id;
if (dialog_id == 0) {
if (message.to_id.chat_id != 0) {
@ -3499,6 +3501,15 @@ public class MessagesStorage {
}
}
private void fixUnsupportedMedia(TLRPC.Message message) {
if (message != null && message.media instanceof TLRPC.TL_messageMediaUnsupported && message.media.bytes != null) {
if (message.media.bytes.length == 0) {
message.media.bytes = new byte[1];
message.media.bytes[0] = TLRPC.LAYER;
}
}
}
public void putMessages(final TLRPC.messages_Messages messages, final long dialog_id) {
if (messages.messages.isEmpty()) {
return;
@ -3512,6 +3523,7 @@ public class MessagesStorage {
SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)");
for (TLRPC.Message message : messages.messages) {
fixUnsupportedMedia(message);
state.requery();
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
message.serializeToStream(data);
@ -3680,6 +3692,7 @@ public class MessagesStorage {
uid = -dialog.peer.chat_id;
}
TLRPC.Message message = new_dialogMessage.get(dialog.top_message);
fixUnsupportedMedia(message);
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
message.serializeToStream(data);

View File

@ -47,6 +47,7 @@ public class NotificationCenter {
public static final int privacyRulesUpdated = totalEvents++;
public static final int updateMessageMedia = totalEvents++;
public static final int recentImagesDidLoaded = totalEvents++;
public static final int replaceMessagesObjects = totalEvents++;
public static final int httpFileDidLoaded = totalEvents++;
public static final int httpFileDidFailedLoad = totalEvents++;

View File

@ -38,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class SecretChatHelper {
public static final int CURRENT_SECRET_CHAT_LAYER = 20;
public static final int CURRENT_SECRET_CHAT_LAYER = 23;
private ArrayList<Integer> sendingNotifyLayer = new ArrayList<>();
private HashMap<Integer, ArrayList<TLRPC.TL_decryptedMessageHolder>> secretHolesQueue = new HashMap<>();

View File

@ -1032,6 +1032,23 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
reqSend.media.user_id = user.id;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
} else if (type == 7) {
boolean isSticker = false;
for (TLRPC.DocumentAttribute attribute : document.attributes) {
if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
isSticker = true;
}
}
if (isSticker) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaExternalDocument();
reqSend.media.id = document.id;
reqSend.media.date = document.date;
reqSend.media.mime_type = document.mime_type;
reqSend.media.size = document.size;
((TLRPC.TL_decryptedMessageMediaExternalDocument) reqSend.media).thumbImage = document.thumb;
reqSend.media.dc_id = document.dc_id;
reqSend.media.attributes = document.attributes;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
} else {
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
reqSend.media.size = document.size;
if (!(document.thumb instanceof TLRPC.TL_photoSizeEmpty)) {
@ -1045,6 +1062,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
}
reqSend.media.file_name = FileLoader.getDocumentFileName(document);
reqSend.media.mime_type = document.mime_type;
if (document.access_hash == 0) {
DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
@ -1065,6 +1083,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
reqSend.media.iv = document.iv;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, encryptedFile, null);
}
}
} else if (type == 8) {
if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio();
@ -1544,6 +1563,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
}
boolean isEncrypted = (int)dialog_id == 0;
boolean allowSticker = !isEncrypted;
String name = f.getName();
if (name == null) {
@ -1591,7 +1611,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
FileLog.e("tmessages", e);
}
}
if (document.mime_type.equals("image/webp") && !isEncrypted) {
if (document.mime_type.equals("image/webp") && allowSticker) {
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
try {
bmOptions.inJustDecodeBounds = true;

View File

@ -14,8 +14,9 @@ import java.util.Locale;
@SuppressWarnings("unchecked")
public class TLRPC {
public static int MESSAGE_FLAG_UNREAD = 1;
public static int MESSAGE_FLAG_OUT = 2;
public static final int MESSAGE_FLAG_UNREAD = 1;
public static final int MESSAGE_FLAG_OUT = 2;
public static final int LAYER = 22;
public static class ChatPhoto extends TLObject {
public FileLocation photo_small;
@ -10831,7 +10832,7 @@ public class TLRPC {
public static class invokeWithLayer extends TLObject {
public static int constructor = 0xda9b0d0d;
public int layer = 22;
public int layer = LAYER;
public TLObject query;
public void serializeToStream(AbsSerializedData stream) {

View File

@ -210,6 +210,7 @@ public class StickersAdapter extends RecyclerView.Adapter implements Notificatio
}
final HashMap<String, ArrayList<TLRPC.Document>> result = new HashMap<>();
for (TLRPC.TL_stickerPack stickerPack : res.packs) {
if (stickerPack != null && stickerPack.emoticon != null) {
ArrayList<TLRPC.Document> arrayList = result.get(stickerPack.emoticon);
for (Long id : stickerPack.documents) {
TLRPC.Document document = documents.get(id);
@ -222,6 +223,7 @@ public class StickersAdapter extends RecyclerView.Adapter implements Notificatio
}
}
}
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {

View File

@ -93,6 +93,7 @@ import org.telegram.ui.Components.TimerDrawable;
import org.telegram.ui.Components.TypingDotsDrawable;
import java.io.File;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@ -444,6 +445,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
NotificationCenter.getInstance().addObserver(this, NotificationCenter.didCreatedNewDeleteTask);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidStarted);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateMessageMedia);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.replaceMessagesObjects);
super.onFragmentCreate();
@ -502,6 +504,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.didCreatedNewDeleteTask);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidStarted);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateMessageMedia);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.replaceMessagesObjects);
if (AndroidUtilities.isTablet()) {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id, true);
}
@ -1222,7 +1225,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
stickersAdapter.destroy();
}
if (currentEncryptedChat == null) {
if (currentEncryptedChat == null || currentEncryptedChat != null && AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 23) {
stickersListView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0);
stickersListView.setAdapter(stickersAdapter = new StickersAdapter(getParentActivity(), new StickersAdapter.StickersAdapterDelegate() {
@Override
@ -1269,6 +1272,36 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
public void onItemClick(View view, int position) {
TLRPC.Document document = stickersAdapter.getItem(position);
if (document instanceof TLRPC.TL_document) {
if (currentEncryptedChat != null && document.thumb instanceof TLRPC.TL_photoSize) {
File file = FileLoader.getPathToAttach(document.thumb, true);
if (file.exists()) {
try {
int len = (int)file.length();
byte[] arr = new byte[(int)file.length()];
RandomAccessFile reader = new RandomAccessFile(file, "r");
reader.readFully(arr);
TLRPC.TL_document newDocument = new TLRPC.TL_document();
newDocument.thumb = new TLRPC.TL_photoCachedSize();
newDocument.thumb.location = document.thumb.location;
newDocument.thumb.size = document.thumb.size;
newDocument.thumb.w = document.thumb.w;
newDocument.thumb.h = document.thumb.h;
newDocument.thumb.type = document.thumb.type;
newDocument.thumb.bytes = arr;
newDocument.id = document.id;
newDocument.access_hash = document.access_hash;
newDocument.date = document.date;
newDocument.mime_type = document.mime_type;
newDocument.size = document.size;
newDocument.dc_id = document.dc_id;
newDocument.attributes = document.attributes;
document = newDocument;
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
}
SendMessagesHelper.getInstance().sendMessage((TLRPC.TL_document) document, null, null, dialog_id);
}
chatActivityEnterView.setFieldText("");
@ -2661,6 +2694,25 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
existMessageObject.generateThumbs(false, 1);
}
updateVisibleRows();
} else if (id == NotificationCenter.replaceMessagesObjects) {
if (dialog_id == (long) args[0]) {
boolean changed = false;
ArrayList<MessageObject> messageObjects = (ArrayList<MessageObject>) args[1];
for (MessageObject messageObject : messageObjects) {
MessageObject old = messagesDict.get(messageObject.messageOwner.id);
if (old != null) {
messagesDict.put(old.messageOwner.id, messageObject);
int idx = messages.indexOf(old);
if (idx >= 0) {
messages.set(idx, messageObject);
changed = true;
}
}
}
if (changed) {
chatAdapter.notifyDataSetChanged();
}
}
}
}
@ -3098,15 +3150,26 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
chatListView.setSelectionFromTop(messages.size() - 1, -100000 - chatListView.getPaddingTop());
}
} else if (option == 1) {
final MessageObject finalSelectedObject = selectedObject;
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setMessage(LocaleController.formatString("AreYouSureDeleteMessages", R.string.AreYouSureDeleteMessages, LocaleController.formatPluralString("messages", 1)));
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ArrayList<Integer> ids = new ArrayList<>();
ids.add(selectedObject.messageOwner.id);
ids.add(finalSelectedObject.messageOwner.id);
removeUnreadPlane(true);
ArrayList<Long> random_ids = null;
if (currentEncryptedChat != null && selectedObject.messageOwner.random_id != 0 && selectedObject.type != 10) {
if (currentEncryptedChat != null && finalSelectedObject.messageOwner.random_id != 0 && finalSelectedObject.type != 10) {
random_ids = new ArrayList<>();
random_ids.add(selectedObject.messageOwner.random_id);
random_ids.add(finalSelectedObject.messageOwner.random_id);
}
MessagesController.getInstance().deleteMessages(ids, random_ids, currentEncryptedChat);
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
showAlertDialog(builder);
} else if (option == 2) {
forwaringMessage = selectedObject;
Bundle args = new Bundle();

View File

@ -123,7 +123,7 @@
<string name="NotificationMessageMap">%1$s قام بإرسال موقع لك</string>
<string name="NotificationMessageDocument">%1$s قام بإرسال مستند لك</string>
<string name="NotificationMessageAudio">%1$s قام بإرسال مقطع صوتي لك</string>
<string name="NotificationMessageSticker">%1$s sent you an sticker</string>
<string name="NotificationMessageSticker">%1$s قام بإرسال ملصق</string>
<string name="NotificationMessageGroupText">%1$s @ %2$s: %3$s</string>
<string name="NotificationMessageGroupNoText">%1$s قام بإرسال رسالة للمجموعة %2$s</string>
<string name="NotificationMessageGroupPhoto">%1$s قام بإرسال صورة للمجموعة %2$s</string>
@ -132,7 +132,7 @@
<string name="NotificationMessageGroupMap">%1$s قام بإرسال موقع للمجموعة %2$s</string>
<string name="NotificationMessageGroupDocument">%1$s قام بإرسال مستند للمجموعة %2$s</string>
<string name="NotificationMessageGroupAudio">%1$s قام بإرسال مقطع صوتي للمجموعة %2$s</string>
<string name="NotificationMessageGroupSticker">%1$s sent an sticker to the group %2$s</string>
<string name="NotificationMessageGroupSticker">%1$s قام بإرسال ملصق للمجموعة %2$s</string>
<string name="NotificationInvitedToGroup">%1$s قام بدعوتك للمجموعة %2$s</string>
<string name="NotificationEditedGroupName">%1$s قام بتعديل اسم المجموعة %2$s</string>
<string name="NotificationEditedGroupPhoto">%1$s قام بتغيير صورة المجموعة %2$s</string>
@ -309,7 +309,7 @@
<string name="NoPhotos">لا توجد صور حتى الآن</string>
<string name="PleaseDownload">فضلًا، قم بتنزيل الوسائط أولًا</string>
<string name="NoRecentPhotos">لا توجد صور حديثة</string>
<string name="NoRecentGIFs">لا توجد صور حديثة</string>
<string name="NoRecentGIFs">لا يوجد صور متحركة حديثة</string>
<string name="SearchImages">البحث على الإنترنت</string>
<string name="SearchGifs">البحث عن صور متحركة</string>
<string name="SearchImagesTitle">البحث على الإنترنت</string>
@ -419,7 +419,7 @@
<string name="AttachLocation">موقع</string>
<string name="AttachContact">جهة اتصال</string>
<string name="AttachDocument">مستند</string>
<string name="AttachSticker">Sticker</string>
<string name="AttachSticker">ملصق</string>
<string name="AttachAudio">مقطع صوتي</string>
<string name="FromYou">أنت</string>
<string name="ActionTakeScreenshootYou">أنت أخذت لقطة للشاشة !</string>

View File

@ -123,7 +123,7 @@
<string name="NotificationMessageMap">%1$s sent you a location</string>
<string name="NotificationMessageDocument">%1$s sent you a document</string>
<string name="NotificationMessageAudio">%1$s sent you an audio</string>
<string name="NotificationMessageSticker">%1$s sent you an sticker</string>
<string name="NotificationMessageSticker">%1$s sent you a sticker</string>
<string name="NotificationMessageGroupText">%1$s @ %2$s: %3$s</string>
<string name="NotificationMessageGroupNoText">%1$s sent a message to the group %2$s</string>
<string name="NotificationMessageGroupPhoto">%1$s sent a photo to the group %2$s</string>
@ -132,7 +132,7 @@
<string name="NotificationMessageGroupMap">%1$s sent a location to the group %2$s</string>
<string name="NotificationMessageGroupDocument">%1$s sent a document to the group %2$s</string>
<string name="NotificationMessageGroupAudio">%1$s sent an audio to the group %2$s</string>
<string name="NotificationMessageGroupSticker">%1$s sent an sticker to the group %2$s</string>
<string name="NotificationMessageGroupSticker">%1$s sent a sticker to the group %2$s</string>
<string name="NotificationInvitedToGroup">%1$s invited you to the group %2$s</string>
<string name="NotificationEditedGroupName">%1$s edited the group\'s %2$s name</string>
<string name="NotificationEditedGroupPhoto">%1$s edited the group\'s %2$s photo</string>