Blame view

PremiereActivite/app/src/main/java/com/example/app_10p5/CarteActivite.java 7.55 KB
c8059613   JLo'w   Re-fonte de l'app...
1
2
3
  package com.example.app_10p5;
  
  import android.app.Activity;
6feece85   JLo'w   ajout NFC
4
5
  import android.app.PendingIntent;
  import android.content.Intent;
6feece85   JLo'w   ajout NFC
6
7
8
  import android.nfc.NfcAdapter;
  import android.nfc.Tag;
  import android.nfc.tech.MifareClassic;
c8059613   JLo'w   Re-fonte de l'app...
9
  import android.os.Bundle;
6feece85   JLo'w   ajout NFC
10
11
  import android.widget.Toast;
  
520cecde   JLo'w   Un petit plus, un...
12
13
  import org.json.JSONObject;
  
6feece85   JLo'w   ajout NFC
14
  import java.io.IOException;
520cecde   JLo'w   Un petit plus, un...
15
16
  import java.net.URL;
  import java.util.HashMap;
c8059613   JLo'w   Re-fonte de l'app...
17
18
19
20
  
  /**
   * Created by beaus on 24/04/2016.
   */
520cecde   JLo'w   Un petit plus, un...
21
  public class CarteActivite extends Activity implements ASyncResponse {
6feece85   JLo'w   ajout NFC
22
23
  
      private NfcAdapter mNfcAdapter;
520cecde   JLo'w   Un petit plus, un...
24
25
26
27
      private HashMap<String, String> mParam;
      private String mAPI;
  
      public static final String HOST = "https://10p5.clubinfo.frogeye.fr/";
6feece85   JLo'w   ajout NFC
28
  
c8059613   JLo'w   Re-fonte de l'app...
29
30
31
32
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.layout_carte);
6feece85   JLo'w   ajout NFC
33
  
d57b6aad   JLo'w   Oups paramètres n...
34
          mParam = new HashMap<String, String>();
520cecde   JLo'w   Un petit plus, un...
35
  
d57b6aad   JLo'w   Oups paramètres n...
36
          switch (getIntent().getIntExtra("state", MainActivite.STATE_RIEN)) {
520cecde   JLo'w   Un petit plus, un...
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
              case MainActivite.STATE_COMMANDE:
                  mParam.put("quantite", String.valueOf(getIntent().getIntExtra("quantite", -1)));
                  mParam.put("montant", String.valueOf(getIntent().getFloatExtra("montant", -1)));
                  mParam.put("token", getIntent().getStringExtra("token"));
                  mAPI = "api/client/payer";
                  break;
              case MainActivite.STATE_CREATION_COMPTE:
                  //TODO: param
                  mAPI = "api/client/ajouter";
                  break;
              case MainActivite.STATE_RECHARGEMENT:
                  //TODO: param
                  mAPI = "api/client/recharger";
                  break;
              case MainActivite.STATE_VIDANGE:
                  //TODO: param
                  mAPI = "api/client/vidange";
                  break;
              case MainActivite.STATE_CONNEXION:
              case MainActivite.STATE_RIEN:
              default:
                  Toast.makeText(this, "WTF, le cancer est dans l'application!!", Toast.LENGTH_LONG).show();
                  finish();
                  return;
          }
  
6feece85   JLo'w   ajout NFC
63
64
          mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
  
93f90e35   JLo'w   NFC et foreground
65
66
67
68
69
          if (mNfcAdapter == null) {
              // Stop here, we definitely need NFC
              Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();
              finish();
              return;
6feece85   JLo'w   ajout NFC
70
          }
6feece85   JLo'w   ajout NFC
71
  
93f90e35   JLo'w   NFC et foreground
72
          handleIntent(getIntent());
6feece85   JLo'w   ajout NFC
73
74
      }
  
93f90e35   JLo'w   NFC et foreground
75
76
      @Override
      protected void onResume() {
6feece85   JLo'w   ajout NFC
77
          super.onResume();
93f90e35   JLo'w   NFC et foreground
78
          setupForegroundDispatch(this, mNfcAdapter);
6feece85   JLo'w   ajout NFC
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
      }
  
      // Convertit l'array de byte en chaîne hexadécimale (si le byte = 0x63, str = "63").
      private String ByteArrayToHexString(byte [] inarray) {
          int i, j, in;
          String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
          String out= "";
          for(j = 0 ; j < inarray.length ; ++j)
          {
              in = (int) inarray[j] & 0xff;
              i = (in >> 4) & 0x0f;
              out += hex[i];
              i = in & 0x0f;
              out += hex[i];
          }
          return out;
      }
  
      @Override
93f90e35   JLo'w   NFC et foreground
98
99
100
101
      protected void onNewIntent(Intent intent) {
          handleIntent(intent);
      }
  
