package client.smrtms.com.smrtms_client.fragment; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.firebase.androidchat.ChatActivity; import com.google.android.gms.maps.model.LatLng; import net.londatiga.android.ActionItem; import net.londatiga.android.QuickAction; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import client.smrtms.com.smrtms_client.R; import client.smrtms.com.smrtms_client.activity.StartActivity; import client.smrtms.com.smrtms_client.controller.Client; import client.smrtms.com.smrtms_client.controller.Event; import client.smrtms.com.smrtms_client.controller.EventListAdapter; import client.smrtms.com.smrtms_client.controller.JSONParser; import client.smrtms.com.smrtms_client.controller.LoginUser; import client.smrtms.com.smrtms_client.controller.ServerControl; import client.smrtms.com.smrtms_client.controller.sendCoordinates; import client.smrtms.com.smrtms_client.tokens.AddEventToken; import client.smrtms.com.smrtms_client.tokens.JoinEventToken; public class EventFragment extends Fragment { private Event selectedEvent; ArrayList<Event> events; ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.activity_event, container, false); listView = (ListView) getActivity().findViewById(R.id.listEvent); return rootView; } public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser ) { LoginUser.getInstance().serverTask.getGpsTracker().getLocation(); // Construct the data source if(ServerControl.gotNewEventList) { events = new ArrayList<>(); setUpEventList(); ServerControl.gotNewEventList = false; } } else { // fragment is no longer visible } } @Override public void onViewCreated(View view, Bundle savedInstanceState) { listView = (ListView) getActivity().findViewById(R.id.listEvent); super.onViewCreated(view, savedInstanceState); if(LoginUser.getInstance() != null) { LoginUser.getInstance().checkPendingFriendReq(); } // Construct the data source; events = new ArrayList<>(); setUpEventList(); } @Override public void onResume() { super.onResume(); listView = (ListView) getActivity().findViewById(R.id.listEvent); events = new ArrayList<>(); setUpEventList(); ServerControl.gotNewEventList = false; } private void setUpEventList() { for(Event event: LoginUser.getInstance().getEventList()) { event.setDistance(Math.round(LoginUser.getInstance().getServerTask().getGpsTracker().calculateDistance(event.getLatitude(), event.getLongitude()) * 1000) / 1000.0); events.add(event); } Collections.sort(events, new Comparator<Event>() { public int compare(Event o1, Event o2) { if (o1.getDistance() == o2.getDistance()) return 0; return o1.getDistance() < o2.getDistance() ? -1 : 1; } }); // Create the adapter to convert the array to views EventListAdapter adapter = new EventListAdapter(getActivity(), events); // Attach the adapter to a ListView listView.setAdapter(adapter); ActionItem join = new ActionItem(1, "join", getResources().getDrawable(R.drawable.join)); ActionItem leave = new ActionItem(2, "Chat", getResources().getDrawable(R.drawable.chat)); ActionItem map = new ActionItem(3, "map", getResources().getDrawable(R.drawable.globe)); //create QuickAction. Use QuickAction.VERTICAL or QuickAction.HORIZONTAL param to define layout //orientation final QuickAction quickAction = new QuickAction(getActivity(), QuickAction.HORIZONTAL); //add action items into QuickAction quickAction.addActionItem(join); quickAction.addActionItem(leave); quickAction.addActionItem(map); //Set listener for action item clicked quickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() { @Override public void onItemClick(QuickAction source, int pos, int actionId) { //here we can filter which action item was clicked with pos or actionId parameter ActionItem actionItem = quickAction.getActionItem(pos); /* join is selected */ if (actionItem.getActionId() == 1) { JSONParser<JoinEventToken> reader = new JSONParser<>(); JoinEventToken jet = new JoinEventToken(selectedEvent.getName()); String addEvent = reader.JSONWriter(jet); Client.getInstance().WriteMsg(addEvent); if(selectedEvent.attendees == null) { selectedEvent.attendees = 1; } else { selectedEvent.attendees += 1; } /* leave is selected */ } else if (actionItem.getActionId() == 2) { //TODO leave event Intent myIntent = new Intent(getActivity(), ChatActivity.class); myIntent.putExtra("UserKey", "Event"); myIntent.putExtra("EventName", selectedEvent.getName()); getActivity().startActivity(myIntent); /* map is selected */ } else if (actionItem.getActionId() == 3) { // send message sendCoordinates.setCoordinates(new LatLng(selectedEvent.getLatitude(), selectedEvent.getLongitude())); // switch t Map fragment TabsFragment tf = (TabsFragment) getParentFragment(); tf.setTabPostion(0); } } }); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { quickAction.show(view); selectedEvent = (Event) parent.getItemAtPosition(position); Toast.makeText(getActivity().getApplicationContext(), selectedEvent.getName(), Toast.LENGTH_SHORT).show(); } }); } }