Commit a5ccc431329f5720860ec3f52d5792249d48b9bb

Authored by florian staine
1 parent e8cf6b8b

Get map image if none was selected

Use another server
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java
1 1 package fr.utbm.lo53.p2017.positionningapp;
2 2  
  3 +import android.graphics.Bitmap;
3 4 import android.os.Bundle;
4 5 import android.os.Handler;
5 6 import android.support.constraint.ConstraintLayout;
... ... @@ -18,17 +19,22 @@ import com.android.volley.Request;
18 19 import com.android.volley.RequestQueue;
19 20 import com.android.volley.Response;
20 21 import com.android.volley.VolleyError;
  22 +import com.android.volley.toolbox.ImageRequest;
21 23 import com.android.volley.toolbox.JsonObjectRequest;
22 24 import com.android.volley.toolbox.Volley;
23 25  
  26 +import org.json.JSONException;
24 27 import org.json.JSONObject;
25 28  
  29 +import java.util.Random;
  30 +
26 31 public class PositioningActivity extends BaseActivity {
27 32  
28 33 private static final String TAG = "PositioningActivity";
29 34  
30 35 private ConstraintLayout start_layout;
31 36 private TextView textView;
  37 + private ImageView mapView;
32 38  
33 39 private Animation hideAnimation;
34 40  
... ... @@ -37,31 +43,46 @@ public class PositioningActivity extends BaseActivity {
37 43  
38 44 private boolean isLocating = false;
39 45  
40   - // Request a string response from the provided URL.
41   - private JsonObjectRequest stringRequest;
  46 + private Integer mapId = null;
42 47  
43 48 private final Handler handler = new Handler();
44 49 private final Runnable runnable = new Runnable() {
45 50 @Override
46 51 public void run() {
47 52 // Create request
48   - stringRequest = new JsonObjectRequest(Request.Method.GET,
  53 + JsonObjectRequest locateRequest = new JsonObjectRequest(Request.Method.GET,
49 54 getURLSolver().locateURL(),
50 55 null,
51 56 new Response.Listener<JSONObject>() {
52 57 @Override
53 58 public void onResponse(JSONObject response) {
54   - textView.setText("Response is: "+ response.toString().substring(0,500));
  59 + try {
  60 + float x = (float) response.getDouble("x");
  61 + float y = (float) response.getDouble("y");
  62 + int mapId = response.getInt("map_id");
  63 + if (hasCorrectMap(mapId)) {
  64 + putPoint(x, y);
  65 + textView.setText("");
  66 + } else {
  67 + getMap(mapId);
  68 + }
  69 + } catch (JSONException e) {
  70 + Log.e(TAG, e.toString());
  71 + textView.setText("Could not parse the response !");
  72 + }
55 73 }
56 74 }, new Response.ErrorListener() {
57 75 @Override
58 76 public void onErrorResponse(VolleyError error) {
  77 + // TODO: Remove random position
  78 + Random r = new Random();
  79 + putPoint(r.nextFloat(), r.nextFloat());
59 80 textView.setText("Error: " + error.getMessage());
60 81 Log.i(TAG, "Error during location request");
61 82 }
62 83 });
63   - Log.v(TAG, "" + stringRequest);
64   - queue.add(stringRequest);
  84 + Log.v(TAG, "" + locateRequest);
  85 + queue.add(locateRequest);
65 86  
66 87 handler.postDelayed(runnable, 1000);
67 88 }
... ... @@ -79,6 +100,8 @@ public class PositioningActivity extends BaseActivity {
79 100  
80 101 textView = (TextView) findViewById(R.id.ID_yolo);
81 102  
  103 + mapView = (ImageView) findViewById(R.id.map);
  104 +
82 105 queue = Volley.newRequestQueue(this);
83 106 }
84 107  
... ... @@ -131,4 +154,35 @@ public class PositioningActivity extends BaseActivity {
131 154 });
132 155 hideAnimation = animation;
133 156 }
  157 +
  158 + private void putPoint(float x, float y) {
  159 + ImageView mapMarker = (ImageView) findViewById(R.id.map_marker);
  160 + float x_on_map = (float) mapView.getWidth() * x; // in px
  161 + float y_on_map = (float) mapView.getHeight() * y;
  162 + mapMarker.setX(mapView.getX() + x_on_map - mapMarker.getWidth()/2);
  163 + mapMarker.setY(mapView.getY() + y_on_map - mapMarker.getHeight());
  164 + mapMarker.setVisibility(View.VISIBLE);
  165 + }
  166 +
  167 + private boolean hasCorrectMap(int mapId) {
  168 + return (this.mapId != null && this.mapId.equals(mapId));
  169 + }
  170 +
  171 + private void getMap(int mapId) {
  172 + ImageRequest mapRequest = new ImageRequest(
  173 + getURLSolver().mapDataURL(mapId),
  174 + new Response.Listener<Bitmap>() {
  175 + @Override
  176 + public void onResponse(Bitmap bitmap) {
  177 + mapView.setImageBitmap(bitmap);
  178 + }
  179 + }, 0, 0, null,
  180 + new Response.ErrorListener() {
  181 + public void onErrorResponse(VolleyError error) {
  182 + mapView.setImageResource(R.drawable.map2);
  183 + textView.setText("Can't load map!!!");
  184 + }
  185 + });
  186 + queue.add(mapRequest);
  187 + }
134 188 }
... ...
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java
... ... @@ -63,4 +63,10 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList
63 63 .appendPath("request");
64 64 return b.build().toString();
65 65 }
  66 +
  67 + public String mapDataURL(int mapId) {
  68 + Uri.Builder b = baseURL();
  69 + b.appendPath("static").appendPath("map.png");
  70 + return b.build().toString();
  71 + }
