Avoid sending file twice (photos, documents, videos), move notifications settings from profiles to other view

This commit is contained in:
DrKLO 2014-06-20 04:18:13 +04:00
parent f6eac5cbce
commit 70882c5d28
31 changed files with 1019 additions and 826 deletions

View File

@ -81,7 +81,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 19 targetSdkVersion 19
versionCode 261 versionCode 262
versionName "1.5.6" versionName "1.5.7"
} }
} }

View File

@ -211,10 +211,10 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection.
if (paused) { if (paused) {
lastPauseTime = System.currentTimeMillis(); lastPauseTime = System.currentTimeMillis();
nextSleepTimeout = 30000; nextSleepTimeout = 30000;
FileLog.e("tmessages", "wakeup network in background by received push"); FileLog.e("tmessages", "wakeup network in background");
} else if (lastPauseTime != 0) { } else if (lastPauseTime != 0) {
lastPauseTime = System.currentTimeMillis(); lastPauseTime = System.currentTimeMillis();
FileLog.e("tmessages", "reset sleep timeout by received push"); FileLog.e("tmessages", "reset sleep timeout");
} }
} }
}); });
@ -641,9 +641,7 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection.
if (exist.downloadConnection != null) { if (exist.downloadConnection != null) {
exist.downloadConnection.suspendConnection(true); exist.downloadConnection.suspendConnection(true);
} }
if (dc == 1) { updateDcSettings(dc);
updateDcSettings(1);
}
} }
} }
}); });
@ -1062,7 +1060,8 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection.
for (int i = 0; i < runningRequests.size(); i++) { for (int i = 0; i < runningRequests.size(); i++) {
RPCRequest request = runningRequests.get(i); RPCRequest request = runningRequests.get(i);
if (updatingDcSettings && datacenters.size() > 1 && request.rawRequest instanceof TLRPC.TL_help_getConfig) { if (datacenters.size() > 1) {
if (updatingDcSettings && request.rawRequest instanceof TLRPC.TL_help_getConfig) {
if (updatingDcStartTime < currentTime - 60) { if (updatingDcStartTime < currentTime - 60) {
FileLog.e("tmessages", "move TL_help_getConfig to requestQueue"); FileLog.e("tmessages", "move TL_help_getConfig to requestQueue");
requestQueue.add(request); requestQueue.add(request);
@ -1070,6 +1069,9 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection.
i--; i--;
continue; continue;
} }
} else if (request.rawRequest instanceof TLRPC.TL_auth_sendCode || request.rawRequest instanceof TLRPC.TL_auth_signIn || request.rawRequest instanceof TLRPC.TL_auth_signUp) {
}
} }
int datacenterId = request.runningDatacenterId; int datacenterId = request.runningDatacenterId;

View File

@ -12,7 +12,6 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.os.Build; import android.os.Build;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.util.Log;
import org.telegram.ui.ApplicationLoader; import org.telegram.ui.ApplicationLoader;
@ -79,12 +78,7 @@ public class FileLoadOperation {
} }
public FileLoadOperation(TLRPC.Video videoLocation) { public FileLoadOperation(TLRPC.Video videoLocation) {
if (videoLocation instanceof TLRPC.TL_video) { if (videoLocation instanceof TLRPC.TL_videoEncrypted) {
location = new TLRPC.TL_inputVideoFileLocation();
datacenter_id = videoLocation.dc_id;
location.id = videoLocation.id;
location.access_hash = videoLocation.access_hash;
} else if (videoLocation instanceof TLRPC.TL_videoEncrypted) {
location = new TLRPC.TL_inputEncryptedFileLocation(); location = new TLRPC.TL_inputEncryptedFileLocation();
location.id = videoLocation.id; location.id = videoLocation.id;
location.access_hash = videoLocation.access_hash; location.access_hash = videoLocation.access_hash;
@ -92,6 +86,11 @@ public class FileLoadOperation {
iv = new byte[32]; iv = new byte[32];
System.arraycopy(videoLocation.iv, 0, iv, 0, iv.length); System.arraycopy(videoLocation.iv, 0, iv, 0, iv.length);
key = videoLocation.key; key = videoLocation.key;
} else if (videoLocation instanceof TLRPC.TL_video) {
location = new TLRPC.TL_inputVideoFileLocation();
datacenter_id = videoLocation.dc_id;
location.id = videoLocation.id;
location.access_hash = videoLocation.access_hash;
} }
ext = ".mp4"; ext = ".mp4";
} }
@ -115,12 +114,7 @@ public class FileLoadOperation {
} }
public FileLoadOperation(TLRPC.Document documentLocation) { public FileLoadOperation(TLRPC.Document documentLocation) {
if (documentLocation instanceof TLRPC.TL_document) { if (documentLocation instanceof TLRPC.TL_documentEncrypted) {
location = new TLRPC.TL_inputDocumentFileLocation();
datacenter_id = documentLocation.dc_id;
location.id = documentLocation.id;
location.access_hash = documentLocation.access_hash;
} else if (documentLocation instanceof TLRPC.TL_documentEncrypted) {
location = new TLRPC.TL_inputEncryptedFileLocation(); location = new TLRPC.TL_inputEncryptedFileLocation();
location.id = documentLocation.id; location.id = documentLocation.id;
location.access_hash = documentLocation.access_hash; location.access_hash = documentLocation.access_hash;
@ -128,6 +122,11 @@ public class FileLoadOperation {
iv = new byte[32]; iv = new byte[32];
System.arraycopy(documentLocation.iv, 0, iv, 0, iv.length); System.arraycopy(documentLocation.iv, 0, iv, 0, iv.length);
key = documentLocation.key; key = documentLocation.key;
} else if (documentLocation instanceof TLRPC.TL_document) {
location = new TLRPC.TL_inputDocumentFileLocation();
datacenter_id = documentLocation.dc_id;
location.id = documentLocation.id;
location.access_hash = documentLocation.access_hash;
} }
ext = documentLocation.file_name; ext = documentLocation.file_name;
int idx = -1; int idx = -1;
@ -675,6 +674,9 @@ public class FileLoadOperation {
delegate.didFailedLoadingFile(FileLoadOperation.this); delegate.didFailedLoadingFile(FileLoadOperation.this);
} }
} else { } else {
if (location != null) {
FileLog.e("tmessages", "" + location + " id = " + location.id + " access_hash = " + location.access_hash + " volume_id = " + location.local_id + " secret = " + location.secret);
}
cleanup(); cleanup();
delegate.didFailedLoadingFile(FileLoadOperation.this); delegate.didFailedLoadingFile(FileLoadOperation.this);
} }

View File

@ -127,6 +127,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
public TLRPC.TL_messages_sendMedia sendRequest; public TLRPC.TL_messages_sendMedia sendRequest;
public TLRPC.TL_decryptedMessage sendEncryptedRequest; public TLRPC.TL_decryptedMessage sendEncryptedRequest;
public int type; public int type;
public String originalPath;
public TLRPC.FileLocation location; public TLRPC.FileLocation location;
public TLRPC.TL_video videoLocation; public TLRPC.TL_video videoLocation;
public TLRPC.TL_audio audioLocation; public TLRPC.TL_audio audioLocation;
@ -1600,7 +1601,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
Utilities.random.nextBytes(reqSend.random_bytes); Utilities.random.nextBytes(reqSend.random_bytes);
reqSend.action = new TLRPC.TL_decryptedMessageActionDeleteMessages(); reqSend.action = new TLRPC.TL_decryptedMessageActionDeleteMessages();
reqSend.action.random_ids = random_ids; reqSend.action.random_ids = random_ids;
performSendEncryptedRequest(reqSend, null, encryptedChat, null); performSendEncryptedRequest(reqSend, null, encryptedChat, null, null);
} }
@ -1613,7 +1614,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))];
Utilities.random.nextBytes(reqSend.random_bytes); Utilities.random.nextBytes(reqSend.random_bytes);
reqSend.action = new TLRPC.TL_decryptedMessageActionFlushHistory(); reqSend.action = new TLRPC.TL_decryptedMessageActionFlushHistory();
performSendEncryptedRequest(reqSend, null, encryptedChat, null); performSendEncryptedRequest(reqSend, null, encryptedChat, null, null);
} }
public void sendTTLMessage(TLRPC.EncryptedChat encryptedChat) { public void sendTTLMessage(TLRPC.EncryptedChat encryptedChat) {
@ -1657,7 +1658,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
Utilities.random.nextBytes(reqSend.random_bytes); Utilities.random.nextBytes(reqSend.random_bytes);
reqSend.action = new TLRPC.TL_decryptedMessageActionSetMessageTTL(); reqSend.action = new TLRPC.TL_decryptedMessageActionSetMessageTTL();
reqSend.action.ttl_seconds = encryptedChat.ttl; reqSend.action.ttl_seconds = encryptedChat.ttl;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null); performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null);
} }
public void sendScreenshotMessage(TLRPC.EncryptedChat encryptedChat, ArrayList<Long> random_ids) { public void sendScreenshotMessage(TLRPC.EncryptedChat encryptedChat, ArrayList<Long> random_ids) {
@ -1705,7 +1706,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))]; reqSend.random_bytes = new byte[Math.max(1, (int)Math.ceil(Utilities.random.nextDouble() * 16))];
Utilities.random.nextBytes(reqSend.random_bytes); Utilities.random.nextBytes(reqSend.random_bytes);
reqSend.action = action; reqSend.action = action;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null); performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null);
} }
private void sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.FileLocation location, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer) { private void sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.FileLocation location, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer) {
@ -1749,14 +1750,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
newMsg.fwd_msg_id = msgObj.messageOwner.id; newMsg.fwd_msg_id = msgObj.messageOwner.id;
newMsg.attachPath = msgObj.messageOwner.attachPath; newMsg.attachPath = msgObj.messageOwner.attachPath;
type = 4; type = 4;
} else if (msgObj.type == 11) {
newMsg.fwd_from_id = msgObj.messageOwner.from_id;
newMsg.fwd_date = msgObj.messageOwner.date;
newMsg.media = new TLRPC.TL_messageMediaPhoto();
newMsg.media.photo = msgObj.messageOwner.action.photo;
newMsg.message = "";
newMsg.fwd_msg_id = msgObj.messageOwner.id;
type = 5;
} else { } else {
newMsg.fwd_from_id = msgObj.messageOwner.from_id; newMsg.fwd_from_id = msgObj.messageOwner.from_id;
newMsg.fwd_date = msgObj.messageOwner.date; newMsg.fwd_date = msgObj.messageOwner.date;
@ -1858,7 +1851,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.message = message; reqSend.message = message;
reqSend.peer = sendToPeer; reqSend.peer = sendToPeer;
reqSend.random_id = newMsg.random_id; reqSend.random_id = newMsg.random_id;
performSendMessageRequest(reqSend, newMsgObj); performSendMessageRequest(reqSend, newMsgObj, null);
} else { } else {
TLRPC.TL_decryptedMessage reqSend = new TLRPC.TL_decryptedMessage(); TLRPC.TL_decryptedMessage reqSend = new TLRPC.TL_decryptedMessage();
reqSend.random_id = newMsg.random_id; reqSend.random_id = newMsg.random_id;
@ -1866,7 +1859,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
Utilities.random.nextBytes(reqSend.random_bytes); Utilities.random.nextBytes(reqSend.random_bytes);
reqSend.message = message; reqSend.message = message;
reqSend.media = new TLRPC.TL_decryptedMessageMediaEmpty(); reqSend.media = new TLRPC.TL_decryptedMessageMediaEmpty();
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null); performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null);
} }
} else if (type >= 1 && type <= 3 || type >= 5 && type <= 8) { } else if (type >= 1 && type <= 3 || type >= 5 && type <= 8) {
if (encryptedChat == null) { if (encryptedChat == null) {
@ -1878,41 +1871,55 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.geo_point = new TLRPC.TL_inputGeoPoint(); reqSend.media.geo_point = new TLRPC.TL_inputGeoPoint();
reqSend.media.geo_point.lat = lat; reqSend.media.geo_point.lat = lat;
reqSend.media.geo_point._long = lon; reqSend.media.geo_point._long = lon;
performSendMessageRequest(reqSend, newMsgObj); performSendMessageRequest(reqSend, newMsgObj, null);
} else if (type == 2) { } else if (type == 2) {
if (photo.access_hash == 0) {
reqSend.media = new TLRPC.TL_inputMediaUploadedPhoto(); reqSend.media = new TLRPC.TL_inputMediaUploadedPhoto();
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 0; delayedMessage.type = 0;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.location = photo.sizes.get(photo.sizes.size() - 1).location; delayedMessage.location = photo.sizes.get(photo.sizes.size() - 1).location;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else {
TLRPC.TL_inputMediaPhoto media = new TLRPC.TL_inputMediaPhoto();
media.id = new TLRPC.TL_inputPhoto();
media.id.id = photo.id;
media.id.access_hash = photo.access_hash;
reqSend.media = media;
performSendMessageRequest(reqSend, newMsgObj, null);
}
} else if (type == 3) { } else if (type == 3) {
if (video.access_hash == 0) {
reqSend.media = new TLRPC.TL_inputMediaUploadedThumbVideo(); reqSend.media = new TLRPC.TL_inputMediaUploadedThumbVideo();
reqSend.media.duration = video.duration; reqSend.media.duration = video.duration;
reqSend.media.w = video.w; reqSend.media.w = video.w;
reqSend.media.h = video.h; reqSend.media.h = video.h;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 1; delayedMessage.type = 1;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.location = video.thumb.location; delayedMessage.location = video.thumb.location;
delayedMessage.videoLocation = video; delayedMessage.videoLocation = video;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else if (type == 5) { } else {
reqSend.media = new TLRPC.TL_inputMediaPhoto(); TLRPC.TL_inputMediaVideo media = new TLRPC.TL_inputMediaVideo();
TLRPC.TL_inputPhoto ph = new TLRPC.TL_inputPhoto(); media.id = new TLRPC.TL_inputVideo();
ph.id = msgObj.messageOwner.action.photo.id; media.id.id = video.id;
ph.access_hash = msgObj.messageOwner.action.photo.access_hash; media.id.access_hash = video.access_hash;
((TLRPC.TL_inputMediaPhoto)reqSend.media).id = ph; reqSend.media = media;
performSendMessageRequest(reqSend, newMsgObj); performSendMessageRequest(reqSend, newMsgObj, null);
}
} else if (type == 6) { } else if (type == 6) {
reqSend.media = new TLRPC.TL_inputMediaContact(); reqSend.media = new TLRPC.TL_inputMediaContact();
reqSend.media.phone_number = user.phone; reqSend.media.phone_number = user.phone;
reqSend.media.first_name = user.first_name; reqSend.media.first_name = user.first_name;
reqSend.media.last_name = user.last_name; reqSend.media.last_name = user.last_name;
performSendMessageRequest(reqSend, newMsgObj); performSendMessageRequest(reqSend, newMsgObj, null);
} else if (type == 7) { } else if (type == 7) {
if (document.access_hash == 0) {
if (document.thumb.location != null && document.thumb.location instanceof TLRPC.TL_fileLocation) { if (document.thumb.location != null && document.thumb.location instanceof TLRPC.TL_fileLocation) {
reqSend.media = new TLRPC.TL_inputMediaUploadedThumbDocument(); reqSend.media = new TLRPC.TL_inputMediaUploadedThumbDocument();
} else { } else {
@ -1921,12 +1928,21 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.mime_type = document.mime_type; reqSend.media.mime_type = document.mime_type;
reqSend.media.file_name = document.file_name; reqSend.media.file_name = document.file_name;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 2; delayedMessage.type = 2;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.documentLocation = document; delayedMessage.documentLocation = document;
delayedMessage.location = document.thumb.location; delayedMessage.location = document.thumb.location;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else {
TLRPC.TL_inputMediaDocument media = new TLRPC.TL_inputMediaDocument();
media.id = new TLRPC.TL_inputDocument();
media.id.id = document.id;
media.id.access_hash = document.access_hash;
reqSend.media = media;
performSendMessageRequest(reqSend, newMsgObj, null);
}
} else if (type == 8) { } else if (type == 8) {
reqSend.media = new TLRPC.TL_inputMediaUploadedAudio(); reqSend.media = new TLRPC.TL_inputMediaUploadedAudio();
reqSend.media.duration = audio.duration; reqSend.media.duration = audio.duration;
@ -1947,25 +1963,34 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media = new TLRPC.TL_decryptedMessageMediaGeoPoint(); reqSend.media = new TLRPC.TL_decryptedMessageMediaGeoPoint();
reqSend.media.lat = lat; reqSend.media.lat = lat;
reqSend.media._long = lon; reqSend.media._long = lon;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null); performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null);
} else if (type == 2) { } else if (type == 2) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaPhoto();
TLRPC.PhotoSize small = photo.sizes.get(0); TLRPC.PhotoSize small = photo.sizes.get(0);
TLRPC.PhotoSize big = photo.sizes.get(photo.sizes.size() - 1); TLRPC.PhotoSize big = photo.sizes.get(photo.sizes.size() - 1);
reqSend.media = new TLRPC.TL_decryptedMessageMediaPhoto();
reqSend.media.thumb = small.bytes; reqSend.media.thumb = small.bytes;
reqSend.media.thumb_h = small.h; reqSend.media.thumb_h = small.h;
reqSend.media.thumb_w = small.w; reqSend.media.thumb_w = small.w;
reqSend.media.w = big.w; reqSend.media.w = big.w;
reqSend.media.h = big.h; reqSend.media.h = big.h;
reqSend.media.size = big.size; reqSend.media.size = big.size;
if (big.location.key == null) {
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 0; delayedMessage.type = 0;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.encryptedChat = encryptedChat; delayedMessage.encryptedChat = encryptedChat;
delayedMessage.location = photo.sizes.get(photo.sizes.size() - 1).location; delayedMessage.location = photo.sizes.get(photo.sizes.size() - 1).location;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else {
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
encryptedFile.id = big.location.volume_id;
encryptedFile.access_hash = big.location.secret;
reqSend.media.key = big.location.key;
reqSend.media.iv = big.location.iv;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null);
}
} else if (type == 3) { } else if (type == 3) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaVideo(); reqSend.media = new TLRPC.TL_decryptedMessageMediaVideo();
reqSend.media.duration = video.duration; reqSend.media.duration = video.duration;
@ -1975,23 +2000,30 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.thumb = video.thumb.bytes; reqSend.media.thumb = video.thumb.bytes;
reqSend.media.thumb_h = video.thumb.h; reqSend.media.thumb_h = video.thumb.h;
reqSend.media.thumb_w = video.thumb.w; reqSend.media.thumb_w = video.thumb.w;
if (video.access_hash == 0) {
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 1; delayedMessage.type = 1;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.encryptedChat = encryptedChat; delayedMessage.encryptedChat = encryptedChat;
delayedMessage.videoLocation = video; delayedMessage.videoLocation = video;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else if (type == 5) { } else {
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
encryptedFile.id = video.id;
encryptedFile.access_hash = video.access_hash;
reqSend.media.key = video.key;
reqSend.media.iv = video.iv;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null);
}
} else if (type == 6) { } else if (type == 6) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaContact(); reqSend.media = new TLRPC.TL_decryptedMessageMediaContact();
reqSend.media.phone_number = user.phone; reqSend.media.phone_number = user.phone;
reqSend.media.first_name = user.first_name; reqSend.media.first_name = user.first_name;
reqSend.media.last_name = user.last_name; reqSend.media.last_name = user.last_name;
reqSend.media.user_id = user.id; reqSend.media.user_id = user.id;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null); performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, null, null);
} else if (type == 7) { } else if (type == 7) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument(); reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
reqSend.media.size = document.size; reqSend.media.size = document.size;
@ -2006,14 +2038,23 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} }
reqSend.media.file_name = document.file_name; reqSend.media.file_name = document.file_name;
reqSend.media.mime_type = document.mime_type; reqSend.media.mime_type = document.mime_type;
if (document.access_hash == 0) {
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 2; delayedMessage.type = 2;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.encryptedChat = encryptedChat; delayedMessage.encryptedChat = encryptedChat;
delayedMessage.documentLocation = document; delayedMessage.documentLocation = document;
performSendDelayedMessage(delayedMessage); performSendDelayedMessage(delayedMessage);
} else {
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
encryptedFile.id = document.id;
encryptedFile.access_hash = document.access_hash;
reqSend.media.key = document.key;
reqSend.media.iv = document.iv;
performSendEncryptedRequest(reqSend, newMsgObj, encryptedChat, encryptedFile, null);
}
} else if (type == 8) { } else if (type == 8) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio(); reqSend.media = new TLRPC.TL_decryptedMessageMediaAudio();
reqSend.media.duration = audio.duration; reqSend.media.duration = audio.duration;
@ -2037,13 +2078,15 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} else { } else {
reqSend.id = msgObj.messageOwner.fwd_msg_id; reqSend.id = msgObj.messageOwner.fwd_msg_id;
} }
performSendMessageRequest(reqSend, newMsgObj); performSendMessageRequest(reqSend, newMsgObj, null);
} }
} }
private void processSentMessage(TLRPC.Message newMsg, TLRPC.Message sentMessage, TLRPC.EncryptedFile file, TLRPC.DecryptedMessage decryptedMessage) { private void processSentMessage(TLRPC.Message newMsg, TLRPC.Message sentMessage, TLRPC.EncryptedFile file, TLRPC.DecryptedMessage decryptedMessage, String originalPath) {
if (sentMessage != null) { if (sentMessage != null) {
if (sentMessage.media instanceof TLRPC.TL_messageMediaPhoto && sentMessage.media.photo != null && newMsg.media instanceof TLRPC.TL_messageMediaPhoto && newMsg.media.photo != null) { if (sentMessage.media instanceof TLRPC.TL_messageMediaPhoto && sentMessage.media.photo != null && newMsg.media instanceof TLRPC.TL_messageMediaPhoto && newMsg.media.photo != null) {
MessagesStorage.getInstance().putSentFile(originalPath, sentMessage.media.photo, 0);
for (TLRPC.PhotoSize size : sentMessage.media.photo.sizes) { for (TLRPC.PhotoSize size : sentMessage.media.photo.sizes) {
if (size instanceof TLRPC.TL_photoSizeEmpty) { if (size instanceof TLRPC.TL_photoSizeEmpty) {
continue; continue;
@ -2067,6 +2110,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
sentMessage.message = newMsg.message; sentMessage.message = newMsg.message;
sentMessage.attachPath = newMsg.attachPath; sentMessage.attachPath = newMsg.attachPath;
} else if (sentMessage.media instanceof TLRPC.TL_messageMediaVideo && sentMessage.media.video != null && newMsg.media instanceof TLRPC.TL_messageMediaVideo && newMsg.media.video != null) { } else if (sentMessage.media instanceof TLRPC.TL_messageMediaVideo && sentMessage.media.video != null && newMsg.media instanceof TLRPC.TL_messageMediaVideo && newMsg.media.video != null) {
MessagesStorage.getInstance().putSentFile(originalPath, sentMessage.media.video, 2);
TLRPC.PhotoSize size2 = newMsg.media.video.thumb; TLRPC.PhotoSize size2 = newMsg.media.video.thumb;
TLRPC.PhotoSize size = sentMessage.media.video.thumb; TLRPC.PhotoSize size = sentMessage.media.video.thumb;
if (size2.location != null && size.location != null && !(size instanceof TLRPC.TL_photoSizeEmpty) && !(size2 instanceof TLRPC.TL_photoSizeEmpty)) { if (size2.location != null && size.location != null && !(size instanceof TLRPC.TL_photoSizeEmpty) && !(size2 instanceof TLRPC.TL_photoSizeEmpty)) {
@ -2083,6 +2128,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
sentMessage.message = newMsg.message; sentMessage.message = newMsg.message;
sentMessage.attachPath = newMsg.attachPath; sentMessage.attachPath = newMsg.attachPath;
} else if (sentMessage.media instanceof TLRPC.TL_messageMediaDocument && sentMessage.media.document != null && newMsg.media instanceof TLRPC.TL_messageMediaDocument && newMsg.media.document != null) { } else if (sentMessage.media instanceof TLRPC.TL_messageMediaDocument && sentMessage.media.document != null && newMsg.media instanceof TLRPC.TL_messageMediaDocument && newMsg.media.document != null) {
MessagesStorage.getInstance().putSentFile(originalPath, sentMessage.media.document, 1);
TLRPC.PhotoSize size2 = newMsg.media.document.thumb; TLRPC.PhotoSize size2 = newMsg.media.document.thumb;
TLRPC.PhotoSize size = sentMessage.media.document.thumb; TLRPC.PhotoSize size = sentMessage.media.document.thumb;
if (size2.location != null && size.location != null && !(size instanceof TLRPC.TL_photoSizeEmpty) && !(size2 instanceof TLRPC.TL_photoSizeEmpty)) { if (size2.location != null && size.location != null && !(size instanceof TLRPC.TL_photoSizeEmpty) && !(size2 instanceof TLRPC.TL_photoSizeEmpty)) {
@ -2145,12 +2192,13 @@ public class MessagesController implements NotificationCenter.NotificationCenter
ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>(); ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>();
arr.add(newMsg); arr.add(newMsg);
MessagesStorage.getInstance().putMessages(arr, false, true); MessagesStorage.getInstance().putMessages(arr, false, true);
MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.photo, 3);
} else if (newMsg.media instanceof TLRPC.TL_messageMediaVideo && newMsg.media.video != null) { } else if (newMsg.media instanceof TLRPC.TL_messageMediaVideo && newMsg.media.video != null) {
TLRPC.Video video = newMsg.media.video; TLRPC.Video video = newMsg.media.video;
newMsg.media.video = new TLRPC.TL_videoEncrypted(); newMsg.media.video = new TLRPC.TL_videoEncrypted();
newMsg.media.video.duration = video.duration; newMsg.media.video.duration = video.duration;
newMsg.media.video.thumb = video.thumb; newMsg.media.video.thumb = video.thumb;
newMsg.media.video.id = video.id;
newMsg.media.video.dc_id = file.dc_id; newMsg.media.video.dc_id = file.dc_id;
newMsg.media.video.w = video.w; newMsg.media.video.w = video.w;
newMsg.media.video.h = video.h; newMsg.media.video.h = video.h;
@ -2166,6 +2214,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>(); ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>();
arr.add(newMsg); arr.add(newMsg);
MessagesStorage.getInstance().putMessages(arr, false, true); MessagesStorage.getInstance().putMessages(arr, false, true);
MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.video, 5);
} else if (newMsg.media instanceof TLRPC.TL_messageMediaDocument && newMsg.media.document != null) { } else if (newMsg.media instanceof TLRPC.TL_messageMediaDocument && newMsg.media.document != null) {
TLRPC.Document document = newMsg.media.document; TLRPC.Document document = newMsg.media.document;
newMsg.media.document = new TLRPC.TL_documentEncrypted(); newMsg.media.document = new TLRPC.TL_documentEncrypted();
@ -2191,6 +2241,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>(); ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>();
arr.add(newMsg); arr.add(newMsg);
MessagesStorage.getInstance().putMessages(arr, false, true); MessagesStorage.getInstance().putMessages(arr, false, true);
MessagesStorage.getInstance().putSentFile(originalPath, newMsg.media.document, 4);
} else if (newMsg.media instanceof TLRPC.TL_messageMediaAudio && newMsg.media.audio != null) { } else if (newMsg.media instanceof TLRPC.TL_messageMediaAudio && newMsg.media.audio != null) {
TLRPC.Audio audio = newMsg.media.audio; TLRPC.Audio audio = newMsg.media.audio;
newMsg.media.audio = new TLRPC.TL_audioEncrypted(); newMsg.media.audio = new TLRPC.TL_audioEncrypted();
@ -2220,7 +2272,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} }
} }
private void performSendEncryptedRequest(final TLRPC.DecryptedMessage req, final MessageObject newMsgObj, final TLRPC.EncryptedChat chat, final TLRPC.InputEncryptedFile encryptedFile) { private void performSendEncryptedRequest(final TLRPC.DecryptedMessage req, final MessageObject newMsgObj, final TLRPC.EncryptedChat chat, final TLRPC.InputEncryptedFile encryptedFile, final String originalPath) {
if (req == null || chat.auth_key == null || chat instanceof TLRPC.TL_encryptedChatRequested || chat instanceof TLRPC.TL_encryptedChatWaiting) { if (req == null || chat.auth_key == null || chat instanceof TLRPC.TL_encryptedChatRequested || chat instanceof TLRPC.TL_encryptedChatWaiting) {
return; return;
} }
@ -2285,7 +2337,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
TLRPC.messages_SentEncryptedMessage res = (TLRPC.messages_SentEncryptedMessage) response; TLRPC.messages_SentEncryptedMessage res = (TLRPC.messages_SentEncryptedMessage) response;
newMsgObj.messageOwner.date = res.date; newMsgObj.messageOwner.date = res.date;
if (res.file instanceof TLRPC.TL_encryptedFile) { if (res.file instanceof TLRPC.TL_encryptedFile) {
processSentMessage(newMsgObj.messageOwner, null, res.file, req); processSentMessage(newMsgObj.messageOwner, null, res.file, req, originalPath);
} }
MessagesStorage.getInstance().updateMessageStateAndId(newMsgObj.messageOwner.random_id, newMsgObj.messageOwner.id, newMsgObj.messageOwner.id, res.date, true); MessagesStorage.getInstance().updateMessageStateAndId(newMsgObj.messageOwner.random_id, newMsgObj.messageOwner.id, newMsgObj.messageOwner.id, res.date, true);
MessagesStorage.getInstance().storageQueue.postRunnable(new Runnable() { MessagesStorage.getInstance().storageQueue.postRunnable(new Runnable() {
@ -2316,7 +2368,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
}, null, true, RPCRequest.RPCRequestClassGeneric | RPCRequest.RPCRequestClassCanCompress); }, null, true, RPCRequest.RPCRequestClassGeneric | RPCRequest.RPCRequestClassCanCompress);
} }
private void performSendMessageRequest(TLObject req, final MessageObject newMsgObj) { private void performSendMessageRequest(TLObject req, final MessageObject newMsgObj, final String originalPath) {
ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() { ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() {
@Override @Override
public void run(TLObject response, TLRPC.TL_error error) { public void run(TLObject response, TLRPC.TL_error error) {
@ -2350,7 +2402,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
TLRPC.messages_StatedMessage res = (TLRPC.messages_StatedMessage) response; TLRPC.messages_StatedMessage res = (TLRPC.messages_StatedMessage) response;
sentMessages.add(res.message); sentMessages.add(res.message);
newMsgObj.messageOwner.id = res.message.id; newMsgObj.messageOwner.id = res.message.id;
processSentMessage(newMsgObj.messageOwner, res.message, null, null); processSentMessage(newMsgObj.messageOwner, res.message, null, null, originalPath);
if (MessagesStorage.lastSeqValue + 1 == res.seq) { if (MessagesStorage.lastSeqValue + 1 == res.seq) {
MessagesStorage.lastSeqValue = res.seq; MessagesStorage.lastSeqValue = res.seq;
MessagesStorage.lastPtsValue = res.pts; MessagesStorage.lastPtsValue = res.pts;
@ -2376,7 +2428,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
TLRPC.Message message = res.messages.get(0); TLRPC.Message message = res.messages.get(0);
newMsgObj.messageOwner.id = message.id; newMsgObj.messageOwner.id = message.id;
sentMessages.add(message); sentMessages.add(message);
processSentMessage(newMsgObj.messageOwner, message, null, null); processSentMessage(newMsgObj.messageOwner, message, null, null, originalPath);
} }
if (MessagesStorage.lastSeqValue + 1 == res.seq) { if (MessagesStorage.lastSeqValue + 1 == res.seq) {
MessagesStorage.lastSeqValue = res.seq; MessagesStorage.lastSeqValue = res.seq;
@ -2593,14 +2645,14 @@ public class MessagesController implements NotificationCenter.NotificationCenter
if (file != null && message.sendRequest != null) { if (file != null && message.sendRequest != null) {
if (message.type == 0) { if (message.type == 0) {
message.sendRequest.media.file = file; message.sendRequest.media.file = file;
performSendMessageRequest(message.sendRequest, message.obj); performSendMessageRequest(message.sendRequest, message.obj, message.originalPath);
} else if (message.type == 1) { } else if (message.type == 1) {
if (message.sendRequest.media.thumb == null) { if (message.sendRequest.media.thumb == null) {
message.sendRequest.media.thumb = file; message.sendRequest.media.thumb = file;
performSendDelayedMessage(message); performSendDelayedMessage(message);
} else { } else {
message.sendRequest.media.file = file; message.sendRequest.media.file = file;
performSendMessageRequest(message.sendRequest, message.obj); performSendMessageRequest(message.sendRequest, message.obj, message.originalPath);
} }
} else if (message.type == 2) { } else if (message.type == 2) {
if (message.sendRequest.media.thumb == null && message.location != null) { if (message.sendRequest.media.thumb == null && message.location != null) {
@ -2608,18 +2660,18 @@ public class MessagesController implements NotificationCenter.NotificationCenter
performSendDelayedMessage(message); performSendDelayedMessage(message);
} else { } else {
message.sendRequest.media.file = file; message.sendRequest.media.file = file;
performSendMessageRequest(message.sendRequest, message.obj); performSendMessageRequest(message.sendRequest, message.obj, message.originalPath);
} }
} else if (message.type == 3) { } else if (message.type == 3) {
message.sendRequest.media.file = file; message.sendRequest.media.file = file;
performSendMessageRequest(message.sendRequest, message.obj); performSendMessageRequest(message.sendRequest, message.obj, message.originalPath);
} }
arr.remove(a); arr.remove(a);
a--; a--;
} else if (encryptedFile != null && message.sendEncryptedRequest != null) { } else if (encryptedFile != null && message.sendEncryptedRequest != null) {
message.sendEncryptedRequest.media.key = encryptedFile.key; message.sendEncryptedRequest.media.key = encryptedFile.key;
message.sendEncryptedRequest.media.iv = encryptedFile.iv; message.sendEncryptedRequest.media.iv = encryptedFile.iv;
performSendEncryptedRequest(message.sendEncryptedRequest, message.obj, message.encryptedChat, encryptedFile); performSendEncryptedRequest(message.sendEncryptedRequest, message.obj, message.encryptedChat, encryptedFile, message.originalPath);
arr.remove(a); arr.remove(a);
a--; a--;
} }
@ -4454,8 +4506,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter
String choosenSoundPath = null; String choosenSoundPath = null;
int ledColor = 0xff00ff00; int ledColor = 0xff00ff00;
choosenSoundPath = preferences.getString("sound_path_" + dialog_id, null);
if (chat_id != 0) { if (chat_id != 0) {
choosenSoundPath = preferences.getString("sound_chat_path_" + chat_id, null);
if (choosenSoundPath != null && choosenSoundPath.equals(defaultPath)) { if (choosenSoundPath != null && choosenSoundPath.equals(defaultPath)) {
choosenSoundPath = null; choosenSoundPath = null;
} else if (choosenSoundPath == null) { } else if (choosenSoundPath == null) {
@ -4464,7 +4517,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
needVibrate = preferences.getBoolean("EnableVibrateGroup", true); needVibrate = preferences.getBoolean("EnableVibrateGroup", true);
ledColor = preferences.getInt("GroupLed", 0xff00ff00); ledColor = preferences.getInt("GroupLed", 0xff00ff00);
} else if (user_id != 0) { } else if (user_id != 0) {
choosenSoundPath = preferences.getString("sound_path_" + user_id, null);
if (choosenSoundPath != null && choosenSoundPath.equals(defaultPath)) { if (choosenSoundPath != null && choosenSoundPath.equals(defaultPath)) {
choosenSoundPath = null; choosenSoundPath = null;
} else if (choosenSoundPath == null) { } else if (choosenSoundPath == null) {
@ -4808,7 +4860,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
newMessage.media.audio = new TLRPC.TL_audioEncrypted(); newMessage.media.audio = new TLRPC.TL_audioEncrypted();
newMessage.media.audio.id = message.file.id; newMessage.media.audio.id = message.file.id;
newMessage.media.audio.access_hash = message.file.access_hash; newMessage.media.audio.access_hash = message.file.access_hash;
newMessage.media.audio.user_id = decryptedMessage.media.user_id; newMessage.media.audio.user_id = from_id;
newMessage.media.audio.date = message.date; newMessage.media.audio.date = message.date;
newMessage.media.audio.size = message.file.size; newMessage.media.audio.size = message.file.size;
newMessage.media.audio.key = decryptedMessage.media.key; newMessage.media.audio.key = decryptedMessage.media.key;

View File

@ -97,6 +97,8 @@ public class MessagesStorage {
database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose(); database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose();
database.executeFast("CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))").stepThis().dispose(); database.executeFast("CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))").stepThis().dispose();
database.executeFast("CREATE TABLE sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose();
@ -166,6 +168,8 @@ public class MessagesStorage {
database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose();
database.executeFast("CREATE TABLE IF NOT EXISTS sent_files_v2(uid TEXT, type INTEGER, data BLOB, PRIMARY KEY (uid, type))").stepThis().dispose();
} }
} catch (Exception e) { } catch (Exception e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
@ -1435,6 +1439,73 @@ public class MessagesStorage {
} }
} }
public TLObject getSentFile(final String path, final int type) {
if (path == null) {
return null;
}
final Semaphore semaphore = new Semaphore(0);
final ArrayList<TLObject> result = new ArrayList<TLObject>();
storageQueue.postRunnable(new Runnable() {
@Override
public void run() {
try {
String id = Utilities.MD5(path);
if (id != null) {
SQLiteCursor cursor = database.queryFinalized(String.format(Locale.US, "SELECT data FROM sent_files_v2 WHERE uid = '%s' AND type = %d", id, type));
if (cursor.next()) {
byte[] fileData = cursor.byteArrayValue(0);
if (fileData != null) {
SerializedData data = new SerializedData(fileData);
TLObject file = TLClassStore.Instance().TLdeserialize(data, data.readInt32());
if (file != null) {
result.add(file);
}
}
}
cursor.dispose();
}
} catch (Exception e) {
FileLog.e("tmessages", e);
} finally {
semaphore.release();
}
}
});
try {
semaphore.acquire();
} catch (Exception e) {
FileLog.e("tmessages", e);
}
return !result.isEmpty() ? result.get(0) : null;
}
public void putSentFile(final String path, final TLObject file, final int type) {
if (path == null || file == null) {
return;
}
storageQueue.postRunnable(new Runnable() {
@Override
public void run() {
try {
String id = Utilities.MD5(path);
if (id != null) {
SQLitePreparedStatement state = database.executeFast("REPLACE INTO sent_files_v2 VALUES(?, ?, ?)");
state.requery();
SerializedData data = new SerializedData();
file.serializeToStream(data);
state.bindString(1, id);
state.bindInteger(2, type);
state.bindByteArray(3, data.toByteArray());
state.step();
state.dispose();
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
});
}
public void updateEncryptedChatTTL(final TLRPC.EncryptedChat chat) { public void updateEncryptedChatTTL(final TLRPC.EncryptedChat chat) {
if (chat == null) { if (chat == null) {
return; return;

View File

@ -8826,7 +8826,7 @@ public class TLRPC {
} }
} }
public static class TL_documentEncrypted extends Document { public static class TL_documentEncrypted extends TL_document {
public static int constructor = 0x55555556; public static int constructor = 0x55555556;
@ -8860,7 +8860,7 @@ public class TLRPC {
} }
} }
public static class TL_videoEncrypted extends Video { public static class TL_videoEncrypted extends TL_video {
public static int constructor = 0x55555553; public static int constructor = 0x55555553;

View File

@ -1003,4 +1003,8 @@ public class Utilities {
UpdateManager.register(context, BuildVars.HOCKEY_APP_HASH); UpdateManager.register(context, BuildVars.HOCKEY_APP_HASH);
} }
} }
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
} }

View File

@ -8,6 +8,7 @@
package org.telegram.ui.Adapters; package org.telegram.ui.Adapters;
import android.database.DataSetObserver;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.BaseAdapter; import android.widget.BaseAdapter;
@ -38,4 +39,11 @@ public class BaseFragmentAdapter extends BaseAdapter {
public View getView(int i, View view, ViewGroup viewGroup) { public View getView(int i, View view, ViewGroup viewGroup) {
return null; return null;
} }
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
} }

View File

@ -50,7 +50,6 @@ import android.view.inputmethod.InputMethodManager;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageButton; import android.widget.ImageButton;
@ -79,6 +78,7 @@ import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Cells.ChatAudioCell; import org.telegram.ui.Cells.ChatAudioCell;
import org.telegram.ui.Cells.ChatBaseCell; import org.telegram.ui.Cells.ChatBaseCell;
import org.telegram.ui.Cells.ChatMediaCell; import org.telegram.ui.Cells.ChatMediaCell;
@ -1643,25 +1643,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
showAttachmentError(); showAttachmentError();
return; return;
} }
String tempPath = Utilities.getPath(data.getData());
boolean isGif = false;
String originalPath = null;
if (tempPath != null && tempPath.endsWith(".gif")) {
isGif = true;
} else if (tempPath == null) {
isGif = MediaController.isGif(data.getData());
if (isGif) {
originalPath = data.toString();
tempPath = MediaController.copyDocumentToCache(data.getData(), "gif");
}
}
if (tempPath != null && isGif) {
processSendingDocument(tempPath, originalPath);
} else {
processSendingPhoto(null, data.getData()); processSendingPhoto(null, data.getData());
}
} else if (requestCode == 2) { } else if (requestCode == 2) {
String videoPath = null; String videoPath = null;
if (data != null) { if (data != null) {
@ -1701,8 +1683,8 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
showAttachmentError(); showAttachmentError();
return; return;
} }
String originalPath = null;
String tempPath = Utilities.getPath(data.getData()); String tempPath = Utilities.getPath(data.getData());
String originalPath = tempPath;
if (tempPath == null) { if (tempPath == null) {
originalPath = data.toString(); originalPath = data.toString();
tempPath = MediaController.copyDocumentToCache(data.getData(), "file"); tempPath = MediaController.copyDocumentToCache(data.getData(), "file");
@ -1750,21 +1732,17 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
} }
public void processSendingPhoto(String imageFilePath, Uri imageUri) { public void processSendingPhoto(String imageFilePath, Uri imageUri) {
if ((imageFilePath == null || imageFilePath.length() == 0) && imageUri == null) { ArrayList<String> paths = null;
return; ArrayList<Uri> uris = null;
if (imageFilePath != null && imageFilePath.length() != 0) {
paths = new ArrayList<String>();
paths.add(imageFilePath);
} }
TLRPC.TL_photo photo = MessagesController.getInstance().generatePhotoSizes(imageFilePath, imageUri); if (imageUri != null) {
if (photo != null) { uris = new ArrayList<Uri>();
String originalPath = imageFilePath; uris.add(imageUri);
if (originalPath == null && imageUri != null) {
originalPath = imageUri.toString();
}
MessagesController.getInstance().sendMessage(photo, originalPath, dialog_id);
if (chatListView != null) {
chatListView.setSelection(messages.size() + 1);
}
scrollToTopOnResume = true;
} }
processSendingPhotos(paths, uris);
} }
public void processSendingPhotos(ArrayList<String> paths, ArrayList<Uri> uris) { public void processSendingPhotos(ArrayList<String> paths, ArrayList<Uri> uris) {
@ -1782,6 +1760,8 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
ArrayList<String> sendAsDocuments = null;
ArrayList<String> sendAsDocumentsOriginal = null;
int count = !pathsCopy.isEmpty() ? pathsCopy.size() : urisCopy.size(); int count = !pathsCopy.isEmpty() ? pathsCopy.size() : urisCopy.size();
String path = null; String path = null;
Uri uri = null; Uri uri = null;
@ -1792,30 +1772,50 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
uri = urisCopy.get(a); uri = urisCopy.get(a);
} }
boolean isGif = false;
if (path != null && path.endsWith(".gif")) {
final String finalPath = path;
Utilities.RunOnUIThread(new Runnable() {
@Override
public void run() {
processSendingDocument(finalPath, null);
}
});
} else {
final TLRPC.TL_photo photo = MessagesController.getInstance().generatePhotoSizes(path, uri);
String originalPath = path; String originalPath = path;
if (originalPath == null && uri != null) { String tempPath = path;
if (tempPath == null && uri != null) {
tempPath = Utilities.getPath(uri);
originalPath = uri.toString(); originalPath = uri.toString();
} }
boolean isGif = false;
if (tempPath != null && tempPath.endsWith(".gif")) {
isGif = true;
} else if (tempPath == null && uri != null) {
isGif = MediaController.isGif(uri);
if (isGif) {
originalPath = uri.toString();
tempPath = MediaController.copyDocumentToCache(uri, "gif");
}
}
if (isGif) {
if (sendAsDocuments == null) {
sendAsDocuments = new ArrayList<String>();
sendAsDocumentsOriginal = new ArrayList<String>();
}
sendAsDocuments.add(tempPath);
sendAsDocumentsOriginal.add(originalPath);
} else {
TLRPC.TL_photo photo = (TLRPC.TL_photo)MessagesStorage.getInstance().getSentFile(originalPath, currentEncryptedChat == null ? 0 : 3);
if (photo == null && uri != null) {
photo = (TLRPC.TL_photo)MessagesStorage.getInstance().getSentFile(Utilities.getPath(uri), currentEncryptedChat == null ? 0 : 3);
}
if (photo == null) {
photo = MessagesController.getInstance().generatePhotoSizes(path, uri);
}
if (photo != null) {
final String originalPathFinal = originalPath; final String originalPathFinal = originalPath;
final TLRPC.TL_photo photoFinal = photo;
Utilities.RunOnUIThread(new Runnable() { Utilities.RunOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (photo != null) { MessagesController.getInstance().sendMessage(photoFinal, originalPathFinal, dialog_id);
MessagesController.getInstance().sendMessage(photo, originalPathFinal, dialog_id);
if (chatListView != null) { if (chatListView != null) {
chatListView.setSelection(messages.size() + 1); chatListView.setSelection(messages.size() + 1);
} }
if (paused) {
scrollToTopOnResume = true; scrollToTopOnResume = true;
} }
} }
@ -1823,34 +1823,49 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
} }
} }
} }
if (sendAsDocuments != null && !sendAsDocuments.isEmpty()) {
for (int a = 0; a < sendAsDocuments.size(); a++) {
processSendingDocumentInternal(sendAsDocuments.get(a), sendAsDocumentsOriginal.get(a));
}
}
}
}).start(); }).start();
} }
public void processSendingDocument(String documentFilePath, String originalPathOverride) { private void processSendingDocumentInternal(String path, String originalPath) {
if (documentFilePath == null || documentFilePath.length() == 0) { if (path == null || path.length() == 0) {
return; return;
} }
File f = new File(documentFilePath); final File f = new File(path);
if (!f.exists() || f.length() == 0) { if (!f.exists() || f.length() == 0) {
return; return;
} }
String name = f.getName(); String name = f.getName();
if (name == null) { if (name == null) {
name = "noname"; name = "noname";
} }
String ext = ""; String ext = "";
int idx = documentFilePath.lastIndexOf("."); int idx = path.lastIndexOf(".");
if (idx != -1) { if (idx != -1) {
ext = documentFilePath.substring(idx + 1); ext = path.substring(idx + 1);
} }
TLRPC.TL_document document = new TLRPC.TL_document(); if (originalPath != null) {
originalPath += "" + f.length();
}
TLRPC.TL_document document = (TLRPC.TL_document)MessagesStorage.getInstance().getSentFile(originalPath, currentEncryptedChat == null ? 1 : 4);
if (document == null && !path.equals(originalPath)) {
document = (TLRPC.TL_document)MessagesStorage.getInstance().getSentFile(path + f.length(), currentEncryptedChat == null ? 1 : 4);
}
if (document == null) {
document = new TLRPC.TL_document();
document.id = 0; document.id = 0;
document.user_id = UserConfig.getClientUserId(); document.user_id = UserConfig.getClientUserId();
document.date = ConnectionsManager.getInstance().getCurrentTime(); document.date = ConnectionsManager.getInstance().getCurrentTime();
document.file_name = name; document.file_name = name;
document.size = (int)f.length(); document.size = (int)f.length();
document.dc_id = 0; document.dc_id = 0;
document.path = documentFilePath;
if (ext.length() != 0) { if (ext.length() != 0) {
MimeTypeMap myMime = MimeTypeMap.getSingleton(); MimeTypeMap myMime = MimeTypeMap.getSingleton();
String mimeType = myMime.getMimeTypeFromExtension(ext.toLowerCase()); String mimeType = myMime.getMimeTypeFromExtension(ext.toLowerCase());
@ -1877,24 +1892,69 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
document.thumb = new TLRPC.TL_photoSizeEmpty(); document.thumb = new TLRPC.TL_photoSizeEmpty();
document.thumb.type = "s"; document.thumb.type = "s";
} }
MessagesController.getInstance().sendMessage(document, originalPathOverride == null ? (documentFilePath + document.size) : originalPathOverride, dialog_id); }
document.path = path;
final TLRPC.TL_document documentFinal = document;
final String originalPathFinal = originalPath;
Utilities.RunOnUIThread(new Runnable() {
@Override
public void run() {
MessagesController.getInstance().sendMessage(documentFinal, originalPathFinal, dialog_id);
if (chatListView != null) {
chatListView.setSelection(messages.size() + 1);
}
if (paused) {
scrollToTopOnResume = true;
}
}
});
}
public void processSendingDocument(String path, String originalPath) {
if (path == null || originalPath == null) {
return;
}
ArrayList<String> paths = new ArrayList<String>();
ArrayList<String> originalPaths = new ArrayList<String>();
paths.add(path);
originalPaths.add(originalPath);
processSendingDocuments(paths, originalPaths);
}
public void processSendingDocuments(final ArrayList<String> paths, final ArrayList<String> originalPaths) {
if (paths == null && originalPaths == null || paths != null && originalPaths != null && paths.size() != originalPaths.size()) {
return;
}
new Thread(new Runnable() {
@Override
public void run() {
for (int a = 0; a < paths.size(); a++) {
processSendingDocumentInternal(paths.get(a), originalPaths.get(a));
}
}
}).start();
} }
public void processSendingVideo(final String videoPath) { public void processSendingVideo(final String videoPath) {
if (videoPath == null || videoPath.length() == 0) { if (videoPath == null || videoPath.length() == 0) {
return; return;
} }
new Thread(new Runnable() {
@Override
public void run() {
TLRPC.TL_video video = (TLRPC.TL_video)MessagesStorage.getInstance().getSentFile(videoPath, currentEncryptedChat == null ? 2 : 5);
if (video == null) {
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Video.Thumbnails.MINI_KIND); Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Video.Thumbnails.MINI_KIND);
TLRPC.PhotoSize size = FileLoader.scaleAndSaveImage(thumb, 90, 90, 55, currentEncryptedChat != null); TLRPC.PhotoSize size = FileLoader.scaleAndSaveImage(thumb, 90, 90, 55, currentEncryptedChat != null);
if (size == null) { if (size == null) {
return; return;
} }
size.type = "s"; size.type = "s";
TLRPC.TL_video video = new TLRPC.TL_video(); video = new TLRPC.TL_video();
video.thumb = size; video.thumb = size;
video.caption = ""; video.caption = "";
video.id = 0; video.id = 0;
video.path = videoPath;
File temp = new File(videoPath); File temp = new File(videoPath);
if (temp != null && temp.exists()) { if (temp != null && temp.exists()) {
video.size = (int) temp.length(); video.size = (int) temp.length();
@ -1910,14 +1970,25 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
video.w = mp.getVideoWidth(); video.w = mp.getVideoWidth();
video.h = mp.getVideoHeight(); video.h = mp.getVideoHeight();
mp.release(); mp.release();
}
video.path = videoPath;
MediaStore.Video.Media media = new MediaStore.Video.Media(); final TLRPC.TL_video videoFinal = video;
MessagesController.getInstance().sendMessage(video, videoPath, dialog_id); Utilities.RunOnUIThread(new Runnable() {
@Override
public void run() {
MessagesController.getInstance().sendMessage(videoFinal, videoPath, dialog_id);
if (chatListView != null) { if (chatListView != null) {
chatListView.setSelection(messages.size() + 1); chatListView.setSelection(messages.size() + 1);
} }
if (paused) {
scrollToTopOnResume = true; scrollToTopOnResume = true;
} }
}
});
}
}).start();
}
private void removeUnreadPlane(boolean reload) { private void removeUnreadPlane(boolean reload) {
if (unreadMessageObject != null) { if (unreadMessageObject != null) {
@ -2752,7 +2823,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
MessagesController.getInstance().markDialogAsRead(dialog_id, messages.get(0).messageOwner.id, readWithMid, 0, readWithDate, true); MessagesController.getInstance().markDialogAsRead(dialog_id, messages.get(0).messageOwner.id, readWithMid, 0, readWithDate, true);
} }
fixLayout(); fixLayout(true);
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
String lastMessageText = preferences.getString("dialog_" + dialog_id, null); String lastMessageText = preferences.getString("dialog_" + dialog_id, null);
if (lastMessageText != null) { if (lastMessageText != null) {
@ -2870,7 +2941,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
MediaController.getInstance().setLastEncryptedChatParams(chatEnterTime, chatLeaveTime, currentEncryptedChat, visibleMessages); MediaController.getInstance().setLastEncryptedChatParams(chatEnterTime, chatLeaveTime, currentEncryptedChat, visibleMessages);
} }
private void fixLayout() { private void fixLayout(final boolean resume) {
final int lastPos = chatListView.getLastVisiblePosition(); final int lastPos = chatListView.getLastVisiblePosition();
ViewTreeObserver obs = chatListView.getViewTreeObserver(); ViewTreeObserver obs = chatListView.getViewTreeObserver();
obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@ -2883,7 +2954,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
return true; return true;
} }
int height = Utilities.dp(48); int height = Utilities.dp(48);
if (getParentActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getParentActivity()) && getParentActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
height = Utilities.dp(40); height = Utilities.dp(40);
selectedMessagesCountTextView.setTextSize(16); selectedMessagesCountTextView.setTextSize(16);
} else { } else {
@ -2895,7 +2966,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
params.height = height; params.height = height;
avatarImageView.setLayoutParams(params); avatarImageView.setLayoutParams(params);
} }
if (lastPos >= messages.size() - 1) { if (!resume && lastPos >= messages.size() - 1) {
chatListView.post(new Runnable() { chatListView.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -2910,7 +2981,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
@Override @Override
public void onConfigurationChanged(android.content.res.Configuration newConfig) { public void onConfigurationChanged(android.content.res.Configuration newConfig) {
fixLayout(); fixLayout(false);
} }
private View getRowParentView(View v) { private View getRowParentView(View v) {
@ -3216,7 +3287,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
@Override @Override
public void didSelectFile(DocumentSelectActivity activity, String path) { public void didSelectFile(DocumentSelectActivity activity, String path) {
activity.finishFragment(); activity.finishFragment();
processSendingDocument(path, null); processSendingDocument(path, path);
} }
@Override @Override
@ -3515,7 +3586,7 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
@Override @Override
public int getSelectedCount() { return 0; } public int getSelectedCount() { return 0; }
private class ChatAdapter extends BaseAdapter { private class ChatAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
@ -3938,14 +4009,17 @@ public class ChatActivity extends BaseFragment implements SizeNotifierRelativeLa
if (actionView != null) { if (actionView != null) {
actionView.setVisibility(View.VISIBLE); actionView.setVisibility(View.VISIBLE);
} }
Float progress = FileLoader.getInstance().fileProgresses.get(message.messageOwner.attachPath); Float progress = null;
if (message.messageOwner.attachPath != null && message.messageOwner.attachPath.length() != 0) {
progress = FileLoader.getInstance().fileProgresses.get(message.messageOwner.attachPath);
progressByTag.put((Integer)actionProgress.getTag(), message.messageOwner.attachPath);
progressBarMap.put(message.messageOwner.attachPath, actionProgress);
}
if (progress != null) { if (progress != null) {
actionProgress.setProgress((int)(progress * 100)); actionProgress.setProgress((int)(progress * 100));
} else { } else {
actionProgress.setProgress(0); actionProgress.setProgress(0);
} }
progressByTag.put((Integer)actionProgress.getTag(), message.messageOwner.attachPath);
progressBarMap.put(message.messageOwner.attachPath, actionProgress);
} }
if (actionAttachButton != null) { if (actionAttachButton != null) {
actionAttachButton.setVisibility(View.GONE); actionAttachButton.setVisibility(View.GONE);

View File

@ -8,24 +8,16 @@
package org.telegram.ui; package org.telegram.ui;
import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -41,13 +33,13 @@ import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.objects.MessageObject; import org.telegram.objects.MessageObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Cells.ChatOrUserCell; import org.telegram.ui.Cells.ChatOrUserCell;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.AvatarUpdater; import org.telegram.ui.Views.AvatarUpdater;
import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.BackupImageView;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
import org.telegram.ui.Views.ColorPickerView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -71,9 +63,6 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
private int avatarRow; private int avatarRow;
private int settingsSectionRow; private int settingsSectionRow;
private int settingsNotificationsRow; private int settingsNotificationsRow;
private int settingsVibrateRow;
private int settingsLedRow;
private int settingsSoundRow;
private int sharedMediaSectionRow; private int sharedMediaSectionRow;
private int sharedMediaRow; private int sharedMediaRow;
private int membersSectionRow; private int membersSectionRow;
@ -142,9 +131,6 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
avatarRow = rowCount++; avatarRow = rowCount++;
settingsSectionRow = rowCount++; settingsSectionRow = rowCount++;
settingsNotificationsRow = rowCount++; settingsNotificationsRow = rowCount++;
settingsVibrateRow = rowCount++;
settingsLedRow = rowCount++;
settingsSoundRow = rowCount++;
sharedMediaSectionRow = rowCount++; sharedMediaSectionRow = rowCount++;
sharedMediaRow = rowCount++; sharedMediaRow = rowCount++;
if (info != null && !(info instanceof TLRPC.TL_chatParticipantsForbidden)) { if (info != null && !(info instanceof TLRPC.TL_chatParticipantsForbidden)) {
@ -239,36 +225,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
if (i == settingsSoundRow) { if (i == sharedMediaRow) {
try {
Intent tmpIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
Uri currentSound = null;
String defaultPath = null;
Uri defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
if (defaultUri != null) {
defaultPath = defaultUri.getPath();
}
String path = preferences.getString("sound_chat_path_" + chat_id, defaultPath);
if (path != null && !path.equals("NoSound")) {
if (path.equals(defaultPath)) {
currentSound = defaultUri;
} else {
currentSound = Uri.parse(path);
}
}
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentSound);
getParentActivity().startActivityForResult(tmpIntent, 3);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
} else if (i == sharedMediaRow) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("dialog_id", -chat_id); args.putLong("dialog_id", -chat_id);
presentFragment(new MediaActivity(args)); presentFragment(new MediaActivity(args));
@ -282,84 +239,10 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt("user_id", user_id); args.putInt("user_id", user_id);
presentFragment(new UserProfileActivity(args)); presentFragment(new UserProfileActivity(args));
} else if (i == settingsVibrateRow || i == settingsNotificationsRow) {
if (getParentActivity() == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setItems(new CharSequence[] {
LocaleController.getString("Default", R.string.Default),
LocaleController.getString("Enabled", R.string.Enabled),
LocaleController.getString("Disabled", R.string.Disabled)
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (i == settingsVibrateRow) {
editor.putInt("vibrate_" + (-chat_id), which);
} else if (i == settingsNotificationsRow) { } else if (i == settingsNotificationsRow) {
editor.putInt("notify2_" + (-chat_id), which); Bundle args = new Bundle();
} args.putLong("dialog_id", -chat_id);
editor.commit(); presentFragment(new ProfileNotificationsActivity(args));
if (listView != null) {
listView.invalidateViews();
}
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
showAlertDialog(builder);
} else if (i == settingsLedRow) {
if (getParentActivity() == null) {
return;
}
LayoutInflater li = (LayoutInflater)getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_color_dialog_layout, null, false);
final ColorPickerView colorPickerView = (ColorPickerView)view.findViewById(R.id.color_picker);
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if (preferences.contains("color_" + (-chat_id))) {
colorPickerView.setOldCenterColor(preferences.getInt("color_" + (-chat_id), 0xff00ff00));
} else {
colorPickerView.setOldCenterColor(preferences.getInt("GroupLed", 0xff00ff00));
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("LedColor", R.string.LedColor));
builder.setView(view);
builder.setPositiveButton(LocaleController.getString("Set", R.string.Set), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("color_" + (-chat_id), colorPickerView.getColor());
editor.commit();
listView.invalidateViews();
}
});
builder.setNeutralButton(LocaleController.getString("Disabled", R.string.Disabled), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("color_" + (-chat_id), 0);
editor.commit();
listView.invalidateViews();
}
});
builder.setNegativeButton(LocaleController.getString("Default", R.string.Default), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.remove("color_" + (-chat_id));
editor.commit();
listView.invalidateViews();
}
});
showAlertDialog(builder);
} }
} }
}); });
@ -377,41 +260,6 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
MessagesController.getInstance().addUserToChat(chat_id, user, info); MessagesController.getInstance().addUserToChat(chat_id, user, info);
} }
@Override
public void onActivityResultFragment(int requestCode, int resultCode, Intent data) {
avatarUpdater.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 3) {
Uri ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
String name = null;
if (ringtone != null) {
Ringtone rng = RingtoneManager.getRingtone(getParentActivity(), ringtone);
if (rng != null) {
if(ringtone.equals(Settings.System.DEFAULT_NOTIFICATION_URI)) {
name = LocaleController.getString("Default", R.string.Default);
} else {
name = rng.getTitle(getParentActivity());
}
rng.stop();
}
}
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (name != null && ringtone != null) {
editor.putString("sound_chat_" + chat_id, name);
editor.putString("sound_chat_path_" + chat_id, ringtone.toString());
} else {
editor.putString("sound_chat_" + chat_id, "NoSound");
editor.putString("sound_chat_path_" + chat_id, "NoSound");
}
editor.commit();
listView.invalidateViews();
}
}
}
@Override @Override
public void saveSelfArgs(Bundle args) { public void saveSelfArgs(Bundle args) {
if (avatarUpdater != null && avatarUpdater.currentPicturePath != null) { if (avatarUpdater != null && avatarUpdater.currentPicturePath != null) {
@ -630,7 +478,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {
@ -644,7 +492,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
@Override @Override
public boolean isEnabled(int i) { public boolean isEnabled(int i) {
return i == settingsNotificationsRow || i == settingsSoundRow || i == sharedMediaRow || i == addMemberRow || i > membersSectionRow && i < membersEndRow || i == settingsVibrateRow || i == settingsLedRow; return i == settingsNotificationsRow || i == sharedMediaRow || i == addMemberRow || i > membersSectionRow && i < membersEndRow;
} }
@Override @Override
@ -792,30 +640,6 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
detailTextView.setText(String.format("%d", totalMediaCount)); detailTextView.setText(String.format("%d", totalMediaCount));
} }
divider.setVisibility(View.INVISIBLE); divider.setVisibility(View.INVISIBLE);
} else if (i == settingsVibrateRow) {
textView.setText(LocaleController.getString("Vibrate", R.string.Vibrate));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
int value = preferences.getInt("vibrate_" + (-chat_id), 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
} else if (i == settingsNotificationsRow) {
textView.setText(LocaleController.getString("Notifications", R.string.Notifications));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
int value = preferences.getInt("notify2_" + (-chat_id), 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
} }
} else if (type == 3) { } else if (type == 3) {
TLRPC.TL_chatParticipant part = info.participants.get(sortedUsers.get(i - membersSectionRow - 1)); TLRPC.TL_chatParticipant part = info.participants.get(sortedUsers.get(i - membersSectionRow - 1));
@ -828,12 +652,6 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
} }
((ChatOrUserCell)view).setData(user, null, null, null, null); ((ChatOrUserCell)view).setData(user, null, null, null, null);
// if (info.admin_id != UserConfig.clientUserId && part.inviter_id != UserConfig.clientUserId && part.user_id != UserConfig.clientUserId) {
//
// } else {
//
// }
} else if (type == 4) { } else if (type == 4) {
if (view == null) { if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@ -870,39 +688,14 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
} else if (type == 6) { } else if (type == 6) {
if (view == null) { if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_detail_layout, viewGroup, false); view = li.inflate(R.layout.settings_row_button_layout, viewGroup, false);
} }
TextView textView = (TextView)view.findViewById(R.id.settings_row_text); TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
TextView detailTextView = (TextView)view.findViewById(R.id.settings_row_text_detail);
View divider = view.findViewById(R.id.settings_row_divider); View divider = view.findViewById(R.id.settings_row_divider);
if (i == settingsSoundRow) { if (i == settingsNotificationsRow) {
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); textView.setText(LocaleController.getString("NotificationsAndSounds", R.string.NotificationsAndSounds));
String name = preferences.getString("sound_chat_" + chat_id, LocaleController.getString("Default", R.string.Default));
if (name.equals("NoSound")) {
detailTextView.setText(LocaleController.getString("NoSound", R.string.NoSound));
} else {
detailTextView.setText(name);
}
textView.setText(LocaleController.getString("Sound", R.string.Sound));
divider.setVisibility(View.INVISIBLE); divider.setVisibility(View.INVISIBLE);
} }
} else if (type == 7) {
if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_color_layout, viewGroup, false);
}
TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
View colorView = view.findViewById(R.id.settings_color);
View divider = view.findViewById(R.id.settings_row_divider);
textView.setText(LocaleController.getString("LedColor", R.string.LedColor));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if (preferences.contains("color_" + (-chat_id))) {
colorView.setBackgroundColor(preferences.getInt("color_" + (-chat_id), 0xff00ff00));
} else {
colorView.setBackgroundColor(preferences.getInt("GroupLed", 0xff00ff00));
}
divider.setVisibility(View.VISIBLE);
} }
return view; return view;
} }
@ -913,25 +706,23 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
return 0; return 0;
} else if (i == settingsSectionRow || i == sharedMediaSectionRow || i == membersSectionRow) { } else if (i == settingsSectionRow || i == sharedMediaSectionRow || i == membersSectionRow) {
return 1; return 1;
} else if (i == sharedMediaRow || i == settingsVibrateRow || i == settingsNotificationsRow) { } else if (i == sharedMediaRow) {
return 2; return 2;
} else if (i == settingsSoundRow) {
return 6;
} else if (i == addMemberRow) { } else if (i == addMemberRow) {
return 4; return 4;
} else if (i == leaveGroupRow) { } else if (i == leaveGroupRow) {
return 5; return 5;
} else if (i > membersSectionRow && i < membersEndRow) { } else if (i > membersSectionRow && i < membersEndRow) {
return 3; return 3;
} else if (i == settingsLedRow) { } else if (i == settingsNotificationsRow) {
return 7; return 6;
} }
return 0; return 0;
} }
@Override @Override
public int getViewTypeCount() { public int getViewTypeCount() {
return 8; return 7;
} }
@Override @Override

