Update to 7.2.1 (2139)

This commit is contained in:
DrKLO 2020-11-01 00:13:37 +03:00
parent 00e58e8782
commit 5a47056c7b
22 changed files with 132 additions and 105 deletions

View file

@ -285,7 +285,7 @@ android {
}
}
defaultConfig.versionCode = 2137
defaultConfig.versionCode = 2139
applicationVariants.all { variant ->
variant.outputs.all { output ->

View file

@ -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 = 2137;
public static int BUILD_VERSION = 2139;
public static String BUILD_VERSION_STRING = "7.2.0";
public static int APP_ID = 4;
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";

View file

@ -1048,6 +1048,8 @@ public class DownloadController extends BaseController implements NotificationCe
MessageObject messageObject = (MessageObject) delayedMessage.extraHashMap.get(fileName + "_i");
if (messageObject != null && messageObject.isVideo()) {
getMessagesController().sendTyping(dialogId, topMessageId, 5, 0);
} else if (messageObject != null && messageObject.getDocument() != null) {
getMessagesController().sendTyping(dialogId, topMessageId, 3, 0);
} else {
getMessagesController().sendTyping(dialogId, topMessageId, 4, 0);
}

View file

@ -403,9 +403,11 @@ public class ImageLoader {
@Override
protected void onPostExecute(final String result) {
if (result != null) {
imageLoadQueue.postRunnable(() -> {
cacheImage.httpTask = new HttpImageTask(cacheImage, 0, result);
httpTasks.add(cacheImage.httpTask);
runHttpTasks(false);
});
} else if (canRetry) {
artworkLoadError(cacheImage.url);
}

View file

@ -233,9 +233,10 @@ public class LocaleController {
"nl", "nn", "no", "sv", "af", "bg", "bn", "ca", "eu", "fur", "fy", "gu", "ha", "is", "ku",
"lb", "ml", "mr", "nah", "ne", "om", "or", "pa", "pap", "ps", "so", "sq", "sw", "ta", "te",
"tk", "ur", "zu", "mn", "gsw", "chr", "rm", "pt", "an", "ast"}, new PluralRules_One());
addRules(new String[]{"cs", "sk", "sr", "hr", "bs"}, new PluralRules_Czech());
addRules(new String[]{"cs", "sk"}, new PluralRules_Czech());
addRules(new String[]{"ff", "fr", "kab"}, new PluralRules_French());
addRules(new String[]{"ru", "uk", "be", "sh"}, new PluralRules_Balkan());
addRules(new String[]{"sr", "hr", "bs"}, new PluralRules_Serbian());
addRules(new String[]{"lv"}, new PluralRules_Latvian());
addRules(new String[]{"lt"}, new PluralRules_Lithuanian());
addRules(new String[]{"pl"}, new PluralRules_Polish());
@ -2810,6 +2811,20 @@ public class LocaleController {
}
}
public static class PluralRules_Serbian extends PluralRules {
public int quantityForNumber(int count) {
int rem100 = count % 100;
int rem10 = count % 10;
if (rem10 == 1 && rem100 != 11) {
return QUANTITY_ONE;
} else if (rem10 >= 2 && rem10 <= 4 && !(rem100 >= 12 && rem100 <= 14)) {
return QUANTITY_FEW;
} else {
return QUANTITY_OTHER;
}
}
}
public static class PluralRules_Arabic extends PluralRules {
public int quantityForNumber(int count) {
int rem100 = count % 100;

View file

@ -4081,7 +4081,7 @@ public class MessageObject {
lastLineWidth = linesMaxWidth;
}
linesMaxWidthWithLeft = lastLineWidthWithLeft = (int) Math.ceil(lastLine + lastLeft);
linesMaxWidthWithLeft = lastLineWidthWithLeft = (int) Math.ceil(linesMaxWidth + Math.max(0, lastLeft));
if (currentBlockLinesCount > 1) {
boolean hasNonRTL = false;
@ -4094,10 +4094,6 @@ public class MessageObject {
lineWidth = 0;
}
if (lineWidth > maxWidth + 20) {
lineWidth = maxWidth;
}
try {
lineLeft = block.textLayout.getLineLeft(n);
} catch (Exception e) {
@ -4105,6 +4101,11 @@ public class MessageObject {
lineLeft = 0;
}
if (lineWidth > maxWidth + 20) {
lineWidth = maxWidth;
lineLeft = 0;
}
if (lineLeft > 0) {
textXOffset = Math.min(textXOffset, lineLeft);
block.directionFlags |= 1;

View file

@ -4253,7 +4253,7 @@ public class MessagesController extends BaseController implements NotificationCe
}
public void deleteDialog(final long did, final int onlyHistory, boolean revoke) {
deleteDialog(did, true, onlyHistory, 0, revoke, null, 0);
deleteDialog(did, 1, onlyHistory, 0, revoke, null, 0);
}
public void setDialogsInTransaction(boolean transaction) {
@ -4263,11 +4263,16 @@ public class MessagesController extends BaseController implements NotificationCe
}
}
protected void deleteDialog(final long did, final boolean first, final int onlyHistory, final int max_id, boolean revoke, TLRPC.InputPeer peer, final long taskId) {
protected void deleteDialog(long did, int first, int onlyHistory, int max_id, boolean revoke, TLRPC.InputPeer peer, long taskId) {
if (onlyHistory == 2) {
getMessagesStorage().deleteDialog(did, onlyHistory);
return;
}
if (first == 1 && max_id == 0) {
TLRPC.InputPeer peerFinal = peer;
getMessagesStorage().getDialogMaxMessageId(did, (param) -> deleteDialog(did, 2, onlyHistory, Math.max(0, param), revoke, peerFinal, taskId));
return;
}
if (onlyHistory == 0 || onlyHistory == 3) {
getMediaDataController().uninstallShortcut(did);
}
@ -4275,15 +4280,8 @@ public class MessagesController extends BaseController implements NotificationCe
int high_id = (int) (did >> 32);
int max_id_delete = max_id;
if (first) {
if (first != 0) {
boolean isPromoDialog = false;
boolean emptyMax = max_id_delete == 0;
if (emptyMax) {
int max = getMessagesStorage().getDialogMaxMessageId(did);
if (max > 0) {
max_id_delete = Math.max(max, max_id_delete);
}
}
getMessagesStorage().deleteDialog(did, onlyHistory);
TLRPC.Dialog dialog = dialogs_dict.get(did);
if (onlyHistory == 0 || onlyHistory == 3) {
@ -4293,7 +4291,7 @@ public class MessagesController extends BaseController implements NotificationCe
getMediaDataController().cleanDraft(did, 0, false);
}
if (dialog != null) {
if (emptyMax) {
if (first == 2) {
max_id_delete = Math.max(0, dialog.top_message);
max_id_delete = Math.max(max_id_delete, dialog.read_inbox_max_id);
max_id_delete = Math.max(max_id_delete, dialog.read_outbox_max_id);
@ -4373,7 +4371,7 @@ public class MessagesController extends BaseController implements NotificationCe
}
}
}
if (emptyMax) {
if (first == 2) {
Integer max = dialogs_read_inbox_max.get(did);
if (max != null) {
max_id_delete = Math.max(max, max_id_delete);
@ -4420,7 +4418,7 @@ public class MessagesController extends BaseController implements NotificationCe
data = new NativeByteBuffer(4 + 8 + 4 + 4 + 4 + 4 + peer.getObjectSize());
data.writeInt32(13);
data.writeInt64(did);
data.writeBool(first);
data.writeBool(first != 0);
data.writeInt32(onlyHistory);
data.writeInt32(max_id_delete);
data.writeBool(revoke);
@ -4468,7 +4466,7 @@ public class MessagesController extends BaseController implements NotificationCe
if (error == null) {
TLRPC.TL_messages_affectedHistory res = (TLRPC.TL_messages_affectedHistory) response;
if (res.offset > 0) {
deleteDialog(did, false, onlyHistory, max_id_delete_final, revoke, peerFinal, 0);
deleteDialog(did, 0, onlyHistory, max_id_delete_final, revoke, peerFinal, 0);
}
processNewDifferenceParams(-1, res.pts, -1, res.pts_count);
getMessagesStorage().onDeleteQueryComplete(did);

View file

@ -1224,7 +1224,7 @@ public class MessagesStorage extends BaseController {
final int maxIdDelete = data.readInt32(false);
final boolean revoke = data.readBool(false);
TLRPC.InputPeer inputPeer = TLRPC.InputPeer.TLdeserialize(data, data.readInt32(false), false);
AndroidUtilities.runOnUIThread(() -> getMessagesController().deleteDialog(did, first, onlyHistory, maxIdDelete, revoke, inputPeer, taskId));
AndroidUtilities.runOnUIThread(() -> getMessagesController().deleteDialog(did, first ? 1 : 0, onlyHistory, maxIdDelete, revoke, inputPeer, taskId));
break;
}
case 15: {
@ -10863,11 +10863,10 @@ public class MessagesStorage extends BaseController {
});
}
public int getDialogMaxMessageId(final long dialog_id) {
final CountDownLatch countDownLatch = new CountDownLatch(1);
final Integer[] max = new Integer[]{0};
public void getDialogMaxMessageId(final long dialog_id, IntCallback callback) {
storageQueue.postRunnable(() -> {
SQLiteCursor cursor = null;
int[] max = new int[1];
try {
cursor = database.queryFinalized("SELECT MAX(mid) FROM messages WHERE uid = " + dialog_id);
if (cursor.next()) {
@ -10880,14 +10879,8 @@ public class MessagesStorage extends BaseController {
cursor.dispose();
}
}
countDownLatch.countDown();
AndroidUtilities.runOnUIThread(() -> callback.run(max[0]));
});
try {
countDownLatch.await();
} catch (Exception e) {
FileLog.e(e);
}
return max[0];
}
public int getDialogReadMax(final boolean outbox, final long dialog_id) {

View file

@ -276,7 +276,7 @@ public class NotificationCenter {
public int setAnimationInProgress(int oldIndex, int[] allowedNotifications, boolean stopHeavyOperations) {
onAnimationFinish(oldIndex);
if (heavyOperationsCounter.isEmpty() && stopHeavyOperations) {
NotificationCenter.getGlobalInstance().postNotificationName(stopAllHeavyOperations, 512);
getGlobalInstance().postNotificationName(stopAllHeavyOperations, 512);
}
animationInProgressCount++;

View file

@ -878,7 +878,9 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
message.messageObjects.remove(index);
message.messages.remove(index);
message.originalPaths.remove(index);
if (!message.parentObjects.isEmpty()) {
message.parentObjects.remove(index);
}
if (message.sendRequest != null) {
TLRPC.TL_messages_sendMultiMedia request = (TLRPC.TL_messages_sendMultiMedia) message.sendRequest;
request.multi_media.remove(index);
@ -5465,7 +5467,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
docType[0] = 0;
}
}
if (groupId != null) {
if (!isEncrypted && groupId != null) {
if (docType != null && prevType != null && prevType != docType[0]) {
finishGroup(accountInstance, groupId[0], scheduleDate);
groupId[0] = Utilities.random.nextLong();
@ -5525,7 +5527,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
enryptedLayer = AndroidUtilities.getPeerLayerVersion(encryptedChat.layer);
}
}
if ((!isEncrypted || enryptedLayer >= 73) && count > 1 && mediaCount % 10 == 0) {
if (!isEncrypted && count > 1 && mediaCount % 10 == 0) {
groupId = Utilities.random.nextLong();
mediaCount = 0;
}

View file

@ -271,6 +271,12 @@ public class BaseFragment {
return false;
}
protected void resumeDelayedFragmentAnimation() {
if (parentLayout != null) {
parentLayout.resumeDelayedFragmentAnimation();
}
}
public void onResume() {
isPaused = false;
}

View file

@ -3414,7 +3414,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
try {
int width = (int) Math.ceil(Theme.chat_replyNamePaint.measureText(site_name) + 1);
siteNameLayout = new StaticLayout(site_name, Theme.chat_replyNamePaint, Math.min(width, linkPreviewMaxWidth), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
siteNameRtl = siteNameLayout.getLineLeft(0) != 0;
siteNameRtl = Math.max(siteNameLayout.getLineLeft(0), 0) != 0;
int height = siteNameLayout.getLineBottom(siteNameLayout.getLineCount() - 1);
linkPreviewHeight += height;
totalHeight += height;
@ -3448,7 +3448,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
totalHeight += height;
boolean checkForRtl = true;
for (int a = 0; a < titleLayout.getLineCount(); a++) {
int lineLeft = (int) titleLayout.getLineLeft(a);
int lineLeft = (int) Math.max(0, titleLayout.getLineLeft(a));
if (lineLeft != 0) {
titleIsRTL = true;
}
@ -3497,7 +3497,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
int height = authorLayout.getLineBottom(authorLayout.getLineCount() - 1);
linkPreviewHeight += height;
totalHeight += height;
int lineLeft = (int) authorLayout.getLineLeft(0);
int lineLeft = (int) Math.max(authorLayout.getLineLeft(0), 0);
authorX = -lineLeft;
int width;
if (lineLeft != 0) {
@ -3536,7 +3536,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
boolean hasRTL = false;
for (int a = 0; a < descriptionLayout.getLineCount(); a++) {
int lineLeft = (int) Math.ceil(descriptionLayout.getLineLeft(a));
if (lineLeft != 0) {
if (lineLeft > 0) {
hasRTL = true;
if (descriptionX == 0) {
descriptionX = -lineLeft;
@ -3554,7 +3554,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
int width;
if (lineLeft != 0) {
if (lineLeft > 0) {
width = textWidth - lineLeft;
} else {
if (hasRTL) {
@ -4240,7 +4240,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
boolean titleRtl = false;
if (titleLayout != null) {
for (int a = 0, N = titleLayout.getLineCount(); a < N; a++) {
if (titleLayout.getLineLeft(a) != 0) {
if (titleLayout.getLineLeft(a) > 0) {
titleRtl = true;
break;
}
@ -12691,7 +12691,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
public float getNonAnimationTranslationX(boolean update) {
if (!currentMessageObject.isOutOwner()) {
if (currentMessageObject != null && !currentMessageObject.isOutOwner()) {
if (update && (checkBoxVisible || checkBoxAnimationInProgress)) {
Interpolator interpolator = checkBoxVisible ? CubicBezierInterpolator.EASE_OUT : CubicBezierInterpolator.EASE_IN;
checkBoxTranslation = (int) Math.ceil(interpolator.getInterpolation(checkBoxAnimationProgress) * AndroidUtilities.dp(35));

View file

@ -1715,7 +1715,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
@Override
public void onTransitionAnimationStart(boolean isOpen, boolean backward) {
if (isOpen) {
allowAnimationIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(allowAnimationIndex, new int[]{NotificationCenter.chatInfoDidLoad, NotificationCenter.dialogsNeedReload,
allowAnimationIndex = getNotificationCenter().setAnimationInProgress(allowAnimationIndex, new int[]{NotificationCenter.chatInfoDidLoad, NotificationCenter.dialogsNeedReload,
NotificationCenter.closeChats, NotificationCenter.messagesDidLoad, NotificationCenter.botKeyboardDidLoad/*, NotificationCenter.botInfoDidLoad*/});
openAnimationEnded = false;
}
@ -1724,7 +1724,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
@Override
public void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
if (isOpen) {
NotificationCenter.getInstance(currentAccount).onAnimationFinish(allowAnimationIndex);
getNotificationCenter().onAnimationFinish(allowAnimationIndex);
openAnimationEnded = true;
}
}

View file

@ -490,6 +490,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private boolean openAnimationEnded;
private boolean fragmentOpened;
private boolean fragmentBeginToShow;
private long openAnimationStartTime;
private boolean scrollToTopOnResume;
@ -634,6 +635,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private long activityResumeTime;
private int transitionAnimationIndex;
private int scrollAnimationIndex;
private final static int[] allowedNotificationsDuringChatListAnimations = new int[]{
NotificationCenter.messagesRead,
NotificationCenter.threadMessagesRead,
@ -1486,6 +1488,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (chatAttachAlert != null) {
chatAttachAlert.dismissInternal();
}
getNotificationCenter().onAnimationFinish(transitionAnimationIndex);
getNotificationCenter().onAnimationFinish(scrollAnimationIndex);
hideUndoViews();
if (chatInviteRunnable != null) {
AndroidUtilities.cancelRunOnUIThread(chatInviteRunnable);
@ -4020,13 +4024,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (MessagesController.getGlobalMainSettings().getBoolean("view_animations", true)) {
chatListItemAniamtor = new ChatListItemAnimator(this, chatListView) {
int index = -1;
Runnable finishRunnable;
@Override
public void onAnimationStart() {
if (index == -1) {
index = getNotificationCenter().setAnimationInProgress(index, allowedNotificationsDuringChatListAnimations, false);
if (scrollAnimationIndex == -1) {
scrollAnimationIndex = getNotificationCenter().setAnimationInProgress(scrollAnimationIndex, allowedNotificationsDuringChatListAnimations, false);
}
if (finishRunnable != null) {
AndroidUtilities.cancelRunOnUIThread(finishRunnable);
@ -4048,9 +4051,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
scrollToMessageId(nextScrollToMessageId, nextScrollFromMessageId, nextScrollSelect, nextScrollLoadIndex, nextScrollForce);
nextScrollToMessageId = 0;
}
if (index != -1) {
getNotificationCenter().onAnimationFinish(index);
index = -1;
if (scrollAnimationIndex != -1) {
getNotificationCenter().onAnimationFinish(scrollAnimationIndex);
scrollAnimationIndex = -1;
}
if (BuildVars.LOGS_ENABLED) {
FileLog.d("chatItemAnimator enable notifications");
@ -4066,9 +4069,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
AndroidUtilities.cancelRunOnUIThread(finishRunnable);
}
AndroidUtilities.runOnUIThread(finishRunnable = () -> {
if (index != -1) {
getNotificationCenter().onAnimationFinish(index);
index = -1;
if (scrollAnimationIndex != -1) {
getNotificationCenter().onAnimationFinish(scrollAnimationIndex);
scrollAnimationIndex = -1;
}
if (BuildVars.LOGS_ENABLED) {
FileLog.d("chatItemAnimator enable notifications");
@ -11158,11 +11161,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
} else {
doNotRemoveLoadIndex = false;
}
if (!doNotRemoveLoadIndex && !openAnimationEnded) {
if (!doNotRemoveLoadIndex && !fragmentBeginToShow && !paused) {
int[] alowedNotifications = new int[]{NotificationCenter.chatInfoDidLoad, NotificationCenter.dialogsNeedReload, NotificationCenter.scheduledMessagesUpdated,
NotificationCenter.closeChats, NotificationCenter.botKeyboardDidLoad, NotificationCenter.userInfoDidLoad, NotificationCenter.pinnedInfoDidLoad, NotificationCenter.needDeleteDialog/*, NotificationCenter.botInfoDidLoad*/};
if (transitionAnimationIndex == 0) {
transitionAnimationIndex = getNotificationCenter().setAnimationInProgress(transitionAnimationIndex, alowedNotifications);
AndroidUtilities.runOnUIThread(() -> getNotificationCenter().onAnimationFinish(transitionAnimationIndex), 800);
} else {
getNotificationCenter().updateAllowedNotifications(transitionAnimationIndex, alowedNotifications);
}
@ -11371,9 +11375,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
firstLoading = false;
AndroidUtilities.runOnUIThread(() -> {
getNotificationCenter().runDelayedNotifications();
if (parentLayout != null) {
parentLayout.resumeDelayedFragmentAnimation();
}
resumeDelayedFragmentAnimation();
});
}
@ -14945,6 +14947,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
public void onTransitionAnimationStart(boolean isOpen, boolean backward) {
int[] alowedNotifications = null;
if (isOpen) {
fragmentBeginToShow = true;
if (transitionAnimationIndex == 0) {
alowedNotifications = new int[]{
NotificationCenter.dialogsNeedReload, NotificationCenter.closeChats,

View file

@ -1890,9 +1890,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente
req.offset = offset;
req.limit = count;
int reqId = getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (parentLayout != null) {
parentLayout.resumeDelayedFragmentAnimation();
}
resumeDelayedFragmentAnimation();
if (error == null) {
TLRPC.TL_channels_channelParticipants res = (TLRPC.TL_channels_channelParticipants) response;
if (type == TYPE_ADMIN) {

View file

@ -3367,13 +3367,13 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
if (currentTopViewAnimation != null && currentTopViewAnimation.equals(animation)) {
currentTopViewAnimation = null;
}
NotificationCenter.getGlobalInstance().onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
}
});
currentTopViewAnimation.setDuration(250);
currentTopViewAnimation.setInterpolator(CubicBezierInterpolator.DEFAULT);
currentTopViewAnimation.start();
notificationsIndex = NotificationCenter.getGlobalInstance().setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
} else {
topViewEnterProgress = 1f;
topView.setTranslationY(0);
@ -3673,6 +3673,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
public void setDialogId(long id, int account) {
dialog_id = id;
if (currentAccount != account) {
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.recordStarted);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.recordStartError);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.recordStopped);
@ -6622,12 +6623,12 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
if (delegate != null) {
delegate.bottomPanelTranslationYChanged(0);
}
NotificationCenter.getGlobalInstance().onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
requestLayout();
}
});
panelAnimation.start();
notificationsIndex = NotificationCenter.getGlobalInstance().setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
requestLayout();
}
}
@ -6665,11 +6666,11 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
if (delegate != null) {
delegate.bottomPanelTranslationYChanged(0);
}
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
requestLayout();
}
});
notificationsIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
panelAnimation.start();
requestLayout();
} else {
@ -6709,14 +6710,14 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
panelAnimation = null;
botKeyboardView.setTranslationY(0);
botKeyboardView.setVisibility(GONE);
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
if (delegate != null) {
delegate.bottomPanelTranslationYChanged(0);
}
requestLayout();
}
});
notificationsIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
panelAnimation.start();
requestLayout();
} else {
@ -6998,11 +6999,11 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
delegate.bottomPanelTranslationYChanged(0);
}
requestLayout();
NotificationCenter.getGlobalInstance().onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
}
});
panelAnimation.start();
notificationsIndex = NotificationCenter.getGlobalInstance().setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
requestLayout();
}
}
@ -7383,12 +7384,12 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
public void onAnimationEnd(Animator animation) {
stickersExpansionAnim = null;
emojiView.setLayerType(LAYER_TYPE_NONE, null);
NotificationCenter.getGlobalInstance().onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
}
});
stickersExpansionAnim = anims;
emojiView.setLayerType(LAYER_TYPE_HARDWARE, null);
notificationsIndex = NotificationCenter.getGlobalInstance().setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
stickersExpansionProgress = 0f;
sizeNotifierLayout.invalidate();
anims.start();
@ -7431,14 +7432,14 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
if (keyboardVisible && isPopupShowing()) {
showPopup(0, currentPopupContentType);
}
NotificationCenter.getGlobalInstance().onAnimationFinish(notificationsIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(notificationsIndex);
}
});
stickersExpansionProgress = 1f;
sizeNotifierLayout.invalidate();
stickersExpansionAnim = anims;
emojiView.setLayerType(LAYER_TYPE_HARDWARE, null);
notificationsIndex = NotificationCenter.getGlobalInstance().setAnimationInProgress(notificationsIndex, null);
notificationsIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(notificationsIndex, null);
anims.start();
} else {
stickersExpansionProgress = 0;

View file

@ -79,6 +79,8 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
private boolean isMusic;
private boolean supportsCalls = true;
private int account = UserConfig.selectedAccount;
private boolean isLocation;
private FragmentContextViewDelegate delegate;
@ -715,7 +717,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(animationIndex);
NotificationCenter.getInstance(account).onAnimationFinish(animationIndex);
if (animatorSet != null && animatorSet.equals(animation)) {
setVisibility(GONE);
if (delegate != null) {
@ -726,7 +728,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
}
});
animatorSet.start();
animationIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(animationIndex, null);
animationIndex = NotificationCenter.getInstance(account).setAnimationInProgress(animationIndex, null);
}
}
} else {
@ -765,7 +767,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(animationIndex);
NotificationCenter.getInstance(account).onAnimationFinish(animationIndex);
if (animatorSet != null && animatorSet.equals(animation)) {
if (delegate != null) {
delegate.onAnimation(false, true);
@ -775,7 +777,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
}
});
animatorSet.start();
animationIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(animationIndex, null);
animationIndex = NotificationCenter.getInstance(account).setAnimationInProgress(animationIndex, null);
}
visible = true;
setVisibility(VISIBLE);

View file

@ -102,6 +102,8 @@ public class VoIPPiPView implements VoIPBaseService.StateListener, NotificationC
long startTime;
int animationIndex = -1;
private int currentAccount;
Runnable collapseRunnable = new Runnable() {
@Override
public void run() {
@ -134,7 +136,7 @@ public class VoIPPiPView implements VoIPBaseService.StateListener, NotificationC
}
};
public static void show(Activity activity, int parentWidth, int parentHeight, int animationType) {
public static void show(Activity activity, int account, int parentWidth, int parentHeight, int animationType) {
if (instance != null || VideoCameraCapturer.eglBase == null) {
return;
}
@ -142,6 +144,7 @@ public class VoIPPiPView implements VoIPBaseService.StateListener, NotificationC
instance = new VoIPPiPView(activity, parentWidth, parentHeight, false);
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
instance.currentAccount = account;
instance.windowManager = wm;
instance.windowLayoutParams = windowLayoutParams;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("voippipconfig", Context.MODE_PRIVATE);
@ -334,7 +337,7 @@ public class VoIPPiPView implements VoIPBaseService.StateListener, NotificationC
enlargeIcon.setOnClickListener((v) -> {
if (context instanceof LaunchActivity && !ApplicationLoader.mainInterfacePaused) {
VoIPFragment.show((Activity) context);
VoIPFragment.show((Activity) context, currentAccount);
} else if (context instanceof LaunchActivity) {
Intent intent = new Intent(context, LaunchActivity.class);
intent.setAction("voip");
@ -588,7 +591,7 @@ public class VoIPPiPView implements VoIPBaseService.StateListener, NotificationC
if (event.getAction() == MotionEvent.ACTION_UP && !moving && System.currentTimeMillis() - startTime < 150) {
Context context = getContext();
if (context instanceof LaunchActivity && !ApplicationLoader.mainInterfacePaused) {
VoIPFragment.show((Activity) context);
VoIPFragment.show((Activity) context, currentAccount);
} else if (context instanceof LaunchActivity) {
Intent intent = new Intent(context, LaunchActivity.class);
intent.setAction("voip");

View file

@ -239,7 +239,6 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
public void onAnimationEnd(Animator animation) {
NotificationCenter.getInstance(currentAccount).onAnimationFinish(animationIndex);
requestLayout();
super.onAnimationEnd(animation);
}
});
animationIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(animationIndex, null);

View file

@ -2236,7 +2236,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
}
if (isVoipIntent) {
VoIPFragment.show(this);
VoIPFragment.show(this, intentAccount[0]);
}
intent.setAction(null);

View file

@ -1448,7 +1448,7 @@ public class ThemePreviewActivity extends BaseFragment implements DownloadContro
public int getDefaultColor(int num) {
if (colorType == 3 && applyingTheme.firstAccentIsDefault && num == 0) {
Theme.ThemeAccent accent = applyingTheme.themeAccentsMap.get(Theme.DEFALT_THEME_ACCENT_ID);
return accent.myMessagesAccentColor;
return accent != null ? accent.myMessagesAccentColor : 0;
}
return 0;
}

View file

@ -99,6 +99,8 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
private final static int STATE_FULLSCREEN = 1;
private final static int STATE_FLOATING = 2;
private int currentAccount;
Activity activity;
TLRPC.User currentUser;
@ -205,12 +207,11 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
private boolean screenWasWakeup;
private boolean isVideoCall;
public static void show(Activity activity) {
show(activity, false);
public static void show(Activity activity, int account) {
show(activity, false, account);
}
public static void show(Activity activity, boolean overlay) {
public static void show(Activity activity, boolean overlay, int account) {
if (instance != null && instance.windowView.getParent() == null) {
if (instance != null) {
instance.callingUserTextureView.renderer.release();
@ -229,6 +230,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
}
VoIPFragment fragment = new VoIPFragment();
fragment.activity = activity;
fragment.currentAccount = account;
instance = fragment;
VoIPWindowView windowView = new VoIPWindowView(activity, !transitionFromPip) {
@Override
@ -333,7 +335,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
h -= instance.lastInsets.getSystemWindowInsetBottom();
}
if (instance.canSwitchToPip) {
VoIPPiPView.show(instance.activity, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_SCALE);
VoIPPiPView.show(instance.activity, instance.currentAccount, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_SCALE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && instance.lastInsets != null) {
VoIPPiPView.topInset = instance.lastInsets.getSystemWindowInsetTop();
VoIPPiPView.bottomInset = instance.lastInsets.getSystemWindowInsetBottom();
@ -379,13 +381,13 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
}
public VoIPFragment() {
currentUser = MessagesController.getInstance(UserConfig.selectedAccount).getUser(UserConfig.getInstance(UserConfig.selectedAccount).getClientUserId());
currentUser = MessagesController.getInstance(currentAccount).getUser(UserConfig.getInstance(currentAccount).getClientUserId());
callingUser = VoIPService.getSharedInstance().getUser();
VoIPService.getSharedInstance().registerStateListener(this);
isOutgoing = VoIPService.getSharedInstance().isOutgoing();
previousState = -1;
currentState = VoIPService.getSharedInstance().getCallState();
NotificationCenter.getInstance(UserConfig.selectedAccount).addObserver(this, NotificationCenter.voipServiceCreated);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.voipServiceCreated);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.emojiDidLoad);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.closeInCallActivity);
}
@ -395,7 +397,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
if (service != null) {
service.unregisterStateListener(this);
}
NotificationCenter.getInstance(UserConfig.selectedAccount).removeObserver(this, NotificationCenter.voipServiceCreated);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.voipServiceCreated);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.emojiDidLoad);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.closeInCallActivity);
}
@ -732,7 +734,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
intent.putExtra("start_incall_activity", false);
intent.putExtra("video_call", isVideoCall);
intent.putExtra("can_video_call", isVideoCall);
intent.putExtra("account", UserConfig.selectedAccount);
intent.putExtra("account", currentAccount);
try {
activity.startService(intent);
} catch (Throwable e) {
@ -863,7 +865,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && instance.lastInsets != null) {
h -= instance.lastInsets.getSystemWindowInsetBottom();
}
VoIPPiPView.show(instance.activity, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_TRANSITION);
VoIPPiPView.show(instance.activity, instance.currentAccount, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_TRANSITION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && instance.lastInsets != null) {
VoIPPiPView.topInset = instance.lastInsets.getSystemWindowInsetTop();
VoIPPiPView.bottomInset = instance.lastInsets.getSystemWindowInsetBottom();
@ -883,13 +885,13 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
VoIPPiPView.switchingToPip = true;
switchingToPip = true;
Animator animator = createPiPTransition(false);
animationIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(animationIndex, null);
animationIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(animationIndex, null);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
VoIPPiPView.getInstance().windowView.setAlpha(1f);
AndroidUtilities.runOnUIThread(() -> {
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(animationIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(animationIndex);
VoIPPiPView.getInstance().onTransitionEnd();
currentUserCameraFloatingLayout.setCornerRadius(-1f);
callingUserTextureView.renderer.release();
@ -920,7 +922,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
switchingToPip = true;
VoIPPiPView.switchingToPip = true;
VoIPPiPView.prepareForTransition();
animationIndex = NotificationCenter.getInstance(UserConfig.selectedAccount).setAnimationInProgress(animationIndex, null);
animationIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(animationIndex, null);
AndroidUtilities.runOnUIThread(() -> {
windowView.setAlpha(1f);
Animator animator = createPiPTransition(true);
@ -953,7 +955,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
NotificationCenter.getInstance(UserConfig.selectedAccount).onAnimationFinish(animationIndex);
NotificationCenter.getInstance(currentAccount).onAnimationFinish(animationIndex);
currentUserCameraFloatingLayout.setCornerRadius(-1f);
switchingToPip = false;
currentUserCameraFloatingLayout.switchingToPip = false;
@ -1252,7 +1254,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
intent.putExtra("start_incall_activity", false);
intent.putExtra("video_call", false);
intent.putExtra("can_video_call", false);
intent.putExtra("account", UserConfig.selectedAccount);
intent.putExtra("account", currentAccount);
try {
activity.startService(intent);
} catch (Throwable e) {
@ -2052,7 +2054,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && instance.lastInsets != null) {
h -= instance.lastInsets.getSystemWindowInsetBottom();
}
VoIPPiPView.show(instance.activity, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_SCALE);
VoIPPiPView.show(instance.activity, instance.currentAccount, instance.windowView.getMeasuredWidth(), h, VoIPPiPView.ANIMATION_ENTER_TYPE_SCALE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && instance.lastInsets != null) {
VoIPPiPView.topInset = instance.lastInsets.getSystemWindowInsetTop();
VoIPPiPView.bottomInset = instance.lastInsets.getSystemWindowInsetBottom();