beta 0.1.1
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / Vorlesungsplan.java
index caf8c88de80ce9314fcd64fd89cc492f778d5b14..a0bde341d8e7827dc27329cfc7450e5b16e50bb9 100644 (file)
@@ -2,39 +2,237 @@ package de.dhbwloe.campusapp.fragments;
 
 
 import android.os.Bundle;
+import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
 
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import de.dhbwloe.campusapp.CampusAppContext;
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
 import de.dhbwloe.campusapp.search.SearchIndices;
+import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
+import de.dhbwloe.campusapp.vorlesungen.CourseGroup;
 
 /**
  * A simple {@link Fragment} subclass.
  */
 public class Vorlesungsplan extends CampusAppFragment {
+    public interface VorlesungsplanFragment {
+        void setActive();
+    }
+
     /* implement this for search results ;) */
     public static SearchIndices[] GetSearchIndices() {
         return new SearchIndices[] {
                 new SearchIndices("Vorlesungsplan", true) {{
                     setUpdateTime(1);
                     setTarget("#Vorlesungsplan");
-                    setTitle("Vorlesungsplan");
-                    setDescription("Vorlesungsplan dienes Kurses");
-                    addKeyWord("vorlesung, vorlesungen, plan, vorlesungsplan, stundenplan, termin, termine, kursplan, blockplan, block, zeit, zeiten");
+                    setTitle(R.string.search_vorlesungsplan_title);
+                    setDescription(R.string.search_vorlesungsplan_description);
+                    addKeyWord(R.string.search_vorlesungsplan_keywords);
+                }},
+                new SearchIndices("VorlesungsplanExams", true) {{
+                    setUpdateTime(1);
+                    setTarget("#Vorlesungsplan#view=exams");
+                    setTitle(R.string.search_vorlesungsplan_klausur_title);
+                    setDescription(R.string.search_vorlesungsplan_klausur_description);
+                    addKeyWord(R.string.search_vorlesungsplan_klausur_keywords);
                 }},
         };
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        View view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false);
-        AppContext.setTitle("Vorlesungsplan");
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        Bundle arguments = getArguments();
+        int showGroupId = 0;
+        boolean showExamsPage = false;
+        if(arguments != null) {
+            String groupid = arguments.getString("groupid");
+            if(groupid != null)
+                showGroupId = Integer.parseInt(groupid);
+            String view = arguments.getString("view");
+            if(view != null && view.equalsIgnoreCase("exams"))
+                showExamsPage = true;
+        }
+
+        View view = null;
+        if(showGroupId > 0) {
+            view = inflater.inflate(R.layout.fragment_vorlesungsplan_group, container, false);
+
+            CourseGroup group = AppContext.getDatabaseManager().getCourseGroup(showGroupId);
+            if(group != null) {
+                AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_group_title, group.getGroupName()));
+
+                showGroupEvents(view, group);
+            } else
+                view = null;
+        }
+        if(view == null) {
+            view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false);
+            AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_title));
+
+            ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager);
+            setupViewPager(pager);
+
+            if(showExamsPage)
+                pager.setCurrentItem(2);
+
+            TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
+            tabLayout.setupWithViewPager(pager);
+        }
 
         return view;
     }
 
+    private void setupViewPager(ViewPager viewPager) {
+        final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
+
+        adapter.addFragment(new VorlesungsplanUpcoming(), AppContext.getResString(R.string.vorlesungsplan_upcoming));
+        adapter.addFragment(new VorlesungsplanGroups(), AppContext.getResString(R.string.vorlesungsplan_groups));
+        adapter.addFragment(new VorlesungsplanExams(), AppContext.getResString(R.string.vorlesungsplan_exams));
+
+        viewPager.setAdapter(adapter);
+        viewPager.setCurrentItem(0);
+
+        VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(0);
+        fragment.setActive();
+
+
+        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+            @Override
+            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+            }
+
+            @Override
+            public void onPageSelected(int position) {
+                VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(position);
+                fragment.setActive();
+            }
+
+            @Override
+            public void onPageScrollStateChanged(int state) {
+
+            }
+        });
+    }
+
+    private void showGroupEvents(View view, CourseGroup group) {
+        CourseEvent events[] = AppContext.getDatabaseManager().getCourseEventsByGroup(group);
+
+        CourseEvent nextEvent = null;
+        CourseEvent lastEvent = null;
+        CourseEvent examEvent = null;
+        long now = (new Date()).getTime()/1000;
+        SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_vorlesungsplan_fulldate));
+
+        LinearLayout container = (LinearLayout) view.findViewById(R.id.allEventsList);
+        TextView groupName = (TextView) view.findViewById(R.id.courseTitle);
+        TextView nextEventView = (TextView) view.findViewById(R.id.nextEvent);
+        TextView lastEventView = (TextView) view.findViewById(R.id.lastEvent);
+        TextView examEventView = (TextView) view.findViewById(R.id.klausurEvent);
+
+        groupName.setText(group.getGroupName());
+        container.removeAllViews();
+
+        for(CourseEvent event : events) {
+            if(event.getEventFrom() >= now && nextEvent == null)
+                nextEvent = event;
+            if(event.getCourseType() == CourseEvent.CourseType.COURSETYPE_KLAUSUR)
+                examEvent = event;
+            else
+                lastEvent = event;
+
+            LinearLayout eventEntry = new LinearLayout(view.getContext());
+            eventEntry.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
+                    RelativeLayout.LayoutParams.WRAP_CONTENT));
+            eventEntry.setOrientation(LinearLayout.HORIZONTAL);
+
+            TextView dotView = new TextView(view.getContext());
+            dotView.setText(AppContext.getResString(R.string.listDot));
+            eventEntry.addView(dotView);
+
+            if(event.getEventFrom() < now)
+                dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_lightgray));
+            else
+                dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_darkred));
+
+            TextView nameView = new TextView(view.getContext());
+            LinearLayout.LayoutParams nameViewLayoutParams = new LinearLayout.LayoutParams(
+                    LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+            nameViewLayoutParams.setMargins(16,0,0,0);
+            nameView.setLayoutParams(nameViewLayoutParams);
+            nameView.setText(dateFormat.format(new Date(event.getEventFrom() * 1000)));
+            eventEntry.addView(nameView);
+
+            TextView locationView = new TextView(view.getContext());
+            LinearLayout.LayoutParams locationViewLayoutParams = new LinearLayout.LayoutParams(
+                    LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+            locationViewLayoutParams.setMargins(32,0,0,0);
+            locationView.setLayoutParams(locationViewLayoutParams);
+            locationView.setText(event.getEventLocation());
+            eventEntry.addView(locationView);
+
+            container.addView(eventEntry);
+        }
+
+        if(nextEvent != null)
+            nextEventView.setText(dateFormat.format(new Date(nextEvent.getEventFrom() * 1000)));
+        else
+            nextEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
+
+        if(lastEvent != null)
+            lastEventView.setText(dateFormat.format(new Date(lastEvent.getEventFrom() * 1000)));
+        else
+            lastEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
+
+        if(examEvent != null)
+            examEventView.setText(dateFormat.format(new Date(examEvent.getEventFrom() * 1000)));
+        else
+            examEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_noklausur));
+    }
+
+    class ViewPagerAdapter extends FragmentPagerAdapter {
+        private final List<Fragment> mFragmentList = new ArrayList<>();
+        private final List<String> mFragmentTitleList = new ArrayList<>();
+
+        public ViewPagerAdapter(FragmentManager manager) {
+            super(manager);
+        }
+
+        @Override
+        public Fragment getItem(int position) {
+            return mFragmentList.get(position);
+        }
+
+        @Override
+        public int getCount() {
+            return mFragmentList.size();
+        }
+
+        public void addFragment(Fragment fragment, String title) {
+            mFragmentList.add(fragment);
+            mFragmentTitleList.add(title);
+        }
+
+        @Override
+        public CharSequence getPageTitle(int position) {
+            return mFragmentTitleList.get(position);
+        }
+    }
+
 }