package org.osmdroid.bugtestfragments; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import junit.framework.Assert; import org.osmdroid.R; import org.osmdroid.api.IMapView; import org.osmdroid.constants.OpenStreetMapConstants; import org.osmdroid.samplefragments.BaseSampleFragment; import org.osmdroid.tileprovider.cachemanager.CacheManager; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; import java.util.ArrayList; /** * https://github.com/osmdroid/osmdroid/issues/512#issuecomment-271219842 * created on 1/8/2017. * * @author Alex O'Ree */ public class Bug512CacheManagerWp extends BaseSampleFragment implements CacheManager.CacheManagerCallback, View.OnClickListener { Button btnCache; @Override public String getSampleTitle() { return "Issue 512 Cache download using waypoints"; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.sample_cachemgr, container,false); mMapView = (MapView) root.findViewById(R.id.mapview); btnCache = (Button) root.findViewById(R.id.btnCache); btnCache.setOnClickListener(this); btnCache.setText("Run job (watch logcat output)"); return root; } CacheManager.DownloadingTask downloadingTask=null; public void runTestProcedures() throws Exception{ final CacheManager mgr = new CacheManager(mMapView); final ArrayList<GeoPoint> pts= new ArrayList<>(); pts.add(new GeoPoint(38.89775, -77.03690)); pts.add(new GeoPoint(38.87101, -77.05641)); taskRunning=true; getActivity().runOnUiThread(new Runnable() { @Override public void run() { downloadingTask = mgr.downloadAreaAsyncNoUI(mMapView.getContext(), pts, 0, 4, Bug512CacheManagerWp.this); } }); //downloadingTask = mgr.downloadAreaAsync(mMapView.getContext(), pts, 0, 5, this); int timeoutSeconds=30; while (taskRunning && timeoutSeconds>0) { Thread.sleep(1000); timeoutSeconds--; } if (!taskRunning){ //great we're done if (success) { //test passed return; } else { Assert.fail("Failure occurred during the test, there were " + errors); } } } boolean taskRunning=false; boolean success=false; int errors=0; @Override public void onTaskComplete() { Log.i(IMapView.LOGTAG, "download job complete no errors"); taskRunning=true; success=true; } @Override public void updateProgress(int progress, int currentZoomLevel, int zoomMin, int zoomMax) { Log.i(IMapView.LOGTAG, "download update : " + progress + " " + currentZoomLevel + " " + zoomMin + " " + zoomMax); } @Override public void downloadStarted() { Log.i(IMapView.LOGTAG, "download job started"); } @Override public void setPossibleTilesInArea(int total) { Log.i(IMapView.LOGTAG, "tiles to download " + total); } @Override public void onTaskFailed(int errors) { this.errors=errors; Log.i(IMapView.LOGTAG, "down job failed with error count: " + errors); taskRunning=false; } @Override public void onClick(View v) { try { runTestProcedures(); } catch (Exception e) { e.printStackTrace(); } } }