package com.devtf_l.app.activity;
import java.util.ArrayList;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import butterknife.InjectView;
import com.devtf_l.app.R;
import com.devtf_l.app.adapter.ToolbarMenudrawerAdapter;
import com.devtf_l.app.base.BaseActivity;
import com.devtf_l.app.base.BaseFragment;
import com.devtf_l.app.entry.Icons;
import com.devtf_l.app.fragments.AboutFragment;
import com.devtf_l.app.fragments.MainFragment;
import com.devtf_l.app.net.WebAPI;
/**
* @desc main
* @author ljh lijunhuayc@sina.com 2015-4-26
*/
public final class ToolbarMenudrawerActivity extends BaseActivity {
@InjectView(R.id.toolbar)
Toolbar mToolbar;
@InjectView(R.id.leftDrawer)
ListView mDrawerList;
@InjectView(R.id.drawer_layout)
DrawerLayout mDrawerLayout;
protected ActionBarDrawerToggle mDrawerToggle;
protected ArrayList<Icons> icons;
protected ToolbarMenudrawerAdapter adapter;
protected String[] MDTitles;
BaseFragment mainFragment = new MainFragment();
BaseFragment aboutFragment = new AboutFragment();
FragmentManager mFragmentManager;
FragmentTransaction mFTransaction;
BaseFragment mCurrent = null;
int containerViewId;
@Override
protected void init() {
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(R.string.app_name);
containerViewId = R.id.content_frame;
mFragmentManager = getSupportFragmentManager();
final ViewGroup header = (ViewGroup) mInflater.inflate(R.layout.left_drawer_header, mDrawerList, false);
final ViewGroup footer = (ViewGroup) mInflater.inflate(R.layout.left_drawer_footer, mDrawerList, false);
mDrawerList.addHeaderView(header, null, true);
mDrawerList.addFooterView(footer, null, true);
//
MDTitles = getResources().getStringArray(R.array.navigation_main_sections);
TypedArray MDIcons = getResources().obtainTypedArray(R.array.navigation_main_sections_drawable_ids);
icons = new ArrayList<Icons>();
icons.add(new Icons(MDTitles[0], MDIcons.getResourceId(0, -1)));
icons.add(new Icons(MDTitles[1], MDIcons.getResourceId(1, -2)));
icons.add(new Icons(MDTitles[2], MDIcons.getResourceId(2, -3)));
icons.add(new Icons(MDTitles[3], MDIcons.getResourceId(3, -4)));
MDIcons.recycle();
adapter = new ToolbarMenudrawerAdapter(getApplicationContext(), icons);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
};
mDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mDrawerToggle);
selectItem(0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
firstStart();
super.onCreate(savedInstanceState);
}
@Override
protected int initLayout() {
return R.layout.toolbarmenudrawer;
}
@Override
protected void initListener() {
}
@Override
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onPostCreate(savedInstanceState, persistentState);
// 没执行,待咨询
}
/**
* @Description: 首次启动跳转到导航页
* @author (ljh) @date 2015-4-27 下午4:25:56
* @return void
*/
private void firstStart() {
SharedPreferences first = PreferenceManager.getDefaultSharedPreferences(this);
if (getIntent().getBooleanExtra("EXIT", false)) {
super.finish();
}
if (!first.getBoolean("firstTime", false)) {
Intent intent = new Intent(this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
SharedPreferences.Editor editor = first.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.toolbarmenudrawer_menu, menu);
menu.add(Menu.NONE, R.id.id_menu_update, 0, "检测新版本").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
return super.onCreateOptionsMenu(menu);
}
/**
* (non-Javadoc)
* <p>
* Title: onPrepareOptionsMenu
* </p>
* <p>
* Description: onPrepareOptions后需要刷新menu
* </p>
* <p>
* {@link BaseActivity#refreshOptionsMenu()}
* </p>
*
* @param menu
* @return
* @see android.app.Activity#onPrepareOptionsMenu(android.view.Menu)
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {// 屏蔽menu键
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.option1:
Toast.makeText(this, "Option 1", Toast.LENGTH_SHORT).show();
break;
case R.id.option2:
Toast.makeText(this, "Option 2", Toast.LENGTH_SHORT).show();
break;
case R.id.option3:
Toast.makeText(this, "Option 3", Toast.LENGTH_SHORT).show();
break;
default:
}
return super.onOptionsItemSelected(item);
}
long exitTime = 0;
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerVisible(Gravity.START))
mDrawerLayout.closeDrawer(Gravity.START);
else if (mCurrent != mainFragment)
selectItem(0);// 返回键切换到 MainFragment
else if (mCurrent == mainFragment && ((MainFragment) mainFragment).getCurrentPager() != 0)
((MainFragment) mainFragment).setCurrentPager(0);
else {
if ((System.currentTimeMillis() - exitTime) > 2000) {
showToast("再点一次返回桌面");
exitTime = System.currentTimeMillis();
} else { // 两次点击后,实现home键效果
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMain.addCategory(Intent.CATEGORY_HOME);
startActivity(startMain);
}
}
}
/**
* @Description: 切换fragment
* @author (ljh) @date 2015-4-28 下午1:16:16
* @param mCurrent
* @param toFragment
* @return void
*/
private void switchFragment(BaseFragment toFragment) {
if (mCurrent != toFragment) {
if (toFragment.isAdded()) {
mFTransaction.hide(mCurrent).show(toFragment);
} else {
if (null != mCurrent) {
mFTransaction.hide(mCurrent);
}
mFTransaction.add(containerViewId, toFragment);
mFTransaction.addToBackStack(null);
}
mCurrent = toFragment;
hideInputMethod();
}
}
private void selectItem(int position) {
mFTransaction = mFragmentManager.beginTransaction();
// .setCustomAnimations(enter, exit, popEnter, popExit); //添加fragment动画
// material design
Intent intent = new Intent(mContext, WebViewActivity.class);
switch (position) {
case 0:
getSupportActionBar().setTitle(R.string.app_name);
switchFragment(mainFragment);
break;
case 1:
intent.putExtra("url", WebAPI.CONTRIBUTE_URL);
startActivity(intent);
return;
case 2:
intent.putExtra("url", WebAPI.FEED_BACK_URL);
startActivity(intent);
return;
case 3:
intent.putExtra("url", WebAPI.COPYRIGHT_URL);
startActivity(intent);
return;
case 4:
if (mainFragment.isHidden()) {
getSupportActionBar().setTitle(R.string.app_name);
switchFragment(mainFragment);
}
((MainFragment) mainFragment).setCurrentPager(3);
break;
case 5:
getSupportActionBar().setTitle("关于");
switchFragment(aboutFragment);
break;
}
mFTransaction.commit();
mDrawerList.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}