package com.v2ex.v2droid;
import java.util.ArrayList;
import java.util.List;
import org.holoeverywhere.ArrayAdapter;
import org.holoeverywhere.ThemeManager;
import org.holoeverywhere.app.Fragment;
import org.holoeverywhere.slidingmenu.SlidingActivity;
import org.holoeverywhere.slidingmenu.SlidingMenu;
import org.holoeverywhere.widget.TextView;
import org.holoeverywhere.widget.Toast;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.actionbarsherlock.app.ActionBar;
import com.readystatesoftware.viewbadger.BadgeView;
public class MainActivity extends SlidingActivity {
public static String TOPIC_ID = null;
public static String MORE_TAG;
private final class ListNavigationAdapter extends
ArrayAdapter<MainNavigationItem> implements OnItemClickListener {
private int lastSelectedItem = 0;
private int preSelectedItem = -1;
private View messageView = null;
private TextView usernameView = null;
BadgeView badge = null;
public ListNavigationAdapter() {
this(new ArrayList<MainNavigationItem>());
}
public ListNavigationAdapter(List<MainNavigationItem> list) {
super(MainActivity.this, android.R.id.text1, list);
}
public void add(Class<? extends Fragment> clazz, int title) {
add(new MainNavigationItem(clazz, title));
}
@Override
public View getView(int position, View convertView, ViewGroup container) {
NavigationItem view;
if (convertView == null) {
view = new NavigationItem(MainActivity.this);
view.setSelectionHandlerColorResource(R.color.holo_blue_light);
} else {
view = (NavigationItem) convertView;
}
MainNavigationItem item = getItem(position);
view.setLabel(item.title);
view.setSelectionHandlerVisiblity(lastSelectedItem == position ? View.VISIBLE
: View.INVISIBLE);
if (item.title == R.string.message) {
messageView = view.findViewById(R.id.selectionHandler2);
}
if (item.title == R.string.user) {
usernameView = (TextView) view.findViewById(android.R.id.text1);
String username = AppConfig.getUsername(MainActivity.this);
if (username != null) {
username = "@" + username;
setUsername(username);
}
}
return view;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int itemPosition, long itemId) {
int preSelected = preSelectedItem;
preSelectedItem = lastSelectedItem;
lastSelectedItem = itemPosition;
getIntent().putExtra(LIST_NAVIGATION_PAGE, itemPosition);
MainNavigationItem item = getItem(itemPosition);
if (item.title == R.string.user) {
Intent intent = new Intent(MainActivity.this,
UserActivity.class);
intent.putExtra("EXTRA_USER_ID", getUsername());
startActivity(intent);
lastSelectedItem = preSelectedItem;
preSelectedItem = preSelected;
return;
}
if (preSelected >=0 && preSelectedItem == lastSelectedItem) {
return;
}
notifyDataSetInvalidated();
replaceFragment(item.getFragment());
getSupportActionBar().setTitle(item.title);
getSlidingMenu().showAbove(true);
}
public void onBackPressed() {
lastSelectedItem = preSelectedItem;
notifyDataSetInvalidated();
}
public void setMessageNum(String messageNum) {
System.out.println("setMessageNum");
if (messageView == null) {
System.out.println("messageView==null || messageNum==null");
return;
}
if (badge == null) {
badge = new BadgeView(MainActivity.this, messageView);
badge.setBadgeBackgroundColor(Color.parseColor("#FF4444"));
badge.setBadgePosition(BadgeView.POSITION_CENTER);
}
if (messageNum == null) {
badge.hide();
} else {
badge.setText(messageNum);
badge.show();
}
}
public void setUsername(String username) {
if (usernameView == null || username == null) {
return;
}
usernameView.setText(username);
}
}
private static final class MainNavigationItem {
public final Class<? extends Fragment> clazz;
private Fragment fragment;
public final int title;
public MainNavigationItem(Class<? extends Fragment> clazz, int title) {
this.clazz = clazz;
this.title = title;
}
public Fragment getFragment() {
if (fragment == null) {
try {
fragment = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
return fragment;
}
}
private static final String LIST_NAVIGATION_PAGE = "listNavigationPage";
private ListNavigationAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MORE_TAG = getResources().getString(R.string.more);
if (adapter == null) {
adapter = new ListNavigationAdapter();
} else {
adapter.clear();
}
adapter.add(TopicFragment.class, R.string.topic);
adapter.add(UserFragment.class, R.string.user);
adapter.add(MessageFragment.class, R.string.message);
adapter.add(FavoriteFragment.class, R.string.favorite);
adapter.add(NodeFragment.class, R.string.node);
adapter.add(SettingFragmen.class, R.string.setting);
adapter.add(AboutFragment.class, R.string.about);
NavigationWidget navigationWidget = new NavigationWidget(this);
navigationWidget.init(adapter, adapter, ThemeManager.getTheme(this),
getIntent().getIntExtra(LIST_NAVIGATION_PAGE, 0));
setBehindContentView(navigationWidget);
final SlidingMenu si = getSlidingMenu();
si.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
si.setBehindWidthRes(R.dimen.demo_menu_width);
si.setShadowWidth(0);
final ActionBar ab = getSupportActionBar();
// ab.setTitle(R.string.app_name);
ab.setDisplayHomeAsUpEnabled(true);
}
public void replaceFragment(Fragment fragment) {
replaceFragment(fragment, null);
}
public void replaceFragment(Fragment fragment, String backStackName) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(android.R.id.content, fragment);
if (backStackName != null) {
ft.addToBackStack(backStackName);
}
ft.commit();
}
public void setDarkTheme(View v) {
ThemeManager.restartWithDarkTheme(this);
}
public void setLightTheme(View v) {
ThemeManager.restartWithLightTheme(this);
}
@Override
public void onBackPressed() {
super.onBackPressed();
adapter.onBackPressed();
}
public boolean checkIsLogin() {
boolean isLogin = AppConfig.getLogin(MainActivity.this);
System.out.println("checkIsLogin=====>" + isLogin);
if (!isLogin) {
startActivityForResult(new Intent(MainActivity.this,
LoginActivity.class), 1);
}
return isLogin;
}
public String getUsername() {
String username = AppConfig.getUsername(MainActivity.this);
return username;
}
public void setMessageNum(String n) {
adapter.setMessageNum(n);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case RESULT_OK:
String username = data.getExtras().getString("username");
String messages = data.getExtras().getString("messages");
adapter.setUsername(username);
// adapter.setMessageNum(messages);
break;
}
}
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
// System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}