aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/pixart/messenger/entities/Account.java12
-rw-r--r--src/main/java/de/pixart/messenger/generator/IqGenerator.java2
-rw-r--r--src/main/java/de/pixart/messenger/persistance/FileBackend.java7
-rw-r--r--src/main/java/de/pixart/messenger/services/AttachFileToConversationRunnable.java13
-rw-r--r--src/main/java/de/pixart/messenger/services/NotificationService.java46
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java46
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java6
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationsActivity.java4
-rw-r--r--src/main/res/values/arrays.xml4
-rw-r--r--src/main/res/values/strings.xml2
10 files changed, 116 insertions, 26 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Account.java b/src/main/java/de/pixart/messenger/entities/Account.java
index 1bdd130d5..2c7dbfbdc 100644
--- a/src/main/java/de/pixart/messenger/entities/Account.java
+++ b/src/main/java/de/pixart/messenger/entities/Account.java
@@ -19,6 +19,7 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -505,6 +506,17 @@ public class Account extends AbstractEntity {
this.bookmarks = bookmarks;
}
+ public Set<Jid> getBookmarkedJids() {
+ final Set<Jid> jids = new HashSet<>();
+ for (final Bookmark bookmark : this.bookmarks) {
+ final Jid jid = bookmark.getJid();
+ if (jid != null) {
+ jids.add(jid.asBareJid());
+ }
+ }
+ return jids;
+ }
+
public boolean hasBookmarkFor(final Jid conferenceJid) {
return getBookmark(conferenceJid) != null;
}
diff --git a/src/main/java/de/pixart/messenger/generator/IqGenerator.java b/src/main/java/de/pixart/messenger/generator/IqGenerator.java
index 160496273..b2f43cbcf 100644
--- a/src/main/java/de/pixart/messenger/generator/IqGenerator.java
+++ b/src/main/java/de/pixart/messenger/generator/IqGenerator.java
@@ -358,7 +358,7 @@ public class IqGenerator extends AbstractGenerator {
return packet;
}
- public IqPacket destroyConference(Conversation conference) {
+ public IqPacket destroyRoom(Conversation conference) {
IqPacket packet = new IqPacket(IqPacket.TYPE.SET);
packet.setTo(conference.getJid().asBareJid());
packet.setFrom(conference.getAccount().getJid());
diff --git a/src/main/java/de/pixart/messenger/persistance/FileBackend.java b/src/main/java/de/pixart/messenger/persistance/FileBackend.java
index 2703f0538..705e5489b 100644
--- a/src/main/java/de/pixart/messenger/persistance/FileBackend.java
+++ b/src/main/java/de/pixart/messenger/persistance/FileBackend.java
@@ -294,9 +294,12 @@ public class FileBackend {
}
File file = new File(path);
long size = file.length();
- if (size == 0 || size >= mXmppConnectionService.getCompressImageSizePreference()) {
+ if ((size == 0 || size >= mXmppConnectionService.getCompressImageSizePreference()) && mXmppConnectionService.getCompressImageSizePreference() != 0) {
return false;
}
+ if (mXmppConnectionService.getCompressImageResolutionPreference() == 0 && mXmppConnectionService.getCompressImageSizePreference() == 0 ) {
+ return true;
+ }
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
try {
@@ -450,7 +453,7 @@ public class FileBackend {
throw new FileCopyException(R.string.error_compressing_image);
}
os.flush();
- targetSizeReached = file.length() <= mXmppConnectionService.getCompressImageSizePreference() || quality <= 50;
+ targetSizeReached = (file.length() <= mXmppConnectionService.getCompressImageSizePreference() && mXmppConnectionService.getCompressImageSizePreference() != 0) || quality <= 50;
quality -= 5;
}
scaledBitmap.recycle();
diff --git a/src/main/java/de/pixart/messenger/services/AttachFileToConversationRunnable.java b/src/main/java/de/pixart/messenger/services/AttachFileToConversationRunnable.java
index 192d9221d..993de3bc6 100644
--- a/src/main/java/de/pixart/messenger/services/AttachFileToConversationRunnable.java
+++ b/src/main/java/de/pixart/messenger/services/AttachFileToConversationRunnable.java
@@ -49,12 +49,11 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
this.originalFileSize = FileBackend.getFileSize(mXmppConnectionService, uri);
this.isVideoMessage = !getFileBackend().useFileAsIs(uri)
&& (mimeType != null && mimeType.startsWith("video/")
- && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
+ && (mXmppConnectionService.getCompressVideoBitratePreference() != 0 && mXmppConnectionService.getCompressVideoResolutionPreference() != 0))
&& originalFileSize > autoAcceptFileSize;
-
}
- public boolean isVideoMessage() {
+ boolean isVideoMessage() {
return this.isVideoMessage && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
}
@@ -110,8 +109,12 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
mXmppConnectionService.stopForcingForegroundNotification();
throw new AssertionError(e);
} catch (ExecutionException e) {
- mXmppConnectionService.stopForcingForegroundNotification();
- Log.d(Config.LOGTAG, "ignoring execution exception. Should get handled by onTranscodeFiled() instead", e);
+ if (e.getCause() instanceof Error) {
+ mXmppConnectionService.stopForcingForegroundNotification();
+ processAsFile();
+ } else {
+ Log.d(Config.LOGTAG, "ignoring execution exception. Should get handled by onTranscodeFiled() instead", e);
+ }
}
}
diff --git a/src/main/java/de/pixart/messenger/services/NotificationService.java b/src/main/java/de/pixart/messenger/services/NotificationService.java
index c4fa85322..83441cce1 100644
--- a/src/main/java/de/pixart/messenger/services/NotificationService.java
+++ b/src/main/java/de/pixart/messenger/services/NotificationService.java
@@ -23,8 +23,10 @@ import android.support.v4.app.NotificationCompat.BigPictureStyle;
import android.support.v4.app.NotificationCompat.Builder;
import android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation;
import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.Person;
import android.support.v4.app.RemoteInput;
import android.support.v4.content.ContextCompat;
+import android.support.v4.graphics.drawable.IconCompat;
import android.text.SpannableString;
import android.text.style.StyleSpan;
import android.util.DisplayMetrics;
@@ -62,6 +64,7 @@ import de.pixart.messenger.utils.Compatibility;
import de.pixart.messenger.utils.GeoHelper;
import de.pixart.messenger.utils.UIHelper;
import de.pixart.messenger.xmpp.XmppConnection;
+import rocks.xmpp.addr.Jid;
public class NotificationService {
@@ -636,15 +639,54 @@ public class NotificationService {
}
}
+ private Person getPerson(Message message) {
+ final Contact contact = message.getContact();
+ final Person.Builder builder = new Person.Builder();
+ if (contact != null) {
+ builder.setName(contact.getDisplayName());
+ final Uri uri = contact.getSystemAccount();
+ if (uri != null) {
+ builder.setUri(uri.toString());
+ }
+ } else {
+ builder.setName(UIHelper.getMessageDisplayName(message));
+ }
+ IconCompat icon = getIcon(message);
+ if (icon != null) {
+ builder.setIcon(icon);
+ }
+ return builder.build();
+ }
+
+ private IconCompat getIcon(Message message) {
+ final Contact contact;
+ if (message.getConversation().getMode() == Conversation.MODE_SINGLE) {
+ contact = message.getContact();
+ } else {
+ Jid jid = message.getTrueCounterpart();
+ contact = jid == null ? null : message.getConversation().getAccount().getRoster().getContact(jid);
+ }
+ if (contact != null) {
+ if (contact.getProfilePhoto() != null && QuickConversationsService.isConversations()) {
+ return IconCompat.createWithContentUri(contact.getProfilePhoto());
+ }
+ if (contact.getAvatarFilename() != null) {
+ return IconCompat.createWithContentUri(mXmppConnectionService.getFileBackend().getAvatarUri(contact.getAvatarFilename()));
+ }
+ }
+ return null;
+ }
+
private void modifyForTextOnly(final Builder builder, final UnreadConversation.Builder uBuilder, final ArrayList<Message> messages) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle(mXmppConnectionService.getString(R.string.me));
+ final Person me = new Person.Builder().setName(mXmppConnectionService.getString(R.string.me)).build();
+ NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle(me);
final Conversation conversation = (Conversation) messages.get(0).getConversation();
if (conversation.getMode() == Conversation.MODE_MULTI) {
messagingStyle.setConversationTitle(conversation.getName());
}
for (Message message : messages) {
- String sender = message.getStatus() == Message.STATUS_RECEIVED ? UIHelper.getMessageDisplayName(message) : null;
+ final Person sender = message.getStatus() == Message.STATUS_RECEIVED ? getPerson(message) : null;
messagingStyle.addMessage(UIHelper.getMessagePreview(mXmppConnectionService, message).first, message.getTimeSent(), sender);
}
builder.setStyle(messagingStyle);
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 644325e2c..98e330ad0 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -127,7 +127,6 @@ import de.pixart.messenger.utils.CryptoHelper;
import de.pixart.messenger.utils.ExceptionHelper;
import de.pixart.messenger.utils.MimeUtils;
import de.pixart.messenger.utils.Namespace;
-import de.pixart.messenger.utils.OnPhoneContactsLoadedListener;
import de.pixart.messenger.utils.PhoneHelper;
import de.pixart.messenger.utils.QuickLoader;
import de.pixart.messenger.utils.ReplacingSerialSingleThreadExecutor;
@@ -894,6 +893,8 @@ public class XmppConnectionService extends Service {
return 1920;
case "high":
return 3840;
+ case "uncompressed":
+ return 0;
default:
return 3840;
}
@@ -907,6 +908,8 @@ public class XmppConnectionService extends Service {
return 524288; // 0.5 * 1024 * 1024 = 524288 (0.5 MiB)
case "high":
return 1048576; // 1 * 1024 * 1024 = 1048576 (1 MiB)
+ case "uncompressed":
+ return 0;
default:
return 524288;
}
@@ -920,6 +923,8 @@ public class XmppConnectionService extends Service {
return 360;
case "high":
return 720;
+ case "uncompressed":
+ return 0;
default:
return 360;
}
@@ -933,6 +938,8 @@ public class XmppConnectionService extends Service {
return 500000;
case "high":
return 2000000;
+ case "uncompressed":
+ return 0;
default:
return 500000;
}
@@ -1607,6 +1614,7 @@ public class XmppConnectionService extends Service {
}
public void processBookmarks(Account account, Element storage, final boolean pep) {
+ final Set<Jid> previousBookmarks = account.getBookmarkedJids();
final HashMap<Jid, Bookmark> bookmarks = new HashMap<>();
final boolean synchronizeWithBookmarks = synchronizeWithBookmarks();
if (storage != null) {
@@ -1620,6 +1628,7 @@ public class XmppConnectionService extends Service {
if (bookmark.getJid() == null) {
continue;
}
+ previousBookmarks.remove(bookmark.getJid().asBareJid());
Conversation conversation = find(bookmark);
if (conversation != null) {
if (conversation.getMode() != Conversation.MODE_MULTI) {
@@ -1636,6 +1645,16 @@ public class XmppConnectionService extends Service {
}
}
}
+ if (pep && synchronizeWithBookmarks) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": " + previousBookmarks.size() + " bookmarks have been removed");
+ for (Jid jid : previousBookmarks) {
+ final Conversation conversation = find(account, jid);
+ if (conversation != null && conversation.getMucOptions().getError() == MucOptions.Error.DESTROYED) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": archiving destroyed conference (" + conversation.getJid() + ") after receiving pep");
+ archiveConversation(conversation, false);
+ }
+ }
+ }
}
account.setBookmarks(new CopyOnWriteArrayList<>(bookmarks.values()));
}
@@ -1673,8 +1692,7 @@ public class XmppConnectionService extends Service {
}
private void pushNodeAndEnforcePublishOptions(final Account account, final String node, final Element element, final Bundle options, final boolean retry) {
- IqPacket packet = mIqGenerator.publishElement(node, element, options);
- Log.d(Config.LOGTAG, packet.toString());
+ final IqPacket packet = mIqGenerator.publishElement(node, element, options);
sendIqPacket(account, packet, (a, response) -> {
if (response.getType() == IqPacket.TYPE.RESULT) {
return;
@@ -3073,29 +3091,29 @@ public class XmppConnectionService extends Service {
});
}
- public void destroyMuc(final Conversation mSelectedConversation) {
- destroyConference(mSelectedConversation, new XmppConnectionService.OnDestroyMuc() {
+ public void destroyRoom(final Conversation mSelectedConversation) {
+ destroyRoom(mSelectedConversation, new OnRoomDestroy() {
@Override
- public void OnDestroyMucSuccessful(int resId) {
+ public void onRoomDestroySucceeded(int resId) {
Log.d(Config.LOGTAG, "Destroy succeed");
showErrorToastInUi(resId);
}
@Override
- public void OnDestroyMucFailed(int resId) {
+ public void onRoomDestroyFailed(int resId) {
Log.d(Config.LOGTAG, "Destroy failed");
showErrorToastInUi(resId);
}
});
}
- public void destroyConference(final Conversation conference, final OnDestroyMuc callback) {
- IqPacket request = this.mIqGenerator.destroyConference(conference);
+ public void destroyRoom(final Conversation conference, final OnRoomDestroy callback) {
+ IqPacket request = this.mIqGenerator.destroyRoom(conference);
sendIqPacket(conference.getAccount(), request, (account, packet) -> {
if (packet.getType() == IqPacket.TYPE.RESULT) {
- callback.OnDestroyMucSuccessful(R.string.destroy_muc_succeed);
+ callback.onRoomDestroySucceeded(R.string.destroy_muc_succeed);
} else {
- callback.OnDestroyMucFailed(R.string.destroy_muc_failed);
+ callback.onRoomDestroyFailed(R.string.destroy_muc_failed);
}
});
}
@@ -4570,10 +4588,10 @@ public class XmppConnectionService extends Service {
void onRoleChangeFailed(String nick, int resid);
}
- public interface OnDestroyMuc {
- void OnDestroyMucSuccessful(int resId);
+ public interface OnRoomDestroy {
+ void onRoomDestroySucceeded(int resId);
- void OnDestroyMucFailed(int resId);
+ void onRoomDestroyFailed(int resId);
}
public interface OnConversationUpdate {
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index cd0a6e4d6..c2bc94263 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -3070,6 +3070,12 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
if (pendingTakePhotoUri.clear()) {
Log.e(Config.LOGTAG, "cleared pending photo uri");
}
+ if (pendingConversationsUuid.clear()) {
+ Log.e(Config.LOGTAG, "cleared pending conversations uuid");
+ }
+ if (pendingMediaPreviews.clear()) {
+ Log.e(Config.LOGTAG, "cleared pending media previews");
+ }
}
private int messageInputBubble() {
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
index 3384cbd0e..824eef87c 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
@@ -76,7 +76,6 @@ import de.pixart.messenger.entities.Conversation;
import de.pixart.messenger.entities.MucOptions;
import de.pixart.messenger.entities.Presence;
import de.pixart.messenger.services.EmojiService;
-import de.pixart.messenger.services.UpdateService;
import de.pixart.messenger.services.XmppConnectionService;
import de.pixart.messenger.ui.interfaces.OnBackendConnected;
import de.pixart.messenger.ui.interfaces.OnConversationArchived;
@@ -609,6 +608,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
protected void onNewIntent(final Intent intent) {
if (isViewOrShareIntent(intent)) {
if (xmppConnectionService != null) {
+ clearPendingViewIntent();
processViewIntent(intent);
} else {
pendingViewIntent.push(intent);
@@ -619,7 +619,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
Log.d(Config.LOGTAG, "Get " + intent.getAction() + " intent for " + extras.getString("MUC_UUID"));
Conversation conversation = xmppConnectionService.findConversationByUuid(extras.getString("MUC_UUID"));
ConversationsActivity.this.xmppConnectionService.clearConversationHistory(conversation);
- xmppConnectionService.destroyMuc(conversation);
+ xmppConnectionService.destroyRoom(conversation);
endConversation(conversation);
}
}
diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml
index 93da9bac4..de2e0355c 100644
--- a/src/main/res/values/arrays.xml
+++ b/src/main/res/values/arrays.xml
@@ -58,24 +58,28 @@
<item>low</item>
<item>mid</item>
<item>high</item>
+ <item>uncompressed</item>
</string-array>
<string-array name="image_compression_entries">
<item>@string/image_low</item>
<item>@string/image_mid</item>
<item>@string/image_high</item>
+ <item>@string/image_original</item>
</string-array>
<string-array name="video_compression_values">
<item>low</item>
<item>mid</item>
<item>high</item>
+ <item>uncompressed</item>
</string-array>
<string-array name="video_compression_entries">
<item>@string/video_low</item>
<item>@string/video_mid</item>
<item>@string/video_high</item>
+ <item>@string/video_original</item>
</string-array>
<string-array name="mam_prefs">
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 015a2a6c6..5d0160b7a 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -506,6 +506,7 @@
<string name="video_low">low (144p)</string>
<string name="video_mid">middle (360p)</string>
<string name="video_high">high (720p)</string>
+ <string name="video_original">Original (uncompressed)</string>
<string name="always">Always</string>
<string name="battery_optimizations_enabled">Battery optimizations enabled</string>
<string name="battery_optimizations_enabled_explained">Your device is doing some heavy battery optimizations on Pix-Art Messenger that might lead to delayed notifications or even message loss.\nIt is recommended to disable those.</string>
@@ -681,6 +682,7 @@
<string name="image_low">low (720p)</string>
<string name="image_mid">middle (1920p)</string>
<string name="image_high">high (3840p)</string>
+ <string name="image_original">original (uncompressed)</string>
<string name="last_seen_just_away">recently</string>
<string name="send_message">Send message</string>
<string name="send_failed_resend">delivery failed, resending…</string>