package com.quinn.githubknife.ui.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.MenuItem; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import com.quinn.githubknife.R; import com.quinn.githubknife.presenter.CodePresenter; import com.quinn.githubknife.presenter.CodePresenterImpl; import com.quinn.githubknife.ui.BaseActivity; import com.quinn.githubknife.utils.L; import com.quinn.githubknife.view.CodeView; import butterknife.Bind; import butterknife.ButterKnife; public class CodeActivity extends BaseActivity implements CodeView { private final static String TAG = CodeActivity.class.getSimpleName(); @Bind(R.id.toolbar) Toolbar toolbar; @Bind(R.id.webview) WebView webview; private CodePresenter presenter; private String owner; private String repo; private String path; private String content; public static void launch(Context context, Bundle bundle){ Intent intent = new Intent(context, CodeActivity.class); intent.putExtras(bundle); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_code); ButterKnife.bind(this); Bundle bundle = getIntent().getExtras(); repo = (String) bundle.getSerializable("repo"); owner = (String) bundle.getSerializable("owner"); path = (String) bundle.getSerializable("path"); L.i(TAG,"repo = " + repo); L.i(TAG,"owner = " + owner); L.i(TAG,"path = " + path); toolbar.setTitle(repo); toolbar.setSubtitle(path); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); presenter = new CodePresenterImpl(this,this); presenter.getContent(owner,repo,path); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void showProgress() { } @Override public void hideProgress() { } @Override public void setCode(String content) { L.i(TAG, "setCode = " + content); this.content = content; WebSettings settings = webview.getSettings(); settings.setBuiltInZoomControls(true); settings.setJavaScriptEnabled(true); webview.addJavascriptInterface(new JavaScriptInterface(), "bitbeaker"); webview.loadUrl("file:///android_asset/source.html"); } @Override public void onError(String msg) { } protected class JavaScriptInterface { @JavascriptInterface public String getCode() { return TextUtils.htmlEncode(content.replace("\t", " ")); } @JavascriptInterface public String getRawCode() { return content; } @JavascriptInterface public String getFilename() { return path; } @JavascriptInterface public int getLineHighlight() { return 0; } } @Override protected void onDestroy() { super.onDestroy(); webview.removeAllViews(); webview.destroy(); } }