From fb97f9d18f4a4152983ffbbfa2bae5881f3f22ce Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 4 Jan 2016 20:14:08 +0100 Subject: null check in getOriginalPath --- src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 1 - src/main/java/eu/siacs/conversations/utils/FileUtils.java | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index b18a28444..5366fdee7 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -152,7 +152,6 @@ public class FileBackend { } public String getOriginalPath(Uri uri) { - Log.d(Config.LOGTAG,"get original path for uri: "+uri.toString()); return FileUtils.getPath(mXmppConnectionService,uri); } diff --git a/src/main/java/eu/siacs/conversations/utils/FileUtils.java b/src/main/java/eu/siacs/conversations/utils/FileUtils.java index c29841112..ad8b8640f 100644 --- a/src/main/java/eu/siacs/conversations/utils/FileUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/FileUtils.java @@ -23,6 +23,9 @@ public class FileUtils { */ @SuppressLint("NewApi") public static String getPath(final Context context, final Uri uri) { + if (uri == null) { + return null; + } final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; -- cgit v1.2.3 From c3e2d2cfba9813b217d5606607f207449d2e6d20 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 4 Jan 2016 20:14:29 +0100 Subject: added missing synchronize when pushing messages from mam backlog --- .../java/eu/siacs/conversations/services/NotificationService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 624c0a604..3199b4920 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -115,7 +115,9 @@ public class NotificationService { public void pushFromBacklog(final Message message) { if (notify(message)) { - pushToStack(message); + synchronized (notifications) { + pushToStack(message); + } } } -- cgit v1.2.3 From 62d0eebe5cfa07bf17dff7f0476428ae649d53ff Mon Sep 17 00:00:00 2001 From: fiaxh Date: Tue, 5 Jan 2016 20:07:29 +0100 Subject: Correct uuid check according to RFC 4122 --- src/main/java/eu/siacs/conversations/entities/Message.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 4a49d1b3c..c5831e7ec 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -363,7 +363,7 @@ public class Message extends AbstractEntity { && this.counterpart.equals(message.getCounterpart()) && (body.equals(otherBody) ||(message.getEncryption() == Message.ENCRYPTION_PGP - && message.getRemoteMsgId().matches("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"))) ; + && message.getRemoteMsgId().matches("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"))) ; } else { return this.remoteMsgId == null && this.counterpart.equals(message.getCounterpart()) -- cgit v1.2.3 From c59eb75a59d2fbddea2a42e7d2435e7312f5c759 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 6 Jan 2016 12:59:13 +0100 Subject: avoid duplicate messages when sending files to mucs. fixes #1635 --- .../java/eu/siacs/conversations/entities/Conversation.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 7793cc23b..f34641ab9 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -693,8 +693,16 @@ public class Conversation extends AbstractEntity implements Blockable { synchronized (this.messages) { for (int i = this.messages.size() - 1; i >= 0; --i) { Message message = this.messages.get(i); - if ((message.getStatus() == Message.STATUS_UNSEND || message.getStatus() == Message.STATUS_SEND) && message.getBody() != null && message.getBody().equals(body)) { - return message; + if (message.getStatus() == Message.STATUS_UNSEND || message.getStatus() == Message.STATUS_SEND) { + String otherBody; + if (message.hasFileOnRemoteHost()) { + otherBody = message.getFileParams().url.toString(); + } else { + otherBody = message.body; + } + if (otherBody != null && otherBody.equals(body)) { + return message; + } } } return null; -- cgit v1.2.3 From 0bb3ae37f0762ad264a4b98b3ebc4753017441af Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Jan 2016 14:41:55 +0100 Subject: show icon in conversations overview when notifications are disabled --- .../ui/adapter/ConversationAdapter.java | 12 ++ .../ic_notifications_grey600_24dp.png | Bin 0 -> 364 bytes .../ic_notifications_off_grey600_24dp.png | Bin 0 -> 462 bytes .../ic_notifications_paused_grey600_24dp.png | Bin 0 -> 440 bytes .../ic_notifications_grey600_24dp.png | Bin 0 -> 276 bytes .../ic_notifications_off_grey600_24dp.png | Bin 0 -> 336 bytes .../ic_notifications_paused_grey600_24dp.png | Bin 0 -> 323 bytes .../ic_notifications_grey600_24dp.png | Bin 0 -> 469 bytes .../ic_notifications_off_grey600_24dp.png | Bin 0 -> 485 bytes .../ic_notifications_paused_grey600_24dp.png | Bin 0 -> 482 bytes .../ic_notifications_grey600_24dp.png | Bin 0 -> 630 bytes .../ic_notifications_off_grey600_24dp.png | Bin 0 -> 697 bytes .../ic_notifications_paused_grey600_24dp.png | Bin 0 -> 790 bytes .../ic_notifications_grey600_24dp.png | Bin 0 -> 777 bytes .../ic_notifications_off_grey600_24dp.png | Bin 0 -> 990 bytes .../ic_notifications_paused_grey600_24dp.png | Bin 0 -> 972 bytes src/main/res/layout/conversation_list_row.xml | 173 ++++++++++++--------- 17 files changed, 109 insertions(+), 76 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_notifications_grey600_24dp.png create mode 100644 src/main/res/drawable-hdpi/ic_notifications_off_grey600_24dp.png create mode 100644 src/main/res/drawable-hdpi/ic_notifications_paused_grey600_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_notifications_grey600_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_notifications_off_grey600_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_notifications_paused_grey600_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_notifications_grey600_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_notifications_off_grey600_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_notifications_paused_grey600_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_notifications_grey600_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_notifications_off_grey600_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_notifications_paused_grey600_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_notifications_grey600_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_notifications_off_grey600_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_notifications_paused_grey600_24dp.png diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java index a4a80dc4b..302faaf10 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java @@ -59,6 +59,7 @@ public class ConversationAdapter extends ArrayAdapter { TextView mLastMessage = (TextView) view.findViewById(R.id.conversation_lastmsg); TextView mTimestamp = (TextView) view.findViewById(R.id.conversation_lastupdate); ImageView imagePreview = (ImageView) view.findViewById(R.id.conversation_lastimage); + ImageView notificationStatus = (ImageView) view.findViewById(R.id.notification_status); Message message = conversation.getLatestMessage(); @@ -94,6 +95,17 @@ public class ConversationAdapter extends ArrayAdapter { } } + long muted_till = conversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0); + if (muted_till == Long.MAX_VALUE) { + notificationStatus.setVisibility(View.VISIBLE); + notificationStatus.setImageResource(R.drawable.ic_notifications_off_grey600_24dp); + } else if (muted_till >= System.currentTimeMillis()) { + notificationStatus.setVisibility(View.VISIBLE); + notificationStatus.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp); + } else { + notificationStatus.setVisibility(View.GONE); + } + mTimestamp.setText(UIHelper.readableTimeDifference(activity,conversation.getLatestMessage().getTimeSent())); ImageView profilePicture = (ImageView) view.findViewById(R.id.conversation_image); loadAvatar(conversation,profilePicture); diff --git a/src/main/res/drawable-hdpi/ic_notifications_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_notifications_grey600_24dp.png new file mode 100644 index 000000000..96b329c4a Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_notifications_grey600_24dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_notifications_off_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_notifications_off_grey600_24dp.png new file mode 100644 index 000000000..09ebc5d25 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_notifications_off_grey600_24dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_notifications_paused_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_notifications_paused_grey600_24dp.png new file mode 100644 index 000000000..e92d43acf Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_notifications_paused_grey600_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_notifications_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_notifications_grey600_24dp.png new file mode 100644 index 000000000..d6c20c203 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_notifications_grey600_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_notifications_off_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_notifications_off_grey600_24dp.png new file mode 100644 index 000000000..af3b63215 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_notifications_off_grey600_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_notifications_paused_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_notifications_paused_grey600_24dp.png new file mode 100644 index 000000000..9d6308d2c Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_notifications_paused_grey600_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_notifications_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_notifications_grey600_24dp.png new file mode 100644 index 000000000..d441dc7c9 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_notifications_grey600_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_notifications_off_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_notifications_off_grey600_24dp.png new file mode 100644 index 000000000..aef303a0d Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_notifications_off_grey600_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_notifications_paused_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_notifications_paused_grey600_24dp.png new file mode 100644 index 000000000..c68bedd38 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_notifications_paused_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_notifications_grey600_24dp.png new file mode 100644 index 000000000..7d58d25d8 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_notifications_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_off_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_notifications_off_grey600_24dp.png new file mode 100644 index 000000000..e627b30a8 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_notifications_off_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_paused_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_notifications_paused_grey600_24dp.png new file mode 100644 index 000000000..e38f52179 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_notifications_paused_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_grey600_24dp.png b/src/main/res/drawable-xxxhdpi/ic_notifications_grey600_24dp.png new file mode 100644 index 000000000..98dff2f3c Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_notifications_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_off_grey600_24dp.png b/src/main/res/drawable-xxxhdpi/ic_notifications_off_grey600_24dp.png new file mode 100644 index 000000000..ab65f4b22 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_notifications_off_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_paused_grey600_24dp.png b/src/main/res/drawable-xxxhdpi/ic_notifications_paused_grey600_24dp.png new file mode 100644 index 000000000..53162e569 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_notifications_paused_grey600_24dp.png differ diff --git a/src/main/res/layout/conversation_list_row.xml b/src/main/res/layout/conversation_list_row.xml index 7321b0f66..984073b3e 100644 --- a/src/main/res/layout/conversation_list_row.xml +++ b/src/main/res/layout/conversation_list_row.xml @@ -1,88 +1,109 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:descendantFocusability="blocksDescendants"> - + - + - + - + - + - + - + - + + - - + + + + - - - - + + + + \ No newline at end of file -- cgit v1.2.3 From a3e136b5504641f9782b9d94e35311dad19fbc1d Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Jan 2016 21:30:46 +0100 Subject: show per conference notification settings in details activity --- .../siacs/conversations/entities/Conversation.java | 16 +++++- .../services/NotificationService.java | 8 +-- .../ui/ConferenceDetailsActivity.java | 63 +++++++++++++++++++++ .../ui/adapter/ConversationAdapter.java | 5 +- .../ic_notifications_none_grey600_24dp.png | Bin 0 -> 427 bytes .../ic_notifications_none_grey600_24dp.png | Bin 0 -> 318 bytes .../ic_notifications_none_grey600_24dp.png | Bin 0 -> 471 bytes .../ic_notifications_none_grey600_24dp.png | Bin 0 -> 657 bytes .../ic_notifications_none_grey600_24dp.png | Bin 0 -> 962 bytes src/main/res/layout/activity_muc_details.xml | 27 +++++++++ src/main/res/values/strings.xml | 6 +- src/main/res/xml/preferences.xml | 6 -- 12 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.png diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index f34641ab9..43012976a 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -47,6 +47,7 @@ public class Conversation extends AbstractEntity implements Blockable { public static final String ATTRIBUTE_NEXT_ENCRYPTION = "next_encryption"; public static final String ATTRIBUTE_MUC_PASSWORD = "muc_password"; public static final String ATTRIBUTE_MUTED_TILL = "muted_till"; + public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify"; private String name; private String contactUuid; @@ -546,7 +547,7 @@ public class Conversation extends AbstractEntity implements Blockable { /** * short for is Private and Non-anonymous */ - public boolean isPnNA() { + private boolean isPnNA() { return mode == MODE_SINGLE || (getMucOptions().membersOnly() && getMucOptions().nonanonymous()); } @@ -729,6 +730,10 @@ public class Conversation extends AbstractEntity implements Blockable { return System.currentTimeMillis() < this.getLongAttribute(ATTRIBUTE_MUTED_TILL, 0); } + public boolean alwaysNotify() { + return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY,isPnNA()); + } + public boolean setAttribute(String key, String value) { try { this.attributes.put(key, value); @@ -772,6 +777,15 @@ public class Conversation extends AbstractEntity implements Blockable { } } + public boolean getBooleanAttribute(String key, boolean defaultValue) { + String value = this.getAttribute(key); + if (value == null) { + return defaultValue; + } else { + return Boolean.parseBoolean(value); + } + } + public void add(Message message) { message.setConversation(this); synchronized (this.messages) { diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 3199b4920..752d7bca3 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -62,9 +62,7 @@ public class NotificationService { return (message.getStatus() == Message.STATUS_RECEIVED) && notificationsEnabled() && !message.getConversation().isMuted() - && (message.getConversation().isPnNA() - || conferenceNotificationsEnabled() - || wasHighlightedOrPrivate(message) + && (message.getConversation().alwaysNotify() || wasHighlightedOrPrivate(message) ); } @@ -109,10 +107,6 @@ public class NotificationService { } } - public boolean conferenceNotificationsEnabled() { - return mXmppConnectionService.getPreferences().getBoolean("always_notify_in_conference", false); - } - public void pushFromBacklog(final Message message) { if (notify(message)) { synchronized (notifications) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index b3de28b38..6653dd24c 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -28,6 +28,7 @@ import org.openintents.openpgp.util.OpenPgpUtils; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.concurrent.atomic.AtomicInteger; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; @@ -64,7 +65,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers private TextView mConferenceType; private TableLayout mConferenceInfoTable; private TextView mConferenceInfoMam; + private TextView mNotifyStatusText; private ImageButton mChangeConferenceSettingsButton; + private ImageButton mNotifyStatusButton; private Button mInviteButton; private String uuid = null; private User mSelectedUser = null; @@ -99,6 +102,47 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } }; + + private OnClickListener mNotifyStatusClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + AlertDialog.Builder builder = new AlertDialog.Builder(ConferenceDetailsActivity.this); + builder.setTitle(R.string.pref_notification_settings); + String[] choices = { + getString(R.string.notify_on_all_messages), + getString(R.string.notify_only_when_highlighted), + getString(R.string.notify_never) + }; + final AtomicInteger choice; + if (mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0) == Long.MAX_VALUE) { + choice = new AtomicInteger(2); + } else { + choice = new AtomicInteger(mConversation.alwaysNotify() ? 0 : 1); + } + builder.setSingleChoiceItems(choices, choice.get(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + choice.set(which); + } + }); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (choice.get() == 2) { + mConversation.setMutedTill(Long.MAX_VALUE); + } else { + mConversation.setMutedTill(0); + mConversation.setAttribute(Conversation.ATTRIBUTE_ALWAYS_NOTIFY,String.valueOf(choice.get() == 0)); + } + xmppConnectionService.updateConversation(mConversation); + updateView(); + } + }); + builder.create().show(); + } + }; + private OnClickListener mChangeConferenceSettings = new OnClickListener() { @Override public void onClick(View v) { @@ -222,6 +266,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers this.mConferenceInfoTable = (TableLayout) findViewById(R.id.muc_info_more); mConferenceInfoTable.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE); this.mConferenceInfoMam = (TextView) findViewById(R.id.muc_info_mam); + this.mNotifyStatusButton = (ImageButton) findViewById(R.id.notification_status_button); + this.mNotifyStatusButton.setOnClickListener(this.mNotifyStatusClickListener); + this.mNotifyStatusText = (TextView) findViewById(R.id.notification_status_text); } @Override @@ -493,6 +540,22 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers mChangeConferenceSettingsButton.setVisibility(View.GONE); } } + + long mutedTill = mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0); + if (mutedTill == Long.MAX_VALUE) { + mNotifyStatusText.setText(R.string.notify_never); + mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_off_grey600_24dp); + } else if (System.currentTimeMillis() < mutedTill) { + mNotifyStatusText.setText(R.string.notify_paused); + mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp); + } else if (mConversation.alwaysNotify()) { + mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_grey600_24dp); + mNotifyStatusText.setText(R.string.notify_on_all_messages); + } else { + mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_none_grey600_24dp); + mNotifyStatusText.setText(R.string.notify_only_when_highlighted); + } + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); membersView.removeAllViews(); final ArrayList users = mucOptions.getUsers(); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java index 302faaf10..f5f48a262 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java @@ -102,8 +102,11 @@ public class ConversationAdapter extends ArrayAdapter { } else if (muted_till >= System.currentTimeMillis()) { notificationStatus.setVisibility(View.VISIBLE); notificationStatus.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp); - } else { + } else if (conversation.alwaysNotify()) { notificationStatus.setVisibility(View.GONE); + } else { + notificationStatus.setVisibility(View.VISIBLE); + notificationStatus.setImageResource(R.drawable.ic_notifications_none_grey600_24dp); } mTimestamp.setText(UIHelper.readableTimeDifference(activity,conversation.getLatestMessage().getTimeSent())); diff --git a/src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.png new file mode 100644 index 000000000..6cd4dfc90 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.png new file mode 100644 index 000000000..3e8b0805c Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.png new file mode 100644 index 000000000..1123cea43 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.png new file mode 100644 index 000000000..b8772d377 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.png b/src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.png new file mode 100644 index 000000000..ffdb15a83 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.png differ diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml index 5f9424a9f..e7b11d9fe 100644 --- a/src/main/res/layout/activity_muc_details.xml +++ b/src/main/res/layout/activity_muc_details.xml @@ -108,6 +108,33 @@ android:src="?attr/icon_settings"/> + + + + + Also vibrate when a new message arrives Sound Play ringtone with notification - Notifications in Public Conferences - Always notify when a message arrives in a public conference instead of only when highlighted Notification grace period Disable notifications for a short time after a carbon copy was received Advanced Options @@ -570,4 +568,8 @@ SHA1 (Not available) No certificate found + Notify on all messages + Notify only when highlighted + Notifications disabled + Notifications paused diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 16dc5eb99..34fb7c0a5 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -82,12 +82,6 @@ android:summary="@string/pref_sound_summary" android:title="@string/pref_sound"/> - Date: Fri, 8 Jan 2016 21:35:20 +0100 Subject: don't show snackbar when notifications are disabled or paused --- .../java/eu/siacs/conversations/ui/ConversationFragment.java | 10 ---------- src/main/res/values/strings.xml | 1 - 2 files changed, 11 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 94d16f330..b9dd7439e 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -742,14 +742,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } }; - private OnClickListener mUnmuteClickListener = new OnClickListener() { - - @Override - public void onClick(final View v) { - activity.unmuteConversation(conversation); - } - }; - private OnClickListener mAnswerSmpClickListener = new OnClickListener() { @Override public void onClick(View view) { @@ -805,8 +797,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa && (conversation.getOtrSession().getSessionStatus() == SessionStatus.ENCRYPTED) && (!conversation.isOtrFingerprintVerified())) { showSnackbar(R.string.unknown_otr_fingerprint, R.string.verify, clickToVerify); - } else if (conversation.isMuted()) { - showSnackbar(R.string.notifications_disabled, R.string.enable, this.mUnmuteClickListener); } else { hideSnackbar(); } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index b0d630a96..049a5dc61 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -266,7 +266,6 @@ Skip Disable notifications Disable notifications for this conversation - Notifications are disabled Enable Conference requires password Enter password -- cgit v1.2.3 From 6acb80a83ad6561dea5e14de6d2c514748be303f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Jan 2016 22:07:23 +0100 Subject: added Config.java variable to change the default notification behaviour to always --- src/main/java/eu/siacs/conversations/Config.java | 2 ++ src/main/java/eu/siacs/conversations/entities/Conversation.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index b1534a7ab..55928d189 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -17,6 +17,8 @@ public final class Config { public static final boolean HIDE_MESSAGE_TEXT_IN_NOTIFICATION = false; public static final boolean SHOW_CONNECTED_ACCOUNTS = false; //show number of connected accounts in foreground notification + public static final boolean ALWAYS_NOTIFY_BY_DEFAULT = false; + public static final boolean LEGACY_NAMESPACE_HTTP_UPLOAD = false; public static final int PING_MAX_INTERVAL = 300; diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 43012976a..dea9d6611 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -731,7 +731,7 @@ public class Conversation extends AbstractEntity implements Blockable { } public boolean alwaysNotify() { - return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY,isPnNA()); + return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY,Config.ALWAYS_NOTIFY_BY_DEFAULT || isPnNA()); } public boolean setAttribute(String key, String value) { -- cgit v1.2.3 From 708d7c5b98e71c5b5b02a2d4c721b70cea0db906 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Jan 2016 16:16:18 +0100 Subject: automatically adjust image compression to keep files under 512MiB --- src/main/java/eu/siacs/conversations/Config.java | 1 + .../conversations/persistance/FileBackend.java | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 55928d189..aff275047 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -36,6 +36,7 @@ public final class Config { public static final int IMAGE_SIZE = 1920; public static final Bitmap.CompressFormat IMAGE_FORMAT = Bitmap.CompressFormat.JPEG; public static final int IMAGE_QUALITY = 75; + public static final int IMAGE_MAX_SIZE = 524288; //512KiB public static final int MESSAGE_MERGE_WINDOW = 20; diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 5366fdee7..05932acce 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -135,7 +135,7 @@ public class FileBackend { } File file = new File(path); long size = file.length(); - if (size == 0 || size >= 524288 ) { + if (size == 0 || size >= Config.IMAGE_MAX_SIZE ) { return false; } BitmapFactory.Options options = new BitmapFactory.Options(); @@ -211,8 +211,6 @@ public class FileBackend { try { file.createNewFile(); is = mXmppConnectionService.getContentResolver().openInputStream(image); - os = new FileOutputStream(file); - Bitmap originalBitmap; BitmapFactory.Options options = new BitmapFactory.Options(); int inSampleSize = (int) Math.pow(2, sampleSize); @@ -226,12 +224,20 @@ public class FileBackend { Bitmap scaledBitmap = resize(originalBitmap, Config.IMAGE_SIZE); int rotation = getRotation(image); scaledBitmap = rotate(scaledBitmap, rotation); - boolean success = scaledBitmap.compress(Config.IMAGE_FORMAT, Config.IMAGE_QUALITY, os); - if (!success) { - throw new FileCopyException(R.string.error_compressing_image); + boolean targetSizeReached = false; + long size = 0; + int quality = Config.IMAGE_QUALITY; + while(!targetSizeReached) { + os = new FileOutputStream(file); + boolean success = scaledBitmap.compress(Config.IMAGE_FORMAT, quality, os); + if (!success) { + throw new FileCopyException(R.string.error_compressing_image); + } + os.flush(); + size = file.getSize(); + targetSizeReached = size <= Config.IMAGE_MAX_SIZE || quality <= 50; + quality -= 5; } - os.flush(); - long size = file.getSize(); int width = scaledBitmap.getWidth(); int height = scaledBitmap.getHeight(); message.setBody(Long.toString(size) + '|' + width + '|' + height); -- cgit v1.2.3 From 4ab8fe13dea85e23f856bbe853fbf81af908edea Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Jan 2016 16:17:39 +0100 Subject: let the user decide on whether or not to compress pictures --- .../services/XmppConnectionService.java | 10 +++++++-- src/main/res/values/arrays.xml | 12 ++++++++++ src/main/res/values/strings.xml | 6 ++++- src/main/res/xml/preferences.xml | 26 +++++++++++++--------- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 5c7cceb35..e707fc985 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -414,8 +414,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } public void attachImageToConversation(final Conversation conversation, final Uri uri, final UiCallback callback) { - if (getFileBackend().useImageAsIs(uri)) { - Log.d(Config.LOGTAG, "using image as is"); + final String compressPictures = getCompressPicturesPreference(); + if ("never".equals(compressPictures) + || ("auto".equals(compressPictures) && getFileBackend().useImageAsIs(uri))) { + Log.d(Config.LOGTAG,conversation.getAccount().getJid().toBareJid()+ ": not compressing picture. sending as file"); attachFileToConversation(conversation, uri, callback); return; } @@ -590,6 +592,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return getPreferences().getBoolean("away_when_screen_off", false); } + private String getCompressPicturesPreference() { + return getPreferences().getString("picture_compression", "auto"); + } + private int getTargetPresence() { if (xaOnSilentMode() && isPhoneSilenced()) { return Presences.XA; diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml index 5be352d1c..ca63a0f12 100644 --- a/src/main/res/values/arrays.xml +++ b/src/main/res/values/arrays.xml @@ -57,4 +57,16 @@ voice location + + + never + auto + always + + + + @string/never + @string/automatically + @string/always + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 049a5dc61..deffa64ea 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -287,7 +287,7 @@ Build and licensing information Conversations • the very last word in instant messaging. - \n\nCopyright © 2014-2015 Daniel Gultsch + \n\nCopyright © 2014-2016 Daniel Gultsch \n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -571,4 +571,8 @@ Notify only when highlighted Notifications disabled Notifications paused + Compress Pictures + Resize and compressed pictures + Always + Automatically diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 34fb7c0a5..b3afe0c3e 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -22,7 +22,13 @@ android:key="auto_accept_file_size" android:summary="@string/pref_accept_files_summary" android:title="@string/pref_accept_files"/> - + + android:summary="@string/pref_use_white_background_summary" + android:title="@string/pref_use_white_background"/> + android:key="connection_options" + android:title="@string/pref_connection_options"> + android:summary="@string/pref_use_tor_summary" + android:title="@string/pref_use_tor"/> + android:key="export_logs" + android:summary="@string/pref_export_logs_summary" + android:title="@string/pref_export_logs"/> -- cgit v1.2.3 From 95db6db935ff58ce2731ab535e3758a13dd5b68b Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Jan 2016 16:45:10 +0100 Subject: bump version code for beta --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a70f278ec..76eaa65ba 100644 --- a/build.gradle +++ b/build.gradle @@ -53,8 +53,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 115 - versionName "1.8.4" + versionCode 116 + versionName "1.9.0-beta" project.ext.set(archivesBaseName, archivesBaseName + "-" + versionName); } -- cgit v1.2.3