package io.nlopez.smartlocation.activity; import android.content.Context; import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import com.google.android.gms.location.DetectedActivity; import io.nlopez.smartlocation.common.Store; /** * Stores activities */ public class ActivityStore implements Store<DetectedActivity> { private static final String PREFERENCES_FILE = "ACTIVITY_STORE"; private static final String PREFIX_ID = ActivityStore.class.getCanonicalName() + ".KEY"; private static final String ACTIVITY_ID = "ACTIVITY"; private static final String CONFIDENCE_ID = "CONFIDENCE"; private SharedPreferences preferences; public ActivityStore(@NonNull Context context) { preferences = context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); } @VisibleForTesting public void setPreferences(SharedPreferences preferences) { this.preferences = preferences; } @Override public void put(String id, DetectedActivity activity) { SharedPreferences.Editor editor = preferences.edit(); editor.putInt(getFieldKey(id, ACTIVITY_ID), activity.getType()); editor.putInt(getFieldKey(id, CONFIDENCE_ID), activity.getConfidence()); editor.apply(); } @Override public DetectedActivity get(String id) { if (preferences != null && preferences.contains(getFieldKey(id, ACTIVITY_ID)) && preferences.contains(getFieldKey(id, CONFIDENCE_ID))) { int activity = preferences.getInt(getFieldKey(id, ACTIVITY_ID), DetectedActivity.UNKNOWN); int confidence = preferences.getInt(getFieldKey(id, CONFIDENCE_ID), 0); return new DetectedActivity(activity, confidence); } else { return null; } } @Override public void remove(String id) { SharedPreferences.Editor editor = preferences.edit(); editor.remove(getFieldKey(id, ACTIVITY_ID)); editor.remove(getFieldKey(id, CONFIDENCE_ID)); editor.apply(); } private String getFieldKey(String id, String field) { return PREFIX_ID + "_" + id + "_" + field; } }