diff --git a/IcarusAndroid/.idea/caches/build_file_checksums.ser b/IcarusAndroid/.idea/caches/build_file_checksums.ser
index 88145cc900a6004c46abc7506b510ba51ec50728..5220e3ad210a362b55fa6836d05402f9de71973d 100644
Binary files a/IcarusAndroid/.idea/caches/build_file_checksums.ser and b/IcarusAndroid/.idea/caches/build_file_checksums.ser differ
diff --git a/IcarusAndroid/.idea/compiler.xml b/IcarusAndroid/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..61a9130cd9669c3843e6445dfe1fee2d493869bc
--- /dev/null
+++ b/IcarusAndroid/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IcarusAndroid/.idea/gradle.xml b/IcarusAndroid/.idea/gradle.xml
index 641226bc4492be8fb413d58ee6c022a50f65e994..7381ac7f058cf8381724479405aa29fb9088062e 100644
--- a/IcarusAndroid/.idea/gradle.xml
+++ b/IcarusAndroid/.idea/gradle.xml
@@ -1,8 +1,10 @@
+
diff --git a/IcarusAndroid/.idea/jarRepositories.xml b/IcarusAndroid/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ae8a18cc90bfef04c7627ba2dcf207a86fcc26b
--- /dev/null
+++ b/IcarusAndroid/.idea/jarRepositories.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IcarusAndroid/app/build.gradle b/IcarusAndroid/app/build.gradle
index 33a60750ca39ccd022feb735ee90ba533fcde3c9..8e5f1474dcef7b783503adc86aeb0027f22ef435 100644
--- a/IcarusAndroid/app/build.gradle
+++ b/IcarusAndroid/app/build.gradle
@@ -4,7 +4,7 @@ android {
compileSdkVersion 27
defaultConfig {
applicationId "framework.everywaretechnologies.it.icarusandroid"
- minSdkVersion 21
+ minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
diff --git a/IcarusAndroid/app/src/main/AndroidManifest.xml b/IcarusAndroid/app/src/main/AndroidManifest.xml
index 4858ad1350a07f5a056deee46b534f6686f54e81..c4a71981ddcc42dbe5a8e3a1d4e0bf7e5ee144f5 100644
--- a/IcarusAndroid/app/src/main/AndroidManifest.xml
+++ b/IcarusAndroid/app/src/main/AndroidManifest.xml
@@ -18,4 +18,5 @@
+
\ No newline at end of file
diff --git a/IcarusAndroid/app/src/main/java/framework/everywaretechnologies/it/icarusandroid/MainActivity.java b/IcarusAndroid/app/src/main/java/framework/everywaretechnologies/it/icarusandroid/MainActivity.java
index f2c4d0626e7d535cbdd34dc2ce44569a98a0d2fd..42539f686cb977ab7723cf7ffde84b3626006561 100644
--- a/IcarusAndroid/app/src/main/java/framework/everywaretechnologies/it/icarusandroid/MainActivity.java
+++ b/IcarusAndroid/app/src/main/java/framework/everywaretechnologies/it/icarusandroid/MainActivity.java
@@ -28,6 +28,8 @@ public class MainActivity extends AppCompatActivity {
private Switch intPrefSwitch;
private Icarus instance;
+ private String icarusUrl = "http://192.168.11.93:8082/icarus/str"; //PUT your own Icarus server URL
+
private EditText eventNameEditText;
Switch eventCategorySwitch;
Switch eventLabelSwitch;
@@ -38,22 +40,22 @@ public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- //IMP! settare all'stanza di Icarus un applicationContext e delle SharedPreferences
- instance=Icarus.getInstance(MainActivity.this);
+ //Set to Icarus instance an applicationContext and the SharedPreferences
+ instance=Icarus.getInstance(MainActivity.this, icarusUrl);
instance.setApplicationContext(getApplicationContext());
enteredExitedScreenTrackSwitch=findViewById(R.id.entered_exited_screen_track_switch);
boolPrefSwitch=findViewById(R.id.pref_bool_switch);
intPrefSwitch=findViewById(R.id.pref_int_switch);
- //creo due sharedPreferences fittizie per poter testare il cambio di pref di Icarus
+ //create two mock sharedPreferences to test pref Icarus' prefs change
myPrefs=getSharedPreferences("MyPref",0);
lastBoolPref=myPrefs.getBoolean("boolPref",false);
lastIntPref=myPrefs.getInt("intPref",-1);
instance.setCallerSharedPrefs(myPrefs);
- //setto gli switch in base allo stato nelle shared preferences
+ //set app switch based on sharedPreference values
if(lastBoolPref) boolPrefSwitch.setChecked(true);
else boolPrefSwitch.setChecked(false);
@@ -84,7 +86,7 @@ public class MainActivity extends AppCompatActivity {
Log.d(CLASS_NAME,"on btn log user changes");
- //prendo i valori degli switch
+ //take switch values
boolean boolSwitchValue;
int intSwitchValue;
diff --git a/IcarusAndroid/icarus/src/main/java/framework/everywaretechnologies/it/icarus/Icarus.java b/IcarusAndroid/icarus/src/main/java/framework/everywaretechnologies/it/icarus/Icarus.java
index 86cd41fcc55e3ba4d307aea6d5d74a7d5f80a3f1..12d26da73dac5d2d1d286f79796fe719acf14244 100644
--- a/IcarusAndroid/icarus/src/main/java/framework/everywaretechnologies/it/icarus/Icarus.java
+++ b/IcarusAndroid/icarus/src/main/java/framework/everywaretechnologies/it/icarus/Icarus.java
@@ -60,6 +60,7 @@ public class Icarus {
//------------------------------------------
private static final Icarus ourInstance = new Icarus();
+ private String icarusURL;
private Queue pendingResources; //FIFO
private Lock pendingResourceLock;
private Context appContext;// serve per istanziare un un'unica coda di richieste Volley (e non averne una per Activity)
@@ -67,9 +68,10 @@ public class Icarus {
private RequestQueue mVolleyRequestQueue;
private SharedPreferences callerSharedPrefs;
- public static Icarus getInstance(Context c) {
+ public static Icarus getInstance(Context c, String url) {
curContext=c;
+ ourInstance.icarusURL = url;
return ourInstance;
}
@@ -157,7 +159,7 @@ public class Icarus {
Log.e(curContext.getString(R.string.icarus_class),"call setCallerSharedPrefs(SharedPreferences prefs) on Icarus instance to do HTTP calls");
else{
- final JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, ICARUS_URL, toSendJson, new Response.Listener() {
+ final JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, ourInstance.icarusURL, toSendJson, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
diff --git a/README.md b/README.md
index 0b6a9c51439f31bc4b8f9f98364650521dc652ba..79eda7bd12095e772ab80dba307741ae50fe2a15 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
-#Icarus guida all'uso
+# Icarus guida all'uso
+
+### Importare Icarus in un'app:
-###Importare Icarus in un'app:
1. Trovare il file .aar di icarus (attualmente icarus-debug.aar, vedi più avanti per guida alla compilazione)
2. da Android Studio: File -> new -> new Module -> selezionare "Import .JAR/.AAR Package" -> selezionare il file del punto 1, dare un nome a come si vuole che venga chiamata la libreria all'interno dell'applicazione e fare finish.
3. Andare nel `settings.gradle` del progetto e guardare se è apparso il nome della libreria importata dato al punto 2.
@@ -9,31 +10,34 @@
6. Nella parte sx di Android Studio dove vedo la mia struttura del progetto dovrebbe essere apparso il modulo appena importato.
7. Sync gradle and fun!
-###Eliminare dipendenza da icarus in un'app
+### Eliminare dipendenza da icarus in un'app
+
1. Il modulo apparso nella struttura di progetto al punto 6 di "Importare Icarus in un'app" è una normale cartella eliminabile dal file system. Eliminarla dunque. *Tip: selezionare il modulo da Android Studio -> tasto dx del mouse -> reveal in finder (su Mac) -> eliminarla.*
2. Andare nel `build.gradle(module:app)` dell'app dalla quale si vuole eliminare la dipendenza a icarus e togliere le righe aggiunte ai punti 4 e 5 di "Importare Icarus in un'app"
3. Andare nel `settings.gradle` del progetto ed eliminare dagli `include` quello che si riferisce alla libreria che si vuole eliminare (in questo caso icarus).
4. Sync gradle and fun!
-###Creare da un progetto libreria di Android studio un file .aar
+### Creare da un progetto libreria di Android studio un file .aar
+
1. Seguire innanzitutto [questa guida](https://developer.android.com/studio/projects/android-library.html?#AddDependency) per creare un modulo di Android Studio esportabile come libreria .aar
2. Nel progetto di Android Studio selezionare il modulo corrispondente alla libreria
3. Nella barra degli strumenti di Android Studio -> Build -> Rebuild Project
4. Cambiando vista da quella di "Android" a quella di "Project" dove vedo la struttura del progetto in `/build/outputs/aar/` dovrei trovare un file libreria del tipo `-debug.aar`
-###Aggiornare la versione della libreria in un'app
+### Aggiornare la versione della libreria in un'app
+
1. Consiglio: eliminarla come nella sezione "Eliminare dipendenza da hermes in un'app", ma dal file `build.gradle(module:app)` commentare solo `implementation project("")` e nel `settings.gradle` lasciare tutto così com'è.
2. Quando si procede all'"Importare Icarus in un'app" dare la path del file .aar aggiornato e avere l'accortezza di dargli lo stesso nome di prima. Basterà decommentare la riga commentata nel punto 1 e il gioco è fatto.
3. Questo anche per prevenire una cosa che spero venga fixata nelle successive versioni di Android Studio: nell'eliminazione del modulo libreria dal file system, esso resta visibile ancora nella struttura del progetto.. Chiamando allo stesso modo il modulo aggiornato, quello rimasto nel progetto si aggiornerà in automatico.
-###Usare Icarus all'interno di un'app
+### Usare Icarus all'interno di un'app
Con Icarus è possibile tracciare eventi generici, cambio di Activity e cambio di preference (settaggi). Icarus è un Singleton, perciò ogni metodo potrà essere invocato solo dopo aver chiamato `Icarus.getInstance(Context)` dove il Context è quello dell'Avtivity chiamante. Per ogni tracciamento si deve specificare, inoltre un flag che indica se si stanno facendo chiamate da un'app in debug o no.
-####Tracciare cambio di Activity
+#### Tracciare cambio di Activity
`Icarus.getInstance(Context).trackScreen(ScreenTrackResource res boolean debug)`
dove ScreenTrackResource è un'`enum` che permette di specificare se si sta tracciando un ingresso in un'Ativity o un'uscita. Dal `Context` Icarus è in grado di capire che Activity è stata chiamata
-####Tracciare cambio di Preference
+#### Tracciare cambio di Preference
Pensato per le `SharedPreference` è possibile tracciare i cambi di preferenze dei seguenti tipi:
1. `int`
@@ -49,7 +53,7 @@ Si usa nel seguente modo:
3. è possibile invocare metodi `add...` tutte le volte che si vuole. In automatico Icarus scarta le preference duplicate e quelle che dall'ultimo log non sono cambiate (per esempio se un utente con uno switch fa ON-OFF-ON e il log venisse chiamato dopo l'ultimo ON Icarus non loggherebbe quel cambio di settaggio)
4. `Icarus.getInstance(Context).logUserSettings(UserSettingsResource res, boolean debug)` per loggare al server
-####Tracciare un evento
+#### Tracciare un evento
Pensato per loggare eventi app specific e invocabile in un qualunque punto dell'app richiede l'implementazione di un metodo ausiliario (per semplicità e per evitare di riscrivere mille volte le stesse cose) all'interno dell'app chiamante che aiuti nella creazione dell'oggetto `EventTrackResource` che conterrà tutte le informazioni relative all'evento da tracciare (che sono tante e tutte da passare all'interno del costruttore perchè tutte obbligatorie).
Altro pre-requisito è implementare l'`ActivityRecognition`, per esempio [quella di Google](https://www.androidhive.info/2017/12/android-user-activity-recognition-still-walking-running-driving-etc/) all'interno dell'app chiamante.