Blame view

PremiereActivite/app/src/main/java/com/example/app_10p5/MainActivite.java 16.2 KB
c8059613   JLo'w   Re-fonte de l'app...
1
2
  package com.example.app_10p5;
  
e9b6c14d   JLo'w   Passage au suppor...
3
  import android.app.Activity;
76de4d29   JLo'w   Connexion et NFC ...
4
  import android.app.Fragment;
3c5d3089   JLo'w   Work in progress ...
5
6
  import android.app.FragmentManager;
  import android.app.FragmentTransaction;
76de4d29   JLo'w   Connexion et NFC ...
7
  import android.app.PendingIntent;
c8059613   JLo'w   Re-fonte de l'app...
8
  import android.content.Intent;
e274d65a   JLo'w   Meilleur vérifica...
9
  import android.content.SharedPreferences;
0aec73b6   JLo'w   Petit changement ...
10
  import android.graphics.drawable.ColorDrawable;
76de4d29   JLo'w   Connexion et NFC ...
11
  import android.nfc.NfcAdapter;
c8059613   JLo'w   Re-fonte de l'app...
12
  import android.os.Bundle;
e274d65a   JLo'w   Meilleur vérifica...
13
  import android.preference.PreferenceManager;
76de4d29   JLo'w   Connexion et NFC ...
14
  import android.support.design.widget.Snackbar;
c8059613   JLo'w   Re-fonte de l'app...
15
  import android.support.v4.view.ViewPager;
e274d65a   JLo'w   Meilleur vérifica...
16
  import android.text.TextUtils;
0aec73b6   JLo'w   Petit changement ...
17
18
19
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
c8059613   JLo'w   Re-fonte de l'app...
20
  import android.view.View;
76de4d29   JLo'w   Connexion et NFC ...
21
  import android.widget.EditText;;
93f90e35   JLo'w   NFC et foreground
22
23
  import android.widget.Toast;
  
c1f92981   JLo'w   Implémentation de...
24
25
26
  import org.json.JSONObject;
  
  import java.net.URL;
e274d65a   JLo'w   Meilleur vérifica...
27
  import java.net.URLEncoder;
c1f92981   JLo'w   Implémentation de...
28
29
  import java.util.HashMap;
  
c8059613   JLo'w   Re-fonte de l'app...
30
31
32
33
  
  /**
   * Created by beaus on 24/04/2016.
   */
3c5d3089   JLo'w   Work in progress ...
34
  public class MainActivite extends Activity implements ASyncResponse, main_tab_frag.OnFragmentInteractionListener {
c8059613   JLo'w   Re-fonte de l'app...
35
  
520cecde   JLo'w   Un petit plus, un...
36
37
38
39
40
41
      public static final int STATE_RIEN = 0;
      public static final int STATE_COMMANDE = 3;
      public static final int STATE_VIDANGE = 4;
      public static final int STATE_RECHARGEMENT = 2;
      public static final int STATE_CREATION_COMPTE = 1;
      public static final int STATE_CONNEXION = 5;
e274d65a   JLo'w   Meilleur vérifica...
42
  
520cecde   JLo'w   Un petit plus, un...
43
44
45
46
      public static final long EXPIRATION = 1000*60*10;
  
      private int mState;
      private String mToken;
8cd8911a   JLo'w   Connexion enfin f...
47
      private int mDroit;
520cecde   JLo'w   Un petit plus, un...
48
      private long mTimeToken;
8cd8911a   JLo'w   Connexion enfin f...
49
      private String mUser;
520cecde   JLo'w   Un petit plus, un...
50
  
76de4d29   JLo'w   Connexion et NFC ...
51
52
      private NfcAdapter mNfcAdapter;
  
c8059613   JLo'w   Re-fonte de l'app...
53
54
55
56
      @Override
      protected void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
          setContentView(R.layout.layout_main);
e274d65a   JLo'w   Meilleur vérifica...
57
          PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
520cecde   JLo'w   Un petit plus, un...
58
  
efd095eb   JLo'w   No more joke
59
          setTitle(getResources().getString(R.string.app_name));
fc1fed0d   JLo'w   Restons cohérent
60
  
520cecde   JLo'w   Un petit plus, un...
61
62
          mState = STATE_RIEN;
          mTimeToken = -1;
fc1fed0d   JLo'w   Restons cohérent
63
          mToken = null;
520cecde   JLo'w   Un petit plus, un...
64
  
0aec73b6   JLo'w   Petit changement ...
65
          getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorPrimary)));
