alpha 0.0.2
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / News.java
index 6a48b68fec5b538cb422855f81ae4ca20c255229..5efb4f7b429c4e68cbdaa00d305e400c461bceaf 100644 (file)
@@ -7,10 +7,21 @@ import android.support.v4.app.FragmentActivity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.ListView;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.ArrayList;
 
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
+import de.dhbwloe.campusapp.news.NewsItem;
 import de.dhbwloe.campusapp.search.SearchIndices;
+import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
 
 /**
  * A simple {@link Fragment} subclass.
@@ -22,21 +33,106 @@ public class News extends CampusAppFragment {
                 new SearchIndices("News", true) {{
                     setUpdateTime(1);
                     setTarget("#News");
-                    setTitle("News");
-                    setDescription("News der DHBW & Stuv");
-                    addKeyWord("news, dhbw, stuv, termin, termine");
+                    setTitle(R.string.search_news_title);
+                    setDescription(R.string.search_news_description);
+                    addKeyWord(R.string.search_news_keywords);
                 }},
         };
     }
 
+    private View view;
+    private NewsListAdapter listAdapter;
+    private ArrayList<NewsListItem> newsListItems = new ArrayList<NewsListItem>();
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        View view = inflater.inflate(R.layout.fragment_news, container, false);
-        AppContext.setTitle("News");
+        view = inflater.inflate(R.layout.fragment_news, container, false);
+        AppContext.setTitle(AppContext.getResString(R.string.news_title));
+
+        ListView newsItemsList = (ListView) view.findViewById(R.id.newsListView);
+        listAdapter = new NewsListAdapter(view.getContext(), R.layout.fragment_news_item, newsListItems);
+        newsItemsList.setAdapter(listAdapter);
+
+        CompoundButton.OnCheckedChangeListener changeListener = new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                refreshNewsItems();
+            }
+        };
+        ((CheckBox) view.findViewById(R.id.showDhbwNews)).setOnCheckedChangeListener(changeListener);
+        ((CheckBox) view.findViewById(R.id.showStuvNews)).setOnCheckedChangeListener(changeListener);
+        ((CheckBox) view.findViewById(R.id.showStuvEvents)).setOnCheckedChangeListener(changeListener);
 
+        newsItemsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                NewsListItem item = newsListItems.get(position);
+                if (item == null)
+                    return;
+
+                String link = item.getLink();
+                if(link != null) {
+                    Bundle args = new Bundle();
+                    args.putString("url", link);
+                    AppContext.getNavigationManager().navigatePage("WebBrowser", args, false);
+                }
+            }
+        });
 
         return view;
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        refreshNewsItems();
+    }
+
+    private void refreshNewsItems() {
+        newsListItems.clear();
+
+        CheckBox showDhbwNewsChkbok = (CheckBox) view.findViewById(R.id.showDhbwNews);
+        CheckBox showStuvNewsChkbok = (CheckBox) view.findViewById(R.id.showStuvNews);
+        CheckBox showStuvEventsChkbok = (CheckBox) view.findViewById(R.id.showStuvEvents);
+
+        if(showDhbwNewsChkbok.isChecked()) {
+            loadNewsSource("DHBW", true);
+        }
+        if(showStuvNewsChkbok.isChecked()) {
+            loadNewsSource("STUV", false);
+        }
+        if(showStuvEventsChkbok.isChecked()) {
+            loadEventsSource("STUV", false);
+        }
+
+        Collections.sort(newsListItems, new Comparator<NewsListItem>() {
+            @Override
+            public int compare(NewsListItem item2, NewsListItem item1) {
+                long now = (new Date()).getTime()/1000;
+                return (int) (item2.getTimeDifference(now) - item1.getTimeDifference(now));
+            }
+        });
+        listAdapter.notifyDataSetChanged();
+    }
+
+    private void loadNewsSource(String sourceName, boolean isDhbw) {
+        long now = (new Date()).getTime() / 1000;
+
+        NewsItem[] news = AppContext.getDatabaseManager().getNewsItems(sourceName, now, now - (86400 * 30 * 6)); // load 6 month
+        for(NewsItem cnews : news) {
+            NewsListItem listItem = new NewsListItem(cnews, isDhbw);
+            newsListItems.add(listItem);
+        }
+    }
+
+    private void loadEventsSource(String sourceName, boolean isDhbw) {
+        long now = (new Date()).getTime() / 1000;
+
+        CourseEvent[] events = AppContext.getDatabaseManager().getCourseCalendarTimetable(sourceName, now, 30 * 6); // load 6 month
+        for(CourseEvent event : events) {
+            NewsListItem listItem = new NewsListItem(event, isDhbw);
+            newsListItems.add(listItem);
+        }
+    }
 }