diff --git a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java index 181d1f2..e57f2ed 100644 --- a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java +++ b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java @@ -1,5 +1,6 @@ package fr.utbm.lo53.p2017.positionningapp; +import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.support.constraint.ConstraintLayout; @@ -18,17 +19,22 @@ import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; +import com.android.volley.toolbox.ImageRequest; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; +import org.json.JSONException; import org.json.JSONObject; +import java.util.Random; + public class PositioningActivity extends BaseActivity { private static final String TAG = "PositioningActivity"; private ConstraintLayout start_layout; private TextView textView; + private ImageView mapView; private Animation hideAnimation; @@ -37,31 +43,46 @@ public class PositioningActivity extends BaseActivity { private boolean isLocating = false; - // Request a string response from the provided URL. - private JsonObjectRequest stringRequest; + private Integer mapId = null; private final Handler handler = new Handler(); private final Runnable runnable = new Runnable() { @Override public void run() { // Create request - stringRequest = new JsonObjectRequest(Request.Method.GET, + JsonObjectRequest locateRequest = new JsonObjectRequest(Request.Method.GET, getURLSolver().locateURL(), null, new Response.Listener() { @Override public void onResponse(JSONObject response) { - textView.setText("Response is: "+ response.toString().substring(0,500)); + try { + float x = (float) response.getDouble("x"); + float y = (float) response.getDouble("y"); + int mapId = response.getInt("map_id"); + if (hasCorrectMap(mapId)) { + putPoint(x, y); + textView.setText(""); + } else { + getMap(mapId); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + textView.setText("Could not parse the response !"); + } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + // TODO: Remove random position + Random r = new Random(); + putPoint(r.nextFloat(), r.nextFloat()); textView.setText("Error: " + error.getMessage()); Log.i(TAG, "Error during location request"); } }); - Log.v(TAG, "" + stringRequest); - queue.add(stringRequest); + Log.v(TAG, "" + locateRequest); + queue.add(locateRequest); handler.postDelayed(runnable, 1000); } @@ -79,6 +100,8 @@ public class PositioningActivity extends BaseActivity { textView = (TextView) findViewById(R.id.ID_yolo); + mapView = (ImageView) findViewById(R.id.map); + queue = Volley.newRequestQueue(this); } @@ -131,4 +154,35 @@ public class PositioningActivity extends BaseActivity { }); hideAnimation = animation; } + + private void putPoint(float x, float y) { + ImageView mapMarker = (ImageView) findViewById(R.id.map_marker); + float x_on_map = (float) mapView.getWidth() * x; // in px + float y_on_map = (float) mapView.getHeight() * y; + mapMarker.setX(mapView.getX() + x_on_map - mapMarker.getWidth()/2); + mapMarker.setY(mapView.getY() + y_on_map - mapMarker.getHeight()); + mapMarker.setVisibility(View.VISIBLE); + } + + private boolean hasCorrectMap(int mapId) { + return (this.mapId != null && this.mapId.equals(mapId)); + } + + private void getMap(int mapId) { + ImageRequest mapRequest = new ImageRequest( + getURLSolver().mapDataURL(mapId), + new Response.Listener() { + @Override + public void onResponse(Bitmap bitmap) { + mapView.setImageBitmap(bitmap); + } + }, 0, 0, null, + new Response.ErrorListener() { + public void onErrorResponse(VolleyError error) { + mapView.setImageResource(R.drawable.map2); + textView.setText("Can't load map!!!"); + } + }); + queue.add(mapRequest); + } } diff --git a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java index ddd5159..0c6d4cf 100644 --- a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java +++ b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java @@ -63,4 +63,10 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList .appendPath("request"); return b.build().toString(); } + + public String mapDataURL(int mapId) { + Uri.Builder b = baseURL(); + b.appendPath("static").appendPath("map.png"); + return b.build().toString(); + } } diff --git a/app/src/main/res/layout/content_positioning.xml b/app/src/main/res/layout/content_positioning.xml index 42aeb62..129c508 100644 --- a/app/src/main/res/layout/content_positioning.xml +++ b/app/src/main/res/layout/content_positioning.xml @@ -9,33 +9,56 @@ tools:showIn="@layout/activity_positioning"> + + + android:layout_marginTop="0dp" + android:adjustViewBounds="false" + android:cropToPadding="false" + app:layout_constraintBottom_toBottomOf="@+id/Map" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="@+id/Map" + app:layout_constraintVertical_bias="0.03" + app:srcCompat="@drawable/map_marker" /> + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + tools:layout_editor_absoluteX="0dp" + android:layout_marginTop="0dp" + app:layout_constraintTop_toBottomOf="@+id/start_layout" />