Commit bd0e5187 authored by Martin LOISEAU's avatar Martin LOISEAU 🎄
Browse files

Remove useless files

parent 0c4e3ba4
......@@ -18,7 +18,6 @@
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
......
......@@ -4,22 +4,11 @@ import android.Manifest;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import com.example.qrquest.QR.handling.QRCodeBuilder;
import com.example.qrquest.QR.model.QRCode;
import com.example.qrquest.exceptions.UnhandledQRException;
import com.example.qrquest.exceptions.UnsupportedQRException;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.Result;
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.gms.common.GoogleApiAvailability;
......@@ -32,17 +21,11 @@ import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RelativeLayout;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
......
package com.example.qrquest.QR.handling;
import android.util.Log;
import com.example.qrquest.QR.model.QRCode;
import com.example.qrquest.QR.model.QRCodeAtomique;
import com.example.qrquest.QR.model.QRCodeEnsemble;
import com.example.qrquest.QR.model.QrCodeJson;
import com.example.qrquest.exceptions.UnhandledQRException;
import com.example.qrquest.exceptions.UnsupportedQRException;
import com.example.qrquest.utils.DecompressionJSON;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
/**
* Created by Jules Leguy on 20/01/18.
* Modified by Florian Lherbeil
* Modified by Martin Loiseau for QRQuest
* Builds a QRCode object from a Json object
*/
public class QRCodeBuilder {
public static QRCode build(String dataQR) throws UnhandledQRException, UnsupportedQRException {
Log.d("Debug", "QR CODE DETECT2");
// On stocke la valeur brute initiale pour pouvoir effetuer la détection multiple
final String rawvalue = dataQR;
String result;
// On vérfie si la chaine est encodée en base64
if (dataQR.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$")) {
// Début de la décompression
try {
dataQR = DecompressionJSON.decompresser(dataQR);
} catch (IOException e) {
e.printStackTrace();
}
}
boolean qrIsWeb = false;
// Si la chaine trouvée n'est pas compressée et qu'elle n'est pas du json, c'est alors simplement du texte
// On rajoute le texte dans une chaine json comportement les attributs type et data
// Le texte est alors traité comme un qrcode atomique mais avec un site web actif
if (!dataQR.startsWith("{")) {
dataQR = "{\"type\"=\"unique\",\"data\"=[\"" + dataQR + "\"]}";
qrIsWeb = true;
}
Log.v("data_qr", dataQR);
Gson gson = new GsonBuilder().create();
QrCodeJson code = gson.fromJson(dataQR, QrCodeJson.class);
Log.i("build","Miss Build : "+code.getType());
// Si le json est trop gros et est stocké sur le drive dans un fichier texte
// Manque tests avec un qrcode réel
if (code.getType().equalsIgnoreCase("atomique")||code.getType().equalsIgnoreCase("unique")||code.getType().equalsIgnoreCase("xl")) {
QRCodeAtomique qr = new QRCodeAtomique(code, dataQR);
if (qrIsWeb)
qr.setWebSite();
return qr;
} else if (code.getType().equalsIgnoreCase("ensemble")) {
return new QRCodeEnsemble(code, dataQR);
}
//Normalement impossible, mais si aucun cas précédent
return new QRCodeAtomique(code, rawvalue);
}
}
package com.example.qrquest.QR.model;
/**
* Created by Florian Lherbeil
*/
/**
* Classe permettant de récupérer les informations sur les musiques contenues dans un json
*/
public class FileJson {
private String type="";
private Object url;
private String name="";
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url.toString();
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.example.qrquest.QR.model;
import com.google.gson.internal.LinkedTreeMap;
import java.util.ArrayList;
import java.util.Map;
/**
* Created by Jules Leguy on 20/01/18.
* Modified by Florian Lherbeil
*/
public abstract class QRCode implements QRCodeComponent {
//List of the content (links or text)
protected ArrayList<QRContent> m_content;
//String detected on the QRCode. Kept to compare easily if two QRCodes are contains
protected String m_rawValue;
protected QrCodeJson m_qrcodeJson;
public QRCode(QrCodeJson code, String rawValue){
m_qrcodeJson = code;
m_rawValue = rawValue;
m_content = new ArrayList<QRContent>();
}
public boolean contains(String str){
return str.equals(m_rawValue);
}
public String getRawValue(){
return m_rawValue;
}
public ArrayList<QRContent> getQRContent(){
return m_content;
}
/**
* Tell each contained QRFile to start downloading
*/
@Override
public void downloadQRFiles() {
for (QRContent qrContent : m_content){
//if (qrContent instanceof QRFile){
// ((QRFile) qrContent).downloadIfNotInMemory();
// }
}
}
public boolean isUrlFile(String data){
return data.contains(("url="));
}
/**
*
* @param linkedTreeMap
* @return une instance de FileJson
*
* Cette fonction permet de récupérer les valeurs contenues dans les data sous forme json
* comme pour les musiques ou les fichiers stockés sur le drive sans passer par gson
*
*/
public static FileJson createJsonFile(LinkedTreeMap linkedTreeMap){
FileJson fj = new FileJson();
for(Object entry : linkedTreeMap.entrySet()){
Map.Entry e = (Map.Entry)entry;
if(e.getKey().toString().equalsIgnoreCase("type")){
fj.setType(e.getValue().toString());
}
else if(e.getKey().toString().equalsIgnoreCase("name")){
fj.setName(e.getValue().toString());
}
else if(e.getKey().toString().equalsIgnoreCase("url")){
fj.setUrl(e.getValue().toString());
}
}
return fj;
}
/**
* Cette fonction sert dans la récupération des liens du QR Code Ensemble
* On ne peut pas utiliser Gson car il ne peut gérer le lien que le json contient
* @param linkedTreeMap
* @return
*/
public static QrCodeJson createQRCode(LinkedTreeMap linkedTreeMap){
QrCodeJson qr = new QrCodeJson();
for(Object entry : linkedTreeMap.entrySet()){
Map.Entry e = (Map.Entry)entry;
if(e.getKey().toString().equalsIgnoreCase("color")){
qr.setColor(e.getValue().toString());
}
else if(e.getKey().toString().equalsIgnoreCase("name")){
qr.setName(e.getValue().toString());
}
else if(e.getKey().toString().equalsIgnoreCase("type")){
qr.setType(e.getValue().toString());
}
else if(e.getKey().toString().equalsIgnoreCase("data")){
qr.setData((ArrayList)e.getValue());
}
}
return qr;
}
}
package com.example.qrquest.QR.model;
import android.util.Log;
import com.example.qrquest.exceptions.UnhandledQRException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.internal.LinkedTreeMap;
/**
* Created by Florian Lherbeil
*/
/**
* Represents the information of a QRCodeAtomique.
*/
public class QRCodeAtomique extends QRCode {
/**
*
* @param code QrCode Json obtenu dans la classe QRCodeBuilder
* @param rawValue valeur initiale contenue dans le qrcode
* @throws UnhandledQRException
*/
private String m_reponse;
private String m_id;
private boolean m_isWebsite = false;
public QRCodeAtomique(QrCodeJson code,String rawValue) throws UnhandledQRException {
super(code,rawValue);
Log.i("test","Data dans unique : "+code.getData());
Gson gson = new GsonBuilder().create();
//QrCodeJson codeQuestion = gson.fromJson(rawValue, QrCodeJsonQuestion.class);
// m_reponse = codeQuestion.getData().toString();
m_id = code.getId();
FileJson music=new FileJson();
for(Object data : code.getData()){
if(isUrlFile(data.toString())) {
if (data instanceof LinkedTreeMap) {
music = createJsonFile((LinkedTreeMap) data);
if (music.getType().equalsIgnoreCase("music")) {
String url = music.getUrl();
//m_content.add(new QRFile(url));
}
}
}
else {
m_content.add(new QRText(data.toString()));
}
}
}
public String getM_reponse() {
return this.m_reponse;
}
public String getM_id() {
return this.m_id;
}
public void setWebSite() { this.m_isWebsite = true; }
public boolean isWebsite() { return m_isWebsite; }
}
package com.example.qrquest.QR.model;
import java.util.List;
/**
* Created by Jules Leguy on 20/01/18.
*/
/**
* Using the Composite design pattern to manage QR Families
* The leafs are QRCodeAtomique or QRCodeEnsemble
* The composites are only FamilleQRCodesComposite
*
* The leafs and the composites must return a sorted list of their content (QRContent object)
*
*/
public interface QRCodeComponent {
//Each component possesses a list of QRContent (url or text)
List<QRContent> getQRContent();
//Each component must be able to notify each contained QRFile to start downloading
void downloadQRFiles();
//Method that each QRCodeComponent must implement to notify if it contains the QRCode defined by the string
boolean contains(String str);
}
package com.example.qrquest.QR.model;
import com.example.qrquest.exceptions.UnhandledQRException;
import com.google.gson.internal.LinkedTreeMap;
import java.util.ArrayList;
import java.util.Map;
/**
* Created by Florian Lherbeil
*/
public class QRCodeEnsemble extends QRCode{
private ArrayList<QRCodeAtomique> m_qrcodes;
/**
*
* @param code QrCode Json
* @param rawValue valeur initiale contenue dans le qrcode
* @throws UnhandledQRException Exception levée si le qrcode ensemble n'est pas valide
*/
public QRCodeEnsemble(QrCodeJson code,String rawValue) throws UnhandledQRException {
super(code, rawValue);
m_qrcodes = new ArrayList<>();
FileJson music;
for (Object data : code.getData()) {
if (data instanceof LinkedTreeMap) {
// Si on rencontre un QR Code complet dans les data, on récupère les lien qu'il contient
if (data.toString().startsWith("{qrcode")) {
LinkedTreeMap linkedTreeMap = (LinkedTreeMap) data;
for (Object entry : linkedTreeMap.entrySet()) {
Map.Entry e = (Map.Entry) entry;
if (e.getKey().toString().equalsIgnoreCase("qrcode")) {
QrCodeJson tempcode = QRCode.createQRCode((LinkedTreeMap) e.getValue());
QRCodeAtomique qr = new QRCodeAtomique(tempcode, rawValue);
m_qrcodes.add(qr);
for (Object data2 : qr.getQRContent()) {
// if(data2 instanceof QRFile){
// m_content.add((QRFile)data2);
//}
}
}
}
}
else {
// Ancien code si jamais on décide de revenir au stockage des liens uniquement
music = createJsonFile((LinkedTreeMap) data);
if (music.getType().equalsIgnoreCase("music")) {
String url = music.getUrl();
System.out.println("url :"+url);
// m_content.add(new QRFile(url));
}
}
} else {
throw new UnhandledQRException("QRCodeEnsemble cannot contain text");
}
}
}
public ArrayList<QRCodeAtomique> getQRCodes(){
return m_qrcodes;
}
}
package com.example.qrquest.QR.model;
/**
* Created by Jules Leguy on 20/01/18.
*/
public abstract class QRContent {
protected String m_content;
public QRContent(String content){
m_content = content;
}
public String getContent(){
return m_content;
}
}
package com.example.qrquest.QR.model;
/**
* Created by Jules Leguy on 20/01/18.
*/
public class QRText extends QRContent {
public QRText(String text){
super(text);
}
}
package com.example.qrquest.QR.model;
/**
* Created by Florian Lherbeil
* Classe permettant de récupérer les informations du json contenu dans le qrcode
*/
import java.util.ArrayList;
public class QrCodeJson {
private String name="";
private String type="";
private String id = null;
// Ce tableau contient toute les données contenu dans la balise data
// Ces données peuvent être sous la forme d'une chaine de caractère ou d'une nouvelle chaine de type Json
private ArrayList<Object> data= new ArrayList<>();
private String color="";
private int version=-1;
@Override
public String toString() {
return "QrCodeJson{" +
"name='" + name + '\'' +
", type='" + type + '\'' +
", data=" + data.size() +
", color='" + color + '\'' +
'}';
}
public String getName() {
return name;
}
public String getType() {
return type;
}
public ArrayList<Object> getData() {
return data;
}
public String getColor() {
return color;
}
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this.type = type;
}
public void setData(ArrayList<Object> data) {
this.data = data;
}
public void setColor(String color) {
this.color = color;
}
public int getVersion(){
return this.version;
}
public void setVersion(int version){
this.version = version;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
......@@ -13,7 +13,6 @@ import android.widget.RelativeLayout;
import androidx.appcompat.app.AppCompatActivity;
import com.example.qrquest.QR.model.QRCode;
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
......@@ -21,6 +20,11 @@ import com.google.android.gms.vision.barcode.BarcodeDetector;
import java.util.ArrayList;
/*
* Created by Martin Loiseau on 06/2020
* Heavily inspired by MainActivity of QRLudo https://github.com/univ-angers/QRLudo
*/