SplashScreen Bild Skalierung entfernt: Unnötiger Speicherfresser
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / SplashScreen.java
index eb543d5b3fb46ca2c60a6d6db8aad80a82f9415e..6ecc333283d5b63178811c996a3a2a3b2f762063 100644 (file)
@@ -1,11 +1,22 @@
+/* SplashScreen.java
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
 package de.dhbwloe.campusapp.fragments;
-
-
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.Matrix;
 import android.graphics.Point;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.v4.app.Fragment;
@@ -13,7 +24,6 @@ import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
 import android.widget.TextView;
@@ -21,19 +31,27 @@ import android.widget.TextView;
 import java.util.Date;
 
 import de.dhbwloe.campusapp.CampusApp;
+import de.dhbwloe.campusapp.CampusAppContext;
 import de.dhbwloe.campusapp.CampusAppFragment;
 import de.dhbwloe.campusapp.R;
+import de.dhbwloe.campusapp.coursenames.CourseNameManager;
+import de.dhbwloe.campusapp.coursenames.CourseNameManagerInterface;
 import de.dhbwloe.campusapp.mensaplan.MensaplanManager;
 import de.dhbwloe.campusapp.mensaplan.MensaplanManagerInterface;
 import de.dhbwloe.campusapp.news.NewsManager;
 import de.dhbwloe.campusapp.news.NewsManagerInterface;
-import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManager;
-import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManagerInterface;
+import de.dhbwloe.campusapp.search.SearchIndices;
+import de.dhbwloe.campusapp.vorlesungen.CalendarManager;
+import de.dhbwloe.campusapp.vorlesungen.CalendarManagerInterface;
+import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
+import de.dhbwloe.campusapp.vorlesungen.CourseGroup;
 
 /**
  * A simple {@link Fragment} subclass.
  */
 public class SplashScreen extends CampusAppFragment {
+    private static final boolean PARALLELIZE_SPLASHTASKS = true;
+
     private ProgressBar splashProgress;
     private int progressCounter;
     private Handler timerHandler = new Handler();
@@ -57,6 +75,9 @@ public class SplashScreen extends CampusAppFragment {
                              Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment_splashscreen, container, false);
 
+        TextView versionView = (TextView) view.findViewById(R.id.version);
+        versionView.setText(CampusAppContext.APPVERSION);
+
         splashProgress = (ProgressBar)view.findViewById(R.id.splashProgress);
         splashProgress.setMax(20);
         splashProgress.setProgress(0);
@@ -64,22 +85,6 @@ public class SplashScreen extends CampusAppFragment {
 
         AppContext.setTitle("DHBW Lörrach");
 
-        ImageView splashImage = (ImageView)view.findViewById(R.id.splashImage);
-        BitmapFactory.Options dimensions = new BitmapFactory.Options();
-        Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dhbw_campus_hd, dimensions);
-        int height = dimensions.outHeight;
-        int width =  dimensions.outWidth;
-        Display display = AppContext.getMainActivity().getWindowManager().getDefaultDisplay();
-        Point size = new Point();
-        display.getSize(size);
-        float scaleX = (float)size.x / (float)width;
-        float scaleY = (float)size.y / (float)height;
-        float scale = Math.max(scaleX, scaleY);
-        int newWidth = (int)(width*scale);
-        int newHeight = (int)(height*scale);
-        Bitmap newBitmap = Bitmap.createScaledBitmap(mBitmap, newWidth, newHeight, true);
-        splashImage.setImageBitmap(newBitmap);
-
         timerRunnable = new Runnable() {
             @Override
             public void run() {
@@ -94,6 +99,35 @@ public class SplashScreen extends CampusAppFragment {
                         AppContext.addDefaultSearchIndexes();
                         break;
                     case 3:
+                        String lastCNSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastCNSync");
+                        long lastCNSync;
+                        if(lastCNSyncStr != null)
+                            lastCNSync = Long.parseLong(lastCNSyncStr);
+                        else
+                            lastCNSync = 0;
+
+                        CourseNameManager cnm = new CourseNameManager();
+
+                        if(lastCNSync == 0 || now - lastCNSync > (86400 * 7)) { //sync every 7 days
+                            cnm.synchronizeCourseNames(new CourseNameManagerInterface() {
+                                @Override
+                                public void onCourseNamesSynchronized() {
+                                    long now = (new Date()).getTime() / 1000;
+                                    AppContext.getDatabaseManager().setRuntimeCache("LastCNSync", Long.toString(now));
+                                    timerHandler.postDelayed(timerRunnable, 100);
+                                }
+
+                                @Override
+                                public void onCourseNamesFailed(String errorMessage) {
+                                    timerHandler.postDelayed(timerRunnable, 100);
+                                }
+                            });
+                        }
+                        else
+                            break;
+
+                        return;
+                    case 4:
                         String startCounter = AppContext.getDatabaseManager().getRuntimeCache("AppStartCounter");
                         if(startCounter == null || Integer.parseInt(startCounter) == 0) {
                             AppContext.getNavigationManager().navigatePage("FirstRun", null, false);
@@ -101,7 +135,7 @@ public class SplashScreen extends CampusAppFragment {
                         }
                         AppContext.getDatabaseManager().setRuntimeCache("AppStartCounter", Integer.toString(Integer.parseInt(startCounter) + 1));
                         break;
-                    case 4:
+                    case 5:
                         String lastVLMFullSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMFullSync");
                         String lastVLMPartialSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastVLMPartialSync");
                         long lastVLMFullSync, lastVLMPartialSync;
@@ -114,12 +148,20 @@ public class SplashScreen extends CampusAppFragment {
                         else
                             lastVLMPartialSync = 0;
 
-                        VorlesungsplanManager vpm = new VorlesungsplanManager(AppContext, "tif13a");
+                        final String kursTag = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
+                        if(kursTag == null || kursTag.isEmpty())
+                            break;
+                        CalendarManager vpm = new CalendarManager(AppContext, kursTag);
 
                         if(lastVLMFullSync == 0 || now - lastVLMFullSync > (86400 * 14)) { // full sync every 14 days
-                            vpm.performFullSynchronisation(new VorlesungsplanManagerInterface() {
+                            vpm.performFullSynchronisation(new CalendarManagerInterface() {
                                 @Override
-                                public void onVorlesungsplanUpdateDone() {
+                                public void onCalendarUpdateDone() {
+                                    if(!AppContext.getDatabaseManager().haveCourseName(kursTag)) {
+                                        CourseNameManager cnm = new CourseNameManager();
+                                        cnm.addCourseName(kursTag);
+                                    }
+
                                     long now = (new Date()).getTime() / 1000;
                                     AppContext.getDatabaseManager().setRuntimeCache("LastVLMFullSync", Long.toString(now));
                                     AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now));
@@ -127,29 +169,58 @@ public class SplashScreen extends CampusAppFragment {
                                 }
 
                                 @Override
-                                public void onVorlesungsplanUpdateFail(String errorMessage) {
+                                public void onCalendarUpdateFail(String errorMessage) {
                                     timerHandler.postDelayed(timerRunnable, 100);
                                 }
+                                @Override
+                                public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
+                                    CourseGroup group = event.getCourseGroup();
+                                    SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
+                                    indices.setUpdateTime(event.getEventFrom());
+                                    indices.setTarget("#Vorlesungsplan#groupid=" + group.getGroupId());
+                                    indices.setTitle("Vorlesungsplan " + event.getCourseName());
+                                    indices.setDescription("Vorlesung " + event.getEventTitle());
+                                    indices.addKeyWord(event.getGroupTitle());
+                                    indices.addKeyWord(event.getEventLocation());
+                                    return indices;
+                                }
                             });
                         }
                         else if(lastVLMPartialSync == 0 || now - lastVLMPartialSync > (86400)) { // partial sync every day
-                            vpm.performFastSynchronisation(new VorlesungsplanManagerInterface() {
+                            vpm.performFastSynchronisation(new CalendarManagerInterface() {
                                 @Override
-                                public void onVorlesungsplanUpdateDone() {
+                                public void onCalendarUpdateDone() {
+                                    if(!AppContext.getDatabaseManager().haveCourseName(kursTag)) {
+                                        CourseNameManager cnm = new CourseNameManager();
+                                        cnm.addCourseName(kursTag);
+                                    }
+
                                     long now = (new Date()).getTime()/1000;
                                     AppContext.getDatabaseManager().setRuntimeCache("LastVLMPartialSync", Long.toString(now));
                                     timerHandler.postDelayed(timerRunnable, 100);
                                 }
                                 @Override
-                                public void onVorlesungsplanUpdateFail(String errorMessage) {
+                                public void onCalendarUpdateFail(String errorMessage) {
                                     timerHandler.postDelayed(timerRunnable, 100);
                                 }
+                                @Override
+                                public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
+                                    CourseGroup group = event.getCourseGroup();
+                                    SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
+                                    indices.setUpdateTime(event.getEventFrom());
+                                    indices.setTarget("#Vorlesungsplan#groupid=" + group.getGroupId());
+                                    indices.setTitle(AppContext.getResString(R.string.search_vorlesungsplan_group_title, event.getCourseName()));
+                                    indices.setDescription(event.getEventTitle());
+                                    indices.addKeyWord(event.getGroupTitle());
+                                    indices.addKeyWord(event.getEventLocation());
+                                    return indices;
+                                }
                             });
                         }
                         else
                             break;
                         return;
-                    case 5:
+                    case 6:
                         String lastMPMSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastMPSync");
                         long lastMPMSync;
                         if(lastMPMSyncStr != null)
@@ -177,9 +248,9 @@ public class SplashScreen extends CampusAppFragment {
                         else
                             break;
                         return;
-                    case 6:
                     case 7:
-                        final String syncSource = (progressCounter == 6 ? "DHBW" : "STUV");
+                    case 8:
+                        final String syncSource = (progressCounter == 7 ? "DHBW" : "STUV");
                         String lastNewsSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastNewsSync_"+syncSource);
                         long lastNewsSync;
                         if(lastNewsSyncStr != null)
@@ -207,7 +278,7 @@ public class SplashScreen extends CampusAppFragment {
                         else
                             break;
                         return;
-                    case 8:
+                    case 9:
                         String lastStuvSyncStr = AppContext.getDatabaseManager().getRuntimeCache("LastStuvSync");
                         long lastStuvSync;
                         if(lastStuvSyncStr != null)
@@ -215,21 +286,36 @@ public class SplashScreen extends CampusAppFragment {
                         else
                             lastStuvSync = 0;
 
-                        VorlesungsplanManager stuvsyncmgr = new VorlesungsplanManager(AppContext, "STUV");
+                        final String calendarName = "STUV";
+                        CalendarManager stuvsyncmgr = new CalendarManager(AppContext, calendarName);
 
                         if(lastStuvSync == 0 || now - lastStuvSync > (86400 * 3)) { // full sync every 3 days
-                            stuvsyncmgr.performFullSynchronisation(new VorlesungsplanManagerInterface() {
+                            stuvsyncmgr.performFullSynchronisation(new CalendarManagerInterface() {
                                 @Override
-                                public void onVorlesungsplanUpdateDone() {
+                                public void onCalendarUpdateDone() {
                                     long now = (new Date()).getTime() / 1000;
                                     AppContext.getDatabaseManager().setRuntimeCache("LastStuvSync", Long.toString(now));
                                     timerHandler.postDelayed(timerRunnable, 100);
                                 }
 
                                 @Override
-                                public void onVorlesungsplanUpdateFail(String errorMessage) {
+                                public void onCalendarUpdateFail(String errorMessage) {
                                     timerHandler.postDelayed(timerRunnable, 100);
                                 }
+
+                                @Override
+                                public SearchIndices onGenerateCalendarSearchIndices(CourseEvent event) {
+                                    CourseGroup group = event.getCourseGroup();
+                                    SearchIndices indices = new SearchIndices("Vorlesungsplan#Group"+group.getGroupId(), false);
+                                    indices.setUpdateTime(event.getEventFrom());
+                                    indices.setTarget("#News#showevent=" + group.getGroupId() + "&course=" + calendarName);
+                                    indices.setTitle(calendarName+" Event: " + event.getCourseName());
+                                    indices.setDescription(event.getEventTitle());
+                                    indices.addKeyWord(event.getGroupTitle());
+                                    indices.addKeyWord(event.getEventLocation());
+
+                                    return null;
+                                }
                             });
                         }
                         else
@@ -246,9 +332,14 @@ public class SplashScreen extends CampusAppFragment {
                 timerHandler.postDelayed(timerRunnable, 100);
             }
         };
-        timerHandler.postDelayed(timerRunnable, 500);
 
         return view;
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        timerHandler.postDelayed(timerRunnable, 500);
+    }
+
 }