Search in sources :

Example 1 with FileRemoteSource

use of im.actor.core.entity.content.FileRemoteSource in project actor-platform by actorapp.

the class DocHolder method onClick.

@Override
public void onClick(final Message currentMessage) {
    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);
            }

            @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(), fileIcon, reference.getDescriptor(), currentMessage.getSenderId());
                        } else {
                            try {
                                Activity activity = getAdapter().getMessagesFragment().getActivity();
                                activity.startActivity(Intents.openDoc(document.getName(), reference.getDescriptor()));
                            } catch (Exception e) {
                                Toast.makeText(getAdapter().getMessagesFragment().getActivity(), R.string.toast_unable_open, Toast.LENGTH_LONG).show();
                                e.printStackTrace();
                            }
                        }
                    }
                });
            }
        });
    } 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
            }
        });
    }
}
Also used : FileSystemReference(im.actor.runtime.files.FileSystemReference) UploadFileCallback(im.actor.core.viewmodel.UploadFileCallback) FileCallback(im.actor.core.viewmodel.FileCallback) FileRemoteSource(im.actor.core.entity.content.FileRemoteSource) Activity(android.app.Activity) FileLocalSource(im.actor.core.entity.content.FileLocalSource) UploadFileCallback(im.actor.core.viewmodel.UploadFileCallback) FileReference(im.actor.core.entity.FileReference) ImageLoadException(im.actor.sdk.util.images.common.ImageLoadException) PhotoContent(im.actor.core.entity.content.PhotoContent)

Example 2 with FileRemoteSource

use of im.actor.core.entity.content.FileRemoteSource in project actor-platform by actorapp.

the class DocHolder method bindData.

@Override
protected void bindData(Message message, long readDate, long receiveDate, boolean isUpdated, PreprocessedData preprocessedData) {
    document = (DocumentContent) message.getContent();
    // Update state
    if (message.getSenderId() == myUid()) {
        stateIcon.setVisibility(View.VISIBLE);
        switch(message.getMessageState()) {
            case ERROR:
                stateIcon.setResource(R.drawable.msg_error);
                stateIcon.setTint(errorColor);
                break;
            default:
            case PENDING:
                stateIcon.setResource(R.drawable.msg_clock);
                stateIcon.setTint(waitColor);
                break;
            case SENT:
                if (message.getSortDate() <= readDate) {
                    stateIcon.setResource(R.drawable.msg_check_2);
                    stateIcon.setTint(readColor);
                } else if (message.getSortDate() <= receiveDate) {
                    stateIcon.setResource(R.drawable.msg_check_2);
                    stateIcon.setTint(deliveredColor);
                } else {
                    stateIcon.setResource(R.drawable.msg_check_1);
                    stateIcon.setTint(sentColor);
                }
                break;
        }
    } else {
        stateIcon.setVisibility(View.GONE);
    }
    // Update time
    setTimeAndReactions(time);
    // Content data
    fileName.setText(document.getName());
    fileSize.setText(messenger().getFormatter().formatFileSize(document.getSource().getSize()) + " " + document.getExt().toUpperCase());
    //region File icon
    if (isUpdated) {
        boolean isAppliedThumb = false;
        if (document.getFastThumb() != null) {
            try {
                Bitmap img = ImageLoading.loadBitmap(document.getFastThumb().getImage());
                fileIcon.setImageBitmap(img);
                fileIcon.setScaleType(ImageView.ScaleType.FIT_CENTER);
                isAppliedThumb = true;
            } catch (ImageLoadException e) {
                e.printStackTrace();
            }
        }
        if (!isAppliedThumb) {
            int type = FileTypes.getType(document.getExt());
            switch(type) {
                default:
                case FileTypes.TYPE_UNKNOWN:
                    fileIcon.setImageResource(R.drawable.picker_unknown);
                    break;
                case FileTypes.TYPE_APK:
                    fileIcon.setImageResource(R.drawable.picker_apk);
                    break;
                case FileTypes.TYPE_MUSIC:
                    fileIcon.setImageResource(R.drawable.picker_music);
                    break;
                case FileTypes.TYPE_PICTURE:
                    fileIcon.setImageResource(R.drawable.picker_unknown);
                    break;
                case FileTypes.TYPE_DOC:
                    fileIcon.setImageResource(R.drawable.picker_doc);
                    break;
                case FileTypes.TYPE_RAR:
                    fileIcon.setImageResource(R.drawable.picker_rar);
                    break;
                case FileTypes.TYPE_VIDEO:
                    fileIcon.setImageResource(R.drawable.picker_video);
                    break;
                case FileTypes.TYPE_ZIP:
                    fileIcon.setImageResource(R.drawable.picker_zip);
                    break;
                case FileTypes.TYPE_XLS:
                    fileIcon.setImageResource(R.drawable.picker_xls);
                    break;
                case FileTypes.TYPE_PPT:
                    fileIcon.setImageResource(R.drawable.picker_ppt);
                    break;
                case FileTypes.TYPE_CSV:
                    fileIcon.setImageResource(R.drawable.picker_csv);
                    break;
                case FileTypes.TYPE_HTM:
                    fileIcon.setImageResource(R.drawable.picker_htm);
                    break;
                case FileTypes.TYPE_HTML:
                    fileIcon.setImageResource(R.drawable.picker_html);
                    break;
                case FileTypes.TYPE_PDF:
                    fileIcon.setImageResource(R.drawable.picker_pdf);
                    break;
            }
            fileIcon.setScaleType(ImageView.ScaleType.CENTER);
        }
    }
    //endregion
    // Update view
    boolean needRebind = false;
    if (isUpdated) {
        // Resetting binding
        if (downloadFileVM != null) {
            downloadFileVM.detach();
            downloadFileVM = null;
        }
        if (uploadFileVM != null) {
            uploadFileVM.detach();
            uploadFileVM = null;
        }
        needRebind = true;
    } else {
        if (document.getSource() instanceof FileLocalSource) {
            if (uploadFileVM == null && downloadFileVM != null) {
                downloadFileVM.detach();
                downloadFileVM = null;
                needRebind = true;
            }
        } else if (document.getSource() instanceof FileRemoteSource) {
            if (uploadFileVM != null && downloadFileVM == null) {
                uploadFileVM.detach();
                uploadFileVM = null;
                needRebind = true;
            }
        }
    }
    if (downloadFileVM == null && uploadFileVM == null) {
        needRebind = true;
    }
    if (needRebind) {
        downloadIcon.setVisibility(View.GONE);
        progressView.setVisibility(View.GONE);
        progressValue.setVisibility(View.GONE);
        fileIcon.setVisibility(View.GONE);
        menu.setVisibility(View.GONE);
        status.setVisibility(View.GONE);
        if (document.getSource() instanceof FileRemoteSource) {
            FileRemoteSource remoteSource = (FileRemoteSource) document.getSource();
            // < 1MB
            boolean autoDownload = remoteSource.getFileReference().getFileSize() <= 1024 * 1024 && messenger().isDocAutoDownloadEnabled();
            downloadFileVM = messenger().bindFile(remoteSource.getFileReference(), autoDownload, new DownloadVMCallback());
        } else if (document.getSource() instanceof FileLocalSource) {
            uploadFileVM = messenger().bindUpload(message.getRid(), new UploadVMCallback());
        }
    }
}
Also used : Bitmap(android.graphics.Bitmap) FileRemoteSource(im.actor.core.entity.content.FileRemoteSource) FileLocalSource(im.actor.core.entity.content.FileLocalSource) ImageLoadException(im.actor.sdk.util.images.common.ImageLoadException)

Example 3 with FileRemoteSource

use of im.actor.core.entity.content.FileRemoteSource 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());
        }
    }
}
Also used : VideoContent(im.actor.core.entity.content.VideoContent) AnimationContent(im.actor.core.entity.content.AnimationContent) Uri(android.net.Uri) FileRemoteSource(im.actor.core.entity.content.FileRemoteSource) DocumentContent(im.actor.core.entity.content.DocumentContent) FrameLayout(android.widget.FrameLayout) FileLocalSource(im.actor.core.entity.content.FileLocalSource) File(java.io.File) PhotoContent(im.actor.core.entity.content.PhotoContent)

Example 4 with FileRemoteSource

use of im.actor.core.entity.content.FileRemoteSource 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
            }
        });
    }
}
Also used : FileSystemReference(im.actor.runtime.files.FileSystemReference) VideoContent(im.actor.core.entity.content.VideoContent) AnimationContent(im.actor.core.entity.content.AnimationContent) UploadFileCallback(im.actor.core.viewmodel.UploadFileCallback) FileCallback(im.actor.core.viewmodel.FileCallback) FileRemoteSource(im.actor.core.entity.content.FileRemoteSource) DocumentContent(im.actor.core.entity.content.DocumentContent) FileLocalSource(im.actor.core.entity.content.FileLocalSource) UploadFileCallback(im.actor.core.viewmodel.UploadFileCallback) FileReference(im.actor.core.entity.FileReference) PhotoContent(im.actor.core.entity.content.PhotoContent)

Example 5 with FileRemoteSource

use of im.actor.core.entity.content.FileRemoteSource 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);
}
Also used : ApiFastThumb(im.actor.core.api.ApiFastThumb) ApiDocumentEx(im.actor.core.api.ApiDocumentEx) ApiDocumentExVoice(im.actor.core.api.ApiDocumentExVoice) StickerContent(im.actor.core.entity.content.StickerContent) LocationContent(im.actor.core.entity.content.LocationContent) WakeLock(im.actor.runtime.power.WakeLock) VideoContent(im.actor.core.entity.content.VideoContent) ApiTextMessage(im.actor.core.api.ApiTextMessage) JsonContent(im.actor.core.entity.content.JsonContent) AnimationContent(im.actor.core.entity.content.AnimationContent) ContactContent(im.actor.core.entity.content.ContactContent) ApiJsonMessage(im.actor.core.api.ApiJsonMessage) FileRemoteSource(im.actor.core.entity.content.FileRemoteSource) VoiceContent(im.actor.core.entity.content.VoiceContent) DocumentContent(im.actor.core.entity.content.DocumentContent) ApiMessage(im.actor.core.api.ApiMessage) ApiDocumentExPhoto(im.actor.core.api.ApiDocumentExPhoto) ApiDocumentExAnimation(im.actor.core.api.ApiDocumentExAnimation) ApiDocumentMessage(im.actor.core.api.ApiDocumentMessage) ContentRemoteContainer(im.actor.core.entity.content.internal.ContentRemoteContainer) ApiDocumentExVideo(im.actor.core.api.ApiDocumentExVideo) TextContent(im.actor.core.entity.content.TextContent) PhotoContent(im.actor.core.entity.content.PhotoContent)

Aggregations

FileRemoteSource (im.actor.core.entity.content.FileRemoteSource)8 FileLocalSource (im.actor.core.entity.content.FileLocalSource)6 DocumentContent (im.actor.core.entity.content.DocumentContent)5 PhotoContent (im.actor.core.entity.content.PhotoContent)5 AnimationContent (im.actor.core.entity.content.AnimationContent)4 StickerContent (im.actor.core.entity.content.StickerContent)3 VideoContent (im.actor.core.entity.content.VideoContent)3 VoiceContent (im.actor.core.entity.content.VoiceContent)3 FileReference (im.actor.core.entity.FileReference)2 ContactContent (im.actor.core.entity.content.ContactContent)2 LocationContent (im.actor.core.entity.content.LocationContent)2 TextContent (im.actor.core.entity.content.TextContent)2 FileCallback (im.actor.core.viewmodel.FileCallback)2 UploadFileCallback (im.actor.core.viewmodel.UploadFileCallback)2 FileSystemReference (im.actor.runtime.files.FileSystemReference)2 ImageLoadException (im.actor.sdk.util.images.common.ImageLoadException)2 Activity (android.app.Activity)1 Bitmap (android.graphics.Bitmap)1 Uri (android.net.Uri)1 FrameLayout (android.widget.FrameLayout)1