93f90e35   JLo'w   NFC et foreground
102
103
104
105
106
107
108
109
110
      @Override
      protected void onPause() {
          stopForegroundDispatch(this, mNfcAdapter);
          super.onPause();
      }
  
      private void handleIntent(Intent intent){
          if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
              Toast toast;
6feece85   JLo'w   ajout NFC
111
              String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
520cecde   JLo'w   Un petit plus, un...
112
              mParam.put("ID", id_carte);
93f90e35   JLo'w   NFC et foreground
113
114
              toast = Toast.makeText(getApplicationContext(), "ID Carte : " + id_carte, Toast.LENGTH_SHORT);
              toast.show();
6feece85   JLo'w   ajout NFC
115
116
117
118
119
120
121
122
123
124
  
              //Lecture des données
              Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
              MifareClassic mfc = MifareClassic.get(tag);
              byte[] data;
              String prenom = null, nom = null, login = null;
  
              if (mfc != null) {
                  try {
                      mfc.connect();
6feece85   JLo'w   ajout NFC
125
126
127
128
  
                      //Clé A
                      byte[] cleA = new byte[]{(byte) 0xa0, (byte) 0xa1, (byte) 0xa2,
                              (byte) 0xa3, (byte) 0xa4, (byte) 0xa5};
93f90e35   JLo'w   NFC et foreground
129
  
6feece85   JLo'w   ajout NFC
130
131
                      //On veut juste lire le secteur 12
                      boolean estConnecte = mfc.authenticateSectorWithKeyA(12, cleA);
93f90e35   JLo'w   NFC et foreground
132
  
6feece85   JLo'w   ajout NFC
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
                      if (estConnecte) {
                          //Il y a 4 blocs dans le secteur 12 -> INE, numéro étudiant, prénom, nom
                          //On ne veut que prénom et nom, donc on passe les deux premiers
                          for (int i = 2, bIndex = mfc.sectorToBlock(12) + i; i < 4; i++, bIndex++) {
                              //sectorToBlock : Renvoie l'indice (global, parmis tous les blocs de
                              // tous les secteurs) du premier bloc du secteur 12
                              //Lit les données du bloc
                              data = mfc.readBlock(bIndex);
  
                              //Convertit les bytes en String
                              String dataStr = new String(data);
                              if (i == 2) //Prénom
                                  prenom = dataStr;
                              else if (i == 3) //Nom
                                  nom = dataStr;
93f90e35   JLo'w   NFC et foreground
148
149
                              toast = Toast.makeText(getApplicationContext(), "Données lues : " + dataStr, Toast.LENGTH_SHORT);
                              toast.show();
6feece85   JLo'w   ajout NFC
150
151
                          }
                      } else {
93f90e35   JLo'w   NFC et foreground
152
153
                          toast = Toast.makeText(getApplicationContext(), "Erreur lors de la connection au secteur 12.", Toast.LENGTH_SHORT);
                          toast.show();
6feece85   JLo'w   ajout NFC
154
155
156
157
158
159
160
161
162
163
                      }
                      mfc.close();
                  } catch (IOException e) {
                      System.out.println(e.getLocalizedMessage());
                  }
  
                  //Concaténation des données récupérées en login
                  login = prenom;
                  login.concat(".");
                  login.concat(nom);
6feece85   JLo'w   ajout NFC
164
              } else {
93f90e35   JLo'w   NFC et foreground
165
166
                  toast = Toast.makeText(getApplicationContext(), "Pas de connection possible à la technologie Mifare Classic.", Toast.LENGTH_SHORT);
                  toast.show();
6feece85   JLo'w   ajout NFC
167
168
              }
  
93f90e35   JLo'w   NFC et foreground
169
170
              toast = Toast.makeText(getApplicationContext(), "Login Lille 1 : " + login, Toast.LENGTH_SHORT);
              toast.show();
6feece85   JLo'w   ajout NFC
171
172
  
              //Éxécution de la fonction
520cecde   JLo'w   Un petit plus, un...
173
174
              clientAPI();
              }
6feece85   JLo'w   ajout NFC
175
          }
c8059613   JLo'w   Re-fonte de l'app...
176
  
93f90e35   JLo'w   NFC et foreground
177
178
179
180
181
      public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter){
          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);
6feece85   JLo'w   ajout NFC
182
183
      }
  
93f90e35   JLo'w   NFC et foreground
184
185
      public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
          adapter.disableForegroundDispatch(activity);
6feece85   JLo'w   ajout NFC
186
      }
520cecde   JLo'w   Un petit plus, un...
187
188
189
190
191
  
      public void clientAPI() {
          try {
              URL url = new URL(HOST + mAPI);
              NetworkThread nt = new NetworkThread(url, mParam);
6230c012   JLo'w   Correction sur le...
192
              nt.delegate = this;
520cecde   JLo'w   Un petit plus, un...
193
194
195
              nt.execute();
          }
          catch (Throwable t){
8ff199b1   JLo'w   Ajout info except...
196
              Toast.makeText(this, "WTF, le cancer est dans l'application!! " + t.toString(), Toast.LENGTH_LONG).show();
520cecde   JLo'w   Un petit plus, un...
197
198
199
200
201
202
203
204
205
206
207
              finish();
              return;
          }
      }
  
  
      /* Retour du NetworkThread */
      @Override
      public void processFinish(JSONObject output) {
          //TODO: faire un retour vers l'activity parente des données reçues.
      }
c8059613   JLo'w   Re-fonte de l'app...
208
  }