package com.gitonway.fineday.activity;
import java.util.ArrayList;
import java.util.List;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.App;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Fullscreen;
import org.androidannotations.annotations.ItemClick;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.androidannotations.annotations.res.AnimationRes;
import org.androidannotations.annotations.res.StringRes;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition.TransitionListener;
import android.graphics.Point;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.gitonway.fineday.Constants;
import com.gitonway.fineday.MyApp;
import com.gitonway.fineday.R;
import com.gitonway.fineday.adapter.CityAdapter;
import com.gitonway.fineday.adapter.MyCityAapter;
import com.gitonway.fineday.domain.CityLogic;
import com.gitonway.fineday.domain.model.CityModel;
import com.gitonway.fineday.utils.ACache;
import com.gitonway.fineday.utils.LogUtils;
import com.gitonway.fineday.utils.PreferencesUtils;
import com.gitonway.fineday.utils.ToJsonStrUtils;
import com.gitonway.fineday.utils.http.HttpUtils;
import com.gitonway.fineday.widget.crouton.Crouton;
import com.gitonway.fineday.widget.crouton.Style;
import com.gitonway.fineday.widget.jazzylistview.JazzyHelper;
import com.gitonway.fineday.widget.jazzylistview.JazzyListView;
import com.gitonway.fineday.widget.shimmer.Shimmer;
import com.gitonway.fineday.widget.shimmer.ShimmerTextView;
import com.gitonway.fineday.widget.swipelistview.SwipeListView;
import com.nineoldandroids.animation.ObjectAnimator;
import com.umeng.analytics.MobclickAgent;
@Fullscreen
@EActivity(R.layout.activity_city_selection)
public class CitySelectionActivity extends BaseActivity {
/** 动画执行时间 */
private final int duration = 1 * 500;
@App
MyApp app;
@ViewById(R.id.cityLayout)
LinearLayout mLayoutCity;
@ViewById(R.id.selectCity)
LinearLayout mLayoutSelectCity;
@ViewById(R.id.cityTitle)
LinearLayout mLayoutCityTitle;
@ViewById(R.id.cityContent)
LinearLayout mLayoutCityContent;
/**
* 标题
*/
@ViewById(R.id.currentCityTxt)
ShimmerTextView mTextViewTitle;
/**
* 添加城市按钮
*/
@ViewById(R.id.addCity)
ImageButton mButtonAddCity;
/**
* 我的城市列表
*/
@ViewById(R.id.currentCityList)
ListView mListViewCurrentCity;
/**
* 城市列表-省
*/
@ViewById(R.id.listProvince)
JazzyListView mListViewProvince;
/**
* 城市列表-市
*/
@ViewById(R.id.listCity)
JazzyListView mListViewCity;
/**
* 城市列表-县
*/
@ViewById(R.id.listTown)
JazzyListView mListViewTown;
/**
* 我的城市列表
*/
@ViewById(R.id.currentCityList)
SwipeListView mListViewMyCity;
/**
* 我的城市中的数据
*/
List<CityModel> citylist;
/**
* 城市适配器
*/
@Bean
CityAdapter adapterProvince;
@Bean
CityAdapter adapterCity;
@Bean
CityAdapter adapterTown;
@Bean
MyCityAapter adapterMyCity;
/**
* 省市县名称
*/
@ViewById
TextView c1;
@ViewById
TextView c2;
@ViewById
TextView c3;
@StringRes
String selectCity;
@StringRes
String myCity;
@AnimationRes
Animation fadeIn;
/** 内容动画 */
private LayoutTransition mTransitioner;
/** 判断动画执行状态状态 */
private boolean animIsStart = false;
/**
* 城市个数
*/
private int numberOfCity;
/**
* 当前选择城市信息
*/
private CityModel currentModel;
private Shimmer shimmer;
/**
* 是否首次进入程序
*/
private boolean isFirst;
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
MobclickAgent.onPause(this);
}
@AfterViews
void initActivity() {
addContentAnim();
viewInit();
toggleCity();
getCityList("province", "", "loadProvince");
}
@Background
void getCityList(String type, String cityid, String jsonp) {
List<CityModel> models = null;
try {
models = CityLogic.Instance()
.getCityList(this, type, cityid, jsonp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateCityList(models, type);
}
@UiThread
void updateCityList(List<CityModel> models, String type) {
dismissProgressDialog();
if (type.equals("province")) {
adapterProvince.appendToList(models);
} else if (type.equals("city")) {
adapterCity.appendToList(models);
} else if (type.equals("town")) {
adapterTown.appendToList(models);
}
}
/**
* 控件初始化
*/
private void viewInit() {
shimmer = new Shimmer();
shimmer.start(mTextViewTitle);
isFirst=app.isFirst();
mListViewProvince.setAdapter(adapterProvince);
mListViewCity.setAdapter(adapterCity);
mListViewTown.setAdapter(adapterTown);
mListViewMyCity.setAdapter(adapterMyCity);
mListViewProvince.setTransitionEffect(JazzyHelper.SLIDE_IN);
mListViewCity.setTransitionEffect(JazzyHelper.SLIDE_IN);
mListViewTown.setTransitionEffect(JazzyHelper.SLIDE_IN);
swipeListviewSetting();
}
/**
* 侧滑Listview配置
*/
private void swipeListviewSetting() {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenwidth = size.x;
// 滑动模式为仅支持左滑
mListViewMyCity.setSwipeMode(SwipeListView.SWIPE_MODE_LEFT);
mListViewMyCity.setSwipeActionLeft(0);
mListViewMyCity.setSwipeActionRight(0);
mListViewMyCity.setOffsetLeft(screenwidth / 4 * 3);
mListViewMyCity.setOffsetRight(0);
mListViewMyCity.setAnimationTime(0);
// 支持长按自动滑动
mListViewMyCity.setSwipeOpenOnLongPress(true);
}
/**
* 删除城市操作
*
* @throws Exception
*/
public void deleteCity(int position) throws Exception {
if (citylist.size()<=1) {
showToast("好歹留一个呗!");
}else {
MobclickAgent.onEvent(this, Constants.SUCCESS_DELETE_CITY);
ToJsonStrUtils.deleteCity(this, citylist.get(position));
citylist = ToJsonStrUtils.getCurrentCity(this);
adapterMyCity.appendToList(citylist);
mListViewMyCity.closeOpenedItems();
LogUtils.i("删除城市:"+citylist.get(position).getCityName());
}
}
/**
* 添加内容动画
*/
private void addContentAnim() {
mTransitioner = new LayoutTransition();
mTransitioner.setDuration(duration);
mTransitioner.addTransitionListener(new TransitionListener() {
@Override
public void startTransition(LayoutTransition transition,
ViewGroup container, View view, int transitionType) {
animIsStart = true;
}
@Override
public void endTransition(LayoutTransition transition,
ViewGroup container, View view, int transitionType) {
animIsStart = false;
}
});
mLayoutCityContent.setLayoutTransition(mTransitioner);
// mLayoutSelectCity.setLayoutTransition(mTransitioner);
}
/**
* 城市选择与当前城市的切换
*/
private void toggleCity() {
if (mListViewCurrentCity.getVisibility() == View.GONE) {
mListViewCurrentCity.setVisibility(View.VISIBLE);
mLayoutSelectCity.setVisibility(View.GONE);
mTextViewTitle.setText(myCity);
showMyCity();
mButtonAddCity.setVisibility(View.GONE);
} else {
mListViewCurrentCity.setVisibility(View.GONE);
mLayoutSelectCity.setVisibility(View.VISIBLE);
mTextViewTitle.setText(selectCity);
if (c3.getText().toString().equals("")) {
mButtonAddCity.setVisibility(View.GONE);
}else {
mButtonAddCity.setVisibility(View.VISIBLE);
}
}
}
/**
* 显示当前城市
*/
private void showMyCity() {
if (adapterMyCity.getCount() < 1) {
citylist = new ArrayList<CityModel>();
try {
citylist = ToJsonStrUtils.getCurrentCity(this);
adapterMyCity.appendToList(citylist);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void allItemClick(int type) {
if(!HttpUtils.isNetworkConnAvail(this)){
showToast(">﹏<没有网络,稍后再试");
}
mButtonAddCity.setVisibility(View.GONE);
}
/**
* 显示ShortToast
*/
public void showToast(String pMsg) {
showToast(pMsg,null);
}
public void showToast(String pMsg,Style style) {
if (style==null) {
style=Style.ALERT;
}
Crouton.makeText(this, pMsg, style, R.id.toast_cityconten).show();
}
@ItemClick
void listProvinceItemClicked(CityModel model) {
getCityList("city", model.getCityId(), "loadCity");
showProgressDialog();
allItemClick(1);
mLayoutCityTitle.setVisibility(View.VISIBLE);
c1.setText(model.getCityName());
adapterTown.clear();
c2.setVisibility(View.INVISIBLE);
mListViewCity.setVisibility(View.VISIBLE);
mListViewTown.setVisibility(View.GONE);
c2.setText("");
c3.setText("");
if (isFirst) {
showToast("点击标题可切换到我的城市",Style.INFO);
isFirst=false;
app.setFirst(isFirst);
}
}
@ItemClick
void listCityItemClicked(CityModel model) {
getCityList("town", model.getCityId(), "loadTown");
showProgressDialog();
allItemClick(2);
c2.setVisibility(View.VISIBLE);
mListViewTown.setVisibility(View.VISIBLE);
c2.setText(model.getCityName());
c3.setText("");
}
@ItemClick
void listTownItemClicked(CityModel model) {
allItemClick(3);
c3.setText(model.getCityName());
mButtonAddCity.setVisibility(View.VISIBLE);
currentModel = model;
}
@Click
void addCityClicked() {
if (!HttpUtils.isNetworkConnAvail(this)) {
showToast(">﹏<没有网络,稍后再试");
return;
}
int length = ToJsonStrUtils.getCityListLength(this);
if (length >= 5) {
showToast("最多添加5个城市");
return;
}
ObjectAnimator.ofFloat(mButtonAddCity, "alpha", 1, 0, 1)
.setDuration(duration).start();
if (ToJsonStrUtils.isCityExist(this, currentModel.getCityId())) {
showToast("城市已存在");
} else {
// showToast("添加成功");
MobclickAgent.onEvent(this, Constants.SUCCESS_ADD_CITY);
String oldstr = ACache.get(this).getAsString(
PreferencesUtils.LIST_OF_CITY);
ACache.get(this).put(PreferencesUtils.LIST_OF_CITY,
ToJsonStrUtils.addCityToJson(oldstr, currentModel));
this.setResult(1);
this.finish();
}
}
@Click
void currentCityTxtClicked() {
if (!animIsStart) {
toggleCity();
}
}
}