1 package de.dhbwloe.campusapp;
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6 import android.widget.TextView;
8 import java.lang.reflect.Method;
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.SplashScreen;
20 import de.dhbwloe.campusapp.fragments.Vorlesungsplan;
21 import de.dhbwloe.campusapp.fragments.WebBrowser;
22 import de.dhbwloe.campusapp.fragments.WifiSettings;
23 import de.dhbwloe.campusapp.nfcreader.NfcCardInterface;
24 import de.dhbwloe.campusapp.nfcreader.NfcCardListener;
25 import de.dhbwloe.campusapp.database.NfcCardData;
26 import de.dhbwloe.campusapp.search.SearchIndices;
29 * A context, that is pushed to each fragment.
30 * This context will be persistent during app execution.
32 public class CampusAppContext {
33 private class AppPage {
38 public AppPage(String name, Class<?> fragment) {
40 this.fragment = fragment;
43 public AppPage(String name, Class<?> fragment, int type) {
45 this.fragment = fragment;
46 this.fragementType = type;
49 private final AppPage[] PAGES = {
50 new AppPage("SplashScreen", SplashScreen.class),
51 new AppPage("Dashboard", Dashboard.class),
52 new AppPage("AppSearch", AppSearch.class),
53 new AppPage("Vorlesungsplan", Vorlesungsplan.class),
54 new AppPage("Mensa", Mensa.class),
55 new AppPage("MensaCard", MensaCard.class, 3),
56 new AppPage("News", News.class),
57 new AppPage("WifiSettings", WifiSettings.class),
58 new AppPage("FirstRun", FirstRun.class),
59 new AppPage("Impressum", Impressum.class),
60 new AppPage("WebBrowser", WebBrowser.class),
61 new AppPage("WebBrowserPopup", WebBrowser.class, 3)
64 private static CampusAppContext instance;
65 public static CampusAppContext getInstance() {
66 Log.i("AppContext", "Request new context instance");
70 private Activity oMainActivity;
71 private NavigationManager oNavigationManager;
72 private DatabaseManager oDatabaseManager;
73 private NfcCardListener oNfcCardListener;
74 private Bundle oContextVariables;
76 public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
77 final CampusAppContext AppContext = this;
79 oMainActivity = mainActivity;
80 oContextVariables = new Bundle();
81 oNavigationManager = new NavigationManager(this, fragmentContainerId);
82 oDatabaseManager = new DatabaseManager(this);
83 oNfcCardListener = new NfcCardListener(this);
85 for(int i = 0; i < PAGES.length; i++)
86 oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
88 oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
90 public void onNfcReaderStateChanged(boolean state) {
95 public void onNfcReaderReceived(NfcCardData data) {
97 AppContext.onNfcCardDataReceived(data);
102 public Activity getMainActivity() {
103 return oMainActivity;
105 public void setMainActivity(Activity activity) {
106 oMainActivity = activity;
109 public NavigationManager getNavigationManager() {
110 return oNavigationManager;
113 public void setTitle(String title) {
114 PopupFragment popup = oNavigationManager.getDialog();
116 if(popup.getDialog() != null)
117 popup.getDialog().setTitle(title);
119 TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
120 titleView.setText(title);
124 public DatabaseManager getDatabaseManager() {
125 return oDatabaseManager;
128 public void addDefaultSearchIndexes() {
129 for(int i = 0; i < PAGES.length; i++) {
131 Method m = PAGES[i].fragment.getMethod("GetSearchIndices");
132 Object result = m.invoke(null);
133 SearchIndices[] indices = (SearchIndices[]) result;
134 addSearchIndices(indices);
135 } catch (Exception e) {
140 public void addSearchIndices(SearchIndices[] indices) {
141 oDatabaseManager.addSearchIndices(indices);
144 public NfcCardListener getNfcCardListener() {
145 return oNfcCardListener;
148 private void onNfcCardDataReceived(NfcCardData data) {
149 Bundle bundle = new Bundle();
150 double cardBalance = data.getBalance() / 100.0;
151 bundle.putDouble("balance", cardBalance);
152 bundle.putDouble("transaction", data.getLastTransaction() / 100.0);
154 oContextVariables.putInt("nfcCardUniqueId", data.getUniqueId());
155 oContextVariables.putDouble("nfcCardBalance", cardBalance);
157 String pagename = oNavigationManager.getCurrentPageName();
158 if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
159 MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
160 fragment.showNfcCardData(bundle);
162 oNavigationManager.navigatePage("MensaCard", bundle);
165 public Bundle getContextVariables() {
166 return oContextVariables;
169 public String getResString(int id) {
170 String str = oMainActivity.getResources().getString(id);