76de4d29   JLo'w   Connexion et NFC ...
66
          mNfcAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());
0aec73b6   JLo'w   Petit changement ...
67
  
2681581a   JLo'w   menu pour changer...
68
69
70
          if(savedInstanceState == null){
              FragmentManager fragmentManager = getFragmentManager();
              FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
76de4d29   JLo'w   Connexion et NFC ...
71
              ConnectionFragment fragment = new ConnectionFragment();
2681581a   JLo'w   menu pour changer...
72
73
74
75
76
77
78
79
80
81
              fragmentTransaction.add(R.id.fragment_container, fragment);
              fragmentTransaction.commit();
          }
          else{
              mTimeToken = savedInstanceState.getLong("timeToken");
              mToken = savedInstanceState.getString("token");
              mState = savedInstanceState.getInt("state");
              mUser = savedInstanceState.getString("user");
              mDroit = savedInstanceState.getInt("droit");
          }
c8059613   JLo'w   Re-fonte de l'app...
82
83
      }
  
c66109e1   JLo'w   Ajout du code des...
84
      @Override
0aec73b6   JLo'w   Petit changement ...
85
86
87
88
89
90
91
92
93
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.menu, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle item selection
e274d65a   JLo'w   Meilleur vérifica...
94
95
         if(item.getItemId() == R.id.action_settings){
             getFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).addToBackStack("settings").commit();
2681581a   JLo'w   menu pour changer...
96
         }
28dc4009   JLo'w   Déconnexion !!!!!
97
98
99
          else if(item.getItemId() == R.id.action_disconnect){
             disconnect();
         }
2681581a   JLo'w   menu pour changer...
100
101
  
         return super.onOptionsItemSelected(item);
0aec73b6   JLo'w   Petit changement ...
102
103
104
      }
  
      @Override
3c5d3089   JLo'w   Work in progress ...
105
106
107
108
109
      public void onFragmentInteraction(String s){
  
      }
  
      @Override
c66109e1   JLo'w   Ajout du code des...
110
111
112
113
114
115
116
117
118
119
      public void onSaveInstanceState(Bundle savedInstanceState){
          savedInstanceState.putString("token", mToken);
          savedInstanceState.putInt("state", mState);
          savedInstanceState.putString("user", mUser);
          savedInstanceState.putInt("droit", mDroit);
          savedInstanceState.putLong("timeToken", mTimeToken);
  
          super.onSaveInstanceState(savedInstanceState);
      }
  
76de4d29   JLo'w   Connexion et NFC ...
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
      @Override
      public void onPause() {
          stopForegroundDispatch(this, mNfcAdapter);
          super.onPause();
      }
  
      @Override
      public void onResume() {
          super.onResume();
          setupForegroundDispatch(this, mNfcAdapter);
      }
  
      public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter){
          if(adapter != null){
              final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
              intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
              final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
              adapter.enableForegroundDispatch(activity, pendingIntent, null, null);
          }
          else{
              Toast.makeText(activity, "Impossible d'initialiser le NFC", Toast.LENGTH_SHORT).show();
          }
      }
  
      public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
          if(adapter != null){
              adapter.disableForegroundDispatch(activity);
          }
          else{
              Toast.makeText(activity, "Impossible d'initialiser le NFC", Toast.LENGTH_SHORT).show();
          }
      }
  
