package com.mcxiaoke.apptoolkit.menu; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.mcxiaoke.apptoolkit.AppContext; import com.mcxiaoke.apptoolkit.R; import com.mcxiaoke.apptoolkit.app.UIHome; import java.util.ArrayList; import java.util.List; /** * @author mcxiaoke * @version 2.1 2012.04.24 */ public class MenuFragment extends Fragment implements AdapterView.OnItemClickListener { private static final boolean DEBUG = AppContext.isDebug(); private static final String TAG = MenuFragment.class.getSimpleName(); static void debug(String message) { Log.v(TAG, message); } private static final int MENU_ID = 1000; public static final int MENU_ID_HOME = MENU_ID + 1; public static final int MENU_ID_TOOLKIT = MENU_ID + 2; public static final int MENU_ID_PROCESS = MENU_ID + 3; public static final int MENU_ID_BACKUP = MENU_ID + 4; public static final int MENU_ID_SYSTEM = MENU_ID + 5; public static final int MENU_ID_FILE = MENU_ID + 6; public static final int MENU_ID_SERVICE = MENU_ID + 7; public static final int MENU_ID_COMPONENT = MENU_ID + 8; public static final int MENU_ID_CACHE = MENU_ID + 10; public static final int MENU_ID_OPTION = MENU_ID + 49; public static final int MENU_ID_ABOUT = MENU_ID + 50; public static final int MENU_ID_DEBUG = MENU_ID + 99; private ListView mListView; private TextView mFooterTextView1; private TextView mFooterTextView2; private MenuItemListAdapter mMenuAdapter; private List<MenuItemResource> mMenuItems; private MenuCallback mCallback; private SparseBooleanArray mCheckedState; private UIHome mUiHome; public static MenuFragment newInstance() { return new MenuFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMenuItems = new ArrayList<MenuItemResource>(); mCheckedState = new SparseBooleanArray(); fillColumns(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mCallback = (MenuCallback) activity; mUiHome = (UIHome) activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fm_menu, null, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mListView = (ListView) getView().findViewById(android.R.id.list); mFooterTextView1 = (TextView) getView().findViewById(android.R.id.text1); mFooterTextView2 = (TextView) getView().findViewById(android.R.id.text2); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView.setSelector(getResources().getDrawable( R.drawable.selector_drawer_menu)); // mListView.setDivider(getResources().getDrawable( // R.drawable.sliding_menu_list_divider)); mMenuAdapter = new MenuItemListAdapter(getActivity(), mMenuItems); mListView.setOnItemClickListener(this); mListView.setDrawSelectorOnTop(true); mListView.setAdapter(mMenuAdapter); mListView.setItemChecked(0, true); mFooterTextView1.setText(AppContext.getVersionName() + " Build " + AppContext.getVersionCode() + (DEBUG ? " Debug" : "")); } @Override public void onResume() { super.onResume(); Animation fadeOut = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out_long); mFooterTextView2.startAnimation(fadeOut); } @Override public void onPause() { super.onPause(); } @Override public void onDestroy() { super.onDestroy(); mFooterTextView2.clearAnimation(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final MenuItemResource menuItem = (MenuItemResource) parent .getItemAtPosition(position); debug("on item click ,position=" + position + " item=" + menuItem); ListView listView = (ListView) parent; listView.setItemChecked(position, true); if (menuItem != null) { mCheckedState.clear(); mCheckedState.put(position, true); if (menuItem.highlight) { mMenuAdapter.setCurrentPosition(position); } mMenuAdapter.notifyDataSetChanged(); if (mCallback != null) { mCallback.onMenuItemSelected(position, menuItem); } } } private void fillColumns() { MenuItemResource item = MenuItemResource.newBuilder().id(R.id.menu_app) .text(getString(R.string.menu_appmanager)).highlight(true) .build(); mMenuItems.add(item); item = MenuItemResource.newBuilder().id(R.id.menu_backup) .text(getString(R.string.menu_backupmanager)).highlight(true) .build(); mMenuItems.add(item); item = MenuItemResource.newBuilder().id(R.id.menu_process) .text(getString(R.string.menu_processmanager)).highlight(true) .build(); mMenuItems.add(item); /* item = MenuItemResource.newBuilder().id(R.id.menu_component) .text(getString(R.string.menu_componentmanager)).highlight(true) .build(); mMenuItems.add(item);*/ /* item = MenuItemResource.newBuilder().id(R.id.menu_receiver) .text(getString(R.string.menu_receivermanager)).highlight(true) .build(); mMenuItems.add(item);*/ /* item = MenuItemResource.newBuilder().id(R.id.menu_service) .text(getString(R.string.menu_servicemanager)).highlight(true) .build(); mMenuItems.add(item);*/ /* item = MenuItemResource.newBuilder().id(R.id.menu_file) .text(getString(R.string.menu_filemanager)).highlight(true) .build(); mMenuItems.add(item);*/ /* item = MenuItemResource.newBuilder().id(R.id.menu_cache) .text(getString(R.string.menu_cachemanager)).highlight(true) .build(); mMenuItems.add(item);*/ /* item = MenuItemResource.newBuilder().id(R.id.menu_network) .text(getString(R.string.menu_networkmanager)).highlight(true) .build(); mMenuItems.add(item);*/ item = MenuItemResource.newBuilder().id(R.id.menu_toolkit) .text(getString(R.string.menu_toolkit)).highlight(true) .build(); mMenuItems.add(item); item = MenuItemResource.newBuilder().id(R.id.menu_about) .text(getString(R.string.menu_about)).highlight(true) .build(); mMenuItems.add(item); } private static class MenuItemListAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; private List<MenuItemResource> mItems; private int currentPosition; public void setCurrentPosition(int position) { this.currentPosition = position; } public MenuItemListAdapter(Context context, List<MenuItemResource> data) { this.context = context; this.inflater = LayoutInflater.from(context); this.mItems = new ArrayList<MenuItemResource>(); if (data != null && data.size() > 0) { this.mItems.addAll(data); } } @Override public int getCount() { return mItems.size(); } @Override public MenuItemResource getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.list_item_menu, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final MenuItemResource item = mItems.get(position); holder.icon.setImageResource(item.iconId); holder.icon.setVisibility(View.GONE); holder.text.setText(item.text); if (position == currentPosition && item.highlight) { convertView.setBackgroundResource(R.drawable.selector_drawer_menu_light_checked); // holder.text.setTextColor(context.getResources() // .getColorStateList(R.color.light_blue_text_color)); } else { convertView.setBackgroundColor(0); // holder.text.setTextColor(context.getResources() // .getColorStateList(R.color.text_white)); } return convertView; } private static class ViewHolder { ImageView icon; TextView text; public ViewHolder(View base) { icon = (ImageView) base.findViewById(R.id.icon); text = (TextView) base.findViewById(R.id.text); } } } }