package cn.edu.njupt.allgo.activity;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher;
import cn.edu.njupt.allgo.R;
import cn.edu.njupt.allgo.fragment.AllEventFRAGMENT;
import cn.edu.njupt.allgo.fragment.BaseFRAGMENT;
import cn.edu.njupt.allgo.fragment.ContactFRAGMENT;
import cn.edu.njupt.allgo.fragment.MyHomePageFRAGMENT;
import cn.edu.njupt.allgo.fragment.UnreadFRAGMENT;
import cn.edu.njupt.allgo.service.PullService;
import cn.edu.njupt.allgo.vo.EventVo;
import android.app.ActionBar;
import android.app.NotificationManager;
import android.support.v4.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class HomeACTIVITY extends FragmentActivity{
private PullToRefreshAttacher mPullToRefreshAttacher;
private ActionBar mActionBar;
private HomeReceiver homeReceiver = new HomeReceiver();;
private BaseFRAGMENT currentFragment = null ;
private AllEventFRAGMENT alleventFragment ;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mHomeTitles;
private int position = -1;
private ContactFRAGMENT contactFragment;
private long mExitTime;
private String TAG = "HomeActivity";
private MenuItem actionItem_unread;
//广播接收机
public class HomeReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
int action = intent.getIntExtra("action", -1);
Log.i(TAG, "cn.edu.njupt.allgo.HomeACTIVITY" + action);
switch(action){
case 0: //关闭activiy信号
finish();
break;
case 1: //登录过期,转到LogOffACTIVITY
Toast.makeText(HomeACTIVITY.this, "登录过期", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(HomeACTIVITY.this,LogOffACTIVITY.class);
intent1.putExtra("action", 1);
startActivity(intent1);
break;
case 2:
Log.i(TAG,"unread==>case 2");
actionItem_unread.setIcon(R.drawable.ic_action_email_full);
break;
}
}
}
@Override
protected void onDestroy() {
unregisterReceiver(homeReceiver);
super.onDestroy();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
homeReceiver = new HomeReceiver();
IntentFilter intentFilter = new IntentFilter("cn.edu.njupt.allgo.HomeACTIVITY");
registerReceiver(homeReceiver, intentFilter);
Intent intent = new Intent(this,PullService.class);
intent.putExtra("action", 1);
startService(intent);
setContentView(R.layout.activity_home);
mPullToRefreshAttacher = PullToRefreshAttacher.get(this);
findViewById(savedInstanceState);
initView();
if(savedInstanceState == null) {
selectItem(1);
}
Log.i(TAG,"==> HomeCTIVITY初始化完毕");
}
private void initView() {
// TODO initView
//actionbar和viewpager的初始化
mActionBar = getActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
//drawer 的初始化
creatdrawer();
}
private void findViewById(Bundle savedInstanceState) {
// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
}
}
private boolean isActivity(int position){
//TODO intent需要修改的地方
boolean flag = true ;
if(position != 4 && position != 2 && position != 0){
flag = false;
}
return flag;
}
//此方法用于改变主页显示的内容,以及actionbar的tab
private void pagerchange(int position) {
//公共操作
if(!isActivity(position)) {
this.position = position ; //改变FLAG
mActionBar.removeAllTabs();//清空 ActionBar的所有TAB
}
/**
* 我的主页0;所有活动1;我的消息2; 联系人3;设置4;退出5
*/
switch(position){
case 0: //载入introFragment;lifehistoryFragment
// Create an instance of ExampleFragment
/*if(myhomepageFragment == null) {
myhomepageFragment = new MyHomePageFRAGMENT();
}
switchContent(myhomepageFragment);*/
Intent intent=new Intent();
intent.setClass(HomeACTIVITY.this,IntroACTIVITY.class);
startActivity(intent);
break;
case 1: //载入commoneventFragment;friendseventFragment
if(alleventFragment == null) {
alleventFragment = new AllEventFRAGMENT();
}
switchContent(alleventFragment);
break;
case 2: //载入unreadACTIVITY
openUnread();
break;
case 3: //载入contactlistFragment;chatlistFragment
if(contactFragment == null) {
contactFragment = new ContactFRAGMENT();
}
switchContent(contactFragment);
break;
case 4: //载入settingACTIVITY
Intent intent1=new Intent();
intent1.setClass(HomeACTIVITY.this,SettingACTIVITY.class);
startActivity(intent1);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
break;
case 5: //退出
this.finish();
break;
default:Log.e(TAG,"点击了未知位置==>" + position);
}
}
//用于切换父级Fragment
public void switchContent(BaseFRAGMENT to) {
if(currentFragment != null) {
currentFragment.onPause();
currentFragment.onStop();
if (currentFragment != to) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() ;
if (!to.isAdded()) { // 先判断是否被add过
to.setBarFlag(true);
transaction.hide(currentFragment).add(R.id.fragment_container, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
} else {
to.initActionBar();
to.onStart();
to.onResume();
transaction.hide(currentFragment).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
}
}else {
to.setBarFlag(true);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() ;
transaction.add(R.id.fragment_container, to).commit();
}
currentFragment = to;
}
public PullToRefreshAttacher getPullToRefreshAttacher() {
return mPullToRefreshAttacher;
}
/*@Override
protected void onSaveInstanceState (Bundle outState) {
Log.i("debug","==onSaveInstanceState==>");
OnSaveData onSaveDate = new OnSaveData(currentFragment) ;
outState.putSerializable("onSaveDate", onSaveDate);
outState.putInt("position", this.position);
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
Log.i("debug","==onRestoreInstanceState==>");
OnSaveData onSaveDate = (OnSaveData) savedInstanceState.getSerializable("onSaveDate") ;
this.currentFragment = onSaveDate.getFragment() ;
this.currentFragment.setBarFlag(true);
int arg0 = savedInstanceState.getInt("position");
selectItem(arg0);
}*/
/*************************************生成抽屉方法开始***************************************/
/**
* drawer 的初始化方法
*/
private void creatdrawer() {
// TODO 生成抽屉方法开始
mTitle = mDrawerTitle = getTitle();
mHomeTitles = getResources().getStringArray(R.array.home_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view with items and click listener
mDrawerList.setAdapter(new ArrayAdapter<String>(this,R.layout.drawer_list_item,mHomeTitles));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// enable ActionBar app icon to behave as action to toggle nav drawer
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
mActionBar.setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 此时关闭抽屉
}
public void onDrawerOpened(View drawerView) {
mActionBar.setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 此时打开抽屉
View v=mDrawerList.getChildAt(position);
v.setBackgroundColor(Color.GRAY);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
if(!isActivity(position)){
for(int i=0;i<parent.getCount();i++){
View v=parent.getChildAt(i);
if (position == i) {
v.setBackgroundColor(Color.GRAY);
} else {
v.setBackgroundColor(Color.TRANSPARENT);
}
}
}
}
}
//点击抽屉选项的操作
private void selectItem(int position) {
if(!(this.position == position)) {
pagerchange(position); //调用方法改变viewpage的内容
} ;
// update selected item and title, then close the drawer
if(isActivity(position)) {
mDrawerList.setItemChecked(this.position, true);
setTitle(mHomeTitles[this.position]);
mDrawerLayout.closeDrawer(mDrawerList);
}else {
mDrawerList.setItemChecked(position, true);
setTitle(mHomeTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
}
/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
actionItem_unread = menu.add(Menu.NONE, Menu.NONE, 6,"消息") ;
actionItem_unread.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
actionItem_unread.setIcon(R.drawable.ic_action_email);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
if(item.getTitle().equals("消息")){
openUnread();
return true;
}
return super.onOptionsItemSelected(item);
}
//打开消息界面
private void openUnread() {
Intent intent = new Intent(this,UnreadACTIVITY.class);
startActivity(intent);
if(actionItem_unread != null){
actionItem_unread.setIcon(R.drawable.ic_action_email);
}
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(1001);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
mActionBar.setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
/*************************************生成抽屉方法结束***************************************/
//按两次退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, "再按一次退出都来", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
//此方法可保证从resume()状态传入intent
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);// must store the new intent unless getIntent() will
// return the old one
}
@Override
protected void onPause() {
// TODO 自动生成的方法存根
super.onPause();
Log.i(TAG, "onPause==>HomeActivity");
}
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
int action = intent.getIntExtra("action", -1);
Log.i(TAG,"onResume==>HomeAvtivity==>"+action);
switch(action){
case 1:
openUnread();
break;
case 2:
if(alleventFragment != null){
EventVo event = (EventVo) intent.getSerializableExtra("deletevent");
alleventFragment.deleteEvent(event);
}
break;
}
intent = new Intent();
setIntent(intent);
}
//复写finish方法
@Override
public void finish() {
super.finish();
Intent intent = new Intent(this,PullService.class);
intent.putExtra("action", 2);
startService(intent);
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
boolean syncConnPref = sharedPref.getBoolean(SettingACTIVITY.PrefsFragment.KEY_PREF_BACK_PULL, false);
SharedPreferences sharedPref1 = getSharedPreferences("userdata",Context.MODE_PRIVATE);
if(sharedPref1.getInt("uid", -1) == -1){
syncConnPref = false; //没有登录
}
if(syncConnPref){ //判断是否开启后台推送
Log.i("Service", "开启后台推送");
Intent intent1 = new Intent(this,PullService.class);
intent1.putExtra("action", 3);
startService(intent1);
}else{
Intent intent2 = new Intent(this,PullService.class);
stopService(intent2);
}
}
}