// Path: app/src/main/java/io/github/emanual/app/entity/QuestionEntity.java
// public class QuestionEntity extends BaseEntity {
//     /**
//      * 回答
//      */
//     private final static String TYPE_REPLY = "reply";
//     /**
//      * 选择
//      */
//     private final static String TYPE_CHOICE = "choice";
//     /**
//      * 判断
//      */
//     private final static String TYPE_JUDGMENT = "judgment";
//     private String type;
//     private String tag;
//     private int difficulty;
//     private String from;
//     private String description;
//     private String answer;
//     private List<String> options;
// 
//     public String getAnswer() {
//         return answer;
//     }
// 
//     public void setAnswer(String answer) {
//         this.answer = answer;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public int getDifficulty() {
//         return difficulty;
//     }
// 
//     public void setDifficulty(int difficulty) {
//         this.difficulty = difficulty;
//     }
// 
//     public String getFrom() {
//         return from;
//     }
// 
//     public void setFrom(String from) {
//         this.from = from;
//     }
// 
//     public List<String> getOptions() {
//         return options;
//     }
// 
//     public void setOptions(List<String> options) {
//         this.options = options;
//     }
// 
//     public String getTag() {
//         return tag;
//     }
// 
//     public void setTag(String tag) {
//         this.tag = tag;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @Override public String toString() {
//         return "QuestionEntity{" +
//                 "answer='" + answer + '\'' +
//                 ", type='" + type + '\'' +
//                 ", tag='" + tag + '\'' +
//                 ", difficulty=" + difficulty +
//                 ", from='" + from + '\'' +
//                 ", description='" + description + '\'' +
//                 ", options=" + options +
//                 '}';
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/ui/base/activity/SwipeBackActivity.java
// public abstract class SwipeBackActivity extends BaseActivity {
//     @Bind(R.id.swipBackLayout) SwipeBackLayout mSwipeBackLayout;
// 
//     @Override protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         mSwipeBackLayout.setCallBack(new SwipeBackLayout.CallBack() {
//             @Override
//             public void onFinish() {
//                 finish();
//             }
//         });
//     }
// 
//     public SwipeBackLayout getSwipeBackLayout() {
//         return mSwipeBackLayout;
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/ui/event/QuestionUpdateEvent.java
// public class QuestionUpdateEvent extends BaseEvent{
//     private QuestionEntity questionEntity;
// 
//     public QuestionUpdateEvent(QuestionEntity questionEntity){
//         this.questionEntity = questionEntity;
//     }
// 
//     public QuestionEntity getQuestionEntity() {
//         return questionEntity;
//     }
// 
//     public void setQuestionEntity(QuestionEntity questionEntity) {
//         this.questionEntity = questionEntity;
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/widget/DefaultWebView.java
// public class DefaultWebView extends WebView{
// 
// 
//     public DefaultWebView(Context context, AttributeSet attrs, int defStyleAttr) {
//         super(context, attrs, defStyleAttr);
//         init();
//     }
// 
//     public DefaultWebView(Context context, AttributeSet attrs) {
//         super(context, attrs);
//         init();
//     }
// 
//     public DefaultWebView(Context context) {
//         super(context);
//         init();
//     }
// 
//     private void init() {
//         this.getSettings().setJavaScriptEnabled(true);
//         this.getSettings().setDomStorageEnabled(true);
//         this.getSettings().setAppCacheEnabled(true);
//         this.getSettings().setDatabaseEnabled(true);
//         this.getSettings().setGeolocationEnabled(true);
//         this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
//     }
// }


