package com.cmeiyuan.hello123.activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.DecelerateInterpolator;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView;
import android.widget.Toast;
import com.cmeiyuan.hello123.Constants;
import com.cmeiyuan.hello123.R;
import com.cmeiyuan.hello123.adapter.FundAdapter;
import com.cmeiyuan.hello123.api.BaseApi.AsyncCallBack;
import com.cmeiyuan.hello123.api.BaseApi.Error;
import com.cmeiyuan.hello123.api.v2.EstimatesApi;
import com.cmeiyuan.hello123.api.v2.FundsApi;
import com.cmeiyuan.hello123.bean.FundHold;
import com.cmeiyuan.hello123.bean.v2.Estimate;
import com.cmeiyuan.hello123.bean.v2.Estimates;
import com.cmeiyuan.hello123.bean.v2.Funds;
import com.cmeiyuan.hello123.data.FundManager;
import com.cmeiyuan.hello123.listener.SimpleAnimatorListener;
import com.cmeiyuan.hello123.swipe.SwipeMenu;
import com.cmeiyuan.hello123.swipe.SwipeMenuCreator;
import com.cmeiyuan.hello123.swipe.SwipeMenuItem;
import com.cmeiyuan.hello123.swipe.SwipeMenuListView;
import com.cmeiyuan.hello123.swipe.SwipeMenuListView.OnMenuItemClickListener;
import com.cmeiyuan.hello123.swipe.Test;
import com.cmeiyuan.hello123.util.FundUtil;
import com.cmeiyuan.hello123.util.UnitUtil;
import com.cmeiyuan.hello123.widget.MySwipeRefreshLayout;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.ValueAnimator;
import com.umeng.analytics.MobclickAgent;
import com.umeng.update.UmengUpdateAgent;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CountDownLatch;
public class MainActivity extends AnalysisActivity implements AsyncCallBack<Estimates> {
private static final long MIN_REFRESH_TIME = 1200;
private long start_refresh_time = 0;
private long last_refresh_time = 0;
private boolean isStartRefresh = false;
private boolean isFirstRefresh = true;
private EstimatesApi api = new EstimatesApi();
private TextView tv_time;
private TextView tv_income;
private TextView tv_income_unit;
// private ProgressBar progressBar;
private MySwipeRefreshLayout swipeRefreshLayout;
private SwipeMenuListView swipeMenuListView;
private View headerView;
private FundAdapter adapter = new FundAdapter();
private DecimalFormat format = new DecimalFormat("#0.00");
private SimpleDateFormat sd1 = new SimpleDateFormat("HH:mm", Locale.CHINA);
private SimpleDateFormat sd2 = new SimpleDateFormat("MM月dd日", Locale.CHINA);
private Handler handler = new Handler();
private Date nowDate = new Date();
private CountDownLatch countDownLatch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MobclickAgent.setDebugMode(true);
MobclickAgent.updateOnlineConfig(this);
UmengUpdateAgent.setUpdateOnlyWifi(false);
UmengUpdateAgent.update(this);
setContentView(R.layout.activity_main);
api.setAsyncCallBack(this);
headerView = LayoutInflater.from(this).inflate(
R.layout.list_header_income, null);
// progressBar = (ProgressBar) headerView.findViewById(R.id.progress);
// progressBar.setVisibility(View.INVISIBLE);
tv_time = (TextView) headerView.findViewById(R.id.tv_update_time);
tv_income = (TextView) headerView.findViewById(R.id.tv_income_value);
tv_income.setText("0.00");
tv_income_unit = (TextView) headerView.findViewById(R.id.tv_total_income_unit);
tv_income_unit.setText("");
tv_time.setVisibility(View.INVISIBLE);
swipeRefreshLayout = (MySwipeRefreshLayout) findViewById(R.id.swipeLayout);
int a = R.color.progress;
swipeRefreshLayout.setProgressBackgroundColor(a);
swipeRefreshLayout.setColorSchemeColors(Color.WHITE);
// swipeRefreshLayout.setColorSchemeColors(Constants.COLOR_POSITIVE, Constants.COLOR_NEGATIVE);
swipeRefreshLayout.setOnRefreshListener(new MySwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Do work to refresh the list here.
refreshData();
}
});
swipeRefreshLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
autoRefreshData();
}
});
swipeMenuListView = (SwipeMenuListView) findViewById(R.id.lv_swipeMenu);
swipeMenuListView.setAdapter(adapter);
swipeMenuListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position < 1) {
return;
}
Intent intent = new Intent(MainActivity.this,
HistoryActivity.class);
FundHold fund = adapter.getList().get(position - 1);
intent.putExtra(HistoryActivity.FUND, fund);
startActivity(intent);
}
});
setMenuListView();
setTotalIncome();
refreshList();
tv_time.setVisibility(View.INVISIBLE);
loadFundList();
}
private void loadFundList() {
FundsApi fundApi = new FundsApi();
fundApi.setAsyncCallBack(new AsyncCallBack<Funds>() {
@Override
public void onSuccess(Funds funds) {
FundManager.setList(funds.getItems());
}
@Override
public void onFailed(Error error) {
}
});
fundApi.get();
}
private void setMenuListView() {
SwipeMenuListView lv_swipe = swipeMenuListView;
lv_swipe.setDividerHeight(0);
lv_swipe.addHeaderView(headerView);
lv_swipe.setHeaderDividersEnabled(false);
SwipeMenuCreator creator = new SwipeMenuCreator() {
@Override
public void create(SwipeMenu menu) {
// create "open" item
SwipeMenuItem openItem = new SwipeMenuItem(
getApplicationContext());
// set item background
openItem.setBackground(new ColorDrawable(Color
.parseColor("#4169E1")));
// set item width
openItem.setWidth(UnitUtil.dp2px(MainActivity.this, 90));
// set item title
openItem.setTitle("编辑");
// set item title fontsize
openItem.setTitleSize(18);
// set item title font color
openItem.setTitleColor(Color.WHITE);
// set a icon
// openItem.setIcon(R.drawable.ic_menu_edit);
// add to menu
menu.addMenuItem(openItem);
// create "delete" item
SwipeMenuItem deleteItem = new SwipeMenuItem(
getApplicationContext());
// set item background
deleteItem.setBackground(new ColorDrawable(Color
.parseColor("#EE7600")));
// set item width
deleteItem.setWidth(UnitUtil.dp2px(MainActivity.this, 90));
// set item title
deleteItem.setTitle("删除");
// set item title fontsize
deleteItem.setTitleSize(18);
// set item title font color
deleteItem.setTitleColor(Color.WHITE);
// set a icon
// deleteItem.setIcon(R.drawable.ic_delete);
// add to menu
menu.addMenuItem(deleteItem);
}
};
// set creator
lv_swipe.setMenuCreator(creator);
// step 2. listener item click event
lv_swipe.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(int position, SwipeMenu menu,
int index) {
switch (index) {
case 0:
Intent intent = new Intent(MainActivity.this,
AddActivity.class);
intent.putExtra(AddActivity.MODE, AddActivity.MODE_EDIT);
FundHold fund1 = adapter.getList().get(position);
intent.putExtra(AddActivity.FUND, fund1);
startActivityForResult(intent, 2);
break;
case 1:
final FundHold fund = adapter.getList().get(position);
new AlertDialog.Builder(MainActivity.this).setTitle("删除提示")
.setMessage("确定要删除" + fund.fundName + "吗?")
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
FundUtil.deleteFund(MainActivity.this, fund);
refreshList();
}
}).setNegativeButton("取消", null).show();
break;
}
return false;
}
});
lv_swipe.setCloseInterpolator(new DecelerateInterpolator());
}
private void refreshList() {
adapter.setList(FundUtil.getFunds(this));
adapter.notifyDataSetChanged();
}
private void autoRefreshData() {
if (!isStartRefresh) {
stopRefreshData();
isStartRefresh = true;
handler.post(r);
}
}
private void stopRefreshData() {
isStartRefresh = false;
handler.removeCallbacks(r);
}
private Runnable r = new Runnable() {
@Override
public void run() {
long interval = FundUtil.getInterval(MainActivity.this);
if ((System.currentTimeMillis() - last_refresh_time) / 1000 > interval) {
swipeRefreshLayout.setRefreshing(true);
refreshData();
}
handler.postDelayed(r, interval);
}
};
public boolean onCreateOptionsMenu(android.view.Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_add_fund) {
startActivityForResult(new Intent(this, AddActivity.class), 1);
}
return true;
}
@Override
public void onSuccess(Estimates estimates) {
setUpdateTime(estimates);
updateData(estimates);
setTotalIncome();
adapter.notifyDataSetChanged();
stopRefresh();
}
@Override
public void onFailed(Error error) {
showToast(error.getMessage());
setTotalIncome();
stopRefresh();
}
private void refreshData() {
List<FundHold> list = adapter.getList();
if (list != null && list.size() > 0) {
start_refresh_time = System.currentTimeMillis();
countDownLatch = new CountDownLatch(list.size());
String[] fundCodes = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
fundCodes[i] = list.get(i).fundCode;
}
api.get(fundCodes);
} else {
stopRefresh();
}
}
protected void stopRefresh() {
long time = MIN_REFRESH_TIME - (System.currentTimeMillis() - start_refresh_time) / 1000;
if (time > 0 && !isFirstRefresh) {
isFirstRefresh = false;
//handler.postDelayed(new Runnable() {
// @Override
// public void run() {
// swipeRefreshLayout.setRefreshing(false);
// }
//}, time);
swipeRefreshLayout.setRefreshing(false);
} else {
swipeRefreshLayout.setRefreshing(false);
}
last_refresh_time = System.currentTimeMillis();
}
private void updateData(Estimates value) {
List<FundHold> list = adapter.getList();
if (list == null) {
return;
}
List<Estimate> items = value.getItems();
for (int i = 0; i < items.size(); i++) {
Estimate estimate = items.get(i);
for (int j = 0; j < list.size(); j++) {
FundHold hold = list.get(j);
if (hold.fundCode.equalsIgnoreCase(estimate.getFundCode())) {
hold.estimate = estimate;
break;
}
}
}
}
private void setUpdateTime(Estimates value) {
if (value != null) {
Date date = new Date(value.getItems().get(0).getDateTime());
if (date != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int day1 = calendar.get(Calendar.DAY_OF_MONTH);
calendar.setTime(nowDate);
int day2 = calendar.get(Calendar.DAY_OF_MONTH);
String time;
if (day1 == day2) time = sd1.format(date);
else if (day1 == day2 - 1) {
time = "昨天";
} else {
time = sd2.format(date);
}
tv_time.setVisibility(View.VISIBLE);
tv_time.setText("更新于:" + time);
}
} else {
tv_time.setVisibility(View.INVISIBLE);
}
}
private void setTotalIncome() {
List<FundHold> list = adapter.getList();
if (list != null) {
float value = 0;
boolean hasValue = false;
for (int i = 0; i < list.size(); i++) {
FundHold fund = list.get(i);
if (fund.estimate != null) if (!TextUtils.isEmpty(fund.fundShare)) {
try {
value += fund.estimate.getGszzl()
* fund.getFundShare() / 100;
} catch (Exception ignored) {
}
hasValue = true;
}
}
final float incomeValue = value;
if (hasValue) {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, incomeValue);
valueAnimator.setDuration(200);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
tv_income.setText(format.format(valueAnimator.getAnimatedValue()));
tv_income_unit.setText("元");
}
});
valueAnimator.addListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animator) {
tv_income.setText(format.format(incomeValue));
tv_income_unit.setText("元");
}
});
valueAnimator.start();
} else {
tv_income.setText("--");
tv_income_unit.setText("");
}
if (value > 0) {
headerView.setBackgroundColor(Constants.COLOR_POSITIVE);
} else if (value < 0) {
headerView.setBackgroundColor(Constants.COLOR_NEGATIVE);
} else {
headerView.setBackgroundColor(Color.parseColor("#55000000"));
}
} else {
tv_income.setText("--");
headerView.setBackgroundColor(Color.parseColor("#55000000"));
}
}
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
super.onActivityResult(arg0, arg1, arg2);
if (arg1 == RESULT_OK) {
refreshList();
refreshData();
}
}
@Override
protected void onInitTopBar(TextView left, TextView right, TextView center) {
left.setVisibility(View.GONE);
right.setText("添加");
}
@Override
protected void onTopBarSelected(View v) {
if (v == getRightTextView()) {
Intent intent = new Intent(this, AddActivity.class);
intent.putExtra(AddActivity.MODE, AddActivity.MODE_ADD);
startActivityForResult(intent, 1);
}
}
@Override
protected void onPause() {
super.onPause();
stopRefreshData();
}
@Override
protected void onResume() {
super.onResume();
handler.postDelayed(new Runnable() {
@Override
public void run() {
autoRefreshData();
}
}, 1500);
}
}