mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-03 19:14:04 +00:00 
			
		
		
		
	Ready to implement friend deletion
This commit is contained in:
		@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					package org.communiquons.android.comunic.client.data.friendsList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.communiquons.android.comunic.client.data.DatabaseHelper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Friends list functions
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Some of the functions specified here are utilities (such as delete a friend)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 | 
					 * Created by pierre on 11/19/17.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class FriendsList {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private FriendsListDbHelper fdbHelper;
 | 
				
			||||||
 | 
					    private Context mContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Public application constructor
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param dbHelper Database helper
 | 
				
			||||||
 | 
					     * @param mContext the context of the application
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public FriendsList(DatabaseHelper dbHelper, Context mContext){
 | 
				
			||||||
 | 
					        this.fdbHelper = new FriendsListDbHelper(dbHelper);
 | 
				
			||||||
 | 
					        this.mContext = mContext;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Remove a friend from the list
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param friend The friend to delete
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void remove(Friend friend){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Remove the friend online
 | 
				
			||||||
 | 
					        //TODO : Remove the friend form online
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Remove the friend from the local database
 | 
				
			||||||
 | 
					        //TODO : Remove the friend from the local database
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,13 +1,19 @@
 | 
				
			|||||||
package org.communiquons.android.comunic.client.fragments;
 | 
					package org.communiquons.android.comunic.client.fragments;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.app.AlertDialog;
 | 
				
			||||||
import android.app.Fragment;
 | 
					import android.app.Fragment;
 | 
				
			||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					import android.content.DialogInterface;
 | 
				
			||||||
import android.os.Bundle;
 | 
					import android.os.Bundle;
 | 
				
			||||||
import android.support.annotation.Nullable;
 | 
					import android.support.annotation.Nullable;
 | 
				
			||||||
import android.util.ArrayMap;
 | 
					import android.util.ArrayMap;
 | 
				
			||||||
 | 
					import android.view.ContextMenu;
 | 
				
			||||||
import android.view.LayoutInflater;
 | 
					import android.view.LayoutInflater;
 | 
				
			||||||
 | 
					import android.view.MenuInflater;
 | 
				
			||||||
 | 
					import android.view.MenuItem;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
import android.view.ViewGroup;
 | 
					import android.view.ViewGroup;
 | 
				
			||||||
 | 
					import android.widget.AdapterView;
 | 
				
			||||||
import android.widget.ListView;
 | 
					import android.widget.ListView;
 | 
				
			||||||
import android.widget.Toast;
 | 
					import android.widget.Toast;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,6 +24,7 @@ import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
 | 
				
			|||||||
import org.communiquons.android.comunic.client.data.friendsList.Friend;
 | 
					import org.communiquons.android.comunic.client.data.friendsList.Friend;
 | 
				
			||||||
import org.communiquons.android.comunic.client.data.friendsList.FriendUser;
 | 
					import org.communiquons.android.comunic.client.data.friendsList.FriendUser;
 | 
				
			||||||
import org.communiquons.android.comunic.client.data.friendsList.FriendsAdapter;
 | 
					import org.communiquons.android.comunic.client.data.friendsList.FriendsAdapter;
 | 
				
			||||||
 | 
					import org.communiquons.android.comunic.client.data.friendsList.FriendsList;
 | 
				
			||||||
import org.communiquons.android.comunic.client.data.friendsList.FriendsUtils;
 | 
					import org.communiquons.android.comunic.client.data.friendsList.FriendsUtils;
 | 
				
			||||||
import org.communiquons.android.comunic.client.data.friendsList.GetFriendsListTask;
 | 
					import org.communiquons.android.comunic.client.data.friendsList.GetFriendsListTask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,6 +54,16 @@ public class FriendsListFragment extends Fragment {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    DatabaseHelper mDbHelper;
 | 
					    DatabaseHelper mDbHelper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The current list of friends
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ArrayList<FriendUser> friendsList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Friend list operations object
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    FriendsList flist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Nullable
 | 
					    @Nullable
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
 | 
					    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
 | 
				
			||||||
@@ -58,6 +75,9 @@ public class FriendsListFragment extends Fragment {
 | 
				
			|||||||
        //Create database helper
 | 
					        //Create database helper
 | 
				
			||||||
        mDbHelper = new DatabaseHelper(mContext);
 | 
					        mDbHelper = new DatabaseHelper(mContext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Create friendlist operation object
 | 
				
			||||||
 | 
					        flist = new FriendsList(mDbHelper, mContext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Retain the fragment
 | 
					        //Retain the fragment
 | 
				
			||||||
        //setRetainInstance(true);
 | 
					        //setRetainInstance(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,7 +106,7 @@ public class FriendsListFragment extends Fragment {
 | 
				
			|||||||
        new GetFriendsListTask(mDbHelper){
 | 
					        new GetFriendsListTask(mDbHelper){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            protected void onPostExecute(ArrayList<Friend> friendsList) {
 | 
					            protected void onPostExecute(final ArrayList<Friend> friendsList) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //Remote progress bar
 | 
					                //Remote progress bar
 | 
				
			||||||
                display_progress_bar(false);
 | 
					                display_progress_bar(false);
 | 
				
			||||||
@@ -97,9 +117,29 @@ public class FriendsListFragment extends Fragment {
 | 
				
			|||||||
                            Toast.LENGTH_LONG).show();
 | 
					                            Toast.LENGTH_LONG).show();
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else {
 | 
				
			||||||
                    //Update the friends list
 | 
					                    new GetUsersInfos(mContext, mDbHelper).
 | 
				
			||||||
                    update_friends_list(friendsList);
 | 
					                        getMultiple(FriendsUtils.getFriendsIDs(friendsList), new GetUsersInfos.getMultipleUserInfosCallback() {
 | 
				
			||||||
 | 
					                            @Override
 | 
				
			||||||
 | 
					                            public void callback(ArrayMap<Integer, UserInfo> info) {
 | 
				
			||||||
 | 
					                                //Check for errors
 | 
				
			||||||
 | 
					                                if (info == null) {
 | 
				
			||||||
 | 
					                                    Toast.makeText(mContext, R.string.fragment_friendslist_err_get_userinfos,
 | 
				
			||||||
 | 
					                                            Toast.LENGTH_SHORT).show();
 | 
				
			||||||
 | 
					                                    return;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                //Merge the user informations list and friends List into FriendInfo list
 | 
				
			||||||
 | 
					                                ArrayList<FriendUser> friendsUserList = FriendsUtils.merge_friends_user_infos_list(
 | 
				
			||||||
 | 
					                                        friendsList,
 | 
				
			||||||
 | 
					                                        info
 | 
				
			||||||
 | 
					                                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                //Refresh friends list
 | 
				
			||||||
 | 
					                                apply_friends_list(friendsUserList);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }.execute();
 | 
					        }.execute();
 | 
				
			||||||
@@ -110,32 +150,73 @@ public class FriendsListFragment extends Fragment {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param friendsList The friends list to apply
 | 
					     * @param friendsList The friends list to apply
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void update_friends_list(final ArrayList<Friend> friendsList){
 | 
					    private void apply_friends_list(final ArrayList<FriendUser> friendsList){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Get user informations
 | 
					        //Save the list of friends
 | 
				
			||||||
        new GetUsersInfos(mContext, mDbHelper).
 | 
					        this.friendsList = friendsList;
 | 
				
			||||||
                getMultiple(FriendsUtils.getFriendsIDs(friendsList), new GetUsersInfos.getMultipleUserInfosCallback() {
 | 
					 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void callback(ArrayMap<Integer, UserInfo> info) {
 | 
					 | 
				
			||||||
                        //Check for errors
 | 
					 | 
				
			||||||
                        if(info == null){
 | 
					 | 
				
			||||||
                            Toast.makeText(mContext, R.string.fragment_friendslist_err_get_userinfos,
 | 
					 | 
				
			||||||
                                    Toast.LENGTH_SHORT).show();
 | 
					 | 
				
			||||||
                            return;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        //Merge the user informations list and friends List into FriendInfo list
 | 
					        //Set the adapter
 | 
				
			||||||
                        ArrayList<FriendUser> friendsUserList = FriendsUtils.merge_friends_user_infos_list(
 | 
					        FriendsAdapter friendsAdapter = new FriendsAdapter(getActivity(), friendsList);
 | 
				
			||||||
                                friendsList,
 | 
					        ListView listView = rootView.findViewById(R.id.fragment_friendslist_listview);
 | 
				
			||||||
                                info
 | 
					        listView.setAdapter(friendsAdapter);
 | 
				
			||||||
                        );
 | 
					
 | 
				
			||||||
 | 
					        //Register the view for the context menu
 | 
				
			||||||
 | 
					        registerForContextMenu(listView);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @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()){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Ask user to confirm friend deletion, the friend is specified by its position in the list
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param pos the position of the friend to delete
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void delete_friend(final int pos){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 | 
				
			||||||
 | 
					        builder.setTitle(R.string.popup_deletefriend_title)
 | 
				
			||||||
 | 
					                .setMessage(R.string.popup_deletefriend_message);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        builder.setPositiveButton(R.string.popup_deletefriend_button_confirm, new DialogInterface.OnClickListener() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onClick(DialogInterface dialog, int which) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //Delete the friend from the list
 | 
				
			||||||
 | 
					                flist.remove(friendsList.get(pos).getFriend());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //Refresh the current friend list
 | 
				
			||||||
 | 
					                refresh_friend_list();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        builder.setNegativeButton(R.string.popup_deletefriend_button_cancel, null);
 | 
				
			||||||
 | 
					        builder.show();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        //Set the adapter
 | 
					 | 
				
			||||||
                        FriendsAdapter friendsAdapter = new FriendsAdapter(getActivity(), friendsUserList);
 | 
					 | 
				
			||||||
                        ListView listView = rootView.findViewById(R.id.fragment_friendslist_listview);
 | 
					 | 
				
			||||||
                        listView.setAdapter(friendsAdapter);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								app/src/main/res/menu/menu_fragment_friendslist_item.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/menu/menu_fragment_friendslist_item.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<menu xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Delete the friend -->
 | 
				
			||||||
 | 
					    <item
 | 
				
			||||||
 | 
					        android:id="@+id/menu_fragment_friendslist_delete_friend"
 | 
				
			||||||
 | 
					        android:title="@string/action_friends_delete" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</menu>
 | 
				
			||||||
@@ -20,4 +20,9 @@
 | 
				
			|||||||
    <string name="fragment_friendslist_err_get_userinfos">Couldn\'t get information about your friends!</string>
 | 
					    <string name="fragment_friendslist_err_get_userinfos">Couldn\'t get information about your friends!</string>
 | 
				
			||||||
    <string name="user_status_online">Online</string>
 | 
					    <string name="user_status_online">Online</string>
 | 
				
			||||||
    <string name="user_status_offline">Offline</string>
 | 
					    <string name="user_status_offline">Offline</string>
 | 
				
			||||||
 | 
					    <string name="action_friends_delete">Delete friend</string>
 | 
				
			||||||
 | 
					    <string name="popup_deletefriend_title">Remove friend</string>
 | 
				
			||||||
 | 
					    <string name="popup_deletefriend_message">Are you sure do you want to remove this friend from your friend list ? You will have to make a new friendship request to get this friend back !</string>
 | 
				
			||||||
 | 
					    <string name="popup_deletefriend_button_confirm">Delete</string>
 | 
				
			||||||
 | 
					    <string name="popup_deletefriend_button_cancel">Cancel</string>
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user