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.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;
30 * A context, that is pushed to each fragment.
31 * This context will be persistent during app execution.
33 public class CampusAppContext {
34 private class AppPage {
39 public AppPage(String name, Class<?> fragment) {
41 this.fragment = fragment;
44 public AppPage(String name, Class<?> fragment, int type) {
46 this.fragment = fragment;
47 this.fragementType = type;
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)
65 private static CampusAppContext instance;
66 public static CampusAppContext getInstance() {
67 Log.i("AppContext", "Request new context instance");
71 private Activity oMainActivity;
72 private NavigationManager oNavigationManager;
73 private DatabaseManager oDatabaseManager;
74 private NfcCardListener oNfcCardListener;
76 public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
77 final CampusAppContext AppContext = this;
79 oMainActivity = mainActivity;
80 oNavigationManager = new NavigationManager(this, fragmentContainerId);
81 oDatabaseManager = new DatabaseManager(this);
82 oNfcCardListener = new NfcCardListener(this);
84 for(int i = 0; i < PAGES.length; i++)
85 oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
87 oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
89 public void onNfcReaderStateChanged(boolean state) {
94 public void onNfcReaderReceived(NfcCardData data) {
96 AppContext.onNfcCardDataReceived(data);
101 public Activity getMainActivity() {
102 return oMainActivity;
104 public void setMainActivity(Activity activity) {
105 oMainActivity = activity;
108 public NavigationManager getNavigationManager() {
109 return oNavigationManager;
112 public void setTitle(String title) {
113 PopupFragment popup = oNavigationManager.getDialog();
115 popup.getDialog().setTitle(title);
117 TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
118 titleView.setText(title);
122 public DatabaseManager getDatabaseManager() {
123 return oDatabaseManager;
126 public void addDefaultSearchIndexes() {
127 for(int i = 0; i < PAGES.length; i++) {
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) {
138 public void addSearchIndices(SearchIndices[] indices) {
139 oDatabaseManager.addSearchIndices(indices);
142 public NfcCardListener getNfcCardListener() {
143 return oNfcCardListener;
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());
151 String pagename = oNavigationManager.getCurrentPageName();
152 if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
153 MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
154 fragment.showNfcCardData(bundle);
156 oNavigationManager.navigatePage("MensaCard", bundle);