package in.co.praveenkumar.mdroid.fragment; import in.co.praveenkumar.R; import in.co.praveenkumar.mdroid.activity.CalendarActivity; import in.co.praveenkumar.mdroid.activity.ContactActivity; import in.co.praveenkumar.mdroid.activity.CourseActivity; import in.co.praveenkumar.mdroid.activity.DonationActivity; import in.co.praveenkumar.mdroid.activity.ForumActivity; import in.co.praveenkumar.mdroid.activity.LoginActivity; import in.co.praveenkumar.mdroid.activity.MessagingActivity; import in.co.praveenkumar.mdroid.activity.NotificationActivity; import in.co.praveenkumar.mdroid.activity.SettingsActivity; import in.co.praveenkumar.mdroid.helper.AppInterface.DrawerStateInterface; import in.co.praveenkumar.mdroid.helper.ImageDecoder; import in.co.praveenkumar.mdroid.helper.SessionSetting; import in.co.praveenkumar.mdroid.model.MoodleSiteInfo; import java.io.File; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @SuppressLint("InlinedApi") public class LeftNavigationFragment extends Fragment { DrawerStateInterface drawerState; Context context; final String DEBUG_TAG = "Left Navigation Fragment"; ListView navListView; List<MoodleSiteInfo> sites; SessionSetting session; String[] moodleMenuItems = new String[] { "Courses", "Messaging", "Contacts", "Calender", "Forums", "Notifications" }; String[] appMenuItems = new String[] { "Request features", "Settings", "Add account" }; int[] moodleMenuIcons = new int[] { R.drawable.icon_school_greyscale, R.drawable.icon_message_greyscale, R.drawable.icon_people_greyscale2, R.drawable.icon_today_greyscale, R.drawable.icon_forum_greyscale, R.drawable.icon_notifications_greyscale }; int[] appMenuIcons = new int[] { R.drawable.icon_extension_greyscale, R.drawable.icon_settings_greyscale, R.drawable.icon_plus_greyscale }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.frag_left_navigation, container, false); navListView = (ListView) rootView.findViewById(R.id.left_nav_list); this.context = getActivity(); // Get sites info session = new SessionSetting(getActivity()); sites = MoodleSiteInfo.listAll(MoodleSiteInfo.class); final LeftNavListAdapter adapter = new LeftNavListAdapter(getActivity()); navListView.setAdapter(adapter); navListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (adapter.getItemViewType(position)) { case LeftNavListAdapter.TYPE_ACCOUNT: session.setCurrentSiteId(sites.get(position).getId()); Intent i = new Intent(context, CourseActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(i); break; case LeftNavListAdapter.TYPE_MOODLE_MENUITEM: switch (position - sites.size() - 1) { case 0: context.startActivity(new Intent(context, CourseActivity.class)); break; case 1: context.startActivity(new Intent(context, MessagingActivity.class)); break; case 2: context.startActivity(new Intent(context, ContactActivity.class)); break; case 3: context.startActivity(new Intent(context, CalendarActivity.class)); break; case 4: context.startActivity(new Intent(context, ForumActivity.class)); break; case 5: // NOTIFICATIONS HERE context.startActivity(new Intent(context, NotificationActivity.class)); break; } break; case LeftNavListAdapter.TYPE_APP_MENUITEM: switch (position - sites.size() - moodleMenuItems.length - 2) { case 0: context.startActivity(new Intent(context, DonationActivity.class)); break; case 1: context.startActivity(new Intent(context, SettingsActivity.class)); break; case 2: Intent j = new Intent(context, LoginActivity.class); j.putExtra("explicitCall", true); context.startActivity(j); break; } break; } drawerState.setDrawerState(false); } }); return rootView; } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { drawerState = (DrawerStateInterface) activity; } catch (ClassCastException castException) { castException.printStackTrace(); } } public class LeftNavListAdapter extends BaseAdapter { private static final int TYPE_ACCOUNT = 0; private static final int TYPE_MOODLE_MENUITEM = 1; private static final int TYPE_APP_MENUITEM = 2; private static final int TYPE_SEPERATOR = 3; private static final int TYPE_COUNT = 4; private final Context context; public LeftNavListAdapter(Context context) { this.context = context; } @Override public int getViewTypeCount() { return TYPE_COUNT; } @Override public int getItemViewType(int position) { if (position == sites.size() || position == sites.size() + moodleMenuItems.length + 1) return TYPE_SEPERATOR; if (position >= sites.size() + moodleMenuItems.length + 2) return TYPE_APP_MENUITEM; if (position >= sites.size() + 1) return TYPE_MOODLE_MENUITEM; return TYPE_ACCOUNT; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; int type = getItemViewType(position); if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Choose layout switch (type) { case TYPE_ACCOUNT: convertView = inflater.inflate(R.layout.list_item_account, parent, false); viewHolder.userfullname = (TextView) convertView .findViewById(R.id.nav_user_fullname); viewHolder.sitename = (TextView) convertView .findViewById(R.id.nav_sitename); viewHolder.userimage = (ImageView) convertView .findViewById(R.id.nav_user_image); viewHolder.userselected = (ImageView) convertView .findViewById(R.id.nav_user_selected); break; case TYPE_MOODLE_MENUITEM: convertView = inflater.inflate( R.layout.list_item_moodle_menu, parent, false); viewHolder.menuItemName = (TextView) convertView .findViewById(R.id.nav_menuitem); viewHolder.menuItemIcon = (ImageView) convertView .findViewById(R.id.nav_menuicon); break; case TYPE_APP_MENUITEM: convertView = inflater.inflate(R.layout.list_item_app_menu, parent, false); viewHolder.menuItemName = (TextView) convertView .findViewById(R.id.nav_menuitem); viewHolder.menuItemIcon = (ImageView) convertView .findViewById(R.id.nav_menuicon); break; case TYPE_SEPERATOR: convertView = inflater.inflate( R.layout.list_item_menu_seperator, parent, false); break; } convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } // Assign values switch (type) { case TYPE_ACCOUNT: viewHolder.userfullname.setText(sites.get(position) .getFullname()); viewHolder.sitename.setText(sites.get(position).getSitename()); Bitmap userImage = ImageDecoder.decodeImage(new File( Environment.getExternalStorageDirectory() + "/MDroid/." + sites.get(position).getId())); if (userImage != null) viewHolder.userimage.setImageBitmap(userImage); // Show this as current account if it is if (session.getCurrentSiteId() == sites.get(position).getId()) viewHolder.userselected.setVisibility(ImageView.VISIBLE); else viewHolder.userselected.setVisibility(ImageView.GONE); break; case TYPE_MOODLE_MENUITEM: viewHolder.menuItemName.setText(moodleMenuItems[position - sites.size() - 1]); viewHolder.menuItemIcon .setImageResource(moodleMenuIcons[position - sites.size() - 1]); break; case TYPE_APP_MENUITEM: viewHolder.menuItemName.setText(appMenuItems[position - sites.size() - moodleMenuItems.length - 2]); // viewHolder.menuItemIcon.setImageResource(appMenuIcons[position // - sites.size() - moodleMenuItems.length - 2]); break; } return convertView; } @Override public int getCount() { return sites.size() + moodleMenuItems.length + appMenuItems.length + 2; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } } static class ViewHolder { TextView userfullname; TextView sitename; ImageView userselected; ImageView userimage; TextView menuItemName; ImageView menuItemIcon; } }