View File

@ -22,6 +22,7 @@ import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController; import org.telegram.messenger.LocaleController;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem; import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
@ -321,7 +322,7 @@ public class CountrySelectActivity extends BaseFragment {
}); });
} }
private class SearchAdapter extends BaseAdapter { private class SearchAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public SearchAdapter(Context context) { public SearchAdapter(Context context) {

View File

@ -20,7 +20,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -28,6 +27,7 @@ import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController; import org.telegram.messenger.LocaleController;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem; import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
@ -387,7 +387,7 @@ public class DocumentSelectActivity extends BaseFragment {
return LocaleController.formatString("FreeOfTotal", R.string.FreeOfTotal, Utilities.formatFileSize(free), Utilities.formatFileSize(total)); return LocaleController.formatString("FreeOfTotal", R.string.FreeOfTotal, Utilities.formatFileSize(free), Utilities.formatFileSize(total));
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -10,6 +10,7 @@ package org.telegram.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.database.DataSetObserver;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerAdapter;
@ -283,5 +284,12 @@ public class IntroActivity extends Activity {
@Override @Override
public void startUpdate(View arg0) { public void startUpdate(View arg0) {
} }
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
} }
} }

View File

@ -16,7 +16,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -25,6 +24,7 @@ import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController; import org.telegram.messenger.LocaleController;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem; import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
@ -35,11 +35,11 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
public class LanguageSelectActivity extends BaseFragment { public class LanguageSelectActivity extends BaseFragment {
private BaseAdapter listAdapter; private BaseFragmentAdapter listAdapter;
private ListView listView; private ListView listView;
private boolean searchWas; private boolean searchWas;
private boolean searching; private boolean searching;
private BaseAdapter searchListViewAdapter; private BaseFragmentAdapter searchListViewAdapter;
private TextView emptyTextView; private TextView emptyTextView;
private Timer searchTimer; private Timer searchTimer;
@ -265,7 +265,7 @@ public class LanguageSelectActivity extends BaseFragment {
}); });
} }
private class SearchAdapter extends BaseAdapter { private class SearchAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public SearchAdapter(Context context) { public SearchAdapter(Context context) {
@ -341,7 +341,7 @@ public class LanguageSelectActivity extends BaseFragment {
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -30,7 +30,6 @@ import org.telegram.PhoneFormat.PhoneFormat;
import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.ConnectionsManager;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController; import org.telegram.messenger.LocaleController;
import org.telegram.messenger.MediaController;
import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesController;
import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R; import org.telegram.messenger.R;
@ -51,12 +50,11 @@ import java.util.Map;
public class LaunchActivity extends ActionBarActivity implements NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate { public class LaunchActivity extends ActionBarActivity implements NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate {
private boolean finished = false; private boolean finished = false;
private NotificationView notificationView; private NotificationView notificationView;
private Uri photoPath = null;
private String videoPath = null; private String videoPath = null;
private String sendingText = null; private String sendingText = null;
private String documentPath = null; private ArrayList<Uri> photoPathsArray = null;
private ArrayList<Uri> imagesPathArray = null; private ArrayList<String> documentsPathsArray = null;
private ArrayList<String> documentsPathArray = null; private ArrayList<String> documentsOriginalPathsArray = null;
private ArrayList<TLRPC.User> contactsToSend = null; private ArrayList<TLRPC.User> contactsToSend = null;
private int currentConnectionState; private int currentConnectionState;
@ -162,15 +160,14 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
Integer push_enc_id = 0; Integer push_enc_id = 0;
Integer open_settings = 0; Integer open_settings = 0;
photoPath = null; photoPathsArray = null;
videoPath = null; videoPath = null;
sendingText = null; sendingText = null;
documentPath = null; documentsPathsArray = null;
imagesPathArray = null; documentsOriginalPathsArray = null;
documentsPathArray = null; contactsToSend = null;
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
if (intent != null && intent.getAction() != null && !restore) { if (intent != null && intent.getAction() != null && !restore) {
if (Intent.ACTION_SEND.equals(intent.getAction())) { if (Intent.ACTION_SEND.equals(intent.getAction())) {
boolean error = false; boolean error = false;
@ -273,19 +270,10 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
Uri uri = (Uri) parcelable; Uri uri = (Uri) parcelable;
if (uri != null && type != null && type.startsWith("image/")) { if (uri != null && type != null && type.startsWith("image/")) {
String tempPath = Utilities.getPath(uri); String tempPath = Utilities.getPath(uri);
boolean isGif = false; if (photoPathsArray == null) {
if (tempPath != null && tempPath.endsWith(".gif")) { photoPathsArray = new ArrayList<Uri>();
isGif = true;
documentPath = tempPath;
} else if (tempPath == null) {
isGif = MediaController.isGif(uri);
if (isGif) {
documentPath = MediaController.copyDocumentToCache(uri, "gif");
}
}
if (!isGif || documentPath == null) {
photoPath = uri;
} }
photoPathsArray.add(uri);
} else { } else {
path = Utilities.getPath(uri); path = Utilities.getPath(uri);
if (path != null) { if (path != null) {
@ -295,7 +283,12 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
if (type != null && type.startsWith("video/")) { if (type != null && type.startsWith("video/")) {
videoPath = path; videoPath = path;
} else { } else {
documentPath = path; if (documentsPathsArray == null) {
documentsPathsArray = new ArrayList<String>();
documentsOriginalPathsArray = new ArrayList<String>();
}
documentsPathsArray.add(path);
documentsOriginalPathsArray.add(uri.toString());
} }
} else { } else {
error = true; error = true;
@ -317,32 +310,10 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
parcelable = Uri.parse(parcelable.toString()); parcelable = Uri.parse(parcelable.toString());
} }
Uri uri = (Uri) parcelable; Uri uri = (Uri) parcelable;
String tempPath = Utilities.getPath(uri); if (photoPathsArray == null) {
photoPathsArray = new ArrayList<Uri>();
boolean isGif = false;
if (tempPath != null && tempPath.endsWith(".gif")) {
isGif = true;
} else if (tempPath == null) {
isGif = MediaController.isGif(uri);
if (isGif) {
tempPath = MediaController.copyDocumentToCache(uri, "gif");
}
}
if (isGif && tempPath != null) {
if (documentsPathArray == null) {
documentsPathArray = new ArrayList<String>();
}
try {
documentsPathArray.add(tempPath);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
} else {
if (imagesPathArray == null) {
imagesPathArray = new ArrayList<Uri>();
}
imagesPathArray.add(uri);
} }
photoPathsArray.add(uri);
} }
} else { } else {
for (Parcelable parcelable : uris) { for (Parcelable parcelable : uris) {
@ -350,14 +321,20 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
parcelable = Uri.parse(parcelable.toString()); parcelable = Uri.parse(parcelable.toString());
} }
String path = Utilities.getPath((Uri) parcelable); String path = Utilities.getPath((Uri) parcelable);
String originalPath = parcelable.toString();
if (originalPath == null) {
originalPath = path;
}
if (path != null) { if (path != null) {
if (path.startsWith("file:")) { if (path.startsWith("file:")) {
path = path.replace("file://", ""); path = path.replace("file://", "");
} }
if (documentsPathArray == null) { if (documentsPathsArray == null) {
documentsPathArray = new ArrayList<String>(); documentsPathsArray = new ArrayList<String>();
documentsOriginalPathsArray = new ArrayList<String>();
} }
documentsPathArray.add(path); documentsPathsArray.add(path);
documentsOriginalPathsArray.add(originalPath);
} }
} }
} }
@ -442,7 +419,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
pushOpened = true; pushOpened = true;
} }
} }
if (videoPath != null || photoPath != null || sendingText != null || documentPath != null || documentsPathArray != null || imagesPathArray != null || contactsToSend != null) { if (videoPath != null || photoPathsArray != null || sendingText != null || documentsPathsArray != null || contactsToSend != null) {
NotificationCenter.getInstance().postNotificationName(MessagesController.closeChats); NotificationCenter.getInstance().postNotificationName(MessagesController.closeChats);
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putBoolean("onlySelect", true); args.putBoolean("onlySelect", true);
@ -488,37 +465,29 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
} }
ChatActivity fragment = new ChatActivity(args); ChatActivity fragment = new ChatActivity(args);
presentFragment(fragment, true); presentFragment(fragment, true);
if (photoPath != null) {
fragment.processSendingPhoto(null, photoPath);
}
if (videoPath != null) { if (videoPath != null) {
fragment.processSendingVideo(videoPath); fragment.processSendingVideo(videoPath);
} }
if (sendingText != null) { if (sendingText != null) {
fragment.processSendingText(sendingText); fragment.processSendingText(sendingText);
} }
if (documentPath != null) { if (photoPathsArray != null) {
fragment.processSendingDocument(documentPath, null); fragment.processSendingPhotos(null, photoPathsArray);
}
if (imagesPathArray != null) {
fragment.processSendingPhotos(null, imagesPathArray);
}
if (documentsPathArray != null) {
for (String path : documentsPathArray) {
fragment.processSendingDocument(path, null);
} }
if (documentsPathsArray != null) {
fragment.processSendingDocuments(documentsPathsArray, documentsOriginalPathsArray);
} }
if (contactsToSend != null && !contactsToSend.isEmpty()) { if (contactsToSend != null && !contactsToSend.isEmpty()) {
for (TLRPC.User user : contactsToSend) { for (TLRPC.User user : contactsToSend) {
MessagesController.getInstance().sendMessage(user, dialog_id); MessagesController.getInstance().sendMessage(user, dialog_id);
} }
} }
photoPath = null;
photoPathsArray = null;
videoPath = null; videoPath = null;
sendingText = null; sendingText = null;
documentPath = null; documentsPathsArray = null;
imagesPathArray = null; documentsOriginalPathsArray = null;
documentsPathArray = null;
contactsToSend = null; contactsToSend = null;
} }
} }
@ -602,7 +571,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
int rotation = manager.getDefaultDisplay().getRotation(); int rotation = manager.getDefaultDisplay().getRotation();
int height = Utilities.dp(48); int height = Utilities.dp(48);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(this) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
height = Utilities.dp(40); height = Utilities.dp(40);
} }
notificationView.applyOrientationPaddings(rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90, height); notificationView.applyOrientationPaddings(rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90, height);

