package com.fourlastor.dante.html;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ImageSpan;
import com.fourlastor.dante.parser.Block;
import com.fourlastor.dante.parser.BlockListener;
class ImgListener implements BlockListener {
private static final String UNICODE_REPLACE = "\uFFFC";
private static final String TAG_IMG = "img";
private static final String ATTRIBUTE_SRC = "src";
private final ImgLoader imgLoader;
ImgListener(ImgLoader imgLoader) {
this.imgLoader = imgLoader;
}
@Override
public void start(Block block, SpannableStringBuilder text) {
String src = ((HtmlBlock) block).getAttributes().get(ATTRIBUTE_SRC);
if (src == null) {
return;
}
int originalLength = text.length();
text.append(UNICODE_REPLACE);
Drawable image = imgLoader.loadImage(src);
text.setSpan(
new ImageSpan(image, src),
originalLength,
text.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
}
@Override
public void end(Block block, SpannableStringBuilder text) {
// nothing to do here
}
@Override
public boolean match(Block block) {
return block instanceof HtmlBlock
&& TAG_IMG.equalsIgnoreCase(((HtmlBlock) block).getName());
}
}