package com.v2ex.v2droid;
import java.io.IOException;
import java.util.HashMap;
import org.apache.http.HttpStatus;
import org.holoeverywhere.app.Activity;
import org.holoeverywhere.widget.LinearLayout;
import org.holoeverywhere.widget.TextView;
import org.holoeverywhere.widget.Toast;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ScrollView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.neofonie.mobile.app.android.widget.crouton.Crouton;
import de.neofonie.mobile.app.android.widget.crouton.Style;
public class ContentActivity extends Activity {
private final static String TAG = "ContentFragment";
Context mContext;
private WebView mRepliesListView = null;
private RepliesAdapter mRepliesListViewAdapter = null;
private ImageView mFavImageView = null;
private String mReplies = null;
public ImageLoader mImageLoader = null;
private static Integer mRepliesCount = 0;
View contentView;
ScrollView scrollView;
// Replies HashMap Key
static final String KEY_ID = "id";
static final String KEY_THANKS = "thanks";
static final String KEY_CONTENT = "content_rendered";
static final String KEY_USERNAME = "username";
static final String KEY_AVATAR = "avatar";
String topicID;
String nodeName;
String fav = "";
boolean isFav = false;
boolean favSuccess = false;
TextView title_text;
WebView content_text;
ImageView thumb_image;
TextView info_text;
TextView bottom_text;
TextView noreplyView;
HashMap<String, String> mContent = null;
int replyNum;
String once;
Document docReply;
private MenuItem refresh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
mContext = this;
final ActionBar ab = getSupportActionBar();
// ab.setTitle(R.string.app_name);
ab.setDisplayHomeAsUpEnabled(true);
scrollView = (ScrollView) findViewById(R.id.ScrollView);
mImageLoader = new ImageLoader(getApplicationContext());
Intent intent = getIntent();
topicID = intent.getStringExtra("EXTRA_TOPIC_ID");
nodeName = intent.getStringExtra("EXTRA_NODE_NAME");
getSupportActionBar().setTitle(nodeName);
System.out.println("访问[@@@@@" + topicID);
if (mReplies == null) {
new GetDataTask().execute();
}
mRepliesListView = (WebView) findViewById(R.id.replies_list);
mRepliesListView.getSettings().setJavaScriptEnabled(true);
mRepliesListView.getSettings().setPluginState(PluginState.ON);
mRepliesListView.getSettings().setPluginsEnabled(true);
mRepliesListView.setVisibility(View.GONE);
noreplyView = (TextView) findViewById(R.id.noreply_text);
noreplyView.setVisibility(View.GONE);
// At first, disappear the content and replies view
contentView = findViewById(R.id.content_wraper);
contentView.setVisibility(View.GONE);
// Setup the favorite icon
mFavImageView = (ImageView) findViewById(R.id.fav_icon);
mFavImageView.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if ((String) mFavImageView.getTag() == mContext
.getString(R.string.favourite_off)) {
mFavImageView.setImageResource(R.drawable.favourite_red);
mFavImageView.setTag(mContext
.getString(R.string.favourite_on));
// Crouton.makeText((ContentActivity) mContext,
// R.string.favourite_on, Style.ALERT).show();
} else {
mFavImageView.setImageResource(R.drawable.favourite);
mFavImageView.setTag(mContext
.getString(R.string.favourite_off));
// Crouton.makeText((ContentActivity) mContext,
// R.string.favourite_off, Style.CONFIRM).show();
}
new GetDataTask3().execute();
}
});
// Setup the content and replies view
title_text = (TextView) findViewById(R.id.title);
content_text = (WebView) findViewById(R.id.content);
content_text.getSettings().setJavaScriptEnabled(true);
content_text.getSettings().setPluginState(PluginState.ON);
content_text.getSettings().setPluginsEnabled(true);
thumb_image = (ImageView) findViewById(R.id.user_image);
info_text = (TextView) findViewById(R.id.info_text);
bottom_text = (TextView) findViewById(R.id.bottom_text);
LinearLayout avatar_layout = (LinearLayout) findViewById(R.id.avatar);
avatar_layout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(ContentActivity.this,
UserActivity.class);
intent.putExtra("EXTRA_USER_ID",
mContent.get(ApiClient.KEY_USERNAME));
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.fragment_content, menu);
refresh = menu.findItem(R.id.refresh);
refresh.setActionView(R.layout.refresh);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.reply:
Intent intent = new Intent(Intents.SHOW_REPLY);
intent.putExtra("EXTRA_TOPIC_ID", topicID);
intent.putExtra("EXTRA_TOPIC_ONCE", once);
startActivityForResult(intent, 1);
break;
case R.id.refresh:
refresh.setActionView(R.layout.refresh);
onRefresh();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case RESULT_OK:
String html = data.getExtras().getString("html");
docReply = Jsoup.parse(html);
new GetDataTask2().execute();
break;
}
}
public void onRefresh() {
new GetDataTask().execute();
}
private class GetDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
String[] s = { "", "" };
String url = "http://v2ex.com/t/" + topicID;
AppContext ac = (AppContext) getApplication();
Document doc;
mContent = new HashMap<String, String>();
try {
doc = ApiClient.get(ac, url, URLs.HOST).parse();
replyNum = ApiClient.getTopic(ac, doc, mContent);
} catch (IOException e) {
}
return s;
}
@Override
protected void onPostExecute(String[] result) {
updateUI();
refresh.setActionView(null);
super.onPostExecute(result);
}
}
private class GetDataTask2 extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
String[] s = { "", "" };
AppContext ac = (AppContext) getApplication();
replyNum = ApiClient.getTopic(ac, docReply, mContent);
return s;
}
@Override
protected void onPostExecute(String[] result) {
updateUI();
super.onPostExecute(result);
}
}
private class GetDataTask3 extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
String[] s = { "", "" };
String favUrl = "http://v2ex.com" + fav;
String refUrl = "http://v2ex.com/t/" + topicID;
AppContext ac = (AppContext) getApplication();
System.out.println("favUrl=====>" + favUrl);
System.out.println("refUrl=====>" + refUrl);
try {
Response response = ApiClient.get(ac, favUrl, refUrl);
System.out.println("reply response=====>"
+ response.statusCode());
if (response.statusCode() == 200) {
isFav = !isFav;
favSuccess = true;
} else {
favSuccess = false;
}
} catch (IOException e) {
System.out.println("IOException=====>");
}
return s;
}
@Override
protected void onPostExecute(String[] result) {
if (favSuccess) {
if (isFav) {
mFavImageView.setImageResource(R.drawable.favourite_red);
mFavImageView.setTag(mContext
.getString(R.string.favourite_on));
Crouton.makeText((ContentActivity) mContext,
R.string.favourite_on, Style.ALERT).show();
} else {
mFavImageView.setImageResource(R.drawable.favourite);
mFavImageView.setTag(mContext
.getString(R.string.favourite_off));
Crouton.makeText((ContentActivity) mContext,
R.string.favourite_off, Style.CONFIRM).show();
}
} else {
if (isFav) {
mFavImageView.setImageResource(R.drawable.favourite_red);
mFavImageView.setTag(mContext
.getString(R.string.favourite_on));
} else {
mFavImageView.setImageResource(R.drawable.favourite);
mFavImageView.setTag(mContext
.getString(R.string.favourite_off));
}
Crouton.makeText((ContentActivity) mContext,
R.string.favourite_failed, Style.INFO).show();
}
super.onPostExecute(result);
}
}
private void updateUI() {
if (mContent.get(ApiClient.KEY_NODE) == null) {
Toast.makeText(getApplicationContext(), R.string.load_failed,
Toast.LENGTH_SHORT).show();
return;
}
if (nodeName.isEmpty()) {
nodeName = mContent.get(ApiClient.KEY_NODE);
getSupportActionBar().setTitle(nodeName);
}
scrollView.scrollTo(10, 10);
fav = mContent.get(ApiClient.KEY_FAV);
if (fav != null) {
isFav = fav.contains("unfavorite");
if (isFav) {
mFavImageView.setImageResource(R.drawable.favourite_red);
mFavImageView.setTag(mContext.getString(R.string.favourite_on));
} else {
mFavImageView.setImageResource(R.drawable.favourite);
mFavImageView
.setTag(mContext.getString(R.string.favourite_off));
}
}
once = mContent.get(ApiClient.KEY_ONCE);
title_text.setText(mContent.get(ApiClient.KEY_TITLE));
info_text.setText(mContent.get(ApiClient.KEY_INFO));
bottom_text.setText(mContent.get(ApiClient.KEY_FAVORITE));
String text = "<html><head>"
+ "<style type=\"text/css\">body{color: #63656a }"
+ "</style></head>"
+ "<body link=\"#C0C0C0\" vlink=\"#808080\" alink=\"#FF0000\">"
+ mContent.get(ApiClient.KEY_CONTENT) + "</body></html>";
content_text
.loadDataWithBaseURL(null, text, "text/html", "UTF-8", null);
content_text.getSettings().setLayoutAlgorithm(
LayoutAlgorithm.SINGLE_COLUMN);
mImageLoader.DisplayImage(mContent.get(ApiClient.KEY_AVATAR),
thumb_image);
contentView.setVisibility(View.VISIBLE);
if (replyNum == 0) {
mRepliesListView.setVisibility(View.GONE);
noreplyView.setVisibility(View.VISIBLE);
} else {
mReplies = mContent.get(ApiClient.KEY_REPLIES);
mRepliesListView.setVisibility(View.VISIBLE);
mRepliesListView.loadDataWithBaseURL(null, mReplies, "text/html",
"UTF-8", null);
mRepliesListView.getSettings().setLayoutAlgorithm(
LayoutAlgorithm.SINGLE_COLUMN);
noreplyView.setVisibility(View.GONE);
}
}
}