/** * The collaborative version of the "DemoFilterTime" privacy mechanism. */ import java.util.*; import java.io.*; import android.content.Context; import android.util.*; @SuppressWarnings("unchecked") public class DemoCollab { private Context context; private int pref; private List state; private List> peers; public void onStart (Context c, int i, ObjectInputStream ois) throws Exception { String TAG = getClass().getName() + "@onStart: "; Log.wtf(TAG, "..."); // Get application context. context = c; // Get privacy preferences. pref = i; // Restore state. if (ois != null) { Log.wtf(TAG, "Restoring state..."); state = (List) ois.readObject(); } else { Log.wtf(TAG, "Initializing state..."); state = new ArrayList<>(); } peers = new ArrayList<>(); } public void onStop () { String TAG = getClass().getName() + "@onStop: "; Log.wtf(TAG, "..."); } public void onPreferenceChanged (int i) { String TAG = getClass().getName() + "@onPreferenceChanged: "; Log.wtf(TAG, "" + i); pref = i; } public boolean saveState (ObjectOutputStream oos) { String TAG = getClass().getName() + "@saveState: "; Log.wtf(TAG, "..."); // s.writeObject(state); return false; } public int processData (ObjectInputStream ois, ObjectOutputStream oos) throws Exception { String TAG = getClass().getName() + "@processData: "; Log.wtf(TAG, "..."); // Get list of data. List list = (List) ois.readObject(); // Edit each data entry of the data list. for (Object o : list) { Map data = (Map) o; data.put("device", data.get("device")); data.put("task", data.get("task")); data.put("sensor", data.get("sensor")); data.put("values", data.get("values")); float min = -1; float max = 1; Random r = new Random(); float d = min + (max - min) * r.nextFloat(); // -1 < d < 1 long var = (long) (((float) pref / 10) * d * 3600000000000L); // (pref/10) * random * (1hr) data.put("timestamp", (Long) data.get("timestamp") + var); } oos.writeObject(list); // If a peer is present... if(!peers.isEmpty()) { // Collaborate! return Integer.parseInt(peers.get(0).get("id")); } return 0; } /** * Collaborative stuff. */ /**/ public void onPeersChanged (List> peers) { String TAG = getClass().getName() + "@onPeersChanged: "; Log.wtf(TAG, "..."); this.peers = peers; Log.wtf(TAG, peers.toString()); } public boolean aggregateData (ObjectInputStream ois, ObjectOutputStream oos) throws Exception { String TAG = getClass().getName() + "@aggregateData: "; Log.wtf(TAG, "..."); // Read input stream. List data = (List) ois.readObject(); // Write to output stream. oos.writeObject(data); return true; } /**/ }