show per conference notification settings in details activity
This commit is contained in:
parent
0bb3ae37f0
commit
a3e136b550
|
@ -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_NEXT_ENCRYPTION = "next_encryption";
|
||||||
public static final String ATTRIBUTE_MUC_PASSWORD = "muc_password";
|
public static final String ATTRIBUTE_MUC_PASSWORD = "muc_password";
|
||||||
public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
|
public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
|
||||||
|
public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify";
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String contactUuid;
|
private String contactUuid;
|
||||||
|
@ -546,7 +547,7 @@ public class Conversation extends AbstractEntity implements Blockable {
|
||||||
/**
|
/**
|
||||||
* short for is Private and Non-anonymous
|
* short for is Private and Non-anonymous
|
||||||
*/
|
*/
|
||||||
public boolean isPnNA() {
|
private boolean isPnNA() {
|
||||||
return mode == MODE_SINGLE || (getMucOptions().membersOnly() && getMucOptions().nonanonymous());
|
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);
|
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) {
|
public boolean setAttribute(String key, String value) {
|
||||||
try {
|
try {
|
||||||
this.attributes.put(key, value);
|
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) {
|
public void add(Message message) {
|
||||||
message.setConversation(this);
|
message.setConversation(this);
|
||||||
synchronized (this.messages) {
|
synchronized (this.messages) {
|
||||||
|
|
|
@ -62,9 +62,7 @@ public class NotificationService {
|
||||||
return (message.getStatus() == Message.STATUS_RECEIVED)
|
return (message.getStatus() == Message.STATUS_RECEIVED)
|
||||||
&& notificationsEnabled()
|
&& notificationsEnabled()
|
||||||
&& !message.getConversation().isMuted()
|
&& !message.getConversation().isMuted()
|
||||||
&& (message.getConversation().isPnNA()
|
&& (message.getConversation().alwaysNotify() || wasHighlightedOrPrivate(message)
|
||||||
|| conferenceNotificationsEnabled()
|
|
||||||
|| 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) {
|
public void pushFromBacklog(final Message message) {
|
||||||
if (notify(message)) {
|
if (notify(message)) {
|
||||||
synchronized (notifications) {
|
synchronized (notifications) {
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.openintents.openpgp.util.OpenPgpUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
|
@ -64,7 +65,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
private TextView mConferenceType;
|
private TextView mConferenceType;
|
||||||
private TableLayout mConferenceInfoTable;
|
private TableLayout mConferenceInfoTable;
|
||||||
private TextView mConferenceInfoMam;
|
private TextView mConferenceInfoMam;
|
||||||
|
private TextView mNotifyStatusText;
|
||||||
private ImageButton mChangeConferenceSettingsButton;
|
private ImageButton mChangeConferenceSettingsButton;
|
||||||
|
private ImageButton mNotifyStatusButton;
|
||||||
private Button mInviteButton;
|
private Button mInviteButton;
|
||||||
private String uuid = null;
|
private String uuid = null;
|
||||||
private User mSelectedUser = 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() {
|
private OnClickListener mChangeConferenceSettings = new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
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);
|
this.mConferenceInfoTable = (TableLayout) findViewById(R.id.muc_info_more);
|
||||||
mConferenceInfoTable.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE);
|
mConferenceInfoTable.setVisibility(this.mAdvancedMode ? View.VISIBLE : View.GONE);
|
||||||
this.mConferenceInfoMam = (TextView) findViewById(R.id.muc_info_mam);
|
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
|
@Override
|
||||||
|
@ -493,6 +540,22 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
mChangeConferenceSettingsButton.setVisibility(View.GONE);
|
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);
|
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
membersView.removeAllViews();
|
membersView.removeAllViews();
|
||||||
final ArrayList<User> users = mucOptions.getUsers();
|
final ArrayList<User> users = mucOptions.getUsers();
|
||||||
|
|
|
@ -102,8 +102,11 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
|
||||||
} else if (muted_till >= System.currentTimeMillis()) {
|
} else if (muted_till >= System.currentTimeMillis()) {
|
||||||
notificationStatus.setVisibility(View.VISIBLE);
|
notificationStatus.setVisibility(View.VISIBLE);
|
||||||
notificationStatus.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp);
|
notificationStatus.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp);
|
||||||
} else {
|
} else if (conversation.alwaysNotify()) {
|
||||||
notificationStatus.setVisibility(View.GONE);
|
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()));
|
mTimestamp.setText(UIHelper.readableTimeDifference(activity,conversation.getLatestMessage().getTimeSent()));
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 427 B |
Binary file not shown.
After Width: | Height: | Size: 318 B |
Binary file not shown.
After Width: | Height: | Size: 471 B |
Binary file not shown.
After Width: | Height: | Size: 657 B |
Binary file not shown.
After Width: | Height: | Size: 962 B |
|
@ -108,6 +108,33 @@
|
||||||
android:src="?attr/icon_settings"/>
|
android:src="?attr/icon_settings"/>
|
||||||
</RelativeLayout>
|
</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
|
<TableLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -111,8 +111,6 @@
|
||||||
<string name="pref_vibrate_summary">Also vibrate when a new message arrives</string>
|
<string name="pref_vibrate_summary">Also vibrate when a new message arrives</string>
|
||||||
<string name="pref_sound">Sound</string>
|
<string name="pref_sound">Sound</string>
|
||||||
<string name="pref_sound_summary">Play ringtone with notification</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">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_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>
|
<string name="pref_advanced_options">Advanced Options</string>
|
||||||
|
@ -570,4 +568,8 @@
|
||||||
<string name="certificate_sha1">SHA1</string>
|
<string name="certificate_sha1">SHA1</string>
|
||||||
<string name="certicate_info_not_available">(Not available)</string>
|
<string name="certicate_info_not_available">(Not available)</string>
|
||||||
<string name="certificate_not_found">No certificate found</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>
|
</resources>
|
||||||
|
|
|
@ -82,12 +82,6 @@
|
||||||
android:summary="@string/pref_sound_summary"
|
android:summary="@string/pref_sound_summary"
|
||||||
android:title="@string/pref_sound"/>
|
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>
|
||||||
<PreferenceCategory android:title="@string/pref_ui_options">
|
<PreferenceCategory android:title="@string/pref_ui_options">
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
|
|
Loading…
Reference in a new issue