From 83f59424470c850280bcd2962d043a9c052a9591 Mon Sep 17 00:00:00 2001 From: Mattia Date: Thu, 3 May 2018 11:54:31 +0200 Subject: [PATCH] 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 --- .../it/icarusandroid/MainActivity.java | 5 +- .../it/icarus/Icarus.java | 90 ++++++++++++------- 2 files changed, 63 insertions(+), 32 deletions(-) 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 168aeba..e859de5 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 @@ -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, 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 c6b8c39..d54083e 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 @@ -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() { - @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() { + @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) { -- 2.18.1