NekoX/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsSettingsFacade...

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();
}
}