diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index e57703a94..b37d80575 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -80,7 +80,7 @@ android { defaultConfig { minSdkVersion 8 targetSdkVersion 19 - versionCode 315 + versionCode 318 versionName "1.8.0" } } diff --git a/TMessagesProj/jni/image.c b/TMessagesProj/jni/image.c index ef63bfbf0..57a7f0dea 100644 --- a/TMessagesProj/jni/image.c +++ b/TMessagesProj/jni/image.c @@ -110,6 +110,16 @@ METHODDEF(void) my_error_exit(j_common_ptr cinfo) { } JNIEXPORT void Java_org_telegram_messenger_Utilities_blurBitmap(JNIEnv *env, jclass class, jobject bitmap, int width, int height, int stride) { + AndroidBitmapInfo info; + + if (AndroidBitmap_getInfo(env, bitmap, &info) < 0) { + return; + } + + if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { + return; + } + void *pixels = 0; if (AndroidBitmap_lockPixels(env, bitmap, &pixels) < 0) { return; diff --git a/TMessagesProj/libs/armeabi-v7a/libtmessages.so b/TMessagesProj/libs/armeabi-v7a/libtmessages.so index a5f1bd92a..4edaba154 100755 Binary files a/TMessagesProj/libs/armeabi-v7a/libtmessages.so and b/TMessagesProj/libs/armeabi-v7a/libtmessages.so differ diff --git a/TMessagesProj/libs/armeabi/libtmessages.so b/TMessagesProj/libs/armeabi/libtmessages.so index 7a0c442c1..e6c292aea 100755 Binary files a/TMessagesProj/libs/armeabi/libtmessages.so and b/TMessagesProj/libs/armeabi/libtmessages.so differ diff --git a/TMessagesProj/libs/x86/libtmessages.so b/TMessagesProj/libs/x86/libtmessages.so index ff282dc07..e57fed702 100755 Binary files a/TMessagesProj/libs/x86/libtmessages.so and b/TMessagesProj/libs/x86/libtmessages.so differ diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java index 13d194c43..86f151365 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java @@ -91,7 +91,7 @@ public class MessagesStorage { database.executeFast("CREATE TABLE messages(mid INTEGER PRIMARY KEY, uid INTEGER, read_state INTEGER, send_state INTEGER, date INTEGER, data BLOB, out INTEGER, ttl INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE chats(uid INTEGER PRIMARY KEY, name TEXT, data BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE enc_chats(uid INTEGER PRIMARY KEY, user INTEGER, name TEXT, data BLOB, g BLOB, authkey BLOB, ttl INTEGER)").stepThis().dispose(); - database.executeFast("CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER, flags INTEGER)").stepThis().dispose(); + database.executeFast("CREATE TABLE dialogs(did INTEGER PRIMARY KEY, date INTEGER, unread_count INTEGER, last_mid INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE chat_settings(uid INTEGER PRIMARY KEY, participants BLOB)").stepThis().dispose(); database.executeFast("CREATE TABLE contacts(uid INTEGER PRIMARY KEY, mutual INTEGER)").stepThis().dispose(); database.executeFast("CREATE TABLE pending_read(uid INTEGER PRIMARY KEY, max_id INTEGER)").stepThis().dispose(); @@ -105,6 +105,7 @@ public class MessagesStorage { database.executeFast("CREATE TABLE user_photos(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))").stepThis().dispose(); database.executeFast("CREATE TABLE blocked_users(uid INTEGER PRIMARY KEY)").stepThis().dispose(); database.executeFast("CREATE TABLE download_queue(uid INTEGER, type INTEGER, date INTEGER, data BLOB, PRIMARY KEY (uid, type));").stepThis().dispose(); + database.executeFast("CREATE TABLE dialog_settings(did INTEGER PRIMARY KEY, flags INTEGER);").stepThis().dispose(); //database.executeFast("CREATE TABLE attach_data(uid INTEGER, id INTEGER, data BLOB, PRIMARY KEY (uid, id))").stepThis().dispose(); database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose(); @@ -121,7 +122,7 @@ public class MessagesStorage { database.executeFast("CREATE INDEX IF NOT EXISTS date_idx_dialogs ON dialogs(date);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS date_idx_enc_tasks ON enc_tasks(date);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS last_mid_idx_dialogs ON dialogs(last_mid);").stepThis().dispose(); - database.executeFast("CREATE INDEX IF NOT EXISTS unread_count_flags_idx_dialogs ON dialogs(unread_count, flags);").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS unread_count_idx_dialogs ON dialogs(unread_count);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS uid_mid_idx_media ON media(uid, mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_media ON media(mid);").stepThis().dispose(); @@ -132,7 +133,7 @@ public class MessagesStorage { database.executeFast("CREATE INDEX IF NOT EXISTS mid_out_idx_messages ON messages(mid, out);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS task_idx_messages ON messages(uid, out, read_state, ttl, date, send_state);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS send_state_idx_messages ON messages(mid, send_state, date) WHERE mid < 0 AND send_state = 1;").stepThis().dispose(); - database.executeFast("PRAGMA user_version = 3").stepThis().dispose(); + database.executeFast("PRAGMA user_version = 4").stepThis().dispose(); } else { try { SQLiteCursor cursor = database.queryFinalized("SELECT seq, pts, date, qts, lsv, sg, pbytes FROM params WHERE id = 1"); @@ -164,8 +165,8 @@ public class MessagesStorage { } int version = database.executeInt("PRAGMA user_version"); - if (version < 3) { - updateDbToVersion3(); + if (version < 4) { + updateDbToVersion4(); } } } catch (Exception e) { @@ -174,7 +175,7 @@ public class MessagesStorage { loadUnreadMessages(); } - public void updateDbToVersion3() { + public void updateDbToVersion4() { storageQueue.postRunnable(new Runnable() { @Override public void run() { @@ -187,7 +188,6 @@ public class MessagesStorage { database.executeFast("DROP INDEX IF EXISTS read_state_out_idx_messages;").stepThis().dispose(); database.executeFast("DROP INDEX IF EXISTS ttl_idx_messages;").stepThis().dispose(); database.executeFast("DROP INDEX IF EXISTS date_idx_messages;").stepThis().dispose(); - database.executeFast("DROP INDEX IF EXISTS unread_count_idx_dialogs;").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_out_idx_messages ON messages(mid, out);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS task_idx_messages ON messages(uid, out, read_state, ttl, date, send_state);").stepThis().dispose(); @@ -206,23 +206,19 @@ public class MessagesStorage { database.executeFast("CREATE TABLE IF NOT EXISTS download_queue(uid INTEGER, type INTEGER, date INTEGER, data BLOB, PRIMARY KEY (uid, type));").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS type_date_idx_download_queue ON download_queue(type, date);").stepThis().dispose(); + database.executeFast("CREATE TABLE IF NOT EXISTS dialog_settings(did INTEGER PRIMARY KEY, flags INTEGER);").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS send_state_idx_messages ON messages(mid, send_state, date) WHERE mid < 0 AND send_state = 1;").stepThis().dispose(); + database.executeFast("CREATE INDEX IF NOT EXISTS unread_count_idx_dialogs ON dialogs(unread_count);").stepThis().dispose(); + database.executeFast("UPDATE messages SET send_state = 2 WHERE mid < 0 AND send_state = 1").stepThis().dispose(); - try { - database.executeFast("ALTER TABLE dialogs ADD COLUMN flags INTEGER NOT NULL default 0;").stepThis().dispose(); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - - database.executeFast("CREATE INDEX IF NOT EXISTS unread_count_flags_idx_dialogs ON dialogs(unread_count, flags);").stepThis().dispose(); - - database.executeFast("PRAGMA user_version = 3").stepThis().dispose(); + database.executeFast("PRAGMA user_version = 4").stepThis().dispose(); storageQueue.postRunnable(new Runnable() { @Override public void run() { - String ids = ""; + ArrayList ids = new ArrayList(); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE); Map values = preferences.getAll(); for (Map.Entry entry : values.entrySet()) { @@ -231,15 +227,25 @@ public class MessagesStorage { Integer value = (Integer)entry.getValue(); if (value == 2) { key = key.replace("notify2_", ""); - if (ids.length() != 0) { - ids += ","; + try { + ids.add(Integer.parseInt(key)); + } catch (Exception e) { + e.printStackTrace(); } - ids += key; } } } try { - database.executeFast("UPDATE dialogs SET flags = 1 WHERE did IN (" + ids + ");").stepThis().dispose(); + database.beginTransaction(); + SQLitePreparedStatement state = database.executeFast("REPLACE INTO dialog_settings VALUES(?, ?)"); + for (Integer id : ids) { + state.requery(); + state.bindLong(1, id); + state.bindInteger(2, 1); + state.step(); + } + state.dispose(); + database.commitTransaction(); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -345,7 +351,7 @@ public class MessagesStorage { @Override public void run() { try { - database.executeFast("UPDATE dialogs SET flags = " + flags + " WHERE did = " + did).stepThis().dispose(); + database.executeFast(String.format(Locale.US, "REPLACE INTO dialog_settings VALUES(%d, %d)", did, flags)).stepThis().dispose(); } catch (Exception e) { FileLog.e("tmessages", e); } @@ -359,16 +365,18 @@ public class MessagesStorage { public void run() { try { final HashMap pushDialogs = new HashMap(); - SQLiteCursor cursor = database.queryFinalized("SELECT did, unread_count FROM dialogs WHERE unread_count != 0 AND flags != 1"); + SQLiteCursor cursor = database.queryFinalized("SELECT d.did, d.unread_count, s.flags FROM dialogs as d LEFT JOIN dialog_settings as s ON d.did = s.did WHERE d.unread_count != 0"); String ids = ""; while (cursor.next()) { - long did = cursor.longValue(0); - int count = cursor.intValue(1); - pushDialogs.put(did, count); - if (ids.length() != 0) { - ids += ","; + if (cursor.isNull(2) || cursor.intValue(2) != 1) { + long did = cursor.longValue(0); + int count = cursor.intValue(1); + pushDialogs.put(did, count); + if (ids.length() != 0) { + ids += ","; + } + ids += did; } - ids += did; } cursor.dispose(); @@ -2237,12 +2245,11 @@ public class MessagesStorage { buffersStorage.reuseFreeBuffer(data3); if (dialog != null) { - state = database.executeFast("REPLACE INTO dialogs VALUES(?, ?, ?, ?, ?)"); + state = database.executeFast("REPLACE INTO dialogs(did, date, unread_count, last_mid) VALUES(?, ?, ?, ?)"); state.bindLong(1, dialog.id); state.bindInteger(2, dialog.last_message_date); state.bindInteger(3, dialog.unread_count); state.bindInteger(4, dialog.top_message); - state.bindInteger(5, dialog.flags); state.step(); state.dispose(); } @@ -2572,18 +2579,16 @@ public class MessagesStorage { state3.dispose(); state4.dispose(); - state = database.executeFast("REPLACE INTO dialogs VALUES(?, ?, ?, ?, ?)"); + state = database.executeFast("REPLACE INTO dialogs(did, date, unread_count, last_mid) VALUES(?, ?, ?, ?)"); for (HashMap.Entry pair : messagesMap.entrySet()) { Long key = pair.getKey(); int dialog_date = 0; int old_unread_count = 0; - int old_flags = 0; - SQLiteCursor cursor = database.queryFinalized("SELECT date, unread_count, flags FROM dialogs WHERE did = " + key); + SQLiteCursor cursor = database.queryFinalized("SELECT date, unread_count FROM dialogs WHERE did = " + key); if (cursor.next()) { dialog_date = cursor.intValue(0); old_unread_count = cursor.intValue(1); - old_flags = cursor.intValue(2); } cursor.dispose(); @@ -2607,7 +2612,6 @@ public class MessagesStorage { } state.bindInteger(3, old_unread_count + unread_count); state.bindInteger(4, messageId); - state.bindInteger(5, old_flags); state.step(); } state.dispose(); @@ -3043,14 +3047,13 @@ public class MessagesStorage { ArrayList usersToLoad = new ArrayList(); ArrayList chatsToLoad = new ArrayList(); ArrayList encryptedToLoad = new ArrayList(); - cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state, d.flags FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid WHERE d.did IN(%s)", ids)); + cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid WHERE d.did IN(%s)", ids)); while (cursor.next()) { TLRPC.TL_dialog dialog = new TLRPC.TL_dialog(); dialog.id = cursor.longValue(0); dialog.top_message = cursor.intValue(1); dialog.unread_count = cursor.intValue(2); dialog.last_message_date = cursor.intValue(3); - dialog.flags = cursor.intValue(8); dialogs.dialogs.add(dialog); ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(4)); @@ -3315,14 +3318,13 @@ public class MessagesStorage { usersToLoad.add(UserConfig.getClientUserId()); ArrayList chatsToLoad = new ArrayList(); ArrayList encryptedToLoad = new ArrayList(); - SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state, d.flags FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid ORDER BY d.date DESC LIMIT %d,%d", offset, count)); + SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT d.did, d.last_mid, d.unread_count, d.date, m.data, m.read_state, m.mid, m.send_state FROM dialogs as d LEFT JOIN messages as m ON d.last_mid = m.mid ORDER BY d.date DESC LIMIT %d,%d", offset, count)); while (cursor.next()) { TLRPC.TL_dialog dialog = new TLRPC.TL_dialog(); dialog.id = cursor.longValue(0); dialog.top_message = cursor.intValue(1); dialog.unread_count = cursor.intValue(2); dialog.last_message_date = cursor.intValue(3); - dialog.flags = cursor.intValue(8); dialogs.dialogs.add(dialog); ByteBufferDesc data = buffersStorage.getFreeBuffer(cursor.byteArrayLength(4)); @@ -3498,12 +3500,14 @@ public class MessagesStorage { if (!dialogs.dialogs.isEmpty()) { SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); - SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO dialogs VALUES(?, ?, ?, ?, ?)"); + SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO dialogs(did, date, unread_count, last_mid) VALUES(?, ?, ?, ?)"); SQLitePreparedStatement state3 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)"); + SQLitePreparedStatement state4 = database.executeFast("REPLACE INTO dialog_settings VALUES(?, ?)"); for (TLRPC.TL_dialog dialog : dialogs.dialogs) { state.requery(); state2.requery(); + state4.requery(); int uid = dialog.peer.user_id; if (uid == 0) { uid = -dialog.peer.chat_id; @@ -3526,12 +3530,12 @@ public class MessagesStorage { state2.bindInteger(2, message.date); state2.bindInteger(3, dialog.unread_count); state2.bindInteger(4, dialog.top_message); - if (dialog.notify_settings.mute_until != 0) { - dialog.flags = 1; - } - state2.bindInteger(5, dialog.flags); state2.step(); + state4.bindLong(1, uid); + state4.bindInteger(2, dialog.notify_settings.mute_until != 0 ? 1 : 0); + state4.step(); + if (message.media instanceof TLRPC.TL_messageMediaVideo || message.media instanceof TLRPC.TL_messageMediaPhoto) { state3.requery(); state3.bindLong(1, message.id); @@ -3545,6 +3549,7 @@ public class MessagesStorage { state.dispose(); state2.dispose(); state3.dispose(); + state4.dispose(); } if (!dialogs.users.isEmpty()) { diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java index 0d189ce99..edecdfca6 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java @@ -576,9 +576,8 @@ public class NotificationsController { if (popup != 0) { popupMessages.add(0, messageObject); } - pushMessagesDict.put(messageObject.messageOwner.id, messageObject); pushMessages.add(0, messageObject); - FileLog.e("tmessages", "processNewMessages add dialog = " + dialog_id); + pushMessagesDict.put(messageObject.messageOwner.id, messageObject); } } @@ -609,15 +608,16 @@ public class NotificationsController { Integer currentCount = pushDialogs.get(dialog_id); Integer newCount = entry.getValue(); - FileLog.e("tmessages", "processDialogsUpdateRead dialog = " + dialog_id + " newCount = " + newCount + " oldCount = " + currentCount); if (newCount < 0) { if (currentCount == null) { continue; } newCount = currentCount + newCount; } - if (currentCount != null) { - total_unread_count -= currentCount; + if (canAddValue || newCount == 0) { + if (currentCount != null) { + total_unread_count -= currentCount; + } } if (newCount == 0) { pushDialogs.remove(dialog_id); @@ -654,12 +654,23 @@ public class NotificationsController { pushMessagesDict.clear(); total_unread_count = 0; SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE); + HashMap settingsCache = new HashMap(); + for (HashMap.Entry entry : dialogs.entrySet()) { - pushDialogs.put(entry.getKey(), entry.getValue()); - total_unread_count += entry.getValue(); - FileLog.e("tmessages", "processLoadedUnreadMessages dialog = " + entry.getKey() + " count = " + entry.getValue()); + long dialog_id = entry.getKey(); + Boolean value = settingsCache.get(dialog_id); + if (value == null) { + int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + value = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int) dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); + settingsCache.put(dialog_id, value); + } + if (!value) { + continue; + } + int count = entry.getValue(); + pushDialogs.put(dialog_id, count); + total_unread_count += count; } - FileLog.e("tmessages", "processLoadedUnreadMessages total = " + total_unread_count + " messages = " + messages.size()); if (messages != null) { for (TLRPC.Message message : messages) { if (pushMessagesDict.containsKey(message.id)) { @@ -667,7 +678,13 @@ public class NotificationsController { } MessageObject messageObject = new MessageObject(message, null, 0); long dialog_id = messageObject.getDialogId(); - if (dialog_id == openned_dialog_id && ApplicationLoader.isScreenOn) { + Boolean value = settingsCache.get(dialog_id); + if (value == null) { + int notify_override = preferences.getInt("notify2_" + dialog_id, 0); + value = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int) dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0); + settingsCache.put(dialog_id, value); + } + if (!value || dialog_id == openned_dialog_id && ApplicationLoader.isScreenOn) { continue; } pushMessagesDict.put(messageObject.messageOwner.id, messageObject); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java index 0e0f9fde6..ca4be6f9a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java @@ -8886,7 +8886,6 @@ public class TLRPC { public int last_message_date; public long id; public int last_read; - public int flags; public void readParams(AbsSerializedData stream) { peer = (Peer)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 7778eef82..5b322ec4c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -405,6 +405,8 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen removeFragmentFromStack(fragmentsStack.get(a)); a--; } + pushOpened = false; + isNew = false; } if (videoPath != null || photoPathsArray != null || sendingText != null || documentsPathsArray != null || contactsToSend != null) { NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index c09aa6747..210ca91c5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -2344,7 +2344,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (canShowBottom) { toggleActionBar(!isActionBarVisible, true); } else { - checkImageView.callOnClick(); + checkImageView.performClick(); } return true; } diff --git a/TMessagesProj/src/main/res/values-ar/strings.xml b/TMessagesProj/src/main/res/values-ar/strings.xml index 8a600c7ad..6cad0b6fd 100644 --- a/TMessagesProj/src/main/res/values-ar/strings.xml +++ b/TMessagesProj/src/main/res/values-ar/strings.xml @@ -42,7 +42,7 @@ أمس لا توجد نتائج ...لا توجد محادثات بعد - إبدأ المراسلة بالضغط على \nأيقونة النقاط في أعلى يمين الشاشة\nأو اذهب لقسم جهات الاتصال. + إبدأ المراسلة بالضغط على\nأيقونة النقاط في أعلى يمين الشاشة\nأو اذهب لقسم جهات الاتصال. في إنتظار الشبكة... جاري الاتصال... جاري التحديث... @@ -160,7 +160,7 @@ %1$s قام بالتسجيل في تيليجرام! %1$s,\nتم تسجيل الدخول لحسابك من جهاز جديد يوم %2$s\n\nالجهاز: %3$s\nالموقع: %4$s\n\nإذا لم يكن أنت من سجل الدخول، يمكنك الذهاب للإعدادات ثم تسجيل الخروج من كافة الأجهزة الأخرى.\n\nشكرًا,\nفريق عمل تيليجرام %1$s قام بتغيير صورته الشخصية - Reply + الرد اختر جهة اتصال @@ -275,21 +275,21 @@ الاسم الأول اسم العائلة لون إضاءة الـ LED - إشعارات منبثقة + الإشعارات المنبثقة بدون إشعارات منبثقة فقط عندما تكون الشاشة تعمل فقط عندما تكون الشاشة مطفأة دائمًا أظهر الإشعارات المنبثقة - Badge Number - Short - Long - System default - Settings default - AUTOMATIC MEDIA DOWNLOAD - When using mobile data - When connected on Wi-Fi - When roaming - No media + عداد الشارات + قصير + طويل + النظام الإفتراضي + الإعدادات الإفتراضية + تنزيل الوسائط تلقائيا + عند استخدام البيانات الخلوية + عند الاتصال بالشبكة اللاسلكية + عند تواجدك خارج البلاد + لا يوجد وسائط لا توجد وسائط بعد @@ -376,24 +376,24 @@ اسم العائلة غير صحيح جاري التحميل ... ليس لديك أي مشغل مقاطع مرئية، يرجى تنزيل أية مشغل - يرجى التفضل بإرسال بريد الكتروني إلى sms@telegram.org وشرح مشكلتك. + يرجى إرسال رسالة بواسطة البريد الإلكتروني إلى sms@telegram.org لتخبرنا عن مشكلتك. لا يوجد لديك تطبيق يمكنه فتح \'%1$s\'، يرجى تنزيل تطبيق مناسب للإستمرار هذا المستخدم ليس لديه تيليجرام بعد ، هل ترغب في دعوته الآن؟ هل أنت متأكد؟ هل تريد إضافة جهة اتصال؟ - هل ترغب في إضافة %1$s للمجموعة؟\n\n\n\nعدد الرسائل الحديثة المراد إعادة تحويلها: + هل ترغب في إضافة %1$s للمجموعة؟\n\nعدد الرسائل الحديثة المراد إعادة تحويلها: ؟%1$s هل تريد إعادة توجيه الرسائل إلى هل تريد حذف هذه الدردشة؟ هل ترغب في إرسال رسالة إلى %1$s؟ - هل أنت متأكد من رغبتك في تسجيل الخروج؟ + هل أنت متأكد من أنك تريد تسجيل الخروج؟ هل أنت متأكد من تسجيل الخروج من جميع الأجهزة الأخرى باستثناء هذا الجهاز؟ - هل أنت متأكد من رغبتك في مغادرة المجموعة وحذفها؟ + هل أنت متأكد من أنك تريد حذف المجموعة والخروج منها؟ هل أنت متأكد من رغبتك في حذف المجموعة؟ - هل أنت متأكد من رغبتك في مشاركة جهة الاتصال الخاصة بك؟ + هل أنت متأكد من أنك تريد مشاركة معلومات جهة الاتصال الخاصة بك؟ هل أنت متأكد من رغبتك في حظر جهة الاتصال هذه؟ هل أنت متأكد من رغبتك في إزالة الحظر عن جهة الاتصال هذه؟ هل أنت متأكد من رغبتك في حذف جهة الاتصال هذه؟ - هل أنت متأكد من رغبتك في بدء محادثة سرية؟ + هل أنت متأكد من أنك تريد بدء محادثة سرية؟ أعد الإرسال باستخدام اسمي diff --git a/TMessagesProj/src/main/res/values-de/strings.xml b/TMessagesProj/src/main/res/values-de/strings.xml index a64e1afa3..e815c6bfa 100644 --- a/TMessagesProj/src/main/res/values-de/strings.xml +++ b/TMessagesProj/src/main/res/values-de/strings.xml @@ -80,7 +80,7 @@ SD-Karte - unsichtbar + offline schreibt… Anhängen schreibt... @@ -158,9 +158,9 @@ %1$s hat dich aus der Gruppe %2$s entfernt %1$s hat die Gruppe %2$s verlassen %1$s benutzt jetzt Telegram! - %1$s,\nWir haben eine Anmeldung von einem neuen Gerät mit der IP-Adresse %2$s festgestellt.\n\nGerät: %3$s\nStandort: %4$s\n\nWenn du es nicht selbst gewesen bist, melde alle anderen Sitzungen in den Telegram Einstellungen unverzüglich ab. \n\n\nMit freundlichen Grüßen,\nDas Telegram Team + %1$s,\nWir haben eine Anmeldung von einem neuen Gerät am %2$s festgestellt.\n\nGerät: %3$s\nStandort: %4$s\n\nWenn du das nicht selbst gewesen bist, melde alle anderen Sitzungen in den Telegram Einstellungen unverzüglich ab.\n\nMit freundlichen Grüßen,\nDas Telegram Team %1$s hat das Profilbild geändert - Reply + Beantworten Kontakt auswählen @@ -281,15 +281,15 @@ Nur wenn Bildschirm „aus“ Popups immer anzeigen BADGE (Anzahl) - Short - Long - System default - Settings default - AUTOMATIC MEDIA DOWNLOAD - When using mobile data - When connected on Wi-Fi - When roaming - No media + Kurz + Lang + Systemstandard + Standardeinstellungen + AUTOMATISCHER DOWNLOAD VON MEDIEN + über Mobilfunk + über W-LAN + bei Roaming + kein automatischer Download Noch keine geteilten Medien vorhanden diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index e5d0ff8a3..f64af8b55 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -158,9 +158,9 @@ %1$s te ha expulsado del grupo %2$s %1$s abandonó el grupo %2$s ¡%1$s se unió a Telegram! - %1$s,\nHemos detectado un inicio de sesión en tu cuenta desde un nuevo dispositivo, el %2$s\n\nDispositivo: %3$s\nUbicación: %4$s\n\nSi no eras tú, puedes ir a Ajustes - Cerrar todas las otras sesiones. \n\nAtentamente,\nEl Equipo de Telegram + %1$s,\nHemos detectado un inicio de sesión en tu cuenta desde un nuevo dispositivo, el %2$s\n\nDispositivo: %3$s\nUbicación: %4$s\n\nSi no eras tú, puedes ir a Ajustes - Cerrar todas las otras sesiones.\n\nAtentamente,\nEl Equipo de Telegram %1$s actualizó su foto de perfil - Reply + Responder Seleccionar contacto @@ -281,15 +281,15 @@ Sólo con pantalla apagada Siempre mostrar notificación emergente Globo en el ícono - Short - Long - System default - Settings default - AUTOMATIC MEDIA DOWNLOAD - When using mobile data - When connected on Wi-Fi - When roaming - No media + Corto + Largo + Por defecto del sistema + Ajustes por defecto + DESCARGA AUTOMÁTICA DE MULTIMEDIA + Con uso de datos móviles + Con conexión a Wi-Fi + Con itinerancia de datos + Ningún contenido multimedia No hay fotos ni vídeos compartidos aún diff --git a/TMessagesProj/src/main/res/values-it/strings.xml b/TMessagesProj/src/main/res/values-it/strings.xml index cd56303e9..4d53a3d3a 100644 --- a/TMessagesProj/src/main/res/values-it/strings.xml +++ b/TMessagesProj/src/main/res/values-it/strings.xml @@ -259,7 +259,7 @@ Un contatto si è collegato a Telegram PEBBLE Lingua - Nota che il supporto di Telegram è fornito da volontari. Proviamo a rispondere non appena possibile, ma potrebbe richiedere del tempo.
]]>Dai un\'occhiata alle Domande frequenti]]>: troverai risposte alla maggior parte delle domande e suggerimenti importanti per l\'individuazione del problema]]>.
+ Nota che il supporto di Telegram è fornito da volontari. Proviamo a rispondere non appena possibile, ma potrebbe richiedere del tempo.
]]>Dai un\'occhiata alle Domande frequenti]]>: troverai risposte alla maggior parte delle domande e suggerimenti importanti per l\'individuazione del problema]]>.
Chiedi a un volontario Domande frequenti https://telegram.org/faq/it diff --git a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml index 7de77f46c..66dccff8d 100644 --- a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml @@ -58,12 +58,12 @@ Selecione uma Conversa - Lista de Broadcast - Nova lista de Broadcast + Lista de Transmissão + Nova Lista de Transmissão Digite o nome da lista - Você criou uma lista de broadcast + Você criou uma lista de transmissão Adicionar Recipiente - Remover da lista de broadcast + Remover da lista de trasmissão Selecione um Arquivo @@ -160,7 +160,7 @@ %1$s entrou para o Telegram! %1$s,\nNós detectamos um login na sua conta de um novo dispositivo %2$s\n\nDispositivo: %3$s\nLocalização: %4$s\n\nSe não foi você, você pode ir para Configurações - Terminar todas as sessões.\n\nAtenciosamente,\nTime do Telegram %1$s atualizou a foto do perfil - Reply + Responder Selecionar Contato @@ -281,15 +281,15 @@ Somente com a tela desligada Sempre mostrar popup Contador de medalhas - Short - Long - System default - Settings default - AUTOMATIC MEDIA DOWNLOAD - When using mobile data - When connected on Wi-Fi - When roaming - No media + Curta + Longa + Padrão do sistema + Configurações padrão + DOWNLOAD AUTOMÁTICO DE MÍDIA + Ao usar dados móveis + Quando conectado em Wi-Fi + Em roaming + Sem mídia Ainda não há mídia compartilhada