package com.likebamboo.osa.android.ui; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.text.TextUtils; import android.view.View; import com.android.volley.Response; import com.android.volley.VolleyError; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.entity.BlogList; import com.likebamboo.osa.android.request.JsonRequest; import com.likebamboo.osa.android.request.RequestManager; import com.likebamboo.osa.android.request.RequestUrl; import com.likebamboo.osa.android.ui.fragments.BlogInfoFragment; import com.likebamboo.osa.android.ui.fragments.FeedbackFragment; import com.likebamboo.osa.android.ui.nav.ActivityNavigator; import com.likebamboo.osa.android.ui.view.CommonWebView; import com.likebamboo.osa.android.ui.view.LoadingLayout; import com.likebamboo.osa.android.ui.view.fa.TextAwesome; import com.likebamboo.osa.android.ui.view.fab.FabToolbar; import com.likebamboo.osa.android.utils.NetworkUtil; import com.likebamboo.osa.android.utils.ToastUtil; import com.likebamboo.osa.android.utils.UrlDetect; import java.net.URLDecoder; import butterknife.ButterKnife; import butterknife.InjectView; /** * 博客界面 */ public class BlogActivity extends BaseActivity { /** * 博客URL */ public static final String EXTRA_BLOG_URL = "extra_blog_url"; /** * 博客信息 */ private BlogList.Blog mBlogInfo = null; /** * actionbar */ private ActionBar mActionBar; @InjectView(R.id.blog_webview) CommonWebView mWebView = null; @InjectView(R.id.blog_loading_layout) LoadingLayout mLoadingLayout = null; @InjectView(R.id.fab_tool_bar) FabToolbar mFabToolbar = null; @InjectView(R.id.blog_favorite_tv) TextAwesome mFavTv = null; @InjectView(R.id.blog_issue_tv) TextAwesome mIssueTv = null; @InjectView(R.id.blog_info_tv) TextAwesome mInfoTv = null; /** * 打开web页面的URL */ private String mBlogUrl = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blog); ButterKnife.inject(this); mBlogUrl = getIntent().getStringExtra(EXTRA_BLOG_URL); if (TextUtils.isEmpty(mBlogUrl)) { // 容错处理 finish(); return; } // 初始化actionBar initActionBar(); // 初始化View initView(); // 添加监听器 addListener(); // 开始加载页面 startLoading(mBlogUrl); // 检查当前博客是否已经被收藏 new Thread(new Runnable() { @Override public void run() { // 收藏 mBlogInfo = BlogList.Blog.findBlogByUrl(mBlogUrl); runOnUiThread(new Runnable() { @Override public void run() { if (mBlogInfo == null) { mFavTv.setText(R.string.fa_heart_o, getString(R.string.favorite)); } else { mFavTv.setText(R.string.fa_heart, getString(R.string.unfavorite)); } } }); } }).start(); } /** * 初始化WebView */ private void initView() { // webView 不显示状态栏 mWebView.setToolBarVisibility(View.GONE); // fab监听mWebView的滚动 mFabToolbar.attachTo(mWebView.getWebView()); // 问题 mIssueTv.setText(R.string.fa_exclamation_circle, getString(R.string.issue)); mFavTv.setText(R.string.fa_heart_o, getString(R.string.favorite)); // 博客信息 mInfoTv.setText(R.string.fa_info, getString(R.string.detail)); } /** * 添加监听器 */ private void addListener() { mWebView.setStatusListener(new CommonWebView.IWebViewStatusListener() { @Override public void onPageStarted(String url) { } @Override public void onPageFinished(String url) { } @Override public void onReceiveTitle(String title) { if (mActionBar != null) { mActionBar.setTitle(title); } } @Override public boolean shouldOverrideUrl(String url) { // 如果是博客URL, 转到博客界面(BlogActivity) String formatUrl = UrlDetect.isBlogUrl(url); if (!TextUtils.isEmpty(formatUrl)) { // 进入博客详情界面 Intent i = new Intent(BlogActivity.this, BlogActivity.class); i.putExtra(BlogActivity.EXTRA_BLOG_URL, formatUrl); ActivityNavigator.startActivity(BlogActivity.this, i); return true; } // 如果是 tag 博客界面, formatUrl = UrlDetect.isTagBlogUrl(url); if (!TextUtils.isEmpty(formatUrl)) { // 进入标签博客列表界面 Intent i = new Intent(BlogActivity.this, TagBlogActivity.class); try { String title = URLDecoder.decode(formatUrl, "UTF-8"); i.putExtra(EXTRA_TITLE, title); } catch (Exception e) { e.printStackTrace(); } i.putExtra(TagBlogActivity.EXTRA_TAG_NAME, formatUrl); i.putExtra(NavigationActivity.EXTRA_SHOULD_DISABLE_DRAWER, true); ActivityNavigator.startActivity(BlogActivity.this, i); return true; } // 如果是其他url if (UrlDetect.isValidURL(url)) { // 跳转到Web页面 ActivityNavigator.openWebView(BlogActivity.this, null, url); return true; } return false; } }); // 显示信息 mInfoTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mBlogInfo != null) { // 显示博客详情信息 showBlogInfo(); return; } // 加载博客信息 loadBlogInfo(new Response.Listener<BlogList.Blog>() { @Override public void onResponse(BlogList.Blog blog) { mLoadingLayout.showLoading(false); if (blog != null) { mBlogInfo = blog; showBlogInfo(); } } }); } }); // 收藏 mFavTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 如果是未收藏的数据 if (("" + mFavTv.getText()).contains(getString(R.string.fa_heart_o))) { // 收藏 doFavorite(); return; } // 取消收藏 doUnFavorite(); } }); // 反馈 mIssueTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 反馈 if (isFinishing()) { return; } if (mBlogInfo != null) { // 显示博客详情信息 FeedbackFragment fragment = FeedbackFragment.getInstance(mBlogInfo.getBlogId(), mBlogInfo.getTitle()); fragment.show(getSupportFragmentManager(), "feedback"); return; } // 加载博客信息 loadBlogInfo(new Response.Listener<BlogList.Blog>() { @Override public void onResponse(BlogList.Blog blog) { mLoadingLayout.showLoading(false); if (blog != null) { mBlogInfo = blog; // 显示博客详情信息 FeedbackFragment fragment = FeedbackFragment.getInstance(mBlogInfo.getBlogId(), mBlogInfo.getTitle()); fragment.show(getSupportFragmentManager(), "feedback"); } } }); } }); } /** * 收藏数据 */ private void doFavorite() { if (mBlogInfo != null) { // 设置收藏时间 mBlogInfo.setFavTime(System.currentTimeMillis()); mBlogInfo.save(); // 显示提示信息 ToastUtil.show(getApplicationContext(), R.string.favorite_success); // 改变收藏按钮的文字 mFavTv.setText(R.string.fa_heart, getString(R.string.unfavorite)); // 发送广播,提示收藏数据了 sendBroadcastForFavorite(true, mBlogInfo); return; } // 加载数据 loadBlogInfo(new Response.Listener<BlogList.Blog>() { @Override public void onResponse(BlogList.Blog blog) { mLoadingLayout.showLoading(false); if (blog != null) { mBlogInfo = blog; doFavorite(); } } }); } /** * 取消收藏数据 */ private void doUnFavorite() { if (mBlogInfo == null) { return; } mBlogInfo.delete(mBlogInfo.getUrl()); // 清空id mBlogInfo.setId(null); // 显示提示信息 ToastUtil.show(getApplicationContext(), R.string.unfavorite_success); // 改变收藏按钮的文字 mFavTv.setText(R.string.fa_heart_o, getString(R.string.favorite)); sendBroadcastForFavorite(false, mBlogInfo); } /** * 发送收藏广播 * * @param fav 收藏or取消收藏 * @param blog 博客信息 */ private void sendBroadcastForFavorite(boolean fav, final BlogList.Blog blog) { if (blog == null) { return; } Intent i = new Intent(FavoriteActivity.ACTION_FAVORITE_ADD_OR_REMOVE); i.putExtra(BlogInfoFragment.EXTRA_BLOG, blog); i.putExtra(FavoriteActivity.EXTRA_FAVORITE_ADD_OR_REMOVE, fav); sendBroadcast(i); } /** * 加载博客信息 * * @param successListener 获取成功结果回调 */ private void loadBlogInfo(Response.Listener<BlogList.Blog> successListener) { mLoadingLayout.showLoading(true); JsonRequest<BlogList.Blog> request = new JsonRequest<BlogList.Blog>( String.format(RequestUrl.BLOG_INFO_URL, mBlogUrl), BlogList.Blog.class, successListener, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { mLoadingLayout.showLoading(false); // 提示错误信息 ToastUtil.show(getApplicationContext(), R.string.get_blog_info_error); } }); request.setJustResult(true); RequestManager.addRequest(request, "getBlogInfo"); } /** * 显示博客信息 */ private void showBlogInfo() { if (isFinishing()) { return; } BlogInfoFragment fragment = BlogInfoFragment.getInstance(mBlogInfo); fragment.show(getSupportFragmentManager(), "dialog"); } /** * 初始化actionBar布局 */ private void initActionBar() { mActionBar = getSupportActionBar(); mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE); mActionBar.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mActionBar.setHomeAsUpIndicator(R.drawable.ic_up); } /** * 加载url * * @see [类、类#方法、类#成员] */ private void startLoading(String url) { if (TextUtils.isEmpty(url)) { return; } if (!NetworkUtil.isNetworkAvailable(this)) { mLoadingLayout.showError(getString(R.string.network_error)); return; } url = url.startsWith("/") ? url.substring(1) : url; if (!url.contains(RequestUrl.BASE_URL)) { url = String.format(RequestUrl.BLOG_VIEW_URL, url); } // 开始loading web页面 mWebView.loadUrl(url); } @Override public void onBackPressed() { if (mWebView != null && mWebView.goBack()) { return; } super.onBackPressed(); } @Override public void finish() { super.finish(); overridePendingTransition(0, R.anim.fade_out); } @Override protected void onResume() { super.onResume(); mWebView.onResume(); } @Override protected void onPause() { super.onPause(); mWebView.onPause(); } }