66 72 }
... ...
app/src/main/res/layout/content_positioning.xml
... ... @@ -9,33 +9,56 @@
9 9 tools:showIn="@layout/activity_positioning">
10 10  
11 11 <ImageView
12   - android:id="@+id/imageView"
  12 + android:id="@+id/map"
13 13 android:layout_width="0dp"
14 14 android:layout_height="wrap_content"
15   - android:layout_marginLeft="8dp"
  15 + android:layout_marginEnd="8dp"
  16 + android:layout_marginLeft="0dp"
16 17 android:layout_marginRight="8dp"
  18 + android:layout_marginStart="8dp"
17 19 android:layout_marginTop="8dp"
  20 + android:adjustViewBounds="true"
18 21 android:scaleType="fitXY"
19 22 app:layout_constraintLeft_toLeftOf="parent"
20 23 app:layout_constraintRight_toRightOf="parent"
21 24 app:layout_constraintTop_toTopOf="parent"
22   - app:srcCompat="@drawable/map"
  25 + app:srcCompat="@drawable/map2" />
  26 +
  27 + <ImageView
  28 + android:id="@+id/map_marker"
  29 + android:layout_width="50dp"
  30 + android:layout_height="50dp"
  31 + android:layout_marginBottom="0dp"
  32 + android:layout_marginEnd="8dp"
  33 + android:layout_marginLeft="0dp"
  34 + android:layout_marginRight="0dp"
23 35 android:layout_marginStart="8dp"
24   - android:layout_marginEnd="8dp" />
  36 + android:layout_marginTop="0dp"
  37 + android:adjustViewBounds="false"
  38 + android:cropToPadding="false"
  39 + app:layout_constraintBottom_toBottomOf="@+id/Map"
  40 + app:layout_constraintHorizontal_bias="0.0"
  41 + app:layout_constraintLeft_toLeftOf="parent"
  42 + app:layout_constraintRight_toRightOf="parent"
  43 + app:layout_constraintTop_toTopOf="@+id/Map"
  44 + app:layout_constraintVertical_bias="0.03"
  45 + app:srcCompat="@drawable/map_marker" />
25 46  
26 47 <TextView
27 48 android:id="@+id/ID_yolo"
28 49 android:layout_width="wrap_content"
29 50 android:layout_height="wrap_content"
30 51 android:text="TextView"
31   - android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
  52 + android:textAppearance="@style/TextAppearance.AppCompat.Medium"
  53 + tools:layout_editor_absoluteX="0dp"
  54 + android:layout_marginTop="0dp"
  55 + app:layout_constraintTop_toBottomOf="@+id/start_layout" />
32 56  
33 57 <android.support.constraint.ConstraintLayout
34 58 android:id="@+id/start_layout"
35 59 android:layout_width="0dp"
36 60 android:layout_height="0dp"
37 61 android:onClick="startLocating"
38   - android:visibility="visible"
39 62 app:layout_constraintBottom_toBottomOf="parent"
40 63 app:layout_constraintLeft_toLeftOf="parent"
41 64 app:layout_constraintRight_toRightOf="parent"
... ...