package mil.nga.giat.mage.map.preference;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import mil.nga.giat.mage.R;
import mil.nga.giat.mage.sdk.datastore.layer.Layer;
import mil.nga.giat.mage.sdk.datastore.layer.LayerHelper;
import mil.nga.giat.mage.sdk.datastore.user.EventHelper;
import mil.nga.giat.mage.sdk.exceptions.LayerException;
/**
* Provides map configuration driven settings that are available to the user.
* Check mappreferences.xml for the configuration.
*
* @author newmanw
*/
public class MapPreferencesActivity extends AppCompatActivity {
public static String LOG_NAME = MapPreferencesActivity.class.getName();
public static final int TILE_OVERLAY_ACTIVITY = 100;
public static final int FEATURE_OVERLAY_ACTIVITY = 200;
public static final String OVERLAY_EXTENDED_DATA_KEY = "overlay";
private MapPreferenceFragment preference = new MapPreferenceFragment();
public static class MapPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.mappreferences);
}
@Override
public void onResume() {
super.onResume();
findPreference(getString(R.string.tileOverlaysKey)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(getActivity(), TileOverlayPreferenceActivity.class);
getActivity().startActivityForResult(intent, TILE_OVERLAY_ACTIVITY);
return true;
}
});
findPreference(getString(R.string.staticFeatureLayersKey)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(getActivity(), FeatureOverlayPreferenceActivity.class);
getActivity().startActivityForResult(intent, FEATURE_OVERLAY_ACTIVITY);
return true;
}
});
// TODO : Remove the below and rework OverlayPreference to have a 'entities' similar to a list preference, these would be the 'display values'
OverlayPreference p = (OverlayPreference) findPreference(getResources().getString(R.string.tileOverlaysKey));
Set<String> overlays = p.getValues();
p.setSummary(StringUtils.join(overlays, "\n"));
// TODO : Remove the below and rework OverlayPreference to have a 'entities' similar to a list preference, these would be the 'display values'
p = (OverlayPreference) findPreference(getResources().getString(R.string.staticFeatureLayersKey));
try {
Set<String> layerIds = p.getValues();
Collection<String> values = new ArrayList<>(layerIds.size());
for (Layer l : LayerHelper.getInstance(getActivity()).readByEvent(EventHelper.getInstance(getActivity().getApplicationContext()).getCurrentEvent())) {
if (layerIds.contains(l.getId().toString())) {
values.add(l.getName());
}
}
p.setSummary(StringUtils.join(values, "\n"));
} catch (LayerException e) {
Log.e(LOG_NAME, "Problem setting preference.", e);
}
}
@Override
public void onPause() {
super.onPause();
findPreference(getString(R.string.tileOverlaysKey)).setOnPreferenceClickListener(null);
findPreference(getString(R.string.staticFeatureLayersKey)).setOnPreferenceClickListener(null);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, preference).commit();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TILE_OVERLAY_ACTIVITY: {
if (resultCode == Activity.RESULT_OK) {
OverlayPreference p = (OverlayPreference) preference.findPreference(getString(R.string.tileOverlaysKey));
p.setValues(new HashSet<>(data.getStringArrayListExtra(OVERLAY_EXTENDED_DATA_KEY)));
}
break;
}
case FEATURE_OVERLAY_ACTIVITY: {
if (resultCode == Activity.RESULT_OK) {
OverlayPreference p = (OverlayPreference) preference.findPreference(getString(R.string.staticFeatureLayersKey));
p.setValues(new HashSet<>(data.getStringArrayListExtra(OVERLAY_EXTENDED_DATA_KEY)));
}
break;
}
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
}