Messaging: Implement per conversation channels. Update API level to 28.
* Get rid of in-app settings for notifications, replaced by channels features * Remove all the notification plumbing and dead code Test: m, manual Signed-off-by: Luca Stefani <luca.stefani.ge1@gmail.com> Signed-off-by: Joey <joey@lineageos.org> Signed-off-by: Danny Baumann <dannybaumann@web.de> Signed-off-by: Arne Coucheron <arco68@gmail.com> Signed-off-by: Lyubo <lyubodzhamov@gmail.com> Change-Id: Idb39ca32751d40b3376934775d2119dd6cc7e297
This commit is contained in:
@@ -52,9 +52,6 @@ public class ConversationListItemData {
|
||||
private String mOtherParticipantNormalizedDestination;
|
||||
private String mSelfId;
|
||||
private int mParticipantCount;
|
||||
private boolean mNotificationEnabled;
|
||||
private String mNotificationSoundUri;
|
||||
private boolean mNotificationVibrate;
|
||||
private boolean mIncludeEmailAddress;
|
||||
private int mMessageStatus;
|
||||
private int mMessageRawTelephonyStatus;
|
||||
@@ -92,9 +89,6 @@ public class ConversationListItemData {
|
||||
INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION);
|
||||
mSelfId = cursor.getString(INDEX_SELF_ID);
|
||||
mParticipantCount = cursor.getInt(INDEX_PARTICIPANT_COUNT);
|
||||
mNotificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1;
|
||||
mNotificationSoundUri = cursor.getString(INDEX_NOTIFICATION_SOUND_URI);
|
||||
mNotificationVibrate = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1;
|
||||
mIncludeEmailAddress = cursor.getInt(INDEX_INCLUDE_EMAIL_ADDRESS) == 1;
|
||||
mMessageStatus = cursor.getInt(INDEX_MESSAGE_STATUS);
|
||||
mMessageRawTelephonyStatus = cursor.getInt(INDEX_MESSAGE_RAW_TELEPHONY_STATUS);
|
||||
@@ -199,18 +193,6 @@ public class ConversationListItemData {
|
||||
return mIncludeEmailAddress;
|
||||
}
|
||||
|
||||
public boolean getNotificationEnabled() {
|
||||
return mNotificationEnabled;
|
||||
}
|
||||
|
||||
public String getNotificationSoundUri() {
|
||||
return mNotificationSoundUri;
|
||||
}
|
||||
|
||||
public boolean getNotifiationVibrate() {
|
||||
return mNotificationVibrate;
|
||||
}
|
||||
|
||||
public final boolean getIsFailedStatus() {
|
||||
return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED ||
|
||||
mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER ||
|
||||
@@ -328,12 +310,6 @@ public class ConversationListItemData {
|
||||
+ " as " + ConversationListViewColumns.PREVIEW_CONTENT_TYPE + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_COUNT
|
||||
+ " as " + ConversationListViewColumns.PARTICIPANT_COUNT + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_ENABLED
|
||||
+ " as " + ConversationListViewColumns.NOTIFICATION_ENABLED + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_SOUND_URI
|
||||
+ " as " + ConversationListViewColumns.NOTIFICATION_SOUND_URI + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_VIBRATION
|
||||
+ " as " + ConversationListViewColumns.NOTIFICATION_VIBRATION + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' +
|
||||
ConversationColumns.INCLUDE_EMAIL_ADDRESS
|
||||
+ " as " + ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS + ", "
|
||||
@@ -396,9 +372,6 @@ public class ConversationListItemData {
|
||||
ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION;
|
||||
static final String CURRENT_SELF_ID = ConversationColumns.CURRENT_SELF_ID;
|
||||
static final String PARTICIPANT_COUNT = ConversationColumns.PARTICIPANT_COUNT;
|
||||
static final String NOTIFICATION_ENABLED = ConversationColumns.NOTIFICATION_ENABLED;
|
||||
static final String NOTIFICATION_SOUND_URI = ConversationColumns.NOTIFICATION_SOUND_URI;
|
||||
static final String NOTIFICATION_VIBRATION = ConversationColumns.NOTIFICATION_VIBRATION;
|
||||
static final String INCLUDE_EMAIL_ADDRESS =
|
||||
ConversationColumns.INCLUDE_EMAIL_ADDRESS;
|
||||
static final String MESSAGE_STATUS = MessageColumns.STATUS;
|
||||
@@ -424,9 +397,6 @@ public class ConversationListItemData {
|
||||
ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION,
|
||||
ConversationListViewColumns.PARTICIPANT_COUNT,
|
||||
ConversationListViewColumns.CURRENT_SELF_ID,
|
||||
ConversationListViewColumns.NOTIFICATION_ENABLED,
|
||||
ConversationListViewColumns.NOTIFICATION_SOUND_URI,
|
||||
ConversationListViewColumns.NOTIFICATION_VIBRATION,
|
||||
ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS,
|
||||
ConversationListViewColumns.MESSAGE_STATUS,
|
||||
ConversationListViewColumns.SHOW_DRAFT,
|
||||
@@ -456,23 +426,20 @@ public class ConversationListItemData {
|
||||
private static final int INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION = 10;
|
||||
private static final int INDEX_PARTICIPANT_COUNT = 11;
|
||||
private static final int INDEX_SELF_ID = 12;
|
||||
private static final int INDEX_NOTIFICATION_ENABLED = 13;
|
||||
private static final int INDEX_NOTIFICATION_SOUND_URI = 14;
|
||||
private static final int INDEX_NOTIFICATION_VIBRATION = 15;
|
||||
private static final int INDEX_INCLUDE_EMAIL_ADDRESS = 16;
|
||||
private static final int INDEX_MESSAGE_STATUS = 17;
|
||||
private static final int INDEX_SHOW_DRAFT = 18;
|
||||
private static final int INDEX_DRAFT_PREVIEW_URI = 19;
|
||||
private static final int INDEX_DRAFT_PREVIEW_CONTENT_TYPE = 20;
|
||||
private static final int INDEX_DRAFT_SNIPPET_TEXT = 21;
|
||||
private static final int INDEX_ARCHIVE_STATUS = 22;
|
||||
private static final int INDEX_MESSAGE_ID = 23;
|
||||
private static final int INDEX_SUBJECT_TEXT = 24;
|
||||
private static final int INDEX_DRAFT_SUBJECT_TEXT = 25;
|
||||
private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 26;
|
||||
private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 27;
|
||||
private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 28;
|
||||
private static final int INDEX_IS_ENTERPRISE = 29;
|
||||
private static final int INDEX_INCLUDE_EMAIL_ADDRESS = 13;
|
||||
private static final int INDEX_MESSAGE_STATUS = 14;
|
||||
private static final int INDEX_SHOW_DRAFT = 15;
|
||||
private static final int INDEX_DRAFT_PREVIEW_URI = 16;
|
||||
private static final int INDEX_DRAFT_PREVIEW_CONTENT_TYPE = 17;
|
||||
private static final int INDEX_DRAFT_SNIPPET_TEXT = 18;
|
||||
private static final int INDEX_ARCHIVE_STATUS = 19;
|
||||
private static final int INDEX_MESSAGE_ID = 20;
|
||||
private static final int INDEX_SUBJECT_TEXT = 21;
|
||||
private static final int INDEX_DRAFT_SUBJECT_TEXT = 22;
|
||||
private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 23;
|
||||
private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 24;
|
||||
private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 25;
|
||||
private static final int INDEX_IS_ENTERPRISE = 26;
|
||||
|
||||
private static final String DIVIDER_TEXT = ", ";
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import android.os.Bundle;
|
||||
import com.android.messaging.datamodel.BoundCursorLoader;
|
||||
import com.android.messaging.datamodel.MessagingContentProvider;
|
||||
import com.android.messaging.datamodel.action.BugleActionToasts;
|
||||
import com.android.messaging.datamodel.action.UpdateConversationOptionsAction;
|
||||
import com.android.messaging.datamodel.action.UpdateDestinationBlockedAction;
|
||||
import com.android.messaging.datamodel.binding.BindableData;
|
||||
import com.android.messaging.datamodel.binding.BindingBase;
|
||||
@@ -74,7 +73,7 @@ public class PeopleAndOptionsData extends BindableData implements
|
||||
final Uri uri =
|
||||
MessagingContentProvider.buildConversationMetadataUri(mConversationId);
|
||||
return new BoundCursorLoader(bindingId, mContext, uri,
|
||||
PeopleOptionsItemData.PROJECTION, null, null, null);
|
||||
new String[]{}, null, null, null);
|
||||
}
|
||||
|
||||
case PARTICIPANT_LOADER: {
|
||||
@@ -169,33 +168,6 @@ public class PeopleAndOptionsData extends BindableData implements
|
||||
}
|
||||
}
|
||||
|
||||
public void enableConversationNotifications(final BindingBase<PeopleAndOptionsData> binding,
|
||||
final boolean enable) {
|
||||
final String bindingId = binding.getBindingId();
|
||||
if (isBound(bindingId)) {
|
||||
UpdateConversationOptionsAction.enableConversationNotifications(
|
||||
mConversationId, enable);
|
||||
}
|
||||
}
|
||||
|
||||
public void setConversationNotificationSound(final BindingBase<PeopleAndOptionsData> binding,
|
||||
final String ringtoneUri) {
|
||||
final String bindingId = binding.getBindingId();
|
||||
if (isBound(bindingId)) {
|
||||
UpdateConversationOptionsAction.setConversationNotificationSound(mConversationId,
|
||||
ringtoneUri);
|
||||
}
|
||||
}
|
||||
|
||||
public void enableConversationNotificationVibration(
|
||||
final BindingBase<PeopleAndOptionsData> binding, final boolean enable) {
|
||||
final String bindingId = binding.getBindingId();
|
||||
if (isBound(bindingId)) {
|
||||
UpdateConversationOptionsAction.enableVibrationForConversationNotification(
|
||||
mConversationId, enable);
|
||||
}
|
||||
}
|
||||
|
||||
public void setDestinationBlocked(final BindingBase<PeopleAndOptionsData> binding,
|
||||
final boolean blocked) {
|
||||
final String bindingId = binding.getBindingId();
|
||||
@@ -207,4 +179,8 @@ public class PeopleAndOptionsData extends BindableData implements
|
||||
BugleActionToasts.makeUpdateDestinationBlockedActionListener(mContext));
|
||||
}
|
||||
}
|
||||
|
||||
public String getConversationId() {
|
||||
return mConversationId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,44 +17,19 @@ package com.android.messaging.datamodel.data;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.media.Ringtone;
|
||||
import android.media.RingtoneManager;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.android.messaging.R;
|
||||
import com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns;
|
||||
import com.android.messaging.util.Assert;
|
||||
import com.android.messaging.util.RingtoneUtil;
|
||||
|
||||
public class PeopleOptionsItemData {
|
||||
public static final String[] PROJECTION = {
|
||||
ConversationListViewColumns.NOTIFICATION_ENABLED,
|
||||
ConversationListViewColumns.NOTIFICATION_SOUND_URI,
|
||||
ConversationListViewColumns.NOTIFICATION_VIBRATION,
|
||||
};
|
||||
|
||||
// Column index for query projection.
|
||||
private static final int INDEX_NOTIFICATION_ENABLED = 0;
|
||||
private static final int INDEX_NOTIFICATION_SOUND_URI = 1;
|
||||
private static final int INDEX_NOTIFICATION_VIBRATION = 2;
|
||||
|
||||
// Identification for each setting that's surfaced to the UI layer.
|
||||
public static final int SETTING_NOTIFICATION_ENABLED = 0;
|
||||
public static final int SETTING_NOTIFICATION_SOUND_URI = 1;
|
||||
public static final int SETTING_NOTIFICATION_VIBRATION = 2;
|
||||
public static final int SETTING_BLOCKED = 3;
|
||||
public static final int SETTINGS_COUNT = 4;
|
||||
|
||||
// Type of UI switch to show for the toggle button.
|
||||
public static final int TOGGLE_TYPE_CHECKBOX = 0;
|
||||
public static final int TOGGLE_TYPE_SWITCH = 1;
|
||||
public static final int SETTING_NOTIFICATION = 0;
|
||||
public static final int SETTING_BLOCKED = 1;
|
||||
public static final int SETTINGS_COUNT = 2;
|
||||
|
||||
private String mTitle;
|
||||
private String mSubtitle;
|
||||
private Uri mRingtoneUri;
|
||||
private boolean mCheckable;
|
||||
private boolean mChecked;
|
||||
private boolean mEnabled;
|
||||
private int mItemId;
|
||||
private ParticipantData mOtherParticipant;
|
||||
|
||||
@@ -71,41 +46,12 @@ public class PeopleOptionsItemData {
|
||||
*/
|
||||
public void bind(
|
||||
final Cursor cursor, final ParticipantData otherParticipant, final int settingType) {
|
||||
mSubtitle = null;
|
||||
mRingtoneUri = null;
|
||||
mCheckable = true;
|
||||
mEnabled = true;
|
||||
mItemId = settingType;
|
||||
mOtherParticipant = otherParticipant;
|
||||
|
||||
final boolean notificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1;
|
||||
switch (settingType) {
|
||||
case SETTING_NOTIFICATION_ENABLED:
|
||||
case SETTING_NOTIFICATION:
|
||||
mTitle = mContext.getString(R.string.notifications_enabled_conversation_pref_title);
|
||||
mChecked = notificationEnabled;
|
||||
break;
|
||||
|
||||
case SETTING_NOTIFICATION_SOUND_URI:
|
||||
mTitle = mContext.getString(R.string.notification_sound_pref_title);
|
||||
final String ringtoneString = cursor.getString(INDEX_NOTIFICATION_SOUND_URI);
|
||||
Uri ringtoneUri = RingtoneUtil.getNotificationRingtoneUri(ringtoneString);
|
||||
|
||||
mSubtitle = mContext.getString(R.string.silent_ringtone);
|
||||
if (ringtoneUri != null) {
|
||||
final Ringtone ringtone = RingtoneManager.getRingtone(mContext, ringtoneUri);
|
||||
if (ringtone != null) {
|
||||
mSubtitle = ringtone.getTitle(mContext);
|
||||
}
|
||||
}
|
||||
mCheckable = false;
|
||||
mRingtoneUri = ringtoneUri;
|
||||
mEnabled = notificationEnabled;
|
||||
break;
|
||||
|
||||
case SETTING_NOTIFICATION_VIBRATION:
|
||||
mTitle = mContext.getString(R.string.notification_vibrate_pref_title);
|
||||
mChecked = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1;
|
||||
mEnabled = notificationEnabled;
|
||||
break;
|
||||
|
||||
case SETTING_BLOCKED:
|
||||
@@ -113,7 +59,6 @@ public class PeopleOptionsItemData {
|
||||
final int resourceId = otherParticipant.isBlocked() ?
|
||||
R.string.unblock_contact_title : R.string.block_contact_title;
|
||||
mTitle = mContext.getString(resourceId, otherParticipant.getDisplayDestination());
|
||||
mCheckable = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -125,30 +70,10 @@ public class PeopleOptionsItemData {
|
||||
return mTitle;
|
||||
}
|
||||
|
||||
public String getSubtitle() {
|
||||
return mSubtitle;
|
||||
}
|
||||
|
||||
public boolean getCheckable() {
|
||||
return mCheckable;
|
||||
}
|
||||
|
||||
public boolean getChecked() {
|
||||
return mChecked;
|
||||
}
|
||||
|
||||
public boolean getEnabled() {
|
||||
return mEnabled;
|
||||
}
|
||||
|
||||
public int getItemId() {
|
||||
return mItemId;
|
||||
}
|
||||
|
||||
public Uri getRingtoneUri() {
|
||||
return mRingtoneUri;
|
||||
}
|
||||
|
||||
public ParticipantData getOtherParticipant() {
|
||||
return mOtherParticipant;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user