import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.ConsoleMessage;
import android.webkit.JsPromptResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Toast;
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import butterknife.Bind;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
import io.github.emanual.app.R;
import io.github.emanual.app.entity.QuestionEntity;
import io.github.emanual.app.ui.base.activity.SwipeBackActivity;
import io.github.emanual.app.ui.event.QuestionUpdateEvent;
import io.github.emanual.app.widget.DefaultWebView;
import timber.log.Timber;
                        return true;
                    }
                });
                //window.updateQuestion(%s)'.replace('%s',JSON.stringify(q))
            }
        }
    }

    //本地call web
    void handleNative(String script, Handler.Callback callback) {
        Timber.d("handleNative script: " + script);
        try {
            //
            JSONObject input = new JSONObject();
            String token = "" + ++guid;
            input.put("token", token);
            input.put("script", script);
            callbacks.put(token, callback);

            // Bridge
            webView.loadUrl(String.format(CALL_BY_NATIVE, input.toString()));
        } catch (JSONException e) {
            Timber.e(e.toString());
        }
    }

    void handleWeb(String message) {
        Timber.d("handleWeb input: " + message);
        try {
            //
// Path: app/src/main/java/io/github/emanual/app/entity/QuestionEntity.java
// public class QuestionEntity extends BaseEntity {
//     /**
//      * 回答
//      */
//     private final static String TYPE_REPLY = "reply";
//     /**
//      * 选择
//      */
//     private final static String TYPE_CHOICE = "choice";
//     /**
//      * 判断
//      */
//     private final static String TYPE_JUDGMENT = "judgment";
//     private String type;
//     private String tag;
//     private int difficulty;
//     private String from;
//     private String description;
//     private String answer;
//     private List<String> options;
// 
//     public String getAnswer() {
//         return answer;
//     }
// 
//     public void setAnswer(String answer) {
//         this.answer = answer;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public int getDifficulty() {
//         return difficulty;
//     }
// 
//     public void setDifficulty(int difficulty) {
//         this.difficulty = difficulty;
//     }
// 
//     public String getFrom() {
//         return from;
//     }
// 
//     public void setFrom(String from) {
//         this.from = from;
//     }
// 
//     public List<String> getOptions() {
//         return options;
//     }
// 
//     public void setOptions(List<String> options) {
//         this.options = options;
//     }
// 
//     public String getTag() {
//         return tag;
//     }
// 
//     public void setTag(String tag) {
//         this.tag = tag;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @Override public String toString() {
//         return "QuestionEntity{" +
//                 "answer='" + answer + '\'' +
//                 ", type='" + type + '\'' +
//                 ", tag='" + tag + '\'' +
//                 ", difficulty=" + difficulty +
//                 ", from='" + from + '\'' +
//                 ", description='" + description + '\'' +
//                 ", options=" + options +
//                 '}';
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/ui/base/activity/SwipeBackActivity.java
// public abstract class SwipeBackActivity extends BaseActivity {
//     @Bind(R.id.swipBackLayout) SwipeBackLayout mSwipeBackLayout;
// 
//     @Override protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         mSwipeBackLayout.setCallBack(new SwipeBackLayout.CallBack() {
//             @Override
//             public void onFinish() {
//                 finish();
//             }
//         });
//     }
// 
//     public SwipeBackLayout getSwipeBackLayout() {
//         return mSwipeBackLayout;
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/ui/event/QuestionUpdateEvent.java
// public class QuestionUpdateEvent extends BaseEvent{
//     private QuestionEntity questionEntity;
// 
//     public QuestionUpdateEvent(QuestionEntity questionEntity){
//         this.questionEntity = questionEntity;
//     }
// 
//     public QuestionEntity getQuestionEntity() {
//         return questionEntity;
//     }
// 
//     public void setQuestionEntity(QuestionEntity questionEntity) {
//         this.questionEntity = questionEntity;
//     }
// }
// 
// Path: app/src/main/java/io/github/emanual/app/widget/DefaultWebView.java
// public class DefaultWebView extends WebView{
// 
// 
//     public DefaultWebView(Context context, AttributeSet attrs, int defStyleAttr) {
//         super(context, attrs, defStyleAttr);
//         init();
//     }
// 
//     public DefaultWebView(Context context, AttributeSet attrs) {
//         super(context, attrs);
//         init();
//     }
// 
//     public DefaultWebView(Context context) {
//         super(context);
//         init();
//     }
// 
//     private void init() {
//         this.getSettings().setJavaScriptEnabled(true);
//         this.getSettings().setDomStorageEnabled(true);
//         this.getSettings().setAppCacheEnabled(true);
//         this.getSettings().setDatabaseEnabled(true);
//         this.getSettings().setGeolocationEnabled(true);
//         this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
//     }
// }


// Path: app/src/main/java/io/github/emanual/app/ui/QuestionDetailActivity.java
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.ConsoleMessage;
import android.webkit.JsPromptResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Toast;
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import butterknife.Bind;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
import io.github.emanual.app.R;
import io.github.emanual.app.entity.QuestionEntity;
import io.github.emanual.app.ui.base.activity.SwipeBackActivity;
import io.github.emanual.app.ui.event.QuestionUpdateEvent;
import io.github.emanual.app.widget.DefaultWebView;
import timber.log.Timber;

                        return true;
                    }
                });
                //window.updateQuestion(%s)'.replace('%s',JSON.stringify(q))
            }
        }
    }

    //本地call web
    void handleNative(String script, Handler.Callback callback) {
        Timber.d("handleNative script: " + script);
        try {
            //
            JSONObject input = new JSONObject();
            String token = "" + ++guid;
            input.put("token", token);
            input.put("script", script);
            callbacks.put(token, callback);

            // Bridge
            webView.loadUrl(String.format(CALL_BY_NATIVE, input.toString()));
        } catch (JSONException e) {
            Timber.e(e.toString());
        }
    }

    void handleWeb(String message) {
        Timber.d("handleWeb input: " + message);
        try {
            //
            JSONObject input = new JSONObject(message);