diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index 877d6ab..961338d 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -16,12 +16,8 @@ import android.provider.Settings; import android.support.design.widget.FloatingActionButton; import android.support.v4.view.GravityCompat; -import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.content.Context; -import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; @@ -49,15 +45,12 @@ import com.survivingwithandroid.weather.lib.request.WeatherRequest; import org.osmdroid.api.IMapController; +import org.osmdroid.bonuspack.overlays.Marker; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; import java.io.File; -import java.lang.reflect.Type; -import java.util.List; - -import static android.app.PendingIntent.getActivity; public class MainActivity extends AppCompatActivity implements LocationListener { @@ -81,6 +74,7 @@ private WeatherClient weatherClient; private MapView mapView; + private IMapController mapController; private ActionBarDrawerToggle drawerToggle; private String[] fountainSizes; @@ -101,13 +95,14 @@ FrameLayout frameLayout = (FrameLayout) findViewById(R.id.container); - MapView mapView = new MapView(getApplicationContext(), 256); + mapView = new MapView(getApplicationContext(), 256); mapView.setTileSource(TileSourceFactory.MAPNIK); mapView.setBuiltInZoomControls(true); mapView.setMultiTouchControls(true); - IMapController mapController = mapView.getController(); + mapController = mapView.getController(); mapController.setZoom(9); mapController.setCenter(new GeoPoint(37.9777, 23.7277)); + frameLayout.addView(mapView); mTitle = mDrawerTitle = getTitle(); @@ -151,25 +146,10 @@ fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - weatherClient.getCurrentCondition(new WeatherRequest(23.7277, 37.9777), new WeatherClient.WeatherEventListener() { - @Override - public void onWeatherRetrieved(CurrentWeather weather) { - Log.d(TAG, "City [" + weather.weather.location.getCity() + "] Current temp: " + weather.weather.temperature.getTemp()); - } - - @Override - public void onWeatherError(WeatherLibException wle) { - Log.e(TAG, "Weather error - parsing data"); - wle.printStackTrace(); - } - - @Override - public void onConnectionError(Throwable t) { - Log.e(TAG, "Connection Error"); - t.printStackTrace(); - } - }); - //TODO check if gps position is != null, toast and return if not + if(mLocation == null){ + InformDialog informDialog = new InformDialog("Information", "Couldn't find your location! Please try again after your position has been found"); + informDialog.show(getFragmentManager(), "Inform Dialog"); + } AddPoiDialog addPoiDialog = new AddPoiDialog(); addPoiDialog.show(getFragmentManager(), "Add POI Dialog"); } @@ -194,10 +174,12 @@ try { tv = (TextView) v; } catch(ClassCastException cce){ + Log.e(TAG, "Could not cast " + v.getClass().toString() + " to TextView!"); } try { iv = (ImageView) v; } catch(ClassCastException cce){ + Log.e(TAG, "Could not cast " + v.getClass().toString() + " to ImageView!"); } } if(tv == null || iv == null) Log.e(TAG, "Neither TextView nor ImageView can be null!"); @@ -205,12 +187,12 @@ iv.setColorFilter(Color.argb(200, 185, 185, 185)); iv.setTag("disabled"); tv.setTypeface(null, Typeface.NORMAL); - Toast.makeText(getApplicationContext(), "You disabled " + entries[position], Toast.LENGTH_SHORT).show(); + Toaster("You disabled " + entries[position]); } else { iv.setColorFilter(null); iv.setTag(""); tv.setTypeface(null, Typeface.BOLD); - Toast.makeText(getApplicationContext(), "You enabled " + entries[position], Toast.LENGTH_SHORT).show(); + Toaster("You enabled " + entries[position]); } } }); @@ -230,11 +212,54 @@ mLocation = locationManager.getLastKnownLocation(provider); } + private void Toaster(String text){ + Toaster(text, false); + } + + private void Toaster(String text, boolean longDuration){ + if(longDuration) Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); + else Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); + } + @Override public void onLocationChanged(Location location) { mLocation = location; if(mLocation == null) return; - Toast.makeText(getApplicationContext(), "New Location: " + mLocation, Toast.LENGTH_LONG).show(); + + double lat = location.getLatitude(); + double lon = location.getLongitude(); + GeoPoint gp = new GeoPoint(lat, lon); + + Marker positionMarker = new Marker(mapView); + positionMarker.setPosition(gp); + positionMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); + positionMarker.setTitle("Your Position"); + positionMarker.setSnippet("Latitude: " + lat + "\n" + "Longitude: " + lon); + mapView.getOverlays().add(positionMarker); + mapView.invalidate(); + + mapController.setCenter(gp); + + //TODO Move this to the not-yet-implemented upload method + weatherClient.getCurrentCondition(new WeatherRequest(lon, lat), new WeatherClient.WeatherEventListener() { + @Override + public void onWeatherRetrieved(CurrentWeather weather) { + Log.d(TAG, "City [" + weather.weather.location.getCity() + "] Current temp: " + weather.weather.temperature.getTemp()); + } + + @Override + public void onWeatherError(WeatherLibException wle) { + Log.e(TAG, "Weather error - parsing data"); + wle.printStackTrace(); + } + + @Override + public void onConnectionError(Throwable t) { + Log.e(TAG, "Connection Error"); + t.printStackTrace(); + } + }); + Toaster("New Location: " + mLocation, true); } @Override @@ -252,6 +277,26 @@ } + public class InformDialog extends DialogFragment { + private String title; + private String msg; + + public InformDialog(String title, String msg){ + this.title = title; + this.msg = msg; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(title) + .setMessage(msg) + .setCancelable(false) + .setPositiveButton("Got it!", null); + return builder.create(); + } + } + public class AddPoiDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -281,7 +326,7 @@ @Override public void onClick(DialogInterface dialog, int which) { //TODO save Spring in DB - Toast.makeText(getApplicationContext(), "This " + fountainSizes[which] + " fountain should be stored in a DB!", Toast.LENGTH_SHORT).show(); + Toaster("This " + fountainSizes[which] + " fountain should be stored in a DB!", true); } }); return builder.create();