diff options
8 files changed, 49 insertions, 16 deletions
diff --git a/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java b/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java index ae897a8e7..44f66735e 100644 --- a/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java +++ b/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java @@ -189,7 +189,9 @@ public class HttpDownloadConnection implements Transferable { return; } file.setExpectedSize(size); - if (mHttpConnectionManager.hasStoragePermission() && size <= mHttpConnectionManager.getAutoAcceptFileSize()) { + if (mHttpConnectionManager.hasStoragePermission() + && size <= mHttpConnectionManager.getAutoAcceptFileSize() + && mXmppConnectionService.isDataSaverDisabled()) { HttpDownloadConnection.this.acceptedAutomatically = true; new Thread(new FileDownloader(interactive)).start(); } else { diff --git a/src/main/java/de/pixart/messenger/parser/MessageParser.java b/src/main/java/de/pixart/messenger/parser/MessageParser.java index fa2d1f642..dda9163e8 100644 --- a/src/main/java/de/pixart/messenger/parser/MessageParser.java +++ b/src/main/java/de/pixart/messenger/parser/MessageParser.java @@ -238,7 +238,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateRosterUi(); } - } else { + } else if (mXmppConnectionService.isDataSaverDisabled()) { mXmppConnectionService.fetchAvatar(account, avatar); } } diff --git a/src/main/java/de/pixart/messenger/parser/PresenceParser.java b/src/main/java/de/pixart/messenger/parser/PresenceParser.java index c2e1f3c70..31f2fdcae 100644 --- a/src/main/java/de/pixart/messenger/parser/PresenceParser.java +++ b/src/main/java/de/pixart/messenger/parser/PresenceParser.java @@ -104,7 +104,7 @@ public class PresenceParser extends AbstractParser implements if (user.setAvatar(avatar)) { mXmppConnectionService.getAvatarService().clear(user); } - } else { + } else if (mXmppConnectionService.isDataSaverDisabled()) { mXmppConnectionService.fetchAvatar(mucOptions.getAccount(), avatar); } } @@ -191,7 +191,7 @@ public class PresenceParser extends AbstractParser implements mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateRosterUi(); } - } else { + } else if (mXmppConnectionService.isDataSaverDisabled()){ mXmppConnectionService.fetchAvatar(account, avatar); } } diff --git a/src/main/java/de/pixart/messenger/services/NotificationService.java b/src/main/java/de/pixart/messenger/services/NotificationService.java index 92876205c..ce151931a 100644 --- a/src/main/java/de/pixart/messenger/services/NotificationService.java +++ b/src/main/java/de/pixart/messenger/services/NotificationService.java @@ -176,6 +176,9 @@ public class NotificationService { public void clear() { synchronized (notifications) { + for(ArrayList<Message> messages : notifications.values()) { + markAsReadIfHasDirectReply(messages); + } notifications.clear(); updateNotification(false); } @@ -183,6 +186,7 @@ public class NotificationService { public void clear(final Conversation conversation) { synchronized (notifications) { + markAsReadIfHasDirectReply(conversation); notifications.remove(conversation.getUuid()); final NotificationManager nm = (NotificationManager) mXmppConnectionService.getSystemService(Context.NOTIFICATION_SERVICE); nm.cancel(conversation.getUuid(), NOTIFICATION_ID); @@ -190,6 +194,19 @@ public class NotificationService { } } + private void markAsReadIfHasDirectReply(final Conversation conversation) { + markAsReadIfHasDirectReply(notifications.get(conversation.getUuid())); + } + + private void markAsReadIfHasDirectReply(final ArrayList<Message> messages) { + if (messages != null && messages.size() > 0) { + Message last = messages.get(messages.size() - 1); + if (last.getStatus() != Message.STATUS_RECEIVED) { + mXmppConnectionService.markRead(last.getConversation(), false); + } + } + } + private void setNotificationColor(final Builder mBuilder) { mBuilder.setColor(mXmppConnectionService.getResources().getColor(R.color.primary)); } diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index 26c5e6678..c00803d1c 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -772,6 +772,16 @@ public class XmppConnectionService extends Service { return START_STICKY; } + public boolean isDataSaverDisabled() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); + return !connectivityManager.isActiveNetworkMetered() + || connectivityManager.getRestrictBackgroundStatus() == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED; + } else { + return true; + } + } + private void directReply(Conversation conversation, String body) { Message message = new Message(conversation,body,conversation.getNextEncryption()); message.markUnread(); @@ -929,13 +939,14 @@ public class XmppConnectionService extends Service { toggleForegroundService(); updateUnreadCountBadge(); toggleScreenEventReceiver(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && !Config.PUSH_MODE) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Config.PUSH_MODE) { scheduleNextIdlePing(); } - //start export log service every day at given time ScheduleAutomaticExport(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + registerReceiver(this.mEventReceiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } } @Override @@ -3090,7 +3101,13 @@ public class XmppConnectionService extends Service { } public boolean markRead(final Conversation conversation) { - mNotificationService.clear(conversation); + return markRead(conversation,true); + } + + public boolean markRead(final Conversation conversation, boolean clear) { + if (clear) { + mNotificationService.clear(conversation); + } final List<Message> readMessages = conversation.markRead(); if (readMessages.size() > 0) { Runnable runnable = new Runnable() { diff --git a/src/main/java/de/pixart/messenger/ui/ConversationActivity.java b/src/main/java/de/pixart/messenger/ui/ConversationActivity.java index bcb9e81fd..5b22bd0de 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationActivity.java @@ -1266,9 +1266,6 @@ public class ConversationActivity extends XmppActivity listView.discardUndo(); super.onPause(); this.mActivityPaused = true; - if (this.xmppConnectionServiceBound) { - this.xmppConnectionService.getNotificationService().setIsInForeground(false); - } } @Override @@ -1280,9 +1277,6 @@ public class ConversationActivity extends XmppActivity recreate(); } this.mActivityPaused = false; - if (this.xmppConnectionServiceBound) { - this.xmppConnectionService.getNotificationService().setIsInForeground(true); - } if (!isConversationsOverviewVisable() || !isConversationsOverviewHideable()) { sendReadMarkerIfNecessary(getSelectedConversation()); diff --git a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java index e26cfdaed..75450d6c4 100644 --- a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java +++ b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java @@ -624,10 +624,12 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate @Override protected void onBackendConnected() { + boolean init = true; if (mSavedInstanceAccount != null) { try { this.mAccount = xmppConnectionService.findAccountByJid(Jid.fromString(mSavedInstanceAccount)); this.mInitMode = mSavedInstanceInit; + init = false; } catch (InvalidJidException e) { this.mAccount = null; } @@ -645,7 +647,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate this.mPassword.requestFocus(); } } - updateAccountInformation(true); + updateAccountInformation(init); } diff --git a/src/main/java/de/pixart/messenger/xmpp/jingle/JingleConnection.java b/src/main/java/de/pixart/messenger/xmpp/jingle/JingleConnection.java index 29c5acfb8..0c8eec2bb 100644 --- a/src/main/java/de/pixart/messenger/xmpp/jingle/JingleConnection.java +++ b/src/main/java/de/pixart/messenger/xmpp/jingle/JingleConnection.java @@ -393,7 +393,8 @@ public class JingleConnection implements Transferable { conversation.add(message); mXmppConnectionService.updateConversationUi(); if (mJingleConnectionManager.hasStoragePermission() - && size < this.mJingleConnectionManager.getAutoAcceptFileSize()) { + && size < this.mJingleConnectionManager.getAutoAcceptFileSize() + && mXmppConnectionService.isDataSaverDisabled()) { Log.d(Config.LOGTAG, "auto accepting file from "+ packet.getFrom()); this.acceptedAutomatically = true; this.sendAccept(); |