Commit 20b6a1b2 authored by Mattia Ducci's avatar Mattia Ducci

aggiunto ai log delle preference anche delle preferenze di sistema e iniziato...

aggiunto ai log delle preference anche delle preferenze di sistema e iniziato ad implementare il tracking degli eventi
parent bc5e1a9b
...@@ -80,7 +80,7 @@ public class MainActivity extends AppCompatActivity { ...@@ -80,7 +80,7 @@ public class MainActivity extends AppCompatActivity {
if(intPrefSwitch.isChecked()) intSwitchValue=Integer.valueOf(intPrefSwitch.getTextOn().toString()); if(intPrefSwitch.isChecked()) intSwitchValue=Integer.valueOf(intPrefSwitch.getTextOn().toString());
else intSwitchValue=Integer.valueOf(intPrefSwitch.getTextOff().toString()); else intSwitchValue=Integer.valueOf(intPrefSwitch.getTextOff().toString());
UserSettingsResource userSettingsResource=new UserSettingsResource(myPrefs); UserSettingsResource userSettingsResource=new UserSettingsResource(myPrefs,MainActivity.this);
userSettingsResource.addBoolean("boolPref",boolSwitchValue); userSettingsResource.addBoolean("boolPref",boolSwitchValue);
userSettingsResource.addInt("intPref",intSwitchValue); userSettingsResource.addInt("intPref",intSwitchValue);
......
package framework.everywaretechnologies.it.icarus; package framework.everywaretechnologies.it.icarus;
import org.json.JSONException;
import org.json.JSONObject;
public class EventTrackResource extends IcarusResource { public class EventTrackResource extends IcarusResource {
public EventTrackResource(){ private String eventName;
private String eventCategory;
private String eventLabel;
private int heading;
private int course;
private int speed;
//i due successivi attributi sono quelli ritornati dall'ActivityRecognition di Google che dev'essere implementata nell'app chiamante
//convertiti da quelli di Google a quelli del server.. vedi iMoveAndroid per il metodo di mapping tra i valori ritornati da Google e quelli
//per il server di ewtech. Fare copia incolla del metodo in progetti futuri. Non lo metto qua perchè non ho accesso ai codici delle attività
//non avendo la dipendenza all'ActivityRecognition all'interno di questa libreria
private String mostProbableUserActivityName;
private int confidence;
private boolean accessibilityEnabled;
private String[] userActivityToTrack;
public EventTrackResource(String _eventName, String _eventCategory, String _eventLabel, int _heading, int _course, int _speed,
String _mostProbableUserActivityName, int _confidence, boolean _accessibilityEnabled){
super(); super();
eventName=_eventName;
eventCategory=_eventCategory;
eventLabel=_eventLabel;
heading=_heading;
course=_course;
speed=_speed;
mostProbableUserActivityName=_mostProbableUserActivityName;
confidence=_confidence;
accessibilityEnabled=_accessibilityEnabled;
userActivityToTrack=new String[]{"stationary","walking","running","automotive","cycling","unknown"};
}
public JSONObject getEventTrackResourceInJSONFormat(){
JSONObject userActivityJSONObject=new JSONObject();
try{
for(String activityType: userActivityToTrack){
if(activityType.equalsIgnoreCase(mostProbableUserActivityName))
userActivityJSONObject.put(activityType,true);
else
userActivityJSONObject.put(activityType,false);
}
userActivityJSONObject.put("confidence",confidence);
userActivityJSONObject.put("startTimestamp",System.currentTimeMillis());
} catch (JSONException jsonException){
jsonException.printStackTrace();
}
JSONObject directionJSONObject=new JSONObject();
try {
directionJSONObject.put("heading",heading); //0..360
directionJSONObject.put("course",course); //0..360
} catch (JSONException jsonException){
jsonException.printStackTrace();
}
JSONObject eventContextJSONObject=new JSONObject();
try {
eventContextJSONObject.put("speed",speed);
eventContextJSONObject.put("activity",userActivityJSONObject);
eventContextJSONObject.put("direction",directionJSONObject);
} catch (JSONException jsonException){
jsonException.printStackTrace();
} }
JSONObject toSend=new JSONObject();
try {
toSend.put("EventName",eventName);
toSend.put("EventCategory",eventCategory);
toSend.put("EventLabel",eventLabel+"TalkBack"+(accessibilityEnabled?"_ON":"_OFF"));
toSend.put("EventContext",eventContextJSONObject);
} catch (JSONException jsonException){
jsonException.printStackTrace();
}
return toSend;
}
} }
...@@ -30,11 +30,13 @@ import java.util.function.Consumer; ...@@ -30,11 +30,13 @@ import java.util.function.Consumer;
public class Icarus { public class Icarus {
enum Categories{ //categorie di evento enum EventCategories{ //categorie di evento
APPLICATION,ACTION,NOTIFICATION; APPLICATION,ACTION,NOTIFICATION;
} }
private final static String ICARUS_URL="https://webdev.ewlab.di.unimi.it/icarus/str"; private final static String ICARUS_URL="https://webdev.ewlab.di.unimi.it/icarus/str";
private static final Icarus ourInstance = new Icarus(); private static final Icarus ourInstance = new Icarus();
...@@ -71,6 +73,7 @@ public class Icarus { ...@@ -71,6 +73,7 @@ public class Icarus {
Log.d(curContext.getString(R.string.icarus_class),"log pref changes"); Log.d(curContext.getString(R.string.icarus_class),"log pref changes");
JSONObject prefsChangesToLog=userSettingsResource.getUserSettingsChangesInJSONFormat(); JSONObject prefsChangesToLog=userSettingsResource.getUserSettingsChangesInJSONFormat();
if(prefsChangesToLog.length()>0) //se non ho un JSON vuoto, cioè qualche pref è cambiata
postIcarusHttpRequest(prefsChangesToLog); postIcarusHttpRequest(prefsChangesToLog);
userSettingsResource.clear(); userSettingsResource.clear();
} }
...@@ -106,7 +109,7 @@ public class Icarus { ...@@ -106,7 +109,7 @@ public class Icarus {
//---------------------- LOG EVENT TRACKING -------------------------- //---------------------- LOG EVENT TRACKING --------------------------
public void logEvent(String eventName,String category,String label){ //TODO: ci saranno altri parametri da passargli come quello dell'attività public void logEvent(EventTrackResource eventTrackResource){
Log.d(curContext.getString(R.string.icarus_class),"log event"); Log.d(curContext.getString(R.string.icarus_class),"log event");
......
package framework.everywaretechnologies.it.icarus; package framework.everywaretechnologies.it.icarus;
import android.content.Context;
public abstract class IcarusResource { public abstract class IcarusResource {
public IcarusResource(){} public IcarusResource(){}
......
package framework.everywaretechnologies.it.icarus; package framework.everywaretechnologies.it.icarus;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.provider.Settings;
import android.util.Log;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -10,15 +13,19 @@ import java.util.Map; ...@@ -10,15 +13,19 @@ import java.util.Map;
public class UserSettingsResource extends IcarusResource { //classe da non serializzare direttamente con Gson, ma pensata per essere compilata dall'app chiamante public class UserSettingsResource extends IcarusResource { //classe da non serializzare direttamente con Gson, ma pensata per essere compilata dall'app chiamante
private final static String USER_SETTINGS_RES_CLASS="UserSettingsResource";
private Map<String,String> prefsOldNew; //il secondo String è in realtà un JSONObject convertito in String private Map<String,String> prefsOldNew; //il secondo String è in realtà un JSONObject convertito in String
private SharedPreferences callerSharedPrefs; private SharedPreferences callerSharedPrefs;
private Context c;
public UserSettingsResource(SharedPreferences _callerSharedPrefs){ public UserSettingsResource(SharedPreferences _callerSharedPrefs,Context _c){
super(); super();
prefsOldNew=new HashMap<>(); prefsOldNew=new HashMap<>();
callerSharedPrefs=_callerSharedPrefs; //così posso modificare le SharedPreferences dell'app chiamante callerSharedPrefs=_callerSharedPrefs; //così posso modificare le SharedPreferences dell'app chiamante
c=_c;
} }
//a seconda del tipo di preferenza il chiamante invocherà uno di questi metodi //a seconda del tipo di preferenza il chiamante invocherà uno di questi metodi
...@@ -215,6 +222,7 @@ public class UserSettingsResource extends IcarusResource { //classe da non seria ...@@ -215,6 +222,7 @@ public class UserSettingsResource extends IcarusResource { //classe da non seria
public JSONObject getUserSettingsChangesInJSONFormat(){ public JSONObject getUserSettingsChangesInJSONFormat(){
checkSystemPreferences();
return new JSONObject(prefsOldNew); return new JSONObject(prefsOldNew);
} }
...@@ -223,4 +231,57 @@ public class UserSettingsResource extends IcarusResource { //classe da non seria ...@@ -223,4 +231,57 @@ public class UserSettingsResource extends IcarusResource { //classe da non seria
prefsOldNew.clear(); prefsOldNew.clear();
} }
private void checkSystemPreferences(){
int accessibilityDisplayColorInversionEnabled=-1;
try{
accessibilityDisplayColorInversionEnabled=Settings.Secure.getInt(c.getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
int oldAccessibilityDisplayColorInversion=callerSharedPrefs.getInt("accessibility_color_inversion_enabled",-1);
if(oldAccessibilityDisplayColorInversion!=accessibilityDisplayColorInversionEnabled){
JSONObject jsonObject=new JSONObject();
jsonObject.put("old",oldAccessibilityDisplayColorInversion);
jsonObject.put("new",accessibilityDisplayColorInversionEnabled);
prefsOldNew.put("accessibility_color_inversion_enabled",jsonObject.toString());
SharedPreferences.Editor editor=callerSharedPrefs.edit();
editor.putInt("accessibility_color_inversion_enabled",accessibilityDisplayColorInversionEnabled);
editor.apply();
}
} catch (Settings.SettingNotFoundException e){
Log.i(USER_SETTINGS_RES_CLASS,"Setting Accessibility color inversion not found");
} catch (JSONException e) {
e.printStackTrace();
}
float fontSize=-1;
try {
fontSize=Settings.System.getFloat(c.getContentResolver(), Settings.System.FONT_SCALE);
float oldFontSize=callerSharedPrefs.getFloat("font_size",-1);
if(oldFontSize!=fontSize){ //se dall'ultimo aggiornamento delle pref è cambiato
JSONObject jsonObject=new JSONObject();
jsonObject.put("old",oldFontSize);
jsonObject.put("new",fontSize);
prefsOldNew.put("font_size",jsonObject.toString());
SharedPreferences.Editor editor=callerSharedPrefs.edit();
editor.putFloat("font_size",fontSize);
editor.apply();
}
} catch (Settings.SettingNotFoundException e){
Log.i(USER_SETTINGS_RES_CLASS,"Setting Font size not found");
} catch (JSONException e) {
e.printStackTrace();
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment