package mil.nga.dice.map.geopackage;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import mil.nga.dice.DICEConstants;
/**
* Retrieve and update selected GeoPackages in the app settings
*/
public class GeoPackageSelected {
/**
* Shared preferences
*/
private final SharedPreferences settings;
/**
* Constructor
*
* @param context
*/
public GeoPackageSelected(Context context) {
settings = PreferenceManager
.getDefaultSharedPreferences(context);
}
/**
* Get the selected caches
*
* @return selected caches
*/
public Set<String> getSelectedSet() {
return settings.getStringSet(DICEConstants.DICE_SELECTED_CACHES, new HashSet<String>());
}
/**
* Get the selected caches and their selected tables
*
* @return selected cache and table map
*/
public Map<String, Set<String>> getSelectedMap() {
Set<String> selectedSet = settings.getStringSet(DICEConstants.DICE_SELECTED_CACHES, new HashSet<String>());
Map<String, Set<String>> selectedMap = new HashMap<>();
for (String selected : selectedSet) {
Set<String> selectedTables = settings.getStringSet(selected, new HashSet<String>());
selectedMap.put(selected, selectedTables);
}
return selectedMap;
}
/**
* Add selected cache
*
* @param cache
*/
public void addSelected(String cache) {
Set<String> currentSelectedSet = settings.getStringSet(DICEConstants.DICE_SELECTED_CACHES, new HashSet<String>());
currentSelectedSet.add(cache);
Editor editor = settings.edit();
editor.putStringSet(DICEConstants.DICE_SELECTED_CACHES, currentSelectedSet);
editor.commit();
}
/**
* Update the selected caches and tables
*
* @param selected
*/
public void updateSelected(Map<String, Set<String>> selected) {
Set<String> currentSelectedSet = settings.getStringSet(DICEConstants.DICE_SELECTED_CACHES, new HashSet<String>());
Editor editor = settings.edit();
editor.putStringSet(DICEConstants.DICE_SELECTED_CACHES, selected.keySet());
for (Map.Entry<String, Set<String>> selectedEntry : selected.entrySet()) {
currentSelectedSet.remove(selectedEntry.getKey());
editor.putStringSet(selectedEntry.getKey(), selectedEntry.getValue());
}
for (String currentSelected : currentSelectedSet) {
editor.remove(currentSelected);
}
editor.commit();
}
/**
* Remove selected cache
*
* @param cache
*/
public void removeSelected(String cache) {
Map<String, Set<String>> selected = getSelectedMap();
if(selected.containsKey(cache)){
selected.remove(cache);
updateSelected(selected);
}
}
}