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.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;
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;
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)
68 private static CampusAppContext instance;
69 public static CampusAppContext getInstance() {
70 Log.i("AppContext", "Request new context instance");
74 private Activity oMainActivity;
75 private NavigationManager oNavigationManager;
76 private DatabaseManager oDatabaseManager;
77 private NfcCardListener oNfcCardListener;
78 private Bundle oContextVariables;
80 public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
81 final CampusAppContext AppContext = this;
83 oMainActivity = mainActivity;
84 oContextVariables = new Bundle();
85 oNavigationManager = new NavigationManager(this, fragmentContainerId);
86 oDatabaseManager = new DatabaseManager(this);
87 oNfcCardListener = new NfcCardListener(this);
89 for(int i = 0; i < PAGES.length; i++)
90 oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
92 oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
94 public void onNfcReaderStateChanged(boolean state) {
99 public void onNfcReaderReceived(NfcCardData data) {
101 AppContext.onNfcCardDataReceived(data);
106 public Activity getMainActivity() {
107 return oMainActivity;
109 public void setMainActivity(Activity activity) {
110 oMainActivity = activity;
113 public NavigationManager getNavigationManager() {
114 return oNavigationManager;
117 public void setTitle(String title) {
118 PopupFragment popup = oNavigationManager.getDialog();
120 if(popup.getDialog() != null)
121 popup.getDialog().setTitle(title);
123 TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
124 titleView.setText(title);
128 public DatabaseManager getDatabaseManager() {
129 return oDatabaseManager;
132 public void addDefaultSearchIndexes() {
133 for(int i = 0; i < PAGES.length; i++) {
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) {
144 public void addSearchIndices(SearchIndices[] indices) {
145 oDatabaseManager.addSearchIndices(indices);
148 public NfcCardListener getNfcCardListener() {
149 return oNfcCardListener;
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);
158 oContextVariables.putInt("nfcCardUniqueId", data.getUniqueId());
159 oContextVariables.putDouble("nfcCardBalance", cardBalance);
161 String pagename = oNavigationManager.getCurrentPageName();
162 if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
163 MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
164 fragment.showNfcCardData(bundle);
166 oNavigationManager.navigatePage("MensaCard", bundle);
169 public Bundle getContextVariables() {
170 return oContextVariables;
173 public String getResString(int id, Object... arguments) {
174 String format = getResString(id);
175 String res = String.format(format, arguments);
178 public String getResString(int id) {
179 String str = oMainActivity.getResources().getString(id);