mirror of https://github.com/NekoX-Dev/NekoX.git
259 lines
12 KiB
Java
259 lines
12 KiB
Java
|
package org.telegram.messenger;
|
||
|
|
||
|
import static org.telegram.messenger.NotificationsController.TYPE_PRIVATE;
|
||
|
|
||
|
import android.content.SharedPreferences;
|
||
|
|
||
|
import org.telegram.tgnet.ConnectionsManager;
|
||
|
import org.telegram.tgnet.TLRPC;
|
||
|
|
||
|
public class NotificationsSettingsFacade {
|
||
|
|
||
|
public final static String PROPERTY_NOTIFY = "notify2_";
|
||
|
public final static String PROPERTY_CUSTOM = "custom_";
|
||
|
public final static String PROPERTY_NOTIFY_UNTIL = "notifyuntil_";
|
||
|
public final static String PROPERTY_CONTENT_PREVIEW = "content_preview_";
|
||
|
public final static String PROPERTY_SILENT = "silent_";
|
||
|
|
||
|
private final int currentAccount;
|
||
|
|
||
|
public NotificationsSettingsFacade(int currentAccount) {
|
||
|
this.currentAccount = currentAccount;
|
||
|
}
|
||
|
|
||
|
|
||
|
public boolean isDefault(long dialogId, int topicId) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public void clearPreference(long dialogId, int topicId) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
getPreferences().edit()
|
||
|
.remove(PROPERTY_NOTIFY + key)
|
||
|
.remove(PROPERTY_CUSTOM + key)
|
||
|
.remove(PROPERTY_NOTIFY_UNTIL + key)
|
||
|
.remove(PROPERTY_CONTENT_PREVIEW + key)
|
||
|
.remove(PROPERTY_SILENT + key)
|
||
|
.apply();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
public int getProperty(String property, long dialogId, int topicId, int defaultValue) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
if (getPreferences().contains(property + key)) {
|
||
|
return getPreferences().getInt(property + key, defaultValue);
|
||
|
}
|
||
|
key = NotificationsController.getSharedPrefKey(dialogId, 0);
|
||
|
return getPreferences().getInt(property + key, defaultValue);
|
||
|
}
|
||
|
|
||
|
public long getProperty(String property, long dialogId, int topicId, long defaultValue) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
if (getPreferences().contains(property + key)) {
|
||
|
return getPreferences().getLong(property + key, defaultValue);
|
||
|
}
|
||
|
key = NotificationsController.getSharedPrefKey(dialogId, 0);
|
||
|
return getPreferences().getLong(property + key, defaultValue);
|
||
|
}
|
||
|
|
||
|
public boolean getProperty(String property, long dialogId, int topicId, boolean defaultValue) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
if (getPreferences().contains(property + key)) {
|
||
|
return getPreferences().getBoolean(property + key, defaultValue);
|
||
|
}
|
||
|
key = NotificationsController.getSharedPrefKey(dialogId, 0);
|
||
|
return getPreferences().getBoolean(property + key, defaultValue);
|
||
|
}
|
||
|
|
||
|
public String getPropertyString(String property, long dialogId, int topicId, String defaultValue) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
if (getPreferences().contains(property + key)) {
|
||
|
return getPreferences().getString(property + key, defaultValue);
|
||
|
}
|
||
|
key = NotificationsController.getSharedPrefKey(dialogId, 0);
|
||
|
return getPreferences().getString(property + key, defaultValue);
|
||
|
}
|
||
|
|
||
|
|
||
|
public void removeProperty(String property, long dialogId, int topicId) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
getPreferences().edit().remove(property + key).apply();
|
||
|
}
|
||
|
|
||
|
private SharedPreferences getPreferences() {
|
||
|
return MessagesController.getNotificationsSettings(currentAccount);
|
||
|
}
|
||
|
|
||
|
public void applyDialogNotificationsSettings(long dialogId, int topicId, TLRPC.PeerNotifySettings notify_settings) {
|
||
|
if (notify_settings == null) {
|
||
|
return;
|
||
|
}
|
||
|
Utilities.globalQueue.postRunnable(() -> {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
MessagesController messagesController = MessagesController.getInstance(currentAccount);
|
||
|
ConnectionsManager connectionsManager = ConnectionsManager.getInstance(currentAccount);
|
||
|
MessagesStorage messagesStorage = MessagesStorage.getInstance(currentAccount);
|
||
|
NotificationsController notificationsController = NotificationsController.getInstance(currentAccount);
|
||
|
|
||
|
int currentValue = getPreferences().getInt(PROPERTY_NOTIFY + key, -1);
|
||
|
int currentValue2 = getPreferences().getInt(PROPERTY_NOTIFY_UNTIL + key, 0);
|
||
|
SharedPreferences.Editor editor = getPreferences().edit();
|
||
|
boolean updated = false;
|
||
|
if ((notify_settings.flags & 2) != 0) {
|
||
|
editor.putBoolean(PROPERTY_SILENT + key, notify_settings.silent);
|
||
|
} else {
|
||
|
editor.remove(PROPERTY_SILENT + key);
|
||
|
}
|
||
|
|
||
|
TLRPC.Dialog dialog = null;
|
||
|
if (topicId == 0) {
|
||
|
dialog = messagesController.dialogs_dict.get(dialogId);
|
||
|
}
|
||
|
if (dialog != null) {
|
||
|
dialog.notify_settings = notify_settings;
|
||
|
}
|
||
|
|
||
|
if ((notify_settings.flags & 4) != 0) {
|
||
|
if (notify_settings.mute_until > connectionsManager.getCurrentTime()) {
|
||
|
int until = 0;
|
||
|
if (notify_settings.mute_until > connectionsManager.getCurrentTime() + 60 * 60 * 24 * 365) {
|
||
|
if (currentValue != 2) {
|
||
|
updated = true;
|
||
|
editor.putInt(PROPERTY_NOTIFY + key, 2);
|
||
|
if (dialog != null) {
|
||
|
dialog.notify_settings.mute_until = Integer.MAX_VALUE;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (currentValue != 3 || currentValue2 != notify_settings.mute_until) {
|
||
|
updated = true;
|
||
|
editor.putInt(PROPERTY_NOTIFY + key, 3);
|
||
|
editor.putInt(PROPERTY_NOTIFY_UNTIL + key, notify_settings.mute_until);
|
||
|
if (dialog != null) {
|
||
|
dialog.notify_settings.mute_until = until;
|
||
|
}
|
||
|
}
|
||
|
until = notify_settings.mute_until;
|
||
|
}
|
||
|
if (topicId == 0) {
|
||
|
messagesStorage.setDialogFlags(dialogId, ((long) until << 32) | 1);
|
||
|
notificationsController.removeNotificationsForDialog(dialogId);
|
||
|
}
|
||
|
} else {
|
||
|
if (currentValue != 0 && currentValue != 1) {
|
||
|
updated = true;
|
||
|
if (dialog != null) {
|
||
|
dialog.notify_settings.mute_until = 0;
|
||
|
}
|
||
|
editor.putInt(PROPERTY_NOTIFY + key, 0);
|
||
|
}
|
||
|
if (topicId == 0) {
|
||
|
messagesStorage.setDialogFlags(dialogId, 0);
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (currentValue != -1) {
|
||
|
updated = true;
|
||
|
if (dialog != null) {
|
||
|
dialog.notify_settings.mute_until = 0;
|
||
|
}
|
||
|
editor.remove(PROPERTY_NOTIFY + key);
|
||
|
}
|
||
|
if (topicId == 0) {
|
||
|
messagesStorage.setDialogFlags(dialogId, 0);
|
||
|
}
|
||
|
}
|
||
|
applySoundSettings(notify_settings.android_sound, editor, dialogId, topicId, 0, false);
|
||
|
editor.apply();
|
||
|
if (updated) {
|
||
|
AndroidUtilities.runOnUIThread(() -> {
|
||
|
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.notificationsSettingsUpdated);
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public void applySoundSettings(TLRPC.NotificationSound settings, SharedPreferences.Editor editor, long dialogId, int topicId, int globalType, boolean serverUpdate) {
|
||
|
if (settings == null) {
|
||
|
return;
|
||
|
}
|
||
|
String soundPref;
|
||
|
String soundPathPref;
|
||
|
String soundDocPref;
|
||
|
if (dialogId != 0) {
|
||
|
String key = NotificationsController.getSharedPrefKey(dialogId, topicId);
|
||
|
soundPref = "sound_" + key;
|
||
|
soundPathPref = "sound_path_" + key;
|
||
|
soundDocPref = "sound_document_id_" + key;
|
||
|
} else {
|
||
|
if (globalType == NotificationsController.TYPE_GROUP) {
|
||
|
soundPref = "GroupSound";
|
||
|
soundDocPref = "GroupSoundDocId";
|
||
|
soundPathPref = "GroupSoundPath";
|
||
|
} else if (globalType == TYPE_PRIVATE) {
|
||
|
soundPref = "GlobalSound";
|
||
|
soundDocPref = "GlobalSoundDocId";
|
||
|
soundPathPref = "GlobalSoundPath";
|
||
|
} else {
|
||
|
soundPref = "ChannelSound";
|
||
|
soundDocPref = "ChannelSoundDocId";
|
||
|
soundPathPref = "ChannelSoundPath";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (settings instanceof TLRPC.TL_notificationSoundDefault) {
|
||
|
editor.putString(soundPref, "Default");
|
||
|
editor.putString(soundPathPref, "Default");
|
||
|
editor.remove(soundDocPref);
|
||
|
} else if (settings instanceof TLRPC.TL_notificationSoundNone) {
|
||
|
editor.putString(soundPref, "NoSound");
|
||
|
editor.putString(soundPathPref, "NoSound");
|
||
|
editor.remove(soundDocPref);
|
||
|
} else if (settings instanceof TLRPC.TL_notificationSoundLocal) {
|
||
|
TLRPC.TL_notificationSoundLocal localSound = (TLRPC.TL_notificationSoundLocal) settings;
|
||
|
editor.putString(soundPref, localSound.title);
|
||
|
editor.putString(soundPathPref, localSound.data);
|
||
|
editor.remove(soundDocPref);
|
||
|
} else if (settings instanceof TLRPC.TL_notificationSoundRingtone) {
|
||
|
TLRPC.TL_notificationSoundRingtone soundRingtone = (TLRPC.TL_notificationSoundRingtone) settings;
|
||
|
editor.putLong(soundDocPref, soundRingtone.id);
|
||
|
MediaDataController.getInstance(currentAccount).checkRingtones();
|
||
|
if (serverUpdate && dialogId != 0) {
|
||
|
editor.putBoolean("custom_" + dialogId, true);
|
||
|
}
|
||
|
MediaDataController.getInstance(currentAccount).ringtoneDataStore.getDocument(soundRingtone.id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setSettingsForDialog(TLRPC.Dialog dialog, TLRPC.PeerNotifySettings notify_settings) {
|
||
|
SharedPreferences.Editor editor = getPreferences().edit();
|
||
|
long dialogId = MessageObject.getPeerId(dialog.peer);
|
||
|
|
||
|
if ((dialog.notify_settings.flags & 2) != 0) {
|
||
|
editor.putBoolean(PROPERTY_SILENT + dialogId, dialog.notify_settings.silent);
|
||
|
} else {
|
||
|
editor.remove(PROPERTY_SILENT + dialogId);
|
||
|
}
|
||
|
ConnectionsManager connectionsManager = ConnectionsManager.getInstance(currentAccount);
|
||
|
if ((dialog.notify_settings.flags & 4) != 0) {
|
||
|
if (dialog.notify_settings.mute_until > connectionsManager.getCurrentTime()) {
|
||
|
if (dialog.notify_settings.mute_until > connectionsManager.getCurrentTime() + 60 * 60 * 24 * 365) {
|
||
|
editor.putInt(PROPERTY_NOTIFY + dialogId, 2);
|
||
|
dialog.notify_settings.mute_until = Integer.MAX_VALUE;
|
||
|
} else {
|
||
|
editor.putInt(PROPERTY_NOTIFY + dialogId, 3);
|
||
|
editor.putInt(PROPERTY_NOTIFY_UNTIL + dialogId, dialog.notify_settings.mute_until);
|
||
|
}
|
||
|
} else {
|
||
|
editor.putInt(PROPERTY_NOTIFY + dialogId, 0);
|
||
|
}
|
||
|
} else {
|
||
|
editor.remove(PROPERTY_NOTIFY + dialogId);
|
||
|
}
|
||
|
|
||
|
editor.apply();
|
||
|
}
|
||
|
}
|