Skip to content

Commit 438559a

Browse files
author
Grigory Fedorov
committed
Merge branch 'release/1.0.53'
2 parents d28ec56 + 0d74d08 commit 438559a

36 files changed

+698
-52
lines changed

xabber/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
defaultConfig {
88
minSdkVersion 14
99
targetSdkVersion 23
10-
versionCode 224
11-
versionName '1.0.51'
10+
versionCode 226
11+
versionName '1.0.53'
1212
}
1313

1414
compileOptions {

xabber/src/main/java/com/xabber/android/data/extension/muc/MUCManager.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.jivesoftware.smackx.muc.HostedRoom;
4545
import org.jivesoftware.smackx.muc.MultiUserChat;
4646
import org.jivesoftware.smackx.muc.MultiUserChatManager;
47+
import org.jivesoftware.smackx.muc.RoomInfo;
4748
import org.jivesoftware.smackx.muc.packet.MUCUser;
4849

4950
import java.util.ArrayList;
@@ -489,4 +490,35 @@ public void run() {
489490
thread.start();
490491

491492
}
493+
494+
public interface RoomInfoListener {
495+
void onRoomInfoReceived(RoomInfo finalRoomInfo);
496+
}
497+
498+
public static void requestRoomInfo(final String account, final String roomJid, final RoomInfoListener listener) {
499+
final XMPPConnection xmppConnection = AccountManager.getInstance().getAccount(account).getConnectionThread().getXMPPConnection();
500+
501+
final Thread thread = new Thread("Get room " + roomJid + " info for account " + account) {
502+
@Override
503+
public void run() {
504+
RoomInfo roomInfo = null;
505+
506+
try {
507+
LogManager.i(MUCManager.class, "Requesting room info " + roomJid);
508+
roomInfo = MultiUserChatManager.getInstanceFor(xmppConnection).getRoomInfo(roomJid);
509+
} catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {
510+
e.printStackTrace();
511+
}
512+
513+
final RoomInfo finalRoomInfo = roomInfo;
514+
Application.getInstance().runOnUiThread(new Runnable() {
515+
@Override
516+
public void run() {
517+
listener.onRoomInfoReceived(finalRoomInfo);
518+
}
519+
});
520+
}
521+
};
522+
thread.start();
523+
}
492524
}

