package com.codeest.geeknews.ui.gank.activity;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.codeest.geeknews.R;
import com.codeest.geeknews.app.App;
import com.codeest.geeknews.app.Constants;
import com.codeest.geeknews.base.SimpleActivity;
import com.codeest.geeknews.model.bean.RealmLikeBean;
import com.codeest.geeknews.model.db.RealmHelper;
import com.codeest.geeknews.model.prefs.ImplPreferencesHelper;
import com.codeest.geeknews.util.ShareUtil;
import com.codeest.geeknews.util.SystemUtil;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
import butterknife.BindView;
/**
* Created by codeest on 16/8/20.
*/
public class TechDetailActivity extends SimpleActivity {
@BindView(R.id.tool_bar)
Toolbar toolBar;
@BindView(R.id.wv_tech_content)
WebView wvTechContent;
@BindView(R.id.tv_progress)
TextView tvProgress;
RealmHelper mRealmHelper;
ImplPreferencesHelper mImplPreferencesHelper;
MenuItem menuItem;
String title,url,imgUrl,id;
int type;
boolean isLiked;
@Override
protected int getLayout() {
return R.layout.activity_tech_detail;
}
@Override
protected void initEventAndData() {
mRealmHelper = App.getAppComponent().realmHelper();
mImplPreferencesHelper = App.getAppComponent().preferencesHelper();
Intent intent = getIntent();
type = intent.getExtras().getInt(Constants.IT_GANK_DETAIL_TYPE);
title = intent.getExtras().getString(Constants.IT_GANK_DETAIL_TITLE);
url = intent.getExtras().getString(Constants.IT_GANK_DETAIL_URL);
imgUrl = intent.getExtras().getString(Constants.IT_GANK_DETAIL_IMG_URL);
id = intent.getExtras().getString(Constants.IT_GANK_DETAIL_ID);
setToolBar(toolBar,title);
WebSettings settings = wvTechContent.getSettings();
if (mImplPreferencesHelper.getNoImageState()) {
settings.setBlockNetworkImage(true);
}
if (mImplPreferencesHelper.getAutoCacheState()) {
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
if (SystemUtil.isNetworkConnected()) {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
}
}
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setSupportZoom(true);
wvTechContent.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
wvTechContent.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (tvProgress == null)
return;
if (newProgress == 100) {
tvProgress.setVisibility(View.GONE);
} else {
tvProgress.setVisibility(View.VISIBLE);
ViewGroup.LayoutParams lp = tvProgress.getLayoutParams();
lp.width = App.SCREEN_WIDTH * newProgress / 100;
}
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
}
});
wvTechContent.loadUrl(url);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && wvTechContent.canGoBack()) {
wvTechContent.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.tech_meun, menu);
menuItem = menu.findItem(R.id.action_like);
setLikeState(mRealmHelper.queryLikeId(id));
return true;
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_like:
if(isLiked) {
item.setIcon(R.mipmap.ic_toolbar_like_n);
mRealmHelper.deleteLikeBean(this.id);
isLiked = false;
} else {
item.setIcon(R.mipmap.ic_toolbar_like_p);
RealmLikeBean bean = new RealmLikeBean();
bean.setId(this.id);
bean.setImage(imgUrl);
bean.setUrl(url);
bean.setTitle(title);
bean.setType(type);
bean.setTime(System.currentTimeMillis());
mRealmHelper.insertLikeBean(bean);
isLiked = true;
}
break;
case R.id.action_copy:
SystemUtil.copyToClipBoard(mContext,url);
return true;
case R.id.action_share:
ShareUtil.shareText(mContext,url,"分享一篇文章");
}
return super.onOptionsItemSelected(item);
}
private void setLikeState(boolean state) {
if(state) {
menuItem.setIcon(R.mipmap.ic_toolbar_like_p);
isLiked = true;
} else {
menuItem.setIcon(R.mipmap.ic_toolbar_like_n);
isLiked = false;
}
}
@Override
public void onBackPressedSupport() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
pop();
} else {
finishAfterTransition();
}
}
public static class Builder {
private String title;
private String url;
private String imgUrl;
private String id;
private int type;
private View shareView;
private Context mContext;
private Activity mActivity;
public Builder() {
}
public Builder setContext(Context mContext) {
this.mContext = mContext;
return this;
}
public Builder setTitle(String title) {
this.title = title;
return this;
}
public Builder setUrl(String url) {
this.url = url;
return this;
}
public Builder setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
return this;
}
public Builder setId(String id) {
this.id = id;
return this;
}
public Builder setType(int type) {
this.type = type;
return this;
}
public Builder setAnimConfig(Activity mActivity, View shareView) {
this.mActivity = mActivity;
this.shareView = shareView;
return this;
}
}
public static void launch(Builder builder) {
if (builder.shareView != null) {
Intent intent = new Intent();
intent.setClass(builder.mContext, TechDetailActivity.class);
intent.putExtra(Constants.IT_GANK_DETAIL_URL, builder.url);
intent.putExtra(Constants.IT_GANK_DETAIL_IMG_URL, builder.imgUrl);
intent.putExtra(Constants.IT_GANK_DETAIL_TITLE, builder.title);
intent.putExtra(Constants.IT_GANK_DETAIL_ID, builder.id);
intent.putExtra(Constants.IT_GANK_DETAIL_TYPE, builder.type);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(builder.mActivity, builder.shareView, "shareView");
builder.mContext.startActivity(intent,options.toBundle());
} else {
Intent intent = new Intent();
intent.setClass(builder.mContext, TechDetailActivity.class);
intent.putExtra(Constants.IT_GANK_DETAIL_URL, builder.url);
intent.putExtra(Constants.IT_GANK_DETAIL_IMG_URL, builder.imgUrl);
intent.putExtra(Constants.IT_GANK_DETAIL_TITLE, builder.title);
intent.putExtra(Constants.IT_GANK_DETAIL_ID, builder.id);
intent.putExtra(Constants.IT_GANK_DETAIL_TYPE, builder.type);
builder.mContext.startActivity(intent);
}
}
}