package net.plil.clubinfo.etunicorn.app.personne; import android.app.DatePickerDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Toast; import com.android.volley.AuthFailureError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.JsonObjectRequest; import net.plil.clubinfo.etunicorn.R; import net.plil.clubinfo.etunicorn.app.MainActivity; import net.plil.clubinfo.etunicorn.app.NFCSupport; import net.plil.clubinfo.etunicorn.data.Role; import net.plil.clubinfo.etunicorn.utils.ConvertBytesToString; import net.plil.clubinfo.etunicorn.utils.JsonConverter; import net.plil.clubinfo.etunicorn.utils.VolleyUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; public class CreatePersonne extends DialogFragment implements NFCSupport { Calendar myCalendar = Calendar.getInstance(); TextInputLayout mLoginInput; TextInputLayout mCarteInput; private DialogInterface.OnDismissListener onDismissListener; private EditText mLogin; private EditText mCarte; private Spinner mNaissance; private Spinner mRole; private ProgressBar mProgressBar; private String[] arraySpinnerNaissance; private ArrayAdapter adapterNaissance; DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { myCalendar.set(Calendar.YEAR, year); myCalendar.set(Calendar.MONTH, monthOfYear); myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); updateLabel(); } }; private List arraySpinnerRole; private ArrayAdapter adapterRole; @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { myCalendar.set(Calendar.YEAR, myCalendar.get(Calendar.YEAR) - 18); // Use the Builder class for convenient dialog construction LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.fragment_create_personne, null); mLogin = (EditText) view.findViewById(R.id.create_personne_login); mCarte = (EditText) view.findViewById(R.id.create_personne_carte); mLoginInput = (TextInputLayout) view.findViewById(R.id.create_personne_login_input); mCarteInput = (TextInputLayout) view.findViewById(R.id.create_personne_carte_input); mRole = (Spinner) view.findViewById(R.id.create_personne_role); arraySpinnerRole = new ArrayList<>(); Role r = new Role(); r.setNom("Role"); arraySpinnerRole.add(r); adapterRole = new ArrayAdapter<>(getActivity(), R.layout.simple_item_layout, arraySpinnerRole); mRole.setAdapter(adapterRole); changeRolePossibility(); mNaissance = (Spinner) view.findViewById(R.id.create_personne_naissance); arraySpinnerNaissance = new String[]{ getString(R.string.create_personne_naissance) }; adapterNaissance = new ArrayAdapter<>(getActivity(), R.layout.simple_item_layout, arraySpinnerNaissance); mNaissance.setAdapter(adapterNaissance); mProgressBar = (ProgressBar) view.findViewById(R.id.create_personne_progress_bar); AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setTitle(R.string.create_personne) .setView(view) .setPositiveButton(R.string.valid, null) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { VolleyUtils.getInstance(getContext()).getRequestQueue().cancelAll(CreatePersonne.class); } }).create(); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(final DialogInterface dialog) { Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mLogin.getText().toString().isEmpty() && mCarte.getText().toString().isEmpty()) { mLogin.setError(getString(R.string.error_create_personne_login_carte)); mCarte.setError(getString(R.string.error_create_personne_login_carte)); } else { mProgressBar.setVisibility(View.VISIBLE); mLoginInput.setVisibility(View.GONE); mCarteInput.setVisibility(View.GONE); mNaissance.setVisibility(View.GONE); mRole.setVisibility(View.GONE); JSONObject jsonObject = new JSONObject(); try { if (!mLogin.getText().toString().isEmpty()) jsonObject.put("login", mLogin.getText().toString()); if (!mCarte.getText().toString().isEmpty()) jsonObject.put("carte", mCarte.getText().toString()); jsonObject.put("role", JsonConverter.convertToJSONObject(mRole.getSelectedItem())); if (!mNaissance.getSelectedItem().equals(getString(R.string.create_personne_naissance))) jsonObject.put("naissance", mNaissance.getSelectedItem()); } catch (JSONException e) { e.printStackTrace(); } JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, VolleyUtils.baseUri + "/personne", jsonObject, new Response.Listener() { @Override public void onResponse(JSONObject response) { mProgressBar.setVisibility(View.GONE); dismiss(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mProgressBar.setVisibility(View.GONE); mLoginInput.setVisibility(View.VISIBLE); mCarteInput.setVisibility(View.VISIBLE); mNaissance.setVisibility(View.VISIBLE); mRole.setVisibility(View.VISIBLE); if (error.networkResponse != null) Toast.makeText(getContext(), ConvertBytesToString.bytesToStringVolLey(error.networkResponse.data), Toast.LENGTH_LONG).show(); } } ) { @Override public Map getHeaders() throws AuthFailureError { Map headers = new HashMap<>(); headers.put("Authorization", MainActivity.session.getToken()); return headers; } }; jsonObjectRequest.setTag(CreatePersonne.class); VolleyUtils.getInstance(getContext()).addToRequestQueue(jsonObjectRequest); } } }); } }); mNaissance.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { new DatePickerDialog(getContext(), date, myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); } return true; } }); dialog.setCanceledOnTouchOutside(false); return dialog; } private void changeRolePossibility() { JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, VolleyUtils.baseUri + "/role", null, new Response.Listener() { @Override public void onResponse(JSONArray response) { try { arraySpinnerRole.clear(); for (int i = 0; i < response.length(); ++i) { arraySpinnerRole.add(JsonConverter.getConverter().fromJson(String.valueOf(response.getJSONObject(i)), Role.class)); } adapterRole.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error.networkResponse == null) Toast.makeText(getContext(), "Verifier votre connection Internet", Toast.LENGTH_LONG).show(); else Toast.makeText(getContext(), ConvertBytesToString.bytesToStringVolLey(error.networkResponse.data), Toast.LENGTH_LONG).show(); } } ); jsonArrayRequest.setTag(CreatePersonne.class); VolleyUtils.getInstance(getContext()).addToRequestQueue(jsonArrayRequest); } private void updateLabel() { String myFormat = "yyyy-MM-dd"; //In which you need put here SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.FRANCE); arraySpinnerNaissance[0] = sdf.format(myCalendar.getTime()); adapterNaissance.notifyDataSetChanged(); } @Override public void onStop() { VolleyUtils.getInstance(getContext()).getRequestQueue().cancelAll(CreatePersonne.class); dismissAllowingStateLoss(); super.onStop(); } @Override public void processNFC(String idCard) { mCarte.setText(idCard); } public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { this.onDismissListener = onDismissListener; } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (onDismissListener != null) { onDismissListener.onDismiss(dialog); } } }