View File

@ -20,7 +20,6 @@ import android.view.ViewTreeObserver;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView; import android.widget.GridView;
import android.widget.TextView; import android.widget.TextView;
@ -32,6 +31,7 @@ import org.telegram.messenger.MessagesController;
import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.objects.PhotoObject; import org.telegram.objects.PhotoObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.BackupImageView;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
@ -347,7 +347,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -17,7 +17,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -33,6 +32,7 @@ import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Cells.ChatOrUserCell; import org.telegram.ui.Cells.ChatOrUserCell;
import org.telegram.ui.Cells.DialogCell; import org.telegram.ui.Cells.DialogCell;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
@ -558,7 +558,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
} }
} }
private class MessagesAdapter extends BaseAdapter { private class MessagesAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public MessagesAdapter(Context context) { public MessagesAdapter(Context context) {

View File

@ -18,7 +18,6 @@ import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.GridView; import android.widget.GridView;
import android.widget.ImageView; import android.widget.ImageView;
@ -32,6 +31,7 @@ import org.telegram.messenger.R;
import org.telegram.messenger.TLRPC; import org.telegram.messenger.TLRPC;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.objects.MessageObject; import org.telegram.objects.MessageObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
@ -441,7 +441,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -1723,7 +1723,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
if (velocityTracker != null) { if (velocityTracker != null) {
velocityTracker.addMovement(ev); velocityTracker.addMovement(ev);
} }
if (canDragDown && !draggingDown && scale == 1 && Math.abs(ev.getY() - dragY) >= Utilities.dp(30)) { float dx = Math.abs(ev.getX() - moveStartX);
float dy = Math.abs(ev.getY() - dragY);
if (canDragDown && !draggingDown && scale == 1 && dy >= Utilities.dp(30) && dy / 2 > dx) {
draggingDown = true; draggingDown = true;
moving = false; moving = false;
dragY = ev.getY(); dragY = ev.getY();

View File

@ -0,0 +1,392 @@
/*
* This is the source code of Telegram for Android v. 1.4.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;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.R;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.BaseFragment;
import org.telegram.ui.Views.ColorPickerView;
public class ProfileNotificationsActivity extends BaseFragment {
private ListView listView;
private long dialog_id;
private int settingsNotificationsRow;
private int settingsVibrateRow;
private int settingsSoundRow;
private int settingsLedRow;
private int rowCount = 0;
public ProfileNotificationsActivity(Bundle args) {
super(args);
dialog_id = args.getLong("dialog_id");
}
@Override
public void onFragmentDestroy() {
super.onFragmentDestroy();
}
@Override
public boolean onFragmentCreate() {
settingsNotificationsRow = rowCount++;
settingsVibrateRow = rowCount++;
settingsLedRow = rowCount++;
settingsSoundRow = rowCount++;
return super.onFragmentCreate();
}
@Override
public View createView(LayoutInflater inflater, ViewGroup container) {
if (fragmentView == null) {
actionBarLayer.setDisplayHomeAsUpEnabled(true, R.drawable.ic_ab_back);
actionBarLayer.setBackOverlay(R.layout.updating_state_layout);
actionBarLayer.setTitle(LocaleController.getString("NotificationsAndSounds", R.string.NotificationsAndSounds));
actionBarLayer.setActionBarMenuOnItemClick(new ActionBarLayer.ActionBarMenuOnItemClick() {
@Override
public void onItemClick(int id) {
if (id == -1) {
finishFragment();
}
}
});
fragmentView = inflater.inflate(R.layout.settings_layout, container, false);
listView = (ListView)fragmentView.findViewById(R.id.listView);
listView.setAdapter(new ListAdapter(getParentActivity()));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
if (i == settingsVibrateRow || i == settingsNotificationsRow) {
if (getParentActivity() == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setItems(new CharSequence[] {
LocaleController.getString("Default", R.string.Default),
LocaleController.getString("Enabled", R.string.Enabled),
LocaleController.getString("Disabled", R.string.Disabled)
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (i == settingsVibrateRow) {
editor.putInt("vibrate_" + dialog_id, which);
} else if (i == settingsNotificationsRow) {
editor.putInt("notify2_" + dialog_id, which);
}
editor.commit();
if (listView != null) {
listView.invalidateViews();
}
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
showAlertDialog(builder);
} else if (i == settingsSoundRow) {
try {
Intent tmpIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
Uri currentSound = null;
String defaultPath = null;
Uri defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
if (defaultUri != null) {
defaultPath = defaultUri.getPath();
}
String path = preferences.getString("sound_path_" + dialog_id, defaultPath);
if (path != null && !path.equals("NoSound")) {
if (path.equals(defaultPath)) {
currentSound = defaultUri;
} else {
currentSound = Uri.parse(path);
}
}
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentSound);
getParentActivity().startActivityForResult(tmpIntent, 12);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
} else if (i == settingsLedRow) {
if (getParentActivity() == null) {
return;
}
LayoutInflater li = (LayoutInflater)getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_color_dialog_layout, null, false);
final ColorPickerView colorPickerView = (ColorPickerView)view.findViewById(R.id.color_picker);
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if (preferences.contains("color_" + dialog_id)) {
colorPickerView.setOldCenterColor(preferences.getInt("color_" + dialog_id, 0xff00ff00));
} else {
if ((int)dialog_id < 0) {
colorPickerView.setOldCenterColor(preferences.getInt("GroupLed", 0xff00ff00));
} else {
colorPickerView.setOldCenterColor(preferences.getInt("MessagesLed", 0xff00ff00));
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("LedColor", R.string.LedColor));
builder.setView(view);
builder.setPositiveButton(LocaleController.getString("Set", R.string.Set), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("color_" + dialog_id, colorPickerView.getColor());
editor.commit();
listView.invalidateViews();
}
});
builder.setNeutralButton(LocaleController.getString("Disabled", R.string.Disabled), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("color_" + dialog_id, 0);
editor.commit();
listView.invalidateViews();
}
});
builder.setNegativeButton(LocaleController.getString("Default", R.string.Default), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.remove("color_" + dialog_id);
editor.commit();
listView.invalidateViews();
}
});
showAlertDialog(builder);
}
}
});
} else {
ViewGroup parent = (ViewGroup)fragmentView.getParent();
if (parent != null) {
parent.removeView(fragmentView);
}
}
return fragmentView;
}
@Override
public void onActivityResultFragment(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (data == null) {
return;
}
Uri ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
String name = null;
if (ringtone != null) {
Ringtone rng = RingtoneManager.getRingtone(ApplicationLoader.applicationContext, ringtone);
if (rng != null) {
if(ringtone.equals(Settings.System.DEFAULT_NOTIFICATION_URI)) {
name = LocaleController.getString("Default", R.string.Default);
} else {
name = rng.getTitle(getParentActivity());
}
rng.stop();
}
}
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (requestCode == 12) {
if (name != null && ringtone != null) {
editor.putString("sound_" + dialog_id, name);
editor.putString("sound_path_" + dialog_id, ringtone.toString());
} else {
editor.putString("sound_" + dialog_id, "NoSound");
editor.putString("sound_path_" + dialog_id, "NoSound");
}
}
editor.commit();
listView.invalidateViews();
}
}
private class ListAdapter extends BaseFragmentAdapter {
private Context mContext;
public ListAdapter(Context context) {
mContext = context;
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int i) {
return true;
}
@Override
public int getCount() {
return rowCount;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type = getItemViewType(i);
if (type == 0) {
if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.user_profile_leftright_row_layout, viewGroup, false);
}
TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
TextView detailTextView = (TextView)view.findViewById(R.id.settings_row_text_detail);
View divider = view.findViewById(R.id.settings_row_divider);
if (i == settingsVibrateRow) {
textView.setText(LocaleController.getString("Vibrate", R.string.Vibrate));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
int value = preferences.getInt("vibrate_" + dialog_id, 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
} else if (i == settingsNotificationsRow) {
textView.setText(LocaleController.getString("Notifications", R.string.Notifications));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
int value = preferences.getInt("notify2_" + dialog_id, 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
}
} if (type == 1) {
if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_detail_layout, viewGroup, false);
}
TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
TextView detailTextView = (TextView)view.findViewById(R.id.settings_row_text_detail);
View divider = view.findViewById(R.id.settings_row_divider);
if (i == settingsSoundRow) {
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
String name = preferences.getString("sound_" + dialog_id, LocaleController.getString("Default", R.string.Default));
if (name.equals("NoSound")) {
detailTextView.setText(LocaleController.getString("NoSound", R.string.NoSound));
} else {
detailTextView.setText(name);
}
textView.setText(LocaleController.getString("Sound", R.string.Sound));
divider.setVisibility(View.INVISIBLE);
}
} else if (type == 2) {
if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_color_layout, viewGroup, false);
}
TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
View colorView = view.findViewById(R.id.settings_color);
View divider = view.findViewById(R.id.settings_row_divider);
textView.setText(LocaleController.getString("LedColor", R.string.LedColor));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if (preferences.contains("color_" + dialog_id)) {
colorView.setBackgroundColor(preferences.getInt("color_" + dialog_id, 0xff00ff00));
} else {
if ((int)dialog_id < 0) {
colorView.setBackgroundColor(preferences.getInt("GroupLed", 0xff00ff00));
} else {
colorView.setBackgroundColor(preferences.getInt("MessagesLed", 0xff00ff00));
}
}
divider.setVisibility(View.VISIBLE);
}
return view;
}
@Override
public int getItemViewType(int i) {
if (i == settingsNotificationsRow || i == settingsVibrateRow) {
return 0;
} else if (i == settingsSoundRow) {
return 1;
} else if (i == settingsLedRow) {
return 2;
}
return 0;
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public boolean isEmpty() {
return false;
}
}
}

View File

@ -28,7 +28,6 @@ import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
@ -53,6 +52,7 @@ import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.objects.MessageObject; import org.telegram.objects.MessageObject;
import org.telegram.objects.PhotoObject; import org.telegram.objects.PhotoObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.AvatarUpdater; import org.telegram.ui.Views.AvatarUpdater;
import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.BackupImageView;
@ -636,7 +636,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -16,7 +16,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -30,6 +29,7 @@ import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.RPCRequest; import org.telegram.messenger.RPCRequest;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Cells.ChatOrUserCell; import org.telegram.ui.Cells.ChatOrUserCell;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
@ -276,7 +276,7 @@ public class SettingsBlockedUsers extends BaseFragment implements NotificationCe
}, null, true, RPCRequest.RPCRequestClassGeneric); }, null, true, RPCRequest.RPCRequestClassGeneric);
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -22,7 +22,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -37,6 +36,7 @@ import org.telegram.messenger.MessagesController;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.RPCRequest; import org.telegram.messenger.RPCRequest;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
import org.telegram.ui.Views.ColorPickerView; import org.telegram.ui.Views.ColorPickerView;
@ -396,7 +396,7 @@ public class SettingsNotificationsActivity extends BaseFragment {
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -24,7 +24,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -42,6 +41,7 @@ import org.telegram.messenger.R;
import org.telegram.messenger.RPCRequest; import org.telegram.messenger.RPCRequest;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.objects.PhotoObject; import org.telegram.objects.PhotoObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.BackupImageView;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
import org.telegram.ui.Views.HorizontalListView; import org.telegram.ui.Views.HorizontalListView;
@ -111,7 +111,14 @@ public class SettingsWallpapersActivity extends BaseFragment implements Notifica
boolean done; boolean done;
TLRPC.WallPaper wallPaper = wallpappersByIds.get(selectedBackground); TLRPC.WallPaper wallPaper = wallpappersByIds.get(selectedBackground);
if (wallPaper != null && wallPaper.id != 1000001 && wallPaper instanceof TLRPC.TL_wallPaper) { if (wallPaper != null && wallPaper.id != 1000001 && wallPaper instanceof TLRPC.TL_wallPaper) {
TLRPC.PhotoSize size = PhotoObject.getClosestPhotoSizeWithSize(wallPaper.sizes, Utilities.dp(320), Utilities.dp(480)); int width = Utilities.displaySize.x;
int height = Utilities.displaySize.y;
if (width > height) {
int temp = width;
width = height;
height = temp;
}
TLRPC.PhotoSize size = PhotoObject.getClosestPhotoSizeWithSize(wallPaper.sizes, width, height);
String fileName = size.location.volume_id + "_" + size.location.local_id + ".jpg"; String fileName = size.location.volume_id + "_" + size.location.local_id + ".jpg";
File f = new File(Utilities.getCacheDir(), fileName); File f = new File(Utilities.getCacheDir(), fileName);
File toFile = new File(ApplicationLoader.applicationContext.getFilesDir(), "wallpaper.jpg"); File toFile = new File(ApplicationLoader.applicationContext.getFilesDir(), "wallpaper.jpg");
@ -254,7 +261,14 @@ public class SettingsWallpapersActivity extends BaseFragment implements Notifica
private void processSelectedBackground() { private void processSelectedBackground() {
TLRPC.WallPaper wallPaper = wallpappersByIds.get(selectedBackground); TLRPC.WallPaper wallPaper = wallpappersByIds.get(selectedBackground);
if (selectedBackground != -1 && selectedBackground != 1000001 && wallPaper != null && wallPaper instanceof TLRPC.TL_wallPaper) { if (selectedBackground != -1 && selectedBackground != 1000001 && wallPaper != null && wallPaper instanceof TLRPC.TL_wallPaper) {
TLRPC.PhotoSize size = PhotoObject.getClosestPhotoSizeWithSize(wallPaper.sizes, Utilities.dp(320), Utilities.dp(480)); int width = Utilities.displaySize.x;
int height = Utilities.displaySize.y;
if (width > height) {
int temp = width;
width = height;
height = temp;
}
TLRPC.PhotoSize size = PhotoObject.getClosestPhotoSizeWithSize(wallPaper.sizes, width, height);
String fileName = size.location.volume_id + "_" + size.location.local_id + ".jpg"; String fileName = size.location.volume_id + "_" + size.location.local_id + ".jpg";
File f = new File(Utilities.getCacheDir(), fileName); File f = new File(Utilities.getCacheDir(), fileName);
if (!f.exists()) { if (!f.exists()) {
@ -435,7 +449,7 @@ public class SettingsWallpapersActivity extends BaseFragment implements Notifica
fixLayout(); fixLayout();
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {

View File

@ -8,23 +8,17 @@
package org.telegram.ui; package org.telegram.ui;
import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
@ -43,12 +37,12 @@ import org.telegram.messenger.R;
import org.telegram.messenger.RPCRequest; import org.telegram.messenger.RPCRequest;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.objects.MessageObject; import org.telegram.objects.MessageObject;
import org.telegram.ui.Adapters.BaseFragmentAdapter;
import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarLayer;
import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenu;
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem; import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.BackupImageView;
import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.ActionBar.BaseFragment;
import org.telegram.ui.Views.ColorPickerView;
import org.telegram.ui.Views.IdenticonView; import org.telegram.ui.Views.IdenticonView;
import java.util.ArrayList; import java.util.ArrayList;
@ -76,11 +70,8 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
private int settingsTimerRow; private int settingsTimerRow;
private int settingsKeyRow; private int settingsKeyRow;
private int settingsNotificationsRow; private int settingsNotificationsRow;
private int settingsVibrateRow;
private int settingsSoundRow;
private int sharedMediaSectionRow; private int sharedMediaSectionRow;
private int sharedMediaRow; private int sharedMediaRow;
private int settingsLedRow;
private int rowCount = 0; private int rowCount = 0;
public UserProfileActivity(Bundle args) { public UserProfileActivity(Bundle args) {
@ -127,9 +118,6 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
settingsKeyRow = -1; settingsKeyRow = -1;
} }
settingsNotificationsRow = rowCount++; settingsNotificationsRow = rowCount++;
settingsVibrateRow = rowCount++;
settingsLedRow = rowCount++;
settingsSoundRow = rowCount++;
sharedMediaSectionRow = rowCount++; sharedMediaSectionRow = rowCount++;
sharedMediaRow = rowCount++; sharedMediaRow = rowCount++;
} }
@ -254,72 +242,7 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
if (i == settingsVibrateRow || i == settingsNotificationsRow) { if (i == sharedMediaRow) {
if (getParentActivity() == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setItems(new CharSequence[] {
LocaleController.getString("Default", R.string.Default),
LocaleController.getString("Enabled", R.string.Enabled),
LocaleController.getString("Disabled", R.string.Disabled)
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (i == settingsVibrateRow) {
if (dialog_id == 0) {
editor.putInt("vibrate_" + user_id, which);
} else {
editor.putInt("vibrate_" + dialog_id, which);
}
} else if (i == settingsNotificationsRow) {
if (dialog_id == 0) {
editor.putInt("notify2_" + user_id, which);
} else {
editor.putInt("notify2_" + dialog_id, which);
}
}
editor.commit();
if (listView != null) {
listView.invalidateViews();
}
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
showAlertDialog(builder);
} else if (i == settingsSoundRow) {
try {
Intent tmpIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
Uri currentSound = null;
String defaultPath = null;
Uri defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
if (defaultUri != null) {
defaultPath = defaultUri.getPath();
}
String path = preferences.getString("sound_path_" + user_id, defaultPath);
if (path != null && !path.equals("NoSound")) {
if (path.equals(defaultPath)) {
currentSound = defaultUri;
} else {
currentSound = Uri.parse(path);
}
}
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentSound);
getParentActivity().startActivityForResult(tmpIntent, 12);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
} else if (i == sharedMediaRow) {
Bundle args = new Bundle(); Bundle args = new Bundle();
if (dialog_id != 0) { if (dialog_id != 0) {
args.putLong("dialog_id", dialog_id); args.putLong("dialog_id", dialog_id);
@ -376,57 +299,10 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
}); });
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
showAlertDialog(builder); showAlertDialog(builder);
} else if (i == settingsLedRow) { } else if (i == settingsNotificationsRow) {
if (getParentActivity() == null) { Bundle args = new Bundle();
return; args.putLong("dialog_id", dialog_id == 0 ? user_id : dialog_id);
} presentFragment(new ProfileNotificationsActivity(args));
LayoutInflater li = (LayoutInflater)getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_color_dialog_layout, null, false);
final ColorPickerView colorPickerView = (ColorPickerView)view.findViewById(R.id.color_picker);
final String key = dialog_id == 0 ? "color_" + user_id : "color_" + dialog_id;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if (preferences.contains(key)) {
colorPickerView.setOldCenterColor(preferences.getInt(key, 0xff00ff00));
} else {
colorPickerView.setOldCenterColor(preferences.getInt("MessagesLed", 0xff00ff00));
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("LedColor", R.string.LedColor));
builder.setView(view);
builder.setPositiveButton(LocaleController.getString("Set", R.string.Set), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(key, colorPickerView.getColor());
editor.commit();
listView.invalidateViews();
}
});
builder.setNeutralButton(LocaleController.getString("Disabled", R.string.Disabled), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(key, 0);
editor.commit();
listView.invalidateViews();
}
});
builder.setNegativeButton(LocaleController.getString("Default", R.string.Default), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.remove(key);
editor.commit();
listView.invalidateViews();
}
});
showAlertDialog(builder);
} }
} }
}); });
@ -444,43 +320,6 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
return fragmentView; return fragmentView;
} }
@Override
public void onActivityResultFragment(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (data == null) {
return;
}
Uri ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
String name = null;
if (ringtone != null) {
Ringtone rng = RingtoneManager.getRingtone(ApplicationLoader.applicationContext, ringtone);
if (rng != null) {
if(ringtone.equals(Settings.System.DEFAULT_NOTIFICATION_URI)) {
name = LocaleController.getString("Default", R.string.Default);
} else {
name = rng.getTitle(getParentActivity());
}
rng.stop();
}
}
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (requestCode == 12) {
if (name != null && ringtone != null) {
editor.putString("sound_" + user_id, name);
editor.putString("sound_path_" + user_id, ringtone.toString());
} else {
editor.putString("sound_" + user_id, "NoSound");
editor.putString("sound_path_" + user_id, "NoSound");
}
}
editor.commit();
listView.invalidateViews();
}
}
public void didReceivedNotification(int id, Object... args) { public void didReceivedNotification(int id, Object... args) {
if (id == MessagesController.updateInterfaces) { if (id == MessagesController.updateInterfaces) {
int mask = (Integer)args[0]; int mask = (Integer)args[0];
@ -629,7 +468,7 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
} }
} }
private class ListAdapter extends BaseAdapter { private class ListAdapter extends BaseFragmentAdapter {
private Context mContext; private Context mContext;
public ListAdapter(Context context) { public ListAdapter(Context context) {
@ -643,7 +482,7 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
@Override @Override
public boolean isEnabled(int i) { public boolean isEnabled(int i) {
return i == phoneRow || i == settingsTimerRow || i == settingsKeyRow || i == settingsNotificationsRow || i == sharedMediaRow || i == settingsSoundRow || i == settingsVibrateRow || i == settingsLedRow; return i == phoneRow || i == settingsTimerRow || i == settingsKeyRow || i == settingsNotificationsRow || i == sharedMediaRow;
} }
@Override @Override
@ -829,44 +668,6 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
} else { } else {
detailTextView.setText(String.format("%d", encryptedChat.ttl)); detailTextView.setText(String.format("%d", encryptedChat.ttl));
} }
} else if (i == settingsVibrateRow) {
textView.setText(LocaleController.getString("Vibrate", R.string.Vibrate));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
String key;
if (dialog_id == 0) {
key = "vibrate_" + user_id;
} else {
key = "vibrate_" + dialog_id;
}
int value = preferences.getInt(key, 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
} else if (i == settingsNotificationsRow) {
textView.setText(LocaleController.getString("Notifications", R.string.Notifications));
divider.setVisibility(View.VISIBLE);
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
String key;
if (dialog_id == 0) {
key = "notify2_" + user_id;
} else {
key = "notify2_" + dialog_id;
}
int value = preferences.getInt(key, 0);
if (value == 0) {
detailTextView.setText(LocaleController.getString("Default", R.string.Default));
} else if (value == 1) {
detailTextView.setText(LocaleController.getString("Enabled", R.string.Enabled));
} else if (value == 2) {
detailTextView.setText(LocaleController.getString("Disabled", R.string.Disabled));
}
} }
} else if (type == 4) { } else if (type == 4) {
if (view == null) { if (view == null) {
@ -883,41 +684,14 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
} else if (type == 5) { } else if (type == 5) {
if (view == null) { if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_detail_layout, viewGroup, false); view = li.inflate(R.layout.settings_row_button_layout, viewGroup, false);
} }
TextView textView = (TextView)view.findViewById(R.id.settings_row_text); TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
TextView detailTextView = (TextView)view.findViewById(R.id.settings_row_text_detail);
View divider = view.findViewById(R.id.settings_row_divider); View divider = view.findViewById(R.id.settings_row_divider);
if (i == settingsSoundRow) { if (i == settingsNotificationsRow) {
SharedPreferences preferences = mContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE); textView.setText(LocaleController.getString("NotificationsAndSounds", R.string.NotificationsAndSounds));
String name = preferences.getString("sound_" + user_id, LocaleController.getString("Default", R.string.Default));
if (name.equals("NoSound")) {
detailTextView.setText(LocaleController.getString("NoSound", R.string.NoSound));
} else {
detailTextView.setText(name);
}
textView.setText(LocaleController.getString("Sound", R.string.Sound));
divider.setVisibility(View.INVISIBLE); divider.setVisibility(View.INVISIBLE);
} }
} else if (type == 6) {
if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.settings_row_color_layout, viewGroup, false);
}
TextView textView = (TextView)view.findViewById(R.id.settings_row_text);
View colorView = view.findViewById(R.id.settings_color);
View divider = view.findViewById(R.id.settings_row_divider);
textView.setText(LocaleController.getString("LedColor", R.string.LedColor));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
String key = dialog_id == 0 ? "color_" + user_id : "color_" + dialog_id;
if (preferences.contains(key)) {
colorView.setBackgroundColor(preferences.getInt(key, 0xff00ff00));
} else {
colorView.setBackgroundColor(preferences.getInt("MessagesLed", 0xff00ff00));
}
divider.setVisibility(View.VISIBLE);
} }
return view; return view;
} }
@ -930,21 +704,19 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
return 1; return 1;
} else if (i == phoneRow) { } else if (i == phoneRow) {
return 2; return 2;
} else if (i == sharedMediaRow || i == settingsTimerRow || i == settingsNotificationsRow || i == settingsVibrateRow) { } else if (i == sharedMediaRow || i == settingsTimerRow) {
return 3; return 3;
} else if (i == settingsKeyRow) { } else if (i == settingsKeyRow) {
return 4; return 4;
} else if (i == settingsSoundRow) { } else if (i == settingsNotificationsRow) {
return 5; return 5;
} else if (i == settingsLedRow) {
return 6;
} }
return 0; return 0;
} }
@Override @Override
public int getViewTypeCount() { public int getViewTypeCount() {
return 7; return 6;
} }
@Override @Override

View File

@ -170,7 +170,7 @@ public class ActionBar extends FrameLayout {
@Override @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Utilities.dp(40), MeasureSpec.EXACTLY)); super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Utilities.dp(40), MeasureSpec.EXACTLY));
} else { } else {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Utilities.dp(48), MeasureSpec.EXACTLY)); super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Utilities.dp(48), MeasureSpec.EXACTLY));

View File

@ -64,6 +64,7 @@ public class ActionBarActivity extends Activity {
private boolean maybeStartTracking = false; private boolean maybeStartTracking = false;
protected boolean startedTracking = false; protected boolean startedTracking = false;
private int startedTrackingX; private int startedTrackingX;
private int startedTrackingY;
protected boolean animationInProgress = false; protected boolean animationInProgress = false;
private VelocityTracker velocityTracker = null; private VelocityTracker velocityTracker = null;
private boolean beginTrackingSent = false; private boolean beginTrackingSent = false;
@ -272,6 +273,7 @@ public class ActionBarActivity extends Activity {
startedTrackingPointerId = ev.getPointerId(0); startedTrackingPointerId = ev.getPointerId(0);
maybeStartTracking = true; maybeStartTracking = true;
startedTrackingX = (int) ev.getX(); startedTrackingX = (int) ev.getX();
startedTrackingY = (int) ev.getY();
if (velocityTracker != null) { if (velocityTracker != null) {
velocityTracker.clear(); velocityTracker.clear();
} }
@ -280,8 +282,9 @@ public class ActionBarActivity extends Activity {
velocityTracker = VelocityTracker.obtain(); velocityTracker = VelocityTracker.obtain();
} }
int dx = Math.max(0, (int) (ev.getX() - startedTrackingX)); int dx = Math.max(0, (int) (ev.getX() - startedTrackingX));
int dy = Math.abs((int)ev.getY() - startedTrackingY);
velocityTracker.addMovement(ev); velocityTracker.addMovement(ev);
if (maybeStartTracking && !startedTracking && dx >= Utilities.dp(10)) { if (maybeStartTracking && !startedTracking && dx >= Utilities.dp(10) && Math.abs(dx) / 3 > dy) {
prepareForMoving(ev); prepareForMoving(ev);
} else if (startedTracking) { } else if (startedTracking) {
if (!beginTrackingSent) { if (!beginTrackingSent) {
@ -435,7 +438,7 @@ public class ActionBarActivity extends Activity {
int height = 0; int height = 0;
if (actionBar.getVisibility() == View.VISIBLE) { if (actionBar.getVisibility() == View.VISIBLE) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(this) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
height = Utilities.dp(40); height = Utilities.dp(40);
} else { } else {
height = Utilities.dp(48); height = Utilities.dp(48);
@ -660,7 +663,6 @@ public class ActionBarActivity extends Activity {
public boolean onKeyUp(int keyCode, KeyEvent event) { public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && !checkTransitionAnimation() && !startedTracking) { if (keyCode == KeyEvent.KEYCODE_MENU && !checkTransitionAnimation() && !startedTracking) {
actionBar.onMenuButtonPressed(); actionBar.onMenuButtonPressed();
return true;
} }
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }

View File

@ -107,7 +107,7 @@ public class ActionBarLayer extends FrameLayout {
private void positionLogoImage(int height) { private void positionLogoImage(int height) {
if (logoImageView != null) { if (logoImageView != null) {
LayoutParams layoutParams = (LayoutParams) logoImageView.getLayoutParams(); LayoutParams layoutParams = (LayoutParams) logoImageView.getLayoutParams();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
layoutParams.width = (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f); layoutParams.width = (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
layoutParams.height = (int)(logoImageView.getDrawable().getIntrinsicHeight() / 1.3f); layoutParams.height = (int)(logoImageView.getDrawable().getIntrinsicHeight() / 1.3f);
layoutParams.setMargins(Utilities.dp(12), (height - layoutParams.height) / 2, 0, 0); layoutParams.setMargins(Utilities.dp(12), (height - layoutParams.height) / 2, 0, 0);
@ -123,7 +123,7 @@ public class ActionBarLayer extends FrameLayout {
private void positionTitle(int width, int height) { private void positionTitle(int width, int height) {
int offset = Utilities.dp(2); int offset = Utilities.dp(2);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
offset = Utilities.dp(1); offset = Utilities.dp(1);
} }
int maxTextWidth = 0; int maxTextWidth = 0;
@ -131,7 +131,7 @@ public class ActionBarLayer extends FrameLayout {
LayoutParams layoutParams = null; LayoutParams layoutParams = null;
if (titleTextView != null && titleTextView.getVisibility() == VISIBLE) { if (titleTextView != null && titleTextView.getVisibility() == VISIBLE) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
titleTextView.setTextSize(16); titleTextView.setTextSize(16);
} else { } else {
titleTextView.setTextSize(18); titleTextView.setTextSize(18);
@ -146,7 +146,7 @@ public class ActionBarLayer extends FrameLayout {
maxTextWidth = titleTextView.getMeasuredWidth(); maxTextWidth = titleTextView.getMeasuredWidth();
} }
if (subTitleTextView != null && subTitleTextView.getVisibility() == VISIBLE) { if (subTitleTextView != null && subTitleTextView.getVisibility() == VISIBLE) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
subTitleTextView.setTextSize(12); subTitleTextView.setTextSize(12);
} else { } else {
subTitleTextView.setTextSize(14); subTitleTextView.setTextSize(14);
@ -165,7 +165,7 @@ public class ActionBarLayer extends FrameLayout {
if (logoImageView == null || logoImageView.getVisibility() == GONE) { if (logoImageView == null || logoImageView.getVisibility() == GONE) {
x = Utilities.dp(16); x = Utilities.dp(16);
} else { } else {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
x = Utilities.dp(22) + (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f); x = Utilities.dp(22) + (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
} else { } else {
x = Utilities.dp(22) + logoImageView.getDrawable().getIntrinsicWidth(); x = Utilities.dp(22) + logoImageView.getDrawable().getIntrinsicWidth();
@ -243,6 +243,7 @@ public class ActionBarLayer extends FrameLayout {
if (value != null && subTitleTextView == null) { if (value != null && subTitleTextView == null) {
subTitleTextView = new TextView(getContext()); subTitleTextView = new TextView(getContext());
backButtonFrameLayout.addView(subTitleTextView); backButtonFrameLayout.addView(subTitleTextView);
subTitleTextView.setGravity(Gravity.LEFT);
subTitleTextView.setTextColor(0xffd7e8f7); subTitleTextView.setTextColor(0xffd7e8f7);
subTitleTextView.setSingleLine(true); subTitleTextView.setSingleLine(true);
subTitleTextView.setLines(1); subTitleTextView.setLines(1);
@ -260,6 +261,7 @@ public class ActionBarLayer extends FrameLayout {
if (resourceId != 0 && subTitleTextView == null) { if (resourceId != 0 && subTitleTextView == null) {
subTitleTextView = new TextView(getContext()); subTitleTextView = new TextView(getContext());
backButtonFrameLayout.addView(subTitleTextView); backButtonFrameLayout.addView(subTitleTextView);
subTitleTextView.setGravity(Gravity.LEFT);
subTitleTextView.setTextColor(0xffd7e8f7); subTitleTextView.setTextColor(0xffd7e8f7);
subTitleTextView.setSingleLine(true); subTitleTextView.setSingleLine(true);
subTitleTextView.setLines(1); subTitleTextView.setLines(1);
@ -276,7 +278,10 @@ public class ActionBarLayer extends FrameLayout {
public void setTitle(CharSequence value) { public void setTitle(CharSequence value) {
if (value != null && titleTextView == null) { if (value != null && titleTextView == null) {
titleTextView = new TextView(getContext()); titleTextView = new TextView(getContext());
titleTextView.setGravity(Gravity.LEFT);
titleTextView.setSingleLine(true); titleTextView.setSingleLine(true);
titleTextView.setLines(1);
titleTextView.setMaxLines(1);
titleTextView.setEllipsize(TextUtils.TruncateAt.END); titleTextView.setEllipsize(TextUtils.TruncateAt.END);
backButtonFrameLayout.addView(titleTextView); backButtonFrameLayout.addView(titleTextView);
titleTextView.setTextColor(0xffffffff); titleTextView.setTextColor(0xffffffff);
@ -291,6 +296,7 @@ public class ActionBarLayer extends FrameLayout {
public void setTitleIcon(int resourceId, int padding) { public void setTitleIcon(int resourceId, int padding) {
if (resourceId != 0 && titleTextView == null) { if (resourceId != 0 && titleTextView == null) {
titleTextView = new TextView(getContext()); titleTextView = new TextView(getContext());
titleTextView.setGravity(Gravity.LEFT);
backButtonFrameLayout.addView(titleTextView); backButtonFrameLayout.addView(titleTextView);
titleTextView.setTextColor(0xffffffff); titleTextView.setTextColor(0xffffffff);
titleTextView.setSingleLine(true); titleTextView.setSingleLine(true);

View File

@ -9,6 +9,7 @@
package org.telegram.ui.Views; package org.telegram.ui.Views;
import android.content.Context; import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
@ -247,6 +248,13 @@ public class EmojiView extends LinearLayout {
localObject.setTag(this.data[paramInt]); localObject.setTag(this.data[paramInt]);
return localObject; return localObject;
} }
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
} }
private class EmojiPagesAdapter extends PagerAdapter implements PagerSlidingTabStrip.IconTabProvider { private class EmojiPagesAdapter extends PagerAdapter implements PagerSlidingTabStrip.IconTabProvider {
@ -286,6 +294,13 @@ public class EmojiView extends LinearLayout {
public boolean isViewFromObject(View paramView, Object paramObject) { public boolean isViewFromObject(View paramView, Object paramObject) {
return paramView == paramObject; return paramView == paramObject;
} }
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
} }
public static abstract interface Listener { public static abstract interface Listener {

View File

@ -113,7 +113,7 @@ public class HorizontalListView extends AdapterView<ListAdapter> {
@Override @Override
public void setAdapter(ListAdapter adapter) { public void setAdapter(ListAdapter adapter) {
if(mAdapter != null) { if(mAdapter != null && mDataObserver != null) {
mAdapter.unregisterDataSetObserver(mDataObserver); mAdapter.unregisterDataSetObserver(mDataObserver);
} }
mAdapter = adapter; mAdapter = adapter;

View File

@ -8,6 +8,7 @@
package org.telegram.ui.Views; package org.telegram.ui.Views;
import android.database.DataSetObserver;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -222,4 +223,11 @@ public abstract class SectionedBaseAdapter extends BaseFragmentAdapter implement
mSectionCount = getSectionCount(); mSectionCount = getSectionCount();
return mSectionCount; return mSectionCount;
} }
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
} }