use of im.actor.core.entity.content.DocumentContent in project actor-platform by actorapp.
the class PhotoHolder method bindData.
@Override
protected void bindData(Message message, long readDate, long receiveDate, boolean isNewMessage, PreprocessedData preprocessedData) {
// Update model
DocumentContent fileMessage = (DocumentContent) message.getContent();
// Update bubble
if (message.getSenderId() == myUid()) {
messageBubble.setBackgroundResource(R.drawable.conv_bubble_media_out);
} else {
messageBubble.setBackgroundResource(R.drawable.conv_bubble_media_in);
}
// Update state
if (message.getSenderId() == myUid()) {
stateIcon.setVisibility(View.VISIBLE);
switch(message.getMessageState()) {
case ERROR:
stateIcon.setResource(R.drawable.msg_error);
stateIcon.setTint(COLOR_ERROR);
break;
default:
case PENDING:
stateIcon.setResource(R.drawable.msg_clock);
stateIcon.setTint(COLOR_PENDING);
break;
case SENT:
if (message.getSortDate() <= readDate) {
stateIcon.setResource(R.drawable.msg_check_2);
stateIcon.setTint(COLOR_READ);
} else if (message.getSortDate() <= receiveDate) {
stateIcon.setResource(R.drawable.msg_check_2);
stateIcon.setTint(COLOR_RECEIVED);
} else {
stateIcon.setResource(R.drawable.msg_check_1);
stateIcon.setTint(COLOR_SENT);
}
break;
}
} else {
stateIcon.setVisibility(View.GONE);
}
// Update time
setTimeAndReactions(time);
Log.d(TAG, "isNewMessage: " + isNewMessage);
// Update size
if (isNewMessage) {
int w, h;
if (message.getContent() instanceof PhotoContent) {
w = ((PhotoContent) message.getContent()).getW();
h = ((PhotoContent) message.getContent()).getH();
isPhoto = true;
isAnimation = false;
duration.setVisibility(View.GONE);
} else if (message.getContent() instanceof AnimationContent) {
w = ((AnimationContent) message.getContent()).getW();
h = ((AnimationContent) message.getContent()).getH();
isPhoto = true;
isAnimation = true;
duration.setVisibility(View.VISIBLE);
duration.setText("");
} else if (message.getContent() instanceof VideoContent) {
w = ((VideoContent) message.getContent()).getW();
h = ((VideoContent) message.getContent()).getH();
isPhoto = false;
isAnimation = false;
duration.setVisibility(View.VISIBLE);
duration.setText(messenger().getFormatter().formatDuration(((VideoContent) message.getContent()).getDuration()));
} else {
throw new RuntimeException("Unsupported content");
}
int maxHeight = context.getResources().getDisplayMetrics().heightPixels - Screen.dp(96 + 32);
maxHeight = Math.min(Screen.dp(360), maxHeight);
int maxWidth = context.getResources().getDisplayMetrics().widthPixels - Screen.dp(32 + 48);
maxWidth = Math.min(Screen.dp(360), maxWidth);
float scale = Math.min(maxWidth / (float) w, maxHeight / (float) h);
int bubbleW = (int) (scale * w);
int bubbleH = (int) (scale * h);
previewView.setLayoutParams(new FrameLayout.LayoutParams(bubbleW, bubbleH));
overlay.setLayoutParams(new FrameLayout.LayoutParams(bubbleW, bubbleH));
}
// Update view
boolean needRebind = false;
if (isNewMessage) {
// Resetting old content state
// imageKitView.noRequest();
fastThumbLoader.cancel();
// Resetting binding
if (downloadFileVM != null) {
downloadFileVM.detach();
downloadFileVM = null;
}
if (uploadFileVM != null) {
uploadFileVM.detach();
uploadFileVM = null;
}
needRebind = true;
}
Log.d(TAG, "needRebind by new: " + needRebind);
updated = false;
// int updatedCounter = fileMessage.getUpdatedCounter();
// Log.d(TAG, "oldRid: " + currenrRid);
// Log.d(TAG, "newRid: " + currentMessage.getRid());
// Log.d(TAG, "oldCounter: " + lastUpdatedIndex);
// Log.d(TAG, "newCounter: " + updatedCounter);
// if (currenrRid == currentMessage.getRid() && lastUpdatedIndex != updatedCounter) {
// updated = true;
// needRebind = true;
// lastUpdatedIndex = updatedCounter;
// }
currenrRid = currentMessage.getRid();
Log.d(TAG, "updated: " + updated);
if (needRebind) {
anim = null;
if (!updated) {
playRequested = false;
}
// Resetting progress state
progressContainer.setVisibility(View.GONE);
progressView.setVisibility(View.GONE);
progressValue.setVisibility(View.GONE);
progressIcon.setVisibility(View.GONE);
if (fileMessage.getSource() instanceof FileRemoteSource) {
boolean autoDownload = false;
if (fileMessage instanceof PhotoContent) {
autoDownload = messenger().isImageAutoDownloadEnabled();
} else if (fileMessage instanceof AnimationContent) {
autoDownload = messenger().isAnimationAutoPlayEnabled();
} else if (fileMessage instanceof VideoContent) {
autoDownload = messenger().isVideoAutoDownloadEnabled();
}
if (!updated) {
previewView.setImageURI(null);
}
downloadFileVM = messenger().bindFile(((FileRemoteSource) fileMessage.getSource()).getFileReference(), autoDownload, new DownloadVMCallback(fileMessage));
} else if (fileMessage.getSource() instanceof FileLocalSource) {
uploadFileVM = messenger().bindUpload(message.getRid(), new UploadVMCallback());
if (isPhoto) {
Uri uri = Uri.fromFile(new File(((FileLocalSource) fileMessage.getSource()).getFileDescriptor()));
bindImage(uri);
} else {
if (!updated) {
previewView.setImageURI(null);
Log.d(TAG, "rebind video - setImageURI(null)!");
}
//TODO: better approach?
if (fileMessage.getFastThumb() != null && !updated) {
fastThumbLoader.request(fileMessage.getFastThumb().getImage());
Log.d(TAG, "rebind video- new thumb!");
}
}
} else {
throw new RuntimeException("Unknown file source type: " + fileMessage.getSource());
}
}
}
use of im.actor.core.entity.content.DocumentContent in project actor-platform by actorapp.
the class PhotoHolder method onClick.
@Override
public void onClick(final Message currentMessage) {
final DocumentContent document = (DocumentContent) currentMessage.getContent();
if (document.getSource() instanceof FileRemoteSource) {
FileRemoteSource remoteSource = (FileRemoteSource) document.getSource();
final FileReference location = remoteSource.getFileReference();
messenger().requestState(location.getFileId(), new FileCallback() {
@Override
public void onNotDownloaded() {
messenger().startDownloading(location);
playRequested = true;
}
@Override
public void onDownloading(float progress) {
messenger().cancelDownloading(location.getFileId());
}
@Override
public void onDownloaded(final FileSystemReference reference) {
im.actor.runtime.Runtime.postToMainThread(new Runnable() {
@Override
public void run() {
if (document instanceof PhotoContent) {
Intents.openMedia(getAdapter().getMessagesFragment().getActivity(), previewView, reference.getDescriptor(), currentMessage.getSenderId());
} else if (document instanceof VideoContent) {
playVideo(document, reference);
} else if (document instanceof AnimationContent) {
toggleAnimation();
}
}
});
}
});
} else if (document.getSource() instanceof FileLocalSource) {
messenger().requestUploadState(currentMessage.getRid(), new UploadFileCallback() {
@Override
public void onNotUploading() {
messenger().resumeUpload(currentMessage.getRid());
}
@Override
public void onUploading(float progress) {
messenger().pauseUpload(currentMessage.getRid());
}
@Override
public void onUploaded() {
// Nothing to do
}
});
}
}
use of im.actor.core.entity.content.DocumentContent in project actor-platform by actorapp.
the class SenderActor method doSendDocument.
// Sending documents
public void doSendDocument(Peer peer, String fileName, String mimeType, int fileSize, FastThumb fastThumb, String descriptor) {
long rid = RandomUtils.nextRid();
long date = createPendingDate();
long sortDate = date + 365 * 24 * 60 * 60 * 1000L;
DocumentContent documentContent = DocumentContent.createLocal(fileName, fileSize, descriptor, mimeType, fastThumb);
Message message = new Message(rid, sortDate, date, myUid(), MessageState.PENDING, documentContent);
context().getMessagesModule().getRouter().onOutgoingMessage(peer, message);
pendingMessages.getPendingMessages().add(new PendingMessage(peer, rid, documentContent));
savePending();
performUploadFile(rid, descriptor, fileName);
}
use of im.actor.core.entity.content.DocumentContent in project actor-platform by actorapp.
the class SenderActor method onFileUploaded.
private void onFileUploaded(long rid, FileReference fileReference) {
PendingMessage msg = findPending(rid);
if (msg == null) {
return;
}
pendingMessages.getPendingMessages().remove(msg);
AbsContent nContent;
if (msg.getContent() instanceof PhotoContent) {
PhotoContent basePhotoContent = (PhotoContent) msg.getContent();
nContent = PhotoContent.createRemotePhoto(fileReference, basePhotoContent.getW(), basePhotoContent.getH(), basePhotoContent.getFastThumb());
} else if (msg.getContent() instanceof VideoContent) {
VideoContent baseVideoContent = (VideoContent) msg.getContent();
nContent = VideoContent.createRemoteVideo(fileReference, baseVideoContent.getW(), baseVideoContent.getH(), baseVideoContent.getDuration(), baseVideoContent.getFastThumb());
} else if (msg.getContent() instanceof VoiceContent) {
VoiceContent baseVoiceContent = (VoiceContent) msg.getContent();
nContent = VoiceContent.createRemoteAudio(fileReference, baseVoiceContent.getDuration());
} else if (msg.getContent() instanceof AnimationContent) {
AnimationContent baseAnimcationContent = (AnimationContent) msg.getContent();
nContent = AnimationContent.createRemoteAnimation(fileReference, baseAnimcationContent.getW(), baseAnimcationContent.getH(), baseAnimcationContent.getFastThumb());
} else if (msg.getContent() instanceof DocumentContent) {
DocumentContent baseDocContent = (DocumentContent) msg.getContent();
nContent = DocumentContent.createRemoteDocument(fileReference, baseDocContent.getFastThumb());
} else {
return;
}
pendingMessages.getPendingMessages().add(new PendingMessage(msg.getPeer(), msg.getRid(), nContent));
context().getMessagesModule().getRouter().onContentChanged(msg.getPeer(), msg.getRid(), nContent);
performSendContent(msg.getPeer(), rid, nContent);
fileUplaodingWakeLocks.remove(rid).releaseLock();
}
use of im.actor.core.entity.content.DocumentContent in project actor-platform by actorapp.
the class SenderActor method performSendContent.
// Sending content
private void performSendContent(final Peer peer, final long rid, AbsContent content) {
WakeLock wakeLock = im.actor.runtime.Runtime.makeWakeLock();
ApiMessage message;
if (content instanceof TextContent) {
message = new ApiTextMessage(((TextContent) content).getText(), ((TextContent) content).getMentions(), ((TextContent) content).getTextMessageEx());
} else if (content instanceof DocumentContent) {
DocumentContent documentContent = (DocumentContent) content;
FileRemoteSource source = (FileRemoteSource) documentContent.getSource();
ApiDocumentEx documentEx = null;
if (content instanceof PhotoContent) {
PhotoContent photoContent = (PhotoContent) content;
documentEx = new ApiDocumentExPhoto(photoContent.getW(), photoContent.getH());
} else if (content instanceof VideoContent) {
VideoContent videoContent = (VideoContent) content;
documentEx = new ApiDocumentExVideo(videoContent.getW(), videoContent.getH(), videoContent.getDuration());
} else if (content instanceof AnimationContent) {
AnimationContent animationContent = (AnimationContent) content;
documentEx = new ApiDocumentExAnimation(animationContent.getW(), animationContent.getH());
} else if (content instanceof VoiceContent) {
VoiceContent voiceContent = (VoiceContent) content;
documentEx = new ApiDocumentExVoice(voiceContent.getDuration());
}
ApiFastThumb fastThumb = null;
if (documentContent.getFastThumb() != null) {
fastThumb = new ApiFastThumb(documentContent.getFastThumb().getW(), documentContent.getFastThumb().getH(), documentContent.getFastThumb().getImage());
}
message = new ApiDocumentMessage(source.getFileReference().getFileId(), source.getFileReference().getAccessHash(), source.getFileReference().getFileSize(), source.getFileReference().getFileName(), documentContent.getMimeType(), fastThumb, documentEx);
} else if (content instanceof LocationContent) {
message = new ApiJsonMessage(((LocationContent) content).getRawJson());
} else if (content instanceof ContactContent) {
message = new ApiJsonMessage(((ContactContent) content).getRawJson());
} else if (content instanceof JsonContent) {
message = new ApiJsonMessage(((JsonContent) content).getRawJson());
} else if (content instanceof StickerContent) {
message = ((ContentRemoteContainer) content.getContentContainer()).getMessage();
} else {
return;
}
performSendApiContent(peer, rid, message, wakeLock);
}
Aggregations