package mil.nga.giat.asam; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import mil.nga.giat.asam.jackson.deserializer.FeatureDeserializer; import android.app.Application; import android.os.AsyncTask; import com.vividsolutions.jts.geom.Geometry; public class Asam extends Application { public interface OnOfflineFeaturesListener { public void onOfflineFeaturesLoaded(Collection<Geometry> offlineFeatures); } private Collection<Geometry> offlineFeatures = null; private Collection<OnOfflineFeaturesListener> offlineFeaturesListeners = new ArrayList<OnOfflineFeaturesListener>(); @Override public void onCreate() { loadOfflineMap(); super.onCreate(); } public void registerOfflineMapListener(OnOfflineFeaturesListener listener) { offlineFeaturesListeners.add(listener); if (offlineFeatures != null) listener.onOfflineFeaturesLoaded(offlineFeatures); } public void unregisterOfflineMapListener(OnOfflineFeaturesListener listener) { offlineFeaturesListeners.remove(listener); } public void loadOfflineMap() { OfflineMapTask task = new OfflineMapTask(); task.execute(); } private void setOfflineMap(Collection<Geometry> offlineFeatures) { this.offlineFeatures = offlineFeatures; for (OnOfflineFeaturesListener listener : offlineFeaturesListeners) { listener.onOfflineFeaturesLoaded(offlineFeatures); } } private class OfflineMapTask extends AsyncTask<Void, Void, Collection<Geometry>> { private static final String OFFLINE_MAP_FILENAME = "ne_110m_land.geojson"; @Override protected Collection<Geometry> doInBackground(Void... params) { Collection<Geometry> geometries = new ArrayList<Geometry>(); InputStream is = null; try { is = getAssets().open(OFFLINE_MAP_FILENAME); geometries = new FeatureDeserializer().parseFeatures(is); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { } } } return geometries; } @Override protected void onPostExecute(Collection<Geometry> features) { setOfflineMap(features); } } }