GitNex/app/src/main/java/org/mian/gitnex/helpers/highlightjs/HighlightJsView.java

118 lines
2.8 KiB
Java

package org.mian.gitnex.helpers.highlightjs;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import org.mian.gitnex.helpers.highlightjs.models.Language;
import org.mian.gitnex.helpers.highlightjs.models.Theme;
import org.mian.gitnex.helpers.highlightjs.utils.SourceUtils;
/**
* This Class was created by Patrick J
* on 09.06.16. (modified by opyale)
*/
public class HighlightJsView extends WebView {
private Language language = Language.AUTO_DETECT;
private Theme theme = Theme.DEFAULT;
private boolean zoomSupport = false;
private boolean showLineNumbers = true;
private TextWrap textWrap = TextWrap.NO_WRAP;
private String source = "";
public HighlightJsView(Context context) {
super(context);
setup();
}
public HighlightJsView(Context context, AttributeSet attrs) {
super(context, attrs);
setup();
}
public HighlightJsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setup();
}
@SuppressLint("SetJavaScriptEnabled")
private void setup() {
WebSettings settings = getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(zoomSupport);
settings.setDisplayZoomControls(false);
setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
}
private void changeZoomSettings(boolean enable) {
this.zoomSupport = enable;
getSettings().setSupportZoom(enable);
}
public String getContent() {
return source;
}
public void setContent(String source) {
this.source = (source == null) ? "" : source;
String html_content = SourceUtils.generateContent(this.source, theme.getName(), language.getName(), zoomSupport, showLineNumbers, textWrap);
loadDataWithBaseURL("file:///android_asset/", html_content, "text/html", "utf-8", null);
}
public void refresh() {
super.reload();
}
public void setHighlightLanguage(Language language) {
this.language = language;
}
public void setTheme(Theme theme) {
this.theme = theme;
}
public void setTextWrap(TextWrap textWrap) {
this.textWrap = textWrap;
}
public Language getHighlightLanguage() {
return language;
}
public Theme getTheme() {
return theme;
}
public void setZoomSupportEnabled(boolean supportZoom) {
changeZoomSettings(supportZoom);
}
public void setShowLineNumbers(boolean showLineNumbers) {
this.showLineNumbers = showLineNumbers;
}
public enum TextWrap {
NO_WRAP, WORD_WRAP, BREAK_ALL
}
}