package fr.utbm.lo53.p2017.positionningapp; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v7.widget.Toolbar; 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) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calibration); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ImageView Map = (ImageView) findViewById(R.id.Map); 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); //Map.setMaxHeight(50); Map.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { /*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); 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; } }); setPointButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setPointButton.setVisibility(setPointButton.INVISIBLE); cancelButton.setVisibility(cancelButton.VISIBLE); measureButton.setVisibility(measureButton.VISIBLE); spinner.setVisibility(spinner.INVISIBLE); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setPointButton.setVisibility(setPointButton.VISIBLE); 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); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem item = menu.findItem(R.id.open_locate_activity); item.setVisible(true); return true; } 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())); } } }