Commit 21d351b286470973151eda1624f562334ccb0b8c
Committed by
florian staine
1 parent
a5ccc431
Add map_id spinner, Calibration request, correct Map_Marker positioning
Showing
6 changed files
with
120 additions
and
36 deletions
Show diff stats
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/Calibration.java
1 | package fr.utbm.lo53.p2017.positionningapp; | 1 | package fr.utbm.lo53.p2017.positionningapp; |
2 | 2 | ||
3 | -import android.content.Intent; | ||
4 | import android.os.Bundle; | 3 | import android.os.Bundle; |
5 | -import android.support.design.widget.FloatingActionButton; | ||
6 | import android.support.design.widget.Snackbar; | 4 | import android.support.design.widget.Snackbar; |
7 | -import android.support.v7.app.AppCompatActivity; | ||
8 | import android.support.v7.widget.Toolbar; | 5 | import android.support.v7.widget.Toolbar; |
9 | -import android.view.MotionEvent; | ||
10 | -import android.view.View; | 6 | +import android.util.Log; |
11 | import android.view.Menu; | 7 | import android.view.Menu; |
12 | import android.view.MenuItem; | 8 | import android.view.MenuItem; |
9 | +import android.view.MotionEvent; | ||
10 | +import android.view.View; | ||
11 | +import android.widget.AdapterView; | ||
12 | +import android.widget.ArrayAdapter; | ||
13 | import android.widget.Button; | 13 | import android.widget.Button; |
14 | import android.widget.ImageView; | 14 | import android.widget.ImageView; |
15 | +import android.widget.Spinner; | ||
16 | + | ||
17 | +import com.android.volley.Request; | ||
18 | +import com.android.volley.RequestQueue; | ||
19 | +import com.android.volley.Response; | ||
20 | +import com.android.volley.VolleyError; | ||
21 | +import com.android.volley.toolbox.JsonObjectRequest; | ||
22 | +import com.android.volley.toolbox.JsonRequest; | ||
23 | +import com.android.volley.toolbox.Volley; | ||
24 | + | ||
25 | +import org.json.JSONException; | ||
26 | +import org.json.JSONObject; | ||
15 | 27 | ||
16 | public class Calibration extends BaseActivity { | 28 | public class Calibration extends BaseActivity { |
29 | + public static final String TAG = "Calibration"; | ||
17 | float height,width; | 30 | float height,width; |
31 | + long map_id; | ||
32 | + private ImageView MapMarker; | ||
33 | + private RequestQueue queue; | ||
34 | + | ||
18 | @Override | 35 | @Override |
19 | protected void onCreate(Bundle savedInstanceState) { | 36 | protected void onCreate(Bundle savedInstanceState) { |
20 | 37 | ||
@@ -24,11 +41,19 @@ public class Calibration extends BaseActivity { | @@ -24,11 +41,19 @@ public class Calibration extends BaseActivity { | ||
24 | setSupportActionBar(toolbar); | 41 | setSupportActionBar(toolbar); |
25 | 42 | ||
26 | final ImageView Map = (ImageView) findViewById(R.id.Map); | 43 | final ImageView Map = (ImageView) findViewById(R.id.Map); |
27 | - final ImageView MapMarker = (ImageView) findViewById(R.id.MapMarker); | 44 | + MapMarker = (ImageView) findViewById(R.id.MapMarker); |
28 | final Button setPointButton = (Button) findViewById(R.id.setPointButton); | 45 | final Button setPointButton = (Button) findViewById(R.id.setPointButton); |
29 | final Button cancelButton = (Button) findViewById(R.id.cancelButton); | 46 | final Button cancelButton = (Button) findViewById(R.id.cancelButton); |
30 | final Button measureButton = (Button) findViewById(R.id.measureButton); | 47 | final Button measureButton = (Button) findViewById(R.id.measureButton); |
48 | + final Spinner spinner = (Spinner) findViewById(R.id.spinner); | ||
49 | + queue = Volley.newRequestQueue(this); | ||
50 | + | ||
51 | + ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.map_choices, android.R.layout.simple_spinner_dropdown_item); | ||
52 | + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); | ||
53 | + spinner.setAdapter(adapter); | ||
31 | 54 | ||
55 | + Map.setVisibility(Map.INVISIBLE); | ||
56 | + setPointButton.setVisibility(setPointButton.INVISIBLE); | ||
32 | MapMarker.setVisibility(MapMarker.INVISIBLE); | 57 | MapMarker.setVisibility(MapMarker.INVISIBLE); |
33 | cancelButton.setVisibility(cancelButton.INVISIBLE); | 58 | cancelButton.setVisibility(cancelButton.INVISIBLE); |
34 | measureButton.setVisibility(measureButton.INVISIBLE); | 59 | measureButton.setVisibility(measureButton.INVISIBLE); |
@@ -41,12 +66,13 @@ public class Calibration extends BaseActivity { | @@ -41,12 +66,13 @@ public class Calibration extends BaseActivity { | ||
41 | /*motionEvent.getAction()==motionEvent.ACTION_MOVE &&*/ | 66 | /*motionEvent.getAction()==motionEvent.ACTION_MOVE &&*/ |
42 | if( setPointButton.getVisibility() == setPointButton.INVISIBLE && motionEvent.getX() <= Map.getWidth() && motionEvent.getY() <= Map.getHeight() && motionEvent.getX() >= 0 && motionEvent.getY() >= 0) { | 67 | if( setPointButton.getVisibility() == setPointButton.INVISIBLE && motionEvent.getX() <= Map.getWidth() && motionEvent.getY() <= Map.getHeight() && motionEvent.getX() >= 0 && motionEvent.getY() >= 0) { |
43 | MapMarker.setVisibility(MapMarker.VISIBLE); | 68 | MapMarker.setVisibility(MapMarker.VISIBLE); |
44 | - height = motionEvent.getX(); | ||
45 | - width = motionEvent.getY(); | ||
46 | - Snackbar.make(view, " X : " + height + " Y : " + width, Snackbar.LENGTH_LONG) | ||
47 | - .setAction("Action", null).show(); | ||
48 | - MapMarker.setX(motionEvent.getX()- (view.getWidth()- Map.getWidth())/2 -40);//- MapMarker.getWidth()/2); | ||
49 | - MapMarker.setY(motionEvent.getY()+ (view.getHeight()/5));//+(MapMarker.getWidth()/(5/4))); | 69 | + width = motionEvent.getX() / Map.getWidth(); |
70 | + height = motionEvent.getY() / Map.getHeight(); | ||
71 | + /*Snackbar.make(view, " X : " + height + " Y : " + width, Snackbar.LENGTH_LONG) | ||
72 | + .setAction("Action", null).show();*/ | ||
73 | + Log.i(TAG, String.format("Width: %f, height: %f", width, height)); | ||
74 | + MapMarker.setX(motionEvent.getX() - MapMarker.getWidth()/2 + Map.getX()); | ||
75 | + MapMarker.setY(motionEvent.getY() - MapMarker.getHeight() + Map.getY()); | ||
50 | } | 76 | } |
51 | return true; | 77 | return true; |
52 | } | 78 | } |
@@ -58,15 +84,7 @@ public class Calibration extends BaseActivity { | @@ -58,15 +84,7 @@ public class Calibration extends BaseActivity { | ||
58 | setPointButton.setVisibility(setPointButton.INVISIBLE); | 84 | setPointButton.setVisibility(setPointButton.INVISIBLE); |
59 | cancelButton.setVisibility(cancelButton.VISIBLE); | 85 | cancelButton.setVisibility(cancelButton.VISIBLE); |
60 | measureButton.setVisibility(measureButton.VISIBLE); | 86 | measureButton.setVisibility(measureButton.VISIBLE); |
61 | - } | ||
62 | - }); | ||
63 | - measureButton.setOnClickListener(new View.OnClickListener() { | ||
64 | - @Override | ||
65 | - public void onClick(View v) { | ||
66 | - if(MapMarker.getVisibility()==MapMarker.INVISIBLE) { | ||
67 | - Snackbar.make(v, "You need to set a point before measurement.", Snackbar.LENGTH_LONG) | ||
68 | - .setAction("Action", null).show(); | ||
69 | - } | 87 | + spinner.setVisibility(spinner.INVISIBLE); |
70 | } | 88 | } |
71 | }); | 89 | }); |
72 | cancelButton.setOnClickListener(new View.OnClickListener() { | 90 | cancelButton.setOnClickListener(new View.OnClickListener() { |
@@ -76,6 +94,22 @@ public class Calibration extends BaseActivity { | @@ -76,6 +94,22 @@ public class Calibration extends BaseActivity { | ||
76 | cancelButton.setVisibility(cancelButton.INVISIBLE); | 94 | cancelButton.setVisibility(cancelButton.INVISIBLE); |
77 | measureButton.setVisibility(measureButton.INVISIBLE); | 95 | measureButton.setVisibility(measureButton.INVISIBLE); |
78 | MapMarker.setVisibility(MapMarker.INVISIBLE); | 96 | MapMarker.setVisibility(MapMarker.INVISIBLE); |
97 | + spinner.setVisibility(spinner.VISIBLE); | ||
98 | + } | ||
99 | + }); | ||
100 | + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { | ||
101 | + @Override | ||
102 | + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { | ||
103 | + Log.i(TAG, String.format("Pos: %d, ID %d", position, id)); | ||
104 | + map_id = id; | ||
105 | + Map.setVisibility(Map.VISIBLE); | ||
106 | + setPointButton.setVisibility(setPointButton.VISIBLE); | ||
107 | + } | ||
108 | + | ||
109 | + @Override | ||
110 | + public void onNothingSelected(AdapterView<?> parent) { | ||
111 | + Map.setVisibility(Map.INVISIBLE); | ||
112 | + setPointButton.setVisibility(setPointButton.INVISIBLE); | ||
79 | } | 113 | } |
80 | }); | 114 | }); |
81 | } | 115 | } |
@@ -88,8 +122,42 @@ public class Calibration extends BaseActivity { | @@ -88,8 +122,42 @@ public class Calibration extends BaseActivity { | ||
88 | return true; | 122 | return true; |
89 | } | 123 | } |
90 | 124 | ||
91 | - public void sendCalibrateRequest(View v) { | ||
92 | - Snackbar.make(v, "Coucou, X :" + height + " Y : " + width, Snackbar.LENGTH_LONG) | ||
93 | - .setAction("Action", null).show(); | 125 | + public void sendCalibrateRequest(final View v) { |
126 | + if(MapMarker.getVisibility()==MapMarker.INVISIBLE) { | ||
127 | + Snackbar.make(v, "You need to set a point before measurement.", Snackbar.LENGTH_LONG) | ||
128 | + .setAction("Action", null).show(); | ||
129 | + } else { | ||
130 | + JsonRequest request = new JsonObjectRequest(Request.Method.GET,getURLSolver().calibrateURL(width,height,map_id),null, | ||
131 | + new Response.Listener<JSONObject>() { | ||
132 | + @Override | ||
133 | + public void onResponse(JSONObject response) { | ||
134 | + try { | ||
135 | + String x = response.getString("calibration"); | ||
136 | + if(x.equals("try_again")){ | ||
137 | + Snackbar.make(v, "An error with the server occurred, please try again", Snackbar.LENGTH_LONG) | ||
138 | + .setAction("Action", null).show(); | ||
139 | + }else{ | ||
140 | + Snackbar.make(v, "Calibration completed", Snackbar.LENGTH_LONG) | ||
141 | + .setAction("Action", null).show(); | ||
142 | + } | ||
143 | + } catch (JSONException e) { | ||
144 | + Log.e(TAG, e.toString()); | ||
145 | + Snackbar.make(v, "Could not parse the response !", Snackbar.LENGTH_LONG) | ||
146 | + .setAction("Action", null).show(); | ||
147 | + } | ||
148 | + } | ||
149 | + }, | ||
150 | + new Response.ErrorListener() { | ||
151 | + @Override | ||
152 | + public void onErrorResponse(VolleyError error) { | ||
153 | + Snackbar.make(v, "Error: " + error.getMessage(), Snackbar.LENGTH_LONG) | ||
154 | + .setAction("Action", null).show(); | ||
155 | + Log.i(TAG, "Error during calibration request"); | ||
156 | + } | ||
157 | + }); | ||
158 | + queue.add(request); | ||
159 | + Log.i("TAG", String.format("Request : %s", request.getUrl())); | ||
160 | + } | ||
94 | } | 161 | } |
162 | + | ||
95 | } | 163 | } |
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java
@@ -40,7 +40,7 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList | @@ -40,7 +40,7 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList | ||
40 | public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { | 40 | public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { |
41 | switch (key) { | 41 | switch (key) { |
42 | case HOSTNAME_KEY: updateHostname(sharedPreferences); break; | 42 | case HOSTNAME_KEY: updateHostname(sharedPreferences); break; |
43 | - case PORT_KEY: updateHostname(sharedPreferences); break; | 43 | + case PORT_KEY: updatePort(sharedPreferences); break; |
44 | } | 44 | } |
45 | } | 45 | } |
46 | 46 | ||
@@ -57,10 +57,13 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList | @@ -57,10 +57,13 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList | ||
57 | return b.build().toString(); | 57 | return b.build().toString(); |
58 | } | 58 | } |
59 | 59 | ||
60 | - public String calibrateURL() { | 60 | + public String calibrateURL(float x, float y, long map_id) { |
61 | Uri.Builder b = baseURL(); | 61 | Uri.Builder b = baseURL(); |
62 | b.appendPath("calibration") | 62 | b.appendPath("calibration") |
63 | - .appendPath("request"); | 63 | + .appendPath("request") |
64 | + .appendQueryParameter("x", String.format("%f",x)) | ||
65 | + .appendQueryParameter("y", String.format("%f",y)) | ||
66 | + .appendQueryParameter("map_id", String.format("%d", map_id)); | ||
64 | return b.build().toString(); | 67 | return b.build().toString(); |
65 | } | 68 | } |
66 | 69 |
app/src/main/res/layout/activity_calibration.xml
@@ -4,7 +4,6 @@ | @@ -4,7 +4,6 @@ | ||
4 | xmlns:tools="http://schemas.android.com/tools" | 4 | xmlns:tools="http://schemas.android.com/tools" |
5 | android:layout_width="match_parent" | 5 | android:layout_width="match_parent" |
6 | android:layout_height="match_parent" | 6 | android:layout_height="match_parent" |
7 | - android:background="#000000" | ||
8 | tools:context="fr.utbm.lo53.p2017.positionningapp.Calibration"> | 7 | tools:context="fr.utbm.lo53.p2017.positionningapp.Calibration"> |
9 | 8 | ||
10 | <android.support.design.widget.AppBarLayout | 9 | <android.support.design.widget.AppBarLayout |
app/src/main/res/layout/content_calibration.xml
@@ -29,22 +29,19 @@ | @@ -29,22 +29,19 @@ | ||
29 | 29 | ||
30 | <ImageView | 30 | <ImageView |
31 | android:id="@+id/MapMarker" | 31 | android:id="@+id/MapMarker" |
32 | - android:layout_width="0dp" | 32 | + android:layout_width="50dp" |
33 | android:layout_height="50dp" | 33 | android:layout_height="50dp" |
34 | android:layout_marginEnd="8dp" | 34 | android:layout_marginEnd="8dp" |
35 | android:layout_marginLeft="8dp" | 35 | android:layout_marginLeft="8dp" |
36 | android:layout_marginRight="8dp" | 36 | android:layout_marginRight="8dp" |
37 | android:layout_marginStart="8dp" | 37 | android:layout_marginStart="8dp" |
38 | - android:adjustViewBounds="false" | 38 | + android:adjustViewBounds="true" |
39 | android:cropToPadding="false" | 39 | android:cropToPadding="false" |
40 | - app:layout_constraintHorizontal_bias="0.15" | 40 | + app:layout_constraintBottom_toBottomOf="@+id/Map" |
41 | app:layout_constraintLeft_toLeftOf="parent" | 41 | app:layout_constraintLeft_toLeftOf="parent" |
42 | app:layout_constraintRight_toRightOf="parent" | 42 | app:layout_constraintRight_toRightOf="parent" |
43 | - app:srcCompat="@drawable/map_marker" | ||
44 | app:layout_constraintTop_toTopOf="@+id/Map" | 43 | app:layout_constraintTop_toTopOf="@+id/Map" |
45 | - android:layout_marginTop="8dp" | ||
46 | - app:layout_constraintBottom_toBottomOf="@+id/Map" | ||
47 | - android:layout_marginBottom="8dp" /> | 44 | + app:srcCompat="@drawable/map_marker" /> |
48 | 45 | ||
49 | <Button | 46 | <Button |
50 | android:id="@+id/setPointButton" | 47 | android:id="@+id/setPointButton" |
@@ -93,4 +90,15 @@ | @@ -93,4 +90,15 @@ | ||
93 | android:layout_marginBottom="8dp" | 90 | android:layout_marginBottom="8dp" |
94 | app:layout_constraintBottom_toTopOf="@+id/cancelButton" /> | 91 | app:layout_constraintBottom_toTopOf="@+id/cancelButton" /> |
95 | 92 | ||
93 | + <Spinner | ||
94 | + android:id="@+id/spinner" | ||
95 | + android:layout_width="368dp" | ||
96 | + android:layout_height="wrap_content" | ||
97 | + android:layout_marginBottom="8dp" | ||
98 | + app:layout_constraintBottom_toTopOf="@+id/measureButton" | ||
99 | + android:layout_marginRight="8dp" | ||
100 | + app:layout_constraintRight_toRightOf="parent" | ||
101 | + android:layout_marginLeft="8dp" | ||
102 | + app:layout_constraintLeft_toLeftOf="parent" /> | ||
103 | + | ||
96 | </android.support.constraint.ConstraintLayout> | 104 | </android.support.constraint.ConstraintLayout> |
app/src/main/res/layout/content_positioning.xml
@@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
41 | app:layout_constraintLeft_toLeftOf="parent" | 41 | app:layout_constraintLeft_toLeftOf="parent" |
42 | app:layout_constraintRight_toRightOf="parent" | 42 | app:layout_constraintRight_toRightOf="parent" |
43 | app:layout_constraintTop_toTopOf="@+id/Map" | 43 | app:layout_constraintTop_toTopOf="@+id/Map" |
44 | - app:layout_constraintVertical_bias="0.03" | 44 | + app:layout_constraintVertical_bias="0.0" |
45 | app:srcCompat="@drawable/map_marker" /> | 45 | app:srcCompat="@drawable/map_marker" /> |
46 | 46 | ||
47 | <TextView | 47 | <TextView |
app/src/main/res/values/strings.xml
@@ -64,6 +64,12 @@ | @@ -64,6 +64,12 @@ | ||
64 | <item>3</item> | 64 | <item>3</item> |
65 | </string-array> | 65 | </string-array> |
66 | 66 | ||
67 | + <string-array name="map_choices"> | ||
68 | + <item>0</item> | ||
69 | + <item>1</item> | ||
70 | + <item>2</item> | ||
71 | + </string-array> | ||
72 | + | ||
67 | <string-array name="multi_select_list_preference_default_value" /> | 73 | <string-array name="multi_select_list_preference_default_value" /> |
68 | 74 | ||
69 | <string name="pref_title_system_sync_settings">System sync settings</string> | 75 | <string name="pref_title_system_sync_settings">System sync settings</string> |