Grundaufbau der App
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / CampusAppContext.java
1 package de.dhbwloe.campusapp;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6 import android.widget.TextView;
7
8 import java.lang.reflect.Method;
9
10 import de.dhbwloe.campusapp.database.DatabaseManager;
11 import de.dhbwloe.campusapp.fragments.AppSearch;
12 import de.dhbwloe.campusapp.fragments.Dashboard;
13 import de.dhbwloe.campusapp.fragments.FirstRun;
14 import de.dhbwloe.campusapp.fragments.Impressum;
15 import de.dhbwloe.campusapp.fragments.Mensa;
16 import de.dhbwloe.campusapp.fragments.MensaCard;
17 import de.dhbwloe.campusapp.fragments.MensaWochenplan;
18 import de.dhbwloe.campusapp.fragments.News;
19 import de.dhbwloe.campusapp.fragments.PopupFragment;
20 import de.dhbwloe.campusapp.fragments.SplashScreen;
21 import de.dhbwloe.campusapp.fragments.Vorlesungsplan;
22 import de.dhbwloe.campusapp.fragments.WebBrowser;
23 import de.dhbwloe.campusapp.fragments.WifiSettings;
24 import de.dhbwloe.campusapp.nfcreader.NfcCardInterface;
25 import de.dhbwloe.campusapp.nfcreader.NfcCardListener;
26 import de.dhbwloe.campusapp.database.NfcCardData;
27 import de.dhbwloe.campusapp.search.SearchIndices;
28
29 /** CampusAppContext
30  * A context, that is pushed to each fragment.
31  * This context will be persistent during app execution.
32  */
33 public class CampusAppContext {
34     private class AppPage {
35         String name;
36         Class<?> fragment;
37         int fragementType;
38
39         public AppPage(String name, Class<?> fragment) {
40             this.name = name;
41             this.fragment = fragment;
42         }
43
44         public AppPage(String name, Class<?> fragment, int type) {
45             this.name = name;
46             this.fragment = fragment;
47             this.fragementType = type;
48         }
49     }
50     private final AppPage[] PAGES = {
51             new AppPage("SplashScreen", SplashScreen.class),
52             new AppPage("Dashboard", Dashboard.class),
53             new AppPage("AppSearch", AppSearch.class),
54             new AppPage("Vorlesungsplan", Vorlesungsplan.class),
55             new AppPage("Mensa", Mensa.class),
56             new AppPage("MensaCard", MensaCard.class, 3),
57             new AppPage("News", News.class),
58             new AppPage("WifiSettings", WifiSettings.class),
59             new AppPage("FirstRun", FirstRun.class),
60             new AppPage("Impressum", Impressum.class),
61             new AppPage("WebBrowser", WebBrowser.class),
62             new AppPage("WebBrowserPopup", WebBrowser.class, 3)
63     };
64
65     private static CampusAppContext instance;
66     public static CampusAppContext getInstance() {
67         Log.i("AppContext", "Request new context instance");
68         return instance;
69     }
70
71     private Activity oMainActivity;
72     private NavigationManager oNavigationManager;
73     private DatabaseManager oDatabaseManager;
74     private NfcCardListener oNfcCardListener;
75
76     public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
77         final CampusAppContext AppContext = this;
78         instance = this;
79         oMainActivity = mainActivity;
80         oNavigationManager = new NavigationManager(this, fragmentContainerId);
81         oDatabaseManager = new DatabaseManager(this);
82         oNfcCardListener = new NfcCardListener(this);
83
84         for(int i = 0; i < PAGES.length; i++)
85             oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
86
87         oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
88             @Override
89             public void onNfcReaderStateChanged(boolean state) {
90
91             }
92
93             @Override
94             public void onNfcReaderReceived(NfcCardData data) {
95                 if (data != null)
96                     AppContext.onNfcCardDataReceived(data);
97             }
98         });
99     }
100
101     public Activity getMainActivity() {
102         return oMainActivity;
103     }
104     public void setMainActivity(Activity activity) {
105         oMainActivity = activity;
106     }
107
108     public NavigationManager getNavigationManager() {
109         return oNavigationManager;
110     }
111
112     public void setTitle(String title) {
113         PopupFragment popup = oNavigationManager.getDialog();
114         if(popup != null) {
115             popup.getDialog().setTitle(title);
116         } else {
117             TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
118             titleView.setText(title);
119         }
120     }
121
122     public DatabaseManager getDatabaseManager() {
123         return oDatabaseManager;
124     }
125
126     public void addDefaultSearchIndexes() {
127         for(int i = 0; i < PAGES.length; i++) {
128             try {
129                 Method m = PAGES[i].fragment.getMethod("GetSearchIndices");
130                 Object result = m.invoke(null);
131                 SearchIndices[] indices = (SearchIndices[]) result;
132                 addSearchIndices(indices);
133             } catch (Exception e) {
134             }
135         }
136     }
137
138     public void addSearchIndices(SearchIndices[] indices) {
139         oDatabaseManager.addSearchIndices(indices);
140     }
141
142     public NfcCardListener getNfcCardListener() {
143         return oNfcCardListener;
144     }
145
146     private void onNfcCardDataReceived(NfcCardData data) {
147         Bundle bundle = new Bundle();
148         bundle.putDouble("balance", data.getBalance() / 100.0);
149         bundle.putString("data", data.getCardData());
150
151         String pagename = oNavigationManager.getCurrentPageName();
152         if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
153             MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
154             fragment.showNfcCardData(bundle);
155         } else
156             oNavigationManager.navigatePage("MensaCard", bundle);
157     }
158
159 }