diff --git a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/Calibration.java b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/Calibration.java index 4e7f1ac..ad4529a 100644 --- a/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/Calibration.java +++ b/app/src/main/java/fr/utbm/lo53/p2017/positionningapp/Calibration.java @@ -1,20 +1,37 @@ package fr.utbm.lo53.p2017.positionningapp; -import android.content.Intent; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.view.MotionEvent; -import android.view.View; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; +import android.widget.Spinner; + +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.JsonObjectRequest; +import com.android.volley.toolbox.JsonRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONException; +import org.json.JSONObject; public class Calibration extends BaseActivity { + public static final String TAG = "Calibration"; float height,width; + long map_id; + private ImageView MapMarker; + private RequestQueue queue; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -24,11 +41,19 @@ public class Calibration extends BaseActivity { setSupportActionBar(toolbar); final ImageView Map = (ImageView) findViewById(R.id.Map); - final ImageView MapMarker = (ImageView) findViewById(R.id.MapMarker); + MapMarker = (ImageView) findViewById(R.id.MapMarker); final Button setPointButton = (Button) findViewById(R.id.setPointButton); final Button cancelButton = (Button) findViewById(R.id.cancelButton); final Button measureButton = (Button) findViewById(R.id.measureButton); + final Spinner spinner = (Spinner) findViewById(R.id.spinner); + queue = Volley.newRequestQueue(this); + + ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.map_choices, android.R.layout.simple_spinner_dropdown_item); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapter); + Map.setVisibility(Map.INVISIBLE); + setPointButton.setVisibility(setPointButton.INVISIBLE); MapMarker.setVisibility(MapMarker.INVISIBLE); cancelButton.setVisibility(cancelButton.INVISIBLE); measureButton.setVisibility(measureButton.INVISIBLE); @@ -41,12 +66,13 @@ public class Calibration extends BaseActivity { /*motionEvent.getAction()==motionEvent.ACTION_MOVE &&*/ if( setPointButton.getVisibility() == setPointButton.INVISIBLE && motionEvent.getX() <= Map.getWidth() && motionEvent.getY() <= Map.getHeight() && motionEvent.getX() >= 0 && motionEvent.getY() >= 0) { MapMarker.setVisibility(MapMarker.VISIBLE); - height = motionEvent.getX(); - width = motionEvent.getY(); - Snackbar.make(view, " X : " + height + " Y : " + width, Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - MapMarker.setX(motionEvent.getX()- (view.getWidth()- Map.getWidth())/2 -40);//- MapMarker.getWidth()/2); - MapMarker.setY(motionEvent.getY()+ (view.getHeight()/5));//+(MapMarker.getWidth()/(5/4))); + width = motionEvent.getX() / Map.getWidth(); + height = motionEvent.getY() / Map.getHeight(); + /*Snackbar.make(view, " X : " + height + " Y : " + width, Snackbar.LENGTH_LONG) + .setAction("Action", null).show();*/ + Log.i(TAG, String.format("Width: %f, height: %f", width, height)); + MapMarker.setX(motionEvent.getX() - MapMarker.getWidth()/2 + Map.getX()); + MapMarker.setY(motionEvent.getY() - MapMarker.getHeight() + Map.getY()); } return true; } @@ -58,15 +84,7 @@ public class Calibration extends BaseActivity { setPointButton.setVisibility(setPointButton.INVISIBLE); cancelButton.setVisibility(cancelButton.VISIBLE); measureButton.setVisibility(measureButton.VISIBLE); - } - }); - measureButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if(MapMarker.getVisibility()==MapMarker.INVISIBLE) { - Snackbar.make(v, "You need to set a point before measurement.", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } + spinner.setVisibility(spinner.INVISIBLE); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @@ -76,6 +94,22 @@ public class Calibration extends BaseActivity { cancelButton.setVisibility(cancelButton.INVISIBLE); measureButton.setVisibility(measureButton.INVISIBLE); MapMarker.setVisibility(MapMarker.INVISIBLE); + spinner.setVisibility(spinner.VISIBLE); + } + }); + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + Log.i(TAG, String.format("Pos: %d, ID %d", position, id)); + map_id = id; + Map.setVisibility(Map.VISIBLE); + setPointButton.setVisibility(setPointButton.VISIBLE); + } + + @Override + public void onNothingSelected(AdapterView parent) { + Map.setVisibility(Map.INVISIBLE); + setPointButton.setVisibility(setPointButton.INVISIBLE); } }); } @@ -88,8 +122,42 @@ public class Calibration extends BaseActivity { return true; } - public void sendCalibrateRequest(View v) { - Snackbar.make(v, "Coucou, X :" + height + " Y : " + width, Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); + public void sendCalibrateRequest(final View v) { + if(MapMarker.getVisibility()==MapMarker.INVISIBLE) { + Snackbar.make(v, "You need to set a point before measurement.", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } else { + JsonRequest request = new JsonObjectRequest(Request.Method.GET,getURLSolver().calibrateURL(width,height,map_id),null, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + String x = response.getString("calibration"); + if(x.equals("try_again")){ + Snackbar.make(v, "An error with the server occurred, please try again", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + }else{ + Snackbar.make(v, "Calibration completed", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + } catch (JSONException e) { + Log.e(TAG, e.toString()); + Snackbar.make(v, "Could not parse the response !", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar.make(v, "Error: " + error.getMessage(), Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + Log.i(TAG, "Error during calibration request"); + } + }); + queue.add(request); + Log.i("TAG", String.format("Request : %s", request.getUrl())); + } } + } 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 0c6d4cf..2ab1921 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 @@ -40,7 +40,7 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { switch (key) { case HOSTNAME_KEY: updateHostname(sharedPreferences); break; - case PORT_KEY: updateHostname(sharedPreferences); break; + case PORT_KEY: updatePort(sharedPreferences); break; } } @@ -57,10 +57,13 @@ public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeList return b.build().toString(); } - public String calibrateURL() { + public String calibrateURL(float x, float y, long map_id) { Uri.Builder b = baseURL(); b.appendPath("calibration") - .appendPath("request"); + .appendPath("request") + .appendQueryParameter("x", String.format("%f",x)) + .appendQueryParameter("y", String.format("%f",y)) + .appendQueryParameter("map_id", String.format("%d", map_id)); return b.build().toString(); } diff --git a/app/src/main/res/layout/activity_calibration.xml b/app/src/main/res/layout/activity_calibration.xml index af5342a..0ee79a1 100644 --- a/app/src/main/res/layout/activity_calibration.xml +++ b/app/src/main/res/layout/activity_calibration.xml @@ -4,7 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#000000" tools:context="fr.utbm.lo53.p2017.positionningapp.Calibration"> + app:srcCompat="@drawable/map_marker" />