Notifications: add new virtual type for subscriptions
This commit is contained in:
parent
8982f7af28
commit
0bdad9ad7a
|
@ -34,6 +34,9 @@
|
|||
<string name="notification_chat_message_format">%s sent you a message</string>
|
||||
<string name="notification_chat_message_name">Chat Messages</string>
|
||||
<string name="notification_chat_message_description">Notifications about new chat messages</string>
|
||||
<string name="notification_subscription_format">%s published a new post</string>
|
||||
<string name="notification_subscription_name">Subscriptions</string>
|
||||
<string name="notification_subscription_description">Notifications when somebody you\'re subscribed to published a new post</string>
|
||||
|
||||
<string name="pref_title_other">Other</string>
|
||||
<string name="pref_title_privacy">Privacy</string>
|
||||
|
@ -44,6 +47,7 @@
|
|||
<string name="pref_title_default_formatting">Default formatting syntax(if supported by instance)</string>
|
||||
<string name="pref_title_notification_filter_emoji">my posts are reacted with emojis</string>
|
||||
<string name="pref_title_notification_filter_chat_messages">received a chat message</string>
|
||||
<string name="pref_title_notification_filter_subscriptions">somebody I\'m subscribed to published a new post</string>
|
||||
<string name="pref_title_hide_muted_users">Hide muted users</string>
|
||||
<string name="pref_title_enable_big_emojis">Enable bigger custom emojis</string>
|
||||
<string name="pref_title_enable_experimental_stickers">Enable experimental Pleroma-FE stickers(if available)</string>
|
||||
|
|
|
@ -128,7 +128,7 @@ public class NotificationHelper {
|
|||
public static final String CHANNEL_POLL = "CHANNEL_POLL";
|
||||
public static final String CHANNEL_EMOJI_REACTION = "CHANNEL_EMOJI_REACTION";
|
||||
public static final String CHANNEL_CHAT_MESSAGES = "CHANNEL_CHAT_MESSAGES";
|
||||
|
||||
public static final String CHANNEL_SUBSCRIPTIONS = "CHANNEL_SUBSCRIPTIONS";
|
||||
|
||||
/**
|
||||
* WorkManager Tag
|
||||
|
@ -400,7 +400,8 @@ public class NotificationHelper {
|
|||
CHANNEL_FAVOURITE + account.getIdentifier(),
|
||||
CHANNEL_POLL + account.getIdentifier(),
|
||||
CHANNEL_EMOJI_REACTION + account.getIdentifier(),
|
||||
CHANNEL_CHAT_MESSAGES + account.getIdentifier()
|
||||
CHANNEL_CHAT_MESSAGES + account.getIdentifier(),
|
||||
CHANNEL_SUBSCRIPTIONS + account.getIdentifier()
|
||||
};
|
||||
int[] channelNames = {
|
||||
R.string.notification_mention_name,
|
||||
|
@ -411,6 +412,7 @@ public class NotificationHelper {
|
|||
R.string.notification_poll_name,
|
||||
R.string.notification_emoji_name,
|
||||
R.string.notification_chat_message_name,
|
||||
R.string.notification_subscription_name
|
||||
};
|
||||
int[] channelDescriptions = {
|
||||
R.string.notification_mention_descriptions,
|
||||
|
@ -421,9 +423,10 @@ public class NotificationHelper {
|
|||
R.string.notification_poll_description,
|
||||
R.string.notification_emoji_description,
|
||||
R.string.notification_chat_message_description,
|
||||
R.string.notification_subscription_description
|
||||
};
|
||||
|
||||
List<NotificationChannel> channels = new ArrayList<>(6);
|
||||
List<NotificationChannel> channels = new ArrayList<>(9);
|
||||
|
||||
NotificationChannelGroup channelGroup = new NotificationChannelGroup(account.getIdentifier(), account.getFullName());
|
||||
|
||||
|
@ -565,7 +568,9 @@ public class NotificationHelper {
|
|||
|
||||
switch (notification.getType()) {
|
||||
case MENTION:
|
||||
return account.getNotificationsMentioned();
|
||||
if(isMentionedInNotification(notification, account.getAccountId()))
|
||||
return account.getNotificationsMentioned();
|
||||
else return account.getNotificationsSubscriptions();
|
||||
case FOLLOW:
|
||||
return account.getNotificationsFollowed();
|
||||
case FOLLOW_REQUEST:
|
||||
|
@ -589,7 +594,9 @@ public class NotificationHelper {
|
|||
private static String getChannelId(AccountEntity account, Notification notification) {
|
||||
switch (notification.getType()) {
|
||||
case MENTION:
|
||||
return CHANNEL_MENTION + account.getIdentifier();
|
||||
if(isMentionedInNotification(notification, account.getAccountId()))
|
||||
return CHANNEL_MENTION + account.getIdentifier();
|
||||
else return CHANNEL_SUBSCRIPTIONS + account.getIdentifier();
|
||||
case FOLLOW:
|
||||
return CHANNEL_FOLLOW + account.getIdentifier();
|
||||
case FOLLOW_REQUEST:
|
||||
|
@ -656,14 +663,32 @@ public class NotificationHelper {
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean isMentionedInNotification(Notification not, String id) {
|
||||
if(not.getStatus() != null) {
|
||||
for(int i = 0; i < not.getStatus().getMentions().length; i++) {
|
||||
if(not.getStatus().getMentions()[i].getId().equals(id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true; // actually should never happen, true just in case someone breaks API again
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String titleForType(Context context, Notification notification, AccountEntity account) {
|
||||
String accountName = StringUtils.unicodeWrap(notification.getAccount().getName());
|
||||
switch (notification.getType()) {
|
||||
case MENTION:
|
||||
return String.format(context.getString(R.string.notification_mention_format),
|
||||
accountName);
|
||||
if(isMentionedInNotification(notification, account.getAccountId())) {
|
||||
return String.format(context.getString(R.string.notification_mention_format),
|
||||
accountName);
|
||||
} else {
|
||||
return String.format(context.getString(R.string.notification_subscription_format), accountName);
|
||||
}
|
||||
case FOLLOW:
|
||||
return String.format(context.getString(R.string.notification_follow_format),
|
||||
accountName);
|
||||
|
|
|
@ -133,6 +133,17 @@ class NotificationPreferencesFragment : PreferenceFragmentCompat(), Injectable {
|
|||
true
|
||||
}
|
||||
}
|
||||
|
||||
switchPreference {
|
||||
setTitle(R.string.pref_title_notification_filter_subscriptions)
|
||||
key = PrefKeys.NOTIFICATION_FILTER_SUBSCRIPTIONS
|
||||
isIconSpaceReserved = false
|
||||
isChecked = activeAccount.notificationsSubscriptions
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
updateAccount { it.notificationsSubscriptions = newValue as Boolean }
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preferenceCategory(R.string.pref_title_notification_alerts) { category ->
|
||||
|
|
|
@ -46,6 +46,7 @@ data class AccountEntity(@field:PrimaryKey(autoGenerate = true) var id: Long,
|
|||
var notificationsPolls: Boolean = true,
|
||||
var notificationsEmojiReactions: Boolean = true,
|
||||
var notificationsChatMessages: Boolean = true,
|
||||
var notificationsSubscriptions: Boolean = true,
|
||||
var notificationSound: Boolean = true,
|
||||
var notificationVibration: Boolean = true,
|
||||
var notificationLight: Boolean = true,
|
||||
|
|
|
@ -29,7 +29,7 @@ import androidx.annotation.NonNull;
|
|||
*/
|
||||
|
||||
@Database(entities = {TootEntity.class, AccountEntity.class, InstanceEntity.class, TimelineStatusEntity.class,
|
||||
TimelineAccountEntity.class, ConversationEntity.class, ChatEntity.class, ChatMessageEntity.class}, version = 25)
|
||||
TimelineAccountEntity.class, ConversationEntity.class, ChatEntity.class, ChatMessageEntity.class}, version = 26)
|
||||
public abstract class AppDatabase extends RoomDatabase {
|
||||
|
||||
public abstract TootDao tootDao();
|
||||
|
@ -376,4 +376,11 @@ public abstract class AppDatabase extends RoomDatabase {
|
|||
database.execSQL("ALTER TABLE `TimelineStatusEntity` ADD COLUMN `pleroma` TEXT");
|
||||
}
|
||||
};
|
||||
|
||||
public static final Migration MIGRATION_25_26 = new Migration(25, 26) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `notificationsSubscriptions` INTEGER NOT NULL DEFAULT 1");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -80,7 +80,8 @@ class AppModule {
|
|||
AppDatabase.MIGRATION_13_14, AppDatabase.MIGRATION_14_15, AppDatabase.MIGRATION_15_16,
|
||||
AppDatabase.MIGRATION_16_17, AppDatabase.MIGRATION_17_18, AppDatabase.MIGRATION_18_19,
|
||||
AppDatabase.MIGRATION_19_20, AppDatabase.MIGRATION_20_21, AppDatabase.MIGRATION_21_22,
|
||||
AppDatabase.MIGRATION_22_23, AppDatabase.MIGRATION_23_24, AppDatabase.MIGRATION_24_25)
|
||||
AppDatabase.MIGRATION_22_23, AppDatabase.MIGRATION_23_24, AppDatabase.MIGRATION_24_25,
|
||||
AppDatabase.MIGRATION_25_26)
|
||||
.build()
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ object PrefKeys {
|
|||
const val NOTIFICATION_FILTER_REBLOGS = "notificationFilterReblogs"
|
||||
const val NOTIFICATION_FILTER_FOLLOW_REQUESTS = "notificationFilterFollowRequests"
|
||||
const val NOTIFICATION_FILTER_EMOJI_REACTIONS = "notificationFilterEmojis"
|
||||
const val NOTIFICATION_FILTER_SUBSCRIPTIONS = "notificationFilterSubscriptions"
|
||||
const val NOTIFICATIONS_FILTER_FOLLOWS = "notificationFilterFollows"
|
||||
|
||||
const val TAB_FILTER_HOME_REPLIES = "tabFilterHomeReplies"
|
||||
|
|
Loading…
Reference in New Issue