private ViewGroup getViewForMessage(int num, boolean applyOffset) { if (NotificationsController.getInstance().popupMessages.size() == 1 && (num < 0 || num >= NotificationsController.getInstance().popupMessages.size())) { return null; } if (num == -1) { num = NotificationsController.getInstance().popupMessages.size() - 1; } else if (num == NotificationsController.getInstance().popupMessages.size()) { num = 0; } ViewGroup view; MessageObject messageObject = NotificationsController.getInstance().popupMessages.get(num); if (messageObject.type == 1 || messageObject.type == 4) { if (imageViews.size() > 0) { view = imageViews.get(0); imageViews.remove(0); } else { view = new FrameLayoutAnimationListener(this); view.addView(getLayoutInflater().inflate(R.layout.popup_image_layout, null)); view.setTag(2); view.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { openCurrentMessage(); } }); } TextView messageText = (TextView) view.findViewById(R.id.message_text); BackupImageView imageView = (BackupImageView) view.findViewById(R.id.message_image); imageView.setAspectFit(true); if (messageObject.type == 1) { TLRPC.PhotoSize currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize( messageObject.photoThumbs, AndroidUtilities.getPhotoSize()); TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100); boolean photoSet = false; if (currentPhotoObject != null) { boolean photoExist = true; if (messageObject.type == 1) { File cacheFile = FileLoader.getPathToMessage(messageObject.messageOwner); if (!cacheFile.exists()) { photoExist = false; } } if (photoExist || MediaController.getInstance() .canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_PHOTO)) { imageView.setImage( currentPhotoObject.location, "100_100", thumb.location, currentPhotoObject.size); photoSet = true; } else { if (thumb != null) { imageView.setImage(thumb.location, null, (Drawable) null); photoSet = true; } } } if (!photoSet) { imageView.setVisibility(View.GONE); messageText.setVisibility(View.VISIBLE); messageText.setTextSize( TypedValue.COMPLEX_UNIT_SP, MessagesController.getInstance().fontSize); messageText.setText(messageObject.messageText); } else { imageView.setVisibility(View.VISIBLE); messageText.setVisibility(View.GONE); } } else if (messageObject.type == 4) { messageText.setVisibility(View.GONE); messageText.setText(messageObject.messageText); imageView.setVisibility(View.VISIBLE); double lat = messageObject.messageOwner.media.geo.lat; double lon = messageObject.messageOwner.media.geo._long; String currentUrl = String.format( Locale.US, "https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&zoom=13&size=100x100&maptype=roadmap&scale=%d&markers=color:red|size:big|%f,%f&sensor=false", lat, lon, Math.min(2, (int) Math.ceil(AndroidUtilities.density)), lat, lon); imageView.setImage(currentUrl, null, null); } } else if (messageObject.type == 2) { PopupAudioView cell; if (audioViews.size() > 0) { view = audioViews.get(0); audioViews.remove(0); cell = (PopupAudioView) view.findViewWithTag(300); } else { view = new FrameLayoutAnimationListener(this); view.addView(getLayoutInflater().inflate(R.layout.popup_audio_layout, null)); view.setTag(3); view.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { openCurrentMessage(); } }); ViewGroup audioContainer = (ViewGroup) view.findViewById(R.id.audio_container); cell = new PopupAudioView(this); cell.setTag(300); audioContainer.addView(cell); } cell.setMessageObject(messageObject); if (MediaController.getInstance().canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_AUDIO)) { cell.downloadAudioIfNeed(); } } else { if (textViews.size() > 0) { view = textViews.get(0); textViews.remove(0); } else { view = new FrameLayoutAnimationListener(this); view.addView(getLayoutInflater().inflate(R.layout.popup_text_layout, null)); view.setTag(1); View textContainer = view.findViewById(R.id.text_container); textContainer.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { openCurrentMessage(); } }); } TextView messageText = (TextView) view.findViewById(R.id.message_text); messageText.setTag(301); messageText.setTextSize( TypedValue.COMPLEX_UNIT_SP, MessagesController.getInstance().fontSize); messageText.setText(messageObject.messageText); } if (view.getParent() == null) { messageContainer.addView(view); } view.setVisibility(View.VISIBLE); if (applyOffset) { int widht = AndroidUtilities.displaySize.x - AndroidUtilities.dp(24); FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams(); layoutParams.gravity = Gravity.TOP | Gravity.LEFT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.width = widht; if (num == currentMessageNum) { layoutParams.leftMargin = 0; } else if (num == currentMessageNum - 1) { layoutParams.leftMargin = -widht; } else if (num == currentMessageNum + 1) { layoutParams.leftMargin = widht; } view.setLayoutParams(layoutParams); view.invalidate(); } return view; }
@Override public void didReceivedNotification(int id, Object... args) { if (id == NotificationCenter.appDidLogout) { onFinish(); finish(); } else if (id == NotificationCenter.pushMessagesUpdated) { getNewMessage(); } else if (id == NotificationCenter.updateInterfaces) { if (currentMessageObject == null) { return; } int updateMask = (Integer) args[0]; if ((updateMask & MessagesController.UPDATE_MASK_NAME) != 0 || (updateMask & MessagesController.UPDATE_MASK_STATUS) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0) { updateSubtitle(); } if ((updateMask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0) { checkAndUpdateAvatar(); } if ((updateMask & MessagesController.UPDATE_MASK_USER_PRINT) != 0) { CharSequence printString = MessagesController.getInstance() .printingStrings .get(currentMessageObject.getDialogId()); if (lastPrintString != null && printString == null || lastPrintString == null && printString != null || lastPrintString != null && printString != null && !lastPrintString.equals(printString)) { updateSubtitle(); } } } else if (id == NotificationCenter.audioDidReset) { Integer mid = (Integer) args[0]; if (messageContainer != null) { int count = messageContainer.getChildCount(); for (int a = 0; a < count; a++) { View view = messageContainer.getChildAt(a); if ((Integer) view.getTag() == 3) { PopupAudioView cell = (PopupAudioView) view.findViewWithTag(300); if (cell.getMessageObject() != null && cell.getMessageObject().getId() == mid) { cell.updateButtonState(); break; } } } } } else if (id == NotificationCenter.audioProgressDidChanged) { Integer mid = (Integer) args[0]; if (messageContainer != null) { int count = messageContainer.getChildCount(); for (int a = 0; a < count; a++) { View view = messageContainer.getChildAt(a); if ((Integer) view.getTag() == 3) { PopupAudioView cell = (PopupAudioView) view.findViewWithTag(300); if (cell.getMessageObject() != null && cell.getMessageObject().getId() == mid) { cell.updateProgress(); break; } } } } } else if (id == NotificationCenter.emojiDidLoaded) { if (messageContainer != null) { int count = messageContainer.getChildCount(); for (int a = 0; a < count; a++) { View view = messageContainer.getChildAt(a); if ((Integer) view.getTag() == 1) { TextView textView = (TextView) view.findViewWithTag(301); if (textView != null) { textView.invalidate(); } } } } } else if (id == NotificationCenter.contactsDidLoaded) { updateSubtitle(); } }