package org.pyneo.tabulae.traffic; import android.location.Location; import android.os.Bundle; import android.support.annotation.NonNull; import android.util.Log; import android.database.sqlite.SQLiteDatabase; import java.io.File; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import org.pyneo.tabulae.Base; import org.pyneo.tabulae.R; import org.pyneo.tabulae.Tabulae; import org.pyneo.tabulae.track.TrackItem; import org.pyneo.tabulae.track.TrackPointItem; import static org.pyneo.tabulae.traffic.Constants.*; public class Traffic extends Base { /* // see https://developer.android.com/reference/android/os/Handler.html Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(ActivityName.this, ThirdQuestion.class); startActivity(intent); } }, 2000); // see https://developer.android.com/reference/android/app/AlarmManager.html */ protected ExecutorService mThreadPool = Executors.newSingleThreadExecutor(new ThreadFactory() { @Override public Thread newThread(@NonNull Runnable r) { return new Thread(r, "inform"); } }); protected boolean enabled = false; public void inform(int event, Bundle extra) { //if (DEBUG) Log.d(TAG, "Track.inform event=" + event + ", extra=" + extra); switch (event) { case R.id.event_request_traffic: { if (getActivity() != null) { Bundle b = new Bundle(); b.putBoolean("enabled", enabled); ((Tabulae)getActivity()).inform(R.id.event_notify_traffic, b); } } break; case R.id.event_do_traffic: { if (!enabled) { enabled = true; try { mThreadPool.execute(new Runnable() { public void run() { try { final File cache_dir = new File(((Tabulae) getActivity()).getBaseDir(), "cache"); //noinspection ResultOfMethodCallIgnored cache_dir.mkdirs(); try (final SQLiteDatabase db = ((Tabulae)getActivity()).getWritableDatabase()) { // remove old incidents int count = TrackItem.deleteCategory(db, TrackItem.CATEGORY_TRAFFIC); if (DEBUG) Log.d(TAG, "deleteCategory=" + count); } ((Tabulae)getActivity()).asyncInform(R.id.event_do_track_list, null); // retrieve new report ReportRetriever.Incidents incidents = ReportRetriever.go(cache_dir, null); try (final SQLiteDatabase db = ((Tabulae)getActivity()).getWritableDatabase()) { for (ReportRetriever.Incident incident: incidents) { Log.d(TAG, "incident=" + incident); TrackItem trackItem = new TrackItem(incident.getName(), incident.getDescription()); trackItem.setCategoryid(TrackItem.CATEGORY_TRAFFIC); for (Location position: incident.getPosition()) { trackItem.add(null, new TrackPointItem(position.getLatitude(), position.getLongitude())); } trackItem.insert(db); } } enabled = false; //Bundle b = new Bundle(); //b.putBoolean("enabled", enabled); //((Tabulae)getActivity()).asyncInform(R.id.event_notify_traffic, b); ((Tabulae)getActivity()).asyncInform(R.id.event_do_track_list, null); } catch (Exception e) { Log.d(TAG, "traffic load e=" + e, e); //Toast.makeText(getActivity().getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } }); } catch (Exception e) { Log.d(TAG, "traffic load e=" + e); } } } break; } } }