package client.smrtms.com.smrtms_client.fragment;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
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.controller.Client;
import client.smrtms.com.smrtms_client.controller.JSONParser;
import client.smrtms.com.smrtms_client.controller.ServerControl;
import client.smrtms.com.smrtms_client.controller.UserListAdapter;
import client.smrtms.com.smrtms_client.controller.sendCoordinates;
import client.smrtms.com.smrtms_client.controller.LoginUser;
import client.smrtms.com.smrtms_client.controller.User;
import client.smrtms.com.smrtms_client.tokens.DeleteFriendToken;
public class ContactsFragment extends Fragment {
User selectedFriend;
ListView listView;
ArrayList<User> users;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_contacts, container, false);
listView = (ListView) getActivity().findViewById(R.id.listFriend);
return rootView;
}
@Override
public void onResume()
{
super.onResume();
listView = (ListView) getActivity().findViewById(R.id.listFriend);
users = new ArrayList<>();
setUpFriendList();
ServerControl.gotNewFriendList = false;
}
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser )
{
LoginUser.getInstance().serverTask.getGpsTracker().getLocation();
if(ServerControl.gotNewFriendList)
{
users = new ArrayList<>();
setUpFriendList();
ServerControl.gotNewFriendList = false;
}
// load data here
}
else
{
// fragment is no longer visible
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
listView = (ListView) getActivity().findViewById(R.id.listFriend);
if(LoginUser.getInstance() != null)
{
LoginUser.getInstance().checkPendingFriendReq();
}
// Construct the data source
users = new ArrayList<>();
setUpFriendList();
ServerControl.gotNewFriendList = false;
}
private void setUpFriendList()
{
for(User friend: LoginUser.getInstance().getFriendList())
{
float[] result = new float[5];
Location.distanceBetween(LoginUser.getInstance().getLatitude(),
LoginUser.getInstance().getLongitude(),
friend.getLatitude(),
friend.getLongitude(),
result);
friend.setDistance((double) Math.round(result[0] * 10) / 10);
users.add(friend);
}
Collections.sort(users, new Comparator<User>() {
public int compare(User o1, User o2)
{
if(o1.isOnline() && o2.isOnline())
{
if (o1.getDistance() == o2.getDistance())
return 0;
return o1.getDistance() < o2.getDistance() ? -1 : 1;
}
else if(o1.isOnline() && !o2.isOnline())
{
return -1;
}
else if(!o1.isOnline() && o2.isOnline())
{
return 1;
}
else
{
return 0;
}
}
});
// Create the adapter to convert the array to views
UserListAdapter adapter = new UserListAdapter(getActivity(), users);
// Attach the adapter to a ListView
listView.setAdapter(adapter);
ActionItem chat = new ActionItem(1, "chat", getResources().getDrawable(R.drawable.chat));
ActionItem map = new ActionItem(2, "map", getResources().getDrawable(R.drawable.globe));
ActionItem delete = new ActionItem(3, "delete", getResources().getDrawable(R.drawable.delete));
//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(chat);
quickAction.addActionItem(map);
quickAction.addActionItem(delete);
//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);
/* chat is selected */
if (actionItem.getActionId() == 1) {
Intent myIntent = new Intent(getActivity(), ChatActivity.class);
myIntent.putExtra("UserKey", selectedFriend.getID());
getActivity().startActivity(myIntent);
/* map is selected */
} else if (actionItem.getActionId() == 2) {
// send message
sendCoordinates.setCoordinates(new LatLng(selectedFriend.getLatitude(), selectedFriend.getLongitude()));
// switch t Map fragment
TabsFragment tf = (TabsFragment) getParentFragment();
tf.setTabPostion(0);
/* delete is selected */
} else if (actionItem.getActionId() == 3)
{
JSONParser<DeleteFriendToken> reader = new JSONParser<>();
DeleteFriendToken delFriend = new DeleteFriendToken(selectedFriend.getUsername());
String del = reader.JSONWriter(delFriend);
Client.getInstance().WriteMsg(del);
}
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
quickAction.show(view);
selectedFriend = (User) parent.getItemAtPosition(position);
Toast.makeText(getActivity().getApplicationContext(), selectedFriend.getUsername(), Toast.LENGTH_SHORT).show();
}
});
}
}