package cn.eoe.app.ui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import com.umeng.fb.FeedbackAgent;
import org.apache.http.message.BasicNameValuePair;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import cn.eoe.app.R;
import cn.eoe.app.adapter.BasePageAdapter;
import cn.eoe.app.biz.BaseDao;
import cn.eoe.app.biz.BlogsDao;
import cn.eoe.app.biz.NewsDao;
import cn.eoe.app.biz.TopDao;
import cn.eoe.app.biz.WikiDao;
import cn.eoe.app.config.Constants;
import cn.eoe.app.db.DBHelper;
import cn.eoe.app.entity.BlogsResponseEntity;
import cn.eoe.app.entity.CategorysEntity;
import cn.eoe.app.entity.NavigationModel;
import cn.eoe.app.entity.NewsResponseEntity;
import cn.eoe.app.entity.WikiResponseEntity;
import cn.eoe.app.https.NetWorkHelper;
import cn.eoe.app.indicator.PageIndicator;
import cn.eoe.app.slidingmenu.SlidingMenu;
import cn.eoe.app.ui.base.BaseSlidingFragmentActivity;
import cn.eoe.app.utils.IntentUtil;
import cn.eoe.app.utils.PopupWindowUtil;
import cn.eoe.app.widget.CustomButton;
public class MainActivity extends BaseSlidingFragmentActivity implements
OnClickListener, AnimationListener {
private final String LIST_TEXT = "text";
private final String LIST_IMAGEVIEW = "img";
// [start]变量
/**
* 数字代表列表顺序
*/
private int mTag = 0;
private CustomButton cbFeedback;
private CustomButton cbAbove;
private View title;
private LinearLayout mlinear_listview;
// title标题
private ImageView imgQuery;
private ImageView imgMore;
private ImageView imgLeft;
private ImageView imgRight;
private FrameLayout mFrameTv;
private ImageView mImgTv;
// views
private ViewPager mViewPager;
private BasePageAdapter mBasePageAdapter;
private PageIndicator mIndicator;
private LinearLayout loadLayout;
private LinearLayout loadFaillayout;
// init daos
private TopDao topDao;
private BlogsDao blogsDao;
private NewsDao newsDao;
private WikiDao wikiDao;
private List<Object> categoryList;
private List<NavigationModel> navs;
private ListView lvTitle;
private SimpleAdapter lvAdapter;
private LinearLayout llGoHome;
private ImageButton imgLogin;
private Button bn_refresh;
private TextView mAboveTitle;
private SlidingMenu sm;
private boolean mIsTitleHide = false;
private boolean mIsAnim = false;
// load responseData
private BlogsResponseEntity responseData;
private NewsResponseEntity newsResponseData;
private WikiResponseEntity wikiResponseData;
private String current_page;
private InputMethodManager imm;
private boolean isShowPopupWindows = false;
// [end]
// [start]生命周期
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSlidingMenu();
setContentView(R.layout.above_slidingmenu);
initClass();
initControl();
initViewPager();
initListView();
initgoHome();
initNav();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
try {
DBHelper db = DBHelper.getInstance(this);
db.closeDb();
} catch (Exception e) {
e.printStackTrace();
}
}
// [end]
// [start]初始化函数
private void initSlidingMenu() {
setBehindContentView(R.layout.behind_slidingmenu);
// customize the SlidingMenu
sm = getSlidingMenu();
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// sm.setFadeDegree(0.35f);
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
sm.setShadowDrawable(R.drawable.slidingmenu_shadow);
//sm.setShadowWidth(20);
sm.setBehindScrollScale(0);
}
private void initControl() {
imm = (InputMethodManager) getApplicationContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
loadLayout = (LinearLayout) findViewById(R.id.view_loading);
loadFaillayout = (LinearLayout) findViewById(R.id.view_load_fail);
mAboveTitle = (TextView) findViewById(R.id.tv_above_title);
mAboveTitle.setText("社区精选");
imgQuery = (ImageView) findViewById(R.id.imageview_above_query);
imgQuery.setOnClickListener(this);
imgQuery.setVisibility(View.GONE);
imgMore = (ImageView) findViewById(R.id.imageview_above_more);
imgMore.setOnClickListener(this);
imgLeft = (ImageView) findViewById(R.id.imageview_above_left);
imgRight = (ImageView) findViewById(R.id.imageview_above_right);
// editSearch.setOnKeyListener(onkey);
mViewPager = (ViewPager) findViewById(R.id.above_pager);
mIndicator = (PageIndicator) findViewById(R.id.above_indicator);
lvTitle = (ListView) findViewById(R.id.behind_list_show);
llGoHome = (LinearLayout) findViewById(R.id.Linear_above_toHome);
imgLogin = (ImageButton) findViewById(R.id.login_login);
imgLogin.setOnClickListener(this);
cbFeedback = (CustomButton) findViewById(R.id.cbFeedback);
cbFeedback.setOnClickListener(this);
cbAbove = (CustomButton) findViewById(R.id.cbAbove);
cbAbove.setOnClickListener(this);
title = findViewById(R.id.main_title);
mlinear_listview = (LinearLayout) findViewById(R.id.main_linear_listview);
mFrameTv = (FrameLayout) findViewById(R.id.fl_off);
mImgTv = (ImageView) findViewById(R.id.iv_off);
bn_refresh = (Button) findViewById(R.id.bn_refresh);
bn_refresh.setOnClickListener(this);
}
private void initClass() {
blogsDao = new BlogsDao(this);
newsDao = new NewsDao(this);
wikiDao = new WikiDao(this);
topDao = new TopDao(this);
}
private void initViewPager() {
mBasePageAdapter = new BasePageAdapter(MainActivity.this);
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mBasePageAdapter);
mIndicator.setViewPager(mViewPager);
mIndicator.setOnPageChangeListener(new MyPageChangeListener());
new MyTask().execute(topDao);
}
private void initListView() {
lvAdapter = new SimpleAdapter(this, getData(),
R.layout.behind_list_show, new String[]{LIST_TEXT,
LIST_IMAGEVIEW},
new int[]{R.id.textview_behind_title,
R.id.imageview_behind_icon}) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub.
View view = super.getView(position, convertView, parent);
if (position == mTag) {
view.setBackgroundResource(R.drawable.back_behind_list);
lvTitle.setTag(view);
} else {
view.setBackgroundColor(Color.TRANSPARENT);
}
return view;
}
};
lvTitle.setAdapter(lvAdapter);
lvTitle.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
NavigationModel navModel = navs.get(position);
mAboveTitle.setText(navModel.getName());
current_page = navModel.getTags();
if (lvTitle.getTag() != null) {
if (lvTitle.getTag() == view) {
MainActivity.this.showContent();
return;
}
((View) lvTitle.getTag())
.setBackgroundColor(Color.TRANSPARENT);
}
lvTitle.setTag(view);
view.setBackgroundResource(R.drawable.back_behind_list);
imgQuery.setVisibility(View.VISIBLE);
switch (position) {
case 0:
imgQuery.setVisibility(View.GONE);
new MyTask().execute(topDao);
break;
case 1:
new MyTask().execute(newsDao);
break;
case 2:
new MyTask().execute(wikiDao);
break;
case 3:
new MyTask().execute(blogsDao);
break;
}
}
});
}
private void initNav() {
navs = new ArrayList<NavigationModel>();
NavigationModel nav1 = new NavigationModel(getResources().getString(
R.string.menuGood), "");
NavigationModel nav2 = new NavigationModel(getResources().getString(
R.string.menuNews), Constants.TAGS.NEWS_TAG);
NavigationModel nav3 = new NavigationModel(getResources().getString(
R.string.menuStudio), Constants.TAGS.WIKI_TAG);
NavigationModel nav4 = new NavigationModel(getResources().getString(
R.string.menuBlog), Constants.TAGS.BLOG_TAG);
Collections.addAll(navs, nav1, nav2, nav3, nav4);
}
private void initgoHome() {
llGoHome.setOnClickListener(this);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put(LIST_TEXT, getResources().getString(R.string.menuGood));
map.put(LIST_IMAGEVIEW, R.drawable.dis_menu_handpick);
list.add(map);
map = new HashMap<String, Object>();
map.put(LIST_TEXT, getResources().getString(R.string.menuNews));
map.put(LIST_IMAGEVIEW, R.drawable.dis_menu_news);
list.add(map);
map = new HashMap<String, Object>();
map.put(LIST_TEXT, getResources().getString(R.string.menuStudio));
map.put(LIST_IMAGEVIEW, R.drawable.dis_menu_studio);
list.add(map);
map = new HashMap<String, Object>();
map.put(LIST_TEXT, getResources().getString(R.string.menuBlog));
map.put(LIST_IMAGEVIEW, R.drawable.dis_menu_blog);
list.add(map);
return list;
}
// [end]
// [start]继承方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.Linear_above_toHome:
showMenu();
break;
case R.id.login_login:
SharedPreferences share = this.getSharedPreferences(
UserLoginUidActivity.SharedName, Context.MODE_PRIVATE);
// [start] 修复上一个bug
String Key = share.getString(UserLoginUidActivity.KEY, "");
if (Key != "" && !Key.contains(":")) {
Editor edit = share.edit();
edit.putString(UserLoginUidActivity.KEY, "");
edit.commit();
}
// [end] 下一版本删除掉
if (share.contains(UserLoginUidActivity.KEY)
&& !share.getString(UserLoginUidActivity.KEY, "")
.equals("")) {
IntentUtil.start_activity(this, UserCenterActivity.class);
} else {
IntentUtil.start_activity(this, UserLoginActivity.class);
}
break;
case R.id.imageview_above_more:
if (isShowPopupWindows) {
new PopupWindowUtil(mViewPager).showActionWindow(v, this,
mBasePageAdapter.tabs);
}
break;
case R.id.imageview_above_query:
if (NetWorkHelper.isNetworkAvailable(MainActivity.this)) {
IntentUtil.start_activity(this, SearchActivity.class,
new BasicNameValuePair("tag", current_page));
} else {
Toast.makeText(getApplicationContext(), "网络连接失败,请检查网络",
Toast.LENGTH_LONG).show();
}
break;
case R.id.cbFeedback:
FeedbackAgent agent = new FeedbackAgent(this);
agent.startFeedbackActivity();
break;
case R.id.cbAbove:
IntentUtil.start_activity(this, AboutActivity.class);
break;
case R.id.bn_refresh:
switch (mTag) {
case 0:
imgQuery.setVisibility(View.GONE);
new MyTask().execute(topDao);
break;
case 1:
new MyTask().execute(newsDao);
break;
case 2:
new MyTask().execute(wikiDao);
break;
case 3:
new MyTask().execute(blogsDao);
break;
default:
break;
}
break;
}
}
/**
* 连续按两次返回键就退出
*/
private int keyBackClickCount = 0;
@Override
protected void onResume() {
super.onResume();
keyBackClickCount = 0;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
switch (keyBackClickCount++) {
case 0:
Toast.makeText(this,
getResources().getString(R.string.press_again_exit),
Toast.LENGTH_SHORT).show();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
keyBackClickCount = 0;
}
}, 3000);
break;
case 1:
mFrameTv.setVisibility(View.VISIBLE);
mImgTv.setVisibility(View.VISIBLE);
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.tv_off);
anim.setAnimationListener(new tvOffAnimListener());
mImgTv.startAnimation(anim);
break;
default:
break;
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
if (sm.isMenuShowing()) {
toggle();
} else {
showMenu();
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
super.dispatchTouchEvent(event);
if (mIsAnim || mViewPager.getChildCount() <= 1) {
return false;
}
final int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
lastY = y;
lastX = x;
return false;
case MotionEvent.ACTION_MOVE:
float dY = Math.abs(y - lastY);
float dX = Math.abs(x - lastX);
boolean down = y > lastY ? true : false;
lastY = y;
lastX = x;
if (dX < 8 && dY > 8 && !mIsTitleHide && !down) {
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_top_in);
// anim.setFillAfter(true);
anim.setAnimationListener(MainActivity.this);
title.startAnimation(anim);
} else if (dX < 8 && dY > 8 && mIsTitleHide && down) {
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_top_out);
// anim.setFillAfter(true);
anim.setAnimationListener(MainActivity.this);
title.startAnimation(anim);
} else {
return false;
}
mIsTitleHide = !mIsTitleHide;
mIsAnim = true;
break;
default:
return false;
}
return false;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
// [end]
/**
* 加载分类list的task
*
* @author wangxin
*/
public class MyTask extends AsyncTask<BaseDao, String, Map<String, Object>> {
private boolean mUseCache;
public MyTask() {
mUseCache = true;
}
public MyTask(boolean useCache) {
mUseCache = useCache;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
imgLeft.setVisibility(View.GONE);
imgRight.setVisibility(View.GONE);
loadLayout.setVisibility(View.VISIBLE);
mViewPager.setVisibility(View.GONE);
mViewPager.removeAllViews();
mBasePageAdapter.Clear();
MainActivity.this.showContent();
super.onPreExecute();
isShowPopupWindows = false;
}
@Override
protected Map<String, Object> doInBackground(BaseDao... params) {
BaseDao dao = params[0];
List<CategorysEntity> categorys = new ArrayList<CategorysEntity>();
Map<String, Object> map = new HashMap<String, Object>();
if (dao instanceof TopDao) {
mTag = 0;
if ((categoryList = topDao.mapperJson(mUseCache)) != null) {
categorys = topDao.getCategorys();
map.put("tabs", categorys);
map.put("list", categoryList);
}
} else if (dao instanceof BlogsDao) {
mTag = 3;
if ((responseData = blogsDao.mapperJson(mUseCache)) != null) {
categoryList = (List) responseData.getList();
categorys = responseData.getCategorys();
map.put("tabs", categorys);
map.put("list", categoryList);
}
} else if (dao instanceof NewsDao) {
mTag = 1;
if ((newsResponseData = newsDao.mapperJson(mUseCache)) != null) {
categoryList = (List) newsResponseData.getList();
categorys = newsResponseData.getCategorys();
map.put("tabs", categorys);
map.put("list", categoryList);
}
} else if (dao instanceof WikiDao) {
mTag = 2;
if ((wikiResponseData = wikiDao.mapperJson(mUseCache)) != null) {
categoryList = (List) wikiResponseData.getList();
categorys = wikiResponseData.getCategorys();
map.put("tabs", categorys);
map.put("list", categoryList);
}
} else {
return null;
}
return map;
}
@Override
protected void onPostExecute(Map<String, Object> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
isShowPopupWindows = true;
mBasePageAdapter.Clear();
mViewPager.removeAllViews();
if (!result.isEmpty()) {
mBasePageAdapter.addFragment((List) result.get("tabs"),
(List) result.get("list"));
imgRight.setVisibility(View.VISIBLE);
loadLayout.setVisibility(View.GONE);
loadFaillayout.setVisibility(View.GONE);
} else {
mBasePageAdapter.addNullFragment();
loadLayout.setVisibility(View.GONE);
loadFaillayout.setVisibility(View.VISIBLE);
}
mViewPager.setVisibility(View.VISIBLE);
mBasePageAdapter.notifyDataSetChanged();
mViewPager.setCurrentItem(0);
mIndicator.notifyDataSetChanged();
}
}
/**
* viewPager切换页面
*
* @author mingxv
*/
class MyPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
if (arg0 == 0) {
getSlidingMenu().setTouchModeAbove(
SlidingMenu.TOUCHMODE_FULLSCREEN);
imgLeft.setVisibility(View.GONE);
} else if (arg0 == mBasePageAdapter.mFragments.size() - 1) {
imgRight.setVisibility(View.GONE);
getSlidingMenu()
.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
} else {
imgRight.setVisibility(View.VISIBLE);
imgLeft.setVisibility(View.VISIBLE);
getSlidingMenu()
.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
}
}
}
class tvOffAnimListener implements AnimationListener {
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
defaultFinish();
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
if (mIsTitleHide) {
title.setVisibility(View.GONE);
} else {
}
mIsAnim = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
title.setVisibility(View.VISIBLE);
if (mIsTitleHide) {
FrameLayout.LayoutParams lp = (LayoutParams) mlinear_listview
.getLayoutParams();
lp.setMargins(0, 0, 0, 0);
mlinear_listview.setLayoutParams(lp);
} else {
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) title
.getLayoutParams();
lp.setMargins(0, 0, 0, 0);
title.setLayoutParams(lp);
FrameLayout.LayoutParams lp1 = (LayoutParams) mlinear_listview
.getLayoutParams();
lp1.setMargins(0,
getResources().getDimensionPixelSize(R.dimen.title_height),
0, 0);
mlinear_listview.setLayoutParams(lp1);
}
}
private float lastX = 0;
private float lastY = 0;
}