diff --git a/app/src/main/java/com/example/tampopo_client/resources/FriendRequestsResource.java b/app/src/main/java/com/example/tampopo_client/resources/FriendRequestsResource.java index b82d1ae..65e3134 100644 --- a/app/src/main/java/com/example/tampopo_client/resources/FriendRequestsResource.java +++ b/app/src/main/java/com/example/tampopo_client/resources/FriendRequestsResource.java @@ -30,6 +30,11 @@ @Query("token") String token ); + @GET("friend-requests/sent") + Call> getSentFriendRequests( + @Query("token") String token + ); + @DELETE("friend-requests/{friend-request-id}") Call deleteFriendRequest( @Path("friend-request-id") String friendRequestId, diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendSentRequestFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendSentRequestFragment.java new file mode 100644 index 0000000..d4a7e65 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/FriendSentRequestFragment.java @@ -0,0 +1,87 @@ +package com.example.tampopo_client.views; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.tampopo_client.R; +import com.example.tampopo_client.Tampopo; +import com.example.tampopo_client.viewmodels.FriendSentRequestViewModel; +import com.example.tampopo_client.views.placeholder.FriendSentRequestContent; + +public class FriendSentRequestFragment extends Fragment { + + private static final String ARG_COLUMN_COUNT = "column-count"; + private int mColumnCount = 1; + private MyFriendSentRequestRecyclerViewAdapter adapter; + + public FriendSentRequestFragment() { + } + + public static FriendSentRequestFragment newInstance(int columnCount) { + FriendSentRequestFragment fragment = new FriendSentRequestFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_COLUMN_COUNT, columnCount); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getArguments() != null) { + mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_friend_sent_request_list, container, false); + + RecyclerView recyclerView = view.findViewById(R.id.list); + Context context = view.getContext(); + + if (mColumnCount <= 1) { + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + } else { + recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); + } + + adapter = new MyFriendSentRequestRecyclerViewAdapter(FriendSentRequestContent.ITEMS); + recyclerView.setAdapter(adapter); + + return view; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + FriendSentRequestViewModel friendSentRequestViewModel = new ViewModelProvider(this).get(FriendSentRequestViewModel.class); + + Tampopo app = (Tampopo) requireActivity().getApplication(); + String userId = app.getUserId(); + String token = app.getToken(); + + friendSentRequestViewModel.loadSentRequests(userId, token); + + friendSentRequestViewModel.getSentRequests().observe(getViewLifecycleOwner(), sentRequests -> { + FriendSentRequestContent.clear(); + if (sentRequests != null) { + for (String id : sentRequests) { + FriendSentRequestContent.addItem(new FriendSentRequestContent.FriendSentRequestItem(id, "")); + } + } + adapter.notifyDataSetChanged(); + }); + } +} diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendSentRequestRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendSentRequestRecyclerViewAdapter.java new file mode 100644 index 0000000..b3ff92b --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendSentRequestRecyclerViewAdapter.java @@ -0,0 +1,77 @@ +package com.example.tampopo_client.views; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import com.example.tampopo_client.R; +import com.example.tampopo_client.views.placeholder.FriendSentRequestContent.FriendSentRequestItem; + +import java.util.List; + +public class MyFriendSentRequestRecyclerViewAdapter extends RecyclerView.Adapter { + + private final List mValues; + private final OnCancelButtonClickListener mListener; + + public interface OnCancelButtonClickListener { + void onCancelButtonClick(FriendSentRequestItem item); + } + + public MyFriendSentRequestRecyclerViewAdapter(List items, OnCancelButtonClickListener listener) { + mValues = items; + mListener = listener; + } + + public MyFriendSentRequestRecyclerViewAdapter(List items) { + mValues = items; + mListener = null; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_item_friend_sent_request, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.mItem = mValues.get(position); + holder.userIdView.setText(holder.mItem.id); + holder.nicknameView.setText(holder.mItem.name); + holder.userIcon.setImageResource(R.drawable.friend); // placeholder icon + + holder.cancelButton.setOnClickListener(v -> { + if (mListener != null) { + mListener.onCancelButtonClick(holder.mItem); + } + }); + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + public final ImageView userIcon; + public final TextView nicknameView; + public final TextView userIdView; + public final Button cancelButton; + public FriendSentRequestItem mItem; + + public ViewHolder(View view) { + super(view); + userIcon = view.findViewById(R.id.user_icon); + nicknameView = view.findViewById(R.id.user_nickname); + userIdView = view.findViewById(R.id.user_id); + cancelButton = view.findViewById(R.id.cancel_button); + } + } +} diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendSentRequestContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendSentRequestContent.java new file mode 100644 index 0000000..95f0251 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendSentRequestContent.java @@ -0,0 +1,37 @@ +package com.example.tampopo_client.views.placeholder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FriendSentRequestContent { + + public static final List ITEMS = new ArrayList<>(); + public static final Map ITEM_MAP = new HashMap<>(); + + public static void addItem(FriendSentRequestItem item) { + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + public static void clear() { + ITEMS.clear(); + ITEM_MAP.clear(); + } + + public static class FriendSentRequestItem { + public final String id; + public final String name; + + public FriendSentRequestItem(String id, String name) { + this.id = id; + this.name = name; + } + + @Override + public String toString() { + return name; + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_friend_sent_request_list.xml b/app/src/main/res/layout/fragment_friend_sent_request_list.xml new file mode 100644 index 0000000..6cf04a0 --- /dev/null +++ b/app/src/main/res/layout/fragment_friend_sent_request_list.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_item_friend_sent_request.xml b/app/src/main/res/layout/list_item_friend_sent_request.xml new file mode 100644 index 0000000..86d56fb --- /dev/null +++ b/app/src/main/res/layout/list_item_friend_sent_request.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + +