mirror of
https://github.com/MGislv/NekoX.git
synced 2024-07-04 11:13:36 +00:00
Extra futures
This commit is contained in:
parent
8727ccbd79
commit
b0277d41de
|
@ -313,7 +313,7 @@ public class ContactsController extends BaseController {
|
|||
public void checkAppAccount() {
|
||||
AccountManager am = AccountManager.get(ApplicationLoader.applicationContext);
|
||||
try {
|
||||
Account[] accounts = am.getAccountsByType("tw.nekomimi.nekogram");
|
||||
Account[] accounts = am.getAccountsByType(BuildConfig.APPLICATION_ID);
|
||||
systemAccount = null;
|
||||
for (int a = 0; a < accounts.length; a++) {
|
||||
Account acc = accounts[a];
|
||||
|
@ -321,7 +321,7 @@ public class ContactsController extends BaseController {
|
|||
for (int b = 0; b < UserConfig.MAX_ACCOUNT_COUNT; b++) {
|
||||
TLRPC.User user = UserConfig.getInstance(b).getCurrentUser();
|
||||
if (user != null) {
|
||||
if (acc.name.equals("" + user.id)) {
|
||||
if (acc.name.equals(formatName(user.first_name, user.last_name))) {
|
||||
if (b == currentAccount) {
|
||||
systemAccount = acc;
|
||||
}
|
||||
|
@ -330,26 +330,26 @@ public class ContactsController extends BaseController {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (!found || NekoConfig.disableSystemAccount) {
|
||||
try {
|
||||
am.removeAccount(accounts[a], null, null);
|
||||
} catch (Exception ignore) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (Throwable ignore) {
|
||||
|
||||
} catch (Throwable e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
if (getUserConfig().isClientActivated()) {
|
||||
readContacts();
|
||||
if (systemAccount == null) {
|
||||
if (systemAccount == null && !NekoConfig.disableSystemAccount) {
|
||||
try {
|
||||
systemAccount = new Account("" + UserConfig.getInstance(currentAccount).getClientUserId(), "tw.nekomimi.nekogram");
|
||||
TLRPC.User user = UserConfig.getInstance(currentAccount).getCurrentUser();
|
||||
systemAccount = new Account(formatName(user.first_name, user.last_name), BuildConfig.APPLICATION_ID);
|
||||
am.addAccountExplicitly(systemAccount, "", null);
|
||||
} catch (Exception ignore) {
|
||||
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -359,14 +359,21 @@ public class ContactsController extends BaseController {
|
|||
try {
|
||||
systemAccount = null;
|
||||
AccountManager am = AccountManager.get(ApplicationLoader.applicationContext);
|
||||
Account[] accounts = am.getAccountsByType("tw.nekomimi.nekogram");
|
||||
Account[] accounts = am.getAccountsByType(BuildConfig.APPLICATION_ID);
|
||||
for (int a = 0; a < accounts.length; a++) {
|
||||
Account acc = accounts[a];
|
||||
if (NekoConfig.disableSystemAccount) {
|
||||
try {
|
||||
am.removeAccount(accounts[a], null, null);
|
||||
} catch (Exception ignore) {
|
||||
|
||||
}
|
||||
} else {
|
||||
boolean found = false;
|
||||
for (int b = 0; b < UserConfig.MAX_ACCOUNT_COUNT; b++) {
|
||||
TLRPC.User user = UserConfig.getInstance(b).getCurrentUser();
|
||||
if (user != null) {
|
||||
if (acc.name.equals("" + user.id)) {
|
||||
if (acc.name.equals(formatName(user.first_name, user.last_name))) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -380,6 +387,7 @@ public class ContactsController extends BaseController {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -435,7 +443,7 @@ public class ContactsController extends BaseController {
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
AccountManager am = AccountManager.get(ApplicationLoader.applicationContext);
|
||||
try {
|
||||
Account[] accounts = am.getAccountsByType("tw.nekomimi.nekogram");
|
||||
Account[] accounts = am.getAccountsByType(BuildConfig.APPLICATION_ID);
|
||||
systemAccount = null;
|
||||
for (int a = 0; a < accounts.length; a++) {
|
||||
Account acc = accounts[a];
|
||||
|
@ -453,7 +461,7 @@ public class ContactsController extends BaseController {
|
|||
|
||||
}
|
||||
try {
|
||||
systemAccount = new Account("" + UserConfig.getInstance(currentAccount).getClientUserId(), "tw.nekomimi.nekogram");
|
||||
systemAccount = new Account("" + UserConfig.getInstance(currentAccount).getClientUserId(), BuildConfig.APPLICATION_ID);
|
||||
am.addAccountExplicitly(systemAccount, "", null);
|
||||
} catch (Exception ignore) {
|
||||
|
||||
|
@ -1600,7 +1608,7 @@ public class ContactsController extends BaseController {
|
|||
private void saveContactsLoadTime() {
|
||||
try {
|
||||
SharedPreferences preferences = MessagesController.getMainSettings(currentAccount);
|
||||
preferences.edit().putLong("lastReloadStatusTime", System.currentTimeMillis()).commit();
|
||||
preferences.edit().putLong("lastReloadStatusTime", System.currentTimeMillis()).apply();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
@ -2246,7 +2254,7 @@ public class ContactsController extends BaseController {
|
|||
getMessagesController().clearFullUsers();
|
||||
SharedPreferences preferences = MessagesController.getMainSettings(currentAccount);
|
||||
final SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putBoolean("needGetStatuses", true).commit();
|
||||
editor.putBoolean("needGetStatuses", true).apply();
|
||||
TLRPC.TL_contacts_getStatuses req = new TLRPC.TL_contacts_getStatuses();
|
||||
getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||
if (error == null) {
|
||||
|
|
|
@ -86,6 +86,8 @@ import java.util.Locale;
|
|||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoXConfig;
|
||||
|
||||
public class MediaController implements AudioManager.OnAudioFocusChangeListener, NotificationCenter.NotificationCenterDelegate, SensorEventListener {
|
||||
|
||||
private native int startRecord(String path, int sampleRate);
|
||||
|
@ -1133,7 +1135,7 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
|||
}
|
||||
}
|
||||
}
|
||||
if (send) {
|
||||
if (send && !NekoXConfig.disableScreenshotDetection) {
|
||||
if (lastSecretChat != null) {
|
||||
SecretChatHelper.getInstance(lastChatAccount).sendScreenshotMessage(lastSecretChat, lastChatVisibleMessages, null);
|
||||
} else {
|
||||
|
@ -1142,6 +1144,10 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
|||
}
|
||||
}
|
||||
|
||||
public ArrayList<Long> getLastVisibleMessageIds() {
|
||||
return lastChatVisibleMessages;
|
||||
}
|
||||
|
||||
public void setLastVisibleMessageIds(int account, long enterTime, long leaveTime, TLRPC.User user, TLRPC.EncryptedChat encryptedChat, ArrayList<Long> visibleMessages, int visibleMessage) {
|
||||
lastChatEnterTime = enterTime;
|
||||
lastChatLeaveTime = leaveTime;
|
||||
|
|
|
@ -55,7 +55,12 @@ import java.util.Set;
|
|||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import tw.nekomimi.nekogram.ExternalGcm;
|
||||
import tw.nekomimi.nekogram.InternalFilters;
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||
import tw.nekomimi.nekogram.utils.ThreadUtil;
|
||||
import tw.nekomimi.nekogram.utils.UIUtil;
|
||||
|
||||
public class MessagesController extends BaseController implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
|
@ -234,6 +239,8 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
|
||||
private boolean loadingAppConfig;
|
||||
|
||||
public int thisDc;
|
||||
|
||||
public boolean enableJoined;
|
||||
public String linkPrefix;
|
||||
public int maxGroupCount;
|
||||
|
@ -435,6 +442,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
|
||||
private DialogFilter sortingDialogFilter;
|
||||
|
||||
private final Comparator<TLRPC.Dialog> dialogDateComparator = (dialog1, dialog2) -> {
|
||||
int pinnedNum1 = sortingDialogFilter.pinnedDialogs.get(dialog1.id, Integer.MIN_VALUE);
|
||||
int pinnedNum2 = sortingDialogFilter.pinnedDialogs.get(dialog2.id, Integer.MIN_VALUE);
|
||||
|
@ -484,6 +492,82 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
boolean is1user = !DialogObject.isChannel(dialog1) && dialog1.id > 0;
|
||||
boolean is2user = !DialogObject.isChannel(dialog2) && dialog2.id > 0;
|
||||
|
||||
if (NekoConfig.sortByUnread) {
|
||||
if (dialog1.unread_count == 0 && dialog2.unread_count > 0) {
|
||||
return 1;
|
||||
} else if (dialog1.unread_count > 0 && dialog2.unread_count == 0) {
|
||||
return -1;
|
||||
} else if (dialog1.unread_count > 0 && dialog2.unread_count > 0) {
|
||||
if (NekoConfig.sortByUnmuted) {
|
||||
if (isDialogMuted(dialog1.id) && !isDialogMuted(dialog2.id)) {
|
||||
return 1;
|
||||
} else if (!isDialogMuted(dialog1.id) && isDialogMuted(dialog2.id)) {
|
||||
return -1;
|
||||
} else if (!isDialogMuted(dialog1.id) && !isDialogMuted(dialog2.id)) {
|
||||
if (NekoConfig.sortByUser) {
|
||||
if (!is1user && is2user) {
|
||||
return 1;
|
||||
} else if (is1user && !is2user) {
|
||||
return -1;
|
||||
} else if (is1user && is2user) {
|
||||
if (NekoConfig.sortByContacts) {
|
||||
boolean is1contact = is1user && getContactsController().isContact((int) dialog1.id);
|
||||
boolean is2contact = is2user && getContactsController().isContact((int) dialog2.id);
|
||||
if (!is1contact && is2contact) {
|
||||
return 1;
|
||||
} else if (is1contact && !is2contact) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else if (NekoConfig.sortByUnmuted) {
|
||||
if (dialog1.unread_count == 0 && dialog2.unread_count > 0 && isDialogMuted(dialog1.id) && !isDialogMuted(dialog2.id)) {
|
||||
return 1;
|
||||
} else if (dialog1.unread_count > 0 && dialog2.unread_count == 0 && !isDialogMuted(dialog1.id) && isDialogMuted(dialog2.id)) {
|
||||
return -1;
|
||||
} else if (dialog1.unread_count > 0 && dialog2.unread_count > 0 && !isDialogMuted(dialog1.id) && !isDialogMuted(dialog2.id)) {
|
||||
if (NekoConfig.sortByUser) {
|
||||
if (!is1user && is2user) {
|
||||
return 1;
|
||||
} else if (is1user && !is2user) {
|
||||
return -1;
|
||||
} else if (is1user && is2user) {
|
||||
if (NekoConfig.sortByContacts) {
|
||||
boolean is1contact = is1user && getContactsController().isContact((int) dialog1.id);
|
||||
boolean is2contact = is2user && getContactsController().isContact((int) dialog2.id);
|
||||
if (!is1contact && is2contact) {
|
||||
return 1;
|
||||
} else if (is1contact && !is2contact) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final MediaDataController mediaDataController = getMediaDataController();
|
||||
final long date1 = DialogObject.getLastMessageOrDraftDate(dialog1, mediaDataController.getDraft(dialog1.id));
|
||||
final long date2 = DialogObject.getLastMessageOrDraftDate(dialog2, mediaDataController.getDraft(dialog2.id));
|
||||
|
@ -492,6 +576,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
} else if (date1 > date2) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
@ -517,6 +602,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
};
|
||||
|
||||
private static volatile MessagesController[] Instance = new MessagesController[UserConfig.MAX_ACCOUNT_COUNT];
|
||||
|
||||
public static MessagesController getInstance(int num) {
|
||||
MessagesController localInstance = Instance[num];
|
||||
if (localInstance == null) {
|
||||
|
@ -607,8 +693,8 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
canRevokePmInbox = mainPreferences.getBoolean("canRevokePmInbox", canRevokePmInbox);
|
||||
preloadFeaturedStickers = mainPreferences.getBoolean("preloadFeaturedStickers", false);
|
||||
youtubePipType = mainPreferences.getString("youtubePipType", "disabled");
|
||||
keepAliveService = mainPreferences.getBoolean("keepAliveService", false);
|
||||
backgroundConnection = mainPreferences.getBoolean("keepAliveService", false);
|
||||
keepAliveService = mainPreferences.getBoolean("keepAliveService", true);
|
||||
backgroundConnection = mainPreferences.getBoolean("keepAliveService", true);
|
||||
promoDialogId = mainPreferences.getLong("proxy_dialog", 0);
|
||||
nextPromoInfoCheckTime = mainPreferences.getInt("nextPromoInfoCheckTime", 0);
|
||||
promoDialogType = mainPreferences.getInt("promo_dialog_type", 0);
|
||||
|
@ -1038,6 +1124,8 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
loadingSuggestedFilters = true;
|
||||
|
||||
/*
|
||||
|
||||
TLRPC.TL_messages_getSuggestedDialogFilters req = new TLRPC.TL_messages_getSuggestedDialogFilters();
|
||||
getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
loadingSuggestedFilters = false;
|
||||
|
@ -1050,6 +1138,27 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.suggestedFiltersLoaded);
|
||||
}));
|
||||
|
||||
*/
|
||||
|
||||
suggestedFilters.clear();
|
||||
|
||||
s:
|
||||
for (TLRPC.TL_dialogFilterSuggested suggested : InternalFilters.internalFilters) {
|
||||
|
||||
for (DialogFilter filter : dialogFilters) {
|
||||
|
||||
if (suggested.filter.flags == filter.flags) continue s;
|
||||
|
||||
}
|
||||
|
||||
suggestedFilters.add(suggested);
|
||||
|
||||
}
|
||||
|
||||
loadingSuggestedFilters = false;
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.suggestedFiltersLoaded);
|
||||
|
||||
}
|
||||
|
||||
public void loadRemoteFilters(boolean force) {
|
||||
|
@ -1064,6 +1173,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||
if (response instanceof TLRPC.Vector) {
|
||||
getMessagesStorage().checkLoadedRemoteFilters((TLRPC.Vector) response);
|
||||
|
||||
} else {
|
||||
AndroidUtilities.runOnUIThread(() -> loadingRemoteFilters = false);
|
||||
}
|
||||
|
@ -1338,6 +1448,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
getDownloadController().loadAutoDownloadConfig(false);
|
||||
loadAppConfig();
|
||||
thisDc = config.this_dc;
|
||||
maxMegagroupCount = config.megagroup_size_max;
|
||||
maxGroupCount = config.chat_size_max;
|
||||
maxEditTime = config.edit_time_limit;
|
||||
|
@ -2976,7 +3087,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}));
|
||||
}
|
||||
|
||||
protected void processNewChannelDifferenceParams(int pts, int pts_count, int channelId) {
|
||||
public void processNewChannelDifferenceParams(int pts, int pts_count, int channelId) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("processNewChannelDifferenceParams pts = " + pts + " pts_count = " + pts_count + " channeldId = " + channelId);
|
||||
}
|
||||
|
@ -3322,7 +3433,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
loadingBlockedUsers = true;
|
||||
TLRPC.TL_contacts_getBlocked req = new TLRPC.TL_contacts_getBlocked();
|
||||
req.offset = reset ? 0 : blockedUsers.size();
|
||||
req.limit = reset ? 20 : 100;
|
||||
req.limit = 100;
|
||||
getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
if (response != null) {
|
||||
TLRPC.contacts_Blocked res = (TLRPC.contacts_Blocked) response;
|
||||
|
@ -3343,6 +3454,38 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}));
|
||||
}
|
||||
|
||||
public void unblockAllUsers() {
|
||||
|
||||
if (totalBlockedCount == 0) return;
|
||||
|
||||
if (blockedUsers.size() == 0) getBlockedUsers(true);
|
||||
|
||||
SparseIntArray blockedCopy = blockedUsers.clone();
|
||||
|
||||
if (blockedCopy.size() == 0) return;
|
||||
|
||||
for (int index = 0; index < blockedCopy.size(); index++) {
|
||||
|
||||
TLRPC.TL_contacts_unblock req = new TLRPC.TL_contacts_unblock();
|
||||
int user_id = blockedCopy.keyAt(index);
|
||||
req.id = getInputUser(user_id);
|
||||
getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||
|
||||
totalBlockedCount--;
|
||||
blockedUsers.delete(user_id);
|
||||
|
||||
UIUtil.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.blockedUsersDidLoad));
|
||||
|
||||
});
|
||||
|
||||
ThreadUtil.sleep(233);
|
||||
|
||||
}
|
||||
|
||||
unblockAllUsers();
|
||||
|
||||
}
|
||||
|
||||
public void deleteUserPhoto(TLRPC.InputPhoto photo) {
|
||||
if (photo == null) {
|
||||
TLRPC.TL_photos_updateProfilePhoto req = new TLRPC.TL_photos_updateProfilePhoto();
|
||||
|
@ -4135,7 +4278,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
|
||||
public void saveRecentSticker(Object parentObject, TLRPC.Document document, boolean asMask) {
|
||||
if (parentObject == null || document == null) {
|
||||
if (document == null) {
|
||||
return;
|
||||
}
|
||||
TLRPC.TL_messages_saveRecentSticker req = new TLRPC.TL_messages_saveRecentSticker();
|
||||
|
@ -4226,6 +4369,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
checkReadTasks();
|
||||
|
||||
if (getUserConfig().isClientActivated() && !getUserConfig().isBot) {
|
||||
|
||||
if (getConnectionsManager().getPauseTime() == 0 && ApplicationLoader.isScreenOn && !ApplicationLoader.mainInterfacePausedStageQueue) {
|
||||
if (ApplicationLoader.mainInterfacePausedStageQueueTime != 0 && Math.abs(ApplicationLoader.mainInterfacePausedStageQueueTime - System.currentTimeMillis()) > 1000) {
|
||||
if (statusSettingState != 1 && (lastStatusUpdateTime == 0 || Math.abs(System.currentTimeMillis() - lastStatusUpdateTime) >= 55000 || offlineSent)) {
|
||||
|
@ -4485,6 +4629,9 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
AndroidUtilities.runOnUIThread(passwordCheckRunnable);
|
||||
lastPasswordCheckTime = currentTime;
|
||||
}
|
||||
if (lastPushRegisterSendTime != 0 && Math.abs(SystemClock.elapsedRealtime() - lastPushRegisterSendTime) >= 3 * 60 * 60 * 1000) {
|
||||
ExternalGcm.sendRegistrationToServer();
|
||||
}
|
||||
getLocationController().update();
|
||||
checkPromoInfoInternal(false);
|
||||
checkTosUpdate();
|
||||
|
@ -4532,12 +4679,12 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
String proxyAddress = preferences.getString("proxy_ip", "");
|
||||
String proxySecret = preferences.getString("proxy_secret", "");
|
||||
int removeCurrent = 0;
|
||||
if (promoDialogId != 0 && promoDialogType == PROMO_TYPE_PROXY && proxyDialogAddress != null && !proxyDialogAddress.equals(proxyAddress + proxySecret)) {
|
||||
if ((promoDialogId != 0 && promoDialogType == PROMO_TYPE_PROXY && proxyDialogAddress != null && !proxyDialogAddress.equals(proxyAddress + proxySecret))) {
|
||||
removeCurrent = 1;
|
||||
}
|
||||
lastCheckPromoId++;
|
||||
|
||||
checkingPromoInfo = true;
|
||||
|
||||
int checkPromoId = lastCheckPromoId;
|
||||
TLRPC.TL_help_getPromoData req = new TLRPC.TL_help_getPromoData();
|
||||
checkingPromoInfoRequestId = getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||
|
@ -4552,6 +4699,11 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
} else if (response instanceof TLRPC.TL_help_promoData) {
|
||||
final TLRPC.TL_help_promoData res = (TLRPC.TL_help_promoData) response;
|
||||
|
||||
if (res.proxy && NekoConfig.hideProxySponsorChannel) {
|
||||
nextPromoInfoCheckTime = getConnectionsManager().getCurrentTime() + 60 * 60;
|
||||
noDialog = true;
|
||||
} else {
|
||||
|
||||
final long did;
|
||||
if (res.peer.user_id != 0) {
|
||||
did = res.peer.user_id;
|
||||
|
@ -4581,9 +4733,6 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
promoDialogId = did;
|
||||
if (res.proxy) {
|
||||
promoDialogType = PROMO_TYPE_PROXY;
|
||||
if (NekoConfig.hideProxySponsorChannel) {
|
||||
noDialog = true;
|
||||
}
|
||||
} else if (!TextUtils.isEmpty(res.psa_type)) {
|
||||
promoDialogType = PROMO_TYPE_PSA;
|
||||
promoPsaType = res.psa_type;
|
||||
|
@ -4751,6 +4900,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nextPromoInfoCheckTime = getConnectionsManager().getCurrentTime() + 60 * 60;
|
||||
noDialog = true;
|
||||
|
@ -4931,6 +5081,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
|
||||
public void sendTyping(final long dialog_id, final int action, int classGuid) {
|
||||
if (NekoConfig.disableChatAction) return;
|
||||
if (dialog_id == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -8167,9 +8318,11 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
if (ConnectionsManager.native_isTestBackend(currentAccount) != 0) {
|
||||
ConnectionsManager.native_switchBackend(currentAccount);
|
||||
}
|
||||
MessagesController.getMainSettings(currentAccount).edit().remove("custom_dc").apply();
|
||||
}
|
||||
|
||||
private boolean gettingAppChangelog;
|
||||
|
||||
public void generateUpdateMessage() {
|
||||
if (gettingAppChangelog || BuildVars.DEBUG_VERSION || SharedConfig.lastUpdateVersion == null || SharedConfig.lastUpdateVersion.equals(BuildVars.BUILD_VERSION_STRING)) {
|
||||
return;
|
||||
|
@ -12295,7 +12448,9 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
continue;
|
||||
}
|
||||
sortingDialogFilter = selectedDialogFilter[b];
|
||||
|
||||
Collections.sort(allDialogs, dialogDateComparator);
|
||||
|
||||
ArrayList<TLRPC.Dialog> dialogsByFilter = selectedDialogFilter[b].dialogs;
|
||||
|
||||
for (int a = 0, N = allDialogs.size(); a < N; a++) {
|
||||
|
@ -12317,7 +12472,28 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
Collections.sort(allDialogs, dialogComparator);
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
NekoConfig.sortByUnread = false;
|
||||
NekoConfig.sortByUnmuted = false;
|
||||
NekoConfig.sortByUser = false;
|
||||
NekoConfig.sortByContacts = false;
|
||||
|
||||
try {
|
||||
|
||||
Collections.sort(allDialogs, dialogComparator);
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
FileLog.e(ex);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
isLeftPromoChannel = true;
|
||||
if (promoDialog != null && promoDialog.id < 0) {
|
||||
TLRPC.Chat chat = getChat(-(int) promoDialog.id);
|
||||
|
@ -12447,14 +12623,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
|
||||
private static void showCantOpenAlert(BaseFragment fragment, String reason) {
|
||||
if (fragment == null || fragment.getParentActivity() == null) {
|
||||
return;
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getParentActivity());
|
||||
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
builder.setMessage(reason);
|
||||
fragment.showDialog(builder.create());
|
||||
AlertUtil.showToast(reason);
|
||||
}
|
||||
|
||||
public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment) {
|
||||
|
|
|
@ -14,6 +14,8 @@ import android.util.LongSparseArray;
|
|||
import android.util.SparseArray;
|
||||
import android.util.SparseIntArray;
|
||||
|
||||
import androidx.annotation.UiThread;
|
||||
|
||||
import org.telegram.PhoneFormat.PhoneFormat;
|
||||
import org.telegram.SQLite.SQLiteCursor;
|
||||
import org.telegram.SQLite.SQLiteDatabase;
|
||||
|
@ -37,7 +39,7 @@ import java.util.Map;
|
|||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import androidx.annotation.UiThread;
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
|
||||
public class MessagesStorage extends BaseController {
|
||||
|
||||
|
@ -1874,6 +1876,9 @@ public class MessagesStorage extends BaseController {
|
|||
continue;
|
||||
}
|
||||
flags = filter.flags;
|
||||
if (NekoConfig.ignoreMutedCount && (flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0) {
|
||||
flags |= MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED;
|
||||
}
|
||||
} else {
|
||||
filter = null;
|
||||
flags = MessagesController.DIALOG_FILTER_FLAG_ALL_CHATS;
|
||||
|
@ -3897,6 +3902,9 @@ public class MessagesStorage extends BaseController {
|
|||
}
|
||||
unreadCount = filter.pendingUnreadCount;
|
||||
flags = filter.flags;
|
||||
if (NekoConfig.ignoreMutedCount && (flags & MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED) == 0) {
|
||||
flags |= MessagesController.DIALOG_FILTER_FLAG_EXCLUDE_MUTED;
|
||||
}
|
||||
} else {
|
||||
filter = null;
|
||||
flags = MessagesController.DIALOG_FILTER_FLAG_ALL_CHATS;
|
||||
|
|
|
@ -89,6 +89,7 @@ public class CameraScanActivity extends BaseFragment implements Camera.PreviewCa
|
|||
//private BarcodeDetector visionQrReader;
|
||||
|
||||
private boolean needGalleryButton;
|
||||
private boolean any;
|
||||
|
||||
private int currentType;
|
||||
|
||||
|
@ -160,6 +161,62 @@ public class CameraScanActivity extends BaseFragment implements Camera.PreviewCa
|
|||
return actionBarLayout;
|
||||
}
|
||||
|
||||
public static ActionBarLayout[] showAsSheet(BaseFragment parentFragment, CameraScanActivityDelegate delegate) {
|
||||
if (parentFragment == null || parentFragment.getParentActivity() == null) {
|
||||
return null;
|
||||
}
|
||||
ActionBarLayout[] actionBarLayout = new ActionBarLayout[]{new ActionBarLayout(parentFragment.getParentActivity())};
|
||||
BottomSheet bottomSheet = new BottomSheet(parentFragment.getParentActivity(), false) {
|
||||
{
|
||||
actionBarLayout[0].init(new ArrayList<>());
|
||||
CameraScanActivity fragment = new CameraScanActivity(TYPE_QR) {
|
||||
@Override
|
||||
public void finishFragment() {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSelfFromStack() {
|
||||
dismiss();
|
||||
}
|
||||
};
|
||||
fragment.needGalleryButton = true;
|
||||
fragment.any = true;
|
||||
actionBarLayout[0].addFragmentToStack(fragment);
|
||||
actionBarLayout[0].showLastFragment();
|
||||
actionBarLayout[0].setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0);
|
||||
fragment.setDelegate(delegate);
|
||||
containerView = actionBarLayout[0];
|
||||
setApplyBottomPadding(false);
|
||||
setApplyBottomPadding(false);
|
||||
setOnDismissListener(dialog -> fragment.onFragmentDestroy());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canDismissWithSwipe() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (actionBarLayout[0] == null || actionBarLayout[0].fragmentsStack.size() <= 1) {
|
||||
super.onBackPressed();
|
||||
} else {
|
||||
actionBarLayout[0].onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dismiss() {
|
||||
super.dismiss();
|
||||
actionBarLayout[0] = null;
|
||||
}
|
||||
};
|
||||
|
||||
bottomSheet.show();
|
||||
return actionBarLayout;
|
||||
}
|
||||
|
||||
public CameraScanActivity(int type) {
|
||||
super();
|
||||
CameraController.getInstance().initCamera(() -> {
|
||||
|
@ -627,6 +684,7 @@ public class CameraScanActivity extends BaseFragment implements Camera.PreviewCa
|
|||
onNoQrFound();
|
||||
return null;
|
||||
}
|
||||
if (any) return text;
|
||||
if (needGalleryButton) {
|
||||
if (!text.startsWith("ton://transfer/")) {
|
||||
//onNoWalletFound(bitmap != null);
|
||||
|
|
|
@ -8,9 +8,7 @@
|
|||
|
||||
package org.telegram.ui.Cells;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
|
@ -21,7 +19,6 @@ import android.graphics.drawable.BitmapDrawable;
|
|||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.graphics.drawable.RippleDrawable;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
|
@ -29,23 +26,20 @@ import android.view.Gravity;
|
|||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.telegram.PhoneFormat.PhoneFormat;
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.ImageLocation;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.UserObject;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.UserObject;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.Components.AvatarDrawable;
|
||||
import org.telegram.ui.Components.BackupImageView;
|
||||
import org.telegram.ui.Components.CubicBezierInterpolator;
|
||||
import org.telegram.ui.Components.LayoutHelper;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.Components.SnowflakesEffect;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
|
@ -58,7 +52,6 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
private TextView phoneTextView;
|
||||
private ImageView shadowView;
|
||||
private ImageView arrowView;
|
||||
private ImageView darkThemeView;
|
||||
|
||||
private Rect srcRect = new Rect();
|
||||
private Rect destRect = new Rect();
|
||||
|
@ -70,6 +63,8 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
private boolean accountsShown;
|
||||
private int darkThemeBackgroundColor;
|
||||
|
||||
private TLRPC.User user;
|
||||
|
||||
public DrawerProfileCell(Context context) {
|
||||
super(context);
|
||||
|
||||
|
@ -111,52 +106,6 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
addView(arrowView, LayoutHelper.createFrame(59, 59, Gravity.RIGHT | Gravity.BOTTOM));
|
||||
setArrowState(false);
|
||||
|
||||
darkThemeView = new ImageView(context);
|
||||
darkThemeView.setScaleType(ImageView.ScaleType.CENTER);
|
||||
darkThemeView.setImageResource(R.drawable.menu_night);
|
||||
darkThemeView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_menuName), PorterDuff.Mode.MULTIPLY));
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
darkThemeView.setBackgroundDrawable(Theme.createSelectorDrawable(darkThemeBackgroundColor = Theme.getColor(Theme.key_listSelector), 1, AndroidUtilities.dp(17)));
|
||||
Theme.setRippleDrawableForceSoftware((RippleDrawable) darkThemeView.getBackground());
|
||||
}
|
||||
darkThemeView.setOnClickListener(v -> {
|
||||
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("themeconfig", Activity.MODE_PRIVATE);
|
||||
String dayThemeName = preferences.getString("lastDayTheme", "Blue");
|
||||
if (Theme.getTheme(dayThemeName) == null) {
|
||||
dayThemeName = "Blue";
|
||||
}
|
||||
String nightThemeName = preferences.getString("lastDarkTheme", "Dark Blue");
|
||||
if (Theme.getTheme(nightThemeName) == null) {
|
||||
nightThemeName = "Dark Blue";
|
||||
}
|
||||
Theme.ThemeInfo themeInfo = Theme.getActiveTheme();
|
||||
if (dayThemeName.equals(nightThemeName)) {
|
||||
if (themeInfo.isDark()) {
|
||||
dayThemeName = "Blue";
|
||||
} else {
|
||||
nightThemeName = "Dark Blue";
|
||||
}
|
||||
}
|
||||
|
||||
if (dayThemeName.equals(themeInfo.getKey())) {
|
||||
themeInfo = Theme.getTheme(nightThemeName);
|
||||
} else {
|
||||
themeInfo = Theme.getTheme(dayThemeName);
|
||||
}
|
||||
if (Theme.selectedAutoNightType != Theme.AUTO_NIGHT_TYPE_NONE) {
|
||||
Toast.makeText(getContext(), LocaleController.getString("AutoNightModeOff", R.string.AutoNightModeOff), Toast.LENGTH_SHORT).show();
|
||||
Theme.selectedAutoNightType = Theme.AUTO_NIGHT_TYPE_NONE;
|
||||
Theme.saveAutoNightThemeConfig();
|
||||
Theme.cancelAutoNightThemeCallbacks();
|
||||
}
|
||||
int[] pos = new int[2];
|
||||
darkThemeView.getLocationInWindow(pos);
|
||||
pos[0] += darkThemeView.getMeasuredWidth() / 2;
|
||||
pos[1] += darkThemeView.getMeasuredHeight() / 2;
|
||||
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.needSetDayNightTheme, themeInfo, false, pos, -1);
|
||||
});
|
||||
addView(darkThemeView, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, 6, 90));
|
||||
|
||||
if (Theme.getEventType() == 0) {
|
||||
snowflakesEffect = new SnowflakesEffect();
|
||||
snowflakesEffect.setColorKey(Theme.key_chats_menuName);
|
||||
|
@ -183,6 +132,12 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
}
|
||||
}
|
||||
|
||||
private boolean useAdb() {
|
||||
|
||||
return NekoConfig.avatarAsDrawerBackground && ImageLocation.isUserHasPhoto(user);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
Drawable backgroundDrawable = Theme.getCachedWallpaper();
|
||||
|
@ -190,8 +145,7 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
boolean useImageBackground = !backgroundKey.equals(Theme.key_chats_menuTopBackground) && Theme.isCustomTheme() && !Theme.isPatternWallpaper() && backgroundDrawable != null && !(backgroundDrawable instanceof ColorDrawable) && !(backgroundDrawable instanceof GradientDrawable);
|
||||
boolean drawCatsShadow = false;
|
||||
int color;
|
||||
int darkBackColor = 0;
|
||||
if (!NekoConfig.avatarAsDrawerBackground && !useImageBackground && Theme.hasThemeKey(Theme.key_chats_menuTopShadowCats)) {
|
||||
if (!useAdb() && !useImageBackground && Theme.hasThemeKey(Theme.key_chats_menuTopShadowCats)) {
|
||||
color = Theme.getColor(Theme.key_chats_menuTopShadowCats);
|
||||
drawCatsShadow = true;
|
||||
} else {
|
||||
|
@ -203,15 +157,10 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
}
|
||||
if (currentColor == null || currentColor != color) {
|
||||
currentColor = color;
|
||||
shadowView.getDrawable().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
||||
}
|
||||
color = Theme.getColor(Theme.key_chats_menuName);
|
||||
if (currentMoonColor == null || currentColor != color) {
|
||||
currentMoonColor = color;
|
||||
darkThemeView.getDrawable().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
||||
shadowView.getDrawable().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
|
||||
}
|
||||
nameTextView.setTextColor(Theme.getColor(Theme.key_chats_menuName));
|
||||
if (NekoConfig.avatarAsDrawerBackground || useImageBackground) {
|
||||
if (useAdb() || useImageBackground) {
|
||||
phoneTextView.setTextColor(Theme.getColor(Theme.key_chats_menuPhone));
|
||||
if (shadowView.getVisibility() != VISIBLE) {
|
||||
shadowView.setVisibility(VISIBLE);
|
||||
|
@ -219,7 +168,6 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
if (backgroundDrawable instanceof ColorDrawable || backgroundDrawable instanceof GradientDrawable) {
|
||||
backgroundDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
|
||||
backgroundDrawable.draw(canvas);
|
||||
darkBackColor = Theme.getColor(Theme.key_listSelector);
|
||||
} else if (backgroundDrawable instanceof BitmapDrawable) {
|
||||
Bitmap bitmap = ((BitmapDrawable) backgroundDrawable).getBitmap();
|
||||
float scaleX = (float) getMeasuredWidth() / (float) bitmap.getWidth();
|
||||
|
@ -236,7 +184,6 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
} catch (Throwable e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
darkBackColor = (Theme.getServiceMessageColor() & 0x00ffffff) | 0x50000000;
|
||||
}
|
||||
} else {
|
||||
int visibility = drawCatsShadow? VISIBLE : INVISIBLE;
|
||||
|
@ -245,19 +192,6 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
}
|
||||
phoneTextView.setTextColor(Theme.getColor(Theme.key_chats_menuPhoneCats));
|
||||
super.onDraw(canvas);
|
||||
darkBackColor = Theme.getColor(Theme.key_listSelector);
|
||||
}
|
||||
|
||||
if (darkBackColor != 0) {
|
||||
if (darkBackColor != darkThemeBackgroundColor) {
|
||||
backPaint.setColor(darkThemeBackgroundColor = darkBackColor);
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
Theme.setSelectorDrawableColor(darkThemeView.getBackground(), darkThemeBackgroundColor = darkBackColor, true);
|
||||
}
|
||||
}
|
||||
if (useImageBackground && backgroundDrawable instanceof BitmapDrawable) {
|
||||
canvas.drawCircle(darkThemeView.getX() + darkThemeView.getMeasuredWidth() / 2, darkThemeView.getY() + darkThemeView.getMeasuredHeight() / 2, AndroidUtilities.dp(17), backPaint);
|
||||
}
|
||||
}
|
||||
|
||||
if (snowflakesEffect != null) {
|
||||
|
@ -281,6 +215,7 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
if (user == null) {
|
||||
return;
|
||||
}
|
||||
this.user = user;
|
||||
accountsShown = accounts;
|
||||
setArrowState(false);
|
||||
nameTextView.setText(UserObject.getUserName(user));
|
||||
|
@ -294,7 +229,7 @@ public class DrawerProfileCell extends FrameLayout {
|
|||
AvatarDrawable avatarDrawable = new AvatarDrawable(user);
|
||||
avatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundInProfileBlue));
|
||||
avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user);
|
||||
if (NekoConfig.avatarAsDrawerBackground) {
|
||||
if (useAdb()) {
|
||||
avatarBackgroundView.setImage(ImageLocation.getForUser(user, true), "512_512", avatarDrawable, user);
|
||||
avatarBackgroundView.setVisibility(VISIBLE);
|
||||
avatarImageView.setVisibility(INVISIBLE);
|
||||
|
|
|
@ -116,6 +116,10 @@ import java.util.ArrayList;
|
|||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
import tw.nekomimi.nekogram.NekoXConfig;
|
||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||
|
||||
public class ChannelAdminLogActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
protected TLRPC.Chat currentChat;
|
||||
|
@ -891,7 +895,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
|
||||
bottomOverlayImage = new ImageView(context);
|
||||
bottomOverlayImage.setImageResource(R.drawable.log_info);
|
||||
bottomOverlayImage.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_fieldOverlayText), PorterDuff.Mode.MULTIPLY));
|
||||
bottomOverlayImage.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_fieldOverlayText), PorterDuff.Mode.SRC_IN));
|
||||
bottomOverlayImage.setScaleType(ImageView.ScaleType.CENTER);
|
||||
bottomOverlayChat.addView(bottomOverlayImage, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP, 3, 0, 0, 0));
|
||||
bottomOverlayImage.setContentDescription(LocaleController.getString("BotHelp", R.string.BotHelp));
|
||||
|
@ -927,7 +931,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
/*searchUpButton = new ImageView(context);
|
||||
searchUpButton.setScaleType(ImageView.ScaleType.CENTER);
|
||||
searchUpButton.setImageResource(R.drawable.msg_go_up);
|
||||
searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.MULTIPLY));
|
||||
searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.SRC_IN));
|
||||
searchContainer.addView(searchUpButton, LayoutHelper.createFrame(48, 48));
|
||||
searchUpButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -939,7 +943,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
searchDownButton = new ImageView(context);
|
||||
searchDownButton.setScaleType(ImageView.ScaleType.CENTER);
|
||||
searchDownButton.setImageResource(R.drawable.msg_go_down);
|
||||
searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.MULTIPLY));
|
||||
searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.SRC_IN));
|
||||
searchContainer.addView(searchDownButton, LayoutHelper.createFrame(48, 48, Gravity.LEFT | Gravity.TOP, 48, 0, 0, 0));
|
||||
searchDownButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -950,8 +954,8 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
|
||||
searchCalendarButton = new ImageView(context);
|
||||
searchCalendarButton.setScaleType(ImageView.ScaleType.CENTER);
|
||||
searchCalendarButton.setImageResource(R.drawable.msg_calendar);
|
||||
searchCalendarButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.MULTIPLY));
|
||||
searchCalendarButton.setImageResource(R.drawable.baseline_date_range_24);
|
||||
searchCalendarButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chat_searchPanelIcons), PorterDuff.Mode.SRC_IN));
|
||||
searchContainer.addView(searchCalendarButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP));
|
||||
searchCalendarButton.setOnClickListener(view -> {
|
||||
if (getParentActivity() == null) {
|
||||
|
@ -1320,11 +1324,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
selectedObject = null;
|
||||
return;
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
||||
builder.setMessage(LocaleController.getString("IncorrectTheme", R.string.IncorrectTheme));
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
showDialog(builder.create());
|
||||
AlertUtil.showToast(LocaleController.getString("IncorrectTheme", R.string.IncorrectTheme));
|
||||
}
|
||||
} else {
|
||||
if (LocaleController.getInstance().applyLanguageFile(locFile, currentAccount)) {
|
||||
|
@ -1334,11 +1334,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
selectedObject = null;
|
||||
return;
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
||||
builder.setMessage(LocaleController.getString("IncorrectLocalization", R.string.IncorrectLocalization));
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
showDialog(builder.create());
|
||||
AlertUtil.showToast(LocaleController.getString("IncorrectLocalization", R.string.IncorrectLocalization));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1836,7 +1832,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
|||
}
|
||||
|
||||
public void showOpenUrlAlert(final String url, boolean ask) {
|
||||
if (Browser.isInternalUrl(url, null) || !ask) {
|
||||
if (Browser.isInternalUrl(url, null) || !ask || NekoConfig.skipOpenLinkConfirm) {
|
||||
Browser.openUrl(getParentActivity(), url, true);
|
||||
} else {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
|
|
|
@ -54,6 +54,8 @@ import org.telegram.ui.Components.LayoutHelper;
|
|||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import tw.nekomimi.nekogram.utils.ProxyUtil;
|
||||
|
||||
public class ChatEditTypeActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
private EditTextBoldCursor usernameTextView;
|
||||
|
@ -76,6 +78,7 @@ public class ChatEditTypeActivity extends BaseFragment implements NotificationCe
|
|||
private TextSettingsCell copyCell;
|
||||
private TextSettingsCell revokeCell;
|
||||
private TextSettingsCell shareCell;
|
||||
private TextSettingsCell shareQRCell;
|
||||
private ShadowSectionCell sectionCell2;
|
||||
private TextInfoPrivacyCell infoCell;
|
||||
private TextSettingsCell textCell;
|
||||
|
@ -234,9 +237,9 @@ public class ChatEditTypeActivity extends BaseFragment implements NotificationCe
|
|||
radioButtonCell2 = new RadioButtonCell(context);
|
||||
radioButtonCell2.setBackgroundDrawable(Theme.getSelectorDrawable(false));
|
||||
if (isChannel) {
|
||||
radioButtonCell2.setTextAndValue(LocaleController.getString("ChannelPrivate", R.string.ChannelPrivate), LocaleController.getString("ChannelPrivateInfo", R.string.ChannelPrivateInfo), false, isPrivate);
|
||||
radioButtonCell2.setTextAndValueAndCheck(LocaleController.getString("ChannelPrivate", R.string.ChannelPrivate), LocaleController.getString("ChannelPrivateInfo", R.string.ChannelPrivateInfo), false, isPrivate);
|
||||
} else {
|
||||
radioButtonCell2.setTextAndValue(LocaleController.getString("MegaPrivate", R.string.MegaPrivate), LocaleController.getString("MegaPrivateInfo", R.string.MegaPrivateInfo), false, isPrivate);
|
||||
radioButtonCell2.setTextAndValueAndCheck(LocaleController.getString("MegaPrivate", R.string.MegaPrivate), LocaleController.getString("MegaPrivateInfo", R.string.MegaPrivateInfo), false, isPrivate);
|
||||
}
|
||||
linearLayoutTypeContainer.addView(radioButtonCell2, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
radioButtonCell2.setOnClickListener(v -> {
|
||||
|
@ -250,9 +253,9 @@ public class ChatEditTypeActivity extends BaseFragment implements NotificationCe
|
|||
radioButtonCell1 = new RadioButtonCell(context);
|
||||
radioButtonCell1.setBackgroundDrawable(Theme.getSelectorDrawable(false));
|
||||
if (isChannel) {
|
||||
radioButtonCell1.setTextAndValue(LocaleController.getString("ChannelPublic", R.string.ChannelPublic), LocaleController.getString("ChannelPublicInfo", R.string.ChannelPublicInfo), false, !isPrivate);
|
||||
radioButtonCell1.setTextAndValueAndCheck(LocaleController.getString("ChannelPublic", R.string.ChannelPublic), LocaleController.getString("ChannelPublicInfo", R.string.ChannelPublicInfo), false, !isPrivate);
|
||||
} else {
|
||||
radioButtonCell1.setTextAndValue(LocaleController.getString("MegaPublic", R.string.MegaPublic), LocaleController.getString("MegaPublicInfo", R.string.MegaPublicInfo), false, !isPrivate);
|
||||
radioButtonCell1.setTextAndValueAndCheck(LocaleController.getString("MegaPublic", R.string.MegaPublic), LocaleController.getString("MegaPublicInfo", R.string.MegaPublicInfo), false, !isPrivate);
|
||||
}
|
||||
linearLayoutTypeContainer.addView(radioButtonCell1, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
radioButtonCell1.setOnClickListener(v -> {
|
||||
|
@ -406,6 +409,17 @@ public class ChatEditTypeActivity extends BaseFragment implements NotificationCe
|
|||
}
|
||||
});
|
||||
|
||||
shareQRCell = new TextSettingsCell(context);
|
||||
shareQRCell.setBackgroundDrawable(Theme.getSelectorDrawable(false));
|
||||
shareQRCell.setText(LocaleController.getString("ShareQRCode", R.string.ShareQRCode), false);
|
||||
privateContainer.addView(shareQRCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
shareQRCell.setOnClickListener(v -> {
|
||||
if (invite == null) {
|
||||
return;
|
||||
}
|
||||
ProxyUtil.showQrDialog(getParentActivity(),invite.link);
|
||||
});
|
||||
|
||||
checkTextView = new TextInfoPrivacyCell(context);
|
||||
checkTextView.setBackgroundDrawable(Theme.getThemedDrawable(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
||||
checkTextView.setBottomPadding(6);
|
||||
|
|
|
@ -15,8 +15,10 @@ import android.animation.ObjectAnimator;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.*;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.text.Selection;
|
||||
|
@ -34,15 +36,18 @@ import android.widget.FrameLayout;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.Emoji;
|
||||
import org.telegram.messenger.FileLoader;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.FileRefController;
|
||||
import org.telegram.messenger.ImageLocation;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
|
@ -66,8 +71,7 @@ import java.util.List;
|
|||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import tw.nekomimi.nekogram.utils.ProxyUtil;
|
||||
|
||||
public class StickersAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
|
@ -118,6 +122,8 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
private Activity parentActivity;
|
||||
private int itemSize;
|
||||
|
||||
private int menu_archive = 4;
|
||||
|
||||
private TLRPC.TL_messages_stickerSet stickerSet;
|
||||
private TLRPC.Document selectedSticker;
|
||||
private TLRPC.InputStickerSet inputStickerSet;
|
||||
|
@ -569,8 +575,11 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
optionsButton.setIcon(R.drawable.ic_ab_other);
|
||||
optionsButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_player_actionBarSelector), 1));
|
||||
containerView.addView(optionsButton, LayoutHelper.createFrame(40, 40, Gravity.TOP | Gravity.RIGHT, 0, 5, 5, 0));
|
||||
optionsButton.addSubItem(1, R.drawable.msg_share, LocaleController.getString("StickersShare", R.string.StickersShare));
|
||||
optionsButton.addSubItem(2, R.drawable.msg_link, LocaleController.getString("CopyLink", R.string.CopyLink));
|
||||
optionsButton.addSubItem(1, R.drawable.baseline_forward_24, LocaleController.getString("StickersShare", R.string.StickersShare));
|
||||
optionsButton.addSubItem(2, R.drawable.baseline_link_24, LocaleController.getString("CopyLink", R.string.CopyLink));
|
||||
optionsButton.addSubItem(3, R.drawable.wallet_qr, LocaleController.getString("ShareQRCode", R.string.ShareQRCode));
|
||||
optionsButton.addSubItem(menu_archive, R.drawable.baseline_archive_24, LocaleController.getString("Archive", R.string.Archive));
|
||||
|
||||
optionsButton.setOnClickListener(v -> optionsButton.toggleSubMenu());
|
||||
optionsButton.setDelegate(this::onSubItemClick);
|
||||
optionsButton.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
|
||||
|
@ -677,6 +686,11 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
} else if (id == 3) {
|
||||
ProxyUtil.showQrDialog(getContext(), stickersUrl);
|
||||
} else if (id == menu_archive) {
|
||||
dismiss();
|
||||
MediaDataController.getInstance(currentAccount).toggleStickerSet(parentActivity, stickerSet, 1, parentFragment, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -684,7 +698,8 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
if (titleTextView == null) {
|
||||
return;
|
||||
}
|
||||
if (stickerSet != null) {
|
||||
if (stickerSet != null && stickerSet.set != null) {
|
||||
|
||||
SpannableStringBuilder stringBuilder = null;
|
||||
try {
|
||||
if (urlPattern == null) {
|
||||
|
@ -717,7 +732,8 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
}
|
||||
titleTextView.setText(stringBuilder != null ? stringBuilder : stickerSet.set.title);
|
||||
|
||||
if (stickerSet.set == null || !MediaDataController.getInstance(currentAccount).isStickerPackInstalled(stickerSet.set.id)) {
|
||||
if (!MediaDataController.getInstance(currentAccount).isStickerPackInstalled(stickerSet.set.id)) {
|
||||
optionsButton.hideSubItem(menu_archive);
|
||||
String text;
|
||||
if (stickerSet.set.masks) {
|
||||
text = LocaleController.formatString("AddStickersCount", R.string.AddStickersCount, LocaleController.formatPluralString("MasksCount", stickerSet.documents.size())).toUpperCase();
|
||||
|
@ -754,6 +770,7 @@ public class StickersAlert extends BottomSheet implements NotificationCenter.Not
|
|||
}));
|
||||
}, text, Theme.key_dialogTextBlue2);
|
||||
} else {
|
||||
optionsButton.showSubItem(menu_archive);
|
||||
String text;
|
||||
if (stickerSet.set.masks) {
|
||||
text = LocaleController.formatString("RemoveStickersCount", R.string.RemoveStickersCount, LocaleController.formatPluralString("MasksCount", stickerSet.documents.size())).toUpperCase();
|
||||
|
|
|
@ -43,6 +43,8 @@ import org.telegram.messenger.UserObject;
|
|||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
public class UndoView extends FrameLayout {
|
||||
|
||||
|
@ -184,7 +186,7 @@ public class UndoView extends FrameLayout {
|
|||
|
||||
undoImageView = new ImageView(context);
|
||||
undoImageView.setImageResource(R.drawable.chats_undo);
|
||||
undoImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_undo_cancelColor), PorterDuff.Mode.MULTIPLY));
|
||||
undoImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_undo_cancelColor), PorterDuff.Mode.SRC_IN));
|
||||
undoButton.addView(undoImageView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT));
|
||||
|
||||
undoTextView = new TextView(context);
|
||||
|
@ -313,6 +315,10 @@ public class UndoView extends FrameLayout {
|
|||
if (currentActionRunnable != null) {
|
||||
currentActionRunnable.run();
|
||||
}
|
||||
if (NekoConfig.disableUndo && action < ACTION_QUIZ_CORRECT) {
|
||||
if (actionRunnable != null) actionRunnable.run();
|
||||
return;
|
||||
}
|
||||
isShown = true;
|
||||
currentActionRunnable = actionRunnable;
|
||||
currentCancelRunnable = cancelRunnable;
|
||||
|
|
|
@ -39,14 +39,6 @@ import android.net.Uri;
|
|||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Vibrator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearSmoothScrollerCustom;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.util.Property;
|
||||
import android.util.StateSet;
|
||||
|
@ -71,41 +63,54 @@ import android.widget.LinearLayout;
|
|||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearSmoothScrollerCustom;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import org.telegram.messenger.AccountInstance;
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.BuildVars;
|
||||
import org.telegram.messenger.ChatObject;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.ContactsController;
|
||||
import org.telegram.messenger.DialogObject;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.ImageLoader;
|
||||
import org.telegram.messenger.ImageLocation;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.MessageObject;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.NotificationsController;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.SharedConfig;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.messenger.UserObject;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.messenger.XiaomiUtilities;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLObject;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.messenger.ContactsController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.ui.ActionBar.ActionBar;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuSubItem;
|
||||
import org.telegram.ui.ActionBar.ActionBarPopupWindow;
|
||||
import org.telegram.ui.ActionBar.AlertDialog;
|
||||
import org.telegram.ui.ActionBar.BackDrawable;
|
||||
import org.telegram.ui.ActionBar.BaseFragment;
|
||||
import org.telegram.ui.ActionBar.BottomSheet;
|
||||
import org.telegram.ui.ActionBar.MenuDrawable;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.ActionBar.ThemeDescription;
|
||||
import org.telegram.ui.Adapters.DialogsAdapter;
|
||||
import org.telegram.ui.Adapters.DialogsSearchAdapter;
|
||||
import org.telegram.ui.Cells.AccountSelectCell;
|
||||
import org.telegram.ui.Cells.ArchiveHintInnerCell;
|
||||
import org.telegram.ui.Cells.DialogCell;
|
||||
import org.telegram.ui.Cells.DialogsEmptyCell;
|
||||
import org.telegram.ui.Cells.DividerCell;
|
||||
import org.telegram.ui.Cells.DrawerActionCell;
|
||||
|
@ -120,36 +125,29 @@ import org.telegram.ui.Cells.ProfileSearchCell;
|
|||
import org.telegram.ui.Cells.ShadowSectionCell;
|
||||
import org.telegram.ui.Cells.TextCell;
|
||||
import org.telegram.ui.Cells.UserCell;
|
||||
import org.telegram.ui.Cells.DialogCell;
|
||||
import org.telegram.ui.ActionBar.ActionBar;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||
import org.telegram.ui.ActionBar.BaseFragment;
|
||||
import org.telegram.ui.ActionBar.MenuDrawable;
|
||||
import org.telegram.ui.Components.AlertsCreator;
|
||||
import org.telegram.ui.Components.AnimatedArrowDrawable;
|
||||
import org.telegram.ui.Components.AnimationProperties;
|
||||
import org.telegram.ui.Components.FilterTabsView;
|
||||
import org.telegram.ui.Components.FiltersListBottomSheet;
|
||||
import org.telegram.ui.Components.PullForegroundDrawable;
|
||||
import org.telegram.ui.Components.AvatarDrawable;
|
||||
import org.telegram.ui.Components.BackupImageView;
|
||||
import org.telegram.ui.Components.ChatActivityEnterView;
|
||||
import org.telegram.ui.Components.CombinedDrawable;
|
||||
import org.telegram.ui.Components.CubicBezierInterpolator;
|
||||
import org.telegram.ui.Components.DialogsItemAnimator;
|
||||
import org.telegram.ui.Components.FragmentContextView;
|
||||
import org.telegram.ui.Components.EmptyTextProgressView;
|
||||
import org.telegram.ui.Components.FilterTabsView;
|
||||
import org.telegram.ui.Components.FiltersListBottomSheet;
|
||||
import org.telegram.ui.Components.FragmentContextView;
|
||||
import org.telegram.ui.Components.JoinGroupAlert;
|
||||
import org.telegram.ui.Components.LayoutHelper;
|
||||
import org.telegram.ui.Components.NumberTextView;
|
||||
import org.telegram.ui.Components.PacmanAnimation;
|
||||
import org.telegram.ui.Components.ProxyDrawable;
|
||||
import org.telegram.ui.Components.PullForegroundDrawable;
|
||||
import org.telegram.ui.Components.RLottieDrawable;
|
||||
import org.telegram.ui.Components.RadialProgressView;
|
||||
import org.telegram.ui.Components.RecyclerAnimationScrollHelper;
|
||||
import org.telegram.ui.Components.RecyclerListView;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.Components.SizeNotifierFrameLayout;
|
||||
import org.telegram.ui.Components.StickersAlert;
|
||||
import org.telegram.ui.Components.UndoView;
|
||||
|
@ -157,6 +155,8 @@ import org.telegram.ui.Components.UndoView;
|
|||
import java.util.ArrayList;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
import tw.nekomimi.nekogram.utils.PrivacyUtil;
|
||||
import tw.nekomimi.nekogram.utils.ProxyUtil;
|
||||
|
||||
public class DialogsActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
|
@ -193,6 +193,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
private boolean passcodeItemVisible;
|
||||
private ActionBarMenuItem proxyItem;
|
||||
private boolean proxyItemVisible;
|
||||
private ActionBarMenuItem scanItem;
|
||||
private ActionBarMenuItem searchItem;
|
||||
private ActionBarMenuItem doneItem;
|
||||
private ProxyDrawable proxyDrawable;
|
||||
|
@ -1298,7 +1299,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||
boolean hintShowed = preferences.getBoolean("archivehint_l", false) || SharedConfig.archiveHidden;
|
||||
if (!hintShowed) {
|
||||
preferences.edit().putBoolean("archivehint_l", true).commit();
|
||||
preferences.edit().putBoolean("archivehint_l", true).apply();
|
||||
}
|
||||
getUndoView().showWithAction(dialog.id, hintShowed ? UndoView.ACTION_ARCHIVE : UndoView.ACTION_ARCHIVE_HINT, null, () -> {
|
||||
dialogsListFrozen = true;
|
||||
|
@ -1404,6 +1405,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
public boolean onFragmentCreate() {
|
||||
super.onFragmentCreate();
|
||||
|
||||
getConnectionsManager().updateDcSettings();
|
||||
getMessagesController().getBlockedUsers(true);
|
||||
|
||||
if (getArguments() != null) {
|
||||
|
@ -1424,7 +1426,6 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
|
||||
if (initialDialogsType == 0) {
|
||||
askAboutContacts = MessagesController.getGlobalNotificationsSettings().getBoolean("askAboutContacts", true);
|
||||
SharedConfig.loadProxyList();
|
||||
}
|
||||
|
||||
if (searchString == null) {
|
||||
|
@ -1564,6 +1565,11 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
updatePasscodeButton();
|
||||
updateProxyButton(false);
|
||||
}
|
||||
|
||||
scanItem = menu.addItem(3, R.drawable.wallet_qr);
|
||||
scanItem.setContentDescription(LocaleController.getString("ScanQRCode", R.string.ScanQRCode));
|
||||
scanItem.setVisibility(View.GONE);
|
||||
|
||||
searchItem = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {
|
||||
@Override
|
||||
public void onSearchExpand() {
|
||||
|
@ -1574,6 +1580,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (proxyItem != null && proxyItemVisible) {
|
||||
proxyItem.setVisibility(View.GONE);
|
||||
}
|
||||
if (scanItem != null) {
|
||||
scanItem.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if (viewPages[0] != null) {
|
||||
if (searchString != null) {
|
||||
viewPages[0].listView.hide();
|
||||
|
@ -1596,6 +1605,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (proxyItem != null && proxyItemVisible) {
|
||||
proxyItem.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if (scanItem != null) {
|
||||
scanItem.setVisibility(View.GONE);
|
||||
}
|
||||
if (searchString != null) {
|
||||
finishFragment();
|
||||
return false;
|
||||
|
@ -1657,13 +1669,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrOpenMenu", R.string.AccDescrOpenMenu));
|
||||
}
|
||||
if (folderId != 0) {
|
||||
actionBar.setTitle(getNekoTitle(LocaleController.getString("ArchivedChats", R.string.ArchivedChats)));
|
||||
actionBar.setTitle(LocaleController.getString("ArchivedChats", R.string.ArchivedChats));
|
||||
} else {
|
||||
if (BuildVars.DEBUG_VERSION) {
|
||||
actionBar.setTitle("Telegram Beta");
|
||||
} else {
|
||||
actionBar.setTitle(getNekoTitle(LocaleController.getString("Nekogram", R.string.Nekogram)));
|
||||
}
|
||||
actionBar.setTitle(getNekoTitle(LocaleController.getString("NekoX", R.string.NekoX)));
|
||||
}
|
||||
if (folderId == 0) {
|
||||
actionBar.setSupportsHolidayImage(true);
|
||||
|
@ -1824,7 +1832,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (tabId < 0 || tabId >= dialogFilters.size()) {
|
||||
return 0;
|
||||
}
|
||||
return getMessagesController().dialogFilters.get(tabId).unreadCount;
|
||||
return dialogFilters.get(tabId).unreadCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1910,12 +1918,12 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
cell.setTextAndIcon(LocaleController.getString("FilterReorder", R.string.FilterReorder), R.drawable.tabs_reorder);
|
||||
} else if (a == 1) {
|
||||
if (N == 2) {
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterEditAll", R.string.FilterEditAll), R.drawable.msg_edit);
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterEditAll", R.string.FilterEditAll), R.drawable.baseline_edit_24);
|
||||
} else {
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterEdit", R.string.FilterEdit), R.drawable.msg_edit);
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterEdit", R.string.FilterEdit), R.drawable.baseline_edit_24);
|
||||
}
|
||||
} else {
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterDeleteItem", R.string.FilterDeleteItem), R.drawable.msg_delete);
|
||||
cell.setTextAndIcon(LocaleController.getString("FilterDeleteItem", R.string.FilterDeleteItem), R.drawable.baseline_delete_24);
|
||||
}
|
||||
scrimPopupWindowItems[a] = cell;
|
||||
linearLayout.addView(cell);
|
||||
|
@ -2069,6 +2077,26 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
updatePasscodeButton();
|
||||
} else if (id == 2) {
|
||||
presentFragment(new ProxyListActivity());
|
||||
} else if (id == 3) {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
if (getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
|
||||
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, 22);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CameraScanActivity.showAsSheet(DialogsActivity.this, new CameraScanActivity.CameraScanActivityDelegate() {
|
||||
|
||||
@Override
|
||||
public void didFindQr(String text) {
|
||||
|
||||
ProxyUtil.showLinkAlert(getParentActivity(), text);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
} else if (id >= 10 && id < 10 + UserConfig.MAX_ACCOUNT_COUNT) {
|
||||
if (getParentActivity() == null) {
|
||||
return;
|
||||
|
@ -2167,18 +2195,18 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
actionMode.addView(selectedDialogsCountTextView, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 72, 0, 0, 0));
|
||||
selectedDialogsCountTextView.setOnTouchListener((v, event) -> true);
|
||||
|
||||
pinItem = actionMode.addItemWithWidth(pin, R.drawable.msg_pin, AndroidUtilities.dp(54));
|
||||
muteItem = actionMode.addItemWithWidth(mute, R.drawable.msg_mute, AndroidUtilities.dp(54));
|
||||
archive2Item = actionMode.addItemWithWidth(archive2, R.drawable.msg_archive, AndroidUtilities.dp(54));
|
||||
deleteItem = actionMode.addItemWithWidth(delete, R.drawable.msg_delete, AndroidUtilities.dp(54), LocaleController.getString("Delete", R.string.Delete));
|
||||
pinItem = actionMode.addItemWithWidth(pin, R.drawable.deproko_baseline_pin_24, AndroidUtilities.dp(54));
|
||||
muteItem = actionMode.addItemWithWidth(mute, R.drawable.baseline_volume_off_24_white, AndroidUtilities.dp(54));
|
||||
archive2Item = actionMode.addItemWithWidth(archive2, R.drawable.baseline_archive_24, AndroidUtilities.dp(54));
|
||||
deleteItem = actionMode.addItemWithWidth(delete, R.drawable.baseline_delete_24, AndroidUtilities.dp(54), LocaleController.getString("Delete", R.string.Delete));
|
||||
ActionBarMenuItem otherItem = actionMode.addItemWithWidth(0, R.drawable.ic_ab_other, AndroidUtilities.dp(54), LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
|
||||
archiveItem = otherItem.addSubItem(archive, R.drawable.msg_archive, LocaleController.getString("Archive", R.string.Archive));
|
||||
pin2Item = otherItem.addSubItem(pin2, R.drawable.msg_pin, LocaleController.getString("DialogPin", R.string.DialogPin));
|
||||
archiveItem = otherItem.addSubItem(archive, R.drawable.baseline_archive_24, LocaleController.getString("Archive", R.string.Archive));
|
||||
pin2Item = otherItem.addSubItem(pin2, R.drawable.deproko_baseline_pin_24, LocaleController.getString("DialogPin", R.string.DialogPin));
|
||||
addToFolderItem = otherItem.addSubItem(add_to_folder, R.drawable.msg_addfolder, LocaleController.getString("FilterAddTo", R.string.FilterAddTo));
|
||||
removeFromFolderItem = otherItem.addSubItem(remove_from_folder, R.drawable.msg_removefolder, LocaleController.getString("FilterRemoveFrom", R.string.FilterRemoveFrom));
|
||||
readItem = otherItem.addSubItem(read, R.drawable.msg_markread, LocaleController.getString("MarkAsRead", R.string.MarkAsRead));
|
||||
clearItem = otherItem.addSubItem(clear, R.drawable.msg_clear, LocaleController.getString("ClearHistory", R.string.ClearHistory));
|
||||
blockItem = otherItem.addSubItem(block, R.drawable.msg_block, LocaleController.getString("BlockUser", R.string.BlockUser));
|
||||
readItem = otherItem.addSubItem(read, R.drawable.deproko_baseline_check_double_24, LocaleController.getString("MarkAsRead", R.string.MarkAsRead));
|
||||
clearItem = otherItem.addSubItem(clear, R.drawable.baseline_delete_sweep_24, LocaleController.getString("ClearHistory", R.string.ClearHistory));
|
||||
blockItem = otherItem.addSubItem(block, R.drawable.baseline_block_24, LocaleController.getString("BlockUser", R.string.BlockUser));
|
||||
|
||||
actionModeViews.add(pinItem);
|
||||
actionModeViews.add(archive2Item);
|
||||
|
@ -2738,13 +2766,13 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground));
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate();
|
||||
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
|
||||
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.SRC_IN));
|
||||
CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
|
||||
combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
|
||||
drawable = combinedDrawable;
|
||||
}
|
||||
floatingButton.setBackgroundDrawable(drawable);
|
||||
floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.MULTIPLY));
|
||||
floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.SRC_IN));
|
||||
floatingButton.setImageResource(R.drawable.floating_pencil);
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
StateListAnimator animator = new StateListAnimator();
|
||||
|
@ -2979,6 +3007,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
|
||||
updateFilterTabs(false);
|
||||
|
||||
PrivacyUtil.postCheckAll(getParentActivity(), currentAccount);
|
||||
|
||||
return fragmentView;
|
||||
}
|
||||
|
||||
|
@ -3008,6 +3038,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
private boolean scrollBarVisible = true;
|
||||
|
||||
private void showScrollbars(boolean show) {
|
||||
if (viewPages == null || scrollBarVisible == show) {
|
||||
return;
|
||||
|
@ -3055,7 +3086,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
filterTabsView.resetTabId();
|
||||
}
|
||||
filterTabsView.removeTabs();
|
||||
if (!NekoConfig.hideAllTab) filterTabsView.addTab(Integer.MAX_VALUE, LocaleController.getString("FilterAllChats", R.string.FilterAllChats));
|
||||
if (!NekoConfig.hideAllTab)
|
||||
filterTabsView.addTab(Integer.MAX_VALUE, LocaleController.getString("FilterAllChats", R.string.FilterAllChats));
|
||||
for (int a = 0, N = filters.size(); a < N; a++) {
|
||||
MessagesController.DialogFilter dialogFilter = filters.get(a);
|
||||
switch (NekoConfig.tabsTitleType) {
|
||||
|
@ -3203,7 +3235,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (hasNotContactsPermission && askAboutContacts && getUserConfig().syncContacts && activity.shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)) {
|
||||
AlertDialog.Builder builder = AlertsCreator.createContactsPermissionDialog(activity, param -> {
|
||||
askAboutContacts = param != 0;
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts).commit();
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts).apply();
|
||||
askForPermissons(false);
|
||||
});
|
||||
showDialog(permissionDialog = builder.create());
|
||||
|
@ -3812,8 +3844,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
final boolean hasUnread = getMessagesStorage().getArchiveUnreadCount() != 0;
|
||||
|
||||
int[] icons = new int[]{
|
||||
hasUnread ? R.drawable.menu_read : 0,
|
||||
SharedConfig.archiveHidden ? R.drawable.chats_pin : R.drawable.chats_unpin,
|
||||
hasUnread ? R.drawable.deproko_baseline_check_double_24 : 0,
|
||||
SharedConfig.archiveHidden ? R.drawable.deproko_baseline_pin_24 : R.drawable.deproko_baseline_pin_undo_24,
|
||||
};
|
||||
CharSequence[] items = new CharSequence[]{
|
||||
hasUnread ? LocaleController.getString("MarkAllAsRead", R.string.MarkAllAsRead) : null,
|
||||
|
@ -4033,7 +4065,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||
boolean hintShowed = preferences.getBoolean("archivehint_l", false) || SharedConfig.archiveHidden;
|
||||
if (!hintShowed) {
|
||||
preferences.edit().putBoolean("archivehint_l", true).commit();
|
||||
preferences.edit().putBoolean("archivehint_l", true).apply();
|
||||
}
|
||||
int undoAction;
|
||||
if (hintShowed) {
|
||||
|
@ -4513,8 +4545,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
}
|
||||
if (canUnarchiveCount != 0) {
|
||||
archiveItem.setTextAndIcon(LocaleController.getString("Unarchive", R.string.Unarchive), R.drawable.msg_unarchive);
|
||||
archive2Item.setIcon(R.drawable.msg_unarchive);
|
||||
archiveItem.setTextAndIcon(LocaleController.getString("Unarchive", R.string.Unarchive), R.drawable.baseline_unarchive_24);
|
||||
archive2Item.setIcon(R.drawable.baseline_unarchive_24);
|
||||
if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE) {
|
||||
archive2Item.setVisibility(View.VISIBLE);
|
||||
archiveItem.setVisibility(View.GONE);
|
||||
|
@ -4523,8 +4555,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
archive2Item.setVisibility(View.GONE);
|
||||
}
|
||||
} else if (canArchiveCount != 0) {
|
||||
archiveItem.setTextAndIcon(LocaleController.getString("Archive", R.string.Archive), R.drawable.msg_archive);
|
||||
archive2Item.setIcon(R.drawable.msg_archive);
|
||||
archiveItem.setTextAndIcon(LocaleController.getString("Archive", R.string.Archive), R.drawable.baseline_archive_24);
|
||||
archive2Item.setIcon(R.drawable.baseline_archive_24);
|
||||
if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE) {
|
||||
archive2Item.setVisibility(View.VISIBLE);
|
||||
archiveItem.setVisibility(View.GONE);
|
||||
|
@ -4564,23 +4596,23 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
addToFolderItem.setVisibility(View.GONE);
|
||||
}
|
||||
if (canUnmuteCount != 0) {
|
||||
muteItem.setIcon(R.drawable.msg_unmute);
|
||||
muteItem.setIcon(R.drawable.baseline_bullhorn_24);
|
||||
muteItem.setContentDescription(LocaleController.getString("ChatsUnmute", R.string.ChatsUnmute));
|
||||
} else {
|
||||
muteItem.setIcon(R.drawable.msg_mute);
|
||||
muteItem.setIcon(R.drawable.baseline_volume_off_24_white);
|
||||
muteItem.setContentDescription(LocaleController.getString("ChatsMute", R.string.ChatsMute));
|
||||
}
|
||||
if (canReadCount != 0) {
|
||||
readItem.setTextAndIcon(LocaleController.getString("MarkAsRead", R.string.MarkAsRead), R.drawable.msg_markread);
|
||||
readItem.setTextAndIcon(LocaleController.getString("MarkAsRead", R.string.MarkAsRead), R.drawable.deproko_baseline_check_double_24);
|
||||
} else {
|
||||
readItem.setTextAndIcon(LocaleController.getString("MarkAsUnread", R.string.MarkAsUnread), R.drawable.msg_markunread);
|
||||
readItem.setTextAndIcon(LocaleController.getString("MarkAsUnread", R.string.MarkAsUnread), R.drawable.baseline_unsubscribe_24);
|
||||
}
|
||||
if (canPinCount != 0) {
|
||||
pinItem.setIcon(R.drawable.msg_pin);
|
||||
pinItem.setIcon(R.drawable.deproko_baseline_pin_24);
|
||||
pinItem.setContentDescription(LocaleController.getString("PinToTop", R.string.PinToTop));
|
||||
pin2Item.setText(LocaleController.getString("DialogPin", R.string.DialogPin));
|
||||
} else {
|
||||
pinItem.setIcon(R.drawable.msg_unpin);
|
||||
pinItem.setIcon(R.drawable.deproko_baseline_pin_undo_24);
|
||||
pinItem.setContentDescription(LocaleController.getString("UnpinFromTop", R.string.UnpinFromTop));
|
||||
pin2Item.setText(LocaleController.getString("DialogUnpin", R.string.DialogUnpin));
|
||||
}
|
||||
|
@ -4698,12 +4730,12 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
|
||||
String proxyAddress = preferences.getString("proxy_ip", "");
|
||||
boolean proxyEnabled;
|
||||
if ((proxyEnabled = preferences.getBoolean("proxy_enabled", false) && !TextUtils.isEmpty(proxyAddress)) || getMessagesController().blockedCountry && !SharedConfig.proxyList.isEmpty()) {
|
||||
if (!NekoConfig.useProxyItem && (!NekoConfig.hideProxyByDefault || (proxyEnabled = preferences.getBoolean("proxy_enabled", false) && !TextUtils.isEmpty(proxyAddress)) || getMessagesController().blockedCountry && !SharedConfig.proxyList.isEmpty())) {
|
||||
if (!actionBar.isSearchFieldVisible() && (doneItem == null || doneItem.getVisibility() != View.VISIBLE)) {
|
||||
proxyItem.setVisibility(View.VISIBLE);
|
||||
}
|
||||
proxyItemVisible = true;
|
||||
proxyDrawable.setConnected(proxyEnabled, currentConnectionState == ConnectionsManager.ConnectionStateConnected || currentConnectionState == ConnectionsManager.ConnectionStateUpdating, animated);
|
||||
proxyDrawable.setConnected(true, currentConnectionState == ConnectionsManager.ConnectionStateConnected || currentConnectionState == ConnectionsManager.ConnectionStateUpdating, animated);
|
||||
} else {
|
||||
proxyItemVisible = false;
|
||||
proxyItem.setVisibility(View.GONE);
|
||||
|
@ -4711,6 +4743,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
private AnimatorSet doneItemAnimator;
|
||||
|
||||
private void showDoneItem(boolean show) {
|
||||
if (doneItem == null) {
|
||||
return;
|
||||
|
@ -4834,7 +4867,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (alert) {
|
||||
AlertDialog.Builder builder = AlertsCreator.createContactsPermissionDialog(activity, param -> {
|
||||
askAboutContacts = param != 0;
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts).commit();
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts).apply();
|
||||
askForPermissons(false);
|
||||
});
|
||||
showDialog(permissionDialog = builder.create());
|
||||
|
@ -4903,7 +4936,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (grantResults[a] == PackageManager.PERMISSION_GRANTED) {
|
||||
getContactsController().forceImportContacts();
|
||||
} else {
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts = false).commit();
|
||||
MessagesController.getGlobalNotificationsSettings().edit().putBoolean("askAboutContacts", askAboutContacts = false).apply();
|
||||
}
|
||||
break;
|
||||
case Manifest.permission.WRITE_EXTERNAL_STORAGE:
|
||||
|
@ -4921,7 +4954,15 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
private String getNekoTitle(String title) {
|
||||
return LocaleController.getString("NekogramEmojiDialogs", R.string.NekogramEmojiDialogs) + " " + title;
|
||||
|
||||
if (!NekoConfig.removeTitleEmoji) {
|
||||
|
||||
title = LocaleController.getString("NekogramEmojiDialogs", R.string.NekogramEmojiDialogs) + " " + title;
|
||||
|
||||
}
|
||||
|
||||
return title;
|
||||
|
||||
//if (FilterPopup.getInstance(currentAccount).getTotalUnreadCount() == 0) {
|
||||
// return LocaleController.getString("NekogramEmojiDialogs", R.string.NekogramEmojiDialogs) + " " + title;
|
||||
//}
|
||||
|
@ -5086,7 +5127,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (preferences.getBoolean("filterhint", false)) {
|
||||
return;
|
||||
}
|
||||
preferences.edit().putBoolean("filterhint", true).commit();
|
||||
preferences.edit().putBoolean("filterhint", true).apply();
|
||||
AndroidUtilities.runOnUIThread(() -> getUndoView().showWithAction(0, UndoView.ACTION_FILTERS_AVAILABLE, null, () -> presentFragment(new FiltersSetupActivity())), 1000);
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,8 @@ import org.telegram.ui.Components.PasscodeView;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoXConfig;
|
||||
|
||||
public class ExternalActionActivity extends Activity implements ActionBarLayout.ActionBarLayoutDelegate {
|
||||
|
||||
private boolean finished;
|
||||
|
@ -76,7 +78,7 @@ public class ExternalActionActivity extends Activity implements ActionBarLayout.
|
|||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
setTheme(R.style.Theme_TMessages);
|
||||
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
||||
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
|
||||
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture && !NekoXConfig.disableFlagSecure) {
|
||||
try {
|
||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -252,7 +252,7 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
moveImageView.setFocusable(false);
|
||||
moveImageView.setScaleType(ImageView.ScaleType.CENTER);
|
||||
moveImageView.setImageResource(R.drawable.list_reorder);
|
||||
moveImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_stickers_menu), PorterDuff.Mode.MULTIPLY));
|
||||
moveImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_stickers_menu), PorterDuff.Mode.SRC_IN));
|
||||
moveImageView.setClickable(true);
|
||||
addView(moveImageView, LayoutHelper.createFrame(48, 48, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL, 6, 0, 6, 0));
|
||||
|
||||
|
@ -282,7 +282,7 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
optionsImageView.setFocusable(false);
|
||||
optionsImageView.setScaleType(ImageView.ScaleType.CENTER);
|
||||
optionsImageView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_stickers_menuSelector)));
|
||||
optionsImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_stickers_menu), PorterDuff.Mode.MULTIPLY));
|
||||
optionsImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_stickers_menu), PorterDuff.Mode.SRC_IN));
|
||||
optionsImageView.setImageResource(R.drawable.msg_actions);
|
||||
addView(optionsImageView, LayoutHelper.createFrame(40, 40, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.CENTER_VERTICAL, 6, 0, 6, 0));
|
||||
}
|
||||
|
@ -372,10 +372,6 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
updateRows(true);
|
||||
getMessagesController().loadRemoteFilters(true);
|
||||
getNotificationCenter().addObserver(this, NotificationCenter.dialogFiltersUpdated);
|
||||
getNotificationCenter().addObserver(this, NotificationCenter.suggestedFiltersLoaded);
|
||||
if (getMessagesController().suggestedFilters.isEmpty()) {
|
||||
getMessagesController().loadSuggestedFilters();
|
||||
}
|
||||
return super.onFragmentCreate();
|
||||
}
|
||||
|
||||
|
@ -491,6 +487,10 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
return;
|
||||
}
|
||||
updateRows(true);
|
||||
getNotificationCenter().addObserver(this, NotificationCenter.suggestedFiltersLoaded);
|
||||
if (getMessagesController().suggestedFilters.isEmpty()) {
|
||||
getMessagesController().loadSuggestedFilters();
|
||||
}
|
||||
} else if (id == NotificationCenter.suggestedFiltersLoaded) {
|
||||
updateRows(true);
|
||||
}
|
||||
|
@ -548,8 +548,8 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
LocaleController.getString("FilterDeleteItem", R.string.FilterDeleteItem),
|
||||
};
|
||||
final int[] icons = new int[]{
|
||||
R.drawable.msg_edit,
|
||||
R.drawable.msg_delete
|
||||
R.drawable.baseline_edit_24,
|
||||
R.drawable.baseline_delete_24
|
||||
};
|
||||
builder1.setItems(items, icons, (dialog, which) -> {
|
||||
if (which == 0) {
|
||||
|
@ -746,8 +746,8 @@ public class FiltersSetupActivity extends BaseFragment implements NotificationCe
|
|||
if (position == createFilterRow) {
|
||||
Drawable drawable1 = mContext.getResources().getDrawable(R.drawable.poll_add_circle);
|
||||
Drawable drawable2 = mContext.getResources().getDrawable(R.drawable.poll_add_plus);
|
||||
drawable1.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_switchTrackChecked), PorterDuff.Mode.MULTIPLY));
|
||||
drawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_checkboxCheck), PorterDuff.Mode.MULTIPLY));
|
||||
drawable1.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_switchTrackChecked), PorterDuff.Mode.SRC_IN));
|
||||
drawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_checkboxCheck), PorterDuff.Mode.SRC_IN));
|
||||
CombinedDrawable combinedDrawable = new CombinedDrawable(drawable1, drawable2);
|
||||
|
||||
textCell.setTextAndIcon(LocaleController.getString("CreateNewFilter", R.string.CreateNewFilter), combinedDrawable, false);
|
||||
|
|
|
@ -16,13 +16,16 @@ import android.view.ViewGroup;
|
|||
import android.widget.FrameLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.ChatObject;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
|
@ -40,8 +43,7 @@ import org.telegram.ui.Components.RecyclerListView;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import tw.nekomimi.nekogram.utils.ProxyUtil;
|
||||
|
||||
public class GroupInviteActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
|
@ -58,6 +60,7 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
private int copyLinkRow;
|
||||
private int revokeLinkRow;
|
||||
private int shareLinkRow;
|
||||
private int shareQrCodeRow;
|
||||
private int shadowRow;
|
||||
private int rowCount;
|
||||
|
||||
|
@ -80,6 +83,7 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
copyLinkRow = rowCount++;
|
||||
revokeLinkRow = rowCount++;
|
||||
shareLinkRow = rowCount++;
|
||||
shareQrCodeRow = rowCount++;
|
||||
shadowRow = rowCount++;
|
||||
|
||||
return true;
|
||||
|
@ -148,6 +152,11 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
} else if (position == shareQrCodeRow) {
|
||||
if (invite == null) {
|
||||
return;
|
||||
}
|
||||
ProxyUtil.showQrDialog(getParentActivity(),invite.link);
|
||||
} else if (position == revokeLinkRow) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
builder.setMessage(LocaleController.getString("RevokeAlert", R.string.RevokeAlert));
|
||||
|
@ -226,7 +235,7 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
@Override
|
||||
public boolean isEnabled(RecyclerView.ViewHolder holder) {
|
||||
int position = holder.getAdapterPosition();
|
||||
return position == revokeLinkRow || position == copyLinkRow || position == shareLinkRow || position == linkRow;
|
||||
return position == revokeLinkRow || position == copyLinkRow || position == shareLinkRow || position == shareQrCodeRow || position == linkRow;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -263,6 +272,8 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
textCell.setText(LocaleController.getString("CopyLink", R.string.CopyLink), true);
|
||||
} else if (position == shareLinkRow) {
|
||||
textCell.setText(LocaleController.getString("ShareLink", R.string.ShareLink), false);
|
||||
} else if (position == shareQrCodeRow) {
|
||||
textCell.setText(LocaleController.getString("ShareQRCode", R.string.ShareQRCode), false);
|
||||
} else if (position == revokeLinkRow) {
|
||||
textCell.setText(LocaleController.getString("RevokeLink", R.string.RevokeLink), true);
|
||||
}
|
||||
|
@ -291,7 +302,7 @@ public class GroupInviteActivity extends BaseFragment implements NotificationCen
|
|||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (position == copyLinkRow || position == shareLinkRow || position == revokeLinkRow) {
|
||||
if (position == copyLinkRow || position == shareLinkRow || position == shareQrCodeRow || position == revokeLinkRow) {
|
||||
return 0;
|
||||
} else if (position == shadowRow || position == linkInfoRow) {
|
||||
return 1;
|
||||
|
|
|
@ -16,21 +16,27 @@ import android.widget.EditText;
|
|||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.ui.ActionBar.AlertDialog;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.ActionBar.ThemeDescription;
|
||||
import org.telegram.ui.Cells.LanguageCell;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.ui.ActionBar.ActionBar;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||
import org.telegram.ui.ActionBar.AlertDialog;
|
||||
import org.telegram.ui.ActionBar.BaseFragment;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.ActionBar.ThemeDescription;
|
||||
import org.telegram.ui.Cells.LanguageCell;
|
||||
import org.telegram.ui.Cells.ShadowSectionCell;
|
||||
import org.telegram.ui.Components.AlertsCreator;
|
||||
import org.telegram.ui.Components.EmptyTextProgressView;
|
||||
import org.telegram.ui.Components.LayoutHelper;
|
||||
import org.telegram.ui.Components.RecyclerListView;
|
||||
|
@ -38,11 +44,16 @@ import org.telegram.ui.Components.RecyclerListView;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Locale;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import kotlin.Unit;
|
||||
import tw.nekomimi.nekogram.BottomBuilder;
|
||||
import tw.nekomimi.nekogram.transtale.TranslateDb;
|
||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||
import tw.nekomimi.nekogram.utils.ShareUtil;
|
||||
import tw.nekomimi.nekogram.utils.UIUtil;
|
||||
|
||||
public class LanguageSelectActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
|
@ -150,6 +161,12 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
LanguageCell cell = (LanguageCell) view;
|
||||
LocaleController.LocaleInfo localeInfo = cell.getCurrentLocale();
|
||||
if (localeInfo != null) {
|
||||
if (localeInfo.toInstall) {
|
||||
AlertsCreator.createLanguageAlert((LaunchActivity) getParentActivity(),localeInfo.pack,() -> {
|
||||
finishFragment();
|
||||
}).show();
|
||||
return;
|
||||
}
|
||||
LocaleController.getInstance().applyLanguage(localeInfo, true, false, false, true, currentAccount);
|
||||
parentLayout.rebuildAllFragmentViews(false, false);
|
||||
}
|
||||
|
@ -162,18 +179,38 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
}
|
||||
LanguageCell cell = (LanguageCell) view;
|
||||
LocaleController.LocaleInfo localeInfo = cell.getCurrentLocale();
|
||||
|
||||
if (localeInfo == null || localeInfo.pathToFile == null || localeInfo.isRemote() && localeInfo.serverIndex != Integer.MAX_VALUE) {
|
||||
return false;
|
||||
}
|
||||
final LocaleController.LocaleInfo finalLocaleInfo = localeInfo;
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
builder.setTitle(LocaleController.getString("DeleteLocalizationTitle", R.string.DeleteLocalizationTitle));
|
||||
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("DeleteLocalizationText", R.string.DeleteLocalizationText, localeInfo.name)));
|
||||
builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> {
|
||||
if (LocaleController.getInstance().deleteLanguage(finalLocaleInfo, currentAccount)) {
|
||||
|
||||
BottomBuilder builder = new BottomBuilder(getParentActivity());
|
||||
|
||||
builder.addItem(LocaleController.getString("BotShare",R.string.BotShare),R.drawable.baseline_send_24,false,(__) -> {
|
||||
|
||||
builder.dismiss();
|
||||
|
||||
ShareUtil.shareText(getParentActivity(),"https://t.me/setlanguage/" + localeInfo.shortName.replace('_','-'));
|
||||
|
||||
return Unit.INSTANCE;
|
||||
|
||||
});
|
||||
|
||||
if (!localeInfo.isBuiltIn()) {
|
||||
|
||||
builder.addItem(LocaleController.getString("DeleteLocalizationTitle", R.string.DeleteLocalizationTitle), R.drawable.baseline_delete_24, true, (__) -> {
|
||||
|
||||
builder.dismiss();
|
||||
|
||||
AlertUtil.showConfirm(getParentActivity(),
|
||||
LocaleController.getString("DeleteLocalizationTitle", R.string.DeleteLocalizationTitle),
|
||||
R.drawable.baseline_delete_24,
|
||||
LocaleController.getString("Delete", R.string.Delete), true, () -> {
|
||||
|
||||
if (LocaleController.getInstance().deleteLanguage(localeInfo, currentAccount)) {
|
||||
fillLanguages();
|
||||
if (searchResult != null) {
|
||||
searchResult.remove(finalLocaleInfo);
|
||||
searchResult.remove(localeInfo);
|
||||
}
|
||||
if (listAdapter != null) {
|
||||
listAdapter.notifyDataSetChanged();
|
||||
|
@ -182,14 +219,17 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
searchListViewAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
AlertDialog alertDialog = builder.create();
|
||||
showDialog(alertDialog);
|
||||
TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||
if (button != null) {
|
||||
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
|
||||
|
||||
return Unit.INSTANCE;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
builder.show();
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
|
@ -295,21 +335,64 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
long time = System.currentTimeMillis();
|
||||
ArrayList<LocaleController.LocaleInfo> resultArray = new ArrayList<>();
|
||||
|
||||
boolean noSearch = false;
|
||||
|
||||
for (int a = 0, N = unofficialLanguages.size(); a < N; a++) {
|
||||
LocaleController.LocaleInfo c = unofficialLanguages.get(a);
|
||||
if (c.name.toLowerCase().startsWith(query) || c.nameEnglish.toLowerCase().startsWith(query)) {
|
||||
if (c.name.toLowerCase().contains(query) || c.nameEnglish.toLowerCase().contains(query)) {
|
||||
resultArray.add(c);
|
||||
} else if (c.shortName.contains(query)) {
|
||||
resultArray.add(c);
|
||||
if (c.shortName.equals(query)) {
|
||||
noSearch = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int a = 0, N = sortedLanguages.size(); a < N; a++) {
|
||||
LocaleController.LocaleInfo c = sortedLanguages.get(a);
|
||||
if (c.name.toLowerCase().startsWith(query) || c.nameEnglish.toLowerCase().startsWith(query)) {
|
||||
if (c.name.toLowerCase().contains(query) || c.nameEnglish.toLowerCase().contains(query)) {
|
||||
resultArray.add(c);
|
||||
} else if (c.shortName.contains(query)) {
|
||||
resultArray.add(c);
|
||||
if (c.shortName.equals(query)) {
|
||||
noSearch = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateSearchResults(resultArray);
|
||||
|
||||
if (!noSearch) {
|
||||
|
||||
TLRPC.TL_langpack_getLanguage req = new TLRPC.TL_langpack_getLanguage();
|
||||
req.lang_code = query.replace('_', '-');
|
||||
req.lang_pack = "android";
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
if (response instanceof TLRPC.TL_langPackLanguage) {
|
||||
TLRPC.TL_langPackLanguage res = (TLRPC.TL_langPackLanguage) response;
|
||||
if (res.strings_count == 0) return;
|
||||
resultArray.add(new LocaleController.LocaleInfo() {{
|
||||
name = res.native_name;
|
||||
nameEnglish = res.name;
|
||||
shortName = res.lang_code;
|
||||
pluralLangCode = res.plural_code;
|
||||
baseLangCode = res.base_lang_code;
|
||||
isRtl = res.rtl;
|
||||
if (res.official) {
|
||||
pathToFile = "remote";
|
||||
} else {
|
||||
pathToFile = "unofficial";
|
||||
}
|
||||
toInstall = true;
|
||||
pack = res;
|
||||
}});
|
||||
updateSearchResults(resultArray);
|
||||
}
|
||||
}));
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11,6 +11,7 @@ package org.telegram.ui;
|
|||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
@ -21,6 +22,8 @@ import org.telegram.tgnet.TLRPC;
|
|||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||
import org.telegram.ui.ActionBar.AlertDialog;
|
||||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.ActionBar.ThemeDescription;
|
||||
|
@ -69,6 +72,8 @@ public class PrivacyUsersActivity extends BaseFragment implements NotificationCe
|
|||
public static final int TYPE_BLOCKED = 1;
|
||||
public static final int TYPE_FILTER = 2;
|
||||
|
||||
private int unblock_all = 1;
|
||||
|
||||
public interface PrivacyActivityDelegate {
|
||||
void didUpdateUserList(ArrayList<Integer> ids, boolean added);
|
||||
}
|
||||
|
@ -139,10 +144,34 @@ public class PrivacyUsersActivity extends BaseFragment implements NotificationCe
|
|||
public void onItemClick(int id) {
|
||||
if (id == -1) {
|
||||
finishFragment();
|
||||
} else if (id == unblock_all) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
builder.setTitle(LocaleController.getString("UnblockAll", R.string.UnblockAll));
|
||||
if (getMessagesController().totalBlockedCount != 0) {
|
||||
builder.setMessage(LocaleController.getString("UnblockAllWarn", R.string.UnblockAllWarn));
|
||||
builder.setPositiveButton(LocaleController.getString("UnblockAll", R.string.UnblockAll), (dialog, which) -> {
|
||||
new Thread(() -> getMessagesController().unblockAllUsers()).start();
|
||||
});
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
} else {
|
||||
builder.setMessage(LocaleController.getString("BlockedListEmpty",R.string.BlockedListEmpty));
|
||||
builder.setPositiveButton(LocaleController.getString("OK",R.string.OK),null);
|
||||
}
|
||||
showDialog(builder.create());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (blockedUsersActivity) {
|
||||
|
||||
ActionBarMenu menu = actionBar.createMenu();
|
||||
|
||||
ActionBarMenuItem otherItem = menu.addItem(0, R.drawable.ic_ab_other);
|
||||
otherItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
|
||||
otherItem.addSubItem(unblock_all, LocaleController.getString("UnblockAll", R.string.UnblockAll));
|
||||
|
||||
}
|
||||
|
||||
fragmentView = new FrameLayout(context);
|
||||
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
||||
frameLayout.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
|
||||
|
@ -470,9 +499,9 @@ public class PrivacyUsersActivity extends BaseFragment implements NotificationCe
|
|||
ManageChatTextCell actionCell = (ManageChatTextCell) holder.itemView;
|
||||
actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton);
|
||||
if (currentType == TYPE_BLOCKED) {
|
||||
actionCell.setText(LocaleController.getString("BlockUser", R.string.BlockUser), null, R.drawable.actions_addmember2, false);
|
||||
actionCell.setText(LocaleController.getString("BlockUser", R.string.BlockUser), null, R.drawable.baseline_person_add_24, false);
|
||||
} else {
|
||||
actionCell.setText(LocaleController.getString("PrivacyAddAnException", R.string.PrivacyAddAnException), null, R.drawable.actions_addmember2, false);
|
||||
actionCell.setText(LocaleController.getString("PrivacyAddAnException", R.string.PrivacyAddAnException), null, R.drawable.baseline_person_add_24, false);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
|
|
@ -140,6 +140,7 @@ import java.util.HashMap;
|
|||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoConfig;
|
||||
import tw.nekomimi.nekogram.utils.ProxyUtil;
|
||||
|
||||
public class ProfileActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate, SharedMediaLayout.SharedMediaPreloaderDelegate {
|
||||
|
||||
|
@ -251,6 +252,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
private final static int leave_group = 7;
|
||||
private final static int invite_to_group = 9;
|
||||
private final static int share = 10;
|
||||
private final static int qr_code = 11;
|
||||
private final static int edit_channel = 12;
|
||||
private final static int add_shortcut = 14;
|
||||
private final static int call_item = 15;
|
||||
|
@ -1279,7 +1281,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
removeSelfFromStack();
|
||||
});
|
||||
presentFragment(fragment);
|
||||
} else if (id == share) {
|
||||
} else if (id == share || id == qr_code) {
|
||||
try {
|
||||
String text = null;
|
||||
if (user_id != 0) {
|
||||
|
@ -1287,7 +1289,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (user == null) {
|
||||
return;
|
||||
}
|
||||
if (botInfo != null && userInfo != null && !TextUtils.isEmpty(userInfo.about)) {
|
||||
if (botInfo != null && userInfo != null && !TextUtils.isEmpty(userInfo.about) && id == share) {
|
||||
text = String.format("%s https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/%s", userInfo.about, user.username);
|
||||
} else {
|
||||
text = String.format("https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/%s", user.username);
|
||||
|
@ -1297,7 +1299,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (chat == null) {
|
||||
return;
|
||||
}
|
||||
if (chatInfo != null && !TextUtils.isEmpty(chatInfo.about)) {
|
||||
if (chatInfo != null && !TextUtils.isEmpty(chatInfo.about) && id == share) {
|
||||
text = String.format("%s\nhttps://" + MessagesController.getInstance(currentAccount).linkPrefix + "/%s", chatInfo.about, chat.username);
|
||||
} else {
|
||||
text = String.format("https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/%s", chat.username);
|
||||
|
@ -1306,10 +1308,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (TextUtils.isEmpty(text)) {
|
||||
return;
|
||||
}
|
||||
if (id == share) {
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.setType("text/plain");
|
||||
intent.putExtra(Intent.EXTRA_TEXT, text);
|
||||
startActivityForResult(Intent.createChooser(intent, LocaleController.getString("BotShare", R.string.BotShare)), 500);
|
||||
} else {
|
||||
ProxyUtil.showQrDialog(getParentActivity(), text);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
@ -2031,6 +2037,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
idTextView.setTextSize(14);
|
||||
idTextView.setGravity(Gravity.LEFT);
|
||||
idTextView.setAlpha(1.0f);
|
||||
|
||||
frameLayout.addView(idTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 118, 0, 48, 0));
|
||||
|
||||
updateProfileData();
|
||||
|
@ -2040,7 +2047,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_profile_actionBackground), Theme.getColor(Theme.key_profile_actionPressedBackground));
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).mutate();
|
||||
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
|
||||
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.SRC_IN));
|
||||
CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
|
||||
combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
|
||||
drawable = combinedDrawable;
|
||||
|
@ -2048,7 +2055,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
writeButton.setBackgroundDrawable(drawable);
|
||||
writeButton.setImageResource(R.drawable.profile_newmsg);
|
||||
writeButton.setContentDescription(LocaleController.getString("AccDescrOpenChat", R.string.AccDescrOpenChat));
|
||||
writeButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_profile_actionIcon), PorterDuff.Mode.MULTIPLY));
|
||||
writeButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_profile_actionIcon), PorterDuff.Mode.SRC_IN));
|
||||
writeButton.setScaleType(ImageView.ScaleType.CENTER);
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
StateListAnimator animator = new StateListAnimator();
|
||||
|
@ -2065,7 +2072,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
frameLayout.addView(writeButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.RIGHT | Gravity.TOP, 0, 0, 16, 0));
|
||||
writeButton.setOnClickListener(v -> {
|
||||
if (playProfileAnimation != 0 && parentLayout.fragmentsStack.get(parentLayout.fragmentsStack.size() - 2) instanceof ChatActivity) {
|
||||
if (playProfileAnimation != 0 && parentLayout.fragmentsStack.get(parentLayout.fragmentsStack.size() - 2) instanceof ChatActivity && !AndroidUtilities.isTablet()) {
|
||||
finishFragment();
|
||||
} else {
|
||||
TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(user_id);
|
||||
|
@ -2134,7 +2141,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
if (lockIconDrawable != null) {
|
||||
lockIconDrawable.setColorFilter(ColorUtils.blendARGB(Theme.getColor(Theme.key_chat_lockIcon), Color.WHITE, value), PorterDuff.Mode.MULTIPLY);
|
||||
lockIconDrawable.setColorFilter(ColorUtils.blendARGB(Theme.getColor(Theme.key_chat_lockIcon), Color.WHITE, value), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
|
||||
if (verifiedCrossfadeDrawable != null) {
|
||||
|
@ -2256,6 +2263,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onMemberClick(TLRPC.ChatParticipant participant, boolean isLong) {
|
||||
return onMemberClick(participant, isLong, false);
|
||||
}
|
||||
|
@ -2303,7 +2311,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
return true;
|
||||
}
|
||||
items.add(editingAdmin ? LocaleController.getString("EditAdminRights", R.string.EditAdminRights) : LocaleController.getString("SetAsAdmin", R.string.SetAsAdmin));
|
||||
icons.add(R.drawable.actions_addadmin);
|
||||
icons.add(R.drawable.baseline_stars_18);
|
||||
actions.add(0);
|
||||
}
|
||||
if (canRestrict) {
|
||||
|
@ -2311,7 +2319,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
return true;
|
||||
}
|
||||
items.add(LocaleController.getString("ChangePermissions", R.string.ChangePermissions));
|
||||
icons.add(R.drawable.actions_permissions);
|
||||
icons.add(R.drawable.baseline_block_24);
|
||||
actions.add(1);
|
||||
}
|
||||
if (allowKick) {
|
||||
|
@ -2319,7 +2327,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
return true;
|
||||
}
|
||||
items.add(LocaleController.getString("KickFromGroup", R.string.KickFromGroup));
|
||||
icons.add(R.drawable.actions_remove_user);
|
||||
icons.add(R.drawable.baseline_remove_circle_24);
|
||||
actions.add(2);
|
||||
hasRemove = true;
|
||||
}
|
||||
|
@ -2338,7 +2346,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
int action = actions.get(i);
|
||||
if (action == 1 && (channelParticipant instanceof TLRPC.TL_channelParticipantAdmin || participant instanceof TLRPC.TL_chatParticipantAdmin)) {
|
||||
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
|
||||
builder2.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
||||
builder2.setTitle(LocaleController.getString("NekoX", R.string.NekoX));
|
||||
builder2.setMessage(LocaleController.formatString("AdminWillBeRemoved", R.string.AdminWillBeRemoved, ContactsController.formatName(user.first_name, user.last_name)));
|
||||
builder2.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> {
|
||||
if (channelParticipant != null) {
|
||||
|
@ -2627,7 +2635,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
int c = AndroidUtilities.getOffsetColor(color1, color2, value, 1.0f);
|
||||
nameTextView[1].setTextColor(c);
|
||||
if (lockIconDrawable != null) {
|
||||
lockIconDrawable.setColorFilter(c, PorterDuff.Mode.MULTIPLY);
|
||||
lockIconDrawable.setColorFilter(c, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
if (scamDrawable != null) {
|
||||
color1 = Theme.getColor(Theme.key_avatar_subtitleInProfileBlue);
|
||||
|
@ -2650,13 +2658,13 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (verifiedDrawable != null) {
|
||||
color1 = Theme.getColor(Theme.key_profile_verifiedBackground);
|
||||
color2 = Theme.getColor(Theme.key_player_actionBarTitle);
|
||||
verifiedDrawable.setColorFilter(AndroidUtilities.getOffsetColor(color1, color2, value, 1.0f), PorterDuff.Mode.MULTIPLY);
|
||||
verifiedDrawable.setColorFilter(AndroidUtilities.getOffsetColor(color1, color2, value, 1.0f), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
|
||||
if (verifiedCheckDrawable != null) {
|
||||
color1 = Theme.getColor(Theme.key_profile_verifiedCheck);
|
||||
color2 = Theme.getColor(Theme.key_windowBackgroundWhite);
|
||||
verifiedCheckDrawable.setColorFilter(AndroidUtilities.getOffsetColor(color1, color2, value, 1.0f), PorterDuff.Mode.MULTIPLY);
|
||||
verifiedCheckDrawable.setColorFilter(AndroidUtilities.getOffsetColor(color1, color2, value, 1.0f), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3038,7 +3046,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
scamDrawable.setColor(ColorUtils.blendARGB(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue), Color.argb(179, 255, 255, 255), animationProgress));
|
||||
}
|
||||
if (lockIconDrawable != null) {
|
||||
lockIconDrawable.setColorFilter(ColorUtils.blendARGB(Theme.getColor(Theme.key_chat_lockIcon), Color.WHITE, animationProgress), PorterDuff.Mode.MULTIPLY);
|
||||
lockIconDrawable.setColorFilter(ColorUtils.blendARGB(Theme.getColor(Theme.key_chat_lockIcon), Color.WHITE, animationProgress), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
if (verifiedCrossfadeDrawable != null) {
|
||||
verifiedCrossfadeDrawable.setProgress(animationProgress);
|
||||
|
@ -3085,7 +3093,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
nameTextView[a].setScaleY(nameScale);
|
||||
}
|
||||
|
||||
if (diff > 0.85) {
|
||||
if (diff > 0.85 && NekoConfig.showIdAndDc) {
|
||||
idTextView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
idTextView.setVisibility(View.GONE);
|
||||
|
@ -3287,7 +3295,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
TLRPC.EncryptedChat encryptedChat = (TLRPC.EncryptedChat) args[0];
|
||||
Bundle args2 = new Bundle();
|
||||
args2.putInt("enc_id", encryptedChat.id);
|
||||
if (MessagesController.getInstance(currentAccount).checkCanOpenChat(args2, ProfileActivity.this)) {
|
||||
presentFragment(new ChatActivity(args2), true);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (id == NotificationCenter.encryptedChatUpdated) {
|
||||
|
@ -3365,7 +3375,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
FileLog.e(e);
|
||||
}
|
||||
}
|
||||
if (sharedMediaLayout != null) {
|
||||
sharedMediaLayout.setCommonGroupsCount(userInfo.common_chats_count);
|
||||
}
|
||||
updateSelectedMediaTabText();
|
||||
}
|
||||
} else if (id == NotificationCenter.didReceiveNewMessages) {
|
||||
|
@ -4348,39 +4360,40 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (isBot || ContactsController.getInstance(currentAccount).contactsDict.get(user_id) == null) {
|
||||
if (MessagesController.isSupportUser(user)) {
|
||||
if (userBlocked) {
|
||||
otherItem.addSubItem(block_contact, R.drawable.msg_block, LocaleController.getString("Unblock", R.string.Unblock));
|
||||
otherItem.addSubItem(block_contact, R.drawable.baseline_block_24, LocaleController.getString("Unblock", R.string.Unblock));
|
||||
}
|
||||
} else {
|
||||
if (isBot) {
|
||||
if (!user.bot_nochats) {
|
||||
otherItem.addSubItem(invite_to_group, R.drawable.msg_addbot, LocaleController.getString("BotInvite", R.string.BotInvite));
|
||||
otherItem.addSubItem(invite_to_group, R.drawable.baseline_group_add_24, LocaleController.getString("BotInvite", R.string.BotInvite));
|
||||
}
|
||||
otherItem.addSubItem(share, R.drawable.msg_share, LocaleController.getString("BotShare", R.string.BotShare));
|
||||
otherItem.addSubItem(share, R.drawable.baseline_forward_24, LocaleController.getString("BotShare", R.string.BotShare));
|
||||
otherItem.addSubItem(qr_code, R.drawable.wallet_qr, LocaleController.getString("ShareQRCode", R.string.ShareQRCode));
|
||||
} else {
|
||||
otherItem.addSubItem(add_contact, R.drawable.msg_addcontact, LocaleController.getString("AddContact", R.string.AddContact));
|
||||
otherItem.addSubItem(add_contact, R.drawable.baseline_person_add_24, LocaleController.getString("AddContact", R.string.AddContact));
|
||||
}
|
||||
if (!TextUtils.isEmpty(user.phone)) {
|
||||
otherItem.addSubItem(share_contact, R.drawable.msg_share, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
otherItem.addSubItem(share_contact, R.drawable.baseline_forward_24, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
}
|
||||
if (isBot) {
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.msg_block : R.drawable.msg_retry, !userBlocked ? LocaleController.getString("BotStop", R.string.BotStop) : LocaleController.getString("BotRestart", R.string.BotRestart));
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.baseline_block_24 : R.drawable.baseline_replay_24, !userBlocked ? LocaleController.getString("BotStop", R.string.BotStop) : LocaleController.getString("BotRestart", R.string.BotRestart));
|
||||
} else {
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.msg_block : R.drawable.msg_block, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock));
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.baseline_block_24 : R.drawable.baseline_block_24, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(user.phone)) {
|
||||
otherItem.addSubItem(share_contact, R.drawable.msg_share, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
otherItem.addSubItem(share_contact, R.drawable.baseline_forward_24, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
}
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.msg_block : R.drawable.msg_block, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock));
|
||||
otherItem.addSubItem(edit_contact, R.drawable.msg_edit, LocaleController.getString("EditContact", R.string.EditContact));
|
||||
otherItem.addSubItem(delete_contact, R.drawable.msg_delete, LocaleController.getString("DeleteContact", R.string.DeleteContact));
|
||||
otherItem.addSubItem(block_contact, !userBlocked ? R.drawable.baseline_block_24 : R.drawable.baseline_block_24, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock));
|
||||
otherItem.addSubItem(edit_contact, R.drawable.baseline_edit_24, LocaleController.getString("EditContact", R.string.EditContact));
|
||||
otherItem.addSubItem(delete_contact, R.drawable.baseline_delete_24, LocaleController.getString("DeleteContact", R.string.DeleteContact));
|
||||
}
|
||||
} else {
|
||||
otherItem.addSubItem(share_contact, R.drawable.msg_share, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
otherItem.addSubItem(share_contact, R.drawable.baseline_forward_24, LocaleController.getString("ShareContact", R.string.ShareContact));
|
||||
}
|
||||
if (!UserObject.isDeleted(user) && !isBot && currentEncryptedChat == null && user_id != getUserConfig().getClientUserId() && !userBlocked && user_id != 333000 && user_id != 777000 && user_id != 42777) {
|
||||
otherItem.addSubItem(start_secret_chat, R.drawable.msg_start_secret, LocaleController.getString("StartEncryptedChat", R.string.StartEncryptedChat));
|
||||
otherItem.addSubItem(start_secret_chat, R.drawable.deproko_baseline_lock_24, LocaleController.getString("StartEncryptedChat", R.string.StartEncryptedChat));
|
||||
}
|
||||
} else if (chat_id != 0) {
|
||||
if (chat_id > 0) {
|
||||
|
@ -4392,18 +4405,19 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
if (!chat.megagroup && chatInfo != null && chatInfo.can_view_stats) {
|
||||
otherItem.addSubItem(statistics, R.drawable.msg_stats, LocaleController.getString("Statistics", R.string.Statistics));
|
||||
}
|
||||
if (!TextUtils.isEmpty(chat.username)) {
|
||||
otherItem.addSubItem(share, R.drawable.baseline_forward_24, LocaleController.getString("BotShare", R.string.BotShare));
|
||||
otherItem.addSubItem(qr_code, R.drawable.wallet_qr, LocaleController.getString("ShareQRCode", R.string.ShareQRCode));
|
||||
}
|
||||
if (chat.megagroup) {
|
||||
canSearchMembers = true;
|
||||
otherItem.addSubItem(search_members, R.drawable.msg_search, LocaleController.getString("SearchMembers", R.string.SearchMembers));
|
||||
otherItem.addSubItem(search_members, R.drawable.baseline_search_24, LocaleController.getString("SearchMembers", R.string.SearchMembers));
|
||||
if (!chat.creator && !chat.left && !chat.kicked) {
|
||||
otherItem.addSubItem(leave_group, R.drawable.msg_leave, LocaleController.getString("LeaveMegaMenu", R.string.LeaveMegaMenu));
|
||||
otherItem.addSubItem(leave_group, R.drawable.baseline_exit_to_app_24, LocaleController.getString("LeaveMegaMenu", R.string.LeaveMegaMenu));
|
||||
}
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(chat.username)) {
|
||||
otherItem.addSubItem(share, R.drawable.msg_share, LocaleController.getString("BotShare", R.string.BotShare));
|
||||
}
|
||||
if (!currentChat.creator && !currentChat.left && !currentChat.kicked) {
|
||||
otherItem.addSubItem(leave_group, R.drawable.msg_leave, LocaleController.getString("LeaveChannelMenu", R.string.LeaveChannelMenu));
|
||||
otherItem.addSubItem(leave_group, R.drawable.baseline_exit_to_app_24, LocaleController.getString("LeaveChannelMenu", R.string.LeaveChannelMenu));
|
||||
}
|
||||
}
|
||||
if (ChatObject.hasAdminRights(currentChat)) {
|
||||
|
@ -4413,14 +4427,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
editItemVisible = true;
|
||||
if (!ChatObject.isKickedFromChat(chat) && !ChatObject.isLeftFromChat(chat)) {
|
||||
canSearchMembers = true;
|
||||
otherItem.addSubItem(search_members, R.drawable.msg_search, LocaleController.getString("SearchMembers", R.string.SearchMembers));
|
||||
otherItem.addSubItem(search_members, R.drawable.baseline_search_24, LocaleController.getString("SearchMembers", R.string.SearchMembers));
|
||||
}
|
||||
otherItem.addSubItem(leave_group, R.drawable.msg_leave, LocaleController.getString("DeleteAndExit", R.string.DeleteAndExit));
|
||||
otherItem.addSubItem(leave_group, R.drawable.baseline_exit_to_app_24, LocaleController.getString("DeleteAndExit", R.string.DeleteAndExit));
|
||||
}
|
||||
}
|
||||
}
|
||||
otherItem.addSubItem(add_shortcut, R.drawable.msg_home, LocaleController.getString("AddShortcut", R.string.AddShortcut));
|
||||
otherItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, LocaleController.getString("SaveToGallery", R.string.SaveToGallery));
|
||||
otherItem.addSubItem(add_shortcut, R.drawable.baseline_home_24, LocaleController.getString("AddShortcut", R.string.AddShortcut));
|
||||
otherItem.addSubItem(gallery_menu_save, R.drawable.baseline_image_24, LocaleController.getString("SaveToGallery", R.string.SaveToGallery));
|
||||
if (!isPulledDown) {
|
||||
otherItem.hideSubItem(gallery_menu_save);
|
||||
}
|
||||
|
@ -4742,22 +4756,22 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
} else if (position == subscribersRow) {
|
||||
if (chatInfo != null) {
|
||||
if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) {
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers), String.format("%d", chatInfo.participants_count), R.drawable.actions_viewmembers, position != membersSectionRow - 1);
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers), String.format("%d", chatInfo.participants_count), R.drawable.baseline_group_24, position != membersSectionRow - 1);
|
||||
} else {
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelMembers", R.string.ChannelMembers), String.format("%d", chatInfo.participants_count), R.drawable.actions_viewmembers, position != membersSectionRow - 1);
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelMembers", R.string.ChannelMembers), String.format("%d", chatInfo.participants_count), R.drawable.baseline_group_24, position != membersSectionRow - 1);
|
||||
}
|
||||
} else {
|
||||
if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) {
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers), R.drawable.actions_viewmembers, position != membersSectionRow - 1);
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers), R.drawable.baseline_group_24, position != membersSectionRow - 1);
|
||||
} else {
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelMembers", R.string.ChannelMembers), R.drawable.actions_viewmembers, position != membersSectionRow - 1);
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelMembers", R.string.ChannelMembers), R.drawable.baseline_group_24, position != membersSectionRow - 1);
|
||||
}
|
||||
}
|
||||
} else if (position == administratorsRow) {
|
||||
if (chatInfo != null) {
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators), String.format("%d", chatInfo.admins_count), R.drawable.actions_addadmin, position != membersSectionRow - 1);
|
||||
textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators), String.format("%d", chatInfo.admins_count), R.drawable.baseline_stars_18, position != membersSectionRow - 1);
|
||||
} else {
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators), R.drawable.actions_addadmin, position != membersSectionRow - 1);
|
||||
textCell.setTextAndIcon(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators), R.drawable.baseline_stars_18, position != membersSectionRow - 1);
|
||||
}
|
||||
} else if (position == blockedUsersRow) {
|
||||
if (chatInfo != null) {
|
||||
|
@ -4767,7 +4781,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
} else if (position == addMemberRow) {
|
||||
textCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton);
|
||||
textCell.setTextAndIcon(LocaleController.getString("AddMember", R.string.AddMember), R.drawable.actions_addmember2, membersSectionRow == -1);
|
||||
textCell.setTextAndIcon(LocaleController.getString("AddMember", R.string.AddMember), R.drawable.baseline_person_add_24, membersSectionRow == -1);
|
||||
} else if (position == sendMessageRow) {
|
||||
textCell.setText(LocaleController.getString("SendMessageLocation", R.string.SendMessageLocation), true);
|
||||
} else if (position == reportRow) {
|
||||
|
@ -4951,7 +4965,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
onlineTextView[1].setTextColor(Theme.getColor((String) onlineTextViewTag));
|
||||
}
|
||||
if (lockIconDrawable != null) {
|
||||
lockIconDrawable.setColorFilter(Theme.getColor(Theme.key_chat_lockIcon), PorterDuff.Mode.MULTIPLY);
|
||||
lockIconDrawable.setColorFilter(Theme.getColor(Theme.key_chat_lockIcon), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
if (scamDrawable != null) {
|
||||
scamDrawable.setColor(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue));
|
||||
|
|
|
@ -66,6 +66,8 @@ import org.telegram.ui.Components.VideoPlayer;
|
|||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import tw.nekomimi.nekogram.NekoXConfig;
|
||||
|
||||
public class SecretMediaViewer implements NotificationCenter.NotificationCenterDelegate, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
|
||||
|
||||
private class FrameLayoutDrawer extends FrameLayout {
|
||||
|
@ -653,7 +655,9 @@ public class SecretMediaViewer implements NotificationCenter.NotificationCenterD
|
|||
} else {
|
||||
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
}
|
||||
if (!NekoXConfig.disableFlagSecure) {
|
||||
windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_SECURE;
|
||||
}
|
||||
centerImage.setParentView(containerView);
|
||||
centerImage.setForceCrossfade(true);
|
||||
}
|
||||
|
|
|
@ -8,11 +8,15 @@
|
|||
|
||||
package org.telegram.ui;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Canvas;
|
||||
import android.os.Build;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
|
@ -24,14 +28,30 @@ import android.widget.LinearLayout;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.collection.LongSparseArray;
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.ListUpdateCallback;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.internal.Streams;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MediaDataController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.SendMessagesHelper;
|
||||
import org.telegram.messenger.SharedConfig;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
|
@ -60,24 +80,30 @@ import org.telegram.ui.Components.TrendingStickersAlert;
|
|||
import org.telegram.ui.Components.TrendingStickersLayout;
|
||||
import org.telegram.ui.Components.URLSpanNoUnderline;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.collection.LongSparseArray;
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.ListUpdateCallback;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import kotlin.Unit;
|
||||
import tw.nekomimi.nekogram.BottomBuilder;
|
||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||
import tw.nekomimi.nekogram.utils.FileUtil;
|
||||
import tw.nekomimi.nekogram.utils.ShareUtil;
|
||||
import tw.nekomimi.nekogram.utils.StickersUtil;
|
||||
import tw.nekomimi.nekogram.utils.UIUtil;
|
||||
|
||||
public class StickersActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
||||
private static final int MENU_ARCHIVE = 0;
|
||||
private static final int MENU_DELETE = 1;
|
||||
private static final int MENU_EXPORT = 5;
|
||||
|
||||
|
||||
private RecyclerListView listView;
|
||||
private ListAdapter listAdapter;
|
||||
|
@ -88,6 +114,7 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
private NumberTextView selectedCountTextView;
|
||||
private TrendingStickersAlert trendingStickersAlert;
|
||||
|
||||
private ActionBarMenuItem exportMenuItem;
|
||||
private ActionBarMenuItem archiveMenuItem;
|
||||
private ActionBarMenuItem deleteMenuItem;
|
||||
|
||||
|
@ -166,6 +193,13 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
currentType = type;
|
||||
}
|
||||
|
||||
private File stickersFile;
|
||||
|
||||
public StickersActivity(File stickersFile) {
|
||||
this(MediaDataController.TYPE_IMAGE);
|
||||
this.stickersFile = stickersFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFragmentCreate() {
|
||||
super.onFragmentCreate();
|
||||
|
@ -189,6 +223,10 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.featuredStickersDidLoad);
|
||||
}
|
||||
|
||||
private int menu_other = 2;
|
||||
private int menu_export = 3;
|
||||
private int menu_import = 4;
|
||||
|
||||
@Override
|
||||
public View createView(Context context) {
|
||||
actionBar.setBackButtonDrawable(new BackDrawable(false));
|
||||
|
@ -205,7 +243,7 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
if (onBackPressed()) {
|
||||
finishFragment();
|
||||
}
|
||||
} else if (id == MENU_ARCHIVE || id == MENU_DELETE) {
|
||||
} else if (id == MENU_EXPORT || id == MENU_ARCHIVE || id == MENU_DELETE) {
|
||||
if (!needReorder) {
|
||||
if (activeReorderingRequests == 0) {
|
||||
listAdapter.processSelectionMenu(id);
|
||||
|
@ -213,10 +251,45 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
} else {
|
||||
sendReorder();
|
||||
}
|
||||
} else if (id == menu_export) {
|
||||
exportStickers();
|
||||
} else if (id == menu_import) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
getParentActivity().requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 4);
|
||||
return;
|
||||
}
|
||||
} catch (Throwable ignore) {
|
||||
}
|
||||
DocumentSelectActivity fragment = new DocumentSelectActivity(false);
|
||||
fragment.setMaxSelectedFiles(1);
|
||||
fragment.setAllowPhoto(false);
|
||||
fragment.setDelegate(new DocumentSelectActivity.DocumentSelectActivityDelegate() {
|
||||
@Override
|
||||
public void didSelectFiles(DocumentSelectActivity activity, ArrayList<String> files, String caption, boolean notify, int scheduleDate) {
|
||||
activity.finishFragment();
|
||||
processStickersFile(new File(files.get(0)), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void didSelectPhotos(ArrayList<SendMessagesHelper.SendingMediaInfo> photos, boolean notify, int scheduleDate) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startDocumentSelectActivity() {
|
||||
}
|
||||
});
|
||||
presentFragment(fragment);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ActionBarMenu menu = actionBar.createMenu();
|
||||
|
||||
ActionBarMenuItem otherItem = menu.addItem(menu_other, R.drawable.ic_ab_other);
|
||||
|
||||
otherItem.addSubItem(menu_export, R.drawable.baseline_file_download_24, LocaleController.getString("ExportStickers", R.string.ExportStickers));
|
||||
otherItem.addSubItem(menu_import, R.drawable.baseline_playlist_add_24, LocaleController.getString("ImportStickers", R.string.ImportStickers));
|
||||
|
||||
final ActionBarMenu actionMode = actionBar.createActionMode();
|
||||
selectedCountTextView = new NumberTextView(actionMode.getContext());
|
||||
|
@ -226,8 +299,9 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
actionMode.addView(selectedCountTextView, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 72, 0, 0, 0));
|
||||
selectedCountTextView.setOnTouchListener((v, event) -> true);
|
||||
|
||||
archiveMenuItem = actionMode.addItemWithWidth(MENU_ARCHIVE, R.drawable.msg_archive, AndroidUtilities.dp(54));
|
||||
deleteMenuItem = actionMode.addItemWithWidth(MENU_DELETE, R.drawable.msg_delete, AndroidUtilities.dp(54));
|
||||
exportMenuItem = actionMode.addItemWithWidth(MENU_EXPORT, R.drawable.baseline_file_download_24, AndroidUtilities.dp(54));
|
||||
archiveMenuItem = actionMode.addItemWithWidth(MENU_ARCHIVE, R.drawable.baseline_archive_24, AndroidUtilities.dp(54));
|
||||
deleteMenuItem = actionMode.addItemWithWidth(MENU_DELETE, R.drawable.baseline_delete_24, AndroidUtilities.dp(54));
|
||||
|
||||
listAdapter = new ListAdapter(context, MediaDataController.getInstance(currentAccount).getStickerSets(currentType));
|
||||
|
||||
|
@ -333,10 +407,175 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
});
|
||||
|
||||
if (stickersFile != null) {
|
||||
|
||||
processStickersFile(stickersFile, true);
|
||||
stickersFile = null;
|
||||
|
||||
}
|
||||
|
||||
return fragmentView;
|
||||
}
|
||||
|
||||
public void processStickersFile(File file, boolean exitOnFail) {
|
||||
|
||||
if (!file.isFile() || !file.getName().endsWith("nekox-stickers.json")) {
|
||||
|
||||
showError("not a stickers file", exitOnFail);
|
||||
|
||||
return;
|
||||
|
||||
} else if (file.length() > 3 * 1024 * 1024L) {
|
||||
|
||||
showError("file too large", exitOnFail);
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
AlertDialog pro = new AlertDialog(getParentActivity(), 1);
|
||||
pro.show();
|
||||
|
||||
UIUtil.runOnIoDispatcher(() -> {
|
||||
|
||||
JsonObject stickerObj = new Gson().fromJson(FileUtil.readUtf8String(file), JsonObject.class);
|
||||
|
||||
StickersUtil.importStickers(stickerObj, this, pro);
|
||||
|
||||
UIUtil.runOnUIThread(() -> {
|
||||
|
||||
pro.dismiss();
|
||||
|
||||
MediaDataController.getInstance(currentAccount).checkStickers(currentType);
|
||||
updateRows();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void showError(String msg, boolean exitOnFail) {
|
||||
|
||||
AlertUtil.showSimpleAlert(getParentActivity(), LocaleController.getString("InvalidStickersFile", R.string.InvalidStickersFile) + msg, (__) -> {
|
||||
|
||||
if (exitOnFail) finishFragment();
|
||||
|
||||
return Unit.INSTANCE;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void exportStickers() {
|
||||
|
||||
BottomBuilder builder = new BottomBuilder(getParentActivity());
|
||||
|
||||
builder.addTitle(LocaleController.getString("", R.string.ExportStickers), true);
|
||||
|
||||
AtomicBoolean exportSets = new AtomicBoolean(true);
|
||||
AtomicBoolean exportArchived = new AtomicBoolean(true);
|
||||
|
||||
final AtomicReference<TextView> exportButton = new AtomicReference<>();
|
||||
|
||||
builder.addCheckItems(new String[]{
|
||||
LocaleController.getString("StickerSets", R.string.StickerSets),
|
||||
LocaleController.getString("ArchivedStickers", R.string.ArchivedStickers)
|
||||
}, (__) -> true, false, (index, text, cell) -> {
|
||||
|
||||
boolean export;
|
||||
|
||||
switch (index) {
|
||||
|
||||
case 0: {
|
||||
|
||||
export = exportSets.get();
|
||||
exportSets.set(export = !export);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
default: {
|
||||
|
||||
export = exportArchived.get();
|
||||
exportArchived.set(export = !export);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
cell.setChecked(export);
|
||||
|
||||
if (!exportSets.get() && !exportArchived.get()) {
|
||||
|
||||
exportButton.get().setEnabled(false);
|
||||
|
||||
} else {
|
||||
|
||||
exportButton.get().setEnabled(true);
|
||||
|
||||
}
|
||||
|
||||
return Unit.INSTANCE;
|
||||
|
||||
});
|
||||
|
||||
builder.addCancelButton();
|
||||
|
||||
exportButton.set(builder.addButton(LocaleController.getString("Export", R.string.ExportStickers), (it) -> {
|
||||
|
||||
builder.dismiss();
|
||||
|
||||
exportStickersFinal(exportSets.get(), exportArchived.get());
|
||||
|
||||
return Unit.INSTANCE;
|
||||
|
||||
}));
|
||||
|
||||
builder.show();
|
||||
|
||||
}
|
||||
|
||||
public void exportStickersFinal(boolean exportSets, boolean exportArchived) {
|
||||
|
||||
AlertDialog pro = new AlertDialog(getParentActivity(), 3);
|
||||
|
||||
pro.setCanCacnel(false);
|
||||
|
||||
pro.show();
|
||||
|
||||
UIUtil.runOnIoDispatcher(() -> {
|
||||
|
||||
Activity ctx = getParentActivity();
|
||||
|
||||
JsonObject exportObj = StickersUtil.exportStickers(currentAccount, exportSets, exportArchived);
|
||||
|
||||
File cacheFile = new File(ApplicationLoader.applicationContext.getCacheDir(), new Date().toLocaleString() + ".nekox-stickers.json");
|
||||
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
JsonWriter jsonWriter = new JsonWriter(stringWriter);
|
||||
jsonWriter.setLenient(true);
|
||||
jsonWriter.setIndent(" ");
|
||||
try {
|
||||
Streams.write(exportObj, jsonWriter);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
FileUtil.writeUtf8String(stringWriter.toString(), cacheFile);
|
||||
|
||||
UIUtil.runOnUIThread(() -> {
|
||||
|
||||
pro.dismiss();
|
||||
|
||||
ShareUtil.shareFile(ctx, cacheFile);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBackPressed() {
|
||||
|
@ -558,7 +797,7 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
|
||||
private void processSelectionMenu(int which) {
|
||||
if (which == MENU_ARCHIVE || which == MENU_DELETE) {
|
||||
if (which == MENU_EXPORT || which == MENU_ARCHIVE || which == MENU_DELETE) {
|
||||
final ArrayList<TLRPC.StickerSet> stickerSetList = new ArrayList<>(selectedItems.size());
|
||||
|
||||
for (int i = 0, size = stickerSets.size(); i < size; i++) {
|
||||
|
@ -568,6 +807,38 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
}
|
||||
|
||||
if (which == MENU_EXPORT) {
|
||||
|
||||
AlertDialog pro = new AlertDialog(getParentActivity(), 3);
|
||||
pro.setCanCacnel(false);
|
||||
pro.show();
|
||||
|
||||
UIUtil.runOnIoDispatcher(() -> {
|
||||
|
||||
JsonObject exportObj = StickersUtil.exportStickers(stickerSetList);
|
||||
|
||||
File cacheFile = new File(ApplicationLoader.applicationContext.getCacheDir(), new Date().toLocaleString() + ".nekox-stickers.json");
|
||||
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
JsonWriter jsonWriter = new JsonWriter(stringWriter);
|
||||
jsonWriter.setLenient(true);
|
||||
jsonWriter.setIndent(" ");
|
||||
try {
|
||||
Streams.write(exportObj, jsonWriter);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
FileUtil.writeUtf8String(stringWriter.toString(), cacheFile);
|
||||
|
||||
UIUtil.runOnUIThread(() -> {
|
||||
pro.dismiss();
|
||||
ShareUtil.shareFile(getParentActivity(), cacheFile);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
final int count = stickerSetList.size();
|
||||
|
||||
switch (count) {
|
||||
|
@ -785,7 +1056,7 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
LocaleController.getString("StickersHide", R.string.StickersHide),
|
||||
LocaleController.getString("StickersReorder", R.string.StickersReorder)
|
||||
};
|
||||
icons = new int[]{R.drawable.msg_archive, R.drawable.msg_reorder};
|
||||
icons = new int[]{R.drawable.baseline_archive_24, R.drawable.msg_reorder};
|
||||
} else {
|
||||
options = new int[]{MENU_ARCHIVE, 3, 4, 2, MENU_DELETE};
|
||||
items = new CharSequence[]{
|
||||
|
@ -796,11 +1067,11 @@ public class StickersActivity extends BaseFragment implements NotificationCenter
|
|||
LocaleController.getString("StickersRemove", R.string.StickersRemove),
|
||||
};
|
||||
icons = new int[]{
|
||||
R.drawable.msg_archive,
|
||||
R.drawable.msg_link,
|
||||
R.drawable.baseline_archive_24,
|
||||
R.drawable.baseline_link_24,
|
||||
R.drawable.msg_reorder,
|
||||
R.drawable.msg_share,
|
||||
R.drawable.msg_delete
|
||||
R.drawable.baseline_forward_24,
|
||||
R.drawable.baseline_delete_24
|
||||
};
|
||||
}
|
||||
builder.setItems(items, icons, (dialog, which) -> processSelectionOption(options[which], stickerSet));
|
||||
|
|
|
@ -28,18 +28,21 @@ import android.widget.LinearLayout;
|
|||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.SRPHelper;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.messenger.browser.Browser;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.RequestDelegate;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.ui.ActionBar.ActionBar;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||
|
@ -58,9 +61,6 @@ import org.telegram.ui.Components.RecyclerListView;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import tw.nekomimi.nekogram.EditTextAutoFill;
|
||||
|
||||
public class TwoStepVerificationActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||
|
@ -120,6 +120,13 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
currentPassword = password;
|
||||
}
|
||||
|
||||
public TwoStepVerificationActivity(int account, TLRPC.TL_account_password password) {
|
||||
this(account);
|
||||
currentPassword = password;
|
||||
passwordEntered = currentPasswordHash != null && currentPasswordHash.length > 0 || !currentPassword.has_password;
|
||||
initPasswordNewAlgo(currentPassword);
|
||||
}
|
||||
|
||||
public void setCurrentPasswordParams(TLRPC.TL_account_password password, byte[] passwordHash, long secretId, byte[] secret) {
|
||||
currentPassword = password;
|
||||
currentPasswordHash = passwordHash;
|
||||
|
@ -270,9 +277,9 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
} else {
|
||||
timeString = LocaleController.formatPluralString("Minutes", time / 60);
|
||||
}
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
} else {
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), error.text);
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), error.text);
|
||||
}
|
||||
}
|
||||
}), ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagWithoutLogin);
|
||||
|
@ -384,7 +391,8 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
currentPassword = password;
|
||||
}
|
||||
|
||||
public void setDelegate(TwoStepVerificationActivityDelegate twoStepVerificationActivityDelegate) {
|
||||
public void setDelegate(TwoStepVerificationActivityDelegate
|
||||
twoStepVerificationActivityDelegate) {
|
||||
delegate = twoStepVerificationActivityDelegate;
|
||||
}
|
||||
|
||||
|
@ -638,9 +646,9 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
} else {
|
||||
timeString = LocaleController.formatPluralString("Minutes", time / 60);
|
||||
}
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
} else {
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), error.text);
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), error.text);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -656,7 +664,8 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
return null;
|
||||
}
|
||||
|
||||
private boolean checkSecretValues(byte[] passwordBytes, TLRPC.TL_account_passwordSettings passwordSettings) {
|
||||
private boolean checkSecretValues(byte[] passwordBytes, TLRPC.
|
||||
TL_account_passwordSettings passwordSettings) {
|
||||
if (passwordSettings.secure_settings != null) {
|
||||
currentSecret = passwordSettings.secure_settings.secure_secret;
|
||||
byte[] passwordHash;
|
||||
|
@ -777,9 +786,9 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
} else {
|
||||
timeString = LocaleController.formatPluralString("Minutes", time / 60);
|
||||
}
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), LocaleController.formatString("FloodWaitTime", R.string.FloodWaitTime, timeString));
|
||||
} else {
|
||||
showAlertWithText(LocaleController.getString("AppName", R.string.AppName), error.text);
|
||||
showAlertWithText(LocaleController.getString("NekoX", R.string.NekoX), error.text);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -892,6 +901,7 @@ public class TwoStepVerificationActivity extends BaseFragment implements Notific
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue
Block a user