Commit 83f59424 authored by Mattia Ducci's avatar Mattia Ducci

modificate alcune chiavi per il server, controlli su appContext e SharedPrefs...

modificate alcune chiavi per il server, controlli su appContext e SharedPrefs senza le quali non viene fatta la chiamata con Volley, UUID nelle SharedPreferences in modo che sia unico per ogni utente ad ogni installazione dell'app
parent 4a6ea649
......@@ -38,6 +38,7 @@ 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);
instance.setApplicationContext(getApplicationContext());
......@@ -50,6 +51,8 @@ public class MainActivity extends AppCompatActivity {
lastBoolPref=myPrefs.getBoolean("boolPref",false);
lastIntPref=myPrefs.getInt("intPref",-1);
instance.setCallerSharedPrefs(myPrefs);
//setto gli switch in base allo stato nelle shared preferences
if(lastBoolPref) boolPrefSwitch.setChecked(true);
else boolPrefSwitch.setChecked(false);
......@@ -114,7 +117,7 @@ public class MainActivity extends AppCompatActivity {
if(eventLabelEditText.getText().length()==0) eventLabel = EventTrackResource.EventLabel.FOREGROUND.name().toLowerCase();
else eventLabel=eventLabelEditText.getText().toString();
if(mostProbableActivityEditText.getText().length()==0) mostProbableActivity="activityProva";
if(mostProbableActivityEditText.getText().length()==0) mostProbableActivity="running";
else mostProbableActivity=mostProbableActivityEditText.getText().toString();
EventTrackResource eventTrackResource=new EventTrackResource(eventName,eventCategory,eventLabel,90,90,5,
......
......@@ -46,6 +46,7 @@ public class Icarus {
private Context appContext;// serve per istanziare un un'unica coda di richieste Volley (e non averne una per Activity)
private static Context curContext; //context dell'Activity corrente
private RequestQueue mVolleyRequestQueue;
private SharedPreferences callerSharedPrefs;
public static Icarus getInstance(Context c) {
......@@ -67,6 +68,13 @@ public class Icarus {
mVolleyRequestQueue= Volley.newRequestQueue(appContext);
}
public void setCallerSharedPrefs(SharedPreferences callerSharedPrefs){
this.callerSharedPrefs=callerSharedPrefs;
}
//----------------- LOG PREFERENCE CHANGES -----------------------
public void logUserSettings(UserSettingsResource userSettingsResource, boolean debug){
......@@ -121,46 +129,51 @@ public class Icarus {
postIcarusHttpRequest(eventTrackJSON,debug);
}
//--------------------------- UTILITY ----------------------------------
private void postIcarusHttpRequest(final JSONObject icarusPayload, final boolean debug){
JSONObject toSendJson=createJSONToSend(icarusPayload,debug); //aggiunge informazioni al JSON ottenuto attraverso la raccolta dati dell'utente
final JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, ICARUS_URL, toSendJson, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(toSendJson==null)
Log.e(curContext.getString(R.string.icarus_class),"call setCallerSharedPrefs(SharedPreferences prefs) on Icarus instance to do HTTP calls");
else{
Log.d(curContext.getString(R.string.icarus_class),"onVolley response POSITIVE");
final JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, ICARUS_URL, toSendJson, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//controllo se ho qualche elemento che precedentemente non sono riuscito ad inviare e nel caso lo provo ad inviare
pendingResourceLock.lock();
Log.d(curContext.getString(R.string.icarus_class),"onVolley response POSITIVE");
if(pendingResources.peek() != null){ //se ho qualche elemento pendente da inviare
//controllo se ho qualche elemento che precedentemente non sono riuscito ad inviare e nel caso lo provo ad inviare
pendingResourceLock.lock();
Log.d(curContext.getString(R.string.icarus_class),"messaggio pendente");
JSONObject pendingResource=pendingResources.poll();
postIcarusHttpRequest(pendingResource,debug);
}
pendingResourceLock.unlock();
if(pendingResources.peek() != null){ //se ho qualche elemento pendente da inviare
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(curContext.getString(R.string.icarus_class),"messaggio pendente");
JSONObject pendingResource=pendingResources.poll();
postIcarusHttpRequest(pendingResource,debug);
}
pendingResourceLock.unlock();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(curContext.getString(R.string.icarus_class),"onVolley response NEGATIVE");
Log.d(curContext.getString(R.string.icarus_class),"onVolley response NEGATIVE");
//se per qualche motivo la richiesta http non va a buon fine, salvo il payload che avrei dovuto mandare in cache
pendingResourceLock.lock();
pendingResources.add(icarusPayload);
pendingResourceLock.unlock();
}
});
//se per qualche motivo la richiesta http non va a buon fine, salvo il payload che avrei dovuto mandare in cache
pendingResourceLock.lock();
pendingResources.add(icarusPayload);
pendingResourceLock.unlock();
}
});
mVolleyRequestQueue.add(jsonObjectRequest);//faccio effettivamente la richiesta
if(appContext!=null)
mVolleyRequestQueue.add(jsonObjectRequest);//faccio effettivamente la richiesta
else
Log.e(curContext.getString(R.string.icarus_class),"call method setApplicationContext(Context appContext) on the Icarus instance to do HTTP calls");
}
}
public JSONObject createJSONToSend(JSONObject userData, boolean debug){
......@@ -210,21 +223,36 @@ public class Icarus {
Log.e(curContext.getString(R.string.icarus_class),"errore ottenere accessibilityManager");
}
//controllo se nelle sharedPref dell'app chiamante è già presente un UUID, altrimenti ne creo uno che sarà costante per quell'utente
if(callerSharedPrefs==null) return null;
String uuid;
if(callerSharedPrefs.contains("userUUID"))
uuid=callerSharedPrefs.getString("userUUID","");
else {
uuid=UUID.randomUUID().toString();
//update shared preferences dell'app chiamante
SharedPreferences.Editor editor=callerSharedPrefs.edit();
editor.putString("userUUID",uuid);
editor.apply(); //apply aggiorna le prefs in bg
}
JSONObject appInfoJSON=new JSONObject();
appInfoJSON.put("lang", Locale.getDefault().getLanguage());
appInfoJSON.put("log_lib","Icarus:"+curContext.getResources().getInteger(R.integer.lib_version));
appInfoJSON.put("icarusversion","Icarus:"+curContext.getResources().getInteger(R.integer.lib_version));
appInfoJSON.put("appname",appName.toString());
appInfoJSON.put("appversion",clientAppVersion);
appInfoJSON.put("os", Build.VERSION.SDK_INT);
appInfoJSON.put("osversion", Build.VERSION.SDK_INT);
appInfoJSON.put("platform","android");
appInfoJSON.put("device",getDeviceName());
appInfoJSON.put("uuid",UUID.randomUUID().toString());
appInfoJSON.put("uuid",uuid);
appInfoJSON.put("talkback",accessibilityEnabled);
//---------------- GENERAL JSON --------------------
toSend.put("debug",debug);
toSend.put("timestamp",timeJSON);
toSend.put("appData",appInfoJSON);
toSend.put("appdata",appInfoJSON);
toSend.put("userdata",userData);
} catch (JSONException e) {
......
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