c66109e1   JLo'w   Ajout du code des...
153
      public void valideCreationCompte(View v){
e274d65a   JLo'w   Meilleur vérifica...
154
          if((TextUtils.getTrimmedLength(mToken) == 30) && ((System.currentTimeMillis() - mTimeToken) < EXPIRATION)) {
c66109e1   JLo'w   Ajout du code des...
155
156
157
              EditText champMontant = (EditText) findViewById(R.id.creation_montant);
              float montant = 0.0f;
  
e274d65a   JLo'w   Meilleur vérifica...
158
159
160
161
162
163
164
165
166
167
168
169
170
              if(!TextUtils.isEmpty(champMontant.getText().toString())){
                  try{
                      montant = Float.parseFloat(champMontant.getText().toString());
                  }
                  catch (Throwable t){
                      Toast.makeText(this, "Remplir le champ montant avec un nombre: " + t.toString(), Toast.LENGTH_LONG).show();
                  }
  
                  if(mDroit >= 1){
                      if((montant > 0.0f) && (montant < 200.0f)){
                          mState = STATE_CREATION_COMPTE;
                          champMontant.setText(null);
  
76de4d29   JLo'w   Connexion et NFC ...
171
172
173
174
175
176
177
178
179
180
                          Bundle b = new Bundle();
                          b.putString("token", mToken);
                          b.putInt("state", mState);
                          b.putFloat("montant", montant);
  
  
                          NFCFragment nfc = new NFCFragment();
                          nfc.setArguments(b);
  
                          getFragmentManager().beginTransaction().replace(R.id.fragment_container, nfc).addToBackStack(null).commit();
e274d65a   JLo'w   Meilleur vérifica...
181
182
183
184
185
186
187
188
                      }
                      else{
                          Toast.makeText(this, "Valeur incorrecte.", Toast.LENGTH_LONG).show();
                      }
                  }
                  else{
                      Toast.makeText(this, "Droit insuffisant.", Toast.LENGTH_LONG).show();
                  }
c66109e1   JLo'w   Ajout du code des...
189
190
              }
              else{
e274d65a   JLo'w   Meilleur vérifica...
191
                  champMontant.setError("Montant requis.");
c66109e1   JLo'w   Ajout du code des...
192
193
194
              }
          }
          else{
28dc4009   JLo'w   Déconnexion !!!!!
195
              disconnect();
c66109e1   JLo'w   Ajout du code des...
196
197
198
          }
      }
  
c8059613   JLo'w   Re-fonte de l'app...
199
200
      public void valideCommande(View v)
      {
e274d65a   JLo'w   Meilleur vérifica...
201
          if((TextUtils.getTrimmedLength(mToken) == 30) && ((System.currentTimeMillis() - mTimeToken) < EXPIRATION)) {
520cecde   JLo'w   Un petit plus, un...
202
203
              EditText champMontant = (EditText) findViewById(R.id.commande_prix);
              EditText champQuantite = (EditText) findViewById(R.id.commande_quantite);
c66109e1   JLo'w   Ajout du code des...
204
205
206
              float montant = 0.0f;
              int quantite = 0;
  
e274d65a   JLo'w   Meilleur vérifica...
207
208
              //TODO: gérer le XOR de pute
  
c66109e1   JLo'w   Ajout du code des...
209
210
211
212
213
214
215
216
              try{
                  montant = Float.parseFloat(champMontant.getText().toString());
                  quantite = Integer.parseInt(champQuantite.getText().toString());
              }
              catch (Throwable t)
              {
                  Toast.makeText(this, "Remplir les champs avec des nombres: " + t.toString(), Toast.LENGTH_LONG).show();
              }
520cecde   JLo'w   Un petit plus, un...
217
  
c66109e1   JLo'w   Ajout du code des...
218
              if ((montant > 0.0f) && (montant < 200.0f) && (quantite > 0) && (mDroit >= 1)) {
520cecde   JLo'w   Un petit plus, un...
219
                  mState = STATE_COMMANDE;
e274d65a   JLo'w   Meilleur vérifica...
220
221
                  champMontant.setText(null);
                  champQuantite.setText(null);
814b5a6f   JLo'w   On vide les champ...
222
  
76de4d29   JLo'w   Connexion et NFC ...
223
224
225
226
227
228
229
230
231
232
                  Bundle b = new Bundle();
                  b.putString("token", mToken);
                  b.putInt("state", mState);
                  b.putFloat("montant", montant);
                  b.putInt("quantite", quantite);
  
                  NFCFragment nfc = new NFCFragment();
                  nfc.setArguments(b);
  
                  getFragmentManager().beginTransaction().replace(R.id.fragment_container, nfc).addToBackStack(null).commit();
520cecde   JLo'w   Un petit plus, un...
233
              }
c66109e1   JLo'w   Ajout du code des...
234
235
236
              else{
                  Toast.makeText(this, "Valeur incorrecte ou droit insuffisant.", Toast.LENGTH_LONG).show();
              }
520cecde   JLo'w   Un petit plus, un...
237
238
          }
          else{
28dc4009   JLo'w   Déconnexion !!!!!
239
              disconnect();
520cecde   JLo'w   Un petit plus, un...
240
241
242
243
244
          }
      }
  
      public void valideRechargement(View v)
      {
e274d65a   JLo'w   Meilleur vérifica...
245
246
          System.out.println(TextUtils.getTrimmedLength(mToken));
          if((TextUtils.getTrimmedLength(mToken) == 30) && ((System.currentTimeMillis() - mTimeToken) < EXPIRATION)) {
c66109e1   JLo'w   Ajout du code des...
247
248
249
              EditText champMontant = (EditText) findViewById(R.id.rechargement_champ_montant);
              float montant = 0.0f;
  
e274d65a   JLo'w   Meilleur vérifica...
250
251
252
253
254
255
256
257
258
259
260
261
262
              if(!TextUtils.isEmpty(champMontant.getText().toString())){
                  try{
                      montant = Float.parseFloat(champMontant.getText().toString());
                  }
                  catch (Throwable t){
                      Toast.makeText(this, "Remplir le champ montant avec un nombre: " + t.toString(), Toast.LENGTH_LONG).show();
                  }
  
                  if(mDroit >= 2){
                      if((montant > 0.0f) && (montant < 200.0f)){
                          mState = STATE_RECHARGEMENT;
                          champMontant.setText(null);
  
76de4d29   JLo'w   Connexion et NFC ...
263
264
265
266
267
268
269
270
271
                          Bundle b = new Bundle();
                          b.putString("token", mToken);
                          b.putInt("state", mState);
                          b.putFloat("montant", montant);
  
                          NFCFragment nfc = new NFCFragment();
                          nfc.setArguments(b);
  
                          getFragmentManager().beginTransaction().replace(R.id.fragment_container, nfc).addToBackStack(null).commit();
e274d65a   JLo'w   Meilleur vérifica...
272
273
274
275
276
277
278
279
                      }
                      else{
                          Toast.makeText(this, "Valeur incorrecte.", Toast.LENGTH_LONG).show();
                      }
                  }
                  else{
                      Toast.makeText(this, "Droit insuffisant.", Toast.LENGTH_LONG).show();
                  }
c66109e1   JLo'w   Ajout du code des...
280
281
              }
              else{
e274d65a   JLo'w   Meilleur vérifica...
282
                  champMontant.setError("Montant requis.");
c66109e1   JLo'w   Ajout du code des...
283
              }
520cecde   JLo'w   Un petit plus, un...
284
285
          }
          else{
28dc4009   JLo'w   Déconnexion !!!!!
286
              disconnect();
520cecde   JLo'w   Un petit plus, un...
287
288
289
290
291
292
293
294
          }
      }
  
      public void valideConnection(View v)
      {
          EditText viewUser = (EditText) findViewById(R.id.connection_username);
          EditText viewPsw = (EditText) findViewById(R.id.connection_password);
  
c1f92981   JLo'w   Implémentation de...
295
296
297
          String user = viewUser.getText().toString();
          String password = viewPsw.getText().toString();
  
e274d65a   JLo'w   Meilleur vérifica...
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
          if (!TextUtils.isEmpty(user)) {
              if(!TextUtils.isEmpty(password)){
                  mState = STATE_CONNEXION;
  
                  viewUser.setText(null);
                  viewPsw.setText(null);
  
                  try{
                      SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                      URL url = new URL(settings.getString("server_address", null) + "api/utilisateur/connexion");
                      HashMap<String, String> param = new HashMap<String, String>();
                      param.put("login", URLEncoder.encode(user, "UTF-8"));
                      param.put("mdp", URLEncoder.encode(password, "UTF-8"));
                      NetworkThread nt = new NetworkThread(url, param);
                      nt.delegate = this;
                      nt.execute();
                  }
                  catch (Throwable t) {
                      Toast.makeText(this, "Erreur: " + t.toString(), Toast.LENGTH_LONG).show();
                      System.out.println("Exception: " + t.toString());
                  }
c1f92981   JLo'w   Implémentation de...
319
              }
e274d65a   JLo'w   Meilleur vérifica...
320
321
              else {
                  viewPsw.setError("Mot de passe requis.");
c1f92981   JLo'w   Implémentation de...
322
              }
520cecde   JLo'w   Un petit plus, un...
323
          }
c66109e1   JLo'w   Ajout du code des...
324
          else{
e274d65a   JLo'w   Meilleur vérifica...
325
              viewUser.setError("Utilisateur requis.");
c66109e1   JLo'w   Ajout du code des...
326
          }
520cecde   JLo'w   Un petit plus, un...
327
      }
