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_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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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()));
|
||||
|
|
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"/>
|
||||
</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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue