diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Crediter.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Crediter.java index 7bfe1e5..38beeaa 100644 --- a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Crediter.java +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Crediter.java @@ -63,7 +63,7 @@ public class Crediter extends FragmentNFC { } @Override - public void processNFC() { + public void processNFC(String idCardUser) { mProgressBar.setVisibility(View.VISIBLE); JSONObject jsonObject = new JSONObject(); try { diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Debiter.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Debiter.java index 63dc126..6522c46 100644 --- a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Debiter.java +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Debiter.java @@ -70,9 +70,10 @@ public class Debiter extends FragmentNFC { } @Override - public void processNFC() { + public void processNFC(String iDCardUser) { mProgressBar.setVisibility(View.VISIBLE); JSONObject jsonObject = new JSONObject(); + //TODO verifier champ complet avant de construire la requete try { jsonObject.put("participant", 1); jsonObject.put("acteur", 2); diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/EventFragment.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/EventFragment.java new file mode 100644 index 0000000..7eab0c5 --- /dev/null +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/EventFragment.java @@ -0,0 +1,105 @@ +package net.plil.clubinfo.etunicorn.app.Event; + +import android.content.Context; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import net.plil.clubinfo.etunicorn.R; +import net.plil.clubinfo.etunicorn.app.FragmentNFC; +import net.plil.clubinfo.etunicorn.data.Event; + +import java.sql.Date; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * A fragment representing a list of Items. + *

+ * Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener} + * interface. + */ +public class EventFragment extends FragmentNFC { + + private OnListFragmentInteractionListener mListener; + + public EventFragment() { + } + + + public static EventFragment newInstance() { + return new EventFragment(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_event_list, container, false); + + // Set the adapter + if (view instanceof RecyclerView) { + Context context = view.getContext(); + RecyclerView recyclerView = (RecyclerView) view; + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + + List events = new ArrayList<>(); + for (int i = 0; i< 150; ++i){ + Event ev = new Event(); + ev.setNomEvent("Hello " + i); + ev.setPrice(15.52); + ev.setDate(new Date(Calendar.getInstance().getTimeInMillis())); + events.add(ev); + } + + recyclerView.setAdapter(new MyEventRecyclerViewAdapter(events, mListener, getActivity())); + } + return view; + } + + + @Override + public void onAttach(Context context) { + super.onAttach(context); + if (context instanceof OnListFragmentInteractionListener) { + mListener = (OnListFragmentInteractionListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement OnListFragmentInteractionListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + @Override + public void processNFC(String idCardUser) { + + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnListFragmentInteractionListener { + void onListFragmentInteraction(Event item); + void onListFragmentInteractionLong(Event item); + } +} diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/MyEventRecyclerViewAdapter.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/MyEventRecyclerViewAdapter.java new file mode 100644 index 0000000..e5e90d9 --- /dev/null +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/MyEventRecyclerViewAdapter.java @@ -0,0 +1,83 @@ +package net.plil.clubinfo.etunicorn.app.Event; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import net.plil.clubinfo.etunicorn.R; +import net.plil.clubinfo.etunicorn.data.Event; + +import java.util.List; +import java.util.Locale; + + +public class MyEventRecyclerViewAdapter extends RecyclerView.Adapter { + + private final List mEvents; + private final EventFragment.OnListFragmentInteractionListener mListener; + private final Context context; + + public MyEventRecyclerViewAdapter(List items, EventFragment.OnListFragmentInteractionListener listener, Context context) { + mEvents = items; + mListener = listener; + this.context = context; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.fragment_event, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.mItem = mEvents.get(position); + holder.mContentView.setText(mEvents.get(position).getNomEvent()); + holder.mPriceView.setText(String.format(Locale.FRANCE, "%.2f", mEvents.get(position).getPrice())); + holder.mId = mEvents.get(position).getIdEvent(); + + holder.mView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (null != mListener) { + mListener.onListFragmentInteraction(holder.mItem); + } + } + }); + + holder.mView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + mListener.onListFragmentInteractionLong(holder.mItem); + return true; + } + }); + } + + @Override + public int getItemCount() { + return mEvents.size(); + } + + class ViewHolder extends RecyclerView.ViewHolder { + final View mView; + int mId; + final TextView mContentView; + final TextView mPriceView; + final TextView mButtonView; + Event mItem; + + public ViewHolder(View view) { + super(view); + mView = view; + mContentView = (TextView) view.findViewById(R.id.event_name); + mPriceView = (TextView) view.findViewById(R.id.event_price); + mButtonView = (TextView) view.findViewById(R.id.event_options); + } + + } +} diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/PaiementEvent.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/PaiementEvent.java new file mode 100644 index 0000000..e468d64 --- /dev/null +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/Event/PaiementEvent.java @@ -0,0 +1,107 @@ +package net.plil.clubinfo.etunicorn.app.Event; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; + +import net.plil.clubinfo.etunicorn.R; +import net.plil.clubinfo.etunicorn.data.Consommation; +import net.plil.clubinfo.etunicorn.data.Event; +import net.plil.clubinfo.etunicorn.utils.VolleyUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Locale; + + +public class PaiementEvent extends DialogFragment { + + ProgressBar mProgressBar; + TextView mPaiementEventName; + TextView mPaiementEventPrice; + int eventId; + + public PaiementEvent(){} + + public static PaiementEvent newInstance(Event event) { + PaiementEvent f = new PaiementEvent(); + Bundle args = new Bundle(); + args.putSerializable("event", event); + f.setArguments(args); + return f; + } + + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Use the Builder class for convenient dialog construction + LayoutInflater inflater = getActivity().getLayoutInflater(); + View view = inflater.inflate(R.layout.fragment_paiment_event, null); + mProgressBar = (ProgressBar) view.findViewById(R.id.paiment_event_progress_bar); + mPaiementEventName = (TextView) view.findViewById(R.id.paiment_event_name); + mPaiementEventPrice = (TextView) view.findViewById(R.id.paiment_event_price); + + + Event event = (Event) getArguments().getSerializable("event"); + mPaiementEventName.setText(event.getNomEvent()); + mPaiementEventPrice.setText(String.format(Locale.FRANCE, "%.2f €", event.getPrice())); + + eventId = event.getIdEvent(); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder + .setTitle(R.string.payment_event) + .setView(view) + .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // User cancelled the dialog + } + }); + // Create the AlertDialog object and return it + return builder.create(); + } + + + public void processNFC() { + mProgressBar.setVisibility(View.VISIBLE); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("participant", 1); + jsonObject.put("acteur", 2); + jsonObject.put("id", eventId); + } catch (JSONException e) { + e.printStackTrace(); + } + JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, VolleyUtils.baseUri + "/transaction/evenement", jsonObject, new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + mProgressBar.setVisibility(View.GONE); + Toast.makeText(getContext(), R.string.payment_done, Toast.LENGTH_LONG).show(); + dismiss(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + mProgressBar.setVisibility(View.GONE); + Toast.makeText(getContext(), R.string.payment_refused, Toast.LENGTH_LONG).show(); + dismiss(); + } + } + ); + + VolleyUtils.getInstance(getContext()).addToRequestQueue(jsonObjectRequest); + } +} diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/FragmentNFC.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/FragmentNFC.java index 4ca54bd..0cd3508 100644 --- a/app/src/main/java/net/plil/clubinfo/etunicorn/app/FragmentNFC.java +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/FragmentNFC.java @@ -8,5 +8,5 @@ import android.view.View; */ public abstract class FragmentNFC extends Fragment { - public abstract void processNFC(); + public abstract void processNFC(String idCardUser); } diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/MainActivity.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/MainActivity.java index 92d3ee7..5df4fa1 100644 --- a/app/src/main/java/net/plil/clubinfo/etunicorn/app/MainActivity.java +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/MainActivity.java @@ -4,6 +4,7 @@ import android.app.PendingIntent; import android.content.Intent; import android.net.Uri; import android.nfc.NfcAdapter; +import android.nfc.Tag; import android.os.Bundle; import android.support.design.widget.AppBarLayout; import android.support.design.widget.TabLayout; @@ -17,17 +18,22 @@ import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; +import android.widget.Toast; import net.plil.clubinfo.etunicorn.R; +import net.plil.clubinfo.etunicorn.app.Event.EventFragment; +import net.plil.clubinfo.etunicorn.app.Event.PaiementEvent; import net.plil.clubinfo.etunicorn.app.consommation.FragmentConsommation; import net.plil.clubinfo.etunicorn.app.consommation.PaiementConsommation; import net.plil.clubinfo.etunicorn.data.Consommation; +import net.plil.clubinfo.etunicorn.data.Event; +import net.plil.clubinfo.etunicorn.utils.ConvertBytesToString; import java.util.ArrayList; import java.util.List; -public class MainActivity extends AppCompatActivity implements FragmentConsommation.OnListFragmentInteractionListener{ +public class MainActivity extends AppCompatActivity implements FragmentConsommation.OnListFragmentInteractionListener, EventFragment.OnListFragmentInteractionListener{ /** * The {@link android.support.v4.view.PagerAdapter} that will provide @@ -109,8 +115,9 @@ public class MainActivity extends AppCompatActivity implements FragmentConsommat protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { + Tag myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); FragmentNFC fNFC = (FragmentNFC) getSupportFragmentManager().getFragments().get(mViewPager.getCurrentItem()); - fNFC.processNFC(); + fNFC.processNFC(ConvertBytesToString.bytesToHexString(myTag.getId())); } } @@ -136,7 +143,18 @@ public class MainActivity extends AppCompatActivity implements FragmentConsommat } @Override - public void onListFragmentInteractionLong(Consommation item) { + public void onListFragmentInteractionLong(Consommation consommation) { + + } + + @Override + public void onListFragmentInteraction(Event item) { + PaiementEvent paiementEvent = PaiementEvent.newInstance(item); + paiementEvent.show(getSupportFragmentManager(), "paiementEvent"); + } + + @Override + public void onListFragmentInteractionLong(Event item) { } @@ -158,13 +176,15 @@ public class MainActivity extends AppCompatActivity implements FragmentConsommat return Debiter.newInstance(); else if (position == Action.CONSOMATION.getValue()) return FragmentConsommation.newInstance(); + else if (position == Action.EVENT.getValue()) + return EventFragment.newInstance(); else return null; } @Override public int getCount() { - return 3; + return 4; } @Override @@ -175,12 +195,14 @@ public class MainActivity extends AppCompatActivity implements FragmentConsommat return "Crediter"; else if (position == Action.CONSOMATION.getValue()) return "Consommation"; + else if(position == Action.EVENT.getValue()) + return getString(R.string.event); return null; } } private enum Action { - DEBITER(0), CREDITER(1), CONSOMATION(2); + DEBITER(0), CREDITER(1), CONSOMATION(2), EVENT(3); private final int value; Action(int value) { diff --git a/app/src/main/java/net/plil/clubinfo/etunicorn/app/consommation/ConsommationRecyclerViewAdapter.java b/app/src/main/java/net/plil/clubinfo/etunicorn/app/consommation/ConsommationRecyclerViewAdapter.java index 188fd05..bdc3802 100644 --- a/app/src/main/java/net/plil/clubinfo/etunicorn/app/consommation/ConsommationRecyclerViewAdapter.java +++ b/app/src/main/java/net/plil/clubinfo/etunicorn/app/consommation/ConsommationRecyclerViewAdapter.java @@ -114,9 +114,5 @@ public class ConsommationRecyclerViewAdapter extends RecyclerView.Adapter>> 4) & 0x0F, 16); + buffer[1] = Character.forDigit(bytes[i] & 0x0F, 16); + System.out.println(buffer); + stringBuilder.append(buffer); + } + + return stringBuilder.toString(); + } + +} diff --git a/app/src/main/res/layout/fragment_crediter.xml b/app/src/main/res/layout/fragment_crediter.xml index 4cde597..e46ea66 100644 --- a/app/src/main/res/layout/fragment_crediter.xml +++ b/app/src/main/res/layout/fragment_crediter.xml @@ -5,7 +5,7 @@ tools:context="net.plil.clubinfo.etunicorn.app.Crediter"> + + + + + + + + diff --git a/app/src/main/res/layout/fragment_event_list.xml b/app/src/main/res/layout/fragment_event_list.xml new file mode 100644 index 0000000..8de1445 --- /dev/null +++ b/app/src/main/res/layout/fragment_event_list.xml @@ -0,0 +1,13 @@ + + diff --git a/app/src/main/res/layout/fragment_paiment_event.xml b/app/src/main/res/layout/fragment_paiment_event.xml new file mode 100644 index 0000000..9777550 --- /dev/null +++ b/app/src/main/res/layout/fragment_paiment_event.xml @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c84d398..25a0076 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,4 +28,6 @@ Delete refused Modify done Modify refused + Event + Event payment -- libgit2 0.21.2