aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Conversation.java16
-rw-r--r--src/main/java/eu/siacs/conversations/services/NotificationService.java8
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java63
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java5
-rw-r--r--src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.pngbin0 -> 427 bytes
-rw-r--r--src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.pngbin0 -> 318 bytes
-rw-r--r--src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.pngbin0 -> 471 bytes
-rw-r--r--src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.pngbin0 -> 657 bytes
-rw-r--r--src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.pngbin0 -> 962 bytes
-rw-r--r--src/main/res/layout/activity_muc_details.xml27
-rw-r--r--src/main/res/values/strings.xml6
-rw-r--r--src/main/res/xml/preferences.xml6
12 files changed, 114 insertions, 17 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index f34641ab..43012976 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 3199b492..752d7bca 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 b3de28b3..6653dd24 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<User> 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 302faaf1..f5f48a26 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<Conversation> {
} 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 00000000..6cd4dfc9
--- /dev/null
+++ b/src/main/res/drawable-hdpi/ic_notifications_none_grey600_24dp.png
Binary files 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 00000000..3e8b0805
--- /dev/null
+++ b/src/main/res/drawable-mdpi/ic_notifications_none_grey600_24dp.png
Binary files 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 00000000..1123cea4
--- /dev/null
+++ b/src/main/res/drawable-xhdpi/ic_notifications_none_grey600_24dp.png
Binary files 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 00000000..b8772d37
--- /dev/null
+++ b/src/main/res/drawable-xxhdpi/ic_notifications_none_grey600_24dp.png
Binary files 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 00000000..ffdb15a8
--- /dev/null
+++ b/src/main/res/drawable-xxxhdpi/ic_notifications_none_grey600_24dp.png
Binary files differ
diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml
index 5f9424a9..e7b11d9f 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"/>
</RelativeLayout>
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/notification_status_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/notify_on_all_messages"
+ android:layout_centerVertical="true"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@+id/notification_status_button"
+ />
+ <ImageButton
+ android:id="@+id/notification_status_button"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:background="?android:selectableItemBackground"
+ android:padding="@dimen/image_button_padding"
+ android:src="@drawable/ic_notifications_grey600_24dp"/>
+ </RelativeLayout>
+
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 3e4d2c68..b0d630a9 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -111,8 +111,6 @@
<string name="pref_vibrate_summary">Also vibrate when a new message arrives</string>
<string name="pref_sound">Sound</string>
<string name="pref_sound_summary">Play ringtone with notification</string>
- <string name="pref_conference_notifications">Notifications in Public Conferences</string>
- <string name="pref_conference_notifications_summary">Always notify when a message arrives in a public conference instead of only when highlighted</string>
<string name="pref_notification_grace_period">Notification grace period</string>
<string name="pref_notification_grace_period_summary">Disable notifications for a short time after a carbon copy was received</string>
<string name="pref_advanced_options">Advanced Options</string>
@@ -570,4 +568,8 @@
<string name="certificate_sha1">SHA1</string>
<string name="certicate_info_not_available">(Not available)</string>
<string name="certificate_not_found">No certificate found</string>
+ <string name="notify_on_all_messages">Notify on all messages</string>
+ <string name="notify_only_when_highlighted">Notify only when highlighted</string>
+ <string name="notify_never">Notifications disabled</string>
+ <string name="notify_paused">Notifications paused</string>
</resources>
diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml
index 16dc5eb9..34fb7c0a 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"/>
- <CheckBoxPreference
- android:defaultValue="false"
- android:dependency="show_notification"
- android:key="always_notify_in_conference"
- android:summary="@string/pref_conference_notifications_summary"
- android:title="@string/pref_conference_notifications"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_ui_options">
<CheckBoxPreference