mirror of
https://github.com/DrKLO/Telegram.git
synced 2024-12-22 14:35:03 +01:00
added Android Wear support
This commit is contained in:
parent
3354342390
commit
4baa0f66a0
23 changed files with 283 additions and 43 deletions
|
@ -80,7 +80,7 @@ android {
|
|||
defaultConfig {
|
||||
minSdkVersion 8
|
||||
targetSdkVersion 19
|
||||
versionCode 344
|
||||
versionName "1.9.2"
|
||||
versionCode 345
|
||||
versionName "1.9.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,6 +147,8 @@
|
|||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name="org.telegram.android.WearReplyReceiver" android:enabled="true"/>
|
||||
|
||||
<uses-library android:name="com.sec.android.app.multiwindow" android:required="false" />
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:value="632dp" />
|
||||
|
|
|
@ -17,7 +17,6 @@ import android.database.Cursor;
|
|||
import android.net.Uri;
|
||||
import android.provider.BaseColumns;
|
||||
import android.provider.ContactsContract;
|
||||
import android.provider.Settings;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import org.telegram.PhoneFormat.PhoneFormat;
|
||||
|
@ -49,7 +48,6 @@ public class ContactsController {
|
|||
private boolean contactsBookLoaded = false;
|
||||
private String lastContactsVersions = "";
|
||||
private ArrayList<Integer> delayedContactsUpdate = new ArrayList<Integer>();
|
||||
public int nameDisplayOrder = 1;
|
||||
|
||||
public static class Contact {
|
||||
public int id;
|
||||
|
@ -101,14 +99,6 @@ public class ContactsController {
|
|||
return localInstance;
|
||||
}
|
||||
|
||||
public ContactsController() {
|
||||
try {
|
||||
nameDisplayOrder = Settings.System.getInt(ApplicationLoader.applicationContext.getContentResolver(), "android.contacts.DISPLAY_ORDER");
|
||||
} catch (Exception e) {
|
||||
//don't promt
|
||||
}
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
contactsBook.clear();
|
||||
contactsBookSPhones.clear();
|
||||
|
@ -1576,7 +1566,7 @@ public class ContactsController {
|
|||
|
||||
public static String formatName(String firstName, String lastName) {
|
||||
String result = null;
|
||||
if (ContactsController.getInstance().nameDisplayOrder == 1) {
|
||||
if (LocaleController.nameDisplayOrder == 1) {
|
||||
result = firstName;
|
||||
if (result == null || result.length() == 0) {
|
||||
result = lastName;
|
||||
|
|
|
@ -47,6 +47,7 @@ public class LocaleController {
|
|||
static final int QUANTITY_MANY = 0x0010;
|
||||
|
||||
public static boolean isRTL = false;
|
||||
public static int nameDisplayOrder = 1;
|
||||
private static boolean is24HourFormat = false;
|
||||
public static FastDateFormat formatterDay;
|
||||
public static FastDateFormat formatterWeek;
|
||||
|
@ -74,7 +75,7 @@ public class LocaleController {
|
|||
@Override
|
||||
public void run() {
|
||||
if (!formatterMonth.getTimeZone().equals(TimeZone.getDefault())) {
|
||||
LocaleController.recreateFormatters();
|
||||
LocaleController.getInstance().recreateFormatters();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -541,14 +542,18 @@ public class LocaleController {
|
|||
return getString("LanguageName", R.string.LanguageName);
|
||||
}
|
||||
|
||||
public static String getString(String key, int res) {
|
||||
String value = getInstance().localeValues.get(key);
|
||||
private String getStringInternal(String key, int res) {
|
||||
String value = localeValues.get(key);
|
||||
if (value == null) {
|
||||
value = ApplicationLoader.applicationContext.getString(res);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public static String getString(String key, int res) {
|
||||
return getInstance().getStringInternal(key, res);
|
||||
}
|
||||
|
||||
public static String formatPluralString(String key, int plural) {
|
||||
if (key == null || key.length() == 0 || getInstance().currentPluralRules == null) {
|
||||
return "LOC_ERR:" + key;
|
||||
|
@ -664,32 +669,44 @@ public class LocaleController {
|
|||
}
|
||||
}
|
||||
|
||||
public static void recreateFormatters() {
|
||||
public void recreateFormatters() {
|
||||
Locale locale = Locale.getDefault();
|
||||
String lang = locale.getLanguage();
|
||||
if (lang == null) {
|
||||
lang = "en";
|
||||
}
|
||||
isRTL = lang.toLowerCase().equals("ar");
|
||||
if (lang.equals("en")) {
|
||||
formatterMonth = FastDateFormat.getInstance("MMM dd", locale);
|
||||
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
|
||||
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
|
||||
chatDate = FastDateFormat.getInstance("MMMM d", locale);
|
||||
chatFullDate = FastDateFormat.getInstance("MMMM d, yyyy", locale);
|
||||
} else if (lang.startsWith("es")) {
|
||||
formatterMonth = FastDateFormat.getInstance("dd 'de' MMM", locale);
|
||||
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
|
||||
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
|
||||
chatDate = FastDateFormat.getInstance("d 'de' MMMM", locale);
|
||||
chatFullDate = FastDateFormat.getInstance("d 'de' MMMM 'de' yyyy", locale);
|
||||
} else {
|
||||
formatterMonth = FastDateFormat.getInstance("dd MMM", locale);
|
||||
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
|
||||
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
|
||||
chatDate = FastDateFormat.getInstance("d MMMM", locale);
|
||||
chatFullDate = FastDateFormat.getInstance("d MMMM yyyy", locale);
|
||||
nameDisplayOrder = lang.toLowerCase().equals("ko") ? 2 : 1;
|
||||
String formatString = getStringInternal("formatterMonth", R.string.formatterMonth);
|
||||
if (formatString == null || formatString.length() == 0) {
|
||||
formatString = "dd MMM";
|
||||
}
|
||||
formatterMonth = FastDateFormat.getInstance(formatString, locale);
|
||||
|
||||
formatString = getStringInternal("formatterYear", R.string.formatterYear);
|
||||
if (formatString == null || formatString.length() == 0) {
|
||||
formatString = "dd.MM.yy";
|
||||
}
|
||||
formatterYear = FastDateFormat.getInstance(formatString, locale);
|
||||
|
||||
formatString = getStringInternal("formatterYearMax", R.string.formatterYearMax);
|
||||
if (formatString == null || formatString.length() == 0) {
|
||||
formatString = "dd.MM.yyyy";
|
||||
}
|
||||
formatterYearMax = FastDateFormat.getInstance(formatString, locale);
|
||||
|
||||
formatString = getStringInternal("chatDate", R.string.chatDate);
|
||||
if (formatString == null || formatString.length() == 0) {
|
||||
formatString = "d MMMM";
|
||||
}
|
||||
chatDate = FastDateFormat.getInstance(formatString, locale);
|
||||
|
||||
formatString = getStringInternal("chatFullDate", R.string.chatFullDate);
|
||||
if (formatString == null || formatString.length() == 0) {
|
||||
formatString = "d MMMM yyyy";
|
||||
}
|
||||
chatFullDate = FastDateFormat.getInstance(formatString, locale);
|
||||
|
||||
formatterWeek = FastDateFormat.getInstance("EEE", locale);
|
||||
|
||||
if (lang != null) {
|
||||
|
|
|
@ -1648,7 +1648,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
|
|||
int high_id = (int)(dialog_id >> 32);
|
||||
|
||||
if (lower_part != 0) {
|
||||
if (max_id == 0 && offset == 0 || high_id == 1) {
|
||||
if (max_positive_id == 0 && offset == 0 || high_id == 1) {
|
||||
return;
|
||||
}
|
||||
TLRPC.TL_messages_readHistory req = new TLRPC.TL_messages_readHistory();
|
||||
|
|
|
@ -18,10 +18,12 @@ import android.content.pm.ResolveInfo;
|
|||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.media.AudioManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.SystemClock;
|
||||
import android.provider.Settings;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.app.NotificationManagerCompat;
|
||||
import android.support.v4.app.RemoteInput;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
@ -47,6 +49,8 @@ public class NotificationsController {
|
|||
private HashMap<Integer, MessageObject> pushMessagesDict = new HashMap<Integer, MessageObject>();
|
||||
private NotificationManagerCompat notificationManager = null;
|
||||
private HashMap<Long, Integer> pushDialogs = new HashMap<Long, Integer>();
|
||||
private HashMap<Long, Integer> wearNoticationsIds = new HashMap<Long, Integer>();
|
||||
private int wearNotificationId = 10000;
|
||||
public ArrayList<MessageObject> popupMessages = new ArrayList<MessageObject>();
|
||||
private long openned_dialog_id = 0;
|
||||
private int total_unread_count = 0;
|
||||
|
@ -79,6 +83,7 @@ public class NotificationsController {
|
|||
pushMessagesDict.clear();
|
||||
pushDialogs.clear();
|
||||
popupMessages.clear();
|
||||
wearNoticationsIds.clear();
|
||||
notifyCheck = false;
|
||||
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
|
@ -261,6 +266,7 @@ public class NotificationsController {
|
|||
MessageObject lastMessageObject = pushMessages.get(0);
|
||||
|
||||
long dialog_id = lastMessageObject.getDialogId();
|
||||
int mid = lastMessageObject.messageOwner.id;
|
||||
int chat_id = lastMessageObject.messageOwner.to_id.chat_id;
|
||||
int user_id = lastMessageObject.messageOwner.to_id.user_id;
|
||||
if (user_id == 0) {
|
||||
|
@ -387,7 +393,9 @@ public class NotificationsController {
|
|||
.setSmallIcon(R.drawable.notification)
|
||||
.setAutoCancel(true)
|
||||
.setNumber(total_unread_count)
|
||||
.setContentIntent(contentIntent);
|
||||
.setContentIntent(contentIntent)
|
||||
.setGroup("messages")
|
||||
.setGroupSummary(true);
|
||||
|
||||
String lastMessage = null;
|
||||
String lastMessageFull = null;
|
||||
|
@ -479,18 +487,119 @@ public class NotificationsController {
|
|||
mBuilder.setVibrate(new long[]{0, 0});
|
||||
}
|
||||
|
||||
//RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY).setLabel(LocaleController.getString("Reply", R.string.Reply)).build();
|
||||
|
||||
notificationManager.notify(1, mBuilder.build());
|
||||
if (preferences.getBoolean("EnablePebbleNotifications", false)) {
|
||||
sendAlertToPebble(lastMessageFull);
|
||||
}
|
||||
showWearNotifications(notifyAboutLast);
|
||||
scheduleNotificationRepeat();
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showWearNotifications(boolean notifyAboutLast) {
|
||||
if (Build.VERSION.SDK_INT < 19) {
|
||||
return;
|
||||
}
|
||||
ArrayList<Long> sortedDialogs = new ArrayList<Long>();
|
||||
HashMap<Long, ArrayList<MessageObject>> messagesByDialogs = new HashMap<Long, ArrayList<MessageObject>>();
|
||||
for (MessageObject messageObject : pushMessages) {
|
||||
long dialog_id = messageObject.getDialogId();
|
||||
if ((int)dialog_id == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ArrayList<MessageObject> arrayList = messagesByDialogs.get(dialog_id);
|
||||
if (arrayList == null) {
|
||||
arrayList = new ArrayList<MessageObject>();
|
||||
messagesByDialogs.put(dialog_id, arrayList);
|
||||
sortedDialogs.add(0, dialog_id);
|
||||
}
|
||||
arrayList.add(messageObject);
|
||||
}
|
||||
|
||||
HashMap<Long, Integer> oldIds = new HashMap<Long, Integer>();
|
||||
oldIds.putAll(wearNoticationsIds);
|
||||
wearNoticationsIds.clear();
|
||||
|
||||
for (long dialog_id : sortedDialogs) {
|
||||
ArrayList<MessageObject> messageObjects = messagesByDialogs.get(dialog_id);
|
||||
int max_id = messageObjects.get(0).messageOwner.id;
|
||||
TLRPC.Chat chat = null;
|
||||
TLRPC.User user = null;
|
||||
String name = null;
|
||||
if (dialog_id > 0) {
|
||||
user = MessagesController.getInstance().getUser((int)dialog_id);
|
||||
if (user == null) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
chat = MessagesController.getInstance().getChat(-(int)dialog_id);
|
||||
if (chat == null) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (chat != null) {
|
||||
name = chat.title;
|
||||
} else {
|
||||
name = ContactsController.formatName(user.first_name, user.last_name);
|
||||
}
|
||||
|
||||
Integer notificationId = oldIds.get(dialog_id);
|
||||
if (notificationId == null) {
|
||||
notificationId = wearNotificationId++;
|
||||
} else {
|
||||
oldIds.remove(dialog_id);
|
||||
}
|
||||
|
||||
Intent replyIntent = new Intent(ApplicationLoader.applicationContext, WearReplyReceiver.class);
|
||||
replyIntent.putExtra("dialog_id", dialog_id);
|
||||
replyIntent.putExtra("max_id", max_id);
|
||||
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(ApplicationLoader.applicationContext, notificationId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY).setLabel(LocaleController.getString("Reply", R.string.Reply)).build();
|
||||
String replyToString;
|
||||
if (chat != null) {
|
||||
replyToString = LocaleController.formatString("ReplyToGroup", R.string.ReplyToGroup, name);
|
||||
} else {
|
||||
replyToString = LocaleController.formatString("ReplyToUser", R.string.ReplyToUser, name);
|
||||
}
|
||||
NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon, replyToString, replyPendingIntent).addRemoteInput(remoteInput).build();
|
||||
|
||||
String text = "";
|
||||
for (MessageObject messageObject : messageObjects) {
|
||||
String message = getStringForMessage(messageObject, false);
|
||||
if (message == null) {
|
||||
continue;
|
||||
}
|
||||
if (chat != null) {
|
||||
message = message.replace(" @ " + name, "");
|
||||
} else {
|
||||
message = message.replace(name + ": ", "").replace(name + " ", "");
|
||||
}
|
||||
if (text.length() > 0) {
|
||||
text += "\n\n";
|
||||
}
|
||||
text += message;
|
||||
}
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(ApplicationLoader.applicationContext)
|
||||
.setContentTitle(name)
|
||||
.setSmallIcon(R.drawable.notification)
|
||||
.setGroup("messages")
|
||||
.setContentText(text)
|
||||
.setGroupSummary(false)
|
||||
.extend(new NotificationCompat.WearableExtender().addAction(action));
|
||||
|
||||
notificationManager.notify(notificationId, builder.build());
|
||||
wearNoticationsIds.put(dialog_id, notificationId);
|
||||
}
|
||||
|
||||
for (HashMap.Entry<Long, Integer> entry : oldIds.entrySet()) {
|
||||
notificationManager.cancel(entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
private void dismissNotification() {
|
||||
try {
|
||||
notificationManager.cancel(1);
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* This is the source code of Telegram for Android v. 1.7.x.
|
||||
* It is licensed under GNU GPL v. 2 or later.
|
||||
* You should have received a copy of the license in this archive (see LICENSE).
|
||||
*
|
||||
* Copyright Nikolai Kudashov, 2013-2014.
|
||||
*/
|
||||
|
||||
package org.telegram.android;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.RemoteInput;
|
||||
|
||||
public class WearReplyReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
||||
if (remoteInput == null) {
|
||||
return;
|
||||
}
|
||||
CharSequence text = remoteInput.getCharSequence(NotificationsController.EXTRA_VOICE_REPLY);
|
||||
if (text == null || text.length() == 0) {
|
||||
return;
|
||||
}
|
||||
long dialog_id = intent.getLongExtra("dialog_id", 0);
|
||||
int max_id = intent.getIntExtra("max_id", 0);
|
||||
if (dialog_id == 0 || max_id == 0) {
|
||||
return;
|
||||
}
|
||||
SendMessagesHelper.getInstance().sendMessage(text.toString(), dialog_id);
|
||||
MessagesController.getInstance().markDialogAsRead(dialog_id, max_id, max_id, 0, 0, true, false);
|
||||
}
|
||||
}
|
|
@ -136,6 +136,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
|||
|
||||
progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
progressPaint.setStyle(Paint.Style.STROKE);
|
||||
progressPaint.setStrokeCap(Paint.Cap.ROUND);
|
||||
progressPaint.setStrokeWidth(AndroidUtilities.dp(2));
|
||||
|
||||
decelerateInterpolator = new DecelerateInterpolator();
|
||||
|
|
|
@ -544,6 +544,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putBoolean("serverOnly", true);
|
||||
args.putString("selectAlertString", LocaleController.getString("ForwardMessagesTo", R.string.ForwardMessagesTo));
|
||||
args.putString("selectAlertStringGroup", LocaleController.getString("ForwardMessagesToGroup", R.string.ForwardMessagesToGroup));
|
||||
MessagesActivity fragment = new MessagesActivity(args);
|
||||
fragment.setDelegate(ChatActivity.this);
|
||||
presentFragment(fragment);
|
||||
|
@ -2914,6 +2915,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putBoolean("serverOnly", true);
|
||||
args.putString("selectAlertString", LocaleController.getString("ForwardMessagesTo", R.string.ForwardMessagesTo));
|
||||
args.putString("selectAlertStringGroup", LocaleController.getString("ForwardMessagesToGroup", R.string.ForwardMessagesToGroup));
|
||||
MessagesActivity fragment = new MessagesActivity(args);
|
||||
fragment.setDelegate(this);
|
||||
presentFragment(fragment);
|
||||
|
|
|
@ -39,7 +39,6 @@ import org.telegram.android.NotificationCenter;
|
|||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.RPCRequest;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.ui.Adapters.ContactsActivityAdapter;
|
||||
import org.telegram.ui.Adapters.ContactsActivitySearchAdapter;
|
||||
import org.telegram.ui.Cells.ChatOrUserCell;
|
||||
|
|
|
@ -576,6 +576,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
|
|||
Bundle args = new Bundle();
|
||||
args.putBoolean("onlySelect", true);
|
||||
args.putString("selectAlertString", LocaleController.getString("SendMessagesTo", R.string.SendMessagesTo));
|
||||
args.putString("selectAlertStringGroup", LocaleController.getString("SendMessagesToGroup", R.string.SendMessagesToGroup));
|
||||
MessagesActivity fragment = new MessagesActivity(args);
|
||||
fragment.setDelegate(this);
|
||||
actionBarLayout.presentFragment(fragment, false, true, true);
|
||||
|
|
|
@ -53,6 +53,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
|||
private View progressView;
|
||||
private View empryView;
|
||||
private String selectAlertString;
|
||||
private String selectAlertStringGroup;
|
||||
private boolean serverOnly = false;
|
||||
|
||||
private static boolean dialogsLoaded = false;
|
||||
|
@ -101,6 +102,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
|||
onlySelect = arguments.getBoolean("onlySelect", false);
|
||||
serverOnly = arguments.getBoolean("serverOnly", false);
|
||||
selectAlertString = arguments.getString("selectAlertString");
|
||||
selectAlertStringGroup = arguments.getString("selectAlertStringGroup");
|
||||
}
|
||||
if (!dialogsLoaded) {
|
||||
MessagesController.getInstance().loadDialogs(0, 0, 100, true);
|
||||
|
@ -538,7 +540,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
|
||||
private void didSelectResult(final long dialog_id, boolean useAlert, final boolean param) {
|
||||
if (useAlert && selectAlertString != null) {
|
||||
if (useAlert && selectAlertString != null && selectAlertStringGroup != null) {
|
||||
if (getParentActivity() == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -552,7 +554,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
|||
if (chat == null) {
|
||||
return;
|
||||
}
|
||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, chat.title));
|
||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertStringGroup, chat.title));
|
||||
} else {
|
||||
if (lower_part > 0) {
|
||||
TLRPC.User user = MessagesController.getInstance().getUser(lower_part);
|
||||
|
@ -565,7 +567,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
|||
if (chat == null) {
|
||||
return;
|
||||
}
|
||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, chat.title));
|
||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertStringGroup, chat.title));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
BIN
TMessagesProj/src/main/res/drawable-hdpi/ic_reply_icon.png
Executable file
BIN
TMessagesProj/src/main/res/drawable-hdpi/ic_reply_icon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
TMessagesProj/src/main/res/drawable-mdpi/ic_reply_icon.png
Executable file
BIN
TMessagesProj/src/main/res/drawable-mdpi/ic_reply_icon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 991 B |
BIN
TMessagesProj/src/main/res/drawable-xhdpi/ic_reply_icon.png
Executable file
BIN
TMessagesProj/src/main/res/drawable-xhdpi/ic_reply_icon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 679 B |
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nتم تسجيل الدخول لحسابك من جهاز جديد يوم %2$s\n\nالجهاز: %3$s\nالموقع: %4$s\n\nإذا لم يكن أنت من سجل الدخول، يمكنك الذهاب للإعدادات ثم تسجيل الخروج من كافة الأجهزة الأخرى.\n\nشكرًا,\nفريق عمل تيليجرام</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s قام بتغيير صورته الشخصية</string>
|
||||
<string name="Reply">الرد</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">اختر جهة اتصال</string>
|
||||
<string name="NoContacts">لا توجد جهات اتصال بعد</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">هل أنت متأكد من رغبتك في حذف جهة الاتصال هذه؟</string>
|
||||
<string name="AreYouSureSecretChat">هل أنت متأكد من أنك تريد بدء محادثة سرية؟</string>
|
||||
<string name="ForwardFromMyName">أعد الإرسال باستخدام اسمي</string>
|
||||
<string name="SendMessagesToGroup">هل ترغب في إرسال رسالة إلى %1$s؟</string>
|
||||
<string name="ForwardMessagesToGroup">؟%1$s هل تريد إعادة توجيه الرسائل إلى</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">تيليجرام</string>
|
||||
<string name="Page2Title">سريع</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">من %1$d جهات اتصال</string>
|
||||
<string name="FromContacts_many">من %1$d جهة اتصال</string>
|
||||
<string name="FromContacts_other">من %1$d جهة اتصال</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%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</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s hat das Profilbild geändert</string>
|
||||
<string name="Reply">Beantworten</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Kontakt auswählen</string>
|
||||
<string name="NoContacts">Noch keine Kontakte</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Diesen Kontakt wirklich löschen?</string>
|
||||
<string name="AreYouSureSecretChat">Geheimen Chat starten?</string>
|
||||
<string name="ForwardFromMyName">mit meinem Namen weiterleiten</string>
|
||||
<string name="SendMessagesToGroup">Nachricht an %1$s senden?</string>
|
||||
<string name="ForwardMessagesToGroup">Nachrichten an %1$s weiterleiten?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Schnell</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">von %1$d Kontakten</string>
|
||||
<string name="FromContacts_many">von %1$d Kontakten</string>
|
||||
<string name="FromContacts_other">von %1$d Kontakten</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nDetectamos 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</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s actualizó su foto de perfil</string>
|
||||
<string name="Reply">Responder</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Elegir contacto</string>
|
||||
<string name="NoContacts">Aún sin contactos</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">¿Quieres eliminar este contacto?</string>
|
||||
<string name="AreYouSureSecretChat">¿Quieres iniciar un chat secreto?</string>
|
||||
<string name="ForwardFromMyName">reenviar desde mi nombre</string>
|
||||
<string name="SendMessagesToGroup">¿Enviar mensajes a %1$s?</string>
|
||||
<string name="ForwardMessagesToGroup">¿Reenviar mensajes a %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Rápida</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">de %1$d contactos</string>
|
||||
<string name="FromContacts_many">de %1$d contactos</string>
|
||||
<string name="FromContacts_other">de %1$d contactos</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd \'de\' MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d \'de\' MMMM</string>
|
||||
<string name="chatFullDate">d \'de\' MMMM \'de\' yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nAbbiamo rilevato un accesso al tuo account da un nuovo dispositivo %2$s\n\nDispositivo: %3$s\nPosizione: %4$s\n\nSe non sei stato tu, puoi andare su Impostazioni - Termina tutte le sessioni.\n\nGrazie,\nil team di Telegram</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s ha aggiornato la foto del profilo</string>
|
||||
<string name="Reply">Rispondi</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Seleziona contatto</string>
|
||||
<string name="NoContacts">Ancora nessun contatto</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Eliminare questo contatto?</string>
|
||||
<string name="AreYouSureSecretChat">Iniziare una chat segreta?</string>
|
||||
<string name="ForwardFromMyName">inoltra dal mio nome</string>
|
||||
<string name="SendMessagesToGroup">Inviare i messaggi a %1$s?</string>
|
||||
<string name="ForwardMessagesToGroup">Vuoi inoltrare i messaggi a %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Veloce</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">da %1$d contatti</string>
|
||||
<string name="FromContacts_many">da %1$d contatti</string>
|
||||
<string name="FromContacts_other">da %1$d contatti</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%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 alle sessies beëindigen via Instellingen – Beëindig alle andere sessies.\n\nBedankt,\nHet Telegram-team</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s heeft zijn/haar profielfoto gewijzigd</string>
|
||||
<string name="Reply">Antwoord</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Kies een contact</string>
|
||||
<string name="NoContacts">Nog geen contacten</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Weet je zeker dat je deze contactpersoon wilt verwijderen?</string>
|
||||
<string name="AreYouSureSecretChat">Weet je zeker dat je een geheime chat wilt starten?</string>
|
||||
<string name="ForwardFromMyName">doorsturen via mijn eigen naam</string>
|
||||
<string name="SendMessagesToGroup">Berichten naar %1$s verzenden?</string>
|
||||
<string name="ForwardMessagesToGroup">Berichten doorsturen naar %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Snel</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">van %1$d contactpersonen</string>
|
||||
<string name="FromContacts_many">van %1$d contactpersonen</string>
|
||||
<string name="FromContacts_other">van %1$d contactpersonen</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nNós detectamos um login na sua conta de um novo dispositivo %2$s\n\nDispositivo: %3$s\nLocalização: %4$s\nSe não foi você, você pode ir em Configurações - Terminar todas as sessões.\n\nAtenciosamente,\nTime do Telegram</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s atualizou a foto do perfil</string>
|
||||
<string name="Reply">Responder</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Selecionar Contato</string>
|
||||
<string name="NoContacts">Ainda não há contatos</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Você tem certeza que deseja deletar este contato?</string>
|
||||
<string name="AreYouSureSecretChat">Você tem certeza que deseja começar uma conversa secreta?</string>
|
||||
<string name="ForwardFromMyName">encaminhar pelo meu nome</string>
|
||||
<string name="SendMessagesToGroup">Enviar mensagens para %1$s?</string>
|
||||
<string name="ForwardMessagesToGroup">Encaminhar mensagem para %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Rápido</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">de %1$d contatos</string>
|
||||
<string name="FromContacts_many">de %1$d contatos</string>
|
||||
<string name="FromContacts_other">de %1$d contatos</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nNós detectamos um login na sua conta de um novo dispositivo %2$s\n\nDispositivo: %3$s\nLocalização: %4$s\nSe não foi você, você pode ir em Configurações - Terminar todas as sessões.\n\nAtenciosamente,\nTime do Telegram</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s atualizou a foto do perfil</string>
|
||||
<string name="Reply">Responder</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Selecionar Contato</string>
|
||||
<string name="NoContacts">Ainda não há contatos</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Você tem certeza que deseja deletar este contato?</string>
|
||||
<string name="AreYouSureSecretChat">Você tem certeza que deseja começar uma conversa secreta?</string>
|
||||
<string name="ForwardFromMyName">encaminhar pelo meu nome</string>
|
||||
<string name="SendMessagesToGroup">Enviar mensagens para %1$s?</string>
|
||||
<string name="ForwardMessagesToGroup">Encaminhar mensagem para %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Rápido</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">de %1$d contatos</string>
|
||||
<string name="FromContacts_many">de %1$d contatos</string>
|
||||
<string name="FromContacts_other">de %1$d contatos</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">d MMMM</string>
|
||||
<string name="chatFullDate">d MMMM yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
|
@ -152,6 +152,8 @@
|
|||
<string name="NotificationUnrecognizedDevice">%1$s,\nWe detected a login into your account from a new device on %2$s\n\nDevice: %3$s\nLocation: %4$s\n\nIf this wasn\'t you, you can go to Settings - Terminate all sessions.\n\nSincerely,\nThe Telegram Team</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s updated profile photo</string>
|
||||
<string name="Reply">Reply</string>
|
||||
<string name="ReplyToGroup">Reply to %1$s</string>
|
||||
<string name="ReplyToUser">Reply to %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Select Contact</string>
|
||||
<string name="NoContacts">No contacts yet</string>
|
||||
|
@ -377,6 +379,8 @@
|
|||
<string name="AreYouSureDeleteContact">Are you sure you want to delete this contact?</string>
|
||||
<string name="AreYouSureSecretChat">Are you sure you want to start a secret chat?</string>
|
||||
<string name="ForwardFromMyName">forward from my name</string>
|
||||
<string name="SendMessagesToGroup">Send messages to %1$s?</string>
|
||||
<string name="ForwardMessagesToGroup">Forward messages to %1$s?</string>
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Fast</string>
|
||||
|
@ -424,6 +428,12 @@
|
|||
<string name="FromContacts_few">from %1$d contacts</string>
|
||||
<string name="FromContacts_many">from %1$d contacts</string>
|
||||
<string name="FromContacts_other">from %1$d contacts</string>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonth">MMM dd</string>
|
||||
<string name="formatterYear">dd.MM.yy</string>
|
||||
<string name="formatterYearMax">dd.MM.yyyy</string>
|
||||
<string name="chatDate">MMMM d</string>
|
||||
<string name="chatFullDate">MMMM d, yyyy</string>
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|
Loading…
Reference in a new issue