alpha 0.0.1
[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.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;
27
28 /** CampusAppContext
29  * A context, that is pushed to each fragment.
30  * This context will be persistent during app execution.
31  */
32 public class CampusAppContext {
33     private class AppPage {
34         String name;
35         Class<?> fragment;
36         int fragementType;
37
38         public AppPage(String name, Class<?> fragment) {
39             this.name = name;
40             this.fragment = fragment;
41         }
42
43         public AppPage(String name, Class<?> fragment, int type) {
44             this.name = name;
45             this.fragment = fragment;
46             this.fragementType = type;
47         }
48     }
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)
62     };
63
64     private static CampusAppContext instance;
65     public static CampusAppContext getInstance() {
66         Log.i("AppContext", "Request new context instance");
67         return instance;
68     }
69
70     private Activity oMainActivity;
71     private NavigationManager oNavigationManager;
72     private DatabaseManager oDatabaseManager;
73     private NfcCardListener oNfcCardListener;
74     private Bundle oContextVariables;
75
76     public CampusAppContext(CampusApp mainActivity, int fragmentContainerId) {
77         final CampusAppContext AppContext = this;
78         instance = this;
79         oMainActivity = mainActivity;
80         oContextVariables = new Bundle();
81         oNavigationManager = new NavigationManager(this, fragmentContainerId);
82         oDatabaseManager = new DatabaseManager(this);
83         oNfcCardListener = new NfcCardListener(this);
84
85         for(int i = 0; i < PAGES.length; i++)
86             oNavigationManager.registerPage(PAGES[i].name, PAGES[i].fragment, PAGES[i].fragementType);
87
88         oNfcCardListener.registerNfcCardInterface(new NfcCardInterface() {
89             @Override
90             public void onNfcReaderStateChanged(boolean state) {
91
92             }
93
94             @Override
95             public void onNfcReaderReceived(NfcCardData data) {
96                 if (data != null)
97                     AppContext.onNfcCardDataReceived(data);
98             }
99         });
100     }
101
102     public Activity getMainActivity() {
103         return oMainActivity;
104     }
105     public void setMainActivity(Activity activity) {
106         oMainActivity = activity;
107     }
108
109     public NavigationManager getNavigationManager() {
110         return oNavigationManager;
111     }
112
113     public void setTitle(String title) {
114         PopupFragment popup = oNavigationManager.getDialog();
115         if(popup != null) {
116             if(popup.getDialog() != null)
117                 popup.getDialog().setTitle(title);
118         } else {
119             TextView titleView = (TextView)oMainActivity.findViewById(R.id.title);
120             titleView.setText(title);
121         }
122     }
123
124     public DatabaseManager getDatabaseManager() {
125         return oDatabaseManager;
126     }
127
128     public void addDefaultSearchIndexes() {
129         for(int i = 0; i < PAGES.length; i++) {
130             try {
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) {
136             }
137         }
138     }
139
140     public void addSearchIndices(SearchIndices[] indices) {
141         oDatabaseManager.addSearchIndices(indices);
142     }
143
144     public NfcCardListener getNfcCardListener() {
145         return oNfcCardListener;
146     }
147
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);
153
154         oContextVariables.putInt("nfcCardUniqueId", data.getUniqueId());
155         oContextVariables.putDouble("nfcCardBalance", cardBalance);
156
157         String pagename = oNavigationManager.getCurrentPageName();
158         if(pagename != null && pagename.equalsIgnoreCase("MensaCard")) {
159             MensaCard fragment = (MensaCard) oNavigationManager.getCurrentFragment();
160             fragment.showNfcCardData(bundle);
161         } else
162             oNavigationManager.navigatePage("MensaCard", bundle);
163     }
164
165     public Bundle getContextVariables() {
166         return oContextVariables;
167     }
168
169     public String getResString(int id) {
170         String str = oMainActivity.getResources().getString(id);
171         return str;
172     }
173
174 }