xabber/src/main/java/com/xabber/android/data/extension/muc/RoomChat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public class RoomChat extends AbstractChat {
8080
private MultiUserChat multiUserChat;
8181

8282
RoomChat(String account, String user, String nickname, String password) {
83-
super(account, user);
83+
super(account, user, false);
8484
this.nickname = nickname;
8585
this.password = password;
8686
requested = false;

xabber/src/main/java/com/xabber/android/data/extension/vcard/VCardManager.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.xabber.android.data.connection.ConnectionThread;
3030
import com.xabber.android.data.connection.OnPacketListener;
3131
import com.xabber.android.data.extension.avatar.AvatarManager;
32+
import com.xabber.android.data.extension.muc.MUCManager;
3233
import com.xabber.android.data.roster.OnRosterChangedListener;
3334
import com.xabber.android.data.roster.OnRosterReceivedListener;
3435
import com.xabber.android.data.roster.PresenceManager;
@@ -266,17 +267,24 @@ public void onPacket(ConnectionItem connection, final String bareAddress, Stanza
266267
if (bareAddress == null) {
267268
return;
268269
}
270+
271+
String addressForVcard = bareAddress;
272+
273+
if (MUCManager.getInstance().hasRoom(account, bareAddress)) {
274+
addressForVcard = packet.getFrom();
275+
}
276+
269277
// Request vCard for new users
270-
if (!names.containsKey(bareAddress)) {
278+
if (!names.containsKey(addressForVcard)) {
271279
if (SettingsManager.connectionLoadVCard()) {
272-
request(account, bareAddress);
280+
request(account, addressForVcard);
273281
}
274282
}
275283
}
276284
}
277285

278286
private void requestVCard(final String account, final String srcUser) {
279-
final String userBareJid = Jid.getBareAddress(srcUser);
287+
final String userBareJid = srcUser;
280288

281289
ConnectionThread connectionThread = AccountManager.getInstance().getAccount(account).getConnectionThread();
282290
if (connectionThread == null) {

xabber/src/main/java/com/xabber/android/data/message/AbstractChat.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.xabber.android.data.extension.otr.SecurityLevel;
3030
import com.xabber.android.data.message.chat.ChatManager;
3131
import com.xabber.android.data.notification.NotificationManager;
32+
import com.xabber.xmpp.address.Jid;
3233
import com.xabber.xmpp.archive.SaveMode;
3334
import com.xabber.xmpp.carbon.CarbonManager;
3435

@@ -104,8 +105,10 @@ public abstract class AbstractChat extends BaseEntity {
104105
private String threadId;
105106
private boolean isLastMessageIncoming;
106107

107-
protected AbstractChat(final String account, final String user) {
108-
super(account, user);
108+
private boolean isPrivateMucChat;
109+
110+
protected AbstractChat(final String account, final String user, boolean isPrivateMucChat) {
111+
super(account, isPrivateMucChat ? user : Jid.getBareAddress(user));
109112
threadId = StringUtils.randomString(12);
110113
active = false;
111114
trackStatus = false;
@@ -115,6 +118,7 @@ protected AbstractChat(final String account, final String user) {
115118
historyIds = new ArrayList<Long>();
116119
messages = new ArrayList<MessageItem>();
117120
sendQuery = new ArrayList<MessageItem>();
121+
this.isPrivateMucChat = isPrivateMucChat;
118122
updateCreationTime();
119123

120124
Application.getInstance().runInBackground(new Runnable() {
@@ -410,7 +414,7 @@ protected MessageItem newMessage(String resource, String text,
410414
messages.add(messageItem);
411415
updateSendQuery(messageItem);
412416
sort();
413-
if (save)
417+
if (save && !isPrivateMucChat)
414418
requestToWriteMessage(messageItem, resource, text, action,
415419
timestamp, delayTimestamp, incoming, read, send);
416420

@@ -476,7 +480,7 @@ private void sort() {
476480
for (int index = messages.size() - 1; index >= 0; index--) {
477481
MessageItem messageItem = messages.get(index);
478482
if (messageItem.getAction() == null) {
479-
lastText = messageItem.getText();
483+
lastText = messageItem.getDisplayText();
480484
lastTime = messageItem.getTimestamp();
481485
isLastMessageIncoming = messageItem.isIncoming();
482486
return;

xabber/src/main/java/com/xabber/android/data/message/FileManager.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,7 @@ public static String getFileName(String path) {
214214
}
215215
public static void openFile(Context context, File file) {
216216
final Intent intent = new Intent(Intent.ACTION_VIEW);
217-
intent.setDataAndType(Uri.fromFile(file), MimeTypeMap.getSingleton().getMimeTypeFromExtension(
218-
MimeTypeMap.getFileExtensionFromUrl(file.toURI().toString())));
217+
intent.setDataAndType(Uri.fromFile(file), getFileMimeType(file));
219218

220219
PackageManager manager = context.getPackageManager();
221220
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
@@ -226,6 +225,14 @@ public static void openFile(Context context, File file) {
226225
}
227226
}
228227

228+
private static String getFileMimeType(File file) {
229+
return getExtensionMimeType(MimeTypeMap.getFileExtensionFromUrl(file.toURI().toString()));
230+
}
231+
232+
private static String getExtensionMimeType(String extension) {
233+
return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
234+
}
235+
229236
public static void loadImageFromFile(File file, ImageView imageView) {
230237
LogManager.i(FileManager.class, "Loading image from file " + file.getPath());
231238

@@ -259,7 +266,7 @@ public static boolean treatAsDownloadable(String text) {
259266
boolean encrypted = ref != null && ref.matches("([A-Fa-f0-9]{2}){48}");
260267

261268
if (encrypted) {
262-
if (MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) != null) {
269+
if (getExtensionMimeType(extension) != null) {
263270
return true;
264271
} else {
265272
return false;
@@ -287,7 +294,7 @@ private static String extractRelevantExtension(String path) {
287294
int dotPosition = filename.lastIndexOf(".");
288295

289296
if (dotPosition != -1) {
290-
String extension = filename.substring(dotPosition + 1);
297+
String extension = filename.substring(dotPosition + 1).toLowerCase();
291298
// we want the real file extension, not the crypto one
292299
if (Arrays.asList(VALID_CRYPTO_EXTENSIONS).contains(extension)) {
293300
return extractRelevantExtension(path.substring(0,dotPosition));
@@ -361,7 +368,7 @@ public static void saveFileToDownloads(File srcFile) throws IOException {
361368
LogManager.i(FileManager.class, "Saving file to downloads");
362369
final File dstFile = copyFile(srcFile, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + srcFile.getName());
363370

364-
String mimeTypeFromExtension = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(dstFile.toURI().toString()));
371+
String mimeTypeFromExtension = getFileMimeType(dstFile);
365372
if (mimeTypeFromExtension == null) {
366373
mimeTypeFromExtension = "application/octet-stream";
367374
}

xabber/src/main/java/com/xabber/android/data/message/MessageItem.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ public String getText() {
141141
return text;
142142
}
143143

144+
public String getDisplayText() {
145+
if (file != null) {
146+
return file.getName();
147+
} else {
148+
return text;
149+
}
150+
}
151+
144152
public Spannable getSpannable() {
145153
if (spannable == null) {
146154
spannable = new SpannableString(text);

xabber/src/main/java/com/xabber/android/data/message/MessageManager.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,13 @@ public Collection<AbstractChat> getChats() {
172172
* @return
173173
*/
174174
private RegularChat createChat(String account, String user) {
175-
RegularChat chat = new RegularChat(account, Jid.getBareAddress(user));
175+
RegularChat chat = new RegularChat(account, user, false);
176+
addChat(chat);
177+
return chat;
178+
}
179+
180+
private RegularChat createPrivateMucChat(String account, String user) {
181+
RegularChat chat = new RegularChat(account, user, true);
176182
addChat(chat);
177183
return chat;
178184
}
@@ -288,6 +294,15 @@ public AbstractChat getOrCreateChat(String account, String user) {
288294
return chat;
289295
}
290296

297+
public AbstractChat getOrCreatePrivateMucChat(String account, String user) {
298+
AbstractChat chat = getChat(account, user);
299+
if (chat == null) {
300+
chat = createPrivateMucChat(account, user);
301+
}
302+
return chat;
303+
}
304+
305+
291306
/**
292307
* Force open chat (make it active).
293308
*
@@ -298,6 +313,10 @@ public void openChat(String account, String user) {
298313
getOrCreateChat(account, user).openChat();
299314
}
300315

316+
public void openPrivateMucChat(String account, String user) {
317+
getOrCreatePrivateMucChat(account, user).openChat();
318+
}
319+
301320
/**
302321
* Closes specified chat (make it inactive).
303322
*
@@ -549,7 +568,11 @@ public void onPacket(ConnectionItem connection, String bareAddress, Stanza packe
549568
return;
550569
}
551570
}
552-
createChat(account, user).onPacket(contact, packet);
571+
if (MUCManager.getInstance().hasRoom(account, Jid.getBareAddress(user))) {
572+
createPrivateMucChat(account, user).onPacket(contact, packet);
573+
} else {
574+
createChat(account, user).onPacket(contact, packet);
575+
}
553576
}
554577
}
555578

xabber/src/main/java/com/xabber/android/data/message/RegularChat.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ public class RegularChat extends AbstractChat {
4848
*/
4949
private String resource;
5050

51-
RegularChat(String account, String user) {
52-
super(account, user);
51+
52+
RegularChat(String account, String user, boolean isPrivateMucChat) {
53+
super(account, user, isPrivateMucChat);
5354
resource = null;
5455
}
5556

xabber/src/main/java/com/xabber/android/data/notification/NotificationManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ public void onMessageNotification(MessageItem messageItem) {
471471
} else {
472472
messageNotifications.remove(messageNotification);
473473
}
474-
messageNotification.addMessage(messageItem.getText());
474+
messageNotification.addMessage(messageItem.getDisplayText());
475475
messageNotifications.add(messageNotification);
476476

477477
final String account = messageNotification.getAccount();

0 commit comments

Comments
 (0)