Blame view

PremiereActivite/app/src/main/java/com/example/app_10p5/CarteActivite.java 7.45 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
  
520cecde   JLo'w   Un petit plus, un...
34
35
36
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
          switch (getIntent().getIntExtra("state", MainActivite.STATE_RIEN)) {
  
              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
62
63
          mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
  
93f90e35   JLo'w   NFC et foreground
64
65
66
67
68
          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
69
          }
6feece85   JLo'w   ajout NFC
70
  
93f90e35   JLo'w   NFC et foreground
71
          handleIntent(getIntent());
6feece85   JLo'w   ajout NFC
72
73
      }
  
93f90e35   JLo'w   NFC et foreground
74
75
      @Override
      protected void onResume() {
6feece85   JLo'w   ajout NFC
76
          super.onResume();
93f90e35   JLo'w   NFC et foreground
77
          setupForegroundDispatch(this, mNfcAdapter);
6feece85   JLo'w   ajout NFC
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
      }
  
      // 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
97
98
99
100
      protected void onNewIntent(Intent intent) {
          handleIntent(intent);
      }
  
93f90e35   JLo'w   NFC et foreground
101
102
103
104
105
106
107
108
109
      @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
110
              String id_carte = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
520cecde   JLo'w   Un petit plus, un...
111
              mParam.put("ID", id_carte);
93f90e35   JLo'w   NFC et foreground
112
113
              toast = Toast.makeText(getApplicationContext(), "ID Carte : " + id_carte, Toast.LENGTH_SHORT);
              toast.show();
6feece85   JLo'w   ajout NFC
114
115
116
117
118
119
120
121
122
123
  
              //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
124
125
126
127
  
                      //Clé A
                      byte[] cleA = new byte[]{(byte) 0xa0, (byte) 0xa1, (byte) 0xa2,
                              (byte) 0xa3, (byte) 0xa4, (byte) 0xa5};
93f90e35   JLo'w   NFC et foreground
128
  
6feece85   JLo'w   ajout NFC
129
130
                      //On veut juste lire le secteur 12
                      boolean estConnecte = mfc.authenticateSectorWithKeyA(12, cleA);
93f90e35   JLo'w   NFC et foreground
131
  
6feece85   JLo'w   ajout NFC
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
                      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
147
148
                              toast = Toast.makeText(getApplicationContext(), "Données lues : " + dataStr, Toast.LENGTH_SHORT);
                              toast.show();
6feece85   JLo'w   ajout NFC
149
150
                          }
                      } else {
93f90e35   JLo'w   NFC et foreground
151
152
                          toast = Toast.makeText(getApplicationContext(), "Erreur lors de la connection au secteur 12.", Toast.LENGTH_SHORT);
                          toast.show();
6feece85   JLo'w   ajout NFC
153
154
155
156
157
158
159
160
161
162
                      }
                      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
163
              } else {
93f90e35   JLo'w   NFC et foreground
164
165
                  toast = Toast.makeText(getApplicationContext(), "Pas de connection possible à la technologie Mifare Classic.", Toast.LENGTH_SHORT);
                  toast.show();
6feece85   JLo'w   ajout NFC
166
167
              }
  
93f90e35   JLo'w   NFC et foreground
168
169
              toast = Toast.makeText(getApplicationContext(), "Login Lille 1 : " + login, Toast.LENGTH_SHORT);
              toast.show();
6feece85   JLo'w   ajout NFC
170
171
  
              //Éxécution de la fonction
520cecde   JLo'w   Un petit plus, un...
172
173
              clientAPI();
              }
6feece85   JLo'w   ajout NFC
174
          }
c8059613   JLo'w   Re-fonte de l'app...
175
  
93f90e35   JLo'w   NFC et foreground
176
177
178
179
180
      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
181
182
      }
  
93f90e35   JLo'w   NFC et foreground
183
184
      public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
          adapter.disableForegroundDispatch(activity);
6feece85   JLo'w   ajout NFC
185
      }
520cecde   JLo'w   Un petit plus, un...
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
  
      public void clientAPI() {
          try {
              URL url = new URL(HOST + mAPI);
              NetworkThread nt = new NetworkThread(url, mParam);
              nt.execute();
          }
          catch (Throwable t){
              Toast.makeText(this, "WTF, le cancer est dans l'application!!", Toast.LENGTH_LONG).show();
              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...
206
  }