8d573e63   JLo'w   Mise en place de ...
328
329
  
      public void valideVidange(View v){
e274d65a   JLo'w   Meilleur vérifica...
330
          if((TextUtils.getTrimmedLength(mToken) == 30) && ((System.currentTimeMillis() - mTimeToken) < EXPIRATION)) {
8d573e63   JLo'w   Mise en place de ...
331
332
333
  
              if((mDroit >= 2)){
                  mState = STATE_VIDANGE;
76de4d29   JLo'w   Connexion et NFC ...
334
335
336
337
338
339
340
341
                  Bundle b = new Bundle();
                  b.putString("token", mToken);
                  b.putInt("state", mState);
  
                  NFCFragment nfc = new NFCFragment();
                  nfc.setArguments(b);
  
                  getFragmentManager().beginTransaction().replace(R.id.fragment_container, nfc).addToBackStack(null).commit();
8d573e63   JLo'w   Mise en place de ...
342
343
344
345
346
347
              }
              else{
                  Toast.makeText(this, "Droit insuffisant.", Toast.LENGTH_LONG).show();
              }
          }
          else{
28dc4009   JLo'w   Déconnexion !!!!!
348
              disconnect();
8d573e63   JLo'w   Mise en place de ...
349
350
          }
      }
520cecde   JLo'w   Un petit plus, un...
351
352
  
      @Override
76de4d29   JLo'w   Connexion et NFC ...
353
354
355
      protected void onNewIntent(Intent intent){
          super.onNewIntent(intent);
          Fragment frag = getFragmentManager().findFragmentById(R.id.fragment_container);
4ef24041   JLo'w   Retour du JSONObj...
356
  
76de4d29   JLo'w   Connexion et NFC ...
357
358
359
          if(mState != STATE_RIEN && frag instanceof NFCFragment){
              NFCFragment nfc = (NFCFragment) frag;
              nfc.handleIntent(intent);
520cecde   JLo'w   Un petit plus, un...
360
          }
c8059613   JLo'w   Re-fonte de l'app...
361
      }
93f90e35   JLo'w   NFC et foreground
362
  
c1f92981   JLo'w   Implémentation de...
363
364
365
      /* Retour du network thread */
      @Override
      public void processFinish(JSONObject output) {
76de4d29   JLo'w   Connexion et NFC ...
366
  
96cf88d2   JLo'w   Réception de JSON...
367
368
          if(output.length() != 0){
              try{
8cd8911a   JLo'w   Connexion enfin f...
369
                  if(output.get("status").toString().equals("ok")){
76de4d29   JLo'w   Connexion et NFC ...
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
                      switch (mState){
                          case STATE_COMMANDE:
                              Snackbar.make(findViewById(R.id.coordinator), "Client débité de " + output.get("montant") + "€. " + output.get("soldeAncien") + "€ -> " + output.getString("soldeNouveau") + "€", Snackbar.LENGTH_INDEFINITE).show();
                              break;
                          case STATE_CONNEXION:
                              mToken = output.get("jeton").toString();
                              mTimeToken = System.currentTimeMillis();
                              mDroit = output.getInt("droit");
                              mUser = output.get("login").toString();
                              Snackbar.make(findViewById(R.id.coordinator), "Bonjour " + mUser + " vous êtes connecté pour " + EXPIRATION / (1000 * 60) + " minutes.", Snackbar.LENGTH_SHORT).show();
                              getFragmentManager().beginTransaction().replace(R.id.fragment_container, new main_tab_frag()).commit();
                              break;
                          case STATE_CREATION_COMPTE:
                              Snackbar.make(findViewById(R.id.coordinator), "Client créé avec un solde de " + output.get("soldeNouveau") + "€", Snackbar.LENGTH_INDEFINITE).show();
                              break;
                          case STATE_RECHARGEMENT:
                              Snackbar.make(findViewById(R.id.coordinator), "Client rechargé: " + output.get("soldeAncien") + "€ ->" + output.get("soldeNouveau") + "€", Snackbar.LENGTH_INDEFINITE).show();
                              break;
                          case STATE_VIDANGE:
                              Snackbar.make(findViewById(R.id.coordinator), "Client vidé: " + output.get("soldeAncien") + "€ -> 0€", Snackbar.LENGTH_INDEFINITE).show();
                              break;
                          case STATE_RIEN:
                          default:
                              Toast.makeText(this, "WTF, le cancer est dans l'application!!", Toast.LENGTH_LONG).show();
                              break;
                      }
96cf88d2   JLo'w   Réception de JSON...
396
397
                  }
                  else{
76de4d29   JLo'w   Connexion et NFC ...
398
                      Toast.makeText(this, "Erreur: " + output.get("status"), Toast.LENGTH_LONG).show();
96cf88d2   JLo'w   Réception de JSON...
399
400
401
                  }
              }
              catch(Throwable t){
8cd8911a   JLo'w   Connexion enfin f...
402
                  Toast.makeText(this, "WTF, le cancer est dans l'application!!" + t.toString(), Toast.LENGTH_LONG).show();
96cf88d2   JLo'w   Réception de JSON...
403
404
405
406
407
              }
          }
          else{
              Toast.makeText(this, "Impossible de se connecter au serveur", Toast.LENGTH_LONG).show();
          }
76de4d29   JLo'w   Connexion et NFC ...
408
409
410
  
          mState = STATE_RIEN;
          getFragmentManager().popBackStack();
c1f92981   JLo'w   Implémentation de...
411
      }
3c5d3089   JLo'w   Work in progress ...
412
413
414
415
416
417
418
419
  
      public String getToken(){
          return mToken;
      }
  
      public long getTimeToken(){
          return mTimeToken;
      }
28dc4009   JLo'w   Déconnexion !!!!!
420
421
422
423
424
  
      public void disconnect(){
          mToken = null;
          mDroit = 0;
          mUser = null;
fc1fed0d   JLo'w   Restons cohérent
425
          mTimeToken = -1;
76de4d29   JLo'w   Connexion et NFC ...
426
          mState = STATE_RIEN;
28dc4009   JLo'w   Déconnexion !!!!!
427
428
429
430
431
  
          Toast.makeText(this, "Veuillez vous reconnecter.", Toast.LENGTH_SHORT).show();
          final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
          viewPager.setCurrentItem(0);
      }
c8059613   JLo'w   Re-fonte de l'app...
432
  }