mirror of
https://github.com/DrKLO/Telegram.git
synced 2024-12-22 14:35:03 +01:00
Update to 7.3.1 (2199)
This commit is contained in:
parent
d333b1f956
commit
d0e2266da1
22 changed files with 658 additions and 413 deletions
|
@ -290,7 +290,7 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
defaultConfig.versionCode = 2197
|
||||
defaultConfig.versionCode = 2199
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
variant.outputs.all { output ->
|
||||
|
@ -309,7 +309,7 @@ android {
|
|||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 29
|
||||
versionName "7.3.0"
|
||||
versionName "7.3.1"
|
||||
|
||||
vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ public class SQLitePreparedStatement {
|
|||
|
||||
public SQLitePreparedStatement(SQLiteDatabase db, String sql) throws SQLiteException {
|
||||
sqliteStatementHandle = prepare(db.getSQLiteHandle(), sql);
|
||||
if (BuildVars.DEBUG_VERSION) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
query = sql;
|
||||
startTime = SystemClock.elapsedRealtime();
|
||||
/*if (hashMap == null) {
|
||||
|
@ -101,7 +101,7 @@ public class SQLitePreparedStatement {
|
|||
if (isFinalized) {
|
||||
return;
|
||||
}
|
||||
if (BuildVars.DEBUG_VERSION) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
long diff = SystemClock.elapsedRealtime() - startTime;
|
||||
if (diff > 500) {
|
||||
FileLog.d("sqlite query " + query + " took " + diff + "ms");
|
||||
|
|
|
@ -3530,13 +3530,17 @@ public class AndroidUtilities {
|
|||
if ((flags & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) == 0) {
|
||||
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
|
||||
decorView.setSystemUiVisibility(flags);
|
||||
window.setStatusBarColor(0x0f000000);
|
||||
if (!SharedConfig.noStatusBar) {
|
||||
window.setStatusBarColor(0x0f000000);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((flags & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != 0) {
|
||||
flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
|
||||
decorView.setSystemUiVisibility(flags);
|
||||
window.setStatusBarColor(0x33000000);
|
||||
if (!SharedConfig.noStatusBar) {
|
||||
window.setStatusBarColor(0x33000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ public class BuildVars {
|
|||
public static boolean LOGS_ENABLED = false;
|
||||
public static boolean USE_CLOUD_STRINGS = true;
|
||||
public static boolean CHECK_UPDATES = true;
|
||||
public static int BUILD_VERSION = 2197;
|
||||
public static int BUILD_VERSION = 2199;
|
||||
public static String BUILD_VERSION_STRING = "7.3.0";
|
||||
public static int APP_ID = 4;
|
||||
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
|
||||
|
|
|
@ -13,7 +13,6 @@ import android.text.TextUtils;
|
|||
import android.util.SparseArray;
|
||||
|
||||
import org.telegram.messenger.voip.VoIPService;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -54,18 +53,23 @@ public class ChatObject {
|
|||
private String nextLoadOffset;
|
||||
public boolean membersLoadEndReached;
|
||||
public boolean loadingMembers;
|
||||
public int currentAccount;
|
||||
public boolean reloadingMembers;
|
||||
public AccountInstance currentAccount;
|
||||
public int speakingMembersCount;
|
||||
private Runnable typingUpdateRunnable = () -> {
|
||||
typingUpdateRunnableScheduled = false;
|
||||
checkOnlineParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallTypingsUpdated);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallTypingsUpdated);
|
||||
};
|
||||
private boolean typingUpdateRunnableScheduled;
|
||||
private int lastLoadGuid;
|
||||
private HashSet<Integer> loadingGuids = new HashSet<>();
|
||||
private ArrayList<TLRPC.TL_updateGroupCallParticipants> updatesQueue = new ArrayList<>();
|
||||
private long updatesStartWaitTime;
|
||||
|
||||
public void setCall(int account, int chatId, TLRPC.TL_phone_groupCall groupCall) {
|
||||
private Runnable checkQueueRunnable;
|
||||
|
||||
public void setCall(AccountInstance account, int chatId, TLRPC.TL_phone_groupCall groupCall) {
|
||||
this.chatId = chatId;
|
||||
currentAccount = account;
|
||||
call = groupCall.call;
|
||||
|
@ -85,19 +89,25 @@ public class ChatObject {
|
|||
public void migrateToChat(TLRPC.Chat chat) {
|
||||
chatId = chat.id;
|
||||
VoIPService voIPService = VoIPService.getSharedInstance();
|
||||
if (voIPService != null && voIPService.getAccount() == currentAccount && voIPService.getChat() != null && voIPService.getChat().id == -chatId) {
|
||||
if (voIPService != null && voIPService.getAccount() == currentAccount.getCurrentAccount() && voIPService.getChat() != null && voIPService.getChat().id == -chatId) {
|
||||
voIPService.migrateToChat(chat);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadMembers(boolean fromBegin) {
|
||||
if (fromBegin) {
|
||||
if (reloadingMembers) {
|
||||
return;
|
||||
}
|
||||
membersLoadEndReached = false;
|
||||
nextLoadOffset = null;
|
||||
}
|
||||
if (membersLoadEndReached) {
|
||||
return;
|
||||
}
|
||||
if (fromBegin) {
|
||||
reloadingMembers = true;
|
||||
}
|
||||
loadingMembers = true;
|
||||
TLRPC.TL_phone_getGroupParticipants req = new TLRPC.TL_phone_getGroupParticipants();
|
||||
req.call = new TLRPC.TL_inputGroupCall();
|
||||
|
@ -105,11 +115,14 @@ public class ChatObject {
|
|||
req.call.access_hash = call.access_hash;
|
||||
req.offset = nextLoadOffset != null ? nextLoadOffset : "";
|
||||
req.limit = 20;
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
currentAccount.getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
loadingMembers = false;
|
||||
if (fromBegin) {
|
||||
reloadingMembers = false;
|
||||
}
|
||||
if (response != null) {
|
||||
loadingMembers = false;
|
||||
TLRPC.TL_phone_groupParticipants groupParticipants = (TLRPC.TL_phone_groupParticipants) response;
|
||||
MessagesController.getInstance(currentAccount).putUsers(groupParticipants.users, false);
|
||||
currentAccount.getMessagesController().putUsers(groupParticipants.users, false);
|
||||
SparseArray<TLRPC.TL_groupCallParticipant> old = null;
|
||||
if (TextUtils.isEmpty(req.offset)) {
|
||||
if (participants.size() != 0) {
|
||||
|
@ -151,7 +164,7 @@ public class ChatObject {
|
|||
call.participants_count = participants.size();
|
||||
}
|
||||
sortParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
@ -181,59 +194,68 @@ public class ChatObject {
|
|||
}
|
||||
}
|
||||
if (participantsToLoad != null) {
|
||||
int guid = ++lastLoadGuid;
|
||||
loadingGuids.add(guid);
|
||||
TLRPC.TL_phone_getGroupParticipants req = new TLRPC.TL_phone_getGroupParticipants();
|
||||
req.call = new TLRPC.TL_inputGroupCall();
|
||||
req.call.id = call.id;
|
||||
req.call.access_hash = call.access_hash;
|
||||
req.ids = participantsToLoad;
|
||||
req.offset = "";
|
||||
req.limit = 100;
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
if (!loadingGuids.remove(guid)) {
|
||||
return;
|
||||
}
|
||||
if (response != null) {
|
||||
TLRPC.TL_phone_groupParticipants groupParticipants = (TLRPC.TL_phone_groupParticipants) response;
|
||||
MessagesController.getInstance(currentAccount).putUsers(groupParticipants.users, false);
|
||||
for (int a = 0, N = groupParticipants.participants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = groupParticipants.participants.get(a);
|
||||
TLRPC.TL_groupCallParticipant oldParticipant = participants.get(participant.user_id);
|
||||
if (oldParticipant != null) {
|
||||
sortedParticipants.remove(oldParticipant);
|
||||
participantsBySources.remove(oldParticipant.source);
|
||||
}
|
||||
participants.put(participant.user_id, participant);
|
||||
sortedParticipants.add(participant);
|
||||
participantsBySources.put(participant.source, participant);
|
||||
if (invitedUsersMap.contains(participant.user_id)) {
|
||||
Integer id = participant.user_id;
|
||||
invitedUsersMap.remove(id);
|
||||
invitedUsers.remove(id);
|
||||
}
|
||||
}
|
||||
if (call.participants_count < participants.size()) {
|
||||
call.participants_count = participants.size();
|
||||
}
|
||||
sortParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
}));
|
||||
loadUnknownParticipants(participantsToLoad, true);
|
||||
}
|
||||
if (updated) {
|
||||
sortParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadUnknownParticipants(ArrayList<Integer> participantsToLoad, boolean isIds) {
|
||||
int guid = ++lastLoadGuid;
|
||||
loadingGuids.add(guid);
|
||||
TLRPC.TL_phone_getGroupParticipants req = new TLRPC.TL_phone_getGroupParticipants();
|
||||
req.call = new TLRPC.TL_inputGroupCall();
|
||||
req.call.id = call.id;
|
||||
req.call.access_hash = call.access_hash;
|
||||
if (isIds) {
|
||||
req.ids = participantsToLoad;
|
||||
} else {
|
||||
req.sources = participantsToLoad;
|
||||
}
|
||||
req.offset = "";
|
||||
req.limit = 100;
|
||||
currentAccount.getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||
if (!loadingGuids.remove(guid)) {
|
||||
return;
|
||||
}
|
||||
if (response != null) {
|
||||
TLRPC.TL_phone_groupParticipants groupParticipants = (TLRPC.TL_phone_groupParticipants) response;
|
||||
currentAccount.getMessagesController().putUsers(groupParticipants.users, false);
|
||||
for (int a = 0, N = groupParticipants.participants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = groupParticipants.participants.get(a);
|
||||
TLRPC.TL_groupCallParticipant oldParticipant = participants.get(participant.user_id);
|
||||
if (oldParticipant != null) {
|
||||
sortedParticipants.remove(oldParticipant);
|
||||
participantsBySources.remove(oldParticipant.source);
|
||||
}
|
||||
participants.put(participant.user_id, participant);
|
||||
sortedParticipants.add(participant);
|
||||
participantsBySources.put(participant.source, participant);
|
||||
if (invitedUsersMap.contains(participant.user_id)) {
|
||||
Integer id = participant.user_id;
|
||||
invitedUsersMap.remove(id);
|
||||
invitedUsers.remove(id);
|
||||
}
|
||||
}
|
||||
if (call.participants_count < participants.size()) {
|
||||
call.participants_count = participants.size();
|
||||
}
|
||||
sortParticipants();
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public void processVoiceLevelsUpdate(int[] ssrc, float[] levels, boolean[] voice) {
|
||||
boolean updated = false;
|
||||
int currentTime = ConnectionsManager.getInstance(currentAccount).getCurrentTime();
|
||||
int currentTime = currentAccount.getConnectionsManager().getCurrentTime();
|
||||
ArrayList<Integer> participantsToLoad = null;
|
||||
for (int a = 0; a < ssrc.length; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant;
|
||||
if (ssrc[a] == 0) {
|
||||
participant = participants.get(UserConfig.getInstance(currentAccount).getClientUserId());
|
||||
participant = participants.get(currentAccount.getUserConfig().getClientUserId());
|
||||
} else {
|
||||
participant = participantsBySources.get(ssrc[a]);
|
||||
}
|
||||
|
@ -249,34 +271,123 @@ public class ChatObject {
|
|||
} else {
|
||||
participant.amplitude = 0;
|
||||
}
|
||||
} else {
|
||||
if (participantsToLoad == null) {
|
||||
participantsToLoad = new ArrayList<>();
|
||||
}
|
||||
participantsToLoad.add(ssrc[a]);
|
||||
}
|
||||
}
|
||||
if (participantsToLoad != null) {
|
||||
loadUnknownParticipants(participantsToLoad, false);
|
||||
}
|
||||
if (updated) {
|
||||
sortParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void processParticipantsUpdate(AccountInstance accountInstance, TLRPC.TL_updateGroupCallParticipants update) {
|
||||
boolean versioned = false;
|
||||
for (int a = 0, N = update.participants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = update.participants.get(a);
|
||||
if (participant.versioned) {
|
||||
versioned = true;
|
||||
break;
|
||||
private int isValidUpdate(TLRPC.TL_updateGroupCallParticipants update) {
|
||||
if (call.version + 1 == update.version || call.version == update.version) {
|
||||
return 0;
|
||||
} else if (call.version < update.version) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
private void processUpdatesQueue() {
|
||||
Collections.sort(updatesQueue, (updates, updates2) -> AndroidUtilities.compare(updates.version, updates2.version));
|
||||
if (updatesQueue != null && !updatesQueue.isEmpty()) {
|
||||
boolean anyProceed = false;
|
||||
for (int a = 0; a < updatesQueue.size(); a++) {
|
||||
TLRPC.TL_updateGroupCallParticipants update = updatesQueue.get(a);
|
||||
int updateState = isValidUpdate(update);
|
||||
if (updateState == 0) {
|
||||
processParticipantsUpdate(update, true);
|
||||
anyProceed = true;
|
||||
updatesQueue.remove(a);
|
||||
a--;
|
||||
} else if (updateState == 1) {
|
||||
if (updatesStartWaitTime != 0 && (anyProceed || Math.abs(System.currentTimeMillis() - updatesStartWaitTime) <= 1500)) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("HOLE IN GROUP CALL UPDATES QUEUE - will wait more time");
|
||||
}
|
||||
if (anyProceed) {
|
||||
updatesStartWaitTime = System.currentTimeMillis();
|
||||
}
|
||||
} else {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("HOLE IN GROUP CALL UPDATES QUEUE - reload participants");
|
||||
}
|
||||
updatesStartWaitTime = 0;
|
||||
updatesQueue.clear();
|
||||
nextLoadOffset = null;
|
||||
loadMembers(true);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
updatesQueue.remove(a);
|
||||
a--;
|
||||
}
|
||||
}
|
||||
updatesQueue.clear();
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("GROUP CALL UPDATES QUEUE PROCEED - OK");
|
||||
}
|
||||
}
|
||||
if (versioned && call.version + 1 < update.version) {
|
||||
nextLoadOffset = null;
|
||||
loadMembers(true);
|
||||
return;
|
||||
updatesStartWaitTime = 0;
|
||||
}
|
||||
|
||||
private void checkQueue() {
|
||||
checkQueueRunnable = null;
|
||||
if (updatesStartWaitTime != 0 && (System.currentTimeMillis() - updatesStartWaitTime) >= 1500) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("QUEUE GROUP CALL UPDATES WAIT TIMEOUT - CHECK QUEUE");
|
||||
}
|
||||
processUpdatesQueue();
|
||||
}
|
||||
if (update.version < call.version) {
|
||||
return;
|
||||
if (!updatesQueue.isEmpty()) {
|
||||
AndroidUtilities.runOnUIThread(checkQueueRunnable = this::checkQueue, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
public void processParticipantsUpdate(TLRPC.TL_updateGroupCallParticipants update, boolean fromQueue) {
|
||||
if (!fromQueue) {
|
||||
boolean versioned = false;
|
||||
for (int a = 0, N = update.participants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = update.participants.get(a);
|
||||
if (participant.versioned) {
|
||||
versioned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (versioned && call.version + 1 < update.version) {
|
||||
if (reloadingMembers || updatesStartWaitTime == 0 || Math.abs(System.currentTimeMillis() - updatesStartWaitTime) <= 1500) {
|
||||
if (updatesStartWaitTime == 0) {
|
||||
updatesStartWaitTime = System.currentTimeMillis();
|
||||
}
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("add TL_updateGroupCallParticipants to queue " + update.version);
|
||||
}
|
||||
updatesQueue.add(update);
|
||||
if (checkQueueRunnable == null) {
|
||||
AndroidUtilities.runOnUIThread(checkQueueRunnable = this::checkQueue, 1500);
|
||||
}
|
||||
} else {
|
||||
nextLoadOffset = null;
|
||||
loadMembers(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (versioned && update.version < call.version) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
boolean updated = false;
|
||||
boolean selfUpdated = false;
|
||||
int selfId = accountInstance.getUserConfig().getClientUserId();
|
||||
int selfId = currentAccount.getUserConfig().getClientUserId();
|
||||
for (int a = 0, N = update.participants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = update.participants.get(a);
|
||||
TLRPC.TL_groupCallParticipant oldParticipant = participants.get(participant.user_id);
|
||||
|
@ -320,7 +431,7 @@ public class ChatObject {
|
|||
participantsBySources.put(participant.source, participant);
|
||||
}
|
||||
if (participant.user_id == selfId && participant.active_date == 0) {
|
||||
participant.active_date = accountInstance.getConnectionsManager().getCurrentTime();
|
||||
participant.active_date = currentAccount.getConnectionsManager().getCurrentTime();
|
||||
}
|
||||
updated = true;
|
||||
}
|
||||
|
@ -330,13 +441,16 @@ public class ChatObject {
|
|||
}
|
||||
if (update.version > call.version) {
|
||||
call.version = update.version;
|
||||
if (!fromQueue) {
|
||||
processUpdatesQueue();
|
||||
}
|
||||
}
|
||||
if (call.participants_count < participants.size()) {
|
||||
call.participants_count = participants.size();
|
||||
}
|
||||
if (updated) {
|
||||
sortParticipants();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, selfUpdated);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, selfUpdated);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -346,7 +460,7 @@ public class ChatObject {
|
|||
loadMembers(true);
|
||||
}
|
||||
call = update.call;
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false);
|
||||
}
|
||||
|
||||
public TLRPC.TL_inputGroupCall getInputGroupCall() {
|
||||
|
@ -376,7 +490,7 @@ public class ChatObject {
|
|||
typingUpdateRunnableScheduled = false;
|
||||
}
|
||||
speakingMembersCount = 0;
|
||||
int currentTime = ConnectionsManager.getInstance(currentAccount).getCurrentTime();
|
||||
int currentTime = currentAccount.getConnectionsManager().getCurrentTime();
|
||||
int minDiff = Integer.MAX_VALUE;
|
||||
for (int a = 0, N = sortedParticipants.size(); a < N; a++) {
|
||||
TLRPC.TL_groupCallParticipant participant = sortedParticipants.get(a);
|
||||
|
|
|
@ -2724,7 +2724,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
putUsers(groupCall.users, false);
|
||||
|
||||
ChatObject.Call call = new ChatObject.Call();
|
||||
call.setCall(currentAccount, chatId, groupCall);
|
||||
call.setCall(getAccountInstance(), chatId, groupCall);
|
||||
groupCalls.put(groupCall.call.id, call);
|
||||
groupCallsByChatId.put(chatId, call);
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, groupCall.call.id, false);
|
||||
|
@ -4716,7 +4716,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
for (int a = 0; a < updatesQueueChannels.size(); a++) {
|
||||
int key = updatesQueueChannels.keyAt(a);
|
||||
long updatesStartWaitTime = updatesStartWaitTimeChannels.valueAt(a);
|
||||
if (updatesStartWaitTime + 1500 < currentTime) {
|
||||
if (Math.abs(currentTime - updatesStartWaitTime) >= 1500) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("QUEUE CHANNEL " + key + " UPDATES WAIT TIMEOUT - CHECK QUEUE");
|
||||
}
|
||||
|
@ -4726,7 +4726,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
|
||||
for (int a = 0; a < 3; a++) {
|
||||
if (getUpdatesStartTime(a) != 0 && getUpdatesStartTime(a) + 1500 < currentTime) {
|
||||
if (getUpdatesStartTime(a) != 0 && Math.abs(currentTime - getUpdatesStartTime(a)) >= 1500) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d(a + " QUEUE UPDATES WAIT TIMEOUT - CHECK QUEUE");
|
||||
}
|
||||
|
@ -5779,6 +5779,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("processLoadedMessages size " + messagesRes.messages.size() + " in chat " + dialogId + " count " + count + " max_id " + max_id + " cache " + isCache + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " isChannel " + isChannel + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer);
|
||||
}
|
||||
long startProcessTime = SystemClock.elapsedRealtime();
|
||||
boolean createDialog = false;
|
||||
if (messagesRes instanceof TLRPC.TL_messages_channelMessages) {
|
||||
int channelId = -(int) dialogId;
|
||||
|
@ -5897,10 +5898,13 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
final ArrayList<Integer> messagesToReload = new ArrayList<>();
|
||||
final HashMap<String, ArrayList<MessageObject>> webpagesToReload = new HashMap<>();
|
||||
TLRPC.InputChannel inputChannel = null;
|
||||
long fileProcessTime = 0;
|
||||
for (int a = 0; a < size; a++) {
|
||||
TLRPC.Message message = messagesRes.messages.get(a);
|
||||
message.dialog_id = dialogId;
|
||||
long checkFileTime = SystemClock.elapsedRealtime();
|
||||
MessageObject messageObject = new MessageObject(currentAccount, message, usersDict, chatsDict, true, true);
|
||||
fileProcessTime += (SystemClock.elapsedRealtime() - checkFileTime);
|
||||
messageObject.scheduled = mode == 1;
|
||||
objects.add(messageObject);
|
||||
if (isCache) {
|
||||
|
@ -5925,6 +5929,9 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
}
|
||||
}
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("process time = " + (SystemClock.elapsedRealtime() - startProcessTime) + " file time = " + fileProcessTime + " for dialog = " + dialogId);
|
||||
}
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
putUsers(messagesRes.users, isCache);
|
||||
putChats(messagesRes.chats, isCache);
|
||||
|
@ -7230,7 +7237,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (newMsg == null && oldMsg.isSent() || newMsg != null && newMsg.messageOwner.date > oldMsg.messageOwner.date) {
|
||||
if (newMsg == null && oldMsg.getId() > 0 || newMsg != null && newMsg.messageOwner.date > oldMsg.messageOwner.date) {
|
||||
dialogs_dict.put(key, value);
|
||||
dialogMessage.put(key, newMsg);
|
||||
if (oldMsg.messageOwner.peer_id.channel_id == 0) {
|
||||
|
@ -12435,7 +12442,7 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
TLRPC.TL_updateGroupCallParticipants update = (TLRPC.TL_updateGroupCallParticipants) baseUpdate;
|
||||
ChatObject.Call call = groupCalls.get(update.call.id);
|
||||
if (call != null) {
|
||||
call.processParticipantsUpdate(getAccountInstance(), update);
|
||||
call.processParticipantsUpdate(update, false);
|
||||
}
|
||||
if (VoIPService.getSharedInstance() != null) {
|
||||
VoIPService.getSharedInstance().onGroupCallParticipantsUpdate(update);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
package org.telegram.messenger;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.SystemClock;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
|
@ -6016,6 +6017,7 @@ public class MessagesStorage extends BaseController {
|
|||
boolean isEnd = false;
|
||||
int num = dialogId == 777000 ? 10 : 1;
|
||||
int messagesCount = 0;
|
||||
long startLoadTime = SystemClock.elapsedRealtime();
|
||||
try {
|
||||
ArrayList<Integer> usersToLoad = new ArrayList<>();
|
||||
ArrayList<Integer> chatsToLoad = new ArrayList<>();
|
||||
|
@ -6698,6 +6700,9 @@ public class MessagesStorage extends BaseController {
|
|||
res.users.clear();
|
||||
FileLog.e(e);
|
||||
}
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("messages load time = " + (SystemClock.elapsedRealtime() - startLoadTime) + " for dialog = " + dialogId);
|
||||
}
|
||||
int countQueryFinal = count_query;
|
||||
int maxIdOverrideFinal = max_id_override;
|
||||
int minUnreadIdFinal = min_unread_id;
|
||||
|
@ -8514,7 +8519,7 @@ public class MessagesStorage extends BaseController {
|
|||
});
|
||||
}
|
||||
|
||||
private long[] updateMessageStateAndIdInternal(long random_id, Integer _oldId, int newId, int date, int channelId, int scheduled) {
|
||||
private long[] updateMessageStateAndIdInternal(long random_id, Long _oldId, int newId, int date, int channelId, int scheduled) {
|
||||
SQLiteCursor cursor = null;
|
||||
long oldMessageId;
|
||||
long newMessageId = newId;
|
||||
|
@ -8523,7 +8528,7 @@ public class MessagesStorage extends BaseController {
|
|||
try {
|
||||
cursor = database.queryFinalized(String.format(Locale.US, "SELECT mid FROM randoms WHERE random_id = %d LIMIT 1", random_id));
|
||||
if (cursor.next()) {
|
||||
_oldId = cursor.intValue(0);
|
||||
_oldId = cursor.longValue(0);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
|
@ -8535,12 +8540,49 @@ public class MessagesStorage extends BaseController {
|
|||
if (_oldId == null) {
|
||||
return null;
|
||||
}
|
||||
if (channelId == 0) {
|
||||
channelId = (int) (_oldId >> 32);
|
||||
}
|
||||
}
|
||||
oldMessageId = _oldId;
|
||||
if (channelId != 0) {
|
||||
oldMessageId |= ((long) channelId) << 32;
|
||||
newMessageId |= ((long) channelId) << 32;
|
||||
}
|
||||
if (_oldId < 0 && scheduled == 1) {
|
||||
SQLitePreparedStatement state = null;
|
||||
try {
|
||||
state = database.executeFast("UPDATE randoms SET mid = ? WHERE random_id = ? and mid = ?");
|
||||
state.bindLong(1, newMessageId);
|
||||
state.bindLong(2, random_id);
|
||||
state.bindLong(3, oldMessageId);
|
||||
state.step();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
} finally {
|
||||
if (state != null) {
|
||||
state.dispose();
|
||||
}
|
||||
}
|
||||
} else if (_oldId > 0) {
|
||||
TLRPC.TL_updateDeleteScheduledMessages update = new TLRPC.TL_updateDeleteScheduledMessages();
|
||||
update.messages.add((int) oldMessageId);
|
||||
if (channelId != 0) {
|
||||
update.peer = new TLRPC.TL_peerChannel();
|
||||
update.peer.channel_id = channelId;
|
||||
} else {
|
||||
update.peer = new TLRPC.TL_peerUser();
|
||||
}
|
||||
TLRPC.TL_updates updates = new TLRPC.TL_updates();
|
||||
updates.updates.add(update);
|
||||
Utilities.stageQueue.postRunnable(() -> getMessagesController().processUpdates(updates, false));
|
||||
try {
|
||||
database.executeFast(String.format(Locale.US, "DELETE FROM randoms WHERE random_id = %d AND mid = %d", random_id, _oldId)).stepThis().dispose();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
long did = 0;
|
||||
if (scheduled == -1 || scheduled == 0) {
|
||||
|
@ -8671,7 +8713,7 @@ public class MessagesStorage extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
public long[] updateMessageStateAndId(final long random_id, final Integer _oldId, final int newId, final int date, boolean useQueue, final int channelId, int scheduled) {
|
||||
public long[] updateMessageStateAndId(final long random_id, final Long _oldId, final int newId, final int date, boolean useQueue, final int channelId, int scheduled) {
|
||||
if (useQueue) {
|
||||
storageQueue.postRunnable(() -> updateMessageStateAndIdInternal(random_id, _oldId, newId, date, channelId, scheduled));
|
||||
} else {
|
||||
|
|
|
@ -2559,7 +2559,7 @@ public class NotificationsController extends BaseController {
|
|||
return;
|
||||
}
|
||||
notificationsQueue.postRunnable(() -> {
|
||||
if (Math.abs(System.currentTimeMillis() - lastSoundPlay) <= 500) {
|
||||
if (Math.abs(SystemClock.elapsedRealtime() - lastSoundPlay) <= 500) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
@ -2804,20 +2804,54 @@ public class NotificationsController extends BaseController {
|
|||
protected void ensureGroupsCreated() {
|
||||
SharedPreferences preferences = getAccountInstance().getNotificationsSettings();
|
||||
if (groupsCreated == null) {
|
||||
groupsCreated = preferences.getBoolean("groupsCreated", false);
|
||||
groupsCreated = preferences.getBoolean("groupsCreated4", false);
|
||||
}
|
||||
if (!groupsCreated) {
|
||||
try {
|
||||
String keyStart = currentAccount + "channel";
|
||||
List<NotificationChannel> list = systemNotificationManager.getNotificationChannels();
|
||||
int count = list.size();
|
||||
SharedPreferences.Editor editor = null;
|
||||
for (int a = 0; a < count; a++) {
|
||||
NotificationChannel channel = list.get(a);
|
||||
String id = channel.getId();
|
||||
if (id.startsWith(keyStart)) {
|
||||
int importance = channel.getImportance();
|
||||
if (importance != NotificationManager.IMPORTANCE_HIGH && importance != NotificationManager.IMPORTANCE_MAX) { //TODO remove after some time, 7.3.0 bug fix
|
||||
if (id.contains("_ia_")) {
|
||||
//do nothing
|
||||
} else if (id.contains("_channels_")) {
|
||||
if (editor == null) {
|
||||
editor = getAccountInstance().getNotificationsSettings().edit();
|
||||
}
|
||||
editor.remove("priority_channel").remove("vibrate_channel").remove("ChannelSoundPath").remove("ChannelSound");
|
||||
} else if (id.contains("_groups_")) {
|
||||
if (editor == null) {
|
||||
editor = getAccountInstance().getNotificationsSettings().edit();
|
||||
}
|
||||
editor.remove("priority_group").remove("vibrate_group").remove("GroupSoundPath").remove("GroupSound");
|
||||
} else if (id.contains("_private_")) {
|
||||
if (editor == null) {
|
||||
editor = getAccountInstance().getNotificationsSettings().edit();
|
||||
}
|
||||
editor.remove("priority_messages");
|
||||
editor.remove("priority_group").remove("vibrate_messages").remove("GlobalSoundPath").remove("GlobalSound");
|
||||
} else {
|
||||
long dialogId = Utilities.parseLong(id.substring(9, id.indexOf('_', 9)));
|
||||
if (dialogId != 0) {
|
||||
if (editor == null) {
|
||||
editor = getAccountInstance().getNotificationsSettings().edit();
|
||||
}
|
||||
editor.remove("priority_" + dialogId).remove("vibrate_" + dialogId).remove("sound_path_" + dialogId).remove("sound_" + dialogId);
|
||||
}
|
||||
}
|
||||
}
|
||||
systemNotificationManager.deleteNotificationChannel(id);
|
||||
}
|
||||
}
|
||||
if (editor != null) {
|
||||
editor.commit();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
@ -2831,13 +2865,15 @@ public class NotificationsController extends BaseController {
|
|||
} else {
|
||||
userName = "";
|
||||
}
|
||||
|
||||
systemNotificationManager.createNotificationChannelGroups(Arrays.asList(
|
||||
new NotificationChannelGroup("channels" + currentAccount, LocaleController.getString("NotificationsChannels", R.string.NotificationsChannels) + userName),
|
||||
new NotificationChannelGroup("groups" + currentAccount, LocaleController.getString("NotificationsGroups", R.string.NotificationsGroups) + userName),
|
||||
new NotificationChannelGroup("private" + currentAccount, LocaleController.getString("NotificationsPrivateChats", R.string.NotificationsPrivateChats) + userName),
|
||||
new NotificationChannelGroup("other" + currentAccount, LocaleController.getString("NotificationsOther", R.string.NotificationsOther) + userName)
|
||||
));
|
||||
preferences.edit().putBoolean("groupsCreated", true).commit();
|
||||
|
||||
preferences.edit().putBoolean("groupsCreated4", true).commit();
|
||||
groupsCreated = true;
|
||||
}
|
||||
}
|
||||
|
@ -2888,184 +2924,192 @@ public class NotificationsController extends BaseController {
|
|||
StringBuilder newSettings = new StringBuilder();
|
||||
String newSettingsHash = null;
|
||||
|
||||
if (!isSilent && channelId != null) {
|
||||
if (channelId != null) {
|
||||
NotificationChannel existingChannel = systemNotificationManager.getNotificationChannel(channelId);
|
||||
if (existingChannel != null) {
|
||||
int channelImportance = existingChannel.getImportance();
|
||||
Uri channelSound = existingChannel.getSound();
|
||||
long[] channelVibrationPattern = existingChannel.getVibrationPattern();
|
||||
int channelLedColor = existingChannel.getLightColor();
|
||||
if (channelVibrationPattern != null) {
|
||||
for (int a = 0; a < channelVibrationPattern.length; a++) {
|
||||
newSettings.append(channelVibrationPattern[a]);
|
||||
if (!isSilent) {
|
||||
int channelImportance = existingChannel.getImportance();
|
||||
Uri channelSound = existingChannel.getSound();
|
||||
long[] channelVibrationPattern = existingChannel.getVibrationPattern();
|
||||
boolean vibrate = existingChannel.shouldVibrate();
|
||||
if (!vibrate && channelVibrationPattern == null) {
|
||||
channelVibrationPattern = new long[]{0, 0};
|
||||
}
|
||||
}
|
||||
newSettings.append(channelLedColor);
|
||||
if (channelSound != null) {
|
||||
newSettings.append(channelSound.toString());
|
||||
}
|
||||
newSettings.append(channelImportance);
|
||||
if (secretChat) {
|
||||
newSettings.append("secret");
|
||||
}
|
||||
newSettingsHash = Utilities.MD5(newSettings.toString());
|
||||
newSettings.setLength(0);
|
||||
if (!settings.equals(newSettingsHash)) {
|
||||
SharedPreferences.Editor editor = null;
|
||||
if (channelImportance == NotificationManager.IMPORTANCE_NONE) {
|
||||
editor = preferences.edit();
|
||||
if (isDefault) {
|
||||
if (!isInApp) {
|
||||
editor.putInt(getGlobalNotificationsKey(type), Integer.MAX_VALUE);
|
||||
updateServerNotificationsSettings(type);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("notify2_" + dialogId, 2);
|
||||
updateServerNotificationsSettings(dialogId, true);
|
||||
int channelLedColor = existingChannel.getLightColor();
|
||||
if (channelVibrationPattern != null) {
|
||||
for (int a = 0; a < channelVibrationPattern.length; a++) {
|
||||
newSettings.append(channelVibrationPattern[a]);
|
||||
}
|
||||
edited = true;
|
||||
} else if (channelImportance != importance) {
|
||||
if (!isInApp) {
|
||||
}
|
||||
newSettings.append(channelLedColor);
|
||||
if (channelSound != null) {
|
||||
newSettings.append(channelSound.toString());
|
||||
}
|
||||
newSettings.append(channelImportance);
|
||||
if (!isDefault && secretChat) {
|
||||
newSettings.append("secret");
|
||||
}
|
||||
newSettingsHash = Utilities.MD5(newSettings.toString());
|
||||
newSettings.setLength(0);
|
||||
if (!newSettingsHash.equals(settings)) {
|
||||
SharedPreferences.Editor editor = null;
|
||||
if (channelImportance == NotificationManager.IMPORTANCE_NONE) {
|
||||
editor = preferences.edit();
|
||||
int priority;
|
||||
if (channelImportance == NotificationManager.IMPORTANCE_HIGH || channelImportance == NotificationManager.IMPORTANCE_MAX) {
|
||||
priority = 1;
|
||||
} else if (channelImportance == NotificationManager.IMPORTANCE_MIN) {
|
||||
priority = 4;
|
||||
} else if (channelImportance == NotificationManager.IMPORTANCE_LOW) {
|
||||
priority = 5;
|
||||
} else {
|
||||
priority = 0;
|
||||
}
|
||||
if (isDefault) {
|
||||
editor.putInt(getGlobalNotificationsKey(type), 0).commit();
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putInt("priority_channel", priority);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putInt("priority_group", priority);
|
||||
} else {
|
||||
editor.putInt("priority_messages", priority);
|
||||
if (!isInApp) {
|
||||
editor.putInt(getGlobalNotificationsKey(type), Integer.MAX_VALUE);
|
||||
updateServerNotificationsSettings(type);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("notify2_" + dialogId, 0);
|
||||
editor.remove("notifyuntil_" + dialogId);
|
||||
editor.putInt("priority_" + dialogId, priority);
|
||||
editor.putInt("notify2_" + dialogId, 2);
|
||||
updateServerNotificationsSettings(dialogId, true);
|
||||
}
|
||||
}
|
||||
edited = true;
|
||||
}
|
||||
if (channelSound == null && sound != null || channelSound != null && (sound == null || !TextUtils.equals(channelSound.toString(), sound.toString()))) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
edited = true;
|
||||
} else if (channelImportance != importance) {
|
||||
if (!isInApp) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
String newSound;
|
||||
if (channelSound == null) {
|
||||
newSound = "NoSound";
|
||||
int priority;
|
||||
if (channelImportance == NotificationManager.IMPORTANCE_HIGH || channelImportance == NotificationManager.IMPORTANCE_MAX) {
|
||||
priority = 1;
|
||||
} else if (channelImportance == NotificationManager.IMPORTANCE_MIN) {
|
||||
priority = 4;
|
||||
} else if (channelImportance == NotificationManager.IMPORTANCE_LOW) {
|
||||
priority = 5;
|
||||
} else {
|
||||
priority = 0;
|
||||
}
|
||||
if (isDefault) {
|
||||
editor.putInt(getGlobalNotificationsKey(type), 0).commit();
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putString("ChannelSound", "NoSound");
|
||||
editor.putInt("priority_channel", priority);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putString("GroupSound", "NoSound");
|
||||
editor.putInt("priority_group", priority);
|
||||
} else {
|
||||
editor.putString("GlobalSound", "NoSound");
|
||||
editor.putInt("priority_messages", priority);
|
||||
}
|
||||
} else {
|
||||
editor.putString("sound_" + dialogId, "NoSound");
|
||||
editor.putInt("notify2_" + dialogId, 0);
|
||||
editor.remove("notifyuntil_" + dialogId);
|
||||
editor.putInt("priority_" + dialogId, priority);
|
||||
}
|
||||
} else {
|
||||
newSound = channelSound.toString();
|
||||
Ringtone rng = RingtoneManager.getRingtone(ApplicationLoader.applicationContext, channelSound);
|
||||
String ringtoneName = null;
|
||||
if (rng != null) {
|
||||
if (channelSound.equals(Settings.System.DEFAULT_RINGTONE_URI)) {
|
||||
ringtoneName = LocaleController.getString("DefaultRingtone", R.string.DefaultRingtone);
|
||||
} else {
|
||||
ringtoneName = rng.getTitle(ApplicationLoader.applicationContext);
|
||||
}
|
||||
rng.stop();
|
||||
}
|
||||
edited = true;
|
||||
}
|
||||
if (channelSound == null && sound != null || channelSound != null && (sound == null || !TextUtils.equals(channelSound.toString(), sound.toString()))) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
if (ringtoneName != null) {
|
||||
String newSound;
|
||||
if (channelSound == null) {
|
||||
newSound = "NoSound";
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putString("ChannelSound", ringtoneName);
|
||||
editor.putString("ChannelSound", "NoSound");
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putString("GroupSound", ringtoneName);
|
||||
editor.putString("GroupSound", "NoSound");
|
||||
} else {
|
||||
editor.putString("GlobalSound", ringtoneName);
|
||||
editor.putString("GlobalSound", "NoSound");
|
||||
}
|
||||
} else {
|
||||
editor.putString("sound_" + dialogId, ringtoneName);
|
||||
editor.putString("sound_" + dialogId, "NoSound");
|
||||
}
|
||||
} else {
|
||||
newSound = channelSound.toString();
|
||||
Ringtone rng = RingtoneManager.getRingtone(ApplicationLoader.applicationContext, channelSound);
|
||||
String ringtoneName = null;
|
||||
if (rng != null) {
|
||||
if (channelSound.equals(Settings.System.DEFAULT_RINGTONE_URI)) {
|
||||
ringtoneName = LocaleController.getString("DefaultRingtone", R.string.DefaultRingtone);
|
||||
} else {
|
||||
ringtoneName = rng.getTitle(ApplicationLoader.applicationContext);
|
||||
}
|
||||
rng.stop();
|
||||
}
|
||||
if (ringtoneName != null) {
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putString("ChannelSound", ringtoneName);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putString("GroupSound", ringtoneName);
|
||||
} else {
|
||||
editor.putString("GlobalSound", ringtoneName);
|
||||
}
|
||||
} else {
|
||||
editor.putString("sound_" + dialogId, ringtoneName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putString("ChannelSoundPath", newSound);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putString("GroupSoundPath", newSound);
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putString("ChannelSoundPath", newSound);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putString("GroupSoundPath", newSound);
|
||||
} else {
|
||||
editor.putString("GlobalSoundPath", newSound);
|
||||
}
|
||||
} else {
|
||||
editor.putString("GlobalSoundPath", newSound);
|
||||
editor.putString("sound_path_" + dialogId, newSound);
|
||||
}
|
||||
} else {
|
||||
editor.putString("sound_path_" + dialogId, newSound);
|
||||
}
|
||||
sound = channelSound;
|
||||
edited = true;
|
||||
}
|
||||
sound = channelSound;
|
||||
edited = true;
|
||||
}
|
||||
boolean vibrate = existingChannel.shouldVibrate();
|
||||
boolean hasVibration = !isEmptyVibration(vibrationPattern);
|
||||
if (hasVibration != vibrate) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putInt("vibrate_channel", vibrate ? 0 : 2);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putInt("vibrate_group", vibrate ? 0 : 2);
|
||||
boolean hasVibration = !isEmptyVibration(vibrationPattern);
|
||||
if (hasVibration != vibrate) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putInt("vibrate_channel", vibrate ? 0 : 2);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putInt("vibrate_group", vibrate ? 0 : 2);
|
||||
} else {
|
||||
editor.putInt("vibrate_messages", vibrate ? 0 : 2);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("vibrate_messages", vibrate ? 0 : 2);
|
||||
editor.putInt("vibrate_" + dialogId, vibrate ? 0 : 2);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("vibrate_" + dialogId, vibrate ? 0 : 2);
|
||||
}
|
||||
vibrationPattern = channelVibrationPattern;
|
||||
edited = true;
|
||||
}
|
||||
vibrationPattern = new long[]{};
|
||||
edited = true;
|
||||
}
|
||||
if (channelLedColor != ledColor) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putInt("ChannelLed", channelLedColor);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putInt("GroupLed", channelLedColor);
|
||||
if (channelLedColor != ledColor) {
|
||||
if (!isInApp) {
|
||||
if (editor == null) {
|
||||
editor = preferences.edit();
|
||||
}
|
||||
if (isDefault) {
|
||||
if (type == TYPE_CHANNEL) {
|
||||
editor.putInt("ChannelLed", channelLedColor);
|
||||
} else if (type == TYPE_GROUP) {
|
||||
editor.putInt("GroupLed", channelLedColor);
|
||||
} else {
|
||||
editor.putInt("MessagesLed", channelLedColor);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("MessagesLed", channelLedColor);
|
||||
editor.putInt("color_" + dialogId, channelLedColor);
|
||||
}
|
||||
} else {
|
||||
editor.putInt("color_" + dialogId, channelLedColor);
|
||||
}
|
||||
ledColor = channelLedColor;
|
||||
edited = true;
|
||||
}
|
||||
if (editor != null) {
|
||||
editor.commit();
|
||||
}
|
||||
ledColor = channelLedColor;
|
||||
edited = true;
|
||||
}
|
||||
if (editor != null) {
|
||||
editor.commit();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
channelId = null;
|
||||
settings = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (edited && newSettingsHash != null) {
|
||||
preferences.edit().putString(key, channelId).putString(key + "_s", newSettingsHash).commit();
|
||||
} else if (!isInApp || !isDefault) {
|
||||
} else if (newSettingsHash == null || !isInApp || !isDefault) {
|
||||
for (int a = 0; a < vibrationPattern.length; a++) {
|
||||
newSettings.append(vibrationPattern[a]);
|
||||
}
|
||||
|
@ -3074,12 +3118,12 @@ public class NotificationsController extends BaseController {
|
|||
newSettings.append(sound.toString());
|
||||
}
|
||||
newSettings.append(importance);
|
||||
if (secretChat) {
|
||||
if (!isDefault && secretChat) {
|
||||
newSettings.append("secret");
|
||||
}
|
||||
newSettingsHash = Utilities.MD5(newSettings.toString());
|
||||
|
||||
if (channelId != null && !settings.equals(newSettingsHash)) {
|
||||
if (!isSilent && channelId != null && !settings.equals(newSettingsHash)) {
|
||||
systemNotificationManager.deleteNotificationChannel(channelId);
|
||||
channelId = null;
|
||||
}
|
||||
|
@ -3174,7 +3218,113 @@ public class NotificationsController extends BaseController {
|
|||
} else {
|
||||
value = notifyOverride != 2;
|
||||
}
|
||||
if (!notifyAboutLast || !value) {
|
||||
|
||||
String name;
|
||||
String chatName;
|
||||
boolean replace = true;
|
||||
if (((chat_id != 0 && chat == null) || user == null) && lastMessageObject.isFcmMessage()) {
|
||||
chatName = lastMessageObject.localName;
|
||||
} else if (chat != null) {
|
||||
chatName = chat.title;
|
||||
} else {
|
||||
chatName = UserObject.getUserName(user);
|
||||
}
|
||||
boolean passcode = AndroidUtilities.needShowPasscode() || SharedConfig.isWaitingForPasscodeEnter;
|
||||
if ((int) dialog_id == 0 || pushDialogs.size() > 1 || passcode) {
|
||||
if (passcode) {
|
||||
if (chat_id != 0) {
|
||||
name = LocaleController.getString("NotificationHiddenChatName", R.string.NotificationHiddenChatName);
|
||||
} else {
|
||||
name = LocaleController.getString("NotificationHiddenName", R.string.NotificationHiddenName);
|
||||
}
|
||||
} else {
|
||||
name = LocaleController.getString("AppName", R.string.AppName);
|
||||
}
|
||||
replace = false;
|
||||
} else {
|
||||
name = chatName;
|
||||
}
|
||||
|
||||
String detailText;
|
||||
if (UserConfig.getActivatedAccountsCount() > 1) {
|
||||
if (pushDialogs.size() == 1) {
|
||||
detailText = UserObject.getFirstName(getUserConfig().getCurrentUser());
|
||||
} else {
|
||||
detailText = UserObject.getFirstName(getUserConfig().getCurrentUser()) + "・";
|
||||
}
|
||||
} else {
|
||||
detailText = "";
|
||||
}
|
||||
if (pushDialogs.size() != 1 || Build.VERSION.SDK_INT < 23) {
|
||||
if (pushDialogs.size() == 1) {
|
||||
detailText += LocaleController.formatPluralString("NewMessages", total_unread_count);
|
||||
} else {
|
||||
detailText += LocaleController.formatString("NotificationMessagesPeopleDisplayOrder", R.string.NotificationMessagesPeopleDisplayOrder, LocaleController.formatPluralString("NewMessages", total_unread_count), LocaleController.formatPluralString("FromChats", pushDialogs.size()));
|
||||
}
|
||||
}
|
||||
|
||||
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ApplicationLoader.applicationContext);
|
||||
|
||||
int silent = 2;
|
||||
String lastMessage = null;
|
||||
boolean hasNewMessages = false;
|
||||
if (pushMessages.size() == 1) {
|
||||
MessageObject messageObject = pushMessages.get(0);
|
||||
boolean[] text = new boolean[1];
|
||||
String message = lastMessage = getStringForMessage(messageObject, false, text, null);
|
||||
silent = messageObject.messageOwner.silent ? 1 : 0;
|
||||
if (message == null) {
|
||||
return;
|
||||
}
|
||||
if (replace) {
|
||||
if (chat != null) {
|
||||
message = message.replace(" @ " + name, "");
|
||||
} else {
|
||||
if (text[0]) {
|
||||
message = message.replace(name + ": ", "");
|
||||
} else {
|
||||
message = message.replace(name + " ", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
mBuilder.setContentText(message);
|
||||
mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
|
||||
} else {
|
||||
mBuilder.setContentText(detailText);
|
||||
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
|
||||
inboxStyle.setBigContentTitle(name);
|
||||
int count = Math.min(10, pushMessages.size());
|
||||
boolean[] text = new boolean[1];
|
||||
for (int i = 0; i < count; i++) {
|
||||
MessageObject messageObject = pushMessages.get(i);
|
||||
String message = getStringForMessage(messageObject, false, text, null);
|
||||
if (message == null || messageObject.messageOwner.date <= dismissDate) {
|
||||
continue;
|
||||
}
|
||||
if (silent == 2) {
|
||||
lastMessage = message;
|
||||
silent = messageObject.messageOwner.silent ? 1 : 0;
|
||||
}
|
||||
if (pushDialogs.size() == 1) {
|
||||
if (replace) {
|
||||
if (chat != null) {
|
||||
message = message.replace(" @ " + name, "");
|
||||
} else {
|
||||
if (text[0]) {
|
||||
message = message.replace(name + ": ", "");
|
||||
} else {
|
||||
message = message.replace(name + " ", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
inboxStyle.addLine(message);
|
||||
}
|
||||
inboxStyle.setSummaryText(detailText);
|
||||
mBuilder.setStyle(inboxStyle);
|
||||
}
|
||||
|
||||
if (!notifyAboutLast || !value || MediaController.getInstance().isRecordingAudio() || silent == 1) {
|
||||
notifyDisabled = true;
|
||||
}
|
||||
|
||||
|
@ -3191,16 +3341,16 @@ public class NotificationsController extends BaseController {
|
|||
if (notifyMaxCount != 0) {
|
||||
Point dialogInfo = smartNotificationsDialogs.get(dialog_id);
|
||||
if (dialogInfo == null) {
|
||||
dialogInfo = new Point(1, (int) (System.currentTimeMillis() / 1000));
|
||||
dialogInfo = new Point(1, (int) (SystemClock.elapsedRealtime() / 1000));
|
||||
smartNotificationsDialogs.put(dialog_id, dialogInfo);
|
||||
} else {
|
||||
int lastTime = dialogInfo.y;
|
||||
if (lastTime + notifyDelay < System.currentTimeMillis() / 1000) {
|
||||
dialogInfo.set(1, (int) (System.currentTimeMillis() / 1000));
|
||||
if (lastTime + notifyDelay < SystemClock.elapsedRealtime() / 1000) {
|
||||
dialogInfo.set(1, (int) (SystemClock.elapsedRealtime() / 1000));
|
||||
} else {
|
||||
int count = dialogInfo.x;
|
||||
if (count < notifyMaxCount) {
|
||||
dialogInfo.set(count + 1, (int) (System.currentTimeMillis() / 1000));
|
||||
dialogInfo.set(count + 1, (int) (SystemClock.elapsedRealtime() / 1000));
|
||||
} else {
|
||||
notifyDisabled = true;
|
||||
}
|
||||
|
@ -3342,52 +3492,7 @@ public class NotificationsController extends BaseController {
|
|||
intent.putExtra("currentAccount", currentAccount);
|
||||
PendingIntent contentIntent = PendingIntent.getActivity(ApplicationLoader.applicationContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);
|
||||
|
||||
String name;
|
||||
String chatName;
|
||||
boolean replace = true;
|
||||
if (((chat_id != 0 && chat == null) || user == null) && lastMessageObject.isFcmMessage()) {
|
||||
chatName = lastMessageObject.localName;
|
||||
} else if (chat != null) {
|
||||
chatName = chat.title;
|
||||
} else {
|
||||
chatName = UserObject.getUserName(user);
|
||||
}
|
||||
boolean passcode = AndroidUtilities.needShowPasscode() || SharedConfig.isWaitingForPasscodeEnter;
|
||||
if ((int) dialog_id == 0 || pushDialogs.size() > 1 || passcode) {
|
||||
if (passcode) {
|
||||
if (chat_id != 0) {
|
||||
name = LocaleController.getString("NotificationHiddenChatName", R.string.NotificationHiddenChatName);
|
||||
} else {
|
||||
name = LocaleController.getString("NotificationHiddenName", R.string.NotificationHiddenName);
|
||||
}
|
||||
} else {
|
||||
name = LocaleController.getString("AppName", R.string.AppName);
|
||||
}
|
||||
replace = false;
|
||||
} else {
|
||||
name = chatName;
|
||||
}
|
||||
|
||||
String detailText;
|
||||
if (UserConfig.getActivatedAccountsCount() > 1) {
|
||||
if (pushDialogs.size() == 1) {
|
||||
detailText = UserObject.getFirstName(getUserConfig().getCurrentUser());
|
||||
} else {
|
||||
detailText = UserObject.getFirstName(getUserConfig().getCurrentUser()) + "・";
|
||||
}
|
||||
} else {
|
||||
detailText = "";
|
||||
}
|
||||
if (pushDialogs.size() != 1 || Build.VERSION.SDK_INT < 23) {
|
||||
if (pushDialogs.size() == 1) {
|
||||
detailText += LocaleController.formatPluralString("NewMessages", total_unread_count);
|
||||
} else {
|
||||
detailText += LocaleController.formatString("NotificationMessagesPeopleDisplayOrder", R.string.NotificationMessagesPeopleDisplayOrder, LocaleController.formatPluralString("NewMessages", total_unread_count), LocaleController.formatPluralString("FromChats", pushDialogs.size()));
|
||||
}
|
||||
}
|
||||
|
||||
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ApplicationLoader.applicationContext)
|
||||
.setContentTitle(name)
|
||||
mBuilder.setContentTitle(name)
|
||||
.setSmallIcon(R.drawable.notification)
|
||||
.setAutoCancel(true)
|
||||
.setNumber(total_unread_count)
|
||||
|
@ -3406,65 +3511,6 @@ public class NotificationsController extends BaseController {
|
|||
mBuilder.addPerson("tel:+" + user.phone);
|
||||
}
|
||||
|
||||
int silent = 2;
|
||||
String lastMessage = null;
|
||||
boolean hasNewMessages = false;
|
||||
if (pushMessages.size() == 1) {
|
||||
MessageObject messageObject = pushMessages.get(0);
|
||||
boolean[] text = new boolean[1];
|
||||
String message = lastMessage = getStringForMessage(messageObject, false, text, null);
|
||||
silent = messageObject.messageOwner.silent ? 1 : 0;
|
||||
if (message == null) {
|
||||
return;
|
||||
}
|
||||
if (replace) {
|
||||
if (chat != null) {
|
||||
message = message.replace(" @ " + name, "");
|
||||
} else {
|
||||
if (text[0]) {
|
||||
message = message.replace(name + ": ", "");
|
||||
} else {
|
||||
message = message.replace(name + " ", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
mBuilder.setContentText(message);
|
||||
mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
|
||||
} else {
|
||||
mBuilder.setContentText(detailText);
|
||||
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
|
||||
inboxStyle.setBigContentTitle(name);
|
||||
int count = Math.min(10, pushMessages.size());
|
||||
boolean[] text = new boolean[1];
|
||||
for (int i = 0; i < count; i++) {
|
||||
MessageObject messageObject = pushMessages.get(i);
|
||||
String message = getStringForMessage(messageObject, false, text, null);
|
||||
if (message == null || messageObject.messageOwner.date <= dismissDate) {
|
||||
continue;
|
||||
}
|
||||
if (silent == 2) {
|
||||
lastMessage = message;
|
||||
silent = messageObject.messageOwner.silent ? 1 : 0;
|
||||
}
|
||||
if (pushDialogs.size() == 1) {
|
||||
if (replace) {
|
||||
if (chat != null) {
|
||||
message = message.replace(" @ " + name, "");
|
||||
} else {
|
||||
if (text[0]) {
|
||||
message = message.replace(name + ": ", "");
|
||||
} else {
|
||||
message = message.replace(name + " ", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
inboxStyle.addLine(message);
|
||||
}
|
||||
inboxStyle.setSummaryText(detailText);
|
||||
mBuilder.setStyle(inboxStyle);
|
||||
}
|
||||
|
||||
Intent dismissIntent = new Intent(ApplicationLoader.applicationContext, NotificationDismissReceiver.class);
|
||||
dismissIntent.putExtra("messageDate", lastMessageObject.messageOwner.date);
|
||||
dismissIntent.putExtra("currentAccount", currentAccount);
|
||||
|
@ -3529,29 +3575,27 @@ public class NotificationsController extends BaseController {
|
|||
}
|
||||
mBuilder.setTicker(lastMessage);
|
||||
}
|
||||
if (!MediaController.getInstance().isRecordingAudio()) {
|
||||
if (soundPath != null && !soundPath.equals("NoSound")) {
|
||||
if (Build.VERSION.SDK_INT >= 26) {
|
||||
if (soundPath.equals(defaultPath)) {
|
||||
sound = Settings.System.DEFAULT_NOTIFICATION_URI;
|
||||
} else {
|
||||
sound = Uri.parse(soundPath);
|
||||
}
|
||||
if (soundPath != null && !soundPath.equals("NoSound")) {
|
||||
if (Build.VERSION.SDK_INT >= 26) {
|
||||
if (soundPath.equals(defaultPath)) {
|
||||
sound = Settings.System.DEFAULT_NOTIFICATION_URI;
|
||||
} else {
|
||||
if (soundPath.equals(defaultPath)) {
|
||||
mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, AudioManager.STREAM_NOTIFICATION);
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= 24 && soundPath.startsWith("file://") && !AndroidUtilities.isInternalUri(Uri.parse(soundPath))) {
|
||||
try {
|
||||
Uri uri = FileProvider.getUriForFile(ApplicationLoader.applicationContext, BuildConfig.APPLICATION_ID + ".provider", new File(soundPath.replace("file://", "")));
|
||||
ApplicationLoader.applicationContext.grantUriPermission("com.android.systemui", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
mBuilder.setSound(uri, AudioManager.STREAM_NOTIFICATION);
|
||||
} catch (Exception e) {
|
||||
mBuilder.setSound(Uri.parse(soundPath), AudioManager.STREAM_NOTIFICATION);
|
||||
}
|
||||
} else {
|
||||
sound = Uri.parse(soundPath);
|
||||
}
|
||||
} else {
|
||||
if (soundPath.equals(defaultPath)) {
|
||||
mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, AudioManager.STREAM_NOTIFICATION);
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= 24 && soundPath.startsWith("file://") && !AndroidUtilities.isInternalUri(Uri.parse(soundPath))) {
|
||||
try {
|
||||
Uri uri = FileProvider.getUriForFile(ApplicationLoader.applicationContext, BuildConfig.APPLICATION_ID + ".provider", new File(soundPath.replace("file://", "")));
|
||||
ApplicationLoader.applicationContext.grantUriPermission("com.android.systemui", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
mBuilder.setSound(uri, AudioManager.STREAM_NOTIFICATION);
|
||||
} catch (Exception e) {
|
||||
mBuilder.setSound(Uri.parse(soundPath), AudioManager.STREAM_NOTIFICATION);
|
||||
}
|
||||
} else {
|
||||
mBuilder.setSound(Uri.parse(soundPath), AudioManager.STREAM_NOTIFICATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3559,7 +3603,7 @@ public class NotificationsController extends BaseController {
|
|||
if (ledColor != 0) {
|
||||
mBuilder.setLights(ledColor, 1000, 1000);
|
||||
}
|
||||
if (vibrate == 2 || MediaController.getInstance().isRecordingAudio()) {
|
||||
if (vibrate == 2) {
|
||||
mBuilder.setVibrate(vibrationPattern = new long[]{0, 0});
|
||||
} else if (vibrate == 1) {
|
||||
mBuilder.setVibrate(vibrationPattern = new long[]{0, 100, 0, 100});
|
||||
|
@ -3609,7 +3653,7 @@ public class NotificationsController extends BaseController {
|
|||
if (Build.VERSION.SDK_INT >= 26) {
|
||||
mBuilder.setChannelId(validateChannelId(dialog_id, chatName, vibrationPattern, ledColor, sound, configImportance, isDefault, isInApp, notifyDisabled, chatType));
|
||||
}
|
||||
showExtraNotifications(mBuilder, notifyAboutLast, detailText);
|
||||
showExtraNotifications(mBuilder, detailText);
|
||||
scheduleNotificationRepeat();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
|
@ -3626,7 +3670,7 @@ public class NotificationsController extends BaseController {
|
|||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
private void showExtraNotifications(NotificationCompat.Builder notificationBuilder, boolean notifyAboutLast, String summary) {
|
||||
private void showExtraNotifications(NotificationCompat.Builder notificationBuilder, String summary) {
|
||||
Notification mainNotification = notificationBuilder.build();
|
||||
if (Build.VERSION.SDK_INT < 18) {
|
||||
notificationManager.notify(notificationId, mainNotification);
|
||||
|
@ -4337,10 +4381,10 @@ public class NotificationsController extends BaseController {
|
|||
}
|
||||
notificationsQueue.postRunnable(() -> {
|
||||
try {
|
||||
if (Math.abs(System.currentTimeMillis() - lastSoundOutPlay) <= 100) {
|
||||
if (Math.abs(SystemClock.elapsedRealtime() - lastSoundOutPlay) <= 100) {
|
||||
return;
|
||||
}
|
||||
lastSoundOutPlay = System.currentTimeMillis();
|
||||
lastSoundOutPlay = SystemClock.elapsedRealtime();
|
||||
if (soundPool == null) {
|
||||
soundPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 0);
|
||||
soundPool.setOnLoadCompleteListener((soundPool, sampleId, status) -> {
|
||||
|
|
|
@ -763,7 +763,7 @@ public class SecretChatHelper extends BaseController {
|
|||
if (isSecretInvisibleMessage(newMsgObj)) {
|
||||
res.date = 0;
|
||||
}
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, newMsgObj.id, newMsgObj.id, res.date, false, 0, 0);
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, (long) newMsgObj.id, newMsgObj.id, res.date, false, 0, 0);
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
newMsgObj.send_state = MessageObject.MESSAGE_SEND_STATE_SENT;
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.messageReceivedByServer, newMsgObj.id, newMsgObj.id, newMsgObj, newMsgObj.dialog_id, 0L, existFlags, false);
|
||||
|
|
|
@ -1648,7 +1648,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
|
|||
});
|
||||
} else {
|
||||
getMessagesStorage().getStorageQueue().postRunnable(() -> {
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj1.random_id, oldId, newMsgObj1.id, 0, false, peer_id.channel_id, scheduleDate != 0 ? 1 : 0);
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj1.random_id, (long) oldId, newMsgObj1.id, 0, false, peer_id.channel_id, scheduleDate != 0 ? 1 : 0);
|
||||
getMessagesStorage().putMessages(sentMessages, true, false, false, 0, scheduleDate != 0);
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
newMsgObj1.send_state = MessageObject.MESSAGE_SEND_STATE_SENT;
|
||||
|
@ -4616,7 +4616,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
|
|||
newMsgObj.send_state = MessageObject.MESSAGE_SEND_STATE_SENT;
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, newMsgObj.id, newMsgObj, newMsgObj.dialog_id, grouped_id, existFlags, scheduled);
|
||||
getMessagesStorage().getStorageQueue().postRunnable(() -> {
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, oldId, newMsgObj.id, 0, false, newMsgObj.peer_id.channel_id, scheduled ? 1 : 0);
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, (long) oldId, newMsgObj.id, 0, false, newMsgObj.peer_id.channel_id, scheduled ? 1 : 0);
|
||||
getMessagesStorage().putMessages(sentMessages, true, false, false, 0, scheduled);
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
getMediaDataController().increasePeerRaiting(newMsgObj.dialog_id);
|
||||
|
@ -4918,7 +4918,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
|
|||
} else {
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, newMsgObj.id, newMsgObj, newMsgObj.dialog_id, 0L, existFlags, scheduled);
|
||||
getMessagesStorage().getStorageQueue().postRunnable(() -> {
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, oldId, newMsgObj.id, 0, false, newMsgObj.peer_id.channel_id, scheduled ? 1 : 0);
|
||||
getMessagesStorage().updateMessageStateAndId(newMsgObj.random_id, (long) oldId, newMsgObj.id, 0, false, newMsgObj.peer_id.channel_id, scheduled ? 1 : 0);
|
||||
getMessagesStorage().putMessages(sentMessages, true, false, false, 0, scheduled);
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
getMediaDataController().increasePeerRaiting(newMsgObj.dialog_id);
|
||||
|
|
|
@ -94,6 +94,7 @@ public class SharedConfig {
|
|||
public static boolean saveStreamMedia = true;
|
||||
public static boolean smoothKeyboard = true;
|
||||
public static boolean pauseMusicOnRecord = true;
|
||||
public static boolean noStatusBar;
|
||||
public static boolean sortContactsByName;
|
||||
public static boolean sortFilesByName;
|
||||
public static boolean shuffleMusic;
|
||||
|
@ -278,6 +279,7 @@ public class SharedConfig {
|
|||
devicePerformanceClass = preferences.getInt("devicePerformanceClass", -1);
|
||||
loopStickers = preferences.getBoolean("loopStickers", true);
|
||||
keepMedia = preferences.getInt("keep_media", 2);
|
||||
noStatusBar = preferences.getBoolean("noStatusBar", false);
|
||||
lastKeepMediaCheckTime = preferences.getInt("lastKeepMediaCheckTime", 0);
|
||||
searchMessagesAsListHintShows = preferences.getInt("searchMessagesAsListHintShows", 0);
|
||||
searchMessagesAsListUsed = preferences.getBoolean("searchMessagesAsListUsed", false);
|
||||
|
@ -541,6 +543,14 @@ public class SharedConfig {
|
|||
editor.commit();
|
||||
}
|
||||
|
||||
public static void toggleNoStatusBar() {
|
||||
noStatusBar = !noStatusBar;
|
||||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putBoolean("noStatusBar", noStatusBar);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public static void toggleLoopStickers() {
|
||||
loopStickers = !loopStickers;
|
||||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||
|
|
|
@ -35,6 +35,7 @@ import android.widget.Toast;
|
|||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.telegram.messenger.AccountInstance;
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.BuildVars;
|
||||
|
@ -860,32 +861,6 @@ public class VoIPService extends VoIPBaseService {
|
|||
req.reason = new TLRPC.TL_phoneCallDiscardReasonHangup();
|
||||
break;
|
||||
}
|
||||
final boolean wasNotConnected = ConnectionsManager.getInstance(currentAccount).getConnectionState() != ConnectionsManager.ConnectionStateConnected;
|
||||
final Runnable stopper;
|
||||
if (wasNotConnected) {
|
||||
if (onDone != null) {
|
||||
onDone.run();
|
||||
}
|
||||
callEnded();
|
||||
stopper = null;
|
||||
} else {
|
||||
stopper = new Runnable() {
|
||||
private boolean done = false;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (done) {
|
||||
return;
|
||||
}
|
||||
done = true;
|
||||
if (onDone != null) {
|
||||
onDone.run();
|
||||
}
|
||||
callEnded();
|
||||
}
|
||||
};
|
||||
AndroidUtilities.runOnUIThread(stopper, (int) (Instance.getGlobalServerConfig().hangupUiTimeout * 1000));
|
||||
}
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
|
||||
if (error != null) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
|
@ -900,13 +875,9 @@ public class VoIPService extends VoIPBaseService {
|
|||
FileLog.d("phone.discardCall " + response);
|
||||
}
|
||||
}
|
||||
if (!wasNotConnected) {
|
||||
AndroidUtilities.cancelRunOnUIThread(stopper);
|
||||
if (onDone != null) {
|
||||
onDone.run();
|
||||
}
|
||||
}
|
||||
}, ConnectionsManager.RequestFlagFailOnServerErrors);
|
||||
onDestroyRunnable = onDone;
|
||||
callEnded();
|
||||
}
|
||||
|
||||
public void onSignalingData(TLRPC.TL_updatePhoneCallSignalingData data) {
|
||||
|
@ -1222,7 +1193,7 @@ public class VoIPService extends VoIPBaseService {
|
|||
groupCall.call.version = 1;
|
||||
groupCall.call.can_change_join_muted = true;
|
||||
groupCall.chatId = chat.id;
|
||||
groupCall.currentAccount = currentAccount;
|
||||
groupCall.currentAccount = AccountInstance.getInstance(currentAccount);
|
||||
|
||||
dispatchStateChanged(STATE_CREATING);
|
||||
TLRPC.TL_phone_createGroupCall req = new TLRPC.TL_phone_createGroupCall();
|
||||
|
|
|
@ -132,7 +132,7 @@ public class DialogsAdapter extends RecyclerListView.SelectionAdapter {
|
|||
public int getItemCount() {
|
||||
ArrayList<TLRPC.Dialog> array = DialogsActivity.getDialogsArray(currentAccount, dialogsType, folderId, dialogsListFrozen);
|
||||
int dialogsCount = array.size();
|
||||
if (dialogsType != 7 && dialogsType != 8 && dialogsCount == 0 && (folderId != 0 || MessagesController.getInstance(currentAccount).isLoadingDialogs(folderId))) {
|
||||
if (dialogsType != 7 && dialogsType != 8 && dialogsCount == 0 && (folderId != 0 || MessagesController.getInstance(currentAccount).isLoadingDialogs(folderId) || !MessagesController.getInstance(currentAccount).isDialogsEndReached(folderId))) {
|
||||
onlineContacts = null;
|
||||
if (folderId == 1 && showArchiveHint) {
|
||||
return (currentCount = 2);
|
||||
|
|
|
@ -4847,7 +4847,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
|||
maxPhotoWidth = photoWidth = (int) (AndroidUtilities.getMinTabletSide() * 0.7f);
|
||||
} else {
|
||||
if (currentPhotoObject != null && (messageObject.type == MessageObject.TYPE_PHOTO || messageObject.type == MessageObject.TYPE_VIDEO || messageObject.type == 8) && currentPhotoObject.w >= currentPhotoObject.h) {
|
||||
maxPhotoWidth = photoWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(64);
|
||||
maxPhotoWidth = photoWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp((drawAvatar ? 116 : 64) + (checkNeedDrawShareButton(messageObject) ? 10 : 0));
|
||||
useFullWidth = true;
|
||||
} else {
|
||||
maxPhotoWidth = photoWidth = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.7f);
|
||||
|
|
|
@ -841,7 +841,12 @@ public class DialogCell extends BaseCell {
|
|||
startPadding = statusDrawable.getIntrinsicWidth() + AndroidUtilities.dp(3);
|
||||
}
|
||||
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
|
||||
spannableStringBuilder.append(" ").append(TextUtils.replace(printingString, new String[]{"..."}, new String[]{""})).setSpan(new FixedWidthSpan(startPadding), 0, 1, 0);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && LocaleController.isRTL && (int) currentDialogId < 0) {
|
||||
spannableStringBuilder.append(TextUtils.replace(printingString, new String[]{"..."}, new String[]{""})).append(" ");
|
||||
spannableStringBuilder.setSpan(new FixedWidthSpan(startPadding), spannableStringBuilder.length() - 1, spannableStringBuilder.length(), 0);
|
||||
} else {
|
||||
spannableStringBuilder.append(" ").append(TextUtils.replace(printingString, new String[]{"..."}, new String[]{""})).setSpan(new FixedWidthSpan(startPadding), 0, 1, 0);
|
||||
}
|
||||
messageString = spannableStringBuilder;
|
||||
currentMessagePaint = Theme.dialogs_messagePrintingPaint[paintIndex];
|
||||
checkMessage = false;
|
||||
|
@ -2430,7 +2435,7 @@ public class DialogCell extends BaseCell {
|
|||
StatusDrawable statusDrawable = Theme.getChatStatusDrawable(printingStringType);
|
||||
if (statusDrawable != null) {
|
||||
canvas.save();
|
||||
int left = (LocaleController.isRTL || messageLayout.isRtlCharAt(0)) ? messageLeft + messageLayout.getWidth() - statusDrawable.getIntrinsicWidth() : messageLeft;
|
||||
int left = (LocaleController.isRTL || messageLayout.isRtlCharAt(0)) ? getMeasuredWidth() - AndroidUtilities.dp(72) - statusDrawable.getIntrinsicWidth() : messageLeft;
|
||||
if (printingStringType == 1 || printingStringType == 4) {
|
||||
canvas.translate(left, messageTop + (printingStringType == 1 ? AndroidUtilities.dp(1) : 0));
|
||||
} else {
|
||||
|
|
|
@ -117,6 +117,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
private int animationIndex = -1;
|
||||
|
||||
boolean checkCallAfterAnimation;
|
||||
boolean checkPlayerAfterAnimation;
|
||||
|
||||
@Override
|
||||
public void onAudioSettingsChanged() {
|
||||
|
@ -773,7 +774,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
|
||||
if (VoIPService.getSharedInstance() != null && !VoIPService.getSharedInstance().isHangingUp() && VoIPService.getSharedInstance().getCallState() != VoIPService.STATE_WAITING_INCOMING && !GroupCallPip.isShowing()) {
|
||||
checkCall(true);
|
||||
} else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && !GroupCallPip.isShowing()) {
|
||||
} else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && !GroupCallPip.isShowing() && !isPlayingVoice()) {
|
||||
checkCall(true);
|
||||
} else {
|
||||
checkPlayer(true);
|
||||
|
@ -821,7 +822,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
}
|
||||
}
|
||||
} else if (id == NotificationCenter.messagePlayingDidStart || id == NotificationCenter.messagePlayingPlayStateChanged || id == NotificationCenter.messagePlayingDidReset || id == NotificationCenter.didEndCall) {
|
||||
if (currentStyle == 3) {
|
||||
if (currentStyle == 3 || currentStyle == 4) {
|
||||
checkCall(false);
|
||||
}
|
||||
checkPlayer(false);
|
||||
|
@ -1080,7 +1081,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
}
|
||||
|
||||
private void checkPlayer(boolean create) {
|
||||
if (visible && (currentStyle == 3 || currentStyle == 4)) {
|
||||
if (visible && (currentStyle == 3 || currentStyle == 4 && !isPlayingVoice())) {
|
||||
return;
|
||||
}
|
||||
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
|
||||
|
@ -1093,7 +1094,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
if (messageObject == null || messageObject.getId() == 0 || messageObject.isVideo()) {
|
||||
lastMessageObject = null;
|
||||
boolean callAvailable = supportsCalls && VoIPService.getSharedInstance() != null && !VoIPService.getSharedInstance().isHangingUp() && VoIPService.getSharedInstance().getCallState() != VoIPService.STATE_WAITING_INCOMING && !GroupCallPip.isShowing();
|
||||
if (!callAvailable && fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && !GroupCallPip.isShowing()) {
|
||||
if (!isPlayingVoice() && !callAvailable && fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && !GroupCallPip.isShowing()) {
|
||||
callAvailable = true;
|
||||
}
|
||||
if (callAvailable) {
|
||||
|
@ -1131,7 +1132,11 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
animatorSet = null;
|
||||
if (checkCallAfterAnimation) {
|
||||
checkCall(false);
|
||||
} else if (checkPlayerAfterAnimation) {
|
||||
checkPlayer(false);
|
||||
}
|
||||
checkCallAfterAnimation = false;
|
||||
checkPlayerAfterAnimation = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1141,6 +1146,10 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
setVisibility(View.GONE);
|
||||
}
|
||||
} else {
|
||||
if (currentStyle != 0 && animatorSet != null && !create) {
|
||||
checkPlayerAfterAnimation = true;
|
||||
return;
|
||||
}
|
||||
int prevStyle = currentStyle;
|
||||
updateStyle(0);
|
||||
if (create && topPadding == 0) {
|
||||
|
@ -1180,7 +1189,11 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
animatorSet = null;
|
||||
if (checkCallAfterAnimation) {
|
||||
checkCall(false);
|
||||
} else if (checkPlayerAfterAnimation) {
|
||||
checkPlayer(false);
|
||||
}
|
||||
checkCallAfterAnimation = false;
|
||||
checkPlayerAfterAnimation = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1235,6 +1248,11 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isPlayingVoice() {
|
||||
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
|
||||
return messageObject != null && messageObject.isVoice();
|
||||
}
|
||||
|
||||
public void checkCall(boolean create) {
|
||||
View fragmentView = fragment.getFragmentView();
|
||||
if (!create && fragmentView != null) {
|
||||
|
@ -1253,7 +1271,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
callAvailable = false;
|
||||
}
|
||||
groupActive = false;
|
||||
if (!GroupCallActivity.groupCallUiVisible && supportsCalls && !callAvailable && fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null) {
|
||||
if (!isPlayingVoice() && !GroupCallActivity.groupCallUiVisible && supportsCalls && !callAvailable && fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null) {
|
||||
callAvailable = true;
|
||||
groupActive = true;
|
||||
}
|
||||
|
@ -1287,13 +1305,17 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
animatorSet = null;
|
||||
if (checkCallAfterAnimation) {
|
||||
checkCall(false);
|
||||
} else if (checkPlayerAfterAnimation) {
|
||||
checkPlayer(false);
|
||||
}
|
||||
checkCallAfterAnimation = false;
|
||||
checkPlayerAfterAnimation = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
animatorSet.start();
|
||||
}
|
||||
} else if (currentStyle == -1 || currentStyle == 4 || currentStyle == 3){
|
||||
} else if (currentStyle == -1 || currentStyle == 4 || currentStyle == 3) {
|
||||
visible = false;
|
||||
setVisibility(GONE);
|
||||
}
|
||||
|
@ -1382,7 +1404,11 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
|
|||
}
|
||||
if (checkCallAfterAnimation) {
|
||||
checkCall(false);
|
||||
} else if (checkPlayerAfterAnimation) {
|
||||
checkPlayer(false);
|
||||
}
|
||||
checkCallAfterAnimation = false;
|
||||
checkPlayerAfterAnimation = false;
|
||||
}
|
||||
});
|
||||
animatorSet.start();
|
||||
|
|
|
@ -48,6 +48,7 @@ import java.lang.reflect.Field;
|
|||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
|
@ -842,6 +843,10 @@ public class RecyclerListView extends RecyclerView {
|
|||
@Override
|
||||
public void onItemRangeInserted(int positionStart, int itemCount) {
|
||||
checkIfEmpty(true);
|
||||
if (pinnedHeader != null && pinnedHeader.getAlpha() == 0) {
|
||||
currentFirst = -1;
|
||||
invalidateViews();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -630,7 +630,9 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
floatingButton.setBackgroundDrawable(drawable);
|
||||
floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.MULTIPLY));
|
||||
floatingButton.setAnimation(R.raw.write_contacts_fab_icon, 52, 52);
|
||||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||
boolean configAnimationsEnabled = preferences.getBoolean("view_animations", true);
|
||||
floatingButton.setAnimation(configAnimationsEnabled ? R.raw.write_contacts_fab_icon : R.raw.write_contacts_fab_icon_reverse, 52, 52);
|
||||
floatingButtonContainer.setContentDescription(LocaleController.getString("CreateNewContact", R.string.CreateNewContact));
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
StateListAnimator animator = new StateListAnimator();
|
||||
|
|
|
@ -61,7 +61,6 @@ import org.telegram.messenger.LocaleController;
|
|||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.messenger.UserObject;
|
||||
import org.telegram.messenger.Utilities;
|
||||
import org.telegram.messenger.voip.VoIPBaseService;
|
||||
|
@ -2125,7 +2124,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter
|
|||
VoIPService.getSharedInstance().hangUp(discard ? 1 : 0);
|
||||
}
|
||||
if (call != null) {
|
||||
int selfUserId = UserConfig.getInstance(call.currentAccount).clientUserId;
|
||||
int selfUserId = call.currentAccount.getUserConfig().clientUserId;
|
||||
TLRPC.TL_groupCallParticipant participant = call.participants.get(selfUserId);
|
||||
if (participant != null) {
|
||||
call.participants.delete(selfUserId);
|
||||
|
|
|
@ -872,6 +872,9 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
|
|||
}
|
||||
}
|
||||
}
|
||||
if (SharedConfig.noStatusBar) {
|
||||
getWindow().setStatusBarColor(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void switchToAccount(int account, boolean removeAll) {
|
||||
|
|
|
@ -2130,7 +2130,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
|||
view = new GraySectionCell(mContext);
|
||||
view.setBackgroundColor(Theme.getColor(Theme.key_graySection) & 0xf2ffffff);
|
||||
}
|
||||
if (sharedMediaData[3].sections.size() == 0 && !sharedMediaData[3].loading) {
|
||||
if (sharedMediaData[3].sections.size() == 0) {
|
||||
view.setAlpha(0);
|
||||
} else if (section < sharedMediaData[3].sections.size()) {
|
||||
view.setAlpha(1f);
|
||||
|
@ -2262,7 +2262,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
|||
view = new GraySectionCell(mContext);
|
||||
view.setBackgroundColor(Theme.getColor(Theme.key_graySection) & 0xf2ffffff);
|
||||
}
|
||||
if (sharedMediaData[currentType].sections.size() == 0 && !sharedMediaData[currentType].loading) {
|
||||
if (sharedMediaData[currentType].sections.size() == 0) {
|
||||
view.setAlpha(0);
|
||||
} else if (section < sharedMediaData[currentType].sections.size()) {
|
||||
view.setAlpha(1f);
|
||||
|
@ -2433,7 +2433,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
|||
view = new SharedMediaSectionCell(mContext);
|
||||
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite) & 0xe5ffffff);
|
||||
}
|
||||
if (sharedMediaData[0].sections.size() == 0 && !sharedMediaData[0].loading) {
|
||||
if (sharedMediaData[0].sections.size() == 0) {
|
||||
view.setAlpha(0);
|
||||
} else if (section < sharedMediaData[0].sections.size()) {
|
||||
view.setAlpha(1f);
|
||||
|
|
|
@ -2066,7 +2066,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
}
|
||||
|
||||
int top = 0;
|
||||
int top = paddingTop;
|
||||
if (view != null) {
|
||||
top = view.getTop();
|
||||
}
|
||||
|
@ -2075,6 +2075,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
layoutManager.scrollToPositionWithOffset(sharedMediaRow, -paddingTop);
|
||||
layout = true;
|
||||
} else if ((!changed || !allowPullingDown) && view != null) {
|
||||
if (pos == 0 && !allowPullingDown && top > AndroidUtilities.dp(88)) {
|
||||
top = AndroidUtilities.dp(88);
|
||||
}
|
||||
layoutManager.scrollToPositionWithOffset(pos, top - paddingTop);
|
||||
layout = true;
|
||||
}
|
||||
|
@ -2584,7 +2587,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs),
|
||||
SharedConfig.pauseMusicOnRecord ? LocaleController.getString("DebugMenuDisablePauseMusic", R.string.DebugMenuDisablePauseMusic) : LocaleController.getString("DebugMenuEnablePauseMusic", R.string.DebugMenuEnablePauseMusic),
|
||||
BuildVars.DEBUG_VERSION && !AndroidUtilities.isTablet() && Build.VERSION.SDK_INT >= 23 ? (SharedConfig.smoothKeyboard ? LocaleController.getString("DebugMenuDisableSmoothKeyboard", R.string.DebugMenuDisableSmoothKeyboard) : LocaleController.getString("DebugMenuEnableSmoothKeyboard", R.string.DebugMenuEnableSmoothKeyboard)) : null,
|
||||
BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null
|
||||
BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null,
|
||||
Build.VERSION.SDK_INT >= 21 ? (SharedConfig.noStatusBar ? "Show status bar background" : "Hide status bar background") : null
|
||||
};
|
||||
builder.setItems(items, (dialog, which) -> {
|
||||
if (which == 0) {
|
||||
|
@ -2630,6 +2634,15 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
} else if (which == 13) {
|
||||
SharedConfig.toggleDisableVoiceAudioEffects();
|
||||
} else if (which == 14) {
|
||||
SharedConfig.toggleNoStatusBar();
|
||||
if (getParentActivity() != null) {
|
||||
if (SharedConfig.noStatusBar) {
|
||||
getParentActivity().getWindow().setStatusBarColor(0);
|
||||
} else {
|
||||
getParentActivity().getWindow().setStatusBarColor(0x33000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
|
|
Loading…
Reference in a new issue