package qule.gino.zhihuread.ui;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import android.annotation.SuppressLint;
import android.view.*;
import android.widget.*;
import qule.gino.zhihuread.BuildConfig;
import qule.gino.zhihuread.R;
import qule.gino.zhihuread.http.HttpManger;
import qule.gino.zhihuread.serialize.model.Read;
import qule.gino.zhihuread.serialize.msg.ReadResponseMsg;
import qule.gino.zhihuread.ui.widget.RefreshListView;
import qule.gino.zhihuread.utils.AsyncTask;
import qule.gino.zhihuread.utils.Utils;
import android.animation.Animator;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
public class MainActivity extends BaseActivity implements LoaderCallbacks<List<HashMap<String, Object>>> {
private static final String TAG = "MainActivity";
private int mCurrentItem = 0;
/**
* loader id
*/
private static final int LOADER_REFERSH_ID = 0;
private static final int LOADER_MORE_ID = 1;
private RefreshListView mContentListView;
private SimpleAdapter mSimpleAdapter;
private List<HashMap<String, Object>> mDatas;
private MenuItem mRefreshItem;
private View mLoadingProgressBar;
private boolean isMore = false;
private VelocityTracker mVelocityTracker;
private boolean mTrack = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getSupportActionBar();
actionBar.setIcon(R.drawable.qule_zhihu_read_icon);
actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
mLoadingProgressBar = findViewById(R.id.m_pb_loading);
mContentListView = (RefreshListView) findViewById(R.id.m_lv_contesnt);
mContentListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, ReadDetailActivity.class);
intent.putExtra("data", mDatas.get(position));
startActivity(intent);
}
});
mContentListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// if (view.getLastVisiblePosition() == (view.getCount() - 1)){
// mContentListView.preparePullTrack();
// }
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& view.getLastVisiblePosition() == (view.getCount() - 1)) {
if (!isMore) {
Toast.makeText(MainActivity.this, "加载更多...", Toast.LENGTH_SHORT).show();
isMore = true;
startRefreshItemAnimation();
// loadReadData(false);
getSupportLoaderManager().initLoader(LOADER_MORE_ID, null, MainActivity.this);
getSupportLoaderManager().getLoader(LOADER_MORE_ID).forceLoad();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
}
});
showProgress(true, true);
getSupportLoaderManager().initLoader(LOADER_REFERSH_ID, null, this);
getSupportLoaderManager().getLoader(LOADER_REFERSH_ID).forceLoad();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
mRefreshItem = menu.findItem(R.id.menu_main_refresh);
startRefreshItemAnimation();
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_main_refresh:
showProgress(true, false);
startRefreshItemAnimation();
getSupportLoaderManager().initLoader(LOADER_REFERSH_ID, null, this);
getSupportLoaderManager().getLoader(LOADER_REFERSH_ID).forceLoad();
// loadReadData(true);
return true;
case R.id.menu_settings:
Intent intent = new Intent();
intent.setClass(MainActivity.this, SettingActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void startRefreshItemAnimation() {
Animation anim = AnimationUtils.loadAnimation(this, R.anim.rotate_360_loop);
LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView refreshView = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);
refreshView.startAnimation(anim);
mRefreshItem.setActionView(refreshView);
}
@SuppressLint("NewApi")
private void showProgress(boolean isShow, boolean isHide) {
int mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
final View showView = isShow ? mLoadingProgressBar : mContentListView;
final View hideView = isShow ? mContentListView : mLoadingProgressBar;
if (Utils.hasHoneycombMR1()) {
showView.setAlpha(0f);
showView.setVisibility(View.VISIBLE);
showView.animate().alpha(1f).setDuration(mShortAnimationDuration).setListener(null);
if (isHide) {
hideView.animate().alpha(0f).setDuration(mShortAnimationDuration)
.setListener(new android.animation.AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
hideView.setVisibility(View.GONE);
}
});
}
} else {
showView.setVisibility(View.VISIBLE);
hideView.setVisibility(View.GONE);
}
}
@Override
public void onLoadFinished(Loader<List<HashMap<String, Object>>> load, List<HashMap<String, Object>> data) {
if (BuildConfig.DEBUG) {
Log.d(TAG, "- onLoadFinished - isRunning -");
}
switch (load.getId()) {
case LOADER_REFERSH_ID:
case LOADER_MORE_ID:
if (data == null || data.size() == 0) {
showProgress(false, true);
} else if (((ReadListLoader) load).isFirst) {
mDatas = data;
mSimpleAdapter = new SimpleAdapter(
MainActivity.this,
mDatas,
R.layout.main_item,
new String[]{Read.QUESTION_TITLE, Read.ANSWER_USER_NAME, Read.ANSWER_CONTENT_NOHTML},
new int[]{R.id.mi_tv_quesiontitle, R.id.mi_tv_answer_author,
R.id.mi_tv_answer_content});
mContentListView.setAdapter(mSimpleAdapter);
showProgress(false, true);
} else {
switch (mContentListView.getLastDirection()) {
case RefreshListView.LEFT_DIRECTION:
Log.d(TAG,"左边执行");
LayoutInflater inflate = (LayoutInflater)
MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(R.layout.refresh_listview_msg_item, null);
((TextView)v.findViewById(R.id.rlmi_tv_content)).setText("左边执行");
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
addContentView(v, layoutParams);
break;
case RefreshListView.RIGHT_DIRECTION:
Log.d(TAG,"右边执行");
inflate = (LayoutInflater)
MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflate.inflate(R.layout.refresh_listview_msg_item, null);
((TextView)v.findViewById(R.id.rlmi_tv_content)).setText("右边执行");
layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
addContentView(v, layoutParams);
break;
default:
break;
}
mDatas.addAll(data);
mSimpleAdapter.notifyDataSetChanged();
if (mRefreshItem != null && mRefreshItem.getActionView() != null) {
mRefreshItem.getActionView().clearAnimation();
mRefreshItem.setActionView(null);
}
isMore = false;
}
if (mRefreshItem != null && mRefreshItem.getActionView() != null) {
mRefreshItem.getActionView().clearAnimation();
mRefreshItem.setActionView(null);
}
break;
default:
break;
}
}
@Override
public void onLoaderReset(Loader<List<HashMap<String, Object>>> arg0) {
if (BuildConfig.DEBUG) {
Log.d(TAG, "- onLoaderReset - isRunning -");
}
}
@Override
public Loader<List<HashMap<String, Object>>> onCreateLoader(int id, Bundle arg1) {
if (BuildConfig.DEBUG) {
Log.d(TAG, "- onCreateLoader - isRunning -");
}
switch (id) {
case LOADER_REFERSH_ID:
return new ReadListLoader(this, true);
case LOADER_MORE_ID:
return new ReadListLoader(this, false);
default:
return null;
}
}
public static class ReadListLoader extends AsyncTaskLoader<List<HashMap<String, Object>>> {
public boolean isFirst;
private int mCurrentItem = 0;
public ReadListLoader(Context context, boolean isFirst) {
super(context);
this.isFirst = isFirst;
}
@Override
public List<HashMap<String, Object>> loadInBackground() {
List<HashMap<String, Object>> datas = null;
if (isFirst) {
mCurrentItem = 0;// 还原页标
}
HttpManger httpManger = new HttpManger();
byte[] results = httpManger.httpGet("http://www.zhihu.com/reader/json/" + ++mCurrentItem);
if (results == null || results.length == 0) {
return null;
}
try {
ReadResponseMsg respMsg = new ReadResponseMsg();
respMsg.deserialize(new String(results, "UTF-8"));
datas = respMsg.getReads();
} catch (UnsupportedEncodingException e) {
Log.e(TAG, e.toString());
}
return datas;
}
}
}