diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 136c1f78..2177b7f0 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -5,7 +5,7 @@ repositories { } dependencies { - compile 'com.android.support:support-v4:22.2.+' + compile 'com.android.support:support-v4:23.0.+' compile 'com.google.android.gms:play-services:3.2.+' //compile 'com.google.android.gms:play-services:7.5.0' compile 'net.hockeyapp.android:HockeySDK:3.5.+' @@ -15,7 +15,7 @@ dependencies { android { compileSdkVersion 22 - buildToolsVersion '22.0.1' + buildToolsVersion '23.0.0' compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 @@ -82,8 +82,8 @@ android { applicationId "org.telegram.plus" minSdkVersion 8 targetSdkVersion 22 - versionCode 592 - versionName "3.1.2.0" + versionCode 594 + versionName "3.1.3.0" multiDexEnabled true } } diff --git a/TMessagesProj/src/main/java/jawnae/pyronet/PyroClient.java b/TMessagesProj/src/main/java/jawnae/pyronet/PyroClient.java index 1044c9c6..8f2b03d5 100644 --- a/TMessagesProj/src/main/java/jawnae/pyronet/PyroClient.java +++ b/TMessagesProj/src/main/java/jawnae/pyronet/PyroClient.java @@ -58,7 +58,7 @@ public class PyroClient { this.key.attach(this); this.outbound = new ByteStream(); - this.listeners = new CopyOnWriteArrayList(); + this.listeners = new CopyOnWriteArrayList<>(); this.lastEventTime = System.currentTimeMillis(); } diff --git a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java index 7ba7ad23..9114a82e 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java @@ -243,6 +243,14 @@ public class LocaleController { sortedLanguages.add(localeInfo); languagesDict.put(localeInfo.shortName, localeInfo); + localeInfo = new LocaleInfo(); + localeInfo.name = "日本語"; + localeInfo.nameEnglish = "Japanese"; + localeInfo.shortName = "ja"; + localeInfo.pathToFile = null; + sortedLanguages.add(localeInfo); + languagesDict.put(localeInfo.shortName, localeInfo); + localeInfo = new LocaleInfo(); localeInfo.name = "Hrvatski"; localeInfo.nameEnglish = "Croatian"; diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java index 231026db..2710420a 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java @@ -10,6 +10,7 @@ package org.telegram.android; import android.content.SharedPreferences; import android.graphics.Paint; +import android.graphics.Typeface; import android.text.Layout; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -17,17 +18,20 @@ import android.text.Spanned; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; +import android.text.style.URLSpan; import android.text.util.Linkify; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; -import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; +import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; +import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.URLSpanNoUnderline; import org.telegram.ui.Components.URLSpanNoUnderlineBold; +import org.telegram.ui.Components.URLSpanReplacement; import java.util.AbstractMap; import java.util.ArrayList; @@ -433,7 +437,7 @@ public class MessageObject { int dateYear = rightNow.get(Calendar.YEAR); int dateMonth = rightNow.get(Calendar.MONTH); dateKey = String.format("%d_%02d_%02d", dateYear, dateMonth, dateDay); - if (contentType == 1 || contentType == 2) { + if (contentType == 1 || contentType == 2 || contentType == 0) { monthKey = String.format("%d_%02d", dateYear, dateMonth); } @@ -702,7 +706,54 @@ public class MessageObject { generateLinkDescription(); textLayoutBlocks = new ArrayList<>(); + boolean useManualParse = messageOwner.entities.isEmpty() && ( + messageOwner instanceof TLRPC.TL_message_old || + messageOwner instanceof TLRPC.TL_message_old2 || + messageOwner instanceof TLRPC.TL_message_old3 || + messageOwner instanceof TLRPC.TL_message_old4 || + messageOwner instanceof TLRPC.TL_messageForwarded_old || + messageOwner instanceof TLRPC.TL_messageForwarded_old2 || + messageOwner instanceof TLRPC.TL_message_secret || + isOut() && messageOwner.send_state != MESSAGE_SEND_STATE_SENT || messageOwner.id < 0); + + if (useManualParse) { addLinks(messageText); + } + + if (messageText instanceof Spannable) { + Spannable spannable = (Spannable) messageText; + int count = messageOwner.entities.size(); + for (int a = 0; a < count; a++) { + TLRPC.MessageEntity entity = messageOwner.entities.get(a); + if (entity.length <= 0 || entity.offset < 0 || entity.offset >= messageOwner.message.length()) { + continue; + } else if (entity.offset + entity.length > messageOwner.message.length()) { + entity.length = messageOwner.message.length() - entity.offset; + } + if (entity instanceof TLRPC.TL_messageEntityBold) { + spannable.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/rmedium.ttf")), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else if (entity instanceof TLRPC.TL_messageEntityItalic) { + spannable.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else if (entity instanceof TLRPC.TL_messageEntityCode) { + spannable.setSpan(new TypefaceSpan(Typeface.MONOSPACE), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else if (!useManualParse) { + String url = messageOwner.message.substring(entity.offset, entity.offset + entity.length); + if (entity instanceof TLRPC.TL_messageEntityBotCommand || entity instanceof TLRPC.TL_messageEntityHashtag || entity instanceof TLRPC.TL_messageEntityMention) { + spannable.setSpan(new URLSpanNoUnderline(url), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else if (entity instanceof TLRPC.TL_messageEntityEmail) { + spannable.setSpan(new URLSpanReplacement("mailto:" + url), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else if (entity instanceof TLRPC.TL_messageEntityUrl) { + if (!url.toLowerCase().startsWith("http")) { + spannable.setSpan(new URLSpan("http://" + url), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else { + spannable.setSpan(new URLSpan(url), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } else if (entity instanceof TLRPC.TL_messageEntityTextUrl) { + spannable.setSpan(new URLSpanReplacement(entity.url), entity.offset, entity.offset + entity.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + } + } int maxWidth; if (AndroidUtilities.isTablet()) { diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java index 49ed7360..1fd921c9 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java @@ -270,13 +270,10 @@ public class MessagesController implements NotificationCenter.NotificationCenter TLRPC.InputUser inputUser; if (user.id == UserConfig.getClientUserId()) { inputUser = new TLRPC.TL_inputUserSelf(); - } else if (user.access_hash != 0) { - inputUser = new TLRPC.TL_inputUserForeign(); + } else { + inputUser = new TLRPC.TL_inputUser(); inputUser.user_id = user.id; inputUser.access_hash = user.access_hash; - } else { - inputUser = new TLRPC.TL_inputUserContact(); - inputUser.user_id = user.id; } return inputUser; } @@ -514,7 +511,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter return; } boolean updateStatus = false; - for (TLRPC.User user : users) { + int count = users.size(); + for (int a = 0; a < count; a++) { + TLRPC.User user = users.get(a); if (putUser(user, fromCache)) { updateStatus = true; } @@ -533,9 +532,13 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (chat == null) { return; } - if (fromCache) { - chats.putIfAbsent(chat.id, chat); - } else { + TLRPC.Chat oldChat = chats.get(chat.id); + if (!fromCache) { + if (oldChat != null && chat.version != oldChat.version) { + loadedFullChats.remove((Integer) chat.id); + } + chats.put(chat.id, chat); + } else if (oldChat == null) { chats.put(chat.id, chat); } } @@ -544,7 +547,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (chats == null || chats.isEmpty()) { return; } - for (TLRPC.Chat chat : chats) { + int count = chats.size(); + for (int a = 0; a < count; a++) { + TLRPC.Chat chat = chats.get(a); putChat(chat, fromCache); } } @@ -564,7 +569,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (encryptedChats == null || encryptedChats.isEmpty()) { return; } - for (TLRPC.EncryptedChat encryptedChat : encryptedChats) { + int count = encryptedChats.size(); + for (int a = 0; a < count; a++) { + TLRPC.EncryptedChat encryptedChat = encryptedChats.get(a); putEncryptedChat(encryptedChat, fromCache); } } @@ -1145,12 +1152,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.access_hash = user.access_hash; req.peer.user_id = lower_part; } ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { @@ -1449,14 +1452,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.user_id = user.id; - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - req.peer.user_id = user.id; - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.user_id = user.id; + req.peer.access_hash = user.access_hash; } if (action == 0) { req.action = new TLRPC.TL_sendMessageTypingAction(); @@ -1536,14 +1534,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.user_id = user.id; - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - req.peer.user_id = user.id; - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.user_id = user.id; + req.peer.access_hash = user.access_hash; } if (load_type == 3) { req.offset = -count / 2; @@ -2018,14 +2011,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.user_id = user.id; - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - req.peer.user_id = user.id; - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.user_id = user.id; + req.peer.access_hash = user.access_hash; } req.max_id = max_positive_id; req.offset = offset; @@ -3008,6 +2996,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter message.to_id.chat_id = updates.chat_id; message.dialog_id = -updates.chat_id; } + message.entities = updates.entities; message.message = updates.message; message.date = updates.date; message.flags = updates.flags; diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java index 97cbe020..27f8083e 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java @@ -1371,12 +1371,8 @@ public class NotificationsController { if (user == null) { return; } - if (user.access_hash != 0) { - ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerForeign(); + ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerUser(); ((TLRPC.TL_inputNotifyPeer)req.peer).peer.access_hash = user.access_hash; - } else { - ((TLRPC.TL_inputNotifyPeer)req.peer).peer = new TLRPC.TL_inputPeerContact(); - } ((TLRPC.TL_inputNotifyPeer)req.peer).peer.user_id = (int)dialog_id; } diff --git a/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java index 5d793ea3..9498d2d6 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java @@ -559,7 +559,6 @@ public class SecretChatHelper { newMsg.media.video.h = video.h; newMsg.media.video.date = video.date; newMsg.media.caption = video.caption != null ? video.caption : ""; - newMsg.media.video.user_id = video.user_id; newMsg.media.video.size = file.size; newMsg.media.video.id = file.id; newMsg.media.video.access_hash = file.access_hash; @@ -897,9 +896,7 @@ public class SecretChatHelper { newMessage.media = new TLRPC.TL_messageMediaPhoto(); newMessage.media.caption = ""; newMessage.media.photo = new TLRPC.TL_photo(); - newMessage.media.photo.user_id = newMessage.from_id; newMessage.media.photo.date = newMessage.date; - newMessage.media.photo.geo = new TLRPC.TL_geoPointEmpty(); byte[] thumb = ((TLRPC.TL_decryptedMessageMediaPhoto) decryptedMessage.media).thumb; if (thumb != null && thumb.length != 0 && thumb.length <= 6000 && decryptedMessage.media.thumb_w <= 100 && decryptedMessage.media.thumb_h <= 100) { TLRPC.TL_photoCachedSize small = new TLRPC.TL_photoCachedSize(); @@ -948,7 +945,6 @@ public class SecretChatHelper { newMessage.media.video.w = decryptedMessage.media.w; newMessage.media.video.h = decryptedMessage.media.h; newMessage.media.video.date = date; - newMessage.media.video.user_id = from_id; newMessage.media.video.size = file.size; newMessage.media.video.id = file.id; newMessage.media.video.access_hash = file.access_hash; diff --git a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java index 62eecb35..74ea3b93 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java @@ -540,14 +540,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (sendToUser == null) { return; } - if (sendToUser.access_hash != 0) { - sendToPeer = new TLRPC.TL_inputPeerForeign(); - sendToPeer.user_id = sendToUser.id; - sendToPeer.access_hash = sendToUser.access_hash; - } else { - sendToPeer = new TLRPC.TL_inputPeerContact(); - sendToPeer.user_id = sendToUser.id; - } + sendToPeer = new TLRPC.TL_inputPeerUser(); + sendToPeer.user_id = sendToUser.id; + sendToPeer.access_hash = sendToUser.access_hash; } ArrayList objArr = new ArrayList<>(); @@ -575,6 +570,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.message = msgObj.messageOwner.message; newMsg.fwd_msg_id = msgObj.getId(); newMsg.attachPath = msgObj.messageOwner.attachPath; + newMsg.entities = msgObj.messageOwner.entities; + if (!newMsg.entities.isEmpty()) { + newMsg.flags |= TLRPC.MESSAGE_FLAG_HAS_ENTITIES; + } if (newMsg.attachPath == null) { newMsg.attachPath = ""; } @@ -965,14 +964,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if ((sendToUser.flags & TLRPC.USER_FLAG_BOT) != 0) { newMsg.flags &= ~TLRPC.MESSAGE_FLAG_UNREAD; } - if (sendToUser.access_hash != 0) { - sendToPeer = new TLRPC.TL_inputPeerForeign(); - sendToPeer.user_id = sendToUser.id; - sendToPeer.access_hash = sendToUser.access_hash; - } else { - sendToPeer = new TLRPC.TL_inputPeerContact(); - sendToPeer.user_id = sendToUser.id; - } + sendToPeer = new TLRPC.TL_inputPeerUser(); + sendToPeer.user_id = sendToUser.id; + sendToPeer.access_hash = sendToUser.access_hash; } } } else { @@ -1563,6 +1557,10 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsgObj.local_id = newMsgObj.id = res.id; newMsgObj.date = res.date; newMsgObj.media = res.media; + newMsgObj.entities = res.entities; + if (!newMsgObj.entities.isEmpty()) { + newMsgObj.flags |= TLRPC.MESSAGE_FLAG_HAS_ENTITIES; + } if (res instanceof TLRPC.TL_messages_sentMessage) { MessagesController.getInstance().processNewDifferenceParams(-1, res.pts, res.date, res.pts_count); } else if (res instanceof TLRPC.TL_messages_sentMessageLink) { @@ -1849,10 +1847,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } else { UserConfig.saveConfig(false); TLRPC.TL_photo photo = new TLRPC.TL_photo(); - photo.user_id = UserConfig.getClientUserId(); photo.date = ConnectionsManager.getInstance().getCurrentTime(); photo.sizes = sizes; - photo.geo = new TLRPC.TL_geoPointEmpty(); return photo; } } @@ -1913,8 +1909,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (attributeAudio != null) { originalPath += "audio" + f.length(); } else { - originalPath += "" + f.length(); - } + originalPath += "" + f.length(); + } } TLRPC.TL_document document = null; @@ -2218,9 +2214,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } if (photo == null) { photo = new TLRPC.TL_photo(); - photo.user_id = UserConfig.getClientUserId(); photo.date = ConnectionsManager.getInstance().getCurrentTime(); - photo.geo = new TLRPC.TL_geoPointEmpty(); TLRPC.TL_photoSize photoSize = new TLRPC.TL_photoSize(); photoSize.w = searchImage.width; photoSize.h = searchImage.height; diff --git a/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java b/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java index f7275f50..a95bdefc 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java +++ b/TMessagesProj/src/main/java/org/telegram/android/query/SharedMediaQuery.java @@ -61,12 +61,8 @@ public class SharedMediaQuery { if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.access_hash = user.access_hash; req.peer.user_id = lower_part; } long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { @@ -109,12 +105,8 @@ public class SharedMediaQuery { if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.access_hash = user.access_hash; req.peer.user_id = lower_part; } long reqId = ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { @@ -158,8 +150,13 @@ public class SharedMediaQuery { } } else if (message.media instanceof TLRPC.TL_messageMediaAudio) { return MEDIA_AUDIO; - } else if (message.media instanceof TLRPC.TL_messageMediaWebPage) { - return MEDIA_URL; + } else if (!message.entities.isEmpty()) { + for (int a = 0; a < message.entities.size(); a++) { + TLRPC.MessageEntity entity = message.entities.get(a); + if (entity instanceof TLRPC.TL_messageEntityUrl || entity instanceof TLRPC.TL_messageEntityTextUrl || entity instanceof TLRPC.TL_messageEntityEmail) { + return MEDIA_URL; + } + } } return -1; } @@ -170,9 +167,15 @@ public class SharedMediaQuery { } else if (message.media instanceof TLRPC.TL_messageMediaPhoto || message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaDocument || - message.media instanceof TLRPC.TL_messageMediaAudio/* || - message.media instanceof TLRPC.TL_messageMediaWebPage && !(message.media.webpage instanceof TLRPC.TL_webPageEmpty)*/) { + message.media instanceof TLRPC.TL_messageMediaAudio) { return true; + } else if (!message.entities.isEmpty()) { + for (int a = 0; a < message.entities.size(); a++) { + TLRPC.MessageEntity entity = message.entities.get(a); + if (entity instanceof TLRPC.TL_messageEntityUrl || entity instanceof TLRPC.TL_messageEntityTextUrl || entity instanceof TLRPC.TL_messageEntityEmail) { + return true; + } + } } return false; } diff --git a/TMessagesProj/src/main/java/org/telegram/android/query/StickersQuery.java b/TMessagesProj/src/main/java/org/telegram/android/query/StickersQuery.java index 29ceb043..2857d547 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/query/StickersQuery.java +++ b/TMessagesProj/src/main/java/org/telegram/android/query/StickersQuery.java @@ -271,66 +271,70 @@ public class StickersQuery { } } if (res != null) { - final ArrayList stickerSetsNew = new ArrayList<>(); - final HashMap stickerSetsByIdNew = new HashMap<>(); - final HashMap stickersByEmojiNew = new HashMap<>(); - final HashMap stickersByIdNew = new HashMap<>(); - final HashMap> allStickersNew = new HashMap<>(); + try { + final ArrayList stickerSetsNew = new ArrayList<>(); + final HashMap stickerSetsByIdNew = new HashMap<>(); + final HashMap stickersByEmojiNew = new HashMap<>(); + final HashMap stickersByIdNew = new HashMap<>(); + final HashMap> allStickersNew = new HashMap<>(); - for (int a = 0; a < res.size(); a++) { - TLRPC.TL_messages_stickerSet stickerSet = res.get(a); - if (stickerSet == null) { - continue; - } - stickerSetsNew.add(stickerSet); - stickerSetsByIdNew.put(stickerSet.set.id, stickerSet); - - for (int b = 0; b < stickerSet.documents.size(); b++) { - TLRPC.Document document = stickerSet.documents.get(b); - if (document == null || document instanceof TLRPC.TL_documentEmpty) { + for (int a = 0; a < res.size(); a++) { + TLRPC.TL_messages_stickerSet stickerSet = res.get(a); + if (stickerSet == null) { continue; } - stickersByIdNew.put(document.id, document); - } - if ((stickerSet.set.flags & 2) == 0) { - for (int b = 0; b < stickerSet.packs.size(); b++) { - TLRPC.TL_stickerPack stickerPack = stickerSet.packs.get(b); - if (stickerPack == null || stickerPack.emoticon == null) { + stickerSetsNew.add(stickerSet); + stickerSetsByIdNew.put(stickerSet.set.id, stickerSet); + + for (int b = 0; b < stickerSet.documents.size(); b++) { + TLRPC.Document document = stickerSet.documents.get(b); + if (document == null || document instanceof TLRPC.TL_documentEmpty) { continue; } - stickerPack.emoticon = stickerPack.emoticon.replace("\uFE0F", ""); - ArrayList arrayList = allStickersNew.get(stickerPack.emoticon); - if (arrayList == null) { - arrayList = new ArrayList<>(); - allStickersNew.put(stickerPack.emoticon, arrayList); - } - for (int c = 0; c < stickerPack.documents.size(); c++) { - Long id = stickerPack.documents.get(c); - if (!stickersByEmojiNew.containsKey(id)) { - stickersByEmojiNew.put(id, stickerPack.emoticon); + stickersByIdNew.put(document.id, document); + } + if ((stickerSet.set.flags & 2) == 0) { + for (int b = 0; b < stickerSet.packs.size(); b++) { + TLRPC.TL_stickerPack stickerPack = stickerSet.packs.get(b); + if (stickerPack == null || stickerPack.emoticon == null) { + continue; + } + stickerPack.emoticon = stickerPack.emoticon.replace("\uFE0F", ""); + ArrayList arrayList = allStickersNew.get(stickerPack.emoticon); + if (arrayList == null) { + arrayList = new ArrayList<>(); + allStickersNew.put(stickerPack.emoticon, arrayList); + } + for (int c = 0; c < stickerPack.documents.size(); c++) { + Long id = stickerPack.documents.get(c); + if (!stickersByEmojiNew.containsKey(id)) { + stickersByEmojiNew.put(id, stickerPack.emoticon); + } + arrayList.add(stickersByIdNew.get(id)); } - arrayList.add(stickersByIdNew.get(id)); } } } - } - if (!cache) { - putStickersToCache(stickerSetsNew, date, hash); - } - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - stickersById = stickersByIdNew; - stickerSetsById = stickerSetsByIdNew; - stickerSets = stickerSetsNew; - allStickers = allStickersNew; - stickersByEmoji = stickersByEmojiNew; - loadHash = hash; - loadDate = date; - NotificationCenter.getInstance().postNotificationName(NotificationCenter.stickersDidLoaded); + if (!cache) { + putStickersToCache(stickerSetsNew, date, hash); } - }); + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + stickersById = stickersByIdNew; + stickerSetsById = stickerSetsByIdNew; + stickerSets = stickerSetsNew; + allStickers = allStickersNew; + stickersByEmoji = stickersByEmojiNew; + loadHash = hash; + loadDate = date; + NotificationCenter.getInstance().postNotificationName(NotificationCenter.stickersDidLoaded); + } + }); + } catch (Throwable e) { + FileLog.e("tmessages", e); + } } } }); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TLClassStore.java b/TMessagesProj/src/main/java/org/telegram/messenger/TLClassStore.java index 1c855859..7174476a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TLClassStore.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TLClassStore.java @@ -78,11 +78,13 @@ public class TLClassStore { classStore.put(TLRPC.TL_video_old2.constructor, TLRPC.TL_video_old2.class); classStore.put(TLRPC.TL_video_old.constructor, TLRPC.TL_video_old.class); classStore.put(TLRPC.TL_videoEncrypted.constructor, TLRPC.TL_videoEncrypted.class); + classStore.put(TLRPC.TL_video_old3.constructor, TLRPC.TL_video_old3.class); classStore.put(TLRPC.TL_audio.constructor, TLRPC.TL_audio.class); classStore.put(TLRPC.TL_audioEncrypted.constructor, TLRPC.TL_audioEncrypted.class); classStore.put(TLRPC.TL_audioEmpty.constructor, TLRPC.TL_audioEmpty.class); classStore.put(TLRPC.TL_audio_old.constructor, TLRPC.TL_audio_old.class); + classStore.put(TLRPC.TL_audio_old2.constructor, TLRPC.TL_audio_old2.class); classStore.put(TLRPC.TL_document.constructor, TLRPC.TL_document.class); classStore.put(TLRPC.TL_documentEmpty.constructor, TLRPC.TL_documentEmpty.class); @@ -96,6 +98,7 @@ public class TLClassStore { classStore.put(TLRPC.TL_photoSizeEmpty.constructor, TLRPC.TL_photoSizeEmpty.class); classStore.put(TLRPC.TL_photoCachedSize.constructor, TLRPC.TL_photoCachedSize.class); classStore.put(TLRPC.TL_photo_old.constructor, TLRPC.TL_photo_old.class); + classStore.put(TLRPC.TL_photo_old2.constructor, TLRPC.TL_photo_old2.class); } static TLClassStore store = null; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java index c660c1dd..3a69447d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java @@ -38,8 +38,10 @@ public class TLRPC { public static final int MESSAGE_FLAG_REPLY = 0x00000008; public static final int MESSAGE_FLAG_MENTION = 0x00000010; public static final int MESSAGE_FLAG_CONTENT_UNREAD = 0x00000020; + public static final int MESSAGE_FLAG_HAS_MARKUP = 0x00000040; + public static final int MESSAGE_FLAG_HAS_ENTITIES = 0x00000080; - public static final int LAYER = 32; + public static final int LAYER = 34; public static class TL_inputEncryptedChat extends TLObject { public static int constructor = 0xf141b5e1; @@ -5407,6 +5409,7 @@ public class TLRPC { public int id; public int date; public MessageMedia media; + public ArrayList entities = new ArrayList<>(); public int pts; public int pts_count; public ArrayList links = new ArrayList<>(); @@ -5415,7 +5418,7 @@ public class TLRPC { public static messages_SentMessage TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { messages_SentMessage result = null; switch(constructor) { - case 0x4c3d47f3: + case 0x8a99d8e0: result = new TL_messages_sentMessage(); break; case 0x35a1a663: @@ -5433,13 +5436,28 @@ public class TLRPC { } public static class TL_messages_sentMessage extends messages_SentMessage { - public static int constructor = 0x4c3d47f3; + public static int constructor = 0x8a99d8e0; public void readParams(AbsSerializedData stream, boolean exception) { id = stream.readInt32(exception); date = stream.readInt32(exception); media = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } pts = stream.readInt32(exception); pts_count = stream.readInt32(exception); } @@ -5449,6 +5467,12 @@ public class TLRPC { stream.writeInt32(id); stream.writeInt32(date); media.serializeToStream(stream); + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } stream.writeInt32(pts); stream.writeInt32(pts_count); } @@ -5601,14 +5625,14 @@ public class TLRPC { public static class InputPeer extends TLObject { public int user_id; - public int chat_id; public long access_hash; + public int chat_id; public static InputPeer TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { InputPeer result = null; switch(constructor) { - case 0x1023dbe8: - result = new TL_inputPeerContact(); + case 0x7b8e7de6: + result = new TL_inputPeerUser(); break; case 0x179be863: result = new TL_inputPeerChat(); @@ -5619,9 +5643,6 @@ public class TLRPC { case 0x7da07ec9: result = new TL_inputPeerSelf(); break; - case 0x9b447325: - result = new TL_inputPeerForeign(); - break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in InputPeer", constructor)); @@ -5633,17 +5654,19 @@ public class TLRPC { } } - public static class TL_inputPeerContact extends InputPeer { - public static int constructor = 0x1023dbe8; + public static class TL_inputPeerUser extends InputPeer { + public static int constructor = 0x7b8e7de6; public void readParams(AbsSerializedData stream, boolean exception) { user_id = stream.readInt32(exception); + access_hash = stream.readInt64(exception); } public void serializeToStream(AbsSerializedData stream) { stream.writeInt32(constructor); stream.writeInt32(user_id); + stream.writeInt64(access_hash); } } @@ -5679,22 +5702,6 @@ public class TLRPC { } } - public static class TL_inputPeerForeign extends InputPeer { - public static int constructor = 0x9b447325; - - - public void readParams(AbsSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - access_hash = stream.readInt64(exception); - } - - public void serializeToStream(AbsSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(user_id); - stream.writeInt64(access_hash); - } - } - public static class TL_msg_copy extends TLObject { public static int constructor = 0xe06046b2; @@ -6542,17 +6549,14 @@ public class TLRPC { public static InputUser TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { InputUser result = null; switch(constructor) { - case 0xf7c1b13f: - result = new TL_inputUserSelf(); - break; - case 0x655e74ff: - result = new TL_inputUserForeign(); - break; case 0xb98886cf: result = new TL_inputUserEmpty(); break; - case 0x86e94f65: - result = new TL_inputUserContact(); + case 0xf7c1b13f: + result = new TL_inputUserSelf(); + break; + case 0xd8292816: + result = new TL_inputUser(); break; } if (result == null && exception) { @@ -6565,6 +6569,15 @@ public class TLRPC { } } + public static class TL_inputUserEmpty extends InputUser { + public static int constructor = 0xb98886cf; + + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + } + } + public static class TL_inputUserSelf extends InputUser { public static int constructor = 0xf7c1b13f; @@ -6574,8 +6587,8 @@ public class TLRPC { } } - public static class TL_inputUserForeign extends InputUser { - public static int constructor = 0x655e74ff; + public static class TL_inputUser extends InputUser { + public static int constructor = 0xd8292816; public void readParams(AbsSerializedData stream, boolean exception) { @@ -6590,29 +6603,6 @@ public class TLRPC { } } - public static class TL_inputUserEmpty extends InputUser { - public static int constructor = 0xb98886cf; - - - public void serializeToStream(AbsSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_inputUserContact extends InputUser { - public static int constructor = 0x86e94f65; - - - public void readParams(AbsSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - } - - public void serializeToStream(AbsSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(user_id); - } - } - public static class TL_chatParticipant extends TLObject { public static int constructor = 0xc8d7493e; @@ -7080,9 +7070,12 @@ public class TLRPC { case 0x2331b22d: result = new TL_photoEmpty(); break; - case 0xc3838076: + case 0xcded42fe: result = new TL_photo(); break; + case 0xc3838076: + result = new TL_photo_old2(); + break; case 0x22b56751: result = new TL_photo_old(); break; @@ -7112,6 +7105,45 @@ public class TLRPC { } public static class TL_photo extends Photo { + public static int constructor = 0xcded42fe; + + + public void readParams(AbsSerializedData stream, boolean exception) { + id = stream.readInt64(exception); + access_hash = stream.readInt64(exception); + date = stream.readInt32(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + PhotoSize object = PhotoSize.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + sizes.add(object); + } + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(id); + stream.writeInt64(access_hash); + stream.writeInt32(date); + stream.writeInt32(0x1cb5c415); + int count = sizes.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + sizes.get(a).serializeToStream(stream); + } + } + } + + public static class TL_photo_old2 extends TL_photo { public static int constructor = 0xc3838076; @@ -9383,9 +9415,12 @@ public class TLRPC { public static Video TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { Video result = null; switch(constructor) { - case 0xee9f4a4d: + case 0xf72887d3: result = new TL_video(); break; + case 0xee9f4a4d: + result = new TL_video_old3(); + break; case 0x55555553: result = new TL_videoEncrypted(); break; @@ -9410,6 +9445,38 @@ public class TLRPC { } public static class TL_video extends Video { + public static int constructor = 0xf72887d3; + + + public void readParams(AbsSerializedData stream, boolean exception) { + id = stream.readInt64(exception); + access_hash = stream.readInt64(exception); + date = stream.readInt32(exception); + duration = stream.readInt32(exception); + mime_type = stream.readString(exception); + size = stream.readInt32(exception); + thumb = PhotoSize.TLdeserialize(stream, stream.readInt32(exception), exception); + dc_id = stream.readInt32(exception); + w = stream.readInt32(exception); + h = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(id); + stream.writeInt64(access_hash); + stream.writeInt32(date); + stream.writeInt32(duration); + stream.writeString(mime_type); + stream.writeInt32(size); + thumb.serializeToStream(stream); + stream.writeInt32(dc_id); + stream.writeInt32(w); + stream.writeInt32(h); + } + } + + public static class TL_video_old3 extends TL_video { public static int constructor = 0xee9f4a4d; @@ -9818,6 +9885,52 @@ public class TLRPC { } } + public static class help_AppChangelog extends TLObject { + public String text; + + public static help_AppChangelog TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { + help_AppChangelog result = null; + switch(constructor) { + case 0xaf7e0394: + result = new TL_help_appChangelogEmpty(); + break; + case 0x4668e6bd: + result = new TL_help_appChangelog(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in help_AppChangelog", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_help_appChangelogEmpty extends help_AppChangelog { + public static int constructor = 0xaf7e0394; + + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_help_appChangelog extends help_AppChangelog { + public static int constructor = 0x4668e6bd; + + + public void readParams(AbsSerializedData stream, boolean exception) { + text = stream.readString(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(text); + } + } + public static class TL_keyboardButton extends TLObject { public static int constructor = 0xa2fa4880; @@ -10349,6 +10462,7 @@ public class TLRPC { public int fwd_from_id; public int fwd_date; public int reply_to_msg_id; + public ArrayList entities = new ArrayList<>(); public ArrayList updates = new ArrayList<>(); public ArrayList users = new ArrayList<>(); public ArrayList chats = new ArrayList<>(); @@ -10360,13 +10474,13 @@ public class TLRPC { public static Updates TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { Updates result = null; switch(constructor) { - case 0x52238b3c: + case 0xf9409b3d: result = new TL_updateShortChatMessage(); break; case 0x74ae4240: result = new TL_updates(); break; - case 0xed5c2127: + case 0x3f32d858: result = new TL_updateShortMessage(); break; case 0x78d4dec1: @@ -10390,7 +10504,7 @@ public class TLRPC { } public static class TL_updateShortChatMessage extends Updates { - public static int constructor = 0x52238b3c; + public static int constructor = 0xf9409b3d; public void readParams(AbsSerializedData stream, boolean exception) { @@ -10411,6 +10525,23 @@ public class TLRPC { if ((flags & 8) != 0) { reply_to_msg_id = stream.readInt32(exception); } + if ((flags & 128) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } + } } public void serializeToStream(AbsSerializedData stream) { @@ -10432,6 +10563,14 @@ public class TLRPC { if ((flags & 8) != 0) { stream.writeInt32(reply_to_msg_id); } + if ((flags & 128) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } } } @@ -10515,7 +10654,7 @@ public class TLRPC { } public static class TL_updateShortMessage extends Updates { - public static int constructor = 0xed5c2127; + public static int constructor = 0x3f32d858; public void readParams(AbsSerializedData stream, boolean exception) { @@ -10535,6 +10674,23 @@ public class TLRPC { if ((flags & 8) != 0) { reply_to_msg_id = stream.readInt32(exception); } + if ((flags & 128) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } + } } public void serializeToStream(AbsSerializedData stream) { @@ -10555,6 +10711,14 @@ public class TLRPC { if ((flags & 8) != 0) { stream.writeInt32(reply_to_msg_id); } + if ((flags & 128) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } } } @@ -11217,17 +11381,20 @@ public class TLRPC { public static Audio TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { Audio result = null; switch(constructor) { + case 0x586988d8: + result = new TL_audioEmpty(); + break; case 0x427425e7: result = new TL_audio_old(); break; - case 0xc7ac6496: + case 0xf9e35055: result = new TL_audio(); break; case 0x555555F6: result = new TL_audioEncrypted(); break; - case 0x586988d8: - result = new TL_audioEmpty(); + case 0xc7ac6496: + result = new TL_audio_old2(); break; } if (result == null && exception) { @@ -11266,7 +11433,7 @@ public class TLRPC { } } - public static class TL_audio extends Audio { + public static class TL_audio_old2 extends TL_audio { public static int constructor = 0xc7ac6496; @@ -11294,6 +11461,32 @@ public class TLRPC { } } + public static class TL_audio extends Audio { + public static int constructor = 0xf9e35055; + + + public void readParams(AbsSerializedData stream, boolean exception) { + id = stream.readInt64(exception); + access_hash = stream.readInt64(exception); + date = stream.readInt32(exception); + duration = stream.readInt32(exception); + mime_type = stream.readString(exception); + size = stream.readInt32(exception); + dc_id = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(id); + stream.writeInt64(access_hash); + stream.writeInt32(date); + stream.writeInt32(duration); + stream.writeString(mime_type); + stream.writeInt32(size); + stream.writeInt32(dc_id); + } + } + public static class TL_audioEncrypted extends TL_audio { public static int constructor = 0x555555F6; @@ -12950,6 +13143,239 @@ public class TLRPC { } } + public static class MessageEntity extends TLObject { + public int offset; + public int length; + public String language; + public String url; + + public static MessageEntity TLdeserialize(AbsSerializedData stream, int constructor, boolean exception) { + MessageEntity result = null; + switch(constructor) { + case 0x6ed02538: + result = new TL_messageEntityUrl(); + break; + case 0xbd610bc9: + result = new TL_messageEntityBold(); + break; + case 0x826f8b60: + result = new TL_messageEntityItalic(); + break; + case 0x64e475c2: + result = new TL_messageEntityEmail(); + break; + case 0x73924be0: + result = new TL_messageEntityPre(); + break; + case 0x76a6d327: + result = new TL_messageEntityTextUrl(); + break; + case 0xbb92ba95: + result = new TL_messageEntityUnknown(); + break; + case 0x6f635b0d: + result = new TL_messageEntityHashtag(); + break; + case 0x6cef8ac7: + result = new TL_messageEntityBotCommand(); + break; + case 0x28a20571: + result = new TL_messageEntityCode(); + break; + case 0xfa04579d: + result = new TL_messageEntityMention(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in MessageEntity", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_messageEntityUrl extends MessageEntity { + public static int constructor = 0x6ed02538; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityBold extends MessageEntity { + public static int constructor = 0xbd610bc9; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityItalic extends MessageEntity { + public static int constructor = 0x826f8b60; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityEmail extends MessageEntity { + public static int constructor = 0x64e475c2; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityPre extends MessageEntity { + public static int constructor = 0x73924be0; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + language = stream.readString(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + stream.writeString(language); + } + } + + public static class TL_messageEntityTextUrl extends MessageEntity { + public static int constructor = 0x76a6d327; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + url = stream.readString(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + stream.writeString(url); + } + } + + public static class TL_messageEntityUnknown extends MessageEntity { + public static int constructor = 0xbb92ba95; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityHashtag extends MessageEntity { + public static int constructor = 0x6f635b0d; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityBotCommand extends MessageEntity { + public static int constructor = 0x6cef8ac7; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityCode extends MessageEntity { + public static int constructor = 0x28a20571; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + + public static class TL_messageEntityMention extends MessageEntity { + public static int constructor = 0xfa04579d; + + + public void readParams(AbsSerializedData stream, boolean exception) { + offset = stream.readInt32(exception); + length = stream.readInt32(exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(offset); + stream.writeInt32(length); + } + } + public static class TL_destroy_sessions_res extends TLObject { public static int constructor = 0xfb95abcd; @@ -13826,7 +14252,7 @@ public class TLRPC { } public static class TL_messages_sendMessage extends TLObject { - public static int constructor = 0xfc55e6b5; + public static int constructor = 0xdf12390; public int flags; public InputPeer peer; @@ -13834,6 +14260,7 @@ public class TLRPC { public String message; public long random_id; public ReplyMarkup reply_markup; + public ArrayList entities = new ArrayList<>(); public TLObject deserializeResponse(AbsSerializedData stream, int constructor, boolean exception) { return messages_SentMessage.TLdeserialize(stream, constructor, exception); @@ -13851,6 +14278,14 @@ public class TLRPC { if ((flags & 4) != 0) { reply_markup.serializeToStream(stream); } + if ((flags & 8) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } } } @@ -14236,11 +14671,11 @@ public class TLRPC { } public static class TL_photos_getUserPhotos extends TLObject { - public static int constructor = 0xb7ee553c; + public static int constructor = 0x91cd32a8; public InputUser user_id; public int offset; - public int max_id; + public long max_id; public int limit; public TLObject deserializeResponse(AbsSerializedData stream, int constructor, boolean exception) { @@ -14251,7 +14686,7 @@ public class TLRPC { stream.writeInt32(constructor); user_id.serializeToStream(stream); stream.writeInt32(offset); - stream.writeInt32(max_id); + stream.writeInt64(max_id); stream.writeInt32(limit); } } @@ -15175,6 +15610,27 @@ public class TLRPC { } } + public static class TL_help_getAppChangelog extends TLObject { + public static int constructor = 0x5bab7fb2; + + public String device_model; + public String system_version; + public String app_version; + public String lang_code; + + public TLObject deserializeResponse(AbsSerializedData stream, int constructor, boolean exception) { + return help_AppChangelog.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(device_model); + stream.writeString(system_version); + stream.writeString(app_version); + stream.writeString(lang_code); + } + } + //manually created //EncryptedChat start @@ -15252,6 +15708,7 @@ public class TLRPC { public String message; public MessageMedia media; public int flags; + public ArrayList entities = new ArrayList<>(); public ReplyMarkup reply_markup; public int send_state = 0; //custom public int fwd_msg_id = 0; //custom @@ -15276,11 +15733,14 @@ public class TLRPC { result = new TL_message_old3(); break; case 0xc3060325: - result = new TL_message(); + result = new TL_message_old4(); break; case 0x83e5de54: result = new TL_messageEmpty(); break; + case 0xf07814c8: + result = new TL_message(); + break; case 0xa367e716: result = new TL_messageForwarded_old2(); //custom break; @@ -15352,6 +15812,91 @@ public class TLRPC { } public static class TL_message extends Message { + public static int constructor = 0xf07814c8; + + + public void readParams(AbsSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + id = stream.readInt32(exception); + from_id = stream.readInt32(exception); + to_id = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 4) != 0) { + fwd_from_id = stream.readInt32(exception); + } + if ((flags & 4) != 0) { + fwd_date = stream.readInt32(exception); + } + if ((flags & 8) != 0) { + reply_to_msg_id = stream.readInt32(exception); + } + date = stream.readInt32(exception); + message = stream.readString(exception); + media = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 64) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 128) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } + } + if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && !(media instanceof TL_messageMediaWebPage) && message != null && message.length() != 0 && message.startsWith("-1"))) { + attachPath = stream.readString(exception); + } + if ((flags & MESSAGE_FLAG_FWD) != 0 && id < 0) { + fwd_msg_id = stream.readInt32(exception); + } + } + + public void serializeToStream(AbsSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt32(id); + stream.writeInt32(from_id); + to_id.serializeToStream(stream); + if ((flags & 4) != 0) { + stream.writeInt32(fwd_from_id); + } + if ((flags & 4) != 0) { + stream.writeInt32(fwd_date); + } + if ((flags & 8) != 0) { + stream.writeInt32(reply_to_msg_id); + } + stream.writeInt32(date); + stream.writeString(message); + media.serializeToStream(stream); + if ((flags & 64) != 0) { + reply_markup.serializeToStream(stream); + } + if ((flags & 128) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } + stream.writeString(attachPath); + if ((flags & MESSAGE_FLAG_FWD) != 0 && id < 0) { + stream.writeInt32(fwd_msg_id); + } + } + } + + public static class TL_message_old4 extends TL_message { public static int constructor = 0xc3060325; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java index dd616215..b5d7a58e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java @@ -49,7 +49,7 @@ public class ChatBaseCell extends BaseCell implements MediaController.FileDownlo void didPressedCancelSendButton(ChatBaseCell cell); void didLongPressed(ChatBaseCell cell); void didPressReplyMessage(ChatBaseCell cell, int id); - void didPressUrl(MessageObject messageObject, String url); + void didPressUrl(MessageObject messageObject, ClickableSpan url); void needOpenWebView(String url, String title, String originalUrl, int w, int h); void didClickedImage(ChatBaseCell cell); boolean canPerformActions(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java index d3821573..bc55dee1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java @@ -46,7 +46,6 @@ import org.telegram.ui.Components.GifDrawable; import org.telegram.ui.Components.RadialProgress; import org.telegram.ui.Components.ResourceLoader; import org.telegram.ui.Components.StaticLayoutEx; -import org.telegram.ui.Components.URLSpanNoUnderline; import org.telegram.ui.PhotoViewer; import java.io.File; @@ -221,16 +220,7 @@ public class ChatMediaCell extends ChatBaseCell { } } else if (linkPreviewPressed) { try { - if (pressedLink instanceof URLSpanNoUnderline) { - String url = ((URLSpanNoUnderline) pressedLink).getURL(); - if (url.startsWith("@") || url.startsWith("#") || url.startsWith("/")) { - if (delegate != null) { - delegate.didPressUrl(currentMessageObject, url); - } - } - } else { - pressedLink.onClick(this); - } + delegate.didPressUrl(currentMessageObject, pressedLink); } catch (Exception e) { FileLog.e("tmessages", e); } 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 1b5f6768..06a649c9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -40,7 +40,6 @@ import org.telegram.messenger.TLRPC; import org.telegram.ui.Components.RadialProgress; import org.telegram.ui.Components.ResourceLoader; import org.telegram.ui.Components.StaticLayoutEx; -import org.telegram.ui.Components.URLSpanNoUnderline; import java.io.File; import java.util.Locale; @@ -133,16 +132,7 @@ public class ChatMessageCell extends ChatBaseCell { } else { if (link[0] == pressedLink) { try { - if (pressedLink instanceof URLSpanNoUnderline) { - String url = ((URLSpanNoUnderline) pressedLink).getURL(); - if (url.startsWith("@") || url.startsWith("#") || url.startsWith("/")) { - if (delegate != null) { - delegate.didPressUrl(currentMessageObject, url); - } - } - } else { - pressedLink.onClick(this); - } + delegate.didPressUrl(currentMessageObject, pressedLink); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -217,7 +207,10 @@ public class ChatMessageCell extends ChatBaseCell { pressedLink.onClick(this); } else { if (drawImageButton && delegate != null) { + if (buttonState == -1) { + playSoundEffect(SoundEffectConstants.CLICK); delegate.didClickedImage(this); + } } else { TLRPC.WebPage webPage = currentMessageObject.messageOwner.media.webpage; if (Build.VERSION.SDK_INT >= 16 && webPage.embed_url != null && webPage.embed_url.length() != 0) { @@ -715,17 +708,12 @@ public class ChatMessageCell extends ChatBaseCell { } } //Plus - //Log.e("setMessageObject3", "totalHeight " + totalHeight + " namesOffset " + namesOffset + " messageObject.textHeight: " + messageObject.textHeight); if( ( showAvatar && !isChat && !messageObject.isOut() ) || ((( (showMyAvatar && !isChat) || (showMyAvatarGroup && isChat)) && messageObject.isOut()))){ if ((totalHeight < avatarSize)) { totalHeight = avatarSize + AndroidUtilities.dp(10); - //Log.e("setMessageObject2","totalHeight "+totalHeight); } //totalHeight = messageObject.textHeight + AndroidUtilities.dp(19.5f) + namesOffset; - } - - //Log.e("setMessageObject 3", "backgroundWidth " + backgroundWidth+" maxChildWidth " + maxChildWidth); } updateButtonState(dataChanged); } @@ -873,7 +861,7 @@ public class ChatMessageCell extends ChatBaseCell { if (drawImageButton) { int size = AndroidUtilities.dp(48); buttonX = (int) (linkImageView.getImageX() + (linkImageView.getImageWidth() - size) / 2.0f); - buttonY = (int) (linkImageView.getImageY() + (linkImageView.getImageHeight() - size) / 2.0f) + namesOffset; + buttonY = (int) (linkImageView.getImageY() + (linkImageView.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect(buttonX, buttonY, buttonX + AndroidUtilities.dp(48), buttonY + AndroidUtilities.dp(48)); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 29657e96..b17cbe20 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -28,6 +28,7 @@ import android.os.Bundle; import android.provider.ContactsContract; import android.provider.MediaStore; import android.text.TextUtils; +import android.text.style.ClickableSpan; import android.util.Base64; import android.util.SparseArray; import android.util.TypedValue; @@ -116,6 +117,8 @@ import org.telegram.ui.Components.SendingFileExDrawable; import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.TimerDrawable; import org.telegram.ui.Components.TypingDotsDrawable; +import org.telegram.ui.Components.URLSpanNoUnderline; +import org.telegram.ui.Components.URLSpanReplacement; import org.telegram.ui.Components.WebFrameLayout; import java.io.File; @@ -1947,6 +1950,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } AlertDialog.Builder builder = null; if (currentUser != null && userBlocked) { + if ((currentUser.flags & TLRPC.USER_FLAG_BOT) != 0) { + String botUserLast = botUser; + botUser = null; + MessagesController.getInstance().unblockUser(currentUser.id); + if (botUserLast != null && botUserLast.length() != 0) { + MessagesController.getInstance().sendBotStart(currentUser, botUserLast); + } else { + SendMessagesHelper.getInstance().sendMessage("/start", dialog_id, null, null, false); + } + } else { builder = new AlertDialog.Builder(getParentActivity()); builder.setMessage(LocaleController.getString("AreYouSureUnblockContact", R.string.AreYouSureUnblockContact)); builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() { @@ -1955,8 +1968,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not MessagesController.getInstance().unblockUser(currentUser.id); } }); + } } else if (currentUser != null && botUser != null) { - if (botUser.length() != 0) { + if (botUser != null && botUser.length() != 0) { MessagesController.getInstance().sendBotStart(currentUser, botUser); } else { SendMessagesHelper.getInstance().sendMessage("/start", dialog_id, null, null, false); @@ -2763,7 +2777,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not bottomOverlay.setVisibility(View.INVISIBLE); } if (hideKeyboard) { - chatActivityEnterView.hidePopup(); + chatActivityEnterView.hidePopup(false); if (getParentActivity() != null) { AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus()); } @@ -4561,10 +4575,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not bottomOverlayChatText.setText(LocaleController.getString("DeleteThisGroup", R.string.DeleteThisGroup)); } else { if (userBlocked) { + if ((currentUser.flags & TLRPC.USER_FLAG_BOT) != 0) { + bottomOverlayChatText.setText(LocaleController.getString("BotUnblock", R.string.BotUnblock)); + } else { bottomOverlayChatText.setText(LocaleController.getString("Unblock", R.string.Unblock)); + } } else if (botUser != null) { bottomOverlayChatText.setText(LocaleController.getString("BotStart", R.string.BotStart)); - chatActivityEnterView.hidePopup(); + chatActivityEnterView.hidePopup(false); if (getParentActivity() != null) { AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus()); } @@ -5357,7 +5375,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not updateVisibleRows(); return false; } else if (chatActivityEnterView.isPopupShowing()) { - chatActivityEnterView.hidePopup(); + chatActivityEnterView.hidePopup(true); return false; } return true; @@ -5663,15 +5681,36 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } @Override - public void didPressUrl(MessageObject messageObject, String url) { - if (url.startsWith("@")) { - MessagesController.openByUserName(url.substring(1), ChatActivity.this, 0); - } else if (url.startsWith("#")) { + public void didPressUrl(MessageObject messageObject, final ClickableSpan url) { + if (url instanceof URLSpanNoUnderline) { + String str = ((URLSpanNoUnderline) url).getURL(); + if (str.startsWith("@")) { + MessagesController.openByUserName(str.substring(1), ChatActivity.this, 0); + } else if (str.startsWith("#")) { DialogsActivity fragment = new DialogsActivity(null); - fragment.setSearchString(url); + fragment.setSearchString(str); presentFragment(fragment); - } else if (url.startsWith("/")) { - chatActivityEnterView.setCommand(messageObject, url); + } else if (str.startsWith("/")) { + chatActivityEnterView.setCommand(messageObject, str); + } + } else if (url instanceof URLSpanReplacement) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setMessage(LocaleController.formatString("OpenUrlAlert", R.string.OpenUrlAlert, ((URLSpanReplacement) url).getURL())); + builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setPositiveButton(LocaleController.getString("Open", R.string.Open), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + try { + url.onClick(fragmentView); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showDialog(builder.create()); + } else { + url.onClick(fragmentView); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java index 05436a03..c0e98fad 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -220,30 +220,46 @@ public class ChatActivityEnterView extends FrameLayoutFixed implements Notificat messageEditText.setHintTextColor(0xffb2b2b2); frameLayout.addView(messageEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM, 52, 0, isChat ? 50 : 2, 0)); messageEditText.setOnKeyListener(new View.OnKeyListener() { + + boolean ctrlPressed = false; + @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { if (i == KeyEvent.KEYCODE_BACK && !keyboardVisible && isPopupShowing()) { if (keyEvent.getAction() == 1) { + if (currentPopupContentType == 1 && botButtonsMessageObject != null) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); + preferences.edit().putInt("hidekeyboard_" + dialog_id, botButtonsMessageObject.getId()).commit(); + } showPopup(0, 0); } return true; - } else if (i == KeyEvent.KEYCODE_ENTER && sendByEnter && keyEvent.getAction() == KeyEvent.ACTION_DOWN) { + } else if (i == KeyEvent.KEYCODE_ENTER && (ctrlPressed || sendByEnter) && keyEvent.getAction() == KeyEvent.ACTION_DOWN) { sendMessage(); return true; + } else if (i == KeyEvent.KEYCODE_CTRL_LEFT || i == KeyEvent.KEYCODE_CTRL_RIGHT) { + ctrlPressed = keyEvent.getAction() == KeyEvent.ACTION_DOWN; + return true; } return false; } }); messageEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + + boolean ctrlPressed = false; + @Override public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { if (i == EditorInfo.IME_ACTION_SEND) { sendMessage(); return true; - } else if (sendByEnter) { - if (keyEvent != null && i == EditorInfo.IME_NULL && keyEvent.getAction() == KeyEvent.ACTION_DOWN) { + } else if (keyEvent != null && i == EditorInfo.IME_NULL) { + if ((ctrlPressed || sendByEnter) && keyEvent.getAction() == KeyEvent.ACTION_DOWN) { sendMessage(); return true; + } else if (i == KeyEvent.KEYCODE_CTRL_LEFT || i == KeyEvent.KEYCODE_CTRL_RIGHT) { + ctrlPressed = keyEvent.getAction() == KeyEvent.ACTION_DOWN; + return true; } } return false; @@ -326,7 +342,13 @@ public class ChatActivityEnterView extends FrameLayoutFixed implements Notificat if (botReplyMarkup != null) { if (!isPopupShowing() || currentPopupContentType != 1) { showPopup(1, 1); + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); + preferences.edit().remove("hidekeyboard_" + dialog_id).commit(); } else { + if (currentPopupContentType == 1 && botButtonsMessageObject != null) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); + preferences.edit().putInt("hidekeyboard_" + dialog_id, botButtonsMessageObject.getId()).commit(); + } openKeyboardInternal(); } } else if (hasBotCommands) { @@ -1229,13 +1251,14 @@ public class ChatActivityEnterView extends FrameLayoutFixed implements Notificat botKeyboardView.setPanelHeight(AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y ? keyboardHeightLand : keyboardHeight); botKeyboardView.setButtons(botReplyMarkup != null ? botReplyMarkup : null); if (botReplyMarkup != null) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); + boolean keyboardHidden = preferences.getInt("hidekeyboard_" + dialog_id, 0) == messageObject.getId(); if (botButtonsMessageObject != replyingMessageObject && (botReplyMarkup.flags & 2) != 0) { - SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); if (preferences.getInt("answered_" + dialog_id, 0) == messageObject.getId()) { return; } } - if (messageEditText.length() == 0 && !isPopupShowing()) { + if (!keyboardHidden && messageEditText.length() == 0 && !isPopupShowing()) { showPopup(1, 1); } } else { @@ -1381,8 +1404,12 @@ public class ChatActivityEnterView extends FrameLayoutFixed implements Notificat } } - public void hidePopup() { + public void hidePopup(boolean byBackButton) { if (isPopupShowing()) { + if (currentPopupContentType == 1 && byBackButton && botButtonsMessageObject != null) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); + preferences.edit().putInt("hidekeyboard_" + dialog_id, botButtonsMessageObject.getId()).commit(); + } showPopup(0, 0); } } 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 3421e4ea..9ea304ed 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java @@ -12,10 +12,11 @@ import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.database.DataSetObserver; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; -import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.HapticFeedbackConstants; @@ -499,7 +500,12 @@ public class EmojiView extends FrameLayout implements NotificationCenter.Notific return true; } }; - backspaceButton.setImageResource(R.drawable.ic_smiles_backspace); + //SharedPreferences themePrefs = ApplicationLoader.applicationContext.getSharedPreferences(AndroidUtilities.THEME_PREFS, AndroidUtilities.THEME_PREFS_MODE); + Drawable icon = getResources().getDrawable(R.drawable.ic_smiles_backspace); + int iconColor = themePrefs.getInt("chatEmojiViewTabIconColor", 0xffa8a8a8); + icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP); + backspaceButton.setImageDrawable(icon); + //backspaceButton.setImageResource(R.drawable.ic_smiles_backspace); backspaceButton.setBackgroundResource(R.drawable.ic_emoji_backspace); backspaceButton.setScaleType(ImageView.ScaleType.CENTER); frameLayout.addView(backspaceButton, LayoutHelper.createFrame(52, 48)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PagerSlidingTabStrip.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PagerSlidingTabStrip.java index 5eff6bcc..49157d2b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PagerSlidingTabStrip.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PagerSlidingTabStrip.java @@ -11,13 +11,17 @@ package org.telegram.ui.Components; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Canvas; +import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; +import android.util.SparseArray; import android.view.View; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.FrameLayout; @@ -120,9 +124,8 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private void addIconTab(final int position, int resId) { ImageView tab = new ImageView(getContext()); tab.setFocusable(true); - paintTabIcons(position); //tab.setImageResource(resId); - tab.setImageDrawable(getResources().getDrawable(resId)); + tab.setImageDrawable(setImageButtonState(position)); tab.setScaleType(ImageView.ScaleType.CENTER); tab.setOnClickListener(new OnClickListener() { @Override @@ -134,7 +137,96 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { tab.setSelected(position == currentPosition); } //Plus + private StateListDrawable setImageButtonState(int index) + { + Drawable nonactiveTab = getResources().getDrawable(icons[index]); + Drawable filteredNonactiveTab = nonactiveTab.getConstantState().newDrawable(); + Drawable activeTab = getResources().getDrawable(icons_active[index]); + Drawable filteredActiveTab = activeTab.getConstantState().newDrawable(); + + SharedPreferences themePrefs = ApplicationLoader.applicationContext.getSharedPreferences(AndroidUtilities.THEME_PREFS, AndroidUtilities.THEME_PREFS_MODE); + int tabColor = themePrefs.getInt("chatEmojiViewTabColor", AndroidUtilities.getIntDarkerColor("themeColor", -0x15)); + int iconColor = themePrefs.getInt("chatEmojiViewTabIconColor", 0xffa8a8a8); + + int focused = android.R.attr.state_focused; + int selected = android.R.attr.state_selected; + int pressed = android.R.attr.state_pressed; + + final FilterableStateListDrawable selectorDrawable = new FilterableStateListDrawable(); + + selectorDrawable.addState(new int[] {-focused, -selected, -pressed}, filteredNonactiveTab, new PorterDuffColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP)); + selectorDrawable.addState(new int[] {-focused, -selected, -pressed}, nonactiveTab); + selectorDrawable.addState(new int[] {-focused, selected, -pressed}, filteredActiveTab, new PorterDuffColorFilter(tabColor, PorterDuff.Mode.SRC_ATOP)); + selectorDrawable.addState(new int[] {-focused, selected, -pressed}, activeTab); + selectorDrawable.addState(new int[] {pressed}, filteredActiveTab, new PorterDuffColorFilter(tabColor, PorterDuff.Mode.SRC_ATOP)); + selectorDrawable.addState(new int[] {pressed}, activeTab); + selectorDrawable.addState(new int[]{focused, -selected, -pressed}, filteredNonactiveTab, new PorterDuffColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP)); + selectorDrawable.addState(new int[]{focused, -selected, -pressed}, nonactiveTab); + selectorDrawable.addState(new int[]{focused, selected, -pressed}, filteredNonactiveTab, new PorterDuffColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP)); + selectorDrawable.addState(new int[]{focused, selected, -pressed}, nonactiveTab); + + return selectorDrawable; + } + + public class FilterableStateListDrawable extends StateListDrawable { + + private int currIdx = -1; + private int childrenCount = 0; + private SparseArray filterMap; + + public FilterableStateListDrawable() { + super(); + filterMap = new SparseArray<>(); + } + + @Override + public void addState(int[] stateSet, Drawable drawable) { + super.addState(stateSet, drawable); + childrenCount++; + } + + public void addState(int[] stateSet, Drawable drawable, ColorFilter colorFilter) { + // this is a new custom method, does not exist in parent class + int currChild = childrenCount; + addState(stateSet, drawable); + filterMap.put(currChild, colorFilter); + } + + @Override + public boolean selectDrawable(int idx) { + if (currIdx != idx) { + setColorFilter(getColorFilterForIdx(idx)); + } + boolean result = super.selectDrawable(idx); + // check if the drawable has been actually changed to the one I expect + if (getCurrent() != null) { + currIdx = result ? idx : currIdx; + if (!result) { + // it has not been changed, meaning, back to previous filter + setColorFilter(getColorFilterForIdx(currIdx)); + } + } else if (getCurrent() == null) { + currIdx = -1; + setColorFilter(null); + } + return result; + } + + private ColorFilter getColorFilterForIdx(int idx) { + return filterMap != null ? filterMap.get(idx) : null; + } + } + private int[] icons = { + R.drawable.ic_smiles_recent, + R.drawable.ic_smiles_smile, + R.drawable.ic_smiles_flower, + R.drawable.ic_smiles_bell, + R.drawable.ic_smiles_car, + R.drawable.ic_smiles_grid, + R.drawable.ic_smiles_sticker}; + + private int[] icons_active = { R.drawable.ic_smiles_recent_active, R.drawable.ic_smiles_smile_active, R.drawable.ic_smiles_flower_active, @@ -142,14 +234,17 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { R.drawable.ic_smiles_car_active, R.drawable.ic_smiles_grid_active, R.drawable.ic_smiles_sticker_active}; - +/* private void paintTabIcons(int i){ SharedPreferences themePrefs = ApplicationLoader.applicationContext.getSharedPreferences(AndroidUtilities.THEME_PREFS, AndroidUtilities.THEME_PREFS_MODE); int tabColor = themePrefs.getInt("chatEmojiViewTabColor", AndroidUtilities.getIntDarkerColor("themeColor", -0x15)); - Drawable icon = getResources().getDrawable(icons[i]); - icon.setColorFilter(tabColor, PorterDuff.Mode.SRC_IN); + Drawable icon_active = getResources().getDrawable(icons_active[i]); + icon_active.setColorFilter(tabColor, PorterDuff.Mode.SRC_IN); + //Drawable icon = getResources().getDrawable(icons[i]); + //int iconColor = themePrefs.getInt("chatEmojiViewTabIconColor", 0xffa8a8a8); + //icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN); //iv.setImageDrawable(icon); - }// + }*/ private void updateTabStyles() { for (int i = 0; i < tabCount; i++) { @@ -228,6 +323,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { currentPosition = position; + currentPositionOffset = positionOffset; scrollToChild(position, (int) (positionOffset * tabsContainer.getChildAt(position).getWidth())); invalidate(); @@ -251,8 +347,8 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { if (delegatePageListener != null) { delegatePageListener.onPageSelected(position); } - // - if(position == currentPosition)paintTabIcons(position); + //plus + //if(position == currentPosition)paintTabIcons(position); // for (int a = 0; a < tabsContainer.getChildCount(); a++) { tabsContainer.getChildAt(a).setSelected(a == position); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java index 109143ff..1b6de6c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MediaActivity.java @@ -44,7 +44,6 @@ import org.telegram.android.MediaController; import org.telegram.android.MessagesController; import org.telegram.android.query.SharedMediaQuery; import org.telegram.messenger.ApplicationLoader; -import org.telegram.messenger.BuildConfig; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; @@ -290,6 +289,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } MessagesController.getInstance().deleteMessages(ids, random_ids, currentEncryptedChat); actionBar.hideActionMode(); + actionBar.closeSearchField(); selectedFiles.clear(); } }); @@ -400,9 +400,9 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No dropDownContainer.setSubMenuOpenSide(1); dropDownContainer.addSubItem(shared_media_item, LocaleController.getString("SharedMediaTitle", R.string.SharedMediaTitle), 0); dropDownContainer.addSubItem(files_item, LocaleController.getString("DocumentsTitle", R.string.DocumentsTitle), 0); - //if ((int) dialog_id != 0) { - if(BuildConfig.DEBUG)dropDownContainer.addSubItem(links_item, LocaleController.getString("LinksTitle", R.string.LinksTitle), 0); - //} + if ((int) dialog_id != 0) { + dropDownContainer.addSubItem(links_item, LocaleController.getString("LinksTitle", R.string.LinksTitle), 0); + } actionBar.addView(dropDownContainer, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, AndroidUtilities.isTablet() ? 64 : 56, 0, 40, 0)); dropDownContainer.setOnClickListener(new View.OnClickListener() { @Override @@ -511,6 +511,10 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No SharedDocumentCell cell = (SharedDocumentCell) view; MessageObject message = cell.getDocument(); return MediaActivity.this.onItemLongClick(message, view, 0); + } else if (selectedMode == 3 && view instanceof SharedLinkCell) { + SharedLinkCell cell = (SharedLinkCell) view; + MessageObject message = cell.getMessage(); + return MediaActivity.this.onItemLongClick(message, view, 0); } return false; } @@ -674,6 +678,14 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } } + @Override + public void onPause() { + super.onPause(); + if (dropDownContainer != null) { + dropDownContainer.closeSubMenu(); + } + } + @Override public void onResume() { super.onResume(); @@ -829,12 +841,12 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } else if (selectedMode == 3) { listView.setAdapter(linksAdapter); dropDown.setText(LocaleController.getString("LinksTitle", R.string.LinksTitle)); - emptyImageView.setImageResource(R.drawable.tip2); + emptyImageView.setImageResource(R.drawable.tip3); emptyTextView.setText(LocaleController.getString("NoSharedLinks", R.string.NoSharedLinks)); searchItem.setVisibility(!sharedMediaData[3].messages.isEmpty() ? View.VISIBLE : View.GONE); if (!sharedMediaData[selectedMode].loading && !sharedMediaData[selectedMode].endReached && sharedMediaData[selectedMode].messages.isEmpty()) { sharedMediaData[selectedMode].loading = true; - SharedMediaQuery.loadMedia(dialog_id, 0, 50, 0, SharedMediaQuery.MEDIA_URL, false, classGuid); + SharedMediaQuery.loadMedia(dialog_id, 0, 50, 0, SharedMediaQuery.MEDIA_URL, true, classGuid); } listView.setVisibility(View.VISIBLE); if (sharedMediaData[selectedMode].loading && sharedMediaData[selectedMode].messages.isEmpty()) { @@ -877,6 +889,8 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No ((SharedDocumentCell) view).setChecked(true, true); } else if (view instanceof SharedPhotoVideoCell) { ((SharedPhotoVideoCell) view).setChecked(a, true, true); + } else if (view instanceof SharedLinkCell) { + ((SharedLinkCell) view).setChecked(true, true); } actionBar.showActionMode(); return true; @@ -902,6 +916,8 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No ((SharedDocumentCell) view).setChecked(selectedFiles.containsKey(message.getId()), true); } else if (view instanceof SharedPhotoVideoCell) { ((SharedPhotoVideoCell) view).setChecked(a, selectedFiles.containsKey(message.getId()), true); + } else if (view instanceof SharedLinkCell) { + ((SharedLinkCell) view).setChecked(selectedFiles.containsKey(message.getId()), true); } } else { if (selectedMode == 0) { @@ -979,13 +995,20 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } else if (selectedMode == 3) { try { TLRPC.WebPage webPage = message.messageOwner.media.webpage; - if (Build.VERSION.SDK_INT >= 16 && webPage.embed_url != null && webPage.embed_url.length() != 0) { - BottomSheet.Builder builder = new BottomSheet.Builder(getParentActivity()); - builder.setCustomView(new WebFrameLayout(getParentActivity(), builder.create(), webPage.title, webPage.url, webPage.embed_url, webPage.embed_width, webPage.embed_height)); - builder.setUseFullWidth(true); - showDialog(builder.create()); - } else { - Uri uri = Uri.parse(webPage.url); + String link = null; + if (webPage != null && !(webPage instanceof TLRPC.TL_webPageEmpty)) { + if (Build.VERSION.SDK_INT >= 16 && webPage.embed_url != null && webPage.embed_url.length() != 0) { + openWebView(webPage); + return; + } else { + link = webPage.url; + } + } + if (link == null) { + link = ((SharedLinkCell) view).getLink(0); + } + if (link != null) { + Uri uri = Uri.parse(link); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Browser.EXTRA_APPLICATION_ID, getParentActivity().getPackageName()); getParentActivity().startActivity(intent); @@ -997,6 +1020,13 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } } + private void openWebView(TLRPC.WebPage webPage) { + BottomSheet.Builder builder = new BottomSheet.Builder(getParentActivity()); + builder.setCustomView(new WebFrameLayout(getParentActivity(), builder.create(), webPage.title, webPage.url, webPage.embed_url, webPage.embed_width, webPage.embed_height)); + builder.setUseFullWidth(true); + showDialog(builder.create()); + } + private void fixLayoutInternal() { if (listView == null) { return; @@ -1091,15 +1121,26 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } else { if (convertView == null) { convertView = new SharedLinkCell(mContext); + ((SharedLinkCell) convertView).setDelegate(new SharedLinkCell.SharedLinkCellDelegate() { + @Override + public void needOpenWebView(TLRPC.WebPage webPage) { + MediaActivity.this.openWebView(webPage); + } + + @Override + public boolean canPerformActions() { + return !actionBar.isActionModeShowed(); + } + }); } - SharedLinkCell sharedDocumentCell = (SharedLinkCell) convertView; + SharedLinkCell sharedLinkCell = (SharedLinkCell) convertView; MessageObject messageObject = messageObjects.get(position - 1); - sharedDocumentCell.setLink(messageObject, position != messageObjects.size() || section == sharedMediaData[3].sections.size() - 1 && sharedMediaData[3].loading); - /*if (actionBar.isActionModeShowed()) { - sharedDocumentCell.setChecked(selectedFiles.containsKey(messageObject.getId()), !scrolling); + sharedLinkCell.setLink(messageObject, position != messageObjects.size() || section == sharedMediaData[3].sections.size() - 1 && sharedMediaData[3].loading); + if (actionBar.isActionModeShowed()) { + sharedLinkCell.setChecked(selectedFiles.containsKey(messageObject.getId()), !scrolling); } else { - sharedDocumentCell.setChecked(false, !scrolling); - }*/ + sharedLinkCell.setChecked(false, !scrolling); + } } } else { if (convertView == null) { @@ -1393,12 +1434,8 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No if (user == null) { return; } - if (user.access_hash != 0) { - req.peer = new TLRPC.TL_inputPeerForeign(); - req.peer.access_hash = user.access_hash; - } else { - req.peer = new TLRPC.TL_inputPeerContact(); - } + req.peer = new TLRPC.TL_inputPeerUser(); + req.peer.access_hash = user.access_hash; req.peer.user_id = uid; } final int currentReqId = ++lastReqId; @@ -1529,7 +1566,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No @Override public boolean isEnabled(int i) { - return i != searchResult.size(); + return i != searchResult.size() + globalSearch.size(); } @Override @@ -1589,15 +1626,26 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No } else if (currentType == 3) { if (view == null) { view = new SharedLinkCell(mContext); + ((SharedLinkCell) view).setDelegate(new SharedLinkCell.SharedLinkCellDelegate() { + @Override + public void needOpenWebView(TLRPC.WebPage webPage) { + MediaActivity.this.openWebView(webPage); + } + + @Override + public boolean canPerformActions() { + return !actionBar.isActionModeShowed(); + } + }); } SharedLinkCell sharedLinkCell = (SharedLinkCell) view; MessageObject messageObject = getItem(i); sharedLinkCell.setLink(messageObject, i != getCount() - 1); - /*if (actionBar.isActionModeShowed()) { - sharedDocumentCell.setChecked(selectedFiles.containsKey(messageObject.getId()), !scrolling); + if (actionBar.isActionModeShowed()) { + sharedLinkCell.setChecked(selectedFiles.containsKey(messageObject.getId()), !scrolling); } else { - sharedDocumentCell.setChecked(false, !scrolling); - }*/ + sharedLinkCell.setChecked(false, !scrolling); + } } return view; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java index 09703b1b..185f765c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java @@ -293,6 +293,14 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati return fragmentView; } + @Override + public void onPause() { + super.onPause(); + if (dropDownContainer != null) { + dropDownContainer.closeSubMenu(); + } + } + @Override public void onResume() { super.onResume(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java index 68b6c659..0bdda299 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java @@ -1067,7 +1067,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC @Override public void onBackPressed() { if (chatActivityEnterView.isPopupShowing()) { - chatActivityEnterView.hidePopup(); + chatActivityEnterView.hidePopup(true); return; } super.onBackPressed(); @@ -1090,7 +1090,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC super.onPause(); overridePendingTransition(0, 0); if (chatActivityEnterView != null) { - chatActivityEnterView.hidePopup(); + chatActivityEnterView.hidePopup(false); chatActivityEnterView.setFieldFocused(false); } ConnectionsManager.getInstance().setAppPaused(true, false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index 40970fde..bd3ab8df 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -273,6 +273,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (id == -1) { finishFragment(); } else if (id == block_contact) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user == null) { + return; + } + if ((user.flags & TLRPC.USER_FLAG_BOT) == 0) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); if (!userBlocked) { builder.setMessage(LocaleController.getString("AreYouSureBlockContact", R.string.AreYouSureBlockContact)); @@ -292,6 +297,15 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); + } else { + if (!userBlocked) { + MessagesController.getInstance().blockUser(user_id); + } else { + MessagesController.getInstance().unblockUser(user_id); + SendMessagesHelper.getInstance().sendMessage("/start", user_id, null, null, false); + finishFragment(); + } + } } else if (id == add_contact) { TLRPC.User user = MessagesController.getInstance().getUser(user_id); Bundle args = new Bundle(); @@ -1421,9 +1435,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. item.addSubItem(share_contact, LocaleController.getString("ShareContact", R.string.ShareContact), 0); item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); } else { - item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); + if ((user.flags & TLRPC.USER_FLAG_BOT) != 0) { + item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BotStop", R.string.BotStop) : LocaleController.getString("BotRestart", R.string.BotRestart), 0); + } else { + item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); + } } } else { + //ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); ActionBarMenuItem item = menu.addItem(0, dots); item.addSubItem(share_contact, LocaleController.getString("ShareContact", R.string.ShareContact), 0); item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); @@ -1431,6 +1450,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. item.addSubItem(delete_contact, LocaleController.getString("DeleteContact", R.string.DeleteContact), 0); } } else if (chat_id != 0) { + //ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); ActionBarMenuItem item = menu.addItem(0, dots); if (chat_id > 0) { item.addSubItem(add_member, LocaleController.getString("AddMember", R.string.AddMember), 0); @@ -1457,7 +1477,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. args.putBoolean("scrollToTopOnResume", true); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); - int lower_part = (int)dialog_id; + int lower_part = (int) dialog_id; if (lower_part != 0) { if (lower_part > 0) { args.putInt("user_id", lower_part); @@ -1465,7 +1485,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. args.putInt("chat_id", -lower_part); } } else { - args.putInt("enc_id", (int)(dialog_id >> 32)); + args.putInt("enc_id", (int) (dialog_id >> 32)); } presentFragment(new ChatActivity(args), true); removeSelfFromStack(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatActivity.java index 6a886dd9..e411cb5c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatActivity.java @@ -82,6 +82,7 @@ public class ThemingChatActivity extends BaseFragment { private int editTextIconsColorRow; private int emojiViewBGColorRow; private int emojiViewTabColorRow; + private int emojiViewTabIconColorRow; private int sendColorRow; private int memberColorCheckRow; private int memberColorRow; @@ -173,6 +174,7 @@ public class ThemingChatActivity extends BaseFragment { attachTextColorRow = rowCount++; emojiViewBGColorRow = rowCount++; + emojiViewTabIconColorRow = rowCount++; emojiViewTabColorRow = rowCount++; return true; @@ -719,6 +721,20 @@ public class ThemingChatActivity extends BaseFragment { },themePrefs.getInt("chatEmojiViewBGColor", 0xfff5f6f7), CENTER, 0, true); + colorDialog.show(); + } else if (i == emojiViewTabIconColorRow) { + if (getParentActivity() == null) { + return; + } + LayoutInflater li = (LayoutInflater)getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + li.inflate(R.layout.colordialog, null, false); + ColorSelectorDialog colorDialog = new ColorSelectorDialog(getParentActivity(), new OnColorChangedListener() { + @Override + public void colorChanged(int color) { + commitInt("chatEmojiViewTabIconColor", color); + } + + },themePrefs.getInt("chatEmojiViewTabIconColor", 0xffa8a8a8), CENTER, 0, true); colorDialog.show(); } else if (i == emojiViewTabColorRow) { if (getParentActivity() == null) { @@ -1039,6 +1055,8 @@ public class ThemingChatActivity extends BaseFragment { resetPref("chatAttachTextColor"); } else if (i == emojiViewBGColorRow) { resetPref("chatEmojiViewBGColor"); + } else if (i == emojiViewTabIconColorRow) { + resetPref("chatEmojiViewTabIconColor"); } else if (i == emojiViewTabColorRow) { resetPref("chatEmojiViewTabColor"); } else{ @@ -1155,7 +1173,7 @@ public class ThemingChatActivity extends BaseFragment { i == textSizeRow || i == timeSizeRow || i == dateColorRow || i == dateSizeRow || i == dateBubbleColorRow || i == rTextColorRow || i == rLinkColorRow || i == lTextColorRow || i == lLinkColorRow || i == rTimeColorRow|| i == lTimeColorRow || i == checksColorRow || i == memberColorCheckRow || AndroidUtilities.getBoolPref("chatMemberColorCheck") && i == memberColorRow || i == contactNameColorRow || i == forwardRightNameColorRow || i == forwardLeftNameColorRow || i == showUsernameCheckRow || i == editTextSizeRow || i == editTextColorRow || i == editTextIconsColorRow || i == sendColorRow || i == editTextBGColorRow || i == attachBGColorRow || i == attachTextColorRow || - i == emojiViewBGColorRow || i == emojiViewTabColorRow; + i == emojiViewBGColorRow || i == emojiViewTabIconColorRow || i == emojiViewTabColorRow; } @Override @@ -1342,6 +1360,8 @@ public class ThemingChatActivity extends BaseFragment { textCell.setTextAndColor(LocaleController.getString("EditTextIconsColor", R.string.EditTextIconsColor), themePrefs.getInt("chatEditTextIconsColor", 0xffadadad), true); } else if (i == emojiViewBGColorRow) { textCell.setTextAndColor(LocaleController.getString("EmojiViewBGColor", R.string.EmojiViewBGColor), themePrefs.getInt("chatEmojiViewBGColor", 0xfff5f6f7), true); + } else if (i == emojiViewTabIconColorRow) { + textCell.setTextAndColor(LocaleController.getString("EmojiViewTabIconColor", R.string.EmojiViewTabIconColor), themePrefs.getInt("chatEmojiViewTabIconColor", 0xffa8a8a8), false); } else if (i == emojiViewTabColorRow) { textCell.setTextAndColor(LocaleController.getString("EmojiViewTabColor", R.string.EmojiViewTabColor), themePrefs.getInt("chatEmojiViewTabColor", AndroidUtilities.getIntDarkerColor("themeColor",-0x15)), false); } @@ -1365,7 +1385,7 @@ public class ThemingChatActivity extends BaseFragment { i == solidBGColorRow || i == rBubbleColorRow || i == lBubbleColorRow || i == nameColorRow || i == statusColorRow || i == dateColorRow || i == dateBubbleColorRow || i == rTextColorRow || i == rLinkColorRow || i == lTextColorRow || i == lLinkColorRow || i == rLinkColorRow || i == rTimeColorRow || i == lTimeColorRow || i == checksColorRow || i == memberColorRow || i == contactNameColorRow || i == forwardRightNameColorRow || i == forwardLeftNameColorRow || i == sendColorRow || i == editTextColorRow || i == editTextBGColorRow || i == editTextIconsColorRow || i == attachBGColorRow || i == attachTextColorRow || - i == emojiViewBGColorRow || i == emojiViewTabColorRow) { + i == emojiViewBGColorRow || i == emojiViewTabIconColorRow || i == emojiViewTabColorRow) { return 3; } else if (i == solidBGColorCheckRow || i == memberColorCheckRow || i == showUsernameCheckRow || i == avatarAlignTopRow || i == ownAvatarAlignTopRow || i == showContactAvatar || i == showOwnAvatar || i == showOwnAvatarGroup) { return 4; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatsActivity.java index 64f5769e..6dbb1e94 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemingChatsActivity.java @@ -219,7 +219,7 @@ public class ThemingChatsActivity extends BaseFragment { public void colorChanged(int color) { commitInt( key, color); } - },themePrefs.getInt( key, 0xffffffff), CENTER, 0, false); + },themePrefs.getInt( key, 0xffffffff), CENTER, 0, true); colorDialog.show(); } else if (i == headerIconsColorRow) { if (getParentActivity() == null) { @@ -260,7 +260,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, 0xffdcdcdc), CENTER, 0, false); + },themePrefs.getInt( key, 0xffdcdcdc), CENTER, 0, true); colorDialog.show(); } /*else if (i == usernameTitleRow) { boolean b = themePrefs.getBoolean( key, true); @@ -314,7 +314,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, 0xff212121), CENTER, 0, false); + },themePrefs.getInt( key, 0xff212121), CENTER, 0, true); colorDialog.show(); } else if (i == groupNameColorRow) { @@ -329,7 +329,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, themePrefs.getInt("chatsNameColor", 0xff212121)), CENTER, 0, false); + },themePrefs.getInt( key, themePrefs.getInt("chatsNameColor", 0xff212121)), CENTER, 0, true); colorDialog.show(); } else if (i == unknownNameColorRow) { @@ -344,7 +344,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, themePrefs.getInt("chatsNameColor", 0xff212121)), CENTER, 0, false); + },themePrefs.getInt( key, themePrefs.getInt("chatsNameColor", 0xff212121)), CENTER, 0, true); colorDialog.show(); } else if (i == groupIconColorRow) { @@ -401,7 +401,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, 0xff8f8f8f), CENTER, 0, false); + },themePrefs.getInt( key, 0xff8f8f8f), CENTER, 0, true); colorDialog.show(); } else if (i == memberColorRow) { @@ -416,7 +416,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, darkColor), CENTER, 0, false); + },themePrefs.getInt( key, darkColor), CENTER, 0, true); colorDialog.show(); } else if (i == mediaColorRow) { @@ -431,7 +431,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( "chatsMediaColor", color); } - },themePrefs.getInt( "chatsMediaColor", themePrefs.getInt("chatsMemberColor", darkColor)), CENTER, 0, false); + },themePrefs.getInt( "chatsMediaColor", themePrefs.getInt("chatsMemberColor", darkColor)), CENTER, 0, true); colorDialog.show(); } else if (i == typingColorRow) { @@ -446,7 +446,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, defColor), CENTER, 0, false); + },themePrefs.getInt( key, defColor), CENTER, 0, true); colorDialog.show(); } else if (i == timeColorRow) { @@ -461,7 +461,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, 0xff999999), CENTER, 0, false); + },themePrefs.getInt( key, 0xff999999), CENTER, 0, true); colorDialog.show(); } else if (i == countColorRow) { if (getParentActivity() == null) { @@ -475,7 +475,7 @@ public class ThemingChatsActivity extends BaseFragment { commitInt( key, color); } - },themePrefs.getInt( key, 0xffffffff), CENTER, 0, false); + },themePrefs.getInt( key, 0xffffffff), CENTER, 0, true); colorDialog.show(); } else if (i == countBGColorRow) { if (getParentActivity() == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemingProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemingProfileActivity.java index ca950be4..35087ce2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemingProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemingProfileActivity.java @@ -467,7 +467,7 @@ public class ThemingProfileActivity extends BaseFragment { if (i == headerSection2Row) { ((HeaderCell) view).setText(LocaleController.getString("Header", R.string.Header)); } else if (i == rowsSection2Row) { - ((HeaderCell) view).setText(LocaleController.getString("ChatList", R.string.ChatList)); + ((HeaderCell) view).setText(LocaleController.getString("OptionsList", R.string.OptionsList)); } } else if (type == 2) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java index 9e3ed486..55da83c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java @@ -88,6 +88,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur private int resultWidth = 0; private int resultHeight = 0; private int bitrate = 0; + private int originalBitrate = 0; private float videoDuration = 0; private long startTime = 0; private long endTime = 0; @@ -252,7 +253,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur } if (delegate != null) { if (compressVideo.getVisibility() == View.GONE || compressVideo.getVisibility() == View.VISIBLE && !compressVideo.isChecked()) { - delegate.didFinishEditVideo(videoPath, startTime, endTime, originalWidth, originalHeight, rotationValue, originalWidth, originalHeight, bitrate, estimatedSize, esimatedDuration); + delegate.didFinishEditVideo(videoPath, startTime, endTime, originalWidth, originalHeight, rotationValue, originalWidth, originalHeight, originalBitrate, estimatedSize, esimatedDuration); } else { delegate.didFinishEditVideo(videoPath, startTime, endTime, resultWidth, resultHeight, rotationValue, originalWidth, originalHeight, bitrate, estimatedSize, esimatedDuration); } @@ -787,7 +788,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur if (headerBox.getWidth() != 0 && headerBox.getHeight() != 0) { trackHeaderBox = headerBox; tBitrate = trackBitrate; - bitrate = (int)(trackBitrate / 100000 * 100000); + originalBitrate = bitrate = (int)(trackBitrate / 100000 * 100000); if (bitrate > 900000) { bitrate = 900000; } diff --git a/TMessagesProj/src/main/res/drawable-hdpi/tip1.png b/TMessagesProj/src/main/res/drawable-hdpi/tip1.png index d979e349..16abb9b9 100644 Binary files a/TMessagesProj/src/main/res/drawable-hdpi/tip1.png and b/TMessagesProj/src/main/res/drawable-hdpi/tip1.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/tip1.png b/TMessagesProj/src/main/res/drawable-mdpi/tip1.png index 40ae2af8..af62d2e3 100644 Binary files a/TMessagesProj/src/main/res/drawable-mdpi/tip1.png and b/TMessagesProj/src/main/res/drawable-mdpi/tip1.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/tip1.png b/TMessagesProj/src/main/res/drawable-xhdpi/tip1.png index a6a75ed7..98934f27 100644 Binary files a/TMessagesProj/src/main/res/drawable-xhdpi/tip1.png and b/TMessagesProj/src/main/res/drawable-xhdpi/tip1.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/Thumbs.db b/TMessagesProj/src/main/res/drawable-xxhdpi/Thumbs.db index f07d883e..d4c69da4 100644 Binary files a/TMessagesProj/src/main/res/drawable-xxhdpi/Thumbs.db and b/TMessagesProj/src/main/res/drawable-xxhdpi/Thumbs.db differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png b/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png index 5d9960e3..f126139a 100644 Binary files a/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png and b/TMessagesProj/src/main/res/drawable-xxhdpi/tip1.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxxhdpi/Thumbs.db b/TMessagesProj/src/main/res/drawable-xxxhdpi/Thumbs.db index 0dfd537d..8ae53874 100644 Binary files a/TMessagesProj/src/main/res/drawable-xxxhdpi/Thumbs.db and b/TMessagesProj/src/main/res/drawable-xxxhdpi/Thumbs.db differ diff --git a/TMessagesProj/src/main/res/values-ar/strings.xml b/TMessagesProj/src/main/res/values-ar/strings.xml index 6fc6d973..fd2efad0 100644 --- a/TMessagesProj/src/main/res/values-ar/strings.xml +++ b/TMessagesProj/src/main/res/values-ar/strings.xml @@ -137,6 +137,7 @@ فتح في المتصفح انسخ الرابط أرسل %1$s + هل ترغب في فتح الرابط باستخدام %1$s ؟ %1$s قام بتعيين عداد التدمير الذاتي إلى to %2$s لقد قمت بتعيين التدمير الذاتي إلى %1$s @@ -549,6 +550,9 @@ لا يستطيع الوصول للرسائل ماذا يستطيع هذا البوت عمله؟ إبدأ + إعادة تشغيل + إيقاف البوت + إعادة تعيين البوت التالي رجوع @@ -837,8 +841,8 @@ h:mm a %1$s الساعة %2$s -تم تحديث تيليجرام نسخة الاندرويد. الجديد في نسخة ٣.١.٢: \n\n- كلمات البحث الحديثة. \n- اضغط باستمرار لاستعراض الملصق قبل إرساله. - 591 + تم تحديث تيليجرام نسخة الآندرويد. الجديد في نسخة 3.1.3:\n\n- قسم جديد للروابط المشاركة في معلومات المحادثة \n- استعراض لروابط الصور داخل التطبيق. + 594 بلاس مسنجر للأندرويد diff --git a/TMessagesProj/src/main/res/values-ca/strings.xml b/TMessagesProj/src/main/res/values-ca/strings.xml index 1f11252c..eb8c039c 100644 --- a/TMessagesProj/src/main/res/values-ca/strings.xml +++ b/TMessagesProj/src/main/res/values-ca/strings.xml @@ -56,6 +56,7 @@ D\'aquí %1$s Inhabilita ETIQUETES + RECENT Llista de difusió nova Introduïu el nom de la llista @@ -63,6 +64,7 @@ Afegeix un destinatari Treu de la llista de difusió + Afegiu fitxers a la biblioteca de música del dispositiu per veure\'ls aquí. Música Artista desconegut Títol desconegut @@ -122,7 +124,7 @@ Elimina aquest xat LLISQUEU PER CANCEL·LAR Desa a «Baixades» - Desa a música + Desa-ho a música Comparteix Aplica la localització El fitxer adjunt no és compatible @@ -132,6 +134,7 @@ Obre al navegador Copia la URL Envia %1$s + Voleu obrir la url %1$s? %1$s ha definit l\'autodestrucció en %2$s Heu definit l\'autodestrucció en %1$s @@ -202,12 +205,12 @@ Voleu revocar l\'enllaç? Un cop ho feu, ningú podrà unir-se al grup utilitzant-lo. L\'enllaç d\'invitació anterior no està actiu. S\'ha generat un enllaç nou. Revoca - Enllaç de revocació + Revoca l\'enllaç Copia l\'enllaç Comparteix l\'enllaç Qualsevol qui tingui Telegram instal·lat serà capaç d\'unir-se al grup tot seguint l\'enllaç. - Fitxers compartits + Elements compartits Configuració Afegeix un membre Elimina i surt del grup @@ -280,7 +283,7 @@ Vibració Vista prèvia Reinicialitza - Reinicialitza totes les notificacions + Restaura totes les notificacions Desfà la configuració de les notificacions personalitzades per a tots els contactes i grups. Notificacions i sons Usuaris blocats @@ -297,7 +300,7 @@ En unir-se un contacte al Telegram PEBBLE Llengua - Tingueu present que el suport del Telegram és fet per voluntaris. Intentem respondre tan ràpid com és possible, però podem trigar una mica.
]]>Sisplau, feu una ullada a les PMF del Telegram]]>. Tenen resposta a la majoria de preguntes i també consells importants per a la resolució de problemes]]>.
+ Tingueu present que el suport del Telegram és ofert per voluntaris. Intentem respondre tan ràpid com ens és possible, però podem trigar una mica.
]]>Sisplau, feu una ullada a les PMF del Telegram]]>. Tenen la resposta a la majoria de preguntes i també consells importants per a la resolució de problemes]]>.
Pregunta-ho a un voluntari PMF del Telegram https://telegram.org/faq @@ -387,9 +390,11 @@ Inhabilitat Compartiu fotos i vídeos a aquest xat i accediu-hi des de qualsevol dispositiu. - Documents - Fitxers compartits - Compartiu fitxers i documents a aquest xat i accediu-hi des de qualsevol dispositiu. + Fitxers + Multimèdia + Enllaços + Compartiu fitxers i documents a aquí i accediu-hi des de qualsevol dels vostres dispositiu. + Compartiu enllaços aquí i accediu-hi des de qualsevol dels vostres dispositius. Mapa Satèl·lit @@ -542,6 +547,9 @@ no té accés als missatges Què pot fer aquest bot? INICIA + REINICIA + Atura el bot + Reinicia el bot Endavant Enrere @@ -829,6 +837,9 @@ HH:mm h:mm a %1$s a les %2$s + + S\'ha actualitzat el Telegram per a l\'Android. Novetats a la versió 3.1.3:\n\n- Nova secció \'Enllaços compartits\' a la informació del xat\n- Previsualització, dins de l\'aplicació, per a enllaços a fotos + 594 Plus Messenger per Android @@ -841,7 +852,7 @@ General Pantalles Pantalla principal - Pantalla de xats + Pantalla de xat Pantalla de contactes Capçalera Files @@ -965,5 +976,8 @@ Mostra el meu avatar als grups Alinea el meu avatar a dalt Color del títol/botó dels diàlegs - Mostra el nom d\'usuari dels membres + Mostra el nom d\'usuari als missatges + No aturis els àudios + Color del divisor de llista + Centra l\'avatar, el nom i el número de telèfon diff --git a/TMessagesProj/src/main/res/values-de/strings.xml b/TMessagesProj/src/main/res/values-de/strings.xml index 21267f9f..caf3cf11 100644 --- a/TMessagesProj/src/main/res/values-de/strings.xml +++ b/TMessagesProj/src/main/res/values-de/strings.xml @@ -1,7 +1,4 @@ - - - - + Plus Messenger Deutsch @@ -137,6 +134,7 @@ Im Browser öffnen URL kopieren %1$s senden + URL %1$s öffnen? %1$s hat den Selbstzerstörungs-Timer auf %2$s gesetzt Du hast den Selbstzerstörungs-Timer auf %1$s gesetzt @@ -549,6 +547,9 @@ kein Zugriff auf Nachrichten Was kann dieser Bot? STARTEN + NEUSTART + Bot Anhalten + Bot Neu Starten Weiter Zurück @@ -837,11 +838,11 @@ h:mm a %1$s um %2$s - Plus Messenger für Android wurde aktualisiert. Neu in Version 3.1.2:\n\n- Die letzte Suche wird gespeichert\n- Stickervorschau: Sticker vor dem Senden antippen und halten - 591 - -\n\nNeu in 3.1.1.9:\n\n- Neue Sprechblase iOS hinzugefügt (Dank an Edwin Macalopu)\n- Neuer MOD Benutzernamen zusammen mit Mitgliedsnamen in Gruppen anzeigen\n- Zeigt Gruppe Admin im Gruppenprofil. Der Admin Benutzer hat ein eigenes Symbol\n- Neuer MOD Profilbild, Name und Telefonnummer im Hauptmenü zentrieren\n- Neuer MOD um Wiedergabe von Audio im Chat zu halten wird der Näherungssensor deaktiviert\n- Neuer MOD ändert Profilbild Farbe in Profilübersicht \n- Fehlerbeseitigung\n\n Prüfen und Anwenden von Themen für den Plus Messenger: https://play.google.com/store/apps/details?id=es.rafalense.themes--> +\n\nNeu in Version 3.1.3.0:\n\n- Neuer MOD ändert Standard Emoji Tab Symbol Farbe\n- Fehlerbeseitigung Plus Messenger für Android Themen bearbeiten Ungültiger Hex-Code! @@ -886,7 +887,8 @@ Text im Texteingabefeld Hintergrund Texteingabefeld Hintergrund Emojis - Tab Emojis + Emoji ausgewähltes Tab + Emoji Tab Symbol Online Musik Thema speichern diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index c6b62963..9cad4161 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -1,7 +1,4 @@ - - - - + Plus Messenger Español @@ -137,6 +134,7 @@ Abrir en el navegador Copiar URL Enviar %1$s + ¿Abrir %1$s? %1$s activó la autodestrucción en %2$s Activaste la autodestrucción en %1$s @@ -549,6 +547,9 @@ no tiene acceso a los mensajes ¿Qué puede hacer este bot? INICIAR + REINICIAR + Detener bot + Reiniciar bot Siguiente Atrás @@ -837,10 +838,10 @@ h:mm a %1$s a las %2$s - Plus Messenger para Android fue actualizada. Novedades en la versión 3.1.2:\n\n- Búsquedas recientes\n- Mantén pulsado sobre un sticker para obtener una vista previa antes de enviarlo - 591 + Plus Messenger para Android ha sido actualizada. Novedades en la versión 3.1.3:\n\n- Nueva sección de \'Enlaces\' en la información del chat\n- Vista previa en la app para enlaces a fotos + 594 - Novedades en 3.1.2.0:\n\n- Solución de errores + \n\nNovedades en 3.1.3.0:\n\n- Nuevo MOD para ajustar color por defecto de icono de pestaña de emoticonos\n- Solución de errores Plus Messenger para Android Tematización ¡Color hexadecimal inválido! @@ -856,7 +857,7 @@ Cabecera Lista Lista de chat - Lista de chats + Lista de mensajes Lista de contactos Color de cabecera Color de nombre @@ -885,7 +886,8 @@ Tamaño de entrada de texto Color de fondo de entrada de texto Color de fondo de emoticonos - Color de pestaña de emoticonos + Color de pestaña seleccionada de emoticonos + Color de icono de pestaña de emoticonos Color en línea Música Guardar tema @@ -975,7 +977,7 @@ Muestra foto propia en grupo Alinear foto propia arriba Color de título/botón de diálogo - Muestra apodo junto a nombre de miembro + Muestra alias junto a nombre de miembro No parar audio Color de divisor de lista Centrar avatar, nombre y móvil diff --git a/TMessagesProj/src/main/res/values-fr/strings.xml b/TMessagesProj/src/main/res/values-fr/strings.xml index 7c2ce7c9..6c9d5268 100644 --- a/TMessagesProj/src/main/res/values-fr/strings.xml +++ b/TMessagesProj/src/main/res/values-fr/strings.xml @@ -35,7 +35,7 @@ En attente du réseau… Connexion… Mise à jour… - Nouvelle conversation secrète + Nv. chat secret En attente de la connexion de %s… Conversation secrète annulée Échange des clés de chiffrement… @@ -50,14 +50,15 @@ %1$s utilise une version plus ancienne de Telegram, par conséquent les photos secrètes seront affichées en mode compatibilité.\n\Une fois que %2$s aura mis à jour son application, les photos avec compte-à-rebours de 1 minute ou moins seront visibles en mode \"toucher-pour-voir\" et vous serez averti si votre interlocuteur fait une capture d\'écran. MESSAGES Recherche - Notifications muettes + Notifications Muet pendant %1$s Activer les notifications Dans %1$s Désactiver HASHTAGS + RÉCENT - Nouvelle liste de diffusion + Nv. liste de diffusion Saisissez le nom de la liste Vous avez créé un liste de diffusion Ajouter un destinataire @@ -87,18 +88,18 @@ écrit… écrit… écrivent… - %1$s enregistre de l\'audio... + %1$s enregistre du son... %1$s envoie une photo... %1$s envoie une vidéo... %1$s envoie un fichier... - enregistrement de l\'audio... + enregistrement... envoi de la photo... envoi de la vidéo... - envoi d\'un fichier... + envoi du fichier... Une question\nsur Telegram? Prendre une photo Galerie - Localisation + Position Vidéo Fichier Appareil photo @@ -126,14 +127,15 @@ Enregistrer dans les téléchargements Enregistrer dans musique Partager - Appliquer le fichier de localisation + Installer le pack linguistique Type de pièce-jointe inconnu Temps avant auto-destruction Notifications de Service - Obtention d\'informations sur le lien… - Ouvrir dans un navigateur + Obtention d\'infos sur le lien… + Ouvrir dans le navigateur Copier l\'URL Envoyer %1$s + Ouvrir l\'url %1$s? %1$s a défini l\'auto-destruction des messages à %2$s Vous avez défini l\'auto-destruction des messages à %1$s @@ -145,7 +147,7 @@ %1$s vous a envoyé une photo %1$s vous a envoyé une vidéo %1$s a partagé un contact avec vous - %1$s vous a envoyé une localisation + %1$s vous a envoyé une position %1$s vous a envoyé un fichier %1$s vous a envoyé un fichier audio %1$s vous a envoyé un sticker @@ -154,7 +156,7 @@ %1$s a envoyé une photo au groupe %2$s %1$s a envoyé une vidéo au groupe %2$s %1$s a partagé un contact avec le groupe %2$s - %1$s a envoyé une localisation au groupe %2$s + %1$s a envoyé une position au groupe %2$s %1$s a envoyé un fichier au groupe %2$s %1$s a envoyé un fichier audio au groupe %2$s %1$s a envoyé un sticker au groupe %2$s @@ -184,7 +186,7 @@ vu vu Inviter des amis - RECHERCHE GENERALE + RECHERCHE GÉNÉRALE vu récemment vu dans la semaine vu au cours du dernier mois @@ -227,11 +229,11 @@ Travail Autre Principal - Démarrer une conversation secrète + Démarrer un chat secret Une erreur s\'est produite. Clé de chiffrement Temps avant auto-destruction - Désactivé + Non Cette image est une visualisation de la clé de chiffrement pour cette conversation secrète avec ]]>%1$s]]>.
]]>Si l\'image sur le téléphone de ]]>%2$s]]> est identique, votre conversation est sécurisée à 200%%.
]]>Plus d\'informations sur telegram.org
Inconnu Info @@ -247,22 +249,22 @@ Vous pouvez choisir un nom d\'utilisateur sur ]]>Telegram]]>. Si vous le faites, d\'autres personnes pourront vous trouver à l\'aide de celui-ci, et vous contacter sans connaitre votre numéro de téléphone.
]]>Vous pouvez utiliser ]]>a–z]]>, ]]>0–9]]> et _. La longueur minimale est de ]]>5]]> caractères.
Vérification du nom d\'utilisateur... %1$s est disponible. - Vide + Aucun Une erreur est survenue. - Autocollants - Les artistes peuvent ajouter leur propre paquet d\'autocollants en utilisant notre robot @stickers.\n\nLes utilisateurs peuvent ajouter des autocollants en les touchant et en choisissant \"Ajouter aux autocollants\". + Stickers + Les artistes peuvent ajouter leur propre série de stickers en utilisant notre bot @stickers.\n\nLes utilisateurs peuvent ajouter des stickers en les touchant et en choisissant \"Ajouter aux Stickers\". Ajouter des autocollants Ajouter aux autocollants Autocollants introuvables - Autocollants retirés + Stickers supprimés Nouveaux autocollants ajoutés Cacher Afficher Partager Copier le lien Retirer - Aucun autocollant actuellement + Aucun sticker pour l\'instant Rétablir tous les paramètres de notification par défaut Taille de police des messages @@ -278,8 +280,8 @@ Son Notifications internes Sons dans l\'app - Vibration dans l\'app - Vibrer + Vibrations dans l\'app + Vibreur Prévisualisation dans l\'app Réinitialiser Réinitialiser toutes les notifications @@ -290,21 +292,21 @@ Pas de son Par défaut Support - Seulement si silencieux - Arrière-plan de conversation + Seulement en silencieux + Arrière-plan Messages - Envoyer en pressant la touche entrée + Touche Entrée pour envoyer Terminer toutes les autres sessions Évènements Un contact a rejoint Telegram PEBBLE Langue - Veuillez noter que le support Telegram est assuré par des bénévoles. Nous essayons de répondre aussi vite que possible, mais cela peut prendre un peu de temps.
]]>Veuillez consulter la FAQ Telegram]]> : cela répond à la plupart des questions et donne des conseils pour les problèmes]]>.
+ Veuillez noter que le support Telegram est assuré par des bénévoles. Nous essayons de répondre aussi vite que possible, mais cela peut prendre un peu de temps.
]]>Veuillez consulter la FAQ Telegram]]> : cela répond à la plupart des questions et donne des conseils pour les problèmes]]>.
Demandez à un bénévole FAQ de Telegram https://telegram.org/faq - Supprimer la localisation ? - Fichier de localisation incorrect + Supprimer la langue ? + Fichier linguistique incorrect Activé Désactivé Service de notifications @@ -316,17 +318,17 @@ Couleur de la LED Notifications popup Pas de popup - Uniquement lorsque l\'écran est allumé - Uniquement lorsque l\'écran est éteint + Si l\'écran est allumé + Si l\'écran est éteint Toujours afficher les popups Compteur de Badge Bref Long Paramètres par défaut Réglages par défaut - Téléchargement automatique des médias - Lors de la connexion aux données mobiles - Lors d\'une connexion WIFI + Téléchargement auto. des médias + En connexion au réseau mobile + En connexion Wi-Fi En itinérance Aucun média Enregistrer dans la galerie @@ -348,13 +350,14 @@ Désactivé Désactivé Désactivé - Désactiver + Non Sons des conversations Par défaut + Par défaut Notifications intelligentes Désactivé Ne pas sonner plus de %1$s par %2$s - Ne pas sonner plus de... + Sonner au plus fois dans minutes @@ -364,14 +367,14 @@ Aucune autre session active Vous pouvez vous connecter depuis d\'autres téléphones, tablettes et ordinateurs avec ce même numéro de téléphone. Vos données seront automatiquement synchronisées. Sessions actives - Contrôlez vos sessions sur d\'autres appareils. + Gérez vos sessions sur d\'autres périphériques Appuyez sur une session pour la terminer. Terminer cette session ? app non-officielle Verrouillage par code d\'accès Changer le code d\'accès - Lorsque vous configurez un code d\'accès supplémentaire, une icône de verrouillage s\'affiche sur la page des chats. Touchez-la pour verrouiller et déverrouiller votre application Telegram. \ n \ nNote: si vous oubliez le code d\'accès, vous devrez supprimer et réinstaller l\'application. Toutes les conversations secrètes seront perdues. + Lorsque vous configurez un code d\'accès supplémentaire, une icône de verrouillage s\'affiche sur la page des chats. Touchez-la pour verrouiller et déverrouiller votre application Telegram.\n\nNote: si vous oubliez le code d\'accès, vous devrez supprimer et réinstaller l\'application. Toutes les conversations secrètes seront perdues. Vous allez à présent voir une icône de verrouillage sur la page des chats. Touchez-la pour verrouiller votre application Telegram avec votre nouveau code d\'accès. PIN Mot de passe @@ -379,27 +382,29 @@ Saisissez un code d\'accès Saisissez votre nouveau code d\'accès Saisissez votre code d\'accès - Saisissez à nouveau votre nouveau code d\'accès + Confirmez votre nouveau code d\'accès Code d\'accès invalide Les codes d\'accès ne correspondent pas - Verrouillage automatique + Auto-verrouillage Code d\'accès requis en cas d\'absence - dans %1$s - Verrouillage désactivé + après %1$s + Désactivé Partager des photos et des vidéos dans cette conversation et y accéder sur chacun de vos appareils. - Fichiers - Média partagé + Fichiers partagés + Médias partagés + Liens Partagés Partager des fichiers et des documents dans cette conversation et y accéder sur chacun de vos appareils. + Partager des liens dans cette discussion et y accéder sur n\'importe lequel de vos appareils . Carte Satellite Hybride m de distance km de distance - Envoyer votre localisation actuelle - Envoyer la localisation selectionnée - Localisation + Envoyer votre position actuelle + Envoyer la position selectionnée + Position Exact à %1$s OU CHOISIR UN LIEU @@ -427,17 +432,17 @@ Exposition Température Saturation - Vignetage + Vignettage Ombres Grain Netteté Flou - Désactiver + Désactivé Linéaire Radial Êtes-vous sûr(e) de vouloir supprimer cette photo? Êtes-vous sûr(e) de vouloir supprimer cette vidéo? - Annuler les modifications? + Annuler les changements? Supprimer l\'historique de recherche ? Effacer Photos @@ -467,7 +472,7 @@ Changer le mot de passe Désactiver le mot de passe Définir l\'e-mail de récupération - Modifier l\'e-mail de récupération + Changer l\'e-mail de récupération Êtes-vous sûr(e) de vouloir désactiver le mot de passe ? Indice du mot de passe Veuillez créer un indice pour votre mot de passe @@ -498,7 +503,7 @@ Vie privée et Sécurité Vie privée - Vu pour la dernière fois + Dernière visite Tout le monde Mes Contacts Personne @@ -513,17 +518,17 @@ Si vous ne vous connectez pas au moins une fois durant cette période, votre compte sera effacé ainsi que tous vos groupes, messages et contacts. Supprimer votre compte ? Choisir qui peut voir la date de votre dernière connexion. - Qui peut voir la date votre dernière connexion ? - Ajouter des exceptions - Important: Vous ne pourrez plus voir la date de dernière connexion des utilisateurs qui ne peuvent pas voir la vôtre. À la place, une indication approximative sera affichée (récemment, dans la semaine, dans le dernier mois). - Toujours Partager Avec - Ne Jamais Partager Avec - Ces paramètres écraseront les valeurs ci-dessus + Qui peut voir quand c\'était ? + Exceptions + Important: Vous ne pourrez plus voir la date de dernière visite des personnes qui ne peuvent pas voir la vôtre. À la place, une vague indication sera affichée (récemment, dans la semaine, dans le dernier mois). + Visible par + Masqué à + Ces paramètres écraseront les valeurs précédentes Toujours Partager - Toujours partager avec les utilisateurs... - Ne Jamais Partager - Ne jamais partager avec les utilisateurs... - Ajouter des Utilisateurs + Toujours partager avec les personnes... + Ne pas montrer + Ne pas partager avec les personnes... + Personne Désolé, requêtes trop nombreuses. Impossible de modifier vos réglages de Vie Privée pour le moment, veuillez patienter. Déconnecte tous les appareils sauf celui-ci. Presser et maintenir sur un utilisateur pour le supprimer. @@ -542,7 +547,10 @@ a accès aux messages n\'a pas accès aux messages Que peux faire ce bot ? - DEMARRER + DÉMARRER + REDÉMARRER + Arrêter le bot + Redémarrer le bot Suivant Précédent @@ -558,7 +566,7 @@ Supprimer Transférer Réessayer - Depuis l\'appareil photo + Prendre une photo Depuis la galerie Supprimer la photo Définir @@ -588,7 +596,7 @@ Ce message n\'est pas supporté sur votre version de Telegram. Mettez à jour l\'application pour le voir: https://telegram.org/update Photo Vidéo - Localisation + Position Contact Fichier Sticker @@ -734,12 +742,12 @@ %1$d ans %1$d ans %1$d ans - %1$d utilisateurs - %1$d utilisateur - %1$d utilisateurs - %1$d utilisateurs - %1$d utilisateurs - %1$d utilisateurs + %1$d personnes + %1$d personne + %1$d personnes + %1$d personnes + %1$d personnes + %1$d personnes %1$d fois %1$d fois %1$d fois @@ -795,12 +803,12 @@ %1$d audios transférés %1$d audios transférés %1$d audios transférés - %1$d localisations transférées - Localisation transférée - %1$d localisations transférées - %1$d localisations transférées - %1$d localisations transférées - %1$d localisations transférées + %1$d positions transférées + position transférée + %1$d position transférées + %1$d positions transférées + %1$d positions transférées + %1$d positions transférées %1$d contacts transférés Contact transféré %1$d contacts transférés @@ -830,9 +838,10 @@ HH:mm h:mm a %1$s à %2$s - - 591 + + Plus Messenger pour Android a été mis à jour. Nouveautés de la version 3.1.3:\n\n- Nouvelle section \"Liens partagés\" dans les informations de la conversation\n +- Prévisualistaion In-app pour les liens des images + 594 Plus Messenger pour Android Thème diff --git a/TMessagesProj/src/main/res/values-gl/strings.xml b/TMessagesProj/src/main/res/values-gl/strings.xml index c353f378..0d5559a2 100644 --- a/TMessagesProj/src/main/res/values-gl/strings.xml +++ b/TMessagesProj/src/main/res/values-gl/strings.xml @@ -57,6 +57,7 @@ e introduce o teu número. En %1$s Desactivar HASHTAGS + RECENTE Nova difusión Introduce o nome da lista @@ -64,6 +65,10 @@ e introduce o teu número. Engadir destinatario Eliminar da lista de difusión + Engade ficheiros ao teu cartafol de música para velos aquí. + Música + Artista descoñecido + Título descoñecido Seleccionar un ficheiro %1$s libres de %2$s @@ -120,6 +125,7 @@ e introduce o teu número. Eliminar este chat ARRASTRAR PARA CANCELAR Gardar en descargas + Gardar en música Compartir Aplicar tradución Adxunto non soportado @@ -129,6 +135,7 @@ e introduce o teu número. Abrir no navegador Copiar URL Enviar %1$s + Abrir url %1$s? %1$s puxo o temporizador para a autodestrución en %2$s Puxeches o temporizador para a autodestrución en %1$s @@ -207,7 +214,7 @@ e introduce o teu número. Multimedia compartida Axustes Engadir membro - Eliminar e saír + Saír do grupo Notificacións Eliminar do grupo @@ -346,6 +353,7 @@ e introduce o teu número. Apagado Sons no chat Predeterminado + Predeterminado Notificacións intelixentes Desactivado Soar como máximo %1$s en %2$s @@ -383,9 +391,11 @@ e introduce o teu número. Desactivado Comparte fotos e vídeos neste chat e accede a eles dende calquera dos teus dispositivos. - Ficheiros + Ficheiros compartidos Multimedia + Ligazóns compartidas Comparte ficheiros e documentos neste chat e accede a eles dende calquera dos teus dispositivos. + Comparte ligazóns neste chat e accede a eles dende calquera dos teus dispositivos. Mapa Satélite @@ -538,6 +548,9 @@ e introduce o teu número. non ten acceso ás mensaxes Que pode facer este bot? INICIAR + REINICIAR + Deter bot + Reiniciar bot Seguinte Atrás @@ -825,7 +838,11 @@ e introduce o teu número. HH:mm h:mm a %1$s ás %2$s - + + Telegram para Android foi actualizada. Novidades na versión 3.1.3:\n\n - Nova sección de \'Enlaces\' na información do chat\n - Vista previa na app para enlaces a fotos + 594 + Plus Messenger para Android Tematización Cor hexadecimal inválida! @@ -929,8 +946,39 @@ e introduce o teu número. Manter o nome orixinal do ficheiro No canto de só números, os ficheiros gardaranse usando o formato nome_data Tamaño do avatar - Aliñar o avatar arriba - Marxe esquerdo do avatar + Aliñar foto de contacto arriba + Marxe do avatar Cor de nombre de grupo Tamaño de nome de grupo + Cor de nome (número descoñecido) + Ocultar sombra de fondo personalizado + Poñer cor de fondo + Cor de fondo + Tamaño do popup de emoji + Cor de nome da burbulla dereita reenvío + Cor de nome da burbulla esquerda reenvío + Cor de iconos + Pantalla de Axustes/Tematización + Cor de fondo + Cor de sombra + Cor de sección + Cor de título + Cor Resumen/Subtítulo + Cor de texto \'Foto/Sticker\' + Gustaríache ver algúns dos temas creado por outros usuarios de Plus Messenger? + Empregar fonte do dispositivo + Plus Messenger reiniciarase + Cor do icono de grupo + Cor do nome de contacto compartido + Cor de fondo de adxuntar + Cor do texto de adxuntar + Mostrar avatar de contacto na pantalla de chats + Mostra foto propia en chat + Mostra foto propia en grupo + Aliñar foto propia arriba + Cor de título/botón de diálogo + Mostra alias xunto a nome de membro + Non deter audio + Cor de divisor de lista + Centrar avatar, nome e teléfono
diff --git a/TMessagesProj/src/main/res/values-hi/strings.xml b/TMessagesProj/src/main/res/values-hi/strings.xml index 66894223..969c39ad 100644 --- a/TMessagesProj/src/main/res/values-hi/strings.xml +++ b/TMessagesProj/src/main/res/values-hi/strings.xml @@ -515,7 +515,7 @@ %1$s पर %2$s Plus Messenger for Android has been updated. New in Version 3.0:\n\n\n\n- Dedicated tabs for each one of your custom sticker sets in the sticker panel. Add custom stickers like https://telegram.me/addstickers/Animals\n- New bot API, free for everyone. If you\'re an engineer, create your own bots for games, services or integrations. Learn more at https://telegram.org/blog/bot-revolution\n https://play.google.com/store/apps/details?id=es.rafalense.themes - 591 + 594 Android के लिए प्लस मैसेंजर diff --git a/TMessagesProj/src/main/res/values-hr/strings.xml b/TMessagesProj/src/main/res/values-hr/strings.xml index 2e90c678..939ae251 100644 --- a/TMessagesProj/src/main/res/values-hr/strings.xml +++ b/TMessagesProj/src/main/res/values-hr/strings.xml @@ -1,4 +1,4 @@ - + Plus Messenger Hrvatski @@ -55,12 +55,17 @@ Uključiti Za %1$s Onemogućeno + HASHTAGS Nova distribucijska lista Upiši naziv liste Napravili ste distribucijsku listu Dodaj primatelja Ukloni iz distribucijske liste + + Glazba + Nepoznat izvođač + Nepoznat naslov Odaberite datoteku Slobodno %1$s od %2$s @@ -81,14 +86,23 @@ piše... piše... pišu... + %1$s snima zvučni zapis... + %1$s šalje sliku... + %1$s šalje video zapis... + %1$s šalje datoteku... + snima zvučni zapis... + šalje fotografiju... + šalje video zapis... + šalje datoteku... Imaš pitanje o Telegramu? Uslikaj Galerija Lokacija Video Datoteka + Kamera Trenutno ovdje nema poruka... - Proslijeđene poruke + Proslijeđena poruka Od Nema nedavnih Poruka @@ -108,11 +122,16 @@ Izbriši ovo dopisivanje POVUCITE ZA PREKID Spremi u preuzimanja + Spremi u glazbu Dijeli - Koristiti prijevod + Koristi prijevod Privitak nije podržan Postavi samouništenje Usluga obavijesti + Otvori u pretraživaču + Kopiraj link + Pošalji %1$s + Otvori URL %1$s? %1$s postavlja odbrojavanje samouništenja za %2$s Odbrojavanje za samouništenje je postavljeno na %1$s @@ -122,7 +141,7 @@ %1$s: %2$s %1$s vam šalje poruku %1$s vam šalje sliku - %1$s vam šalje videozapis + %1$s vam šalje video zapis %1$s dijeli kontakt s tobom %1$s vam šalje lokaciju %1$s vam šalje datoteku @@ -131,7 +150,7 @@ %1$s @ %2$s: %3$s %1$s šalje poruku u grupi %2$s %1$s šalje sliku u grupi %2$s - %1$s šalje videozapis u grupi %2$s + %1$s šalje video zapis u grupi %2$s %1$s dijeli kontakt s grupom %2$s %1$s šalje lokaciju u grupi %2$s %1$s šalje datoteku u grupi %2$s @@ -146,7 +165,7 @@ %1$s te ukonio/la iz grupe %2$s %1$s napušta grupu %2$s %1$s se pridružio/la Telegramu! - %1$s,\nOtkrili smo prijavu na vaš račun s novog uređaja - %2$s\n\nUređaj: %3$s\nLokacija: %4$s\n\nAko to niste vi, odabrate Postavke - Privatnost i sigurnost - Ugasi sve ostale sesije.\n\nHvala,\nTelegram tim + %1$s,\nOtkrili smo prijavu na vaš račun s novog uređaja - %2$s\n\nUređaj: %3$s\nLokacija: %4$s\n\nAko to niste vi, odabrate Postavke - Privatnost i sigurnost - Sesije i ugasite sve ostale sesije.\n\nAko mislite da se netko prijavio na vaš račun protiv vaše volje možete aktivirati potvrdu u dva koraka u postavkama Privatnost i sigurnost.\n\nHvala,\nTelegram tim %1$s je obnovio/la profilnu sliku Odgovori Odgovoriti grupi %1$s @@ -173,6 +192,11 @@ Upišite naziv grupe Naziv grupe %1$d/%2$d članova + Da li se želite pridružiti grupi \'%1$s\'? + Žao nam je, ova grupa je već popunjena. + Žao nam je, ova grupa ne postoji. + Kopiraj link + Podijeli link Dijeljene datoteke Postavke @@ -209,11 +233,24 @@ Korisničko ime mora imati barem 5 znakova. Korisničko ime nesmije imati više od 32 znaka. Žao nam je, korisničko ime ne smije započimati s brojem. - Odaberite svoje korisničko ime na ]]>Telegramu]]>. Ako to učinite drugi ljudi će imati mogućnost pronaći vas preko odabranog korisničkog imena i kontaktirati vas bez da znaju vaš telefonski broj.
]]>U imenu možete koristiti ]]>a–z]]>, ]]>0–9]]> i podcrte. Minimalna duljina je ]]>5]]> znakova.
+ Odaberite svoje korisničko ime na ]]>Telegramu]]>. Ako to učinite drugi ljudi će imati mogućnost pronaći vas preko odabranog korisničkog imena i kontaktirati vas bez da znaju vaš telefonski broj.
]]>U imenu možete koristit ]]>a–z]]>, ]]>0–9]]> i podcrte. Minimalna duljina je ]]>5]]> znakova.
Provjera korisničkog imena... %1$s je dostupno. Nije postavljeno Došlo je do greške. + + Naljepnice + Dodaj naljepnice + Dodaj u naljepnice + Naljepnice nisu pronađene + Naljepnice uklonjene + Nove naljepnice su spremljene + Sakrij + Prikaži + Podijeli + Kopiraj link + Ukloni + Nemate naljepnice Postavi sve postavke obavijesti na početne vrijednosti Veličina teksta poruke @@ -222,7 +259,7 @@ Odblokiraj Za odblokiranje dodirni i zadrži prst na nazivu korisnika. Nema blokiranih korisnika - Obavijesti poruka + Obavijesti poruke Obavijest Pregled poruke Obavijesti grupe @@ -241,6 +278,7 @@ Bez zvuka Zadano Podrška + Samo kad je stišano Pozadina dopisivanja Poruke Enter šalje poruku @@ -249,7 +287,6 @@ Kontakt se pridružio Telegramu PEBBLE Jezik - Molimo da se obrati pozornost kako Telegram podršku daju dobrovoljci. Trudimo se odgovoriti što je brže moguće, ali ponekad može potrajati.
]]>Pogledaj često postavljana pitanja]]>: tu su odgovori na većinu pitanja i važni savjeti za rješavanje problema]]>.
Pitaj dobrovoljca Često postavljana pitanja https://telegram.org/faq @@ -297,26 +334,44 @@ Ostalo Onemogućeno Onemogućeno + Onemogućeno + Isključeno + Zvukovi tijekom pokrenutog dopisivanja + Osnovno + Zadano + Pametne obavijesti + Onemogućeno + minuta + + Aktivne sesije + Trenutna sesija + Nema drugih aktivnih sesija + Na Telegram se možeš prijavit s drugog mobitela, tableta i računala koristeći isti telefonski broj. Svi tvoji podaci će se trenutno sinkronizirati. + Aktivne sesije + Upravljaj svojim sesijama na drugim uređajima. + Pritisni i zadrži sesiju za gašenje. + Ugasiti ovu sesiju? + neslužbena aplikacija - Šifra + Zaključavanje lozinkom Promijeni šifru - Kada podesite dodatnu šifru, ikona sa lokotom će se pojaviti na stranici sa dopisivanjima. Pritisnite je da bi otključali vašu Telegram aplikaciju.\n\nPodsjetnik: ako zaboravite šifru, morate obrisati i reinstalirati aplikaciju. Sva tajna dopisivanja biti će obrisana. + Kada podesite dodatnu šifru, ikona sa lokotom će se pojaviti na stranici sa dopisivanjima. Pritisnite je da bi zaključali i otključali vašu Telegram aplikaciju.\n\nPodsjetnik: ako zaboravite šifru, morate obrisati aplikaciju i reinstalirati. Sva tajna dopisivanja biti će obrisana. Ikona s lokotom će se pojaviti na stranci sa dopisivanjima. Pritisnite je da bi zaključali Telegram sa novom šifrom. PIN Lozinka Unesite trenutnu šifru + Unesite lozinku Unesite novu šifru Unesite vašu šifru - Ponovno unesite novu šifru + Ponovno unesite vašu novu šifru Neispravna šifra Šifra se ne poklapaju Automatsko zaključavanje - Zahtjevaj šifru ako sam odsutan. + Zahtijevaj šifru ako sam neaktivan. za %1$s Onemogućeno Dijelite slike i video u ovom dopisivanju pa pristupite njima s bilo kojeg vašeg uređaja. - Datoteke Multimedija Dijelite datoteke i dokumente u ovom dopisivanju pa pristupite njima s bilo kojeg vašeg uređaja. @@ -325,14 +380,15 @@ Hibridni prikaz m udaljen km udaljen - Pošalji lokaciju - Dijeli lokaciju + Pošalji označenu lokaciju + Lokacija Svi medijski zapisi Spremi u galeriju %1$d od %2$d Galerija Sve slike + Svi video zapisi Još nema slika Molimo te prvo preuzmi medijsku datoteku Nema nedavnih slika @@ -355,9 +411,39 @@ Zrnato Oštrina Zamutiti - Jeste li sigurni da želite obrisat ovu sliku? - Jeste li sigurni da želite obrisat ovaj video? + Isključeno + Linearano + Radijalano + Jeste li sigurni da želite obrisati ovu sliku? + Jeste li sigurni da želite obrisati ovaj video zapis? Odbaciti izmjene? + Obrisati povijest pretraživanja? + Očisti + Fotografije + Video zapis + Dodaj opis + + Potvrda u dva koraka + Postavi dodatnu lozinku + Vaša lozinka + Unesite lozinku + Unesite vašu novu lozinku + Ponovno unesite vašu novu lozinku + Vaš e-mail + Preskoči + Upozorenje + Promijeni lozinku + Podsjetnik za lozinku + Kreirajte podsjetnik za vašu lozinku + Lozinke se ne poklapaju + Podsjetnik se mora razlikovati od vaše lozinke + Žao nam je + Imate problema sa pristupom vašem e-mailu %1$s? + Upozorenje + Ponovno postavi + Lozinka + Zaboravljena lozinka? + Kôd Privatnost i sigurnost Privatnost @@ -372,7 +458,7 @@ Nitko (+%1$d) Sigurnost Samouništenje korisničkog računa - Ako sam odsutan + Ako sam neaktivan Ako se ne prijavite barem jednom u ovom periodu vaš korisniči račun će biti obrisan skupa sa svim grupama, porukama i kontaktima. Izbrisati korisnički račun? Promijenite tko može vidjeti vaše vrijeme zadnjeg posjeta. @@ -396,12 +482,20 @@ Uređeni video Šaljem video... Kompresiraj video + + Podijeli + Dodaj u grupu + Postavke + Pomoć + ima pristup porukama + nema pristup porukama Sljedeće Natrag Gotovo Otvori Odustani + Zatvori Dodaj Uredi Šalji @@ -417,6 +511,7 @@ U redu IZREŽI + Pridružili ste se grupi u koju ste pozvani poveznicom un1 je uklonio un2 un1 je napustio grupu un1 je dodao un2 @@ -434,10 +529,9 @@ un1 te uklonio un1 te dodao un1 se vratio grupi - Tvoja verzija Telegrama ne podržava ovu poruku. Obnovi aplikaciju za nastavak: -http://telegram.org/update + Vratili ste se u grupu Slika - Videozapis + Video zapis Lokacija Kontakt Datoteka @@ -450,16 +544,16 @@ http://telegram.org/update Neispravni telefonski broj Kod je istekao, ponovo se ulogiraj Previše pokušaja, probajte ponovo kasnije + Previše pokušaja, molimo pokušajte ponovo u %1$s Neispravan kod Neispravno ime Neispravno prezime Učitavanje... Nemaš video player, instaliraj neki za nastavak - Molimo Vas, pošaljite mail na sms@telegram.org i objasnite Vaš problem. + Molim Vas, pošaljite mail na sms@stel.com i objasnite Vaš problem. Nemaš aplikaciju zaduženu za tip datoteke \'%1$s\', instaliraj neku za nastavak Ovaj korisnik još nema Telegram, poslati pozivnicu? Sigurno? - Dodati %1$s u grupu?\n\nBroj poruka za proslijediti: Proslijediti kontaktu %1$s? Poslati poruke za %1$s? Jeste li ste sigurni da se želite odjaviti?\n\nNapominjemo da Telegram možete koristiti neprimjetno na svim vašim uređajima odjednom.\n\nUpamtite, odjavljivanjem brišete sva vaša Tajna dopisivanja. @@ -492,7 +586,7 @@ http://telegram.org/update Plus Messenger]]> nema ograničenje za veličinu]]>medijskih datoteka i dopisivanja. Plus Messenger]]> vam omogućuje pristup]]>porukama s više uređaja. Plus Messenger]]> poruke su snažno enkriptirane]]>i mogu se same uništiti. - Počni dopisivanje + Počni s dopisivanje %1$d osoba na mreži %1$d osoba na mreži @@ -584,6 +678,66 @@ http://telegram.org/update %1$d korisnika %1$d korisnika %1$d korisnika + %1$d naljepnica + %1$d naljepnice + %1$d naljepnice + %1$d naljepnice + %1$d naljepnice + + %1$d proslijeđenih poruka + Proslijeđena poruka + %1$d proslijeđene poruke + %1$d proslijeđene poruke + %1$d proslijeđenih poruka + %1$d proslijeđene poruke + %1$d proslijeđenih datoteka + Proslijeđena datoteka + %1$d proslijeđene datoteke + %1$d proslijeđene datoteke + %1$d proslijeđenih datoteka + %1$d proslijeđene datoteke + %1$d proslijeđenih slika + Proslijeđena slika + %1$d proslijeđene slike + %1$d proslijeđene slike + %1$d proslijeđenih slika + %1$d proslijeđene slike + %1$d proslijeđenih videa + Proslijeđen video zapis + %1$d proslijeđena video zapisa + %1$d proslijeđena video zapisa + %1$d proslijeđenih video zapisa + %1$d proslijeđena video zapisa + %1$d proslijeđenih zvučnih zapisa + Proslijeđen zvučni zapis + %1$d proslijeđena zvučna zapisa + %1$d proslijeđena zvučna zapisa + %1$d proslijeđenih zvučnih zapisa + %1$d proslijeđena zvučna zapisa + %1$d proslijeđenih lokacija + Proslijeđena lokacija + %1$d proslijeđene lokacije + %1$d proslijeđene lokacije + %1$d proslijeđenih lokacija + %1$d proslijeđene lokacije + %1$d proslijeđenih kontakta + Proslijeđen kontakt + %1$d proslijeđena kontakta + %1$d proslijeđena kontakta + %1$d proslijeđenih kontakta + %1$d proslijeđena kontakta + %1$d proslijeđenih naljepnica + Proslijeđena naljepnica + %1$d proslijeđene naljepnice + %1$d proslijeđene naljepnice + %1$d proslijeđenih naljepnica + %1$d proslijeđene naljepnice + i %1$d ostalih + i %1$d ostali + i %1$d ostala + i %1$d ostala + i %1$d ostalih + i %1$d ostala MMM yyyy dd.MM.yyy @@ -595,6 +749,8 @@ http://telegram.org/update HH:mm h:mm a %1$s u %2$s + + 594 Plus Messenger za Android Izrada teme diff --git a/TMessagesProj/src/main/res/values-it/strings.xml b/TMessagesProj/src/main/res/values-it/strings.xml index 9eb74d4c..5193f360 100644 --- a/TMessagesProj/src/main/res/values-it/strings.xml +++ b/TMessagesProj/src/main/res/values-it/strings.xml @@ -1,7 +1,4 @@ - - - - + Plus Messenger Italiano @@ -137,6 +134,7 @@ Apri nel Browser Copia URL Invia %1$s + Aprire url %1$s? %1$s ha impostato il timer di autodistruzione a %2$s Hai impostato il timer di autodistruzione a %1$s @@ -549,6 +547,9 @@ non ha accesso ai messaggi Cosa può fare questo bot? AVVIA + RIAVVIA + Arresta bot + Riavvia bot Avanti Indietro @@ -837,11 +838,11 @@ h:mm a %1$s alle %2$s - Plus Messenger per Android si è aggiornato. Nuovo nella versione 3.1.2:\n\n- Risultati recenti nella ricerca\n- Tieni premuto su uno sticker per visualizzare l\'anteprima prima di inviarlo - 591 - -\n\nNew in 3.1.1.9:\n\n- Nuove bolle in stile iOS aggiunte (tgrazie a Edwin Macalopu)\n- Nuova MOD per mostrare l\'username assieme al nome del partecipante del gruppo\n- Mostra l\'amministratore del gruppo nella schermata del profilo del gruppo. L\'amministratore ha un\'icona particolare\n- Nuova MOD per centrare l\'avatar, il nome ed il telefono nel menu di navigazione\n- Nuova MOD per continuare a riprodurre gli audio nelle chat disabilitndo l\'azione del sensore di prossimità\n- Nuova MOD per cambiare il colore delle icone nella schermata profilo\n- Bug fixes\n\nEsplora e scarica temi per Plus Messenger: https://play.google.com/store/apps/details?id=es.rafalense.themes--> +\n\nNovità nella versione 3.1.3.0:\n\n- Nuova MOD per cambiare il colore predefinito della icona della linguetta degli emoji\n- Correzione di Bug Plus Messenger per Android Personalizzazione Codice del colore esadecimale non valido! @@ -886,7 +887,8 @@ Dimensione del testo immesso Colore di sfondo del campo di testo Colore di sfondo degli Emoji - Colore della linguetta degli Emoji + Colore della linguetta dell\'Emoji selezionato + Colore icona linguetta degli Emoji Colore dello stato Online Musica Salva il tema diff --git a/TMessagesProj/src/main/res/values-ko/strings.xml b/TMessagesProj/src/main/res/values-ko/strings.xml index e9edd2a4..d2d98103 100644 --- a/TMessagesProj/src/main/res/values-ko/strings.xml +++ b/TMessagesProj/src/main/res/values-ko/strings.xml @@ -137,6 +137,7 @@ 브라우져에서 열기 URL 복사 %1$s 전송 + %1$s 링크를 여시겠습니까? %1$s님이 자동삭제를 %2$s 후로 설정했습니다 자동삭제를 %1$s 후로 설정했습니다 @@ -549,6 +550,9 @@ 메시지 접근 권한이 없습니다 이 봇은 무엇을 할 수 있나요? 시작 + 재시작 + 봇 정지 + 봇 재시작 다음 뒤로 @@ -837,6 +841,6 @@ a h:mm %1$s %2$s - 텔레그램 안드로이드 버전이 업데이트 되었습니다. 새로운 버전은 3.1.2 입니다:\n\n- 최신 검색 결과\n- 스티커를 꾹 누를 경우 미리보기 기능 - 591 + 텔레그램 안드로이드 버전이 업데이트 되었습니다. 새로운 버전은 3.1.3 입니다:\n\n- 채팅방 정보내 \'공유된 링크\' 추가 \n- 사진 링크 프리뷰 기능 + 594 \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-nl/strings.xml b/TMessagesProj/src/main/res/values-nl/strings.xml index 4e4b335a..34ac519e 100644 --- a/TMessagesProj/src/main/res/values-nl/strings.xml +++ b/TMessagesProj/src/main/res/values-nl/strings.xml @@ -1,7 +1,4 @@ - - - - + Plus Messenger Nederlands @@ -137,6 +134,7 @@ Openen in browser Link kopiëren %1$s versturen + URL %1$s openen? %1$s heeft de zelfvernietigingstimer ingesteld op %2$s Je hebt de zelfvernietigingstimer ingesteld op %1$s @@ -170,7 +168,7 @@ %1$s heeft je verwijderd uit de groep %2$s %1$s heeft de groep %2$s verlaten %1$s heeft nu Telegram! - %1$s,\nEr is op je account ingelogd vanaf een nieuw apparaat op %2$s\n\nApparaat: %3$s\nLocatie: %4$s\n\nAls jij dit niet was, kun je die sessie beëindigen via Instellingen - Privacy en veiligheid - Sessies.\n\nAls je dat denkt dat iemand anders zonder jouw toestemming is ingelogd kun je twee-staps-verificatie activeren via instellingen - privacy en veiligheid .\n\nBedankt,\nHet Telegram-team + %1$s,\nEr is op je account ingelogd vanaf een nieuw apparaat op %2$s\n\nApparaat: %3$s\nLocatie: %4$s\n\nAls jij dit niet was, kun je die sessie beëindigen via Instellingen - Privacy en veiligheid - Sessies.\n\nAls je dat denkt dat iemand anders zonder jouw toestemming is ingelogd kun je twee-staps-verificatie activeren via instellingen - privacy en veiligheid.\n\nBedankt,\nHet Telegram-team %1$s heeft zijn/haar profielfoto gewijzigd %1$s neemt deel aan de groep %2$s via uitnodigingslink Antwoord @@ -366,7 +364,7 @@ Actieve sessies Huidige sessie Geen andere actieve sessies - Je kunt in Telegram inloggen vanaf andere apparaten (mobiel,tablet,desktop) met hetzelfde telefoonnummer. Al je data zal direct worden gesynchroniseerd. + Je kunt in Telegram inloggen vanaf andere apparaten (mobiel, tablet, desktop) met hetzelfde telefoonnummer. Al je data zal direct worden gesynchroniseerd. Actieve sessies Beheer je sessies van andere apparaten. Tik op een sessie om deze te beëindigen. @@ -549,6 +547,9 @@ geen toegang tot berichten Wat kan deze bot? BEGIN + HERSTART + Bot stoppen + Bot herstarten Volgende Vorige @@ -837,8 +838,8 @@ h:mm a %1$s om %2$s - Plus Messenger voor Android is bijgewerkt. Nieuw in versie 3.1.2:\n\n- Recente zoekresultaten\n- Stickers aantikken en vasthouden om een voorbeeld weer te geven voor het versturen. - 591 + Plus Messenger voor Android is bijgewerkt. Nieuw in versie 3.1.3:\n\n- Nieuw \'Gedeelde links\'-gedeelte in chatinformatie\n- In-app voorvertoning voor links naar foto\'s + 594 Plus Messenger voor Android @@ -964,4 +965,7 @@ Samenvatting/Ondertitel kleur \'Foto/Sticker\' tekst kleur Wilt u thema\'s bekijken van andere Plus Messenger gebruikers? + Gebruik het apparaat lettertype + Plus Messenger zal nu herstarten + Kleur van het icoontje \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-pl/strings.xml b/TMessagesProj/src/main/res/values-pl/strings.xml index 0d924992..ab8b8dc5 100644 --- a/TMessagesProj/src/main/res/values-pl/strings.xml +++ b/TMessagesProj/src/main/res/values-pl/strings.xml @@ -56,12 +56,18 @@ W %1$s Wyłącz Hashtagi + OSTATNIE Nowe ogłoszenie Wprowadź nazwę listy Utworzyłeś listę transmisji Dodaj odbiorcę Usuń z listy transmisji + + Dodaj utwory do biblioteki, aby zobaczyć je tutaj. + Muzyka + Nieznany artysta + Nieznany tytuł Wybierz plik Wolne %1$s z %2$s @@ -96,6 +102,7 @@ Lokalizacja Wideo Plik + Aparat Brak wiadomości... Przekazana wiadomość Od @@ -117,11 +124,16 @@ Usuń czat Przeciągnij aby anulować Zapisz do pobranych + Zapisz do muzyki Udostępnij Zastosuj plik lokalizacyjny Nieobsługiwany załącznik Ustaw zegar autodestrukcji Powiadomienia serwisowe + Zbieram informację na temat linku... + Otwórz w przeglądarce + Kopiuj link + Wyślij %1$s %1$s ustawił/a licznik autodestrukcji na %2$s Ustawiłeś licznik autodestrukcji na %1$s @@ -157,6 +169,7 @@ %1$s dołączył do Telegram-a! %1$s,\nZarejestrowalismy logowanie do Twojego konta z nowego urządzenia%2$s\n\nUrządzenie: %3$s\nLokalizacja: %4$s\n\nJeżeli to nie ty, idź do Ustawienia - Prywatność i Bezpieczeństwo - Zakończ wszystkie inne sesje.\n\nPozdrawiamy,\nZespół Telegram %1$s zaktualizował/a swoje zdjęcie profilowe + %1$s wrócił/a do grupy %2$s dzięki zaproszeniu Odpowiedz Odpowiedz %1$s Odpowiedz %1$s @@ -182,6 +195,19 @@ Wpisz nazwę grupy Nazwa grupy %1$d/%2$d użytkownicy + Czy chcesz dołączyć do grupy \'%1$s\'? + Niestety, ta grupa jest już pełna. + Niestety, ta grupa nie istnieje. + Link zostal skopiowany do schowka + Zaproś do grupy przez wysłanie linku + Link z zaproszeniem + Czy jesteś pewien, że chcesz cofnąć link? Jeśli to zrobisz nikt nie będzie mógł dołączyć do grupy używając go. + Poprzedni link jest nieaktywny. Nowy został już wygenerowany. + Odwolaj + Cofnij link + Kopiuj link + Udostępnij link + Każdy użytkownik komunikatora Telegram będzie mógł dołączyć do Twojej grupy przez ten link Współdzielone pliki Ustawienia @@ -224,6 +250,20 @@ %1$s jest dostępny. Nic Wystąpił błąd. + + Naklejki + Artyści mogą dodawać swoje naklejki używając naszego @stickers bot.\n\n Użytkownicy mogą dodawać je naciskając na nie i wybierając \"dodaj do naklejek\". + Dodaj naklejki + Dodaj do naklejek + Naklejki nie znalezione + Naklejki usunięte + Nowe naklejki zostały dodane + Ukryj + Pokaż + Udostępnij + Kopiuj link + Usuń + Nie ma jeszcze naklejek Przywróć wszystkie domyślne powiadomienia Rozmiar czcionki w wiadomościach @@ -251,6 +291,7 @@ Bez dźwięków Domyślny Wsparcie + Tylko w trybie cichym Tło czatu Wiadomości Wyślij przez Enter @@ -310,15 +351,34 @@ Wyłączony Wyłącz Dźwięki czatu + Domyślny + Domyślne + Inteligentne powiadomienia + Wyłączone + Dźwięk w na maksa %1$s podczas %2$s + Dźwięk na maksa + Czasy + podczas + minuty + Aktywne sesje + Obecna sejsa + Brak innych aktywnych sesji + Możesz korzystać z Telegram z innych telefonów, tabletów, komputerów, laptopów, używając tego samego numeru telefonu. Wszystkie Twoje dane będą natychmiast synchronizowane. + Aktywne sesje + Kontroluj swoje sesje na innych uradzeniach + Naciśnij na sesje, aby ją zakończyć. + Czy chcesz zakończyć tą sesję? + nieoficjalna aplikacja - Kod dostępu + Kod blokady Zmień kod dostępu Gdy przypiszesz dodatkowy pin, na stronach czatów pojawi się ikona blokady. Kliknij w nią, aby zablokować lub odblokować aplikacje Telegram.\n\nUwaga: jeżeli zapomnisz swojego pinu, będzies musiał usunąć i ponownie zainstalować aplikację. Wszystkie sekretne chaty zostaną utracone. Zobaczysz teraz ikonę blokady na stronach czatów. Kliknij w nią, aby zablokować aplikację Telegram swoim nowym pinem. PIN Hasło Podaj swój obecny kod dostępu + Wpisz hasło Podaj swój nowy kod dostępu Podaj twój kod dostępu Podaj ponownie nowy kod dostępu @@ -330,24 +390,31 @@ Wyłączone Udostępnij zdjęcia i video na tym czacie z opcją dostępu do nich na dowolnych urządzeniach. - Pliki + Udostępnione pliki Współdzielone pliki + Udostępnione linki Udostępnij pliki i dokumenty na tym czacie z opcją dostępu do nich na dowolnych urządzeniach + Udostępnij linki na tym czacie z opcją dostępu do nich na dowolnych urządzeniach Mapa Satelitarna Hybrydowa m od km od - Wyślij lokalizację - Udostępnij lokalizację + Wyślij swoja obecną lokalizację + Wyślij wybrana lokalizację + Lokalizacja + Z dokładnością do %1$s + LUB WYBIERZ MIEJSCE Pokaż wszystkie media Zapisz do galerii %1$d z %2$d Galeria Wszystkie zdjęcia + Wszystkie wideo Brak zdjęć + Nie masz jeszcze żadnego wideo Najpierw pobierz dane Brak zdjęć ostatnio Brak ostatnich GIFów @@ -377,7 +444,61 @@ Czy chcesz porzucić zmiany? Czy na pewno chcesz wyczyść historię wyszukiwania? Czysto + Zdjęcia + Wideo + Podaj podpis + Opis zjęcia + Opis filmu + Dwuetapowa weryfikacja + Ustaw dodatkowe hasło + Możesz ustawić sobie hasło, które będzie wymagane przy logowaniu na nowe urządzenie. Hasło otrzymasz smsem. + Twoje hasło + Podaj swoje hasło + Wpisz hasło + Podaj swoje nowe hasło + Wpisz ponownie swoje nowe hasło + Zapasowy E-mail + Twój E-mail + Proszę podaj swój prawdziwy adres e-mail. To jedyna droga do odzyskania zapominanego hasła. + Pomin + Uwaga + Nie, poważnie.\n\n Jeśli zapomnisz hasła to stracisz dostęp do swojego konta Telegram. Nie będzie możliwości jego odzyskania. + Prawie na miejscu! + Proszę sprawdź swój e-mail (nie zapomni o folderze spam), aby zakończyć dwuetapowa weryfikację. + Sukces! + Twoje hasło dla dwuetapowej weryfikacji jest teraz aktywne. + Zmień hasło + Wyłącz hasło + Ustaw zapasowy E-mail + Zmień zapasowy E-mail + Czy jesteś pewnien, że chcesz wyłączyc hasło? + Wskazówka do hasła + Prosze stworz wskazówkę do Twojego hasła + Hasla się nie zgadzają + Przerwij tworzenie dwuetapowej weryfikacji + Prosze wykonaj te kroki w celu utworzenia dwuetapowej weryfikacji:\n\n1. Spawdź swoj email (nie zapomnij o folderze spam)n%1$s\n\n2. Wejdź w link weryfikacyjny. + Podpowiedź musi byc inna niż Twoje hasło + Niepoprawny adres e-mail + Przepraszamy + Jeśli nie dodasz adresu email podczas ustawiania hasła to tracisz opcję, aby je odzyskać, gdy je zapomnisz + Wysłaliśmy kod na adres email, który nam podałeś:\n\n%1$s + Proszę sprawdź swój email i wpisz tutaj 6-cio cyfrowy kod, który od nas otrzymałeś. + Masz problem z dostępem do swojego emaila %1$s? + Jeśli nie możesz uzyskać dostępu do emaila, możesz użyć hasła lub zresetować swoje konto. + RESETUJ MOJE KONTO + Stracisz wszystkie swoje chaty, wiadomości, także te z plikami multimedialnymi, które udostępniłeś, jeśli potwierdzisz resetowanie swojego konta. + Ostrzeżenie + Tego nie da się cofnąć\n\nJeśli zresetujesz swoje konto to wszystkie twoje wiadomości i czaty zostaną usunięte. + Zresetuj + Hasło + Masz włączoną Dwu-etapową Weryfikację, Twoje konto jest chronione dodatkowym hasłem. + Zapominałeś hasła? + Odzyskiwanie hasła + Kod + Hasło wylaczone + Masz włączoną Dwu-etapową Weryfikację.\nBędziesz potrzebował hasła, aby zalogować się na Twoje konto Telegram. + Twój adres email %1$s nie został jeszcze aktywowany i czeka na potwierdzenie. Prywatność i bezpieczeństwo Prywatność @@ -416,12 +537,23 @@ Edytowane wideo Wysyłanie wideo... Kompresuj Wideo + + bot + Udostępni + Dodaj do grupy + Ustawienia + Pomoc + ma dostęp do wiadomości + nie ma dostępu do wiadomości + Co ten bot może robić? + START Następne Wróć Gotowe Otwórz Anuluj + Zamknij Dodaj Edycja Wyślij @@ -437,6 +569,8 @@ OK Kadruj + Dołączyłeś do grupy przez link z zaproszeniem + un1 dołączył do grupy przez link z zaproszeniem un1 usunięty/a przez un2 un1 opuścił/a grupę un1 dodał/a un2 @@ -454,7 +588,8 @@ un1 usunął cię un1 dodał cię un1 wrócił/a do grupy - Ta wiadomość nie jest wspierana przez twoją wersję Telegram. Aktualizuj aplikację na: http://telegram.org/update + Wróciłeś do grupy + Ta wiadomość nie jest obsługiwana przez Twoją wersję Telegram. Uaktualni ją aby zobaczyć: https://telegram.org/update Zdjęcie Wideo Lokalizacja @@ -469,6 +604,7 @@ Błędny numer telefonu Kod przedawniony, proszę zalogować się ponownie Zbyt wiele prób, proszę spróbować ponownie później + Zbyt dużo prób, proszę sprawdź ponownie w %1$s Błędny kod Nieprawidłowe imię Nieprawidłowe nazwisko @@ -478,7 +614,10 @@ Nie posiadasz aplikacji, aby otworzyć ten typ pliku\'%1$s\'. Zainstaluj jedną z nich, aby otworzyć ten plik Ten kontakt nie używa Telegramu, wysłać mu zaproszenie ? Na pewno ? - Dadać %1$s do grupy?\n\nLIczba ostanich wiadomości do przodu: + Dodać %1$s to grupy %2$s? + Liczba wiadomości do przeczytania: + Dodać %1$s do grupy? + Ten użytkownik jest już w tej grupie Przekazać wiadomości do %1$s? Wysłać wiadomość do %1$s? Czy na pewno chcesz się wylogować?\n\nZauważ że można bezproblemowo używać Telegram wszystkich urządzeń na raz.\nPamiętaj, wylogowanie się zniszczy wszystkie twoje tajne rozmowy. @@ -496,6 +635,8 @@ Wysłać wiadomość do %1$s? Przekazać wiadomości do %1$s? Ta usługa nie jest aktualnie dostępna w Twoim kraju. + Nie ma konta Telegram z tą nazwą użytkownika + Ten bot nie może dołączyć do grup. Plus Messenger Szybki @@ -603,6 +744,30 @@ %1$d użytkowników %1$d użytkowników %1$d użytkowników + %1$d razy + %1$d raz + %1$d razy + %1$d razy + %1$d razy + %1$d razy + %1$d metrów + %1$d metr + %1$d metrów + %1$d metrów + %1$d metrów + %1$d metrów + %1$d naklejek + %1$d naklejka + %1$d naklejek + %1$d naklejek + %1$d naklejek + %1$d naklejek + %1$d zdjęcia + %1$d zdjęcie + %1$d zdjęcia + %1$d zdjęcia + %1$d zdjęcia + %1$d zdjęcia %1$d przekazano wiadomość Przekazane wiadomość @@ -773,9 +938,39 @@ Zachowaj oryginalną nazwę pilku Z uwagi na liczbę pliki będą zapisane w formacie nazwa_data Rozmiar zdjęcia kontaktu - Przesuń zdjęcie na wierzch - Zdjęcie lewego marginesu + Wyrównaj do góry zdjęcie kontaktu + Zdjęcie marginesu Kolor nazwy grupy Rozmiar nazwy grupy Nazwa osoby z poza kontaktów (nieznany numer) + Ukryj niestandardowy cień + Ustaw kolor tła + Kolor tła + Wielkość okienka z emotikonami + Kolor nazwy użytkownika z wiadomością + Kolor nazwy użytkownika z wiadomością + Kolor ikon + Okno ustawień/motywów + Kolor tła + Kolor cienia + Kolor sekcji + Kolor tytułu + Kolor podsumowania/napisów + Kolor tekstu zdjęcia/naklejki + Czy chcesz zobaczyć motywy tworzone przez użytkowników Plus Messenger? + Użyj czcionki urządzenia + Plus Messenger zostanie uruchomiony ponownie + Kolor ikony grupy + Kolor nazwy udostępnionego kontaktu + Załącz kolor tła + Załącz kolor tekstu + Pokaż zdjęcie kontaktu w ekranie rozmowy + Pokaż własne zdjęcie w ekranie rozmowy + Pokaż własne zdjęcie w grupowym ekranie rozmowy + Przesuń własne zdjęcie na wierzch + Kolor tytułu/przycisku okna + Pokaż nazwę użytkownika prze nazwie + Nie przestawaj odtwarzać audio + Kolor listy podziałki + Główne zdjęcie, nazwa i telefon
diff --git a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml index fed0cf0d..1b97e56f 100644 --- a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml @@ -1,7 +1,4 @@ - - - - + Plus Messenger Português (Brasil) @@ -46,8 +43,8 @@ Você entrou no chat secreto Limpar histórico Apagar e sair - Excluir conversa - Excluir Conta + Apagar conversa + Conta Excluída Selecione um Chat Toque e segure para ver %1$s está usando uma versão mais antiga do Telegram, por isso fotos secretas serão mostradas em modo de compatibilidade.\n\nAssim que %2$s atualizar o Telegram, fotos com timers de 1 minuto ou menos passarão a funcionar no modo ‘Toque e segure para ver’, e você será notificado caso a outra pessoa salve a tela. @@ -137,6 +134,7 @@ Abrir no Navegador Copiar URL Enviar %1$s + Abrir URL em %1$s? %1$s estabeleceu o tempo de autodestruição para %2$s Você estabeleceu o tempo de autodestruição para %1$s @@ -549,6 +547,9 @@ não tem acesso as mensagens O que esse bot pode fazer? COMEÇAR + REINICIAR + Parar bot + Reiniciar bot Próximo Voltar @@ -837,27 +838,27 @@ h:mm a %1$s às %2$s - Plus Messenger para Android acaba de ser atualizado. Novo na versão 3.1.2\n\n- Resultados das buscas recentes\n- Pressione e mantenha em um sticker para pré-visualizar antes do envio - 591 - -\n\nNew in 3.1.1.9:\n\n- New MOD to center avatar, name and phone in navigation menu\n- New MOD to don\'t stop audio in chat (disables proximity sensor action)\n-New MOD to change icons color in profile screen\n- Bug fixes--> +\n\nNovo na versão 3.1.3.0:\n\n- Novo MOD para mudar a cor do ícone padrão da aba de emoji\n- Concertos de Bugs Plus Messenger para Android Personalização - Código de cor hexadecimal inválido! + Código de cor HEX inválido! Cor do Tema Redefinir Tema Reverter todas as personalizações Redefinir tema ao padrão! Geral Telas - Tela Principal - Tela de Conversa - Tela de Contatos + Principal + Chat + Contatos Cabeçalho Linhas - Lista de Conversas - Lista de Conversas + Lista de Chat + Lista de Chats Lista de Contatos Cor do Cabeçalho Cor do Nome @@ -876,7 +877,7 @@ Cor da Bolha Esquerda Cor da Data Tamanho da Data - Cor da Bolha de Data + Cor da Bolha Data Cor do texto direito Cor do Texto Esquerdo Cor da Hora Direita @@ -885,8 +886,9 @@ Cor do Texto Digitado Tamanho do Texto Digitado Cor da Caixa de Texto - Cor do Fundo dos Emojis - Cor da Aba de Emojis + Cor do Fundo Emojis + Cor selecionada da aba de emoji + Cor do icone da aba de emoji Cor do Status Online Música Salvar Tema @@ -907,17 +909,17 @@ Enviar Logs Não existem logs ainda Ícone de Enviar - Ocultar número celular no menu + Ocultar Número no Menu Cor do Lápis Flutuante - Cor do Fundo do Botão Flutuante + Cor do Botão Flutuante Comunidade no G+ Cor do \"digitando\" - Cor dos Ícones na Entrada de Texto - Menu Lateral + Cor dos Ícones na Caixa de Texto + Menu de Navegação Lista de Opções Cor da Lista Tamanho do Nome - Cor do Telefone + Cor do Número Tamanho do Número Cor do Avatar Cor dos Ícones de Opções @@ -935,7 +937,7 @@ Encaminhar sem mencionar Desativar Pop-up ao Clicar Perfil de Contato/Grupo - Ocultar Fundo Personalizado + Ocultar Capa Personalizada Cor do Link Direito Cor do Link Esquerdo Tema aplicado! @@ -943,24 +945,24 @@ Usar Emojis Nativos Estilo das Bolhas Manter Nome de Arquivo Original - Ao invés de apenas números, os arquivos serão salvos no formato nome_data + Arquivos serão salvos no formato nome_data Tamanho do Avatar - Alinhar avatar do contato no topo + Avatar do Contato no Topo Margem do Avatar Cor do Nome do Grupo Tamanho do Nome do Grupo Cor do Nome (Número Desconhecido) - Ocultar Sombra do Fundo Personalizado + Ocultar Sombra da Capa Definir Cor de Fundo Cor de Fundo - Tamanho do Pop-up de Emoji + Tamanho do Pop-Up Emoji Cor do Nome Direito ao Encaminhar Cor do Nome Esquerdo ao Encaminhar Cor dos Ícones - Tela de Configurações/Personalizações + Configurações/Personalização Cor de Fundo Cor da Sombra - Cor das Sessões + Cor das Seções Cor dos Títulos Cor dos Subtítulos/Descrições Cor do Texto \'Foto/Adesivo\' @@ -968,16 +970,16 @@ Usar Fonte do Dispositivo O Plus Messenger irá reiniciar Cor do Ícone de Grupo - Cor do Nome do Contato Compartilhado + Cor do Nome Contato Compartilhado Cor de Fundo do Anexar Cor de Texto do Anexar Mostrar Avatar do Contato Mostrar Próprio Avatar no Chat Mostrar Próprio Avatar em Grupos - Alinhar Próprio Avatar no Topo + Avatar Próprio no Topo Cor do Título/Botão de Diálogo - Exibir Nome de Usuário com Nome do Membro + Exibir Nome de Usuário Não Parar Áudio Cor do Divisor de Lista - Centralizar Avatar, Nome e Telefone + Centralizar Avatar, Nome e Número \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml index 6f602b68..56df1be7 100644 --- a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml @@ -46,8 +46,8 @@ Você entrou no chat secreto Limpar histórico Apagar e sair - Excluir conversa - Excluir Conta + Apagar conversa + Conta Excluída Selecione um Chat Toque e segure para ver %1$s está usando uma versão mais antiga do Telegram, por isso fotos secretas serão mostradas em modo de compatibilidade.\n\nAssim que %2$s atualizar o Telegram, fotos com timers de 1 minuto ou menos passarão a funcionar no modo ‘Toque e segure para ver’, e você será notificado caso a outra pessoa salve a tela. @@ -137,6 +137,7 @@ Abrir no Navegador Copiar URL Enviar %1$s + Abrir URL em %1$s? %1$s estabeleceu o tempo de autodestruição para %2$s Você estabeleceu o tempo de autodestruição para %1$s @@ -549,6 +550,9 @@ não tem acesso as mensagens O que esse bot pode fazer? COMEÇAR + REINICIAR + Parar bot + Reiniciar bot Próximo Voltar @@ -837,8 +841,8 @@ h:mm a %1$s às %2$s - Plus Messenger para Android acaba de ser atualizado. Novo na versão 3.1.2\n\n- Resultados das buscas recentes\n- Pressione e mantenha em um sticker para pré-visualizar antes do envio - 591 + Plus Messenger para Android foi atualizado. Novidade na versão 3.1.3\n\n- Nova sessão \"Links Compartilhados\" na informação do chat\n- Pré-visualizaçãp de fotos em links no aplicativo. + 594 Plus Messenger para Android Temas diff --git a/TMessagesProj/src/main/res/values-ru/strings.xml b/TMessagesProj/src/main/res/values-ru/strings.xml index f66d132e..70ab435c 100644 --- a/TMessagesProj/src/main/res/values-ru/strings.xml +++ b/TMessagesProj/src/main/res/values-ru/strings.xml @@ -56,6 +56,7 @@ Через %1$s Отключить ХЕШТЕГИ + НЕДАВНЕЕ Новый список рассылки Введите имя списка @@ -133,6 +134,7 @@ Открыть в браузере Копировать URL Отправить %1$s + Открыть URL %1$s? %1$s поставил(а) таймер самоуничтожения на %2$s Вы поставили таймер самоуничтожения на %1$s @@ -298,7 +300,7 @@ Контакт присоединился к Telegram PEBBLE Язык - Обратите внимание, что поддержка Telegram осуществляется добровольцами. Мы постараемся ответить как можно быстрее, но на это может потребоваться некоторое время.
]]>Пожалуйста, ознакомьтесь с вопросами и ответами о Telegram]]>: там есть ответы на большинство вопросов и важные советы по устранению неполадок]]>.
+ Обратите внимание, что поддержка Telegram осуществляется добровольцами. Мы постараемся ответить как можно быстрее, но это может занять некоторое время.
]]>Пожалуйста, ознакомьтесь с вопросами и ответами о Telegram]]>: там есть ответы на большинство вопросов и важные советы по устранению неполадок]]>.
Спросить добровольца Вопросы и ответы о Telegram https://telegram.org/faq @@ -388,9 +390,11 @@ Отключена Поделитесь фото и видео в этом чате и получите доступ к ним на любом из ваших устройств. - Файлы + Общие файлы Общие медиа + Общие ссылки Поделитесь файлами и документами в этом чате и получите доступ к ним на любом из ваших устройств. + Делитесь ссылками в этом чате и получайте к ним доступ с любого из ваших устройств. Карта Спутник @@ -543,6 +547,9 @@ не имеет доступа к сообщениям Что этот бот может делать? СТАРТ + ПЕРЕЗАПУСК + Остановить бота + Перезапустить бота Далее Назад @@ -831,44 +838,45 @@ h:mm a %1$s в %2$s - Plus Messenger для Android обновлён. Новое в версии 3.1:\n\n- Поиск сообщений внутри конкретного чата.\n- Полностью переработано меню вложений. Отправка контактов и аудиофайлов прямо из меню вложений.\n- Улучшено воспроизведение медиа в приложении (YouTube, Vimeo, SoundCloud и др.), новый плеер для больших аудиофайлов.\n\nБольше об этом обновлении:\nhttps://telegram.org/blog/search-and-media - 591 - + Plus Messenger для Android обновлён. Новое в версии 3.1.3:\n\n- Новый раздел \'Общие ссылки\' в информации о части\n- Предварительный просмотр ссылок на фото в приложении + 594 + Plus Messenger для Android Кастомизация - Неверный hex-код темы! + Неверный hex-код цвета! Цвет темы Сброс настроек темы Отменить все изменения в теме - Отменить настройки темы по умолчанию - Быстрые настройки + Настройки темы по умолчанию! + Основное Дополнительные настройки - Настройки экрана диалогов - Настройки экрана чата - Настройки экрана контактов - Список настроек + Основной экран + Экран чата + Экран контактов + Заголовок Строки - Дополнительные настройки чата - Дополнительные настройки диалогов - Дополнительные настройки контактов + Список чата + Список чатов + Список контактов Цвет заголовка - Цвет имени контакта - Размер имени контакта + Цвет имени + Размер имени Цвет сообщения Размер сообщения Цвет времени/даты Размер времени/даты Цвет счётчика сообщений Размер счётчика сообщений - Цвет заливки фона + Цвет колонки Цвет фона счётчика сообщений Цвет статуса Размер статуса - Цвет правого пузыря сообщений - Цвет левого пузыря сообщений + Цвет правого пузыря + Цвет левого пузыря Цвет даты Размер даты - Палитра для цвета даты + Цвет пузыря даты Цвет текста cправа Цвет текста слева Цвет времени справа @@ -876,36 +884,36 @@ Размер времени Цвет вводимого текста Размер вводимого текста - Цвет окна ввода текста + Цвет фона для ввода текста Цвет фона Emoji Цвет вкладок Emoji - Цвет надписи \"онлайн\" + Цвет статуса \"онлайн\" Музыка Сохранить тему Сохраните свою тему в папку Telegram/Themes Тема сохранена! %1$s сохранено в %2$s - Тема ещё не создана. Примените сначала любой мод Telegram+ + Тема ещё не создана. Примените сначала любой мод Plus Messenger Настройки восстановлены с SD-карты - Файл настройки не найден в %s + Не найден файл настроек в %s SD-карта не найдена. Введите имя Темы Применить тему - Установить ранее сохранённую тему - Цвет ника отправителя - Цвет галочки отправлено/доставлено + Установить xml темы из локальной папки + Цвет участника + Цвет галочки доставки Цвет беззвучного режима Отправлять логи Нет логов - Цвет иконки отправить + Цвет иконки \"отправить\" Скрыть номер телефона из меню - Цвет плавающей кнопки - Фон значка карандаш + Цвет значка карандаша + Фон значка карандаша Сообщество Google+ Цвет набирающего текст - Цвет иконок в нижней панели - Настройки бокового меню + Цвет иконок в панели ввода + Боковое меню Список настроек меню Цвет заливки бокового меню Размер имени @@ -918,15 +926,15 @@ Цвет версии приложения Размер версии приложения Цвет текста заголовка - Цвет иконок + Цвет иконок заголовка Цвет разделительной линии Закругление аватара - Менять цвет отправителя - Цвет пересланного сообщения + Установить цвет участника + Цвет имени в пересылаемом сообщении Название в заголовке Копировать/Переслать Включить всплывающие окна - Настройки экрана профиля + Экрана профиля Cкрыть фоновое изображение Цвет ссылки справа Цвет ссылки слева @@ -937,9 +945,39 @@ Оригинальные названия файлов Скачанные файлы в папке Telegram/Documents будет иметь формат \"Имя файла_Дата загрузки\" Размер аватара - Поместить аватар в начало - Отступ аватара с лева + Разместить аватар сверху + Отступ от аватара слева Цвет названия группы Размер названия группы Цвет имени (неизвестный номер) + Скрыть фоновую тень + Установить цвет фона + Цвет фона + Размер панели Emoji + Цвет правого пузыря форварда + Цвет левого пузыря форварда + Цвет иконок + Экран Настроек/Темы + Цвет фона + Цвет тени + Цвет секции + Цвет заголовка + Цвет подписей + Цвет текста \'Фото/Стикеры\' + Хотите посмотреть темы, созданные другими пользователями Plus Messenger? + Использовать шрифт устройства + Plus Messenger будет перезагружен + Цвет иконки группы + Цвет имени переданного контакта + Цвет фона вложения + Цвет текста вложения + Показывать аватар контакта в чате + Показывать свой аватар в чате + Показывать свой аватар в чате группы + Размешение своего аватара сверху + Цвет заголовка/кнопок диалога + Показывать имя пользователя с именем участника + Не останавливать аудио + Цвет разделителя списка + Центрировать аватар, имя и телефон
diff --git a/TMessagesProj/src/main/res/values-tr/strings.xml b/TMessagesProj/src/main/res/values-tr/strings.xml index a0e879fb..6c151896 100644 --- a/TMessagesProj/src/main/res/values-tr/strings.xml +++ b/TMessagesProj/src/main/res/values-tr/strings.xml @@ -461,7 +461,7 @@ HH:mm Plus Messenger için temalar indirin ve uygulayın. Hergün yeni temalar ekleniyor:\n https://play.google.com/store/apps/details?id=es.rafalense.themes - 591 + 594 diff --git a/TMessagesProj/src/main/res/values-zh-rCN/strings.xml b/TMessagesProj/src/main/res/values-zh-rCN/strings.xml index 3d7471b6..b0c88d9c 100644 --- a/TMessagesProj/src/main/res/values-zh-rCN/strings.xml +++ b/TMessagesProj/src/main/res/values-zh-rCN/strings.xml @@ -5,76 +5,84 @@ Simplified Chinese zh_CN - 您的手机号 - 请确认您的国家码并输入您的手机号 - 选择您的国家 - 国家代码错误 + 您的手机 + 请确认您的国家代码\n然后输入您的手机号码。 + 选择国家 + 错误的国家区号 验证码 - 我们已通过短信将验证码发送至您的手机 - 我们将会在 %1$d:%2$02d 后呼叫您的号码 - 正在呼叫您的号码... + 我们发送了一条带有验证码的短信到您的手机 + 我们稍后将会呼叫您的手机 %1$d:%2$02d + 正在呼叫... 验证码 - 号码错了? - 没收到验证码? + 号码错误? + 未收到验证码? 您的姓名 设置您的姓名 - 名 (必填) - 姓 (选填) + 名字(必填) + 姓氏(可选) 取消注册 设置 联系人 - 新的群聊 + 新建群组 昨天 没有结果 - 还没有会话... - 要发起会话可点击右下角的新消息按钮\n或者点击菜单按钮查看更多选项。 - 等待网络连接... - 正在连接... - 更新中... - 新的私密会话 - 等待 %s 上线... - 私密会话已取消 - 正在交换加密密钥... - %s 加入了您的私密会话。 - 您加入了私密会话。 - 清除历史记录 + 暂时还没有对话... + 要开始对话\n请点击右上角的撰写按钮\n或者进入联系人界面 + 等待网络... + 连接中… + 刷新中... + 新建加密对话 + 等待%s上线… + 加密对话已取消 + 正在交换加密密钥… + %s 加入了您的加密对话。 + 您已加入加密对话。 + 清除聊天记录 删除并退出 - 删除会话 - 账户已删除 - 选择会话 - 长按来查看 - %1$s 正在使用旧版的 Telegram,所以私密图片会以兼容模式显示。\n\n当 %2$s 升级 Telegram 后,有时限的图片将可以在 \'长按来查看\' 模式下运行,同时在其他成员进行屏幕截图时您也会得到通知。 - 消息 + 删除对话 + 隐藏姓名 + 选择对话 + 点按并预览 + %1$s 正在使用旧版本的 Telegram,因此以兼容模式显示照片。\n\n当 %2$s 更新了 Telegram 后,阅后即焚定时器设置在一分钟之内时,照片将用“点按并预览”模式暂存;对方截取手机画面时,也会通知您。 + 搜索消息 搜索 - 屏蔽通知 - 屏蔽 %1$s - 解除屏蔽 - 在 %1$s 之后 + 暂停消息通知 + 暂停通知 %1$s + 恢复消息通知 + %1$s 后 + 禁用暂停通知 + 主题标签 + 最近 - 新的广播列表 - 输入列表名称 - 您创建了一个广播列表 - 添加收听者 - 从广播列表中移除 + 新建广播名单 + 输入名单名称 + 您创建了一个广播名单 + 增加联系人 + 从广播名单中移除 + + 请把文件加入到本机音乐库中,以便您在此处浏览他们。 + 音乐 + 未知艺术家 + 未知标题 选择文件 - 剩余 %1$s ,共 %2$s - 未知错误 - 无法访问 - 还没有文件... + %1$s 可用,共 %2$s + 未知的错误 + 存取错误 + 暂时还没有文件... 文件大小不能超过 %1$s - 储存设备未挂载 - 激活 USB 传输 - 内部储存 - 外置储存 + 未挂载存储器 + 已启用USB传输 + 内部存储器 + 外部存储器 系统根目录 - SD 卡 + SD卡 文件夹 - 发送完整图片 + 传送未经压缩的照片 隐身 正在输入… @@ -90,142 +98,163 @@ 正在发送文件... 对 Telegram 有疑问? 拍照 - 从相册选择 - 发送地理位置 - 发送视频 - 发送文件 - 还没有消息... - 转发消息 - - 没有最近的联系人 + 相册 + 位置 + 视频 + 文件 + 相机 + 暂时还没有消息… + 已转发的消息 + 来自 + 没有最近使用 消息 - 消息 - 分享我的联系方式 - 添加至通讯录 - %s 邀请您加入私密会话。 - 您邀请了 %s 加入私密会话。 - 私密会话: - 使用端对端加密 - 不会在我们的服务器上留下记录 - 定时自毁 - 不允许转发 - 您被从群聊中踢出 - 您离开了群聊 - 删除此群聊 - 删除这个会话 - 滑动取消 - 保存到“下载”文件夹 + 输入消息 + 分享我的联系人信息 + 添加为联系人 + %s 邀请您进入加密对话。 + 已邀请 %s 进入加密对话。 + 加密对话: + 使用端到端加密 + 不在服务器上留下记录 + 使用阅后即焚计时器 + 不允许转发消息 + 您已经被踢出该群组 + 您已经离开该群组 + 删除该群组 + 删除此次对话 + 滑动以取消 + 保存到下载 + 保存为音乐 分享文件 - 应用本地化文件 + 使用本地化文件 不支持的附件 - 设置自毁定时器 + 设置阅后即焚计时器 服务通知 + 正在获取连接信息... + 在浏览器中打开 + 复制链接 + 发送 %1$s - %1$s 设置了时间为 %2$s 的自毁定时器 - 您设置了时间为 %1$s 的自毁定时器 - %1$s 取消了自毁定时器 - 您取消了自毁定时器 - 您有新消息 + %1$s 已将阅后即焚计时器设定为 %2$s + 您已将阅后即焚计时器设定为 %1$s + %1$s 取消了阅后即焚计时器 + 您取消了阅后即焚计时器 + 您有一条新消息 %1$s: %2$s - %1$s 发送了一条消息 - %1$s 发送了一张图片 - %1$s 发送了一段视频 - %1$s 发送了一张联系人名片 - %1$s 发送了一个地理位置 - %1$s 发送了一个文件 - %1$s 发送了一段音频 - %1$s 发送了一个表情 + %1$s 给您发送了一条消息 + %1$s 给您发送了一张图片 + %1$s 给您发送了一段视频 + %1$s 与您分享了一个联系人 + %1$s 给您发送了一个位置 + %1$s 给您发送了一个文件 + %1$s 给您发送了一段语音 + %1$s 给您发送了一张图贴 %1$s @ %2$s: %3$s - %1$s 在群中发送了一条消息 %2$s - %1$s 在群中发送了一张图片 %2$s - %1$s 在群中发送了一段视频 %2$s - %1$s 在群聊共享了一张联系人名片 %2$s - %1$s 在群中发送了一个地理位置 %2$s - %1$s 在群中共享了一份文件 %2$s - %1$s 在群中发送了一段音频 %2$s - %1$s 在群中发送了一个表情 %2$s - %1$s 邀请你加入群 %2$s - %1$s 编辑了群 %2$s 的昵称 - %1$s 编辑了群 %2$s 的头像 - %1$s 被 %3$s 邀请加入群 %2$s - %1$s 被 %3$s 从本群移除 %2$s - %1$s 将你从群 %2$s 移除 - %1$s 退出本群 %2$s - %1$s 加入了 Telegram! - %1$s,\n我们检测到你的账号尝试在一部新设备 %2$s 上登录\n\n设备:%3$s\n地点:%4$s\n\n若非本人登陆,可在设置-隐私与安全 - 终止所有对话。\n\nTelegram团队\n敬上! - %1$s 上传了文件图片 + %1$s 发送了一条消息到 %2$s 群组 + %1$s 发送了一张图片到 %2$s 群组 + %1$s 发送了一段视频到 %2$s 群组 + %1$s 分享了一个联系人到 %2$s 群组 + %1$s 发送了一个位置到 %2$s 群组 + %1$s 发送了一个文件到 %2$s 群组 + %1$s 发送了一段语音到 %2$s 群组 + %1$s 发送了一张图贴到 %2$s 群组 + %1$s 邀请您加入 %2$s 群组 + %1$s 编辑了%2$s 群组的名称 + %1$s 编辑了 %2$s 群组的图片 + %1$s 邀请了 %3$s 加入 %2$s 群组 + %1$s 返回了 %2$s 群组 + %1$s 已将 %3$s 从 %2$s 群组移出 + %1$s 将您移出了 %2$s 群组 + %1$s 已离开 %2$s 群组 + %1$s 加入了 Telegram! + %1$s,\n我们发现您的账号在 %2$s 从新的设备登录\n\n设备: %3$s\n位置: %4$s\n\n如果这不是您本人,您可以到 “设置” - “注销所有其它设备上的会话” 注销其登录\n\n谢谢,\n Telegram 团队 + %1$s 更新了头像 + 通过邀请,%1$s 已经加入 %2$s 群组。 回复 - 回复 %1$s - 回复 %1$s + 回复给 %1$s + 回复给 %1$s %1$s %2$s 选择联系人 - 通讯录为空 - 你好,一起加入 Plus Messenger 吧! http://goo.gl/jnmjnZ - - 昨天在 + 还没有联系人 + 嘿,我们试试 Telegram 吧:http://telegram.org/dl2 + 于今天 + 于昨天 在线 - 最后上线 - 最后上线 + 最近上线 + 最近上线 邀请朋友 - 全球搜索 - 近期最后上线 - 最后上线一周内 - 最后上线一月内 - 最后上线很久以前 - 新的消息 + 网络查找 + 最近上过线 + 最近一周内上过线 + 最近一月内上过线 + 很久以前上过线 + 新消息 - 发送信息给... - 输入群名称 - 群名称 + 发送消息至... + 输入群组名称 + 群组名称 %1$d/%2$d 成员 + 您要加入“%1$s”群组吗? + 对不起,这个群组已经满员。 + 对不起,这个群组貌似不存在。 + 邀请链接已复制到剪贴板 + 通过链接方式邀请他人加入群组 + 邀请链接 + 确认撤销这个邀请?一旦撤销,其他人将不能通过这个链接加入到本群组。 + 以前的邀请链接失效,已生成新的邀请链接。 + 撤销 + 撤销邀请链接 + 复制邀请链接 + 分享邀请链接 + 安装 Telegram 的人将会通过邀请链接加入您的群组。 - 分享媒体 + 分享的多媒体文件 设置 添加成员 - 删除并离开该群 + 删除并退出群组 通知 - 从群中移除 + 从群组中移除 分享 添加 添加联系人 - 屏蔽联系人 + 屏蔽 编辑 删除 - 主页 - 移动 + 家庭 + 手机 工作 - 其他 + 其它 主要 - 开始私密会话。 - 发生错误。 - 加密密钥 - 自毁定时器 + 开始加密对话 + 出现了一个错误。 + 密钥 + 阅后即焚计时器 关闭 - 这张图片是与 ]]>%1$s]]> 私密会话密钥的可视化图标。
]]>如果这张图片与 ]]>%2$s\'s]]> 电话上显示的一样,你的会话 200%% 安全。
]]>更多尽在 telegram.org
- 未知 - 信息 - 电话 + 此图片是与 ]]>%1$s]]> 加密对话的加密密钥的可视化图片。
]]>若此图片与 ]]>%2$s 的]]> 手机上的图片一致,你们之间的聊天就是 200%% 安全的。
]]>了解更多请访问 telegram.org
+ 未设置 + 个人信息 + 手机号码 - 用户名 - 你的用户名 - 抱歉,该用户名已被占用。 - 抱歉,该用户名无效。 - 用户名必须至少 5 个字符以上。 - 用户名不能超出32个字符。 - 抱歉,用户名不能以数字开头。 - 你可以在]]>Plus Messenger]]>上选择一个用户名。用户名可使他人找到你,并不通过你的手机号码就能与你联系。
]]>你可以使用 ]]>a–z]]>, ]]>0–9]]>和下划线。 最短长度为 ]]>5]]> 个字符。
- 查对用户名中... - %1$s 可以使用。 - 用户名为空。 + 昵称 + 输入您的昵称 + 对不起,此昵称已经被其他人使用了。 + 对不起,此昵称无效。 + 用户昵称至少需要五个字母。 + 用户昵称不能超过32个字符。 + 对不起,用户昵称不能以数字开头。 + 您可以在 ]]>Telegram]]> 上选择昵称。设置了昵称,其他人就可以在没有您的手机号码的情况下在 Telegram 上找到您并与您联络。
]]>您可以用 ]]>a–z]]>、 ]]>0–9]]> 和下划线设置昵称,最少 ]]>5]]> 个字符。
+ 正在检查昵称... + %1$s 可用。 + 发生错误。 图贴 - 欢迎艺术家使用 @stickers 机器人加入自己设计的图贴包。\n\n其他使用者可以通过长按选择“添加到图贴”的方式来加入图贴。 + 欢迎艺术家使用 @stickers 接口加入自己设计的图贴集。\n\n其他使用者可以通过长按选择“添加到图贴”的方式来加入图贴。 添加图贴 - 添加到图贴库 - 没找到图贴 + 添加到图贴集 + 未找到图贴 图贴已删除 新图贴已添加 隐藏 @@ -235,86 +264,86 @@ 移除 还没有图贴 - 将所有通知设置为默认值。 - 字号 - 提出一个问题 - 启用动画 - 解除屏蔽 - 长按用户名以解除屏蔽 - 没有被屏蔽用户 + 重置所有通知设置为默认值 + 消息文本大小 + 我有疑问 + 开启动画效果 + 取消屏蔽 + 长按一个用户以取消屏蔽 + 没有被屏蔽的用户 消息通知 - 提醒 + 警告 消息预览 - 群提醒 + 群组通知 声音 - 应用内提醒 - 应用内声音 - 应用内振动 + 程序内通知 + 程序内声音 + 程序内振动 振动 - 应用内预览 + 程序内消息预览 重置 - 重置所有提醒 - 取消所有联系人及群习惯通知设置 - 通知与声音 - 屏蔽的用户 - 登出 - 静音 + 重置所有通知 + 撤消所有联系人和群组的自定制通知设置 + 通知和声音 + 被屏蔽的用户 + 退出登录 + 无声 默认 支持 静音时 对话背景 消息 按回车键发送 - 终止所有会话 + 注销所有其它设备上的会话 事件 - 已加入 Telegram 的联系人 + 联系人已加入 Telegram PEBBLE 语言 - 请注意 Telegram 由志愿者支持维护。我们会尽快回复,请耐心等待。
]]>请查看 Telegram FAQ]]>:已经解答了大部分疑难问题,还有重要提示 troubleshooting]]>。
+ 请注意,Telegram 的技术支持由志愿者提供,我们会试着尽快回复,但还是可能会需要一点时间。
]]>请见Telegram 常见问题]]>:当中包含了大多数问题的答案与疑难解答]]>。
询问志愿者 - Telegram FAQ + Telegram 常见问题 https://telegram.org/faq - 删除定位? - 错误的定位文件 - 启用 - 禁用 + 删除本地化文件? + 错误的本地化文件 + 已启用 + 已禁用 通知服务 - 如果 Google Play 服务已满足你接收信息的要求,可以禁用此通知服务。 但是我们建议你将其设置为开启状态,这样当应用在后台运行时仍能收到即时通知。 - 分类 - 重要联系人 - - + 如果您能收到 Google Play 服务发送的通知,您可以禁用 Telegram 的通知服务。但是我们仍然建议您保留该应用在后台运行以接收即时消息。 + 排序 + 导入联系人 + 名字 + 姓氏 LED 颜色 - 弹出通知 + 弹出提醒 不弹出 - 仅在屏幕“开启” - 仅在屏幕“关闭” - 总是弹出 - 计数 + 只在屏幕打开时 + 只在屏幕关闭时 + 总是显示提醒 + 未读数量提示 系统默认 - 设置默认 - 自动媒体下载 - 使用移动数据时 - 连接到 Wi-Fi 时 + 默认设置 + 自动下载多媒体 + 使用移动数据流量时 + 接入 WiFi 时 漫游时 - 无媒体 + 保存到相册 编辑姓名 - 优先 + 优先级 默认 最大 - 永不 + 从不重复通知 重复通知 - 你可在此修改 Plus Messenger 绑定的号码。你的用户名和云数据 — 消息,媒体,联系人等将被移动到新的号码中。\n\n注意:]]> 所有联系人都会将你的新号码 new number]]> 添加至通讯录中,只要他们有旧号码并未被你屏蔽。 - 所有联系人都会将你的新号码添加至通讯录中,只要他们有旧号码并未被你屏蔽。 - 改变号码 - 新号码 - 我们将向你的新号码发送一条附有验证码的短信。 - 号码为 %1$s 已被连接到新用户。请在启用新号码前删除原用户。 + 您可以更换您的 Telegram 手机号码,您的账号和云端数据(消息,多媒体文件,联系人等)会迁移到新的号码。\n\n注意:]]> 所有您的 Telegram 联系人会获得您的 新号码]]> 并加入到他们的联系人列表中,前提是他们有您的旧号码并且您没有屏蔽他们。 + 所有您的 Telegram 联系人会获得您的新手机号码并加入到他们的联系人列表,前提是他们有您的旧号码并且您没有屏蔽他们。 + 更换手机号码 + 新手机号码 + 我们将会给您的新手机号码发送验证码短信。 + 手机号码 %1$s 已经绑定到 Telegram。迁移到此号码前,请先解除绑定账号。 其他 禁用 禁用 @@ -331,21 +360,21 @@ 时间范围 分钟 - 可用的Telegram登录 - 当前的Telegram登录 - 没有其他的Telegram登录 - 您可以同一个手机号码从其他的手机、平板或台式机登录Telegram,所有聊天数据会即时同步。 - 其他的Telegram登录 - 控制其他设备上的Telegram登录。 - 点击以中断其他Telegram登录。 - 断开这个Telegram登录? - 非官方Telegram应用软件 + 活跃的 Telegram 登录 + 当前的 Telegram 登录 + 没有其他的 Telegram 登录 + 您可以同一个手机号码从其他的手机、平板或台式机登录 Telegram,所有聊天数据会即时同步。 + 其他的 Telegram 登录 + 控制其他设备上的 Telegram 登录。 + 点击以中断其他 Telegram 登录。 + 断开这个 Telegram 登录? + 非官方 Telegram 应用软件 锁定码 更换锁定码 - 如果您设置了锁定码,聊天界面会出现一个锁型标志。点击这个标志可以锁定或是解锁Telegram程序。\n\n注意:如果忘记了锁定码,您只能删除并重新安装Telgegram程序,而且所有的加密聊天记录会丢失。 - 现在,您的聊天记录页面上将会出现锁型标志。点击此标志,将会用锁定您的Telegram程序。 - PIN码 + 如果您设置了锁定码,聊天界面会出现一个锁型标志。点击这个标志可以锁定或是解锁 Telegram 程序。\n\n注意:如果忘记了锁定码,您只能删除并重新安装 Telgegram 程序,而且所有的加密聊天记录会丢失。 + 现在,您的聊天记录页面上将会出现锁型标志。点击此标志,将会用锁定您的 Telegram 程序。 + PIN 码 密码 输入当前的锁定码 输入一个锁定码 @@ -359,10 +388,12 @@ 于 %1$s 后 禁用自动锁定 - 在此会话中分享的照片和视频也可以在其他设备上访问。 + 还没有分享的多媒体 文件 - 分享的资源 - 分享这个聊天的文件和文档并可在你的任何设备上查看 + 分享多媒体文件 + 分享链接 + 此对话中分享的文件,可以在您任何已登录的设备中访问。 + 此对话中分享的链接,可以在您任何已登录的设备中访问。 地图 卫星 @@ -380,17 +411,17 @@ 第 %1$d 张,共 %2$d 张 相册 全部图片 - All Videos + 全部视频 还没有图片 - No videos yet + 还没有视频 请先下载媒体文件 无最近照片 - 无最近GIF + 无最近 GIF 搜索图片 网络搜索 - 搜索GIF + 搜索 GIF 搜索网络 - 搜索GIF标题 + 搜索 GIF 标题 剪裁图片 编辑照片 强化 @@ -410,7 +441,7 @@ 您确认要删除此照片? 您确认要删除此视频? 放弃修改? - 清除搜索历史记录? + 清除搜索记录? 清除 照片 视频 @@ -465,7 +496,7 @@ 找回密码 验证码 密码已无效 - 您已启用了两步验证。\n要登录您的Telegram账户,需要提供两步验证密码。 + 您已启用了两步验证。\n要登录您的 Telegram 账号,需要提供两步验证密码。 您的找回密码 E-Mail 邮箱 %1$s 还没生效,正在等待确认。 隐私和安全 @@ -473,37 +504,37 @@ 最后上线 所有人 我的联系人 - 没有人 - 所有人 (-%1$d) + 无人 + 所有人(-%1$d) 我的联系人 (+%1$d) - 我的联系人(-%1$d) + 我的联系人 (-%1$d) 我的联系人 (-%1$d, +%2$d) - 没有人 (+%1$d) + 无人 (+%1$d) 安全 - 账户自毁 - 如果你离开 - 如果在这段时间内你一次都没有登陆,你的账户将被删除,包括所有群,消息和联系人。 - 删除账户吗? - 修改看到你最后登陆的人。 - 谁能看到你最后登陆时间? - 增加例外 - 注意:你不能看到未分享最后登陆的人的最后登陆时间。只会显示最后登陆的大致时间(最近,一周内,一个月内)。 - 永远分享给 -从不分享给 -这些设置将覆盖上面的值。 -永远分享 -永远分享给这些用户... -从不分享 -从不分享给这些用户... + 自动删除账号 + 离线时间 + 如果您在此期间内没有登录过,您的账号以及群组、消息和联系人将全部被删除。 + 确认要删除您的账号? + 修改谁可以看见您最后上线的时间。 + 谁可以看到您最后上线的时间? + 添加例外 + 重要提示:您不愿意暴露最后上线时间的对象,他们最后的上线时间您也将无法看到。取而代之的是大概的上线时间(如:最近、一周内、一个月内)。 + 白名单 + 黑名单 + 这部分例外设置将会覆盖上面的设置。 + 白名单 + 选择可以看见您上线时间的用户… + 黑名单 + 选择无法看见您上线时间的用户… 添加用户 -抱歉,请求过多。 现不能更改隐私设置,请稍候。 -除此设备外将其他设备登出。 + 抱歉,请求过于频繁。现在无法修改隐私设置,请稍等。 + 注销该设备以外的其它所有设备。 长按用户以删除。 编辑视频 原始视频 编辑过的视频 -正在发送视频... + 正在发送视频…… 压缩视频 接口 @@ -515,6 +546,9 @@ 没有读取消息权限 本接口的作用 开始 + 重启 + 停止机器人 + 重启机器人 下一步 返回 @@ -611,8 +645,8 @@ 免费 安全 强大 -基于云 -私密的 + 基于云端 + 私密 世界上 最快的]]> 即时通讯应用。]]>它 免费]]> 并且 安全]]>。 Plus Messenger]]> 消息发送快于]]>其他任何应用。 Plus Messenger]]> 永久免费。没有广告。]]>没有订阅费。 @@ -620,7 +654,7 @@ Plus Messenger]]> 对]]>你的媒体和会话没有容量限制。 Plus Messenger]]> 使你]]>可从多部设备上查看消息。 Plus Messenger]]> 消息高度加密]]>支持自毁。 -开始发送消息 + 开始聊天 无人在线 一人在线 @@ -804,7 +838,7 @@ %1$s 的 %2$s Android 版的 Plus Messenger 已更新。最新版本 3.1 的新增功能有:\n\n- 在特定聊天中搜索消息内容。\n- 全新设计的附件选择菜单。从附件选择菜单中直接发送联系人资料或语音文件。\n- 改进的程序内媒体播放功能 (YouTube, Vimoe, Soundcloud 等), 新播放器适用于大型语音文件。\n\n更多更新请查看:\nhttps://telegram.org/blog/search-and-media - 591 + 594 Plus Messenger for Android diff --git a/TMessagesProj/src/main/res/values-zh-rTW/strings.xml b/TMessagesProj/src/main/res/values-zh-rTW/strings.xml index 01869548..8c14206f 100644 --- a/TMessagesProj/src/main/res/values-zh-rTW/strings.xml +++ b/TMessagesProj/src/main/res/values-zh-rTW/strings.xml @@ -11,9 +11,9 @@ 錯誤的國碼 您的驗證碼 - 我們已經傳送一則包含啟用碼的簡訊到您的電話 + 我們已經傳送一則包含驗證碼的簡訊到您的電話 我們會在 %1$d:%2$02d 後改用電話語音報驗證碼 - 正在撥打給您... + 正在打電話給您... 驗證碼 號碼不對嗎? 仍未收到驗證碼? @@ -33,7 +33,7 @@ 還未曾聊過... 通過按下在右上角的新訊息按鈕開始傳訊\n,或點擊選單按鈕以獲得更多選項。 等候可用網路... - 連接中... + 連線中... 更新中... 新增私密聊天 等待 %s 上線... @@ -51,17 +51,23 @@ 訊息 搜尋 關閉訊息通知 - 關閉通知 %1$s + 靜音 %1$s 恢復訊息通知 %1$s 後 停用 主題標籤 + 最近的 新增廣播名單 輸入名單名稱 您建立了一份廣播名單 新增接收者 - 從廣播名單中刪除 + 從廣播名單中移除 + + 為了在這裡可以看到它們,請將檔案加入到您裝置上的音樂庫。 + 音樂 + 未知的藝術家 + 未知的標題 選擇檔案 剩餘 %1$s,共 %2$s @@ -78,7 +84,7 @@ 資料夾 傳送未壓縮的照片 - 隱身 + 隱形 正在輸入... 正在輸入... 都在輸入... @@ -86,7 +92,7 @@ %1$s 正在傳送照片... %1$s 正在傳送影片... %1$s 正在傳送檔案... - 正在錄音... + 正在錄製音訊... 正在傳送照片... 正在傳送影片... 正在傳送檔案... @@ -96,6 +102,7 @@ 位置 拍攝影片 檔案 + 相機 這裡還沒有訊息... 轉寄的訊息 來自 @@ -107,16 +114,17 @@ %s 已邀請您加入私密聊天。 您已邀請 %s 加入私密聊天。 私密聊天: - 使用端點對端點加密 + 使用端到端加密 不會在我們伺服器上留下紀錄 使用自動銷毀計時器 不允許轉寄 - 您已從此群組中被刪除 + 您從群組中被移除了 您離開了此群組 刪除此群組 刪除這個聊天 滑動以取消 儲存至下載 + 儲存為音樂 分享 套用在地化語系檔 不支援的附件 @@ -125,6 +133,8 @@ 正在取得連結資訊... 在瀏覽器中開啟 複製網址 + 傳送 %1$s + 開啟網址 %1$s? %1$s 將自毀計時器設定為 %2$s 您將自毀計時器設定為 %1$s @@ -154,11 +164,11 @@ %1$s 編輯了 %2$s 群組的照片 %1$s 已邀請 %3$s 加入 %2$s 群組 %1$s 返回到 %2$s 群組 - %1$s 將 %3$s 從 %2$s 群組中刪除 - %1$s 將您從 %2$s 群組中刪除 + %1$s 將 %3$s 從 %2$s 群組中移除 + %1$s 將您從 %2$s 群組中移除 %1$s 已離開了 %2$s 群組 %1$s 加入了 Telegram! - %1$s,\n我們偵測到有新裝置 %2$s 使用您的帳號登入\n\n裝置類型:%3$s\n位置:%4$s\n\n如果這不是您,您可以到「設定」>「隱私和安全」>「作用中的連線」裡,中斷該連線。\n\n如果您懷疑有人未經您的同意登入您的帳號,請在「隱私和安全」的設定中,啟用「兩步驟驗證」。\n\n感謝您!\nTelegram 團隊 + %1$s,\n我們偵測到有新裝置%2$s 使用您的帳號登入\n\n裝置類型:%3$s\n位置:%4$s\n\n如果這不是您,您可以到「設定」>「隱私和安全」>「作用中的連線」裡,中斷該連線。\n\n如果您懷疑有人未經您的同意登入您的帳號,請在「隱私和安全」的設定中,啟用「兩步驟驗證」。\n\n感謝您!\nTelegram 團隊 %1$s 更新了個人照片 %1$s 透過邀請連結加入了%2$s群組 回覆 @@ -205,7 +215,7 @@ 新增成員 刪除並離開群組 通知 - 從群組中刪除 + 從群組中移除 分享 加入 @@ -242,17 +252,17 @@ 發生錯誤。 貼圖 - 歡迎畫家使用我們的 @Stickers Bot 加入他們自己的貼圖集。\n\n用戶可以通過點擊它們加入貼圖,並選擇 \"加入到貼圖\"。 + 歡迎畫家使用我們的 @Stickers 機器人來加入他們自己的貼圖套件。\n\n用戶可以通過點擊它們加入貼圖,並選擇 \"加入到貼圖\"。 加入貼圖 加入到貼圖 沒有找到貼圖 - 貼圖已刪除 + 貼圖已移除 新貼圖已加入 隱藏 顯示 分享 複製連結 - 刪除 + 移除 還沒有貼圖 重設所有通知設定為預設值 @@ -272,16 +282,16 @@ 應用程式內震動 震動 應用程式內預覽 - 重置 + 重設 重設所有通知 - 重設您對所有聯絡人與群組調整的自訂通知設定 + 復原您對所有聯絡人與群組調整的自訂通知設定 通知與音效 被封鎖的用戶 登出 無音效 預設 支援 - 只在若是沉默 + 只有當沉默 聊天室背景 訊息 按下 Enter 就送出訊息 @@ -290,7 +300,7 @@ 聯絡人加入 Telegram PEBBLE 語言 - 請注意,Telegram 的技術支援是由志工提供,我們會試著盡快回覆但還是可能需要一點時間。
]]>請見 Telegram FAQ]]>: 當中包含了大多數問題的答案與疑難排解]]>時的重要方式。
+ 請留意,Telegram 的技術支援是由志工提供。我們會試著盡快回覆,但還是需要一點時間。
]]>請看看 Telegram FAQ]]>:它回答了大部分的問題及提供了對於故障排除]]>的重要提示。
詢問志工 Telegram FAQ https://telegram.org/faq @@ -299,7 +309,7 @@ 啟用 停用 通知服務 - 如 Google Play 服務能夠讓你收到通知,您可以停用通知服務。但是我們建議您把它啟用,以保持應用程式於背景運作及接收即時通知。 + 如 Google Play 服務能夠讓您收到通知,您可以停用通知服務。但是我們建議您把它啟用,以保持應用程式於背景運作及接收即時通知。 排序 匯入聯絡人 名字 @@ -329,7 +339,7 @@ 最大 從未 重複通知 - 您可以在這裡改變 Telegram 所綁定的電話號碼。您的帳號和所有您的雲端資料 — 訊息、媒體、聯絡人...等,將被移動到新的號碼。\n\n重要提示:]]> 您的所有 Telegram 聯絡人將取得您的 新號碼]]> ,並加入到他們的手機通訊錄中,條件是他們有您的舊號碼,且您沒有在 Telegram 中封鎖他們。 + 您可以在這裡改變 Telegram 所綁定的電話號碼。您的帳號和所有您的雲端資料 — 訊息、媒體、聯絡人...等,將被移動到新的號碼。\n\n重要提示:]]> 您的所有 Telegram 聯絡人將取得您的新號碼]]> ,並加入到他們的手機通訊錄中,條件是他們有您的舊號碼,且您沒有在 Telegram 中封鎖他們。 您的所有 Telegram 聯絡人將取得您的新號碼,並加入到他們的手機通訊錄中,條件是他們有您的舊號碼,且您沒有在 Telegram 中封鎖他們。 變更號碼 新號碼 @@ -342,6 +352,7 @@ 關閉 聊天音效 預設 + 預設 智慧型通知 停用 最大聲 %1$s 不超過 %2$s @@ -353,7 +364,7 @@ 作用中的連線 目前的連線 沒有其他作用中的連線 - 您可以透過使用同一組電話號碼,在其他手提電話、平板電腦及桌面裝置上登入 Telegram。您的所有數據均會立即同步。 + 您可以透過使用同一組電話號碼,在其他行動、平板及桌面裝置上登入 Telegram。您的所有數據均會立即同步。 作用中的連線 控制您在其他裝置上的連線。 請點擊要中斷的連線。 @@ -379,9 +390,11 @@ 停用 在此對話群組內分享照片與影片,且只能透過您已登入的裝置來存取。 - 多個檔案 + 共享的檔案 共享的媒體 + 共享的連結 在此對話群組內分享檔案與文件,且只能透過您已登入的裝置來存取。 + 在這個聊天中分享連結,然後在任何裝置上存取它們。 地圖 衛星 @@ -439,53 +452,53 @@ 兩步驟驗證 設定額外的密碼 - 您可以設定當您登入到一個新裝置上時,除了輸入透過簡訊取得的驗證碼外,另外要輸入的密碼。 + 您可以設定當您使用一個新裝置登入時,除了透過簡訊取得的驗證碼外,另外要輸入的密碼。 您的密碼 請輸入您的密碼 輸入密碼 請輸入您的新密碼 請再次輸入您的密碼 - 恢復用的電子郵件 + 復原用的電子郵件 您的電子郵件 請添加您的有效電子郵件。這是找回忘記的密碼唯一的途徑。 跳過 警告 糟糕,那是很嚴重的。\n\n如果您忘記密碼,您將無法存取您的 Telegram 帳號。也就沒有辦法恢復它了。 - 差不多了! + 快完成了! 請檢查您的電子郵件 (別忘了垃圾郵件資料夾),以完成兩步驟驗證設定。 成功了! 您用於兩步驟驗證的密碼現在起作用了。 變更密碼 關閉密碼 - 設定恢復用的電子郵件 - 變更恢復用的電子郵件 + 設定復原用的電子郵件 + 變更復原用的電子郵件 您確定要停用密碼? 密碼提示 請為您的密碼建立一個提示 密碼並不相符 - 終止兩步驟驗證設定 + 中止兩步驟驗證設定 請按照以下步驟來完成兩步驟驗證設定:\n\n1. 檢查您的電子郵件 (別忘了垃圾郵件資料夾) \n%1$s\n\n2. 點擊驗證連結。 提示必須跟您的密碼不同 無效的電子郵件 很抱歉 - 由於您在設定密碼時沒有提供恢復用的電子郵件,您剩餘的選項就是要記住您的密碼,或是重設您的帳號。 - 我們已經傳送一組恢復用的驗證碼到您所提供的電子郵件:\n\n%1$s + 由於您在設定密碼時沒有提供復原用的電子郵件,您剩餘的選項就是要記住您的密碼,或是重設您的帳號。 + 我們已經傳送一組復原用的驗證碼到您所提供的電子郵件:\n\n%1$s 請檢查您的電子郵件,並輸入我們在這裡傳送的6位數驗證碼。 無法存取您的電子郵件 %1$s? 如果無法恢復存取您的電子郵件,您剩下的選項就是要記住您的密碼或重設您的帳號。 - 重置我的帳號 + 重設我的帳號 如果您繼續重設您的帳號,您將失去所有的聊天紀錄和訊息,連同您所分享過的任何媒體和檔案。 警告 - 這動作無法還原。\n\n如果您重設您的帳號,您的所有訊息和聊天紀錄都將被刪除。 - 重置 + 這動作無法被復原。\n\n如果您重設您的帳號,您的所有訊息和聊天紀錄都將被刪除。 + 重設 密碼 您已經啟用了「兩步驟驗證」,因此您的帳號被一個額外的密碼所保護。 - 忘記密碼了嗎? - 密碼恢復 + 忘記密碼了? + 密碼復原 驗證碼 密碼不再有效 您已啟動了「兩步驟驗證」。\n您需要提供您先前設立的密碼,才可以登入您的 Telegram 帳號。 - 您的恢復用電子郵件 %1$s 還沒有起作用,正等候確認。 + 您的復原用電子郵件 %1$s 還沒有起作用,正等候確認。 隱私和安全 隱私 @@ -524,6 +537,19 @@ 編輯過的影片 傳送影片中… 壓縮影片 + + 機器人 + 分享 + 加入到群組 + 設定 + 幫助 + 可以存取訊息 + 沒有存取訊息權限 + 這個機器人可以做什麼? + 開始 + 重新啟動 + 讓機器人停止 + 重啟機器人 下一步 上一步 @@ -548,25 +574,25 @@ 您透過邀請連結加入了群組 un1 透過邀請連結加入了群組 - un1 刪除了 un2 + un1 移除了 un2 un1 離開了群組 un1 加入了 un2 - un1 刪除了群組照片 + un1 移除了群組照片 un1 變更了群組照片 un1 將群組名稱變更為 un2 un1 建立了群組 - 您刪除了 un2 + 您移除了 un2 您離開了群組 您加入了 un2 - 您刪除了群組照片 + 您移除了群組照片 您變更了群組照片 您將群組名稱變更為 un2 您建立了群組 - un1 刪除了您 + un1 移除了您 un1 已將您加入 un1 返回到群組 您返回到群組 - 您使用的 Telegram 版本無法顯示此訊息。請更新應用程式: http://telegram.org/update + 您使用的 Telegram 版本不支援此訊息。請更新應用程式: https://telegram.org/update 照片 影片 位置 @@ -582,7 +608,7 @@ 驗證碼已過期,請重新登入 嘗試太多次了,請稍後再試 嘗試太多次了,請於 %1$s 後再試 - 驗證碼無效 + 無效驗證碼 姓氏無效 名字無效 載入中…… @@ -591,7 +617,10 @@ 您沒有任何應用程式可處理 \'%1$s\' 的檔案類型,請先安裝一個以繼續 這位聯絡人尚未使用 Telegram,要傳送邀請訊息嗎? 您確定嗎? - 將 %1$s 加入群組?\n\n最後要轉寄的訊息數目: + 將 %1$s 加入 %2$s 群組? + 最後要轉寄的訊息數: + 加入 %1$s 到群組? + 此用戶已是此群組的一員 轉寄訊息給 %1$s? 傳送訊息給 %1$s? 您確定要登出?\n\n請注意,您可以無縫地在所有裝置上同時使用 Telegram。 請記住,登出會讓您所有的私密聊天內容丟失。 @@ -609,6 +638,8 @@ 傳送訊息給 %1$s? 轉寄訊息給 %1$s? 很抱歉,此功能目前無法在您的國家使用。 + 沒有 Telegram 帳號使用這個用戶名稱。 + 這個機器人無法加入群組。 Plus Messenger 快速 @@ -805,10 +836,10 @@ EEE HH:mm a h:mm - %1$s 於時間 %2$s + 於時間 %1$s %2$s - Android 版的 Plus Messenger 已經更新。在版本 3.1 的新功能:\n\n- 在特定的聊天室裡搜尋訊息。\n- 完全重新設計的附件選單。從附件選單直接傳送「聯絡人」資訊和「音訊檔」。\n- 改進的程式內媒體播放( YouTube、Vimoe、SoundCloud 等 ),新的播放器適用於大型音訊檔。\n\n更多關於這次的更新:\nhttps://telegram.org/blog/search-and-media - 591 + Android 版的 Plus Messenger 已經更新。在版本 3.1.3 中的新功能:\n\n- 在聊天室資訊中新增「共享的連結」部份\n- 程式內預覽照片連結 + 594 diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index bac97614..682851e4 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -1,5 +1,4 @@ - - + Plus Messenger Plus @@ -136,6 +135,7 @@ Open in Browser Copy URL Send %1$s + Open url %1$s? %1$s set the self-destruct timer to %2$s You set the self-destruct timer to %1$s @@ -548,6 +548,9 @@ has no access to messages What can this bot do? START + RESTART + Stop bot + Restart bot Next Back @@ -836,10 +839,10 @@ h:mm a %1$s at %2$s - Plus Messenger for Android has been updated. New in version 3.1.2:\n\n- Recent search results\n- Tap and hold sticker to preview before sending - 591 + Plus Messenger for Android has been updated. New in version 3.1.3:\n\n- New \'Shared Links\' section in chat info\n- In-app preview for links to photos + 594 - \n\nNew in 3.1.2.0:\n\n- Bug fixes + \n\nNew in version 3.1.3.0:\n\n- New MOD to change default emoji tab icon color\n- Bug fixes Plus Messenger for Android Theming Invalid color hex code! @@ -884,7 +887,8 @@ Text input size Text input background color Emoji background color - Emoji tab color + Emoji selected tab color + Emoji tab icon color Online color Music Save theme