package com.thankcreate.care.picture;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;
import com.buuuk.android.gallery.ImageViewFlipper;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.markupartist.android.widget.ActionBar;
import com.markupartist.android.widget.ActionBar.Action;
import com.thankcreate.care.App;
import com.thankcreate.care.AppConstants;
import com.thankcreate.care.BaseActivity;
import com.thankcreate.care.R;
import com.thankcreate.care.R.drawable;
import com.thankcreate.care.R.layout;
import com.thankcreate.care.R.menu;
import com.thankcreate.care.status.StatusAddCommentActivity;
import com.thankcreate.care.status.StatusDetailActivity;
import com.thankcreate.care.tool.misc.DateTool;
import com.thankcreate.care.tool.ui.DrawableManager;
import com.thankcreate.care.tool.ui.ListViewTool;
import com.thankcreate.care.tool.ui.RefreshViewerHelper;
import com.thankcreate.care.tool.ui.RefreshViewerHelper.OnRefreshCompleteListener;
import com.thankcreate.care.viewmodel.CommentViewModel;
import com.thankcreate.care.viewmodel.EntryType;
import com.thankcreate.care.viewmodel.ItemViewModel;
import com.thankcreate.care.viewmodel.PictureItemViewModel;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.drawable.Drawable;
import android.service.dreams.DreamService;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class PictureWallActivity extends BaseActivity implements OnRefreshCompleteListener{
private ActionBar actionBar;
private PullToRefreshGridView pullToRefreshGridView;
private GridView gridViewPictureWall;
private DrawableManager drawableManager = App.getDrawableManager();
private PictureWallAdapter adapter;
private RefreshViewerHelper refreshViewerHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_picture_picture_wall);
initActionBar();
initControl();
}
@Override
protected void onResume() {
super.onResume();
if (refreshViewerHelper == null) {
refreshViewerHelper = RefreshViewerHelper.getAppInstance();
refreshViewerHelper.addListenter(this);
// 因为在Splash页面时就已经在做预加载,所以到这里时,可能还在loading,也可能已经做完了loading
if (refreshViewerHelper.isLoading)
actionBar.setProgressBarVisibility(View.VISIBLE);
// 如果预加载已经做完,则使用mainViewModel用的数据做刷新
if (refreshViewerHelper.isComplete)
onRefreshComplete();
// 如果预加载还没做完,则使用本地缓存做第一次加载
else {
refreshFromCache();
}
}
if (App.mainViewModel.isChanged) {
refresh();
} else {
if (App.memoryCleaned) {
App.memoryCleaned = false;
onRefreshComplete();
}
}
}
private void refresh() {
actionBar.setProgressBarVisibility(View.VISIBLE);
refreshViewerHelper.refreshMainViewModel();
}
public synchronized void refreshFromCache() {
// 读缓存
try {
File myDir = App.getAppContext().getFilesDir();
File cacheFile = new File(myDir, AppConstants.CACHE_PIC_ITEM);
FileInputStream fis = new FileInputStream(cacheFile);
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<PictureItemViewModel> cacheItems = (ArrayList<PictureItemViewModel>) ois
.readObject();
loadPicture(cacheItems);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void initActionBar() {
actionBar = (ActionBar) findViewById(R.id.actionbar);
actionBar.setTitle("图片");
actionBar.SetTitleLogo(R.drawable.tab_picture);
actionBar.addActionRight(new Action() {
@Override
public void performAction(View view) {
refresh();
}
@Override
public int getDrawable() {
return drawable.thumb_refresh;
}
});
}
private void initControl() {
pullToRefreshGridView = (PullToRefreshGridView) findViewById(R.id.picture_wall_grid_view);
gridViewPictureWall = pullToRefreshGridView.getRefreshableView();
pullToRefreshGridView
.setOnRefreshListener(new OnRefreshListener<GridView>() {
@Override
public void onRefresh(
PullToRefreshBase<GridView> refreshView) {
refresh();
}
});
SharedPreferences pref = App.getAppContext().getSharedPreferences(
AppConstants.PREFERENCES_NAME, Context.MODE_APPEND);
Long lastTime = pref.getLong("Global_LastUpdateTime", 0);
String label = "";
if (lastTime == 0) {
label = "从未更新";
} else {
label = "上次更新: "
+ DateUtils.formatDateTime(getApplicationContext(),
System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL);
}
pullToRefreshGridView.getLoadingLayoutProxy()
.setLastUpdatedLabel(label);
pullToRefreshGridView.setOnItemClickListener(mOnItemClickListener);
// gridview的下面一句好像不启作用,所以我把这个滑动到底下载的过程放到了adapter的getView的时候
//pullToRefreshGridView.setOnLastItemVisibleListener(mOnLastItemVisibleListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_picture_wall, menu);
return false;
}
private OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
if(position < 0 || position >= adapter.listModel.size())
return;
//CommentViewModel commentViewModel = adapter.listModel.get(position);
Intent intent = new Intent();
intent.setClass(PictureWallActivity.this, ImageViewFlipper.class);
intent.putExtra("index", position);
startActivity(intent);
}
};
private OnLastItemVisibleListener mOnLastItemVisibleListener = new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
adapter.showNext();
}
};
private void loadPicture(ArrayList<PictureItemViewModel> pictureItems)
{
adapter = new PictureWallAdapter(PictureWallActivity.this);
adapter.setListModel(pictureItems);
gridViewPictureWall.post(new Runnable() {
@Override
public void run() {
gridViewPictureWall.setAdapter(adapter);
}
});
}
class PictureWallAdapter extends BaseAdapter {
private final int SHOW_FIRST_TIME = 30;
private final int SHOW_EACH_TIME = 15;
private int currentShowCount;
public List<PictureItemViewModel> listModel = new ArrayList();;
private LayoutInflater mInflater;
public PictureWallAdapter(Context context) {
super();
mInflater = LayoutInflater.from(context);
currentShowCount = SHOW_FIRST_TIME;
}
public void addItem(PictureItemViewModel model) {
listModel.add(model);
notifyDataSetChanged();
}
public void setListModel(List<PictureItemViewModel> input){
listModel = input;
notifyDataSetChanged();
}
@Override
public int getCount() {
if(listModel.size() < currentShowCount)
return listModel.size();
return currentShowCount;
}
public boolean showNext() {
if (currentShowCount < listModel.size()) {
currentShowCount += SHOW_EACH_TIME;
notifyDataSetChanged();
return true;
}
else
return false;
}
@Override
public Object getItem(int position) {
try {
return listModel.get(position);
} catch (Exception e) {
return null;
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 滑动到底,加载更多
if(position == currentShowCount - 1)
showNext();
ViewHolder holder = null;
if(convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.gridview_item_picture_wall, null);
holder.imageThumb = (ImageView) convertView.findViewById(R.id.picture_wall_item_thumb_image);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
PictureItemViewModel pic = listModel.get(position);
if(pic == null)
return null;
holder.imageThumb.setTag(pic.smallURL);
holder.imageThumb.setImageResource(R.drawable.thumb_default_thumb1);
drawableManager.fetchDrawableOnThread(pic.smallURL, holder.imageThumb);
return convertView;
}
public class ViewHolder {
public ImageView imageThumb;
public int tag;
}
}
@Override
public void onRefreshComplete() {
actionBar.post(new Runnable() {
@Override
public void run() {
pullToRefreshGridView.onRefreshComplete();
actionBar.setProgressBarVisibility(View.GONE);
}
});
loadPicture(App.mainViewModel.pictureItems);
Long current = System.currentTimeMillis();
final String label = "上次更新: "
+ DateUtils.formatDateTime(getApplicationContext(),
current, DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL);
pullToRefreshGridView.post(new Runnable() {
@Override
public void run() {
pullToRefreshGridView.getLoadingLayoutProxy()
.setLastUpdatedLabel(label);
}
});
SharedPreferences pref = App.getAppContext()
.getSharedPreferences(AppConstants.PREFERENCES_NAME,
Context.MODE_APPEND);
Editor editor = pref.edit();
editor.putLong("Global_LastUpdateTime", current);
editor.commit();
}
}