beta 0.1.2
[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.News;
18 import de.dhbwloe.campusapp.fragments.PopupFragment;
19 import de.dhbwloe.campusapp.fragments.Settings;
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
51     public static final String APPVERSION = "0.1.1 (beta)";
52     private final AppPage[] PAGES = {
53             new AppPage("SplashScreen", SplashScreen.class),
54             new AppPage("Dashboard", Dashboard.class),
55             new AppPage("AppSearch", AppSearch.class),
56             new AppPage("Vorlesungsplan", Vorlesungsplan.class),
57             new AppPage("Mensa", Mensa.class),
58             new AppPage("MensaCard", MensaCard.class, 3),
59             new AppPage("News", News.class),
60             new AppPage("WifiSettings", WifiSettings.class),
61             new AppPage("FirstRun", FirstRun.class),
62             new AppPage("Settings", Settings.class),
63             new AppPage("Impressum", Impressum.class),
64             new AppPage("WebBrowser", WebBrowser.class),
65             new AppPage("WebBrowserPopup", WebBrowser.class, 3)
66     };
67
68     private static CampusAppContext instance;
69     public static CampusAppContext getInstance() {
70         Log.i("AppContext", "Request new context instance");
71         return instance;
72     }
73
74     private Activity oMainActivity;
75     private NavigationManager oNavigationManager;
76     private DatabaseManager oDatabaseManager;
77     private NfcCardListener oNfcCardListener;
78     private Bundle oContextVariables;
79
80     public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
81         final CampusAppContext AppContext = this;
82         instance = this;
83         oMainActivity = mainActivity;
84         oContextVariables = new Bundle();
85         oNavigationManager = new NavigationManager(this, fragmentContainerId);
86         oDatabaseManager = new DatabaseManager(this);
87         oNfcCardListener = new NfcCardListener(this);
88
89         for(int i = 0; i < PAGES.length; i++)
90             oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
91
92         oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
93             @Override
94             public void onNfcReaderStateChanged(boolean state) {
95
96             }
97
98             @Override
99             public void onNfcReaderReceived(NfcCardData data) {
100                 if (data != null)
101                     AppContext.onNfcCardDataReceived(data);
102             }
103         });
104     }
105
106     public Activity getMainActivity() {
107         return oMainActivity;
108     }
109     public void setMainActivity(Activity activity) {
110         oMainActivity = activity;
111     }
112
113     public NavigationManager getNavigationManager() {
114         return oNavigationManager;
115     }
116
117     public void setTitle(String title) {
118         PopupFragment popup = oNavigationManager.getDialog();
119         if(popup != null) {
120             if(popup.getDialog() != null)
121                 popup.getDialog().setTitle(title);
122         } else {
123             TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
124             titleView.setText(title);
125         }
126     }
127
128     public DatabaseManager getDatabaseManager() {
129         return oDatabaseManager;
130     }
131
132     public void addDefaultSearchIndexes() {
133         for(int i = 0; i < PAGES.length; i++) {
134             try {
135                 Method m = PAGES[i].fragment.getMethod("GetSearchIndices");
136                 Object result = m.invoke(null);
137                 SearchIndices[] indices = (SearchIndices[]) result;
138                 addSearchIndices(indices);
139             } catch (Exception e) {
140             }
141         }
142     }
143
144     public void addSearchIndices(SearchIndices[] indices) {
145         oDatabaseManager.addSearchIndices(indices);
146     }
147
148     public NfcCardListener getNfcCardListener() {
149         return oNfcCardListener;
150     }
151
152     private void onNfcCardDataReceived(NfcCardData data) {
153         Bundle bundle = new Bundle();
154         double cardBalance = data.getBalance() / 100.0;
155         bundle.putDouble("balance", cardBalance);
156         bundle.putDouble("transaction", data.getLastTransaction() / 100.0);
157
158         oContextVariables.putInt("nfcCardUniqueId", data.getUniqueId());
159         oContextVariables.putDouble("nfcCardBalance", cardBalance);
160
161         String pagename = oNavigationManager.getCurrentPageName();
162         if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
163             MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
164             fragment.showNfcCardData(bundle);
165         } else
166             oNavigationManager.navigatePage("MensaCard", bundle);
167     }
168
169     public Bundle getContextVariables() {
170         return oContextVariables;
171     }
172
173     public String getResString(int id, Object... arguments) {
174         String format = getResString(id);
175         String res = String.format(format, arguments);
176         return res;
177     }
178     public String getResString(int id) {
179         String str = oMainActivity.getResources().getString(id);
180         return str;
181     }
182
183 }