package org.cnodejs.android.md.ui.widget; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StyleRes; import android.util.AttributeSet; import org.cnodejs.android.md.model.entity.Message; import org.cnodejs.android.md.model.util.EntityUtils; import org.cnodejs.android.md.ui.listener.FormatJavascriptInterface; import org.cnodejs.android.md.ui.listener.ImageJavascriptInterface; import org.cnodejs.android.md.ui.listener.NotificationJavascriptInterface; import org.cnodejs.android.md.ui.view.IBackToContentTopView; import java.util.List; public class NotificationWebView extends CNodeWebView implements IBackToContentTopView { private static final String LIGHT_THEME_PATH = "file:///android_asset/notification_light.html"; private static final String DARK_THEME_PATH = "file:///android_asset/notification_dark.html"; private boolean pageLoaded = false; private List<Message> messageList = null; public NotificationWebView(@NonNull Context context) { super(context); init(context); } public NotificationWebView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } public NotificationWebView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public NotificationWebView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); } @SuppressLint("AddJavascriptInterface") private void init(@NonNull Context context) { addJavascriptInterface(ImageJavascriptInterface.with(context), ImageJavascriptInterface.NAME); addJavascriptInterface(FormatJavascriptInterface.instance, FormatJavascriptInterface.NAME); addJavascriptInterface(NotificationJavascriptInterface.with(context), NotificationJavascriptInterface.NAME); loadUrl(isDarkTheme() ? DARK_THEME_PATH : LIGHT_THEME_PATH); } @Override protected void onPageFinished(String url) { pageLoaded = true; if (messageList != null) { updateMessageList(messageList); messageList = null; } } public void updateMessageList(@NonNull List<Message> messageList) { if (pageLoaded) { for (Message message : messageList) { message.getReply().getContentHtml(); // 确保Html渲染 } loadUrl("" + "javascript:\n" + "updateMessages(" + EntityUtils.gson.toJson(messageList) + ");" ); } else { this.messageList = messageList; } } public void markAllMessageRead() { if (pageLoaded) { loadUrl("" + "javascript:\n" + "markAllMessageRead();" ); } } @Override public void backToContentTop() { scrollTo(0, 0); } }