package im.actor.sdk.view.emoji.stickers; import android.content.Context; import android.net.Uri; import android.util.AttributeSet; import com.facebook.common.internal.Files; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.PipelineDraweeController; import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import java.io.File; import im.actor.core.entity.FileReference; import im.actor.core.entity.Sticker; import im.actor.core.viewmodel.FileVM; import im.actor.core.viewmodel.FileVMCallback; import im.actor.runtime.files.FileSystemReference; import im.actor.sdk.controllers.conversation.view.FastThumbLoader; import static im.actor.sdk.util.ActorSDKMessenger.messenger; public class StickerView extends SimpleDraweeView { private GenericDraweeHierarchyBuilder builder; private boolean loaded = false; FileReference fileReference; FileVM bindedFile; private File imageFile; Sticker sticker; private FastThumbLoader fastThumbLoader; public static final int STICKER_FULL = 512; public static final int STICKER_BIG = 256; public static final int STICKER_SMALL = 128; public StickerView(Context context, GenericDraweeHierarchy hierarchy) { super(context, hierarchy); init(); } public StickerView(Context context) { super(context); init(); } public StickerView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public StickerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { builder = new GenericDraweeHierarchyBuilder(getResources()); GenericDraweeHierarchy hierarchy = builder .setFadeDuration(200) .setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER) .build(); setHierarchy(hierarchy); fastThumbLoader = new FastThumbLoader(this); } public void bind(FileReference fileReference, int size) { if (this.fileReference != null && this.fileReference.equals(fileReference)) { return; } if (bindedFile != null) { bindedFile.detach(); bindedFile = null; } setImageURI(null); this.fileReference = fileReference; bindedFile = messenger().bindFile(fileReference, true, new FileVMCallback() { private boolean isFastThumbLoaded = false; private void checkFastThumb() { if (!isFastThumbLoaded) { isFastThumbLoaded = true; // if (sticker.getThumb() != null) { // fastThumbLoader.request(sticker.getThumb()); // } } } @Override public void onNotDownloaded() { checkFastThumb(); } @Override public void onDownloading(float progress) { checkFastThumb(); } @Override public void onDownloaded(FileSystemReference reference) { imageFile = new File(reference.getDescriptor()); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(imageFile)) .setAutoRotateEnabled(true) .build(); PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder() .setOldController(getController()) .setImageRequest(request) .build(); setController(controller); loaded = true; } }); } public byte[] getThumb() { try { return Files.toByteArray(imageFile); } catch (Exception e) { e.printStackTrace(); } return new byte[0]; } public void shortenFade() { builder.setFadeDuration(0); setHierarchy(builder.build()); } public GenericDraweeHierarchyBuilder getBuilder() { return builder; } public boolean isLoaded() { return loaded; } public void setLoaded(boolean loaded) { this.loaded = loaded; } public FileReference getFileReference() { return fileReference; } public void unbind() { if (bindedFile != null) { bindedFile.detach(); bindedFile = null; } setImageURI(null); fastThumbLoader.cancel(); } }