Update to 1.3.30
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.telegram.messenger"
|
||||
android:versionCode="185"
|
||||
android:versionName="1.3.26">
|
||||
android:versionCode="194"
|
||||
android:versionName="1.3.30">
|
||||
|
||||
<supports-screens android:anyDensity="true"
|
||||
android:smallScreens="true"
|
||||
|
@ -25,7 +25,7 @@
|
|||
<uses-feature android:name="android.hardware.screen.PORTRAIT" android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<!--<uses-permission android:name="android.permission.RECORD_AUDIO" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
||||
|
@ -50,7 +50,6 @@
|
|||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER" />
|
||||
|
||||
<permission android:name="org.telegram.messenger.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
|
||||
<permission android:name="org.telegram.messenger.permission.C2D_MESSAGE" android:protectionLevel="signature" />
|
||||
|
@ -65,9 +64,9 @@
|
|||
android:largeHeap="true">
|
||||
|
||||
<!--release-->
|
||||
<!--<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyA-t0jLPjUt2FxrA8VPK2EiYHcYcboIR6k" />-->
|
||||
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyA-t0jLPjUt2FxrA8VPK2EiYHcYcboIR6k" />
|
||||
<!--debug-->
|
||||
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCTNmNqbWovP9ETcAob98YlrfOQEAC0CJ4" />
|
||||
<!--<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCTNmNqbWovP9ETcAob98YlrfOQEAC0CJ4" />-->
|
||||
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
|
||||
|
||||
<activity
|
||||
|
|
|
@ -501,16 +501,16 @@ public class ContactsController {
|
|||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// if (ConnectionsManager.DEBUG_VERSION) {
|
||||
// FileLog.e("tmessages", "need delete contacts");
|
||||
// for (HashMap.Entry<Integer, Contact> c : contactHashMap.entrySet()) {
|
||||
// Contact contact = c.getValue();
|
||||
// FileLog.e("tmessages", "delete contact " + contact.first_name + " " + contact.last_name);
|
||||
// for (String phone : contact.phones) {
|
||||
// FileLog.e("tmessages", phone);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
FileLog.e("tmessages", "need delete contacts");
|
||||
for (HashMap.Entry<Integer, Contact> c : contactHashMap.entrySet()) {
|
||||
Contact contact = c.getValue();
|
||||
FileLog.e("tmessages", "delete contact " + contact.first_name + " " + contact.last_name);
|
||||
for (String phone : contact.phones) {
|
||||
FileLog.e("tmessages", phone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final ArrayList<TLRPC.User> toDelete = new ArrayList<TLRPC.User>();
|
||||
if (contactHashMap != null && !contactHashMap.isEmpty()) {
|
||||
|
@ -577,12 +577,12 @@ public class ContactsController {
|
|||
|
||||
if (request) {
|
||||
if (!toImport.isEmpty()) {
|
||||
// if (ConnectionsManager.DEBUG_VERSION) {
|
||||
// FileLog.e("tmessages", "start import contacts");
|
||||
// for (TLRPC.TL_inputPhoneContact contact : toImport) {
|
||||
// FileLog.e("tmessages", "add contact " + contact.first_name + " " + contact.last_name + " " + contact.phone);
|
||||
// }
|
||||
// }
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
FileLog.e("tmessages", "start import contacts");
|
||||
for (TLRPC.TL_inputPhoneContact contact : toImport) {
|
||||
FileLog.e("tmessages", "add contact " + contact.first_name + " " + contact.last_name + " " + contact.phone);
|
||||
}
|
||||
}
|
||||
final int count = (int)Math.ceil(toImport.size() / 500.0f);
|
||||
for (int a = 0; a < count; a++) {
|
||||
ArrayList<TLRPC.TL_inputPhoneContact> finalToImport = new ArrayList<TLRPC.TL_inputPhoneContact>();
|
||||
|
@ -600,6 +600,11 @@ public class ContactsController {
|
|||
MessagesStorage.Instance.putCachedPhoneBook(contactsMap);
|
||||
}
|
||||
TLRPC.TL_contacts_importedContacts res = (TLRPC.TL_contacts_importedContacts)response;
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
for (TLRPC.User user : res.users) {
|
||||
FileLog.e("tmessages", "received user " + user.first_name + " " + user.last_name + " " + user.phone);
|
||||
}
|
||||
}
|
||||
MessagesStorage.Instance.putUsersAndChats(res.users, null, true, true);
|
||||
ArrayList<TLRPC.TL_contact> cArr = new ArrayList<TLRPC.TL_contact>();
|
||||
for (TLRPC.TL_importedContact c : res.imported) {
|
||||
|
@ -740,6 +745,8 @@ public class ContactsController {
|
|||
}
|
||||
}
|
||||
|
||||
final HashMap<Integer, TLRPC.User> usersDict = new HashMap<Integer, TLRPC.User>();
|
||||
|
||||
if (!contacts.isEmpty()) {
|
||||
for (int a = 0; a < contactsArr.size(); a++) {
|
||||
TLRPC.TL_contact contact = contactsArr.get(a);
|
||||
|
@ -751,6 +758,17 @@ public class ContactsController {
|
|||
contactsArr.addAll(contacts);
|
||||
}
|
||||
|
||||
for (TLRPC.TL_contact contact : contactsArr) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(contact.user_id);
|
||||
if (user != null) {
|
||||
usersDict.put(user.id, user);
|
||||
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
FileLog.e("tmessages", "loaded user contact " + user.first_name + " " + user.last_name + " " + user.phone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Utilities.stageQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -760,15 +778,15 @@ public class ContactsController {
|
|||
return;
|
||||
}
|
||||
|
||||
if (from == 1) {
|
||||
for (TLRPC.TL_contact contact : contactsArr) {
|
||||
if (MessagesController.Instance.users.get(contact.user_id) == null && contact.user_id != UserConfig.clientUserId) {
|
||||
loadContacts(false, true);
|
||||
FileLog.e("tmessages", "contacts are broken, load from server");
|
||||
return;
|
||||
}
|
||||
for (TLRPC.TL_contact contact : contactsArr) {
|
||||
if (usersDict.get(contact.user_id) == null && contact.user_id != UserConfig.clientUserId) {
|
||||
loadContacts(false, true);
|
||||
FileLog.e("tmessages", "contacts are broken, load from server");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
if (from != 1) {
|
||||
MessagesStorage.Instance.putUsersAndChats(usersArr, null, true, true);
|
||||
MessagesStorage.Instance.putContacts(contactsArr, from != 2);
|
||||
Collections.sort(contactsArr, new Comparator<TLRPC.TL_contact>() {
|
||||
|
@ -796,8 +814,8 @@ public class ContactsController {
|
|||
Collections.sort(contactsArr, new Comparator<TLRPC.TL_contact>() {
|
||||
@Override
|
||||
public int compare(TLRPC.TL_contact tl_contact, TLRPC.TL_contact tl_contact2) {
|
||||
TLRPC.User user1 = MessagesController.Instance.users.get(tl_contact.user_id);
|
||||
TLRPC.User user2 = MessagesController.Instance.users.get(tl_contact2.user_id);
|
||||
TLRPC.User user1 = usersDict.get(tl_contact.user_id);
|
||||
TLRPC.User user2 = usersDict.get(tl_contact2.user_id);
|
||||
String name1 = user1.first_name;
|
||||
if (name1 == null || name1.length() == 0) {
|
||||
name1 = user1.last_name;
|
||||
|
@ -822,7 +840,7 @@ public class ContactsController {
|
|||
final HashMap<String, TLRPC.TL_contact> contactsByPhonesDictFinal = contactsByPhonesDict;
|
||||
|
||||
for (TLRPC.TL_contact value : contactsArr) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(value.user_id);
|
||||
TLRPC.User user = usersDict.get(value.user_id);
|
||||
if (user == null) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1350,7 +1368,7 @@ public class ContactsController {
|
|||
}
|
||||
|
||||
public void addContact(TLRPC.User user) {
|
||||
if (user == null) {
|
||||
if (user == null || user.phone == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1358,12 +1376,18 @@ public class ContactsController {
|
|||
ArrayList<TLRPC.TL_inputPhoneContact> contactsParams = new ArrayList<TLRPC.TL_inputPhoneContact>();
|
||||
TLRPC.TL_inputPhoneContact c = new TLRPC.TL_inputPhoneContact();
|
||||
c.phone = user.phone;
|
||||
if (!c.phone.startsWith("+")) {
|
||||
c.phone = "+" + c.phone;
|
||||
}
|
||||
c.first_name = user.first_name;
|
||||
c.last_name = user.last_name;
|
||||
c.client_id = 0;
|
||||
contactsParams.add(c);
|
||||
req.contacts = contactsParams;
|
||||
req.replace = false;
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
FileLog.e("tmessages", "add contact " + user.first_name + " " + user.last_name + " " + user.phone);
|
||||
}
|
||||
ConnectionsManager.Instance.performRpc(req, new RPCRequest.RPCRequestDelegate() {
|
||||
@Override
|
||||
public void run(TLObject response, TLRPC.TL_error error) {
|
||||
|
@ -1373,6 +1397,12 @@ public class ContactsController {
|
|||
final TLRPC.TL_contacts_importedContacts res = (TLRPC.TL_contacts_importedContacts)response;
|
||||
MessagesStorage.Instance.putUsersAndChats(res.users, null, true, true);
|
||||
|
||||
if (ConnectionsManager.DEBUG_VERSION) {
|
||||
for (TLRPC.User user : res.users) {
|
||||
FileLog.e("tmessages", "received user " + user.first_name + " " + user.last_name + " " + user.phone);
|
||||
}
|
||||
}
|
||||
|
||||
for (final TLRPC.User u : res.users) {
|
||||
Utilities.globalQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
|
|
|
@ -17,15 +17,34 @@ import android.os.PowerManager;
|
|||
public class GcmBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
public static final int NOTIFICATION_ID = 1;
|
||||
private static PowerManager.WakeLock wakeLock = null;
|
||||
private static final Integer sync = 1;
|
||||
|
||||
@Override
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
FileLog.d("tmessages", "GCM received intent: " + intent);
|
||||
|
||||
if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
|
||||
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
||||
final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lock");
|
||||
wl.acquire();
|
||||
synchronized (sync) {
|
||||
try {
|
||||
if (wakeLock == null) {
|
||||
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
||||
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lock");
|
||||
}
|
||||
if (!wakeLock.isHeld()) {
|
||||
wakeLock.acquire(5000);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
if (wakeLock != null) {
|
||||
wakeLock.release();
|
||||
}
|
||||
} catch (Exception e2) {
|
||||
FileLog.e("tmessages", e2);
|
||||
}
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
}
|
||||
|
||||
// SharedPreferences preferences = context.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
|
||||
// boolean globalEnabled = preferences.getBoolean("EnableAll", true);
|
||||
|
@ -34,14 +53,7 @@ public class GcmBroadcastReceiver extends BroadcastReceiver {
|
|||
// return;
|
||||
// }
|
||||
|
||||
Thread thread = new Thread(new Runnable() {
|
||||
public void run() {
|
||||
ConnectionsManager.Instance.resumeNetworkMaybe();
|
||||
wl.release();
|
||||
}
|
||||
});
|
||||
thread.setPriority(Thread.MAX_PRIORITY);
|
||||
thread.start();
|
||||
ConnectionsManager.Instance.resumeNetworkMaybe();
|
||||
} else if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
|
||||
String registration = intent.getStringExtra("registration_id");
|
||||
if (intent.getStringExtra("error") != null) {
|
||||
|
|
|
@ -65,37 +65,39 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
|
|||
NotificationCenter.Instance.addObserver(this, FileLoader.FileDidLoaded);
|
||||
NotificationCenter.Instance.addObserver(this, FileLoader.FileLoadProgressChanged);
|
||||
|
||||
Timer progressTimer = new Timer();
|
||||
progressTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
synchronized (sync) {
|
||||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (playingMessageObject != null && audioPlayer != null && !isPaused) {
|
||||
try {
|
||||
int progress = audioPlayer.getCurrentPosition();
|
||||
if (progress <= lastProgress) {
|
||||
return;
|
||||
if (ConnectionsManager.enableAudio) {
|
||||
Timer progressTimer = new Timer();
|
||||
progressTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
synchronized (sync) {
|
||||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (playingMessageObject != null && audioPlayer != null && !isPaused) {
|
||||
try {
|
||||
int progress = audioPlayer.getCurrentPosition();
|
||||
if (progress <= lastProgress) {
|
||||
return;
|
||||
}
|
||||
lastProgress = progress;
|
||||
final float value = (float)lastProgress / (float)audioPlayer.getDuration();
|
||||
playingMessageObject.audioProgress = value;
|
||||
playingMessageObject.audioProgressSec = lastProgress / 1000;
|
||||
NotificationCenter.Instance.postNotificationName(audioProgressDidChanged, playingMessageObject.messageOwner.id, value);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
lastProgress = progress;
|
||||
final float value = (float)lastProgress / (float)audioPlayer.getDuration();
|
||||
playingMessageObject.audioProgress = value;
|
||||
playingMessageObject.audioProgressSec = lastProgress / 1000;
|
||||
NotificationCenter.Instance.postNotificationName(audioProgressDidChanged, playingMessageObject.messageOwner.id, value);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
if (audioRecorder != null) {
|
||||
NotificationCenter.Instance.postNotificationName(recordProgressChanged, System.currentTimeMillis() - recordStartTime);
|
||||
}
|
||||
}
|
||||
if (audioRecorder != null) {
|
||||
NotificationCenter.Instance.postNotificationName(recordProgressChanged, System.currentTimeMillis() - recordStartTime);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 100, 17);
|
||||
}, 100, 17);
|
||||
}
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
|
|
|
@ -16,6 +16,7 @@ import android.text.StaticLayout;
|
|||
import android.text.TextPaint;
|
||||
import android.text.util.Linkify;
|
||||
|
||||
import org.telegram.messenger.ConnectionsManager;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.TLObject;
|
||||
import org.telegram.messenger.TLRPC;
|
||||
|
@ -26,6 +27,7 @@ import org.telegram.messenger.UserConfig;
|
|||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.ui.ApplicationLoader;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
@ -298,9 +300,17 @@ public class MessageObject {
|
|||
}
|
||||
} else if (message.media != null && message.media instanceof TLRPC.TL_messageMediaAudio) {
|
||||
if (message.from_id == UserConfig.clientUserId) {
|
||||
type = 18;
|
||||
if (ConnectionsManager.enableAudio) {
|
||||
type = 18;
|
||||
} else {
|
||||
type = 0;
|
||||
}
|
||||
} else {
|
||||
type = 19;
|
||||
if (ConnectionsManager.enableAudio) {
|
||||
type = 19;
|
||||
} else {
|
||||
type = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (message instanceof TLRPC.TL_messageService) {
|
||||
|
@ -369,7 +379,7 @@ public class MessageObject {
|
|||
}
|
||||
|
||||
private void generateLayout() {
|
||||
if (type != 0 && type != 1 && type != 8 && type != 9 || messageOwner.to_id == null || messageText == null || messageText.length() == 0 || !(messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) && !(messageOwner.media instanceof TLRPC.TL_messageMediaUnsupported) && !(messageOwner.media == null)) {
|
||||
if (type != 0 && type != 1 && type != 8 && type != 9 || messageOwner.to_id == null || messageText == null || messageText.length() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -392,7 +402,15 @@ public class MessageObject {
|
|||
maxWidth = Math.min(Utilities.displaySize.x, Utilities.displaySize.y) - Utilities.dp(80);
|
||||
}
|
||||
|
||||
StaticLayout textLayout = new StaticLayout(messageText, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
StaticLayout textLayout = null;
|
||||
|
||||
try {
|
||||
textLayout = new StaticLayout(messageText, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
return;
|
||||
}
|
||||
|
||||
textHeight = textLayout.getHeight();
|
||||
int linesCount = textLayout.getLineCount();
|
||||
|
||||
|
@ -416,18 +434,35 @@ public class MessageObject {
|
|||
continue;
|
||||
}
|
||||
block.charactersOffset = startCharacter;
|
||||
CharSequence str = messageText.subSequence(startCharacter, endCharacter);
|
||||
block.textLayout = new StaticLayout(str, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
block.textYOffset = textLayout.getLineTop(linesOffset);
|
||||
if (a != blocksCount - 1) {
|
||||
blockHeight = Math.min(blockHeight, block.textLayout.getHeight());
|
||||
try {
|
||||
CharSequence str = messageText.subSequence(startCharacter, endCharacter);
|
||||
block.textLayout = new StaticLayout(str, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
block.textYOffset = textLayout.getLineTop(linesOffset);
|
||||
if (a != blocksCount - 1) {
|
||||
blockHeight = Math.min(blockHeight, block.textLayout.getHeight());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
textLayoutBlocks.add(block);
|
||||
|
||||
float lastLeft = block.textXOffset = block.textLayout.getLineLeft(currentBlockLinesCount - 1);
|
||||
float lastLine = block.textLayout.getLineWidth(currentBlockLinesCount - 1);
|
||||
float lastLeft = block.textXOffset = 0;
|
||||
try {
|
||||
lastLeft = block.textXOffset = block.textLayout.getLineLeft(currentBlockLinesCount - 1);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
|
||||
float lastLine = 0;
|
||||
try {
|
||||
lastLine = block.textLayout.getLineWidth(currentBlockLinesCount - 1);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
|
||||
int linesMaxWidth;
|
||||
int lastLineWidthWithLeft;
|
||||
int linesMaxWidthWithLeft;
|
||||
|
@ -449,13 +484,20 @@ public class MessageObject {
|
|||
for (int n = 0; n < currentBlockLinesCount; ++n) {
|
||||
try {
|
||||
lineWidth = block.textLayout.getLineWidth(n);
|
||||
lineLeft = block.textLayout.getLineLeft(n);
|
||||
block.textXOffset = Math.min(block.textXOffset, lineLeft);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
return;
|
||||
lineWidth = 0;
|
||||
}
|
||||
|
||||
try {
|
||||
lineLeft = block.textLayout.getLineLeft(n);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
lineLeft = 0;
|
||||
}
|
||||
|
||||
block.textXOffset = Math.min(block.textXOffset, lineLeft);
|
||||
|
||||
if (lineLeft == 0) {
|
||||
hasNonRTL = true;
|
||||
}
|
||||
|
|
|
@ -67,30 +67,37 @@ public class ContactsActivitySearchAdapter extends BaseFragmentAdapter {
|
|||
}
|
||||
|
||||
private void processSearch(final String query) {
|
||||
Utilities.globalQueue.postRunnable(new Runnable() {
|
||||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
String q = query.trim().toLowerCase();
|
||||
if (q.length() == 0) {
|
||||
updateSearchResults(new ArrayList<TLRPC.User>(), new ArrayList<CharSequence>());
|
||||
return;
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
ArrayList<TLRPC.User> resultArray = new ArrayList<TLRPC.User>();
|
||||
ArrayList<CharSequence> resultArrayNames = new ArrayList<CharSequence>();
|
||||
|
||||
for (TLRPC.TL_contact contact : ContactsController.Instance.contacts) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(contact.user_id);
|
||||
if (user.first_name != null && user.first_name.toLowerCase().startsWith(q) || user.last_name != null && user.last_name.toLowerCase().startsWith(q)) {
|
||||
if (user.id == UserConfig.clientUserId) {
|
||||
continue;
|
||||
final ArrayList<TLRPC.TL_contact> contactsCopy = new ArrayList<TLRPC.TL_contact>();
|
||||
contactsCopy.addAll(ContactsController.Instance.contacts);
|
||||
Utilities.globalQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
String q = query.trim().toLowerCase();
|
||||
if (q.length() == 0) {
|
||||
updateSearchResults(new ArrayList<TLRPC.User>(), new ArrayList<CharSequence>());
|
||||
return;
|
||||
}
|
||||
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
|
||||
resultArray.add(user);
|
||||
}
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
ArrayList<TLRPC.User> resultArray = new ArrayList<TLRPC.User>();
|
||||
ArrayList<CharSequence> resultArrayNames = new ArrayList<CharSequence>();
|
||||
|
||||
updateSearchResults(resultArray, resultArrayNames);
|
||||
for (TLRPC.TL_contact contact : contactsCopy) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(contact.user_id);
|
||||
if (user.first_name != null && user.first_name.toLowerCase().startsWith(q) || user.last_name != null && user.last_name.toLowerCase().startsWith(q)) {
|
||||
if (user.id == UserConfig.clientUserId) {
|
||||
continue;
|
||||
}
|
||||
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
|
||||
resultArray.add(user);
|
||||
}
|
||||
}
|
||||
|
||||
updateSearchResults(resultArray, resultArrayNames);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.graphics.drawable.Drawable;
|
|||
import android.view.View;
|
||||
|
||||
public class BaseCell extends View {
|
||||
|
||||
public BaseCell(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import android.text.Spannable;
|
|||
import android.text.style.ClickableSpan;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.objects.MessageObject;
|
||||
|
||||
|
@ -34,7 +35,7 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (currentMessageObject != null && currentMessageObject.messageText instanceof Spannable && !isPressed) {
|
||||
if (currentMessageObject != null && currentMessageObject.textLayoutBlocks != null && !currentMessageObject.textLayoutBlocks.isEmpty() && currentMessageObject.messageText instanceof Spannable && !isPressed) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN || pressedLink != null && event.getAction() == MotionEvent.ACTION_UP) {
|
||||
int x = (int)event.getX();
|
||||
int y = (int)event.getY();
|
||||
|
@ -59,7 +60,11 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
return true;
|
||||
} else {
|
||||
if (link[0] == pressedLink) {
|
||||
pressedLink.onClick(this);
|
||||
try {
|
||||
pressedLink.onClick(this);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +88,9 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
}
|
||||
|
||||
public void setVisiblePart(int position, int height) {
|
||||
if (currentMessageObject == null || currentMessageObject.textLayoutBlocks == null) {
|
||||
return;
|
||||
}
|
||||
int newFirst = -1, newLast = -1, newCount = 0;
|
||||
|
||||
for (int a = Math.max(0, (position - textY) / currentMessageObject.blockHeight); a < currentMessageObject.textLayoutBlocks.size(); a++) {
|
||||
|
@ -117,6 +125,10 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
@Override
|
||||
public void setMessageObject(MessageObject messageObject) {
|
||||
if (currentMessageObject != messageObject || isUserDataChanged()) {
|
||||
if (currentMessageObject != messageObject) {
|
||||
firstVisibleBlockNum = 0;
|
||||
lastVisibleBlockNum = 0;
|
||||
}
|
||||
pressedLink = null;
|
||||
int maxWidth;
|
||||
if (chat) {
|
||||
|
@ -160,6 +172,19 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), totalHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||
super.onLayout(changed, left, top, right, bottom);
|
||||
|
||||
if (currentMessageObject.messageOwner.out) {
|
||||
textX = layoutWidth - backgroundWidth + Utilities.dp(10);
|
||||
textY = Utilities.dp(10) + namesOffset;
|
||||
} else {
|
||||
textX = Utilities.dp(19) + (chat ? Utilities.dp(52) : 0);
|
||||
textY = Utilities.dp(10) + namesOffset;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
|
@ -176,10 +201,17 @@ public class ChatMessageCell extends ChatBaseCell {
|
|||
}
|
||||
|
||||
for (int a = firstVisibleBlockNum; a <= lastVisibleBlockNum; a++) {
|
||||
if (a >= currentMessageObject.textLayoutBlocks.size()) {
|
||||
break;
|
||||
}
|
||||
MessageObject.TextLayoutBlock block = currentMessageObject.textLayoutBlocks.get(a);
|
||||
canvas.save();
|
||||
canvas.translate(textX - (int)Math.ceil(block.textXOffset), textY + block.textYOffset);
|
||||
block.textLayout.draw(canvas);
|
||||
try {
|
||||
block.textLayout.draw(canvas);
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
canvas.restore();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ import android.widget.TextView;
|
|||
|
||||
import org.telegram.PhoneFormat.PhoneFormat;
|
||||
import org.telegram.messenger.MediaController;
|
||||
import org.telegram.messenger.MessagesStorage;
|
||||
import org.telegram.messenger.TLRPC;
|
||||
import org.telegram.messenger.ContactsController;
|
||||
import org.telegram.messenger.FileLog;
|
||||
|
@ -91,6 +92,7 @@ import org.telegram.ui.Views.LayoutListView;
|
|||
import org.telegram.ui.Views.MessageActionLayout;
|
||||
import org.telegram.ui.Views.OnSwipeTouchListener;
|
||||
import org.telegram.ui.Views.SizeNotifierRelativeLayout;
|
||||
import org.telegram.ui.Views.TimerButton;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
@ -128,6 +130,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
private MessageObject selectedObject;
|
||||
private MessageObject forwaringMessage;
|
||||
private TextView secretViewStatusTextView;
|
||||
private TimerButton timerButton;
|
||||
private Point displaySize = new Point();
|
||||
private boolean paused = true;
|
||||
private boolean readWhenResume = false;
|
||||
|
@ -777,14 +780,17 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
}
|
||||
|
||||
private void checkSendButton() {
|
||||
// sendButton.setVisibility(View.VISIBLE);
|
||||
// audioSendButton.setVisibility(View.INVISIBLE);
|
||||
if (messsageEditText.length() > 0) {
|
||||
if (ConnectionsManager.enableAudio) {
|
||||
if (messsageEditText.length() > 0) {
|
||||
sendButton.setVisibility(View.VISIBLE);
|
||||
audioSendButton.setVisibility(View.INVISIBLE);
|
||||
} else {
|
||||
sendButton.setVisibility(View.INVISIBLE);
|
||||
audioSendButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
sendButton.setVisibility(View.VISIBLE);
|
||||
audioSendButton.setVisibility(View.INVISIBLE);
|
||||
} else {
|
||||
sendButton.setVisibility(View.INVISIBLE);
|
||||
audioSendButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1172,6 +1178,9 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
parentActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect);
|
||||
|
||||
WindowManager manager = (WindowManager) ApplicationLoader.applicationContext.getSystemService(Activity.WINDOW_SERVICE);
|
||||
if (manager == null || manager.getDefaultDisplay() == null) {
|
||||
return;
|
||||
}
|
||||
int rotation = manager.getDefaultDisplay().getRotation();
|
||||
|
||||
if (height > Emoji.scale(50)) {
|
||||
|
@ -1638,6 +1647,9 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
boolean currentMarkAsRead = false;
|
||||
|
||||
for (MessageObject obj : arr) {
|
||||
if (currentEncryptedChat != null && obj.messageOwner.action != null && obj.messageOwner.action instanceof TLRPC.TL_messageActionTTLChange && timerButton != null) {
|
||||
timerButton.setTime(obj.messageOwner.action.ttl);
|
||||
}
|
||||
if (messagesDict.containsKey(obj.messageOwner.id)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1673,6 +1685,9 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
boolean markAsRead = false;
|
||||
int oldCount = messages.size();
|
||||
for (MessageObject obj : arr) {
|
||||
if (currentEncryptedChat != null && obj.messageOwner.action != null && obj.messageOwner.action instanceof TLRPC.TL_messageActionTTLChange && timerButton != null) {
|
||||
timerButton.setTime(obj.messageOwner.action.ttl);
|
||||
}
|
||||
if (messagesDict.containsKey(obj.messageOwner.id)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -2356,10 +2371,69 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
|
|||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
menu.clear();
|
||||
inflater.inflate(R.menu.chat_menu, menu);
|
||||
if (currentEncryptedChat != null) {
|
||||
inflater.inflate(R.menu.chat_enc_menu, menu);
|
||||
} else {
|
||||
inflater.inflate(R.menu.chat_menu, menu);
|
||||
}
|
||||
SupportMenuItem timeItem = (SupportMenuItem)menu.findItem(R.id.chat_enc_timer);
|
||||
if (currentEncryptedChat != null && !(currentEncryptedChat instanceof TLRPC.TL_encryptedChat) || currentChat != null && (currentChat instanceof TLRPC.TL_chatForbidden || currentChat.left)) {
|
||||
SupportMenuItem item = (SupportMenuItem)menu.findItem(R.id.chat_menu_attach);
|
||||
item.setVisible(false);
|
||||
if (item != null) {
|
||||
item.setVisible(false);
|
||||
}
|
||||
|
||||
if (timeItem != null) {
|
||||
timeItem.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (timeItem != null && timeItem.getActionView() != null) {
|
||||
timerButton = (TimerButton)timeItem.getActionView().findViewById(R.id.chat_timer);
|
||||
timerButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity);
|
||||
builder.setTitle(getStringEntry(R.string.MessageLifetime));
|
||||
builder.setItems(new CharSequence[]{
|
||||
getStringEntry(R.string.ShortMessageLifetimeForever),
|
||||
getStringEntry(R.string.ShortMessageLifetime2s),
|
||||
getStringEntry(R.string.ShortMessageLifetime5s),
|
||||
getStringEntry(R.string.ShortMessageLifetime1m),
|
||||
getStringEntry(R.string.ShortMessageLifetime1h),
|
||||
getStringEntry(R.string.ShortMessageLifetime1d),
|
||||
getStringEntry(R.string.ShortMessageLifetime1w)
|
||||
|
||||
}, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
int oldValue = currentEncryptedChat.ttl;
|
||||
if (which == 0) {
|
||||
currentEncryptedChat.ttl = 0;
|
||||
} else if (which == 1) {
|
||||
currentEncryptedChat.ttl = 2;
|
||||
} else if (which == 2) {
|
||||
currentEncryptedChat.ttl = 5;
|
||||
} else if (which == 3) {
|
||||
currentEncryptedChat.ttl = 60;
|
||||
} else if (which == 4) {
|
||||
currentEncryptedChat.ttl = 60 * 60;
|
||||
} else if (which == 5) {
|
||||
currentEncryptedChat.ttl = 60 * 60 * 24;
|
||||
} else if (which == 6) {
|
||||
currentEncryptedChat.ttl = 60 * 60 * 24 * 7;
|
||||
}
|
||||
if (oldValue != currentEncryptedChat.ttl) {
|
||||
MessagesController.Instance.sendTTLMessage(currentEncryptedChat);
|
||||
MessagesStorage.Instance.updateEncryptedChat(currentEncryptedChat);
|
||||
}
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(getStringEntry(R.string.Cancel), null);
|
||||
builder.show().setCanceledOnTouchOutside(true);
|
||||
}
|
||||
});
|
||||
timerButton.setTime(currentEncryptedChat.ttl);
|
||||
}
|
||||
|
||||
SupportMenuItem avatarItem = (SupportMenuItem)menu.findItem(R.id.chat_menu_avatar);
|
||||
|
|
|
@ -691,6 +691,9 @@ public class GalleryImageViewer extends AbstractGalleryActivity implements Notif
|
|||
break;
|
||||
case R.id.gallery_menu_save:
|
||||
TLRPC.FileLocation file = getCurrentFile();
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
File f = new File(Utilities.getCacheDir(), file.volume_id + "_" + file.local_id + ".jpg");
|
||||
File dstFile = Utilities.generatePicturePath();
|
||||
try {
|
||||
|
@ -710,7 +713,7 @@ public class GalleryImageViewer extends AbstractGalleryActivity implements Notif
|
|||
if (fromAll) {
|
||||
finish();
|
||||
} else {
|
||||
if (!localPagerAdapter.imagesArr.isEmpty() && currentDialog != 0) {
|
||||
if (localPagerAdapter != null && localPagerAdapter.imagesArr != null && !localPagerAdapter.imagesArr.isEmpty() && currentDialog != 0) {
|
||||
finish();
|
||||
NotificationCenter.Instance.postNotificationName(needShowAllMedia, currentDialog);
|
||||
}
|
||||
|
|
|
@ -361,30 +361,37 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
|
|||
}
|
||||
|
||||
private void processSearch(final String query) {
|
||||
Utilities.globalQueue.postRunnable(new Runnable() {
|
||||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (query.length() == 0) {
|
||||
updateSearchResults(new ArrayList<TLRPC.User>(), new ArrayList<CharSequence>());
|
||||
return;
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
ArrayList<TLRPC.User> resultArray = new ArrayList<TLRPC.User>();
|
||||
ArrayList<CharSequence> resultArrayNames = new ArrayList<CharSequence>();
|
||||
String q = query.toLowerCase();
|
||||
|
||||
for (TLRPC.TL_contact contact : ContactsController.Instance.contacts) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(contact.user_id);
|
||||
if (user.first_name.toLowerCase().startsWith(q) || user.last_name.toLowerCase().startsWith(q)) {
|
||||
if (user.id == UserConfig.clientUserId) {
|
||||
continue;
|
||||
final ArrayList<TLRPC.TL_contact> contactsCopy = new ArrayList<TLRPC.TL_contact>();
|
||||
contactsCopy.addAll(ContactsController.Instance.contacts);
|
||||
Utilities.globalQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (query.length() == 0) {
|
||||
updateSearchResults(new ArrayList<TLRPC.User>(), new ArrayList<CharSequence>());
|
||||
return;
|
||||
}
|
||||
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
|
||||
resultArray.add(user);
|
||||
}
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
ArrayList<TLRPC.User> resultArray = new ArrayList<TLRPC.User>();
|
||||
ArrayList<CharSequence> resultArrayNames = new ArrayList<CharSequence>();
|
||||
String q = query.toLowerCase();
|
||||
|
||||
updateSearchResults(resultArray, resultArrayNames);
|
||||
for (TLRPC.TL_contact contact : contactsCopy) {
|
||||
TLRPC.User user = MessagesController.Instance.users.get(contact.user_id);
|
||||
if (user.first_name.toLowerCase().startsWith(q) || user.last_name.toLowerCase().startsWith(q)) {
|
||||
if (user.id == UserConfig.clientUserId) {
|
||||
continue;
|
||||
}
|
||||
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
|
||||
resultArray.add(user);
|
||||
}
|
||||
}
|
||||
|
||||
updateSearchResults(resultArray, resultArrayNames);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
ApplicationLoader.fragmentsStack.add(fragment);
|
||||
}
|
||||
|
||||
handleIntent(getIntent(), false);
|
||||
handleIntent(getIntent(), false, savedInstanceState != null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -164,7 +164,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
getSupportActionBar().hide();
|
||||
}
|
||||
|
||||
private void handleIntent(Intent intent, boolean isNew) {
|
||||
private void handleIntent(Intent intent, boolean isNew, boolean restore) {
|
||||
boolean pushOpened = false;
|
||||
|
||||
Integer push_user_id = 0;
|
||||
|
@ -179,7 +179,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
imagesPathArray = null;
|
||||
documentsPathArray = null;
|
||||
|
||||
if (intent != null && intent.getAction() != null) {
|
||||
if (intent != null && intent.getAction() != null && !restore) {
|
||||
if (Intent.ACTION_SEND.equals(intent.getAction())) {
|
||||
boolean error = false;
|
||||
String type = intent.getType();
|
||||
|
@ -282,7 +282,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
}
|
||||
}
|
||||
|
||||
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
|
||||
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0 && !restore) {
|
||||
int chatId = getIntent().getIntExtra("chatId", 0);
|
||||
int userId = getIntent().getIntExtra("userId", 0);
|
||||
int encId = getIntent().getIntExtra("encId", 0);
|
||||
|
@ -373,7 +373,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
handleIntent(intent, true);
|
||||
handleIntent(intent, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -750,8 +750,12 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
|||
fTrans.setCustomAnimations(R.anim.scale_in, R.anim.no_anim);
|
||||
}
|
||||
}
|
||||
fTrans.replace(R.id.container, fragment, tag);
|
||||
fTrans.commitAllowingStateLoss();
|
||||
try {
|
||||
fTrans.replace(R.id.container, fragment, tag);
|
||||
fTrans.commitAllowingStateLoss();
|
||||
} catch (Exception e) {
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
ApplicationLoader.fragmentsStack.add(fragment);
|
||||
}
|
||||
|
||||
|
|
|
@ -141,6 +141,9 @@ public class LoginActivity extends ActionBarActivity implements SlideView.SlideV
|
|||
|
||||
@Override
|
||||
public void needShowAlert(String text) {
|
||||
if (text == null) {
|
||||
return;
|
||||
}
|
||||
ShowAlertDialog(LoginActivity.this, text);
|
||||
}
|
||||
|
||||
|
|
|
@ -264,6 +264,7 @@ public class LoginActivityPhoneView extends SlideView implements AdapterView.OnI
|
|||
ignoreOnTextChange = true;
|
||||
codeField.setText(countriesMap.get(name));
|
||||
countryButton.setText(name);
|
||||
countryState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -270,6 +270,9 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
|||
Utilities.RunOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (parentActivity == null) {
|
||||
return;
|
||||
}
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putInt("support_id", res.user.id);
|
||||
SerializedData data = new SerializedData();
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* This is the source code of Telegram for Android v. 1.3.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.ui.Views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.Layout;
|
||||
import android.text.StaticLayout;
|
||||
import android.text.TextPaint;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.Utilities;
|
||||
|
||||
public class TimerButton extends View {
|
||||
|
||||
private static Drawable emptyTimerDrawable;
|
||||
private static Drawable timerDrawable;
|
||||
private static TextPaint timePaint;
|
||||
private StaticLayout timeLayout;
|
||||
private float timeWidth = 0;
|
||||
private int timeHeight = 0;
|
||||
private int time = 0;
|
||||
|
||||
private void init() {
|
||||
if (emptyTimerDrawable == null) {
|
||||
emptyTimerDrawable = getResources().getDrawable(R.drawable.header_timer);
|
||||
timerDrawable = getResources().getDrawable(R.drawable.header_timer2);
|
||||
timePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
|
||||
timePaint.setTextSize(Utilities.dp(10));
|
||||
timePaint.setColor(0xffd7e8f7);
|
||||
timePaint.setTypeface(Typeface.DEFAULT_BOLD);
|
||||
}
|
||||
|
||||
setBackgroundResource(R.drawable.bar_selector);
|
||||
}
|
||||
|
||||
public TimerButton(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public TimerButton(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public TimerButton(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
public void setTime(int value) {
|
||||
time = value;
|
||||
|
||||
String timeString = null;
|
||||
if (time == 2) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime2s);
|
||||
} else if (time == 5) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime5s);
|
||||
} else if (time == 60) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime1m);
|
||||
} else if (time == 60 * 60) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime1h);
|
||||
} else if (time == 60 * 60 * 24) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime1d);
|
||||
} else if (time == 60 * 60 * 24 * 7) {
|
||||
timeString = getResources().getString(R.string.ShortMessageLifetime1w);
|
||||
} else {
|
||||
timeString = "c";
|
||||
}
|
||||
|
||||
timeWidth = timePaint.measureText(timeString);
|
||||
try {
|
||||
timeLayout = new StaticLayout(timeString, timePaint, (int)Math.ceil(timeWidth), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
timeHeight = timeLayout.getHeight();
|
||||
} catch (Exception e) {
|
||||
timeLayout = null;
|
||||
FileLog.e("tmessages", e);
|
||||
}
|
||||
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
int width = getMeasuredWidth();
|
||||
int height = getMeasuredHeight();
|
||||
Drawable drawable = null;
|
||||
if (time == 0) {
|
||||
drawable = timerDrawable;
|
||||
} else {
|
||||
drawable = emptyTimerDrawable;
|
||||
}
|
||||
|
||||
int x = (width - drawable.getIntrinsicWidth()) / 2;
|
||||
int y = (height - drawable.getIntrinsicHeight()) / 2;
|
||||
drawable.setBounds(x, y, x + drawable.getIntrinsicWidth(), y + drawable.getIntrinsicHeight());
|
||||
drawable.draw(canvas);
|
||||
|
||||
if (time != 0 && timeLayout != null) {
|
||||
canvas.translate((width - timeWidth) / 2, (height - timeHeight) / 2 + Utilities.dp(1));
|
||||
timeLayout.draw(canvas);
|
||||
}
|
||||
}
|
||||
}
|
BIN
TMessagesProj/src/main/res/drawable-hdpi/header_timer.png
Executable file
After Width: | Height: | Size: 1 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/header_timer2.png
Executable file
After Width: | Height: | Size: 1 KiB |
BIN
TMessagesProj/src/main/res/drawable-ldpi/header_timer.png
Executable file
After Width: | Height: | Size: 542 B |
BIN
TMessagesProj/src/main/res/drawable-ldpi/header_timer2.png
Executable file
After Width: | Height: | Size: 558 B |
BIN
TMessagesProj/src/main/res/drawable-mdpi/header_timer.png
Executable file
After Width: | Height: | Size: 698 B |
BIN
TMessagesProj/src/main/res/drawable-mdpi/header_timer2.png
Executable file
After Width: | Height: | Size: 715 B |
BIN
TMessagesProj/src/main/res/drawable-xhdpi/header_timer.png
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
TMessagesProj/src/main/res/drawable-xhdpi/header_timer2.png
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
TMessagesProj/src/main/res/drawable-xxhdpi/header_timer.png
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
TMessagesProj/src/main/res/drawable-xxhdpi/header_timer2.png
Executable file
After Width: | Height: | Size: 2 KiB |
14
TMessagesProj/src/main/res/layout/chat_header_enc_layout.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true">
|
||||
|
||||
<org.telegram.ui.Views.TimerButton
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_width="48dp"
|
||||
android:id="@+id/chat_timer"/>
|
||||
|
||||
</RelativeLayout>
|
50
TMessagesProj/src/main/res/menu/chat_enc_menu.xml
Normal file
|
@ -0,0 +1,50 @@
|
|||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:sabd="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/chat_enc_timer"
|
||||
sabd:showAsAction="always"
|
||||
sabd:actionLayout="@layout/chat_header_enc_layout"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/chat_menu_attach"
|
||||
android:icon="@drawable/ic_ab_attach"
|
||||
android:title="@string/Attach"
|
||||
sabd:showAsAction="always">
|
||||
|
||||
<menu>
|
||||
<item
|
||||
android:icon="@drawable/ic_attach_photo"
|
||||
android:title="@string/ChatTakePhoto"
|
||||
android:id="@+id/attach_photo"/>
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_attach_gallery"
|
||||
android:title="@string/ChatGallery"
|
||||
android:id="@+id/attach_gallery"/>
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_attach_video"
|
||||
android:title="@string/ChatVideo"
|
||||
android:id="@+id/attach_video"/>
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_ab_doc"
|
||||
android:title="@string/ChatDocument"
|
||||
android:id="@+id/attach_document"/>
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_attach_location"
|
||||
android:title="@string/ChatLocation"
|
||||
android:id="@+id/attach_location"/>
|
||||
</menu>
|
||||
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:id="@+id/chat_menu_avatar"
|
||||
sabd:showAsAction="always"
|
||||
sabd:actionLayout="@layout/chat_header_layout"/>
|
||||
|
||||
</menu>
|
|
@ -240,7 +240,7 @@
|
|||
<string name="Support">SUPPORT</string>
|
||||
<string name="ChatBackground">Chat-Hintergrundbild</string>
|
||||
<string name="MessagesSettings">NACHRICHTEN</string>
|
||||
<string name="SendByEnter">Mit <![CDATA[<b>Enter</b>]]> senden</string>
|
||||
<string name="SendByEnter">Mit Enter senden</string>
|
||||
<string name="TerminateAllSessions">Alle anderen Sitzungen beenden</string>
|
||||
<string name="AutomaticPhotoDownload">AUTOMATISCHER BILDERDOWNLOAD</string>
|
||||
<string name="AutomaticPhotoDownloadGroups">Gruppen</string>
|
||||
|
|
354
TMessagesProj/src/main/res/values-nl/strings.xml
Normal file
|
@ -0,0 +1,354 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--https://www.transifex.com/projects/p/telegram/language/nl/members/-->
|
||||
|
||||
<resources>
|
||||
<string name="AppName">Telegram</string>
|
||||
|
||||
<!--signin view-->
|
||||
<string name="YourPhone">Uw telefoon</string>
|
||||
<string name="StartText">Bevestig uw landcode\nen voer uw telefoonnummer in.</string>
|
||||
<string name="ChooseCountry">Kies een land</string>
|
||||
<string name="WrongCountry">Onjuist landcode</string>
|
||||
|
||||
<!--code enter view-->
|
||||
<string name="YourCode">Uw code</string>
|
||||
<string name="SentSmsCode">We hebben een sms met een activatiecode verzonden naar uw telefoon</string>
|
||||
<string name="CallText">We bellen u over</string>
|
||||
<string name="Calling">We bellen u…</string>
|
||||
<string name="Code">Code</string>
|
||||
<string name="WrongNumber">Verkeerde nummer?</string>
|
||||
|
||||
<!--signup view-->
|
||||
<string name="YourName">Uw naam</string>
|
||||
<string name="RegisterText">Voer uw voor- en achternaam in</string>
|
||||
<!--<string name="RegisterText">Set up your name and picture</string>-->
|
||||
<string name="FirstName">Voornaam (verplicht)</string>
|
||||
<string name="LastName">Achternaam (optioneel)</string>
|
||||
<string name="CancelRegistration">Registratie annuleren</string>
|
||||
|
||||
<!--chats view-->
|
||||
<string name="Chats">Gesprekken</string>
|
||||
<string name="Search">Zoeken</string>
|
||||
<string name="NewMessages">Nieuwe berichten</string>
|
||||
<string name="Settings">Instellingen</string>
|
||||
<string name="Contacts">Contacten</string>
|
||||
<string name="NewGroup">Nieuwe groep</string>
|
||||
<string name="Yesterday">gisteren</string>
|
||||
<string name="NoResult">Geen resultaten</string>
|
||||
<string name="NoChats">Nog geen gesprekken…</string>
|
||||
<string name="NoChatsHelp">Tik op de opstelknop rechtsbovenin\nom een gesprek te beginnen\nof ga naar de contactenlijst.</string>
|
||||
<string name="WaitingForNetwork">Wachten op netwerk…</string>
|
||||
<string name="Connecting">Bezig met verbinden…</string>
|
||||
<string name="Updating">Bezig met bijwerken…</string>
|
||||
<string name="NewSecretChat">Nieuw privégesprek</string>
|
||||
<string name="AwaitingEncryption">Wachten tot %s online komt…</string>
|
||||
<string name="EncryptionRejected">Privégesprek geannuleerd</string>
|
||||
<string name="EncryptionProcessing">Encryptiesleutels uitwisselen…</string>
|
||||
<string name="EncryptedChatStartedOutgoing">%s neemt nu deel aan het privégesprek.</string>
|
||||
<string name="EncryptedChatStartedIncoming">U neemt nu deel aan het privégesprek.</string>
|
||||
<string name="ClearHistory">Geschiedenis wissen</string>
|
||||
<string name="DeleteChat">Verwijderen en verlaten</string>
|
||||
<string name="HiddenName">Verborgen naam</string>
|
||||
<string name="SelectChat">Kies een gesprek</string>
|
||||
|
||||
<!--documents view-->
|
||||
<string name="SelectFile">Kies een bestand</string>
|
||||
<string name="FreeOfTotal">Vrij: %1$s van %2$s</string>
|
||||
<string name="UnknownError">Onbekende fout</string>
|
||||
<string name="AccessError">Toegangsfout</string>
|
||||
<string name="NoFiles">Nog geen bestanden…</string>
|
||||
<string name="FileUploadLimit">Bestanden mogen maximaal %1$s zijn</string>
|
||||
<string name="NotMounted">Geen opslagmedium gevonden</string>
|
||||
<string name="UsbActive">USB-overdracht actief</string>
|
||||
<string name="InternalStorage">Interne opslag</string>
|
||||
<string name="ExternalStorage">Externe opslag</string>
|
||||
<string name="SystemRoot">Systeemmap</string>
|
||||
<string name="SdCard">SD-kaart</string>
|
||||
|
||||
<!--chat view-->
|
||||
<string name="Invisible">onzichtbaar</string>
|
||||
<string name="Typing">aan het typen…</string>
|
||||
<string name="Attach">Bijvoegen</string>
|
||||
<string name="IsTyping">is aan het typen…</string>
|
||||
<string name="AreTyping">zijn aan het typen…</string>
|
||||
<string name="AndMoreTyping">en nog %d personen</string>
|
||||
<string name="GotAQuestion">Hebt u een vraag\nover Telegram?</string>
|
||||
<string name="ChatTakePhoto">Foto maken</string>
|
||||
<string name="ChatGallery">Galerij</string>
|
||||
<string name="ChatLocation">Locatie</string>
|
||||
<string name="ChatVideo">Video</string>
|
||||
<string name="ChatDocument">Document</string>
|
||||
<string name="NoMessages">Nog geen berichten hier…</string>
|
||||
<string name="ViewPhoto">Foto bekijken</string>
|
||||
<string name="ViewLocation">Locatie bekijken</string>
|
||||
<string name="ViewVideo">Video afspelen</string>
|
||||
<string name="ForwardedMessage">Doorgestuurd bericht</string>
|
||||
<string name="From">Van</string>
|
||||
<string name="NoRecent">Niets recents</string>
|
||||
<string name="Members">deelnemers</string>
|
||||
<string name="Message">Bericht</string>
|
||||
<string name="TypeMessage">Typ een bericht</string>
|
||||
<string name="DOWNLOAD">Downloaden</string>
|
||||
<string name="Selected">Geselecteerd:</string>
|
||||
<string name="ShareMyContactInfo">MIJN CONTACTGEGEVENS DELEN</string>
|
||||
<string name="AddToContacts">TOEVOEGEN AAN CONTACTEN</string>
|
||||
<string name="EncryptedPlaceholderTitleIncoming">%s heeft u uitgenodigd voor een privégesprek.</string>
|
||||
<string name="EncryptedPlaceholderTitleOutgoing">U hebt %s uitgenodigd voor een privégesprek.</string>
|
||||
<string name="EncryptedDescriptionTitle">Privégesprekken:</string>
|
||||
<string name="EncryptedDescription1">gebruiken end-to-endversleuteling</string>
|
||||
<string name="EncryptedDescription2">laten geen sporen achter op onze server</string>
|
||||
<string name="EncryptedDescription3">verlopen automatisch</string>
|
||||
<string name="EncryptedDescription4">staan doorsturen niet toe</string>
|
||||
<string name="OneNewMessage">%1$d nieuw bericht</string>
|
||||
<string name="FewNewMessages">%1$d nieuwe berichten</string>
|
||||
<string name="YouWereKicked">U bent verwijderd uit deze groep</string>
|
||||
<string name="YouLeft">U hebt deze groep verlaten</string>
|
||||
<string name="DeleteThisGroup">Deze groep verwijderen</string>
|
||||
<string name="SlideToCancel">SLEEP OM TE ANNULEREN</string>
|
||||
|
||||
<!--notification-->
|
||||
<string name="EncryptedChatRequested">Privégesprek aangevraagd</string>
|
||||
<string name="EncryptedChatAccepted">Privégesprek gestart</string>
|
||||
<string name="MessageLifetimeChanged">%1$s heeft de verlooptijd ingesteld op %2$s</string>
|
||||
<string name="MessageLifetimeChangedOutgoing">U hebt de verlooptijd ingesteld op %1$s</string>
|
||||
<string name="MessageLifetimeRemoved">%1$s heeft de verlooptijd uitgeschakeld</string>
|
||||
<string name="MessageLifetimeYouRemoved">U hebt de verlooptijd uitgeschakeld</string>
|
||||
<string name="MessageLifetime2s">2 seconden</string>
|
||||
<string name="MessageLifetime5s">5 seconden</string>
|
||||
<string name="MessageLifetime1m">1 minuut</string>
|
||||
<string name="MessageLifetime1h">1 uur</string>
|
||||
<string name="MessageLifetime1d">1 dag</string>
|
||||
<string name="MessageLifetime1w">1 week</string>
|
||||
<string name="YouHaveNewMessage">U hebt een nieuw bericht</string>
|
||||
<string name="NotificationMessageText">%1$s: %2$s</string>
|
||||
<string name="NotificationMessageNoText">%1$s heeft u een bericht gestuurd</string>
|
||||
<string name="NotificationMessagePhoto">%1$s heeft u een foto gestuurd</string>
|
||||
<string name="NotificationMessageVideo">%1$s heeft u een video gestuurd</string>
|
||||
<string name="NotificationMessageContact">%1$s heeft een contact met u gedeeld</string>
|
||||
<string name="NotificationMessageMap">%1$s heeft u een locatie gestuurd</string>
|
||||
<string name="NotificationMessageDocument">%1$s heeft u een document gestuurd</string>
|
||||
<string name="NotificationMessageAudio">%1$s heeft u een geluidsbestand gestuurd</string>
|
||||
<string name="NotificationMessageGroupText">%1$s @ %2$s: %3$s</string>
|
||||
<string name="NotificationMessageGroupNoText">%1$s heeft een bericht gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupPhoto">%1$s heeft een foto gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupVideo">%1$s heeft een video gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupContact">%1$s heeft een contact gedeeld met de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupMap">%1$s heeft een locatie gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupDocument">%1$s heeft een document gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationMessageGroupAudio">%1$s heeft een geluidsbestand gestuurd naar de groep %2$s</string>
|
||||
<string name="NotificationInvitedToGroup">%1$s heeft u uitgenodigd voor de groep %2$s</string>
|
||||
<string name="NotificationEditedGroupName">%1$s heeft de naam van de groep %2$s gewijzigd</string>
|
||||
<string name="NotificationEditedGroupPhoto">%1$s heeft de afbeelding van de groep %2$s gewijzigd</string>
|
||||
<string name="NotificationGroupAddMember">%1$s heeft %3$s uitgenodigd voor de groep %2$s</string>
|
||||
<string name="NotificationGroupKickMember">%1$s heeft %3$s verwijderd uit de groep %2$s</string>
|
||||
<string name="NotificationGroupKickYou">%1$s heeft u verwijderd uit de groep %2$s</string>
|
||||
<string name="NotificationGroupLeftMember">%1$s heeft de groep %2$s verlaten</string>
|
||||
<string name="NotificationContactJoined">%1$s heeft nu Telegram!</string>
|
||||
<string name="NotificationUnrecognizedDevice">%1$s,\nEr is op uw account ingelogd vanaf een nieuw apparaat op %2$s\n\nApparaat: %3$s\nLocatie: %4$s\n\nAls u dit niet was, kunt u alle sessies beëindigen via de instellingen.\n\nHet Telegram-team</string>
|
||||
<string name="NotificationContactNewPhoto">%1$s heeft zijn/haar profielfoto gewijzigd</string>
|
||||
|
||||
<!--contacts view-->
|
||||
<string name="SelectContact">Kies een contact</string>
|
||||
<string name="NoContacts">Nog geen contacten</string>
|
||||
<string name="InviteText">Hoi, zullen we overstappen op Telegram? http://telegram.org/dl2</string>
|
||||
<string name="TodayAt">vandaag om</string>
|
||||
<string name="YesterdayAt">gisteren om</string>
|
||||
<string name="OtherAt">om</string>
|
||||
<string name="Online">online</string>
|
||||
<string name="Offline">offline</string>
|
||||
<string name="LastSeen">laatst gezien:</string>
|
||||
<string name="LastSeenDate">laatst gezien:</string>
|
||||
<string name="InviteFriends">Vrienden uitnodigen</string>
|
||||
|
||||
<!--group create view-->
|
||||
<string name="SendMessageTo">Bericht verzenden naar…</string>
|
||||
<string name="EnterGroupNamePlaceholder">Groepsnaam...</string>
|
||||
<string name="MEMBER">DEELNEMER</string>
|
||||
<string name="GroupName">Groepsnaam</string>
|
||||
<string name="MEMBERS">DEELNEMERS</string>
|
||||
<string name="AllContacts">ALLE CONTACTEN</string>
|
||||
|
||||
<!--group info view-->
|
||||
<string name="EnterGroupNameTitle">GROEPSNAAM INSTELLEN</string>
|
||||
<string name="SharedMedia">Gedeelde media</string>
|
||||
<string name="GroupInfo">Groepsinformatie</string>
|
||||
<string name="SHAREDMEDIA">GEDEELDE MEDIA</string>
|
||||
<string name="SETTINGS">INSTELLINGEN</string>
|
||||
<string name="AddMember">Deelnemer toevoegen</string>
|
||||
<string name="DeleteAndExit">Groep verwijderen en verlaten</string>
|
||||
<string name="Notifications">Meldingen</string>
|
||||
<string name="KickFromGroup">Verwijderen uit groep</string>
|
||||
|
||||
<!--contact info view-->
|
||||
<string name="ShareContact">Delen</string>
|
||||
<string name="AddContact">Toevoegen</string>
|
||||
<string name="BlockContact">Blokkeren</string>
|
||||
<string name="EditContact">Bewerken</string>
|
||||
<string name="DeleteContact">Verwijderen</string>
|
||||
<string name="PhoneHome">THUIS</string>
|
||||
<string name="PhoneMobile">MOBIEL</string>
|
||||
<string name="PhoneWork">WERK</string>
|
||||
<string name="PhoneOther">OVERIG</string>
|
||||
<string name="PhoneMain">ALGEMEEN</string>
|
||||
<string name="ContactInfo">Contactinformatie</string>
|
||||
<string name="PHONE">TELEFOON</string>
|
||||
<string name="StartEncryptedChat">Privégesprek starten</string>
|
||||
<string name="CreateEncryptedChatError">Er is een fout opgetreden.</string>
|
||||
<string name="CreateEncryptedChatOutdatedError">Kan geen privégesprek starten met %1$s.\n\n%2$s gebruikt een oudere versie van Telegram en moet eerst een update installeren.</string>
|
||||
<string name="SecretTitle">Privégesprek</string>
|
||||
<string name="EncryptionKey">Encryptiesleutel</string>
|
||||
<string name="MessageLifetime">Verlooptijd</string>
|
||||
<string name="ShortMessageLifetimeForever">Uit</string>
|
||||
<string name="ShortMessageLifetime2s">2s</string>
|
||||
<string name="ShortMessageLifetime5s">5s</string>
|
||||
<string name="ShortMessageLifetime1m">1m</string>
|
||||
<string name="ShortMessageLifetime1h">1u</string>
|
||||
<string name="ShortMessageLifetime1d">1d</string>
|
||||
<string name="ShortMessageLifetime1w">1w</string>
|
||||
<string name="EncryptionKeyDescription">Deze afbeelding is een weergave van de encryptiesleutel voor dit privégesprek met <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.<![CDATA[<br><br>]]>Als deze afbeelding er hetzelfde uitziet als op de telefoon van <![CDATA[<b>]]>%2$s<![CDATA[</b>]]>, is uw gesprek 200%% beveiligd.<![CDATA[<br><br>]]>Bezoek telegram.org voor meer informatie.</string>
|
||||
|
||||
<!--settings view-->
|
||||
<string name="ResetNotificationsText">Alle meldingsinstellingen herstellen</string>
|
||||
<string name="TextSize">Tekstgrootte berichten</string>
|
||||
<string name="AskAQuestion">Een vraag stellen</string>
|
||||
<string name="EnableAnimations">Animaties inschakelen</string>
|
||||
<string name="Unblock">Deblokkeren</string>
|
||||
<string name="UnblockText">Houd een gebruiker ingedrukt om hem/haar te deblokkeren.</string>
|
||||
<string name="NoBlocked">Nog geen geblokkeerde gebruikers</string>
|
||||
<string name="YourPhoneNumber">UW TELEFOONNUMMER</string>
|
||||
<string name="MessageNotifications">BERICHTMELDINGEN</string>
|
||||
<string name="Alert">Waarschuwing</string>
|
||||
<string name="MessagePreview">Voorbeeld van berichten</string>
|
||||
<string name="GroupNotifications">GROEPSMELDINGEN</string>
|
||||
<string name="Sound">Geluid</string>
|
||||
<string name="InAppNotifications">IN-APP MELDINGEN</string>
|
||||
<string name="InAppSounds">In-app geluiden</string>
|
||||
<string name="InAppVibrate">In-app trillen</string>
|
||||
<string name="Vibrate">Trillen</string>
|
||||
<string name="InAppPreview">In-app voorbeelden</string>
|
||||
<string name="Reset">RESETTEN</string>
|
||||
<string name="ResetAllNotifications">Alle meldingen resetten</string>
|
||||
<string name="UndoAllCustom">Alle aangepaste meldingsinstellingen ongedaan maken voor alle contacten en groepen</string>
|
||||
<string name="NotificationsAndSounds">Meldingen en geluiden</string>
|
||||
<string name="BlockedUsers">Geblokkeerde gebruikers</string>
|
||||
<string name="SaveIncomingPhotos">Inkomende foto\'s opslaan</string>
|
||||
<string name="LogOut">Uitloggen</string>
|
||||
<string name="YourFirstNameAndLastName">UW VOOR- EN ACHTERNAAM</string>
|
||||
<string name="NoSound">Geen geluid</string>
|
||||
<string name="Default">Standaard</string>
|
||||
<string name="Support">ONDERSTEUNING</string>
|
||||
<string name="ChatBackground">Achtergrond gesprekken</string>
|
||||
<string name="MessagesSettings">BERICHTEN</string>
|
||||
<string name="SendByEnter">Verzenden met Enter</string>
|
||||
<string name="TerminateAllSessions">Alle andere sessies beëindigen</string>
|
||||
<string name="AutomaticPhotoDownload">FOTO\'S AUTOMATISCH DOWNLOADEN</string>
|
||||
<string name="AutomaticPhotoDownloadGroups">Groepen</string>
|
||||
<string name="AutomaticPhotoDownloadPrivateChats">Privégesprekken</string>
|
||||
<string name="Events">GEBEURTENISSEN</string>
|
||||
<string name="ContactJoined">Contact lid geworden van Telegram</string>
|
||||
|
||||
<!--media view-->
|
||||
<string name="NoMedia">Nog geen media gedeeld</string>
|
||||
<string name="CancelDownload">Downloaden annuleren</string>
|
||||
|
||||
<!--map view-->
|
||||
<string name="MyLocation">Mijn locatie</string>
|
||||
<string name="Map">Kaart</string>
|
||||
<string name="Satellite">Satelliet</string>
|
||||
<string name="Hybrid">Hybride</string>
|
||||
<string name="MetersAway">m hiervandaan</string>
|
||||
<string name="KMetersAway">km hiervandaan</string>
|
||||
<string name="SendLocation">Locatie verzenden</string>
|
||||
<string name="ShareLocation">Locatie delen</string>
|
||||
|
||||
<!--photo gallery view-->
|
||||
<string name="ShowAllMedia">Alle media weergeven</string>
|
||||
<string name="SaveToGallery">Opslaan in galerij</string>
|
||||
<string name="Of">van</string>
|
||||
<string name="Gallery">Galerij</string>
|
||||
|
||||
<!--button titles-->
|
||||
<string name="Next">Volgende</string>
|
||||
<string name="Back">Vorige</string>
|
||||
<string name="Done">Gereed</string>
|
||||
<string name="Open">Openen</string>
|
||||
<string name="Cancel">Annuleren</string>
|
||||
<string name="Add">Toevoegen</string>
|
||||
<string name="Edit">Bewerken</string>
|
||||
<string name="Send">Verzenden</string>
|
||||
<string name="Call">Bellen</string>
|
||||
<string name="Copy">Kopiëren</string>
|
||||
<string name="Delete">Verwijderen</string>
|
||||
<string name="Forward">Doorsturen</string>
|
||||
<string name="Retry">Opnieuw proberen</string>
|
||||
<string name="FromCamera">Van camera</string>
|
||||
<string name="FromGalley">Uit galerij</string>
|
||||
<string name="DeletePhoto">Foto verwijderen</string>
|
||||
<string name="OpenPhoto">Foto openen</string>
|
||||
<string name="Set">Instellen</string>
|
||||
<string name="OK">OK</string>
|
||||
|
||||
<!--messages-->
|
||||
<string name="ActionKickUser">un1 heeft un2 verwijderd</string>
|
||||
<string name="ActionLeftUser">un1 heeft de groep verlaten</string>
|
||||
<string name="ActionAddUser">un1 heeft un2 toegevoegd</string>
|
||||
<string name="ActionRemovedPhoto">un1 heeft de groepsafbeelding verwijderd</string>
|
||||
<string name="ActionChangedPhoto">un1 heeft de groepsafbeelding gewijzigd</string>
|
||||
<string name="ActionChangedTitle">un1 heeft de groepsnaam gewijzigd naar un2</string>
|
||||
<string name="ActionCreateGroup">un1 heeft de groep gemaakt</string>
|
||||
<string name="ActionYouKickUser">U hebt un2 verwijderd</string>
|
||||
<string name="ActionYouLeftUser">U hebt de groep verlaten</string>
|
||||
<string name="ActionYouAddUser">U hebt un2 toegevoegd</string>
|
||||
<string name="ActionYouRemovedPhoto">U hebt de groepsafbeelding verwijderd</string>
|
||||
<string name="ActionYouChangedPhoto">U hebt de groepsafbeelding gewijzigd</string>
|
||||
<string name="ActionYouChangedTitle">U hebt de groepsnaam gewijzigd naar un2</string>
|
||||
<string name="ActionYouCreateGroup">U hebt de groep gemaakt</string>
|
||||
<string name="ActionKickUserYou">un1 heeft u verwijderd</string>
|
||||
<string name="ActionAddUserYou">un1 heeft u toegevoegd</string>
|
||||
<string name="UnsuppotedMedia">Dit bericht wordt niet ondersteund in uw versie van Telegram.</string>
|
||||
<string name="AttachPhoto">Foto</string>
|
||||
<string name="AttachVideo">Video</string>
|
||||
<string name="AttachLocation">Locatie</string>
|
||||
<string name="AttachContact">Contact</string>
|
||||
<string name="AttachDocument">Document</string>
|
||||
<string name="AttachAudio">Geluidsbestand</string>
|
||||
<string name="FromYou">U</string>
|
||||
|
||||
<!--Alert messages-->
|
||||
<string name="InvalidPhoneNumber">Ongeldig telefoonnummer</string>
|
||||
<string name="CodeExpired">Code verlopen. Log opnieuw in.</string>
|
||||
<string name="FloodWait">Te veel pogingen. Probeer het later opnieuw.</string>
|
||||
<string name="InvalidCode">Ongeldige code</string>
|
||||
<string name="InvalidFirstName">Ongeldige voornaam</string>
|
||||
<string name="InvalidLastName">Ongeldige achternaam</string>
|
||||
<string name="Loading">Bezig met laden…</string>
|
||||
<string name="NoPlayerInstalled">U hebt geen mediaspeler. Installeer een mediaspeler om door te gaan.</string>
|
||||
<string name="NoHandleAppInstalled">U hebt geen applicaties die het MIME-type \'%1$s\' ondersteunen. Installeer een geschikte applicatie om door te gaan.</string>
|
||||
<string name="InviteUser">Deze gebruiker heeft nog geen Telegram. Wilt u een uitnodiging sturen?</string>
|
||||
<string name="AreYouSure">Weet u het zeker?</string>
|
||||
<string name="AddContactQ">Contact toevoegen?</string>
|
||||
<string name="AddToTheGroup">%1$s toevoegen aan de groep?</string>
|
||||
<string name="ForwardMessagesTo">Berichten doorsturen naar %1$s?</string>
|
||||
<string name="DeleteChatQuestion">Dit gesprek verwijderen?</string>
|
||||
|
||||
<!--Intro view-->
|
||||
<string name="Page1Title">Telegram</string>
|
||||
<string name="Page2Title">Snel</string>
|
||||
<string name="Page3Title">Gratis</string>
|
||||
<string name="Page4Title">Veilig</string>
|
||||
<string name="Page5Title">Krachtig</string>
|
||||
<string name="Page6Title">In de cloud</string>
|
||||
<string name="Page7Title">Privé</string>
|
||||
<string name="Page1Message">Welkom in het tijdperk van snel en veilig chatten</string>
|
||||
<string name="Page2Message"><![CDATA[<b>Telegram</b>]]> bezorgt berichten sneller<![CDATA[<br/>]]>dan elke andere app</string>
|
||||
<string name="Page3Message"><![CDATA[<b>Telegram</b>]]> is altijd gratis. Geen advertenties.<![CDATA[<br/>]]>Geen abonnementskosten</string>
|
||||
<string name="Page4Message"><![CDATA[<b>Telegram</b>]]> beveiligt uw berichten<![CDATA[<br/>]]>tegen hackers</string>
|
||||
<string name="Page5Message"><![CDATA[<b>Telegram</b>]]> heeft geen beperkingen op de grootte<![CDATA[<br/>]]>van uw media en gesprekken</string>
|
||||
<string name="Page6Message"><![CDATA[<b>Telegram</b>]]> biedt toegang tot uw berichten<![CDATA[<br/>]]>vanaf meerdere apparaten</string>
|
||||
<string name="Page7Message"><![CDATA[<b>Telegram</b>]]> berichten zijn sterk versleuteld<![CDATA[<br/>]]>en kunnen zichzelf vernietigen</string>
|
||||
<string name="StartMessaging">Begin nu met chatten</string>
|
||||
|
||||
<!--Don't change this! Not for localization!-->
|
||||
<string name="CacheTag">CACHE_TAG</string>
|
||||
</resources>
|