mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-12-27 22:18:58 +00:00
Avoid useless posts reloading on LatestPostsFragment pauses
This commit is contained in:
parent
686379b015
commit
6dda9c3753
@ -1,21 +1,22 @@
|
||||
package org.communiquons.android.comunic.client.ui.adapters;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.helpers.ImageLoadHelper;
|
||||
import org.communiquons.android.comunic.client.data.models.Friend;
|
||||
import org.communiquons.android.comunic.client.data.models.FriendUser;
|
||||
import org.communiquons.android.comunic.client.data.utils.Utilities;
|
||||
import org.communiquons.android.comunic.client.ui.fragments.FriendsListFragment;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.OnFriendListActionListener;
|
||||
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
||||
import org.communiquons.android.comunic.client.ui.views.WebUserAccountImage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -26,100 +27,188 @@ import java.util.ArrayList;
|
||||
* Created by pierre on 11/15/17.
|
||||
*/
|
||||
|
||||
public class FriendsAdapter extends ArrayAdapter<FriendUser> {
|
||||
public class FriendsAdapter extends BaseRecyclerViewAdapter {
|
||||
|
||||
/**
|
||||
* The fragment creating the adapter
|
||||
* View type
|
||||
*/
|
||||
private FriendsListFragment mFLfragment;
|
||||
private static final int VIEW_TYPE_ACCEPTED_FRIEND = 1;
|
||||
private static final int VIEW_TYPE_PENDING_FRIEND = 2;
|
||||
|
||||
/**
|
||||
* The list of friends, with their information
|
||||
*/
|
||||
private ArrayList<FriendUser> mList;
|
||||
|
||||
/**
|
||||
* Actions listener
|
||||
*/
|
||||
private OnFriendListActionListener mListener;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param friendsListFragment Friends list fragment object
|
||||
* @param context The context of execution of the application
|
||||
* @param friendsList The list of friends to display (with user information)
|
||||
* @param listener Actions on friendlist listener
|
||||
*/
|
||||
public FriendsAdapter(FriendsListFragment friendsListFragment,
|
||||
Activity context, ArrayList<FriendUser> friendsList){
|
||||
super(context, 0, friendsList);
|
||||
mFLfragment = friendsListFragment;
|
||||
public FriendsAdapter(Context context, ArrayList<FriendUser> friendsList,
|
||||
OnFriendListActionListener listener){
|
||||
super(context);
|
||||
|
||||
mList = friendsList;
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return mList.get(position).getFriend().isAccepted() ? VIEW_TYPE_ACCEPTED_FRIEND :
|
||||
VIEW_TYPE_PENDING_FRIEND;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||
View listItemView = convertView;
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {
|
||||
View view;
|
||||
|
||||
//Check if the view has to be created
|
||||
if(listItemView == null){
|
||||
listItemView = LayoutInflater.from(getContext())
|
||||
.inflate(R.layout.fragment_friends_list_friend_item, parent, false);
|
||||
if(type == VIEW_TYPE_ACCEPTED_FRIEND){
|
||||
view = LayoutInflater.from(getContext()).inflate(R.layout.friend_accepted_item,
|
||||
viewGroup, false);
|
||||
return new AcceptedFriendHolder(view);
|
||||
}
|
||||
|
||||
//Get friend information
|
||||
FriendUser friendUser = getItem(position);
|
||||
|
||||
//Update user account image
|
||||
ImageView user_image = listItemView.findViewById(R.id.fragment_friendslist_item_accountimage);
|
||||
user_image.setImageDrawable(getContext().getDrawable(R.drawable.default_account_image));
|
||||
ImageLoadHelper.load(getContext(), friendUser.getUserInfo().getAcountImageURL(), user_image);
|
||||
|
||||
//Update user name
|
||||
TextView user_name = listItemView.findViewById(R.id.fragment_friendslist_item_fullname);
|
||||
user_name.setText(Utilities.prepareStringTextView(friendUser.getUserInfo().getFullName()));
|
||||
|
||||
//Update user status
|
||||
boolean signed_in = friendUser.getFriend().signed_in();
|
||||
TextView statusView = listItemView.findViewById(R.id.fragment_friendslist_item_status);
|
||||
|
||||
//Set the text
|
||||
statusView.setText(signed_in ?
|
||||
getContext().getText(R.string.user_status_online) :
|
||||
getContext().getText(R.string.user_status_offline)
|
||||
);
|
||||
|
||||
//Set the color
|
||||
int status_color;
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
|
||||
status_color = getContext().getResources().getColor(signed_in ? R.color.holo_green_dark : R.color.darker_gray, null);
|
||||
}
|
||||
else {
|
||||
status_color = getContext().getResources().getColor(signed_in ? R.color.holo_green_dark : R.color.darker_gray);
|
||||
}
|
||||
statusView.setTextColor(status_color);
|
||||
|
||||
//Action button
|
||||
Button action = listItemView.findViewById(R.id.fragment_friendslist_item_action);
|
||||
|
||||
//Define the action of the accept request button
|
||||
if(!friendUser.getFriend().isAccepted()){
|
||||
|
||||
//Update the button
|
||||
action.setVisibility(View.VISIBLE);
|
||||
action.setText(R.string.action_friends_respond_request);
|
||||
|
||||
//Make the button lives
|
||||
action.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
//Hide the view
|
||||
v.setVisibility(View.GONE);
|
||||
|
||||
mFLfragment.showPopupRequestResponse(position);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
//Remove button actions and hide it
|
||||
action.setVisibility(View.GONE);
|
||||
action.setOnClickListener(null);
|
||||
if(type == VIEW_TYPE_PENDING_FRIEND){
|
||||
view = LayoutInflater.from(getContext()).inflate(R.layout.friend_pending_item,
|
||||
viewGroup, false);
|
||||
return new PendingFriendHolder(view);
|
||||
}
|
||||
|
||||
return listItemView;
|
||||
throw new RuntimeException("Undefined view type: " + type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int pos) {
|
||||
((BaseFriendHolder)viewHolder).bind(pos);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base Friend ViewHolder
|
||||
*/
|
||||
private class BaseFriendHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
private WebUserAccountImage mUserAccountImage;
|
||||
private TextView mUserName;
|
||||
private TextView mUserStatus;
|
||||
|
||||
BaseFriendHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
mUserAccountImage = itemView.findViewById(R.id.account_image);
|
||||
mUserName = itemView.findViewById(R.id.account_name);
|
||||
mUserStatus = itemView.findViewById(R.id.user_status);
|
||||
}
|
||||
|
||||
Friend getFriend(int pos){
|
||||
return mList.get(pos).getFriend();
|
||||
}
|
||||
|
||||
UserInfo getUserInfo(int pos){
|
||||
return mList.get(pos).getUserInfo();
|
||||
}
|
||||
|
||||
int getCurrentUserID(){
|
||||
return getUserInfo(getLayoutPosition()).getId();
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
void bind(int pos){
|
||||
|
||||
//Update user information
|
||||
mUserAccountImage.setUser(getUserInfo(pos));
|
||||
mUserName.setText(getUserInfo(pos).getDisplayFullName());
|
||||
|
||||
//Update user status
|
||||
boolean signed_in = getFriend(pos).signed_in();
|
||||
mUserStatus.setText(UiUtils.getString(getContext(), signed_in ?
|
||||
R.string.user_status_online : R.string.user_status_offline));
|
||||
mUserStatus.setTextColor(UiUtils.getColor(getContext(),
|
||||
signed_in ? R.color.holo_green_dark : R.color.darker_gray));
|
||||
|
||||
|
||||
//Open user page on click
|
||||
itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mListener.onOpenUserPage(getCurrentUserID());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Accepted friend holder
|
||||
*/
|
||||
private class AcceptedFriendHolder extends BaseFriendHolder implements View.OnLongClickListener {
|
||||
|
||||
AcceptedFriendHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
itemView.setOnLongClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
|
||||
if(!v.equals(itemView))
|
||||
return false;
|
||||
|
||||
mListener.onOpenContextMenuForFriend(itemView, getLayoutPosition());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Pending friend view holder
|
||||
*/
|
||||
private class PendingFriendHolder extends BaseFriendHolder implements View.OnClickListener {
|
||||
|
||||
private Button mAcceptButton;
|
||||
private Button mRejectButton;
|
||||
|
||||
PendingFriendHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
mAcceptButton = itemView.findViewById(R.id.accept_button);
|
||||
mRejectButton = itemView.findViewById(R.id.reject_button);
|
||||
|
||||
mAcceptButton.setOnClickListener(this);
|
||||
mRejectButton.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
void bind(int pos) {
|
||||
super.bind(pos);
|
||||
|
||||
mAcceptButton.setVisibility(View.VISIBLE);
|
||||
mRejectButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
mAcceptButton.setVisibility(View.INVISIBLE);
|
||||
mRejectButton.setVisibility(View.INVISIBLE);
|
||||
|
||||
boolean accept = v.equals(mAcceptButton);
|
||||
mListener.onRespondFrienshipRequest(getLayoutPosition(), accept);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,37 +1,39 @@
|
||||
package org.communiquons.android.comunic.client.ui.fragments;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.widget.DividerItemDecoration;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.util.ArrayMap;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.helpers.DatabaseHelper;
|
||||
import org.communiquons.android.comunic.client.data.helpers.FriendsListHelper;
|
||||
import org.communiquons.android.comunic.client.data.helpers.GetUsersHelper;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.models.Friend;
|
||||
import org.communiquons.android.comunic.client.data.models.FriendUser;
|
||||
import org.communiquons.android.comunic.client.ui.adapters.FriendsAdapter;
|
||||
import org.communiquons.android.comunic.client.data.helpers.FriendsListHelper;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.utils.FriendsUtils;
|
||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
||||
import org.communiquons.android.comunic.client.ui.adapters.FriendsAdapter;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.OnFriendListActionListener;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.onOpenUsersPageListener;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.openConversationListener;
|
||||
import org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -42,8 +44,8 @@ import java.util.ArrayList;
|
||||
* Created by pierre on 11/11/17.
|
||||
*/
|
||||
|
||||
public class FriendsListFragment extends Fragment
|
||||
implements AdapterView.OnItemClickListener{
|
||||
public class FriendsListFragment extends Fragment implements OnFriendListActionListener,
|
||||
PopupMenu.OnMenuItemClickListener {
|
||||
|
||||
/**
|
||||
* Debug tag
|
||||
@ -103,7 +105,12 @@ public class FriendsListFragment extends Fragment
|
||||
/**
|
||||
* Friends list view
|
||||
*/
|
||||
private ListView mFriendsListView;
|
||||
private ScrollRecyclerView mFriendsList;
|
||||
|
||||
/**
|
||||
* Current friend on context menu
|
||||
*/
|
||||
private int mPosInContextMenu;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@ -125,7 +132,7 @@ public class FriendsListFragment extends Fragment
|
||||
try {
|
||||
convOpener = (openConversationListener) getActivity();
|
||||
usersPageOpener = (onOpenUsersPageListener) getActivity();
|
||||
} catch (ClassCastException e){
|
||||
} catch (ClassCastException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
throw new RuntimeException(getActivity().getClass().getName() + " must implement" +
|
||||
@ -136,13 +143,13 @@ public class FriendsListFragment extends Fragment
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_friendslist, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
//Get loading progress bar
|
||||
@ -152,8 +159,8 @@ public class FriendsListFragment extends Fragment
|
||||
mNoFriendNotice = view.findViewById(R.id.no_friend_notice);
|
||||
mNoFriendNotice.setVisibility(View.GONE);
|
||||
|
||||
//Get friends listview
|
||||
mFriendsListView = view.findViewById(R.id.fragment_friendslist_listview);
|
||||
//Get friends RecyclerView
|
||||
mFriendsList = view.findViewById(R.id.friendslist);
|
||||
|
||||
//Retain the fragment
|
||||
//setRetainInstance(true);
|
||||
@ -175,12 +182,12 @@ public class FriendsListFragment extends Fragment
|
||||
/**
|
||||
* Refresh the friend list
|
||||
*/
|
||||
void refresh_friend_list(){
|
||||
void refresh_friend_list() {
|
||||
|
||||
//Display loading bar
|
||||
display_progress_bar(true);
|
||||
|
||||
new AsyncTask<Void, Void, ArrayList<FriendUser>>(){
|
||||
new AsyncTask<Void, Void, ArrayList<FriendUser>>() {
|
||||
|
||||
@Override
|
||||
protected ArrayList<FriendUser> doInBackground(Void... params) {
|
||||
@ -189,15 +196,15 @@ public class FriendsListFragment extends Fragment
|
||||
ArrayList<Friend> friendsList = flistHelper.get();
|
||||
|
||||
//Check for errors
|
||||
if(friendsList == null)
|
||||
if (friendsList == null)
|
||||
return null;
|
||||
|
||||
//Get user infos
|
||||
//Get user info
|
||||
ArrayMap<Integer, UserInfo> userInfos = usersHelper.getMultiple(
|
||||
FriendsUtils.getFriendsIDs(friendsList));
|
||||
|
||||
//Check for errors
|
||||
if(userInfos == null)
|
||||
if (userInfos == null)
|
||||
return null;
|
||||
|
||||
//Merge friend and user and return result
|
||||
@ -209,7 +216,7 @@ public class FriendsListFragment extends Fragment
|
||||
protected void onPostExecute(ArrayList<FriendUser> friendUsers) {
|
||||
|
||||
//Check the activity still exists
|
||||
if(getActivity() == null)
|
||||
if (getActivity() == null)
|
||||
return;
|
||||
|
||||
apply_friends_list(friendUsers);
|
||||
@ -222,13 +229,13 @@ public class FriendsListFragment extends Fragment
|
||||
*
|
||||
* @param friendsList The friends list to apply
|
||||
*/
|
||||
private void apply_friends_list(@Nullable ArrayList<FriendUser> friendsList){
|
||||
private void apply_friends_list(@Nullable ArrayList<FriendUser> friendsList) {
|
||||
|
||||
//Remove progress bar
|
||||
display_progress_bar(false);
|
||||
|
||||
//Check for errors
|
||||
if(friendsList == null){
|
||||
if (friendsList == null) {
|
||||
Toast.makeText(mContext, R.string.fragment_friendslist_err_refresh,
|
||||
Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
@ -241,47 +248,15 @@ public class FriendsListFragment extends Fragment
|
||||
updateNoFriendNoticeVisibility();
|
||||
|
||||
//Set the adapter
|
||||
fAdapter = new FriendsAdapter(this, getActivity(), friendsList);
|
||||
mFriendsListView.setAdapter(fAdapter);
|
||||
fAdapter = new FriendsAdapter(getActivity(), friendsList, this);
|
||||
mFriendsList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
mFriendsList.addItemDecoration(new DividerItemDecoration(mFriendsList.getContext(),
|
||||
DividerItemDecoration.VERTICAL));
|
||||
mFriendsList.setAdapter(fAdapter);
|
||||
|
||||
//Register the view for the context menu
|
||||
registerForContextMenu(mFriendsListView);
|
||||
registerForContextMenu(mFriendsList);
|
||||
|
||||
mFriendsListView.setOnItemClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||
super.onCreateContextMenu(menu, v, menuInfo);
|
||||
|
||||
MenuInflater inflater = getActivity().getMenuInflater();
|
||||
inflater.inflate(R.menu.menu_fragment_friendslist_item, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
|
||||
AdapterView.AdapterContextMenuInfo info =
|
||||
(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
|
||||
|
||||
//Get the friend position in the list
|
||||
int friendPos = info.position;
|
||||
|
||||
switch (item.getItemId()){
|
||||
|
||||
//To open a private conversation with the friend
|
||||
case R.id.menu_fragment_friendslist_private_conversation:
|
||||
convOpener.openPrivateConversation(friendsList.get(friendPos).getFriend().getId());
|
||||
return true;
|
||||
|
||||
//To delete the friend
|
||||
case R.id.menu_fragment_friendslist_delete_friend:
|
||||
delete_friend(friendPos);
|
||||
return true;
|
||||
}
|
||||
|
||||
//If it is not for us, it is for someone else
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -289,7 +264,7 @@ public class FriendsListFragment extends Fragment
|
||||
*
|
||||
* @param pos the position of the friend to delete
|
||||
*/
|
||||
private void delete_friend(final int pos){
|
||||
private void delete_friend(final int pos) {
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setTitle(R.string.popup_deletefriend_title)
|
||||
@ -307,7 +282,7 @@ public class FriendsListFragment extends Fragment
|
||||
fAdapter.notifyDataSetChanged();
|
||||
|
||||
//Remove the friend list on a parallel thread
|
||||
new AsyncTask<Integer, Void, Void>(){
|
||||
new AsyncTask<Integer, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Integer[] params) {
|
||||
|
||||
@ -325,48 +300,19 @@ public class FriendsListFragment extends Fragment
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a popup to offer the user to respond to a friendship request
|
||||
*
|
||||
* @param pos The position of the friend in the list
|
||||
*/
|
||||
public void showPopupRequestResponse(final int pos){
|
||||
|
||||
new AlertDialog.Builder(getActivity())
|
||||
|
||||
.setTitle(R.string.popup_respond_friendship_request_title)
|
||||
.setMessage(R.string.popup_respond_friendship_request_message)
|
||||
|
||||
.setNegativeButton(R.string.action_friends_deny_request, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
respondRequest(pos, false);
|
||||
}
|
||||
})
|
||||
|
||||
.setPositiveButton(R.string.action_friends_accept_request, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
respondRequest(pos, true);
|
||||
}
|
||||
})
|
||||
|
||||
.show();
|
||||
|
||||
@Override
|
||||
public void onOpenUserPage(int userID) {
|
||||
usersPageOpener.openUserPage(userID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Respond to a friendship request
|
||||
*
|
||||
* @param pos The position of the friend respond the request
|
||||
* @param accept Specify wether the user accepted the request or not
|
||||
*/
|
||||
private void respondRequest(int pos, final boolean accept){
|
||||
@Override
|
||||
public void onRespondFrienshipRequest(int pos, final boolean response) {
|
||||
|
||||
//Get the Friend object
|
||||
Friend targetFriend = friendsList.get(pos).getFriend();
|
||||
|
||||
if(accept)
|
||||
if (response)
|
||||
//Mark the friend as accepted
|
||||
targetFriend.setAccepted(true);
|
||||
else
|
||||
@ -377,13 +323,47 @@ public class FriendsListFragment extends Fragment
|
||||
fAdapter.notifyDataSetChanged();
|
||||
|
||||
//Accept the request on a separate thread
|
||||
new AsyncTask<Friend, Void, Void>(){
|
||||
new AsyncTask<Friend, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Friend... params) {
|
||||
flistHelper.respondRequest(params[0], accept);
|
||||
flistHelper.respondRequest(params[0], response);
|
||||
return null;
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, targetFriend);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpenContextMenuForFriend(View view, int pos) {
|
||||
|
||||
//Save selected position
|
||||
mPosInContextMenu = pos;
|
||||
|
||||
//Initialize and show menu
|
||||
PopupMenu menu = new PopupMenu(getActivity(), view);
|
||||
menu.inflate(R.menu.menu_fragment_friendslist_item);
|
||||
menu.setOnMenuItemClickListener(this);
|
||||
menu.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
|
||||
//To open a private conversation with the friend
|
||||
case R.id.menu_fragment_friendslist_private_conversation:
|
||||
convOpener.openPrivateConversation(friendsList.get(mPosInContextMenu).getFriend().getId());
|
||||
return true;
|
||||
|
||||
//To delete the friend
|
||||
case R.id.menu_fragment_friendslist_delete_friend:
|
||||
delete_friend(mPosInContextMenu);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -391,25 +371,15 @@ public class FriendsListFragment extends Fragment
|
||||
*
|
||||
* @param display Specify whether the loading bar has to be shown or not
|
||||
*/
|
||||
private void display_progress_bar(boolean display){
|
||||
private void display_progress_bar(boolean display) {
|
||||
mProgressBar.setVisibility(display ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the visibility of the no friend notice
|
||||
*/
|
||||
private void updateNoFriendNoticeVisibility(){
|
||||
if(friendsList != null)
|
||||
private void updateNoFriendNoticeVisibility() {
|
||||
if (friendsList != null)
|
||||
mNoFriendNotice.setVisibility(friendsList.size() == 0 ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
|
||||
//Get clicked user ID
|
||||
int userID = friendsList.get(position).get_user_id();
|
||||
|
||||
//Open user page
|
||||
usersPageOpener.openUserPage(userID);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
package org.communiquons.android.comunic.client.ui.listeners;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* Friends action listener
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public interface OnFriendListActionListener {
|
||||
|
||||
/**
|
||||
* Open a user page
|
||||
*
|
||||
* @param userID The ID of the user page to open
|
||||
*/
|
||||
void onOpenUserPage(int userID);
|
||||
|
||||
/**
|
||||
* Respond to a friendship request
|
||||
*
|
||||
* @param pos Position of the friend on the list
|
||||
* @param response TRUE to accept / FALSE else
|
||||
*/
|
||||
void onRespondFrienshipRequest(int pos, boolean response);
|
||||
|
||||
/**
|
||||
* Open the context menu for a friend
|
||||
*
|
||||
* @param pos The position of the friend in the list
|
||||
*/
|
||||
void onOpenContextMenuForFriend(View view, int pos);
|
||||
}
|
@ -19,8 +19,8 @@
|
||||
android:textAlignment="center"
|
||||
android:layout_marginTop="50dp"/>
|
||||
|
||||
<ListView
|
||||
android:id="@+id/fragment_friendslist_listview"
|
||||
<org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView
|
||||
android:id="@+id/friendslist"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
|
@ -1,14 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingStart="8dp">
|
||||
android:paddingStart="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:background="?selectableItemBackground">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fragment_friendslist_item_accountimage"
|
||||
<org.communiquons.android.comunic.client.ui.views.WebUserAccountImage
|
||||
android:id="@+id/account_image"
|
||||
android:layout_width="@dimen/account_image_default_width"
|
||||
android:layout_height="@dimen/account_image_default_height"
|
||||
android:layout_gravity="center"
|
||||
@ -19,20 +24,26 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:paddingEnd="4dp"
|
||||
android:paddingStart="8dp">
|
||||
android:paddingStart="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/account_image"
|
||||
app:layout_constraintStart_toEndOf="@+id/account_image"
|
||||
app:layout_constraintTop_toTopOf="@+id/account_image">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fragment_friendslist_item_fullname"
|
||||
android:id="@+id/account_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
tools:text="Full user name" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fragment_friendslist_item_status"
|
||||
android:id="@+id/user_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/user_status_offline"
|
||||
@ -41,12 +52,5 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Action button on user -->
|
||||
<Button
|
||||
android:id="@+id/fragment_friendslist_item_action"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
tools:text="Action" />
|
||||
|
||||
</LinearLayout>
|
||||
</android.support.constraint.ConstraintLayout>
|
92
app/src/main/res/layout/friend_pending_item.xml
Normal file
92
app/src/main/res/layout/friend_pending_item.xml
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:background="?selectableItemBackground">
|
||||
|
||||
<org.communiquons.android.comunic.client.ui.views.WebUserAccountImage
|
||||
android:id="@+id/account_image"
|
||||
android:layout_width="@dimen/account_image_default_width"
|
||||
android:layout_height="@dimen/account_image_default_height"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/user_image_description"
|
||||
android:src="@drawable/default_account_image" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:paddingEnd="4dp"
|
||||
android:paddingStart="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/account_image"
|
||||
app:layout_constraintStart_toEndOf="@+id/account_image"
|
||||
app:layout_constraintTop_toTopOf="@+id/account_image">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/account_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
tools:text="Full user name" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/user_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/user_status_offline"
|
||||
android:textColor="@android:color/holo_green_dark"
|
||||
tools:text="Online" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/reject_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:backgroundTint="@color/holo_red_dark"
|
||||
android:text="@string/action_reject_friend_request"
|
||||
android:textColor="@android:color/white"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/accept_button"
|
||||
app:layout_constraintEnd_toStartOf="@+id/accept_button"
|
||||
app:layout_constraintTop_toTopOf="@+id/accept_button" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/accept_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:backgroundTint="@color/holo_green_dark"
|
||||
android:text="@string/action_friends_accept_request"
|
||||
android:textColor="@android:color/white"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/account_image" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView6"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/notice_request"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/reject_button"
|
||||
app:layout_constraintEnd_toStartOf="@+id/reject_button"
|
||||
app:layout_constraintTop_toTopOf="@+id/reject_button" />
|
||||
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -238,4 +238,6 @@
|
||||
<string name="err_create_account_too_many_requests">Trop de création de compte. Veuillez réessayer ultérieurement.</string>
|
||||
<string name="action_more">Plus</string>
|
||||
<string name="action_about">A propos</string>
|
||||
<string name="action_reject_friend_request">Rejeter</string>
|
||||
<string name="notice_request">Demande</string>
|
||||
</resources>
|
@ -8,6 +8,7 @@
|
||||
<color name="darker_gray">#aaa</color>
|
||||
<color name="darker_darker_gray">#5b5b5b</color>
|
||||
<color name="dark_blue">#303f9f</color>
|
||||
<color name="holo_red_dark">#ffcc0000</color>
|
||||
|
||||
<color name="default_drawable_color">#000000</color>
|
||||
|
||||
|
@ -240,4 +240,6 @@
|
||||
<string name="activity_about_title">About</string>
|
||||
<string name="dialog_open_source_licenses_title">Open Source Licenses</string>
|
||||
<string name="btn_open_source_licences">Open Source Licences</string>
|
||||
<string name="action_reject_friend_request">Reject</string>
|
||||
<string name="notice_request">Requested</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user