1 package de.dhbwloe.campusapp.fragments;
4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory;
6 import android.graphics.Point;
7 import android.os.Bundle;
8 import android.os.Handler;
9 import android.support.v4.app.Fragment;
10 import android.view.Display;
11 import android.view.LayoutInflater;
12 import android.view.View;
13 import android.view.ViewGroup;
14 import android.widget.ImageView;
15 import android.widget.ProgressBar;
16 import android.widget.TextView;
18 import java.util.Date;
20 import de.dhbwloe.campusapp.CampusApp;
21 import de.dhbwloe.campusapp.CampusAppContext;
22 import de.dhbwloe.campusapp.CampusAppFragment;
23 import de.dhbwloe.campusapp.R;
24 import de.dhbwloe.campusapp.mensaplan.MensaplanManager;
25 import de.dhbwloe.campusapp.mensaplan.MensaplanManagerInterface;
26 import de.dhbwloe.campusapp.news.NewsManager;
27 import de.dhbwloe.campusapp.news.NewsManagerInterface;
28 import de.dhbwloe.campusapp.search.SearchIndices;
29 import de.dhbwloe.campusapp.vorlesungen.CalendarManager;
30 import de.dhbwloe.campusapp.vorlesungen.CalendarManagerInterface;
31 import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
32 import de.dhbwloe.campusapp.vorlesungen.CourseGroup;
35 * A simple {@link Fragment} subclass.
37 public class SplashScreen extends CampusAppFragment {
38 private ProgressBar splashProgress;
39 private int progressCounter;
40 private Handler timerHandler = new Handler();
41 private Runnable timerRunnable;
44 public void onCreate(Bundle savedInstanceState) {
45 super.onCreate(savedInstanceState);
51 public void onSaveInstanceState(Bundle savedInstanceState) {
52 timerHandler.removeCallbacksAndMessages(null);
53 super.onSaveInstanceState(savedInstanceState);
57 public View onCreateView(LayoutInflater inflater, ViewGroup container,
58 Bundle savedInstanceState) {
59 View view = inflater.inflate(R.layout.fragment_splashscreen, container, false);
61 TextView versionView = (TextView) view.findViewById(R.id.version);
62 versionView.setText(CampusAppContext.APPVERSION);
64 splashProgress = (ProgressBar)view.findViewById(R.id.splashProgress);
65 splashProgress.setMax(20);
66 splashProgress.setProgress(0);
69 AppContext.setTitle("DHBW Lörrach");
71 ImageView splashImage = (ImageView)view.findViewById(R.id.splashImage);
72 BitmapFactory.Options dimensions = new BitmapFactory.Options();
73 Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dhbw_campus_hd, dimensions);
74 int height = dimensions.outHeight;
75 int width = dimensions.outWidth;
76 Display display = AppContext.getMainActivity().getWindowManager().getDefaultDisplay();
77 Point size = new Point();
78 display.getSize(size);
79 float scaleX = (float)size.x / (float)width;
80 float scaleY = (float)size.y / (float)height;
81 float scale = Math.max(scaleX, scaleY);
82 int newWidth = (int)(width*scale);
83 int newHeight = (int)(height*scale);
84 Bitmap newBitmap = Bitmap.createScaledBitmap(mBitmap, newWidth, newHeight, true);
85 splashImage.setImageBitmap(newBitmap);
87 timerRunnable = new Runnable() {
91 splashProgress.setProgress(progressCounter);
92 long now = (new Date()).getTime()/1000;
93 switch(progressCounter) {
95 AppContext.getDatabaseManager().initializeDatabase();
98 AppContext.addDefaultSearchIndexes();
101 String startCounter = AppContext.getDatabaseManager().getRuntimeCache("AppStartCounter");
102 if(startCounter == null || Integer.parseInt(startCounter) == 0) {
103 AppContext.getNavigationManager().navigatePage("FirstRun", null, false);
106 AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", Integer.toString(Integer.parseInt(startCounter) + 1));
109 String lastVLMFullSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMFullSync");
110 String lastVLMPartialSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMPartialSync");
111 long lastVLMFullSync, lastVLMPartialSync;
112 if(lastVLMFullSyncStr != null)
113 lastVLMFullSync = Long.parseLong(lastVLMFullSyncStr);
116 if(lastVLMPartialSyncStr != null)
117 lastVLMPartialSync = Long.parseLong(lastVLMPartialSyncStr);
119 lastVLMPartialSync = 0;
121 String kursTag = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
122 if(kursTag == null || kursTag.isEmpty())
124 CalendarManager vpm = new CalendarManager(AppContext, kursTag);
126 if(lastVLMFullSync == 0 || now - lastVLMFullSync > (86400 * 14)) { // full sync every 14 days
127 vpm.performFullSynchronisation(new CalendarManagerInterface() {
129 public void onCalendarUpdateDone() {
130 long now = (new Date()).getTime() / 1000;
131 AppContext.getDatabaseManager().setRuntimeCache("LastVLMFullSync", Long.toString(now));
132 AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now));
133 timerHandler.postDelayed(timerRunnable, 100);
137 public void onCalendarUpdateFail(String errorMessage) {
138 timerHandler.postDelayed(timerRunnable, 100);
141 public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
142 CourseGroup group = event.getCourseGroup();
143 SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
144 indices.setUpdateTime(event.getEventFrom());
145 indices.setTarget("#Vorlesungsplan#groupid=" + group.getGroupId());
146 indices.setTitle("Vorlesungsplan " + event.getCourseName());
147 indices.setDescription("Vorlesung " + event.getEventTitle());
148 indices.addKeyWord(event.getGroupTitle());
149 indices.addKeyWord(event.getEventLocation());
154 else if(lastVLMPartialSync == 0 || now - lastVLMPartialSync > (86400)) { // partial sync every day
155 vpm.performFastSynchronisation(new CalendarManagerInterface() {
157 public void onCalendarUpdateDone() {
158 long now = (new Date()).getTime()/1000;
159 AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now));
160 timerHandler.postDelayed(timerRunnable, 100);
163 public void onCalendarUpdateFail(String errorMessage) {
164 timerHandler.postDelayed(timerRunnable, 100);
167 public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
168 CourseGroup group = event.getCourseGroup();
169 SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
170 indices.setUpdateTime(event.getEventFrom());
171 indices.setTarget("#Vorlesungsplan#groupid=" + group.getGroupId());
172 indices.setTitle(AppContext.getResString(R.string.search_vorlesungsplan_group_title, event.getCourseName()));
173 indices.setDescription(event.getEventTitle());
174 indices.addKeyWord(event.getGroupTitle());
175 indices.addKeyWord(event.getEventLocation());
184 String lastMPMSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastMPSync");
186 if(lastMPMSyncStr != null)
187 lastMPMSync = Long.parseLong(lastMPMSyncStr);
191 MensaplanManager mpm = new MensaplanManager(AppContext);
193 if(lastMPMSync == 0 || now - lastMPMSync > (86400 * 2)) { //sync every 2 days
194 mpm.performSynchronisation(new MensaplanManagerInterface() {
196 public void onMensaplanUpdateDone() {
197 long now = (new Date()).getTime() / 1000;
198 AppContext.getDatabaseManager().setRuntimeCache("LastMPSync", Long.toString(now));
199 timerHandler.postDelayed(timerRunnable, 100);
203 public void onMensaplanUpdateFail(String errorMessage) {
204 timerHandler.postDelayed(timerRunnable, 100);
213 final String syncSource = (progressCounter == 6 ? "DHBW" : "STUV");
214 String lastNewsSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastNewsSync_"+syncSource);
216 if(lastNewsSyncStr != null)
217 lastNewsSync = Long.parseLong(lastNewsSyncStr);
221 NewsManager nm = new NewsManager(AppContext, syncSource);
223 if(lastNewsSync == 0 || now - lastNewsSync > (86400 * 1)) { //sync every day
224 nm.performSynchronisation(new NewsManagerInterface() {
226 public void onNewsUpdateDone() {
227 long now = (new Date()).getTime() / 1000;
228 AppContext.getDatabaseManager().setRuntimeCache("LastNewsSync_"+syncSource, Long.toString(now));
229 timerHandler.postDelayed(timerRunnable, 100);
233 public void onNewsUpdateFail(String errorMessage) {
234 timerHandler.postDelayed(timerRunnable, 100);
242 String lastStuvSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastStuvSync");
244 if(lastStuvSyncStr != null)
245 lastStuvSync = Long.parseLong(lastStuvSyncStr);
249 final String calendarName = "STUV";
250 CalendarManager stuvsyncmgr = new CalendarManager(AppContext, calendarName);
252 if(lastStuvSync == 0 || now - lastStuvSync > (86400 * 3)) { // full sync every 3 days
253 stuvsyncmgr.performFullSynchronisation(new CalendarManagerInterface() {
255 public void onCalendarUpdateDone() {
256 long now = (new Date()).getTime() / 1000;
257 AppContext.getDatabaseManager().setRuntimeCache("LastStuvSync", Long.toString(now));
258 timerHandler.postDelayed(timerRunnable, 100);
262 public void onCalendarUpdateFail(String errorMessage) {
263 timerHandler.postDelayed(timerRunnable, 100);
267 public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
268 CourseGroup group = event.getCourseGroup();
269 SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
270 indices.setUpdateTime(event.getEventFrom());
271 indices.setTarget("#News#showevent=" + group.getGroupId() + "&course=" + calendarName);
272 indices.setTitle(calendarName+" Event: " + event.getCourseName());
273 indices.setDescription(event.getEventTitle());
274 indices.addKeyWord(event.getGroupTitle());
275 indices.addKeyWord(event.getEventLocation());
285 // some more tasks to do here?
288 ((CampusApp)AppContext.getMainActivity()).loadMainUi();
289 AppContext.getNavigationManager().navigatePage("Dashboard", null, false);
292 timerHandler.postDelayed(timerRunnable, 100);
300 public void onResume() {
302 timerHandler.postDelayed(timerRunnable, 500);