mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-04 03:24:04 +00:00 
			
		
		
		
	Can update friend following status
This commit is contained in:
		@@ -22,6 +22,16 @@ import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
public class FriendsListDbHelper {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Required database columns
 | 
			
		||||
     */
 | 
			
		||||
    private static final String[] mColumns = {
 | 
			
		||||
            FriendsListSchema.COLUMN_NAME_FRIEND_ID,
 | 
			
		||||
            FriendsListSchema.COLUMN_NAME_FRIEND_ACCEPTED,
 | 
			
		||||
            FriendsListSchema.COLUMN_NAME_FRIEND_FOLLOWING,
 | 
			
		||||
            FriendsListSchema.COLUMN_NAME_FRIEND_LAST_ACTIVITY
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Database helper
 | 
			
		||||
     */
 | 
			
		||||
@@ -49,16 +59,10 @@ public class FriendsListDbHelper {
 | 
			
		||||
 | 
			
		||||
        //Prepare the request on the database
 | 
			
		||||
        String table_name = FriendsListSchema.TABLE_NAME;
 | 
			
		||||
        String[] columns = {
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_ID,
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_ACCEPTED,
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_FOLLOWING,
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_LAST_ACTIVITY
 | 
			
		||||
        };
 | 
			
		||||
        String order = FriendsListSchema._ID;
 | 
			
		||||
 | 
			
		||||
        //Perform the request
 | 
			
		||||
        Cursor c = db.query(table_name, columns, null, null, null, null, order);
 | 
			
		||||
        Cursor c = db.query(table_name, mColumns, null, null, null, null, order);
 | 
			
		||||
 | 
			
		||||
        //Check if the request echoed
 | 
			
		||||
        if(c == null)
 | 
			
		||||
@@ -70,23 +74,8 @@ public class FriendsListDbHelper {
 | 
			
		||||
        c.moveToFirst();
 | 
			
		||||
        for(int i = 0; i < c.getCount(); i++){
 | 
			
		||||
 | 
			
		||||
            //Get information about the friend
 | 
			
		||||
            Friend friend = new Friend();
 | 
			
		||||
 | 
			
		||||
            friend.setId(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                    FriendsListSchema.COLUMN_NAME_FRIEND_ID)));
 | 
			
		||||
 | 
			
		||||
            friend.setAccepted(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                    FriendsListSchema.COLUMN_NAME_FRIEND_ACCEPTED)) == 1);
 | 
			
		||||
 | 
			
		||||
            friend.setFollowing(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                    FriendsListSchema.COLUMN_NAME_FRIEND_FOLLOWING)) == 1);
 | 
			
		||||
 | 
			
		||||
            friend.setLast_activity(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                    FriendsListSchema.COLUMN_NAME_FRIEND_LAST_ACTIVITY)));
 | 
			
		||||
 | 
			
		||||
            //Add the friend to the list
 | 
			
		||||
            friendsList.add(friend);
 | 
			
		||||
            friendsList.add(parseDbEntryToFriend(c));
 | 
			
		||||
 | 
			
		||||
            //Move to the next friend
 | 
			
		||||
            if(!c.moveToNext())
 | 
			
		||||
@@ -99,6 +88,32 @@ public class FriendsListDbHelper {
 | 
			
		||||
        return friendsList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a single friend entry
 | 
			
		||||
     *
 | 
			
		||||
     * @param friendID The ID of the friend to get
 | 
			
		||||
     * @return Information about the friend / null in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable
 | 
			
		||||
    Friend getSingleFriend(int friendID){
 | 
			
		||||
 | 
			
		||||
        SQLiteDatabase db = dbHelper.getReadableDatabase();
 | 
			
		||||
 | 
			
		||||
        String[] selectionArgs = {friendID+""};
 | 
			
		||||
        Cursor c = db.query(FriendsListSchema.TABLE_NAME, mColumns,
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_ID + " = ?", selectionArgs,
 | 
			
		||||
                null, null, null);
 | 
			
		||||
 | 
			
		||||
        c.moveToFirst();
 | 
			
		||||
        if(c.getCount() < 1)
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        Friend friend = parseDbEntryToFriend(c);
 | 
			
		||||
        c.close();
 | 
			
		||||
 | 
			
		||||
        return friend;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update the entire list of friends
 | 
			
		||||
     *
 | 
			
		||||
@@ -234,4 +249,29 @@ public class FriendsListDbHelper {
 | 
			
		||||
 | 
			
		||||
        return values;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Parse a database entry into a cursor object
 | 
			
		||||
     *
 | 
			
		||||
     * @param c Database cursor
 | 
			
		||||
     * @return Generated Friend object
 | 
			
		||||
     */
 | 
			
		||||
    private Friend parseDbEntryToFriend(Cursor c){
 | 
			
		||||
 | 
			
		||||
        Friend friend = new Friend();
 | 
			
		||||
 | 
			
		||||
        friend.setId(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_ID)));
 | 
			
		||||
 | 
			
		||||
        friend.setAccepted(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_ACCEPTED)) == 1);
 | 
			
		||||
 | 
			
		||||
        friend.setFollowing(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_FOLLOWING)) == 1);
 | 
			
		||||
 | 
			
		||||
        friend.setLast_activity(c.getInt(c.getColumnIndexOrThrow(
 | 
			
		||||
                FriendsListSchema.COLUMN_NAME_FRIEND_LAST_ACTIVITY)));
 | 
			
		||||
 | 
			
		||||
        return friend;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ public class FriendsListHelper {
 | 
			
		||||
    //Debug tag
 | 
			
		||||
    private static final String TAG = "FriendsList";
 | 
			
		||||
 | 
			
		||||
    private FriendsListDbHelper fdbHelper;
 | 
			
		||||
    private FriendsListDbHelper mDbHelper;
 | 
			
		||||
    private Context mContext;
 | 
			
		||||
 | 
			
		||||
    //Friends list access lock
 | 
			
		||||
@@ -42,7 +42,7 @@ public class FriendsListHelper {
 | 
			
		||||
     * @param context The context of the application
 | 
			
		||||
     */
 | 
			
		||||
    public FriendsListHelper(Context context){
 | 
			
		||||
        this.fdbHelper = new FriendsListDbHelper(DatabaseHelper.getInstance(context));
 | 
			
		||||
        this.mDbHelper = new FriendsListDbHelper(DatabaseHelper.getInstance(context));
 | 
			
		||||
        this.mContext = context;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,7 @@ public class FriendsListHelper {
 | 
			
		||||
     * @param context the context of the application
 | 
			
		||||
     */
 | 
			
		||||
    public FriendsListHelper(DatabaseHelper dbHelper, Context context){
 | 
			
		||||
        this.fdbHelper = new FriendsListDbHelper(dbHelper);
 | 
			
		||||
        this.mDbHelper = new FriendsListDbHelper(dbHelper);
 | 
			
		||||
        this.mContext = context.getApplicationContext();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -70,7 +70,7 @@ public class FriendsListHelper {
 | 
			
		||||
        //Fetch the list
 | 
			
		||||
        ArrayList<Friend> list;
 | 
			
		||||
        try {
 | 
			
		||||
            list = fdbHelper.get_list();
 | 
			
		||||
            list = mDbHelper.get_list();
 | 
			
		||||
        } finally {
 | 
			
		||||
            FriendsListHelper.ListAccessLock.unlock();
 | 
			
		||||
        }
 | 
			
		||||
@@ -135,7 +135,7 @@ public class FriendsListHelper {
 | 
			
		||||
                //Set friend information
 | 
			
		||||
                friend.setId(friendship_infos.getInt("ID_friend"));
 | 
			
		||||
                friend.setAccepted(friendship_infos.getInt("accepted") == 1);
 | 
			
		||||
                friend.setFollowing(friendship_infos.getInt("ID_friend") == 1);
 | 
			
		||||
                friend.setFollowing(friendship_infos.getInt("following") == 1);
 | 
			
		||||
                friend.setLast_activity(friendship_infos.getInt("time_last_activity"));
 | 
			
		||||
 | 
			
		||||
                //Add the friend to the list
 | 
			
		||||
@@ -165,7 +165,7 @@ public class FriendsListHelper {
 | 
			
		||||
            new APIRequestHelper().exec(delparams);
 | 
			
		||||
 | 
			
		||||
            //Remove the friend from the local database
 | 
			
		||||
            fdbHelper.delete_friend(friend);
 | 
			
		||||
            mDbHelper.delete_friend(friend);
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e){
 | 
			
		||||
            Log.e(TAG, "Couldn't delete friend !");
 | 
			
		||||
@@ -233,10 +233,10 @@ public class FriendsListHelper {
 | 
			
		||||
            //Update the friend in the local database
 | 
			
		||||
            if(accept) {
 | 
			
		||||
                friend.setAccepted(true);
 | 
			
		||||
                fdbHelper.update_friend(friend);
 | 
			
		||||
                mDbHelper.update_friend(friend);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                fdbHelper.delete_friend(friend);
 | 
			
		||||
                mDbHelper.delete_friend(friend);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } catch(Exception e){
 | 
			
		||||
@@ -311,4 +311,36 @@ public class FriendsListHelper {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update follow status of a user
 | 
			
		||||
     *
 | 
			
		||||
     * @param friendID The ID of the user to update
 | 
			
		||||
     * @param following TRUE to follow / FALSE else
 | 
			
		||||
     * @return The result of the operation
 | 
			
		||||
     */
 | 
			
		||||
    public boolean setFollowing(int friendID, boolean following){
 | 
			
		||||
 | 
			
		||||
        //Get information about the friend
 | 
			
		||||
        Friend friend = mDbHelper.getSingleFriend(friendID);
 | 
			
		||||
        if(friend == null)
 | 
			
		||||
            return false;
 | 
			
		||||
        friend.setFollowing(following);
 | 
			
		||||
 | 
			
		||||
        //Update friend information locally
 | 
			
		||||
        mDbHelper.update_friend(friend);
 | 
			
		||||
 | 
			
		||||
        //Update the friend on the server too
 | 
			
		||||
        APIRequest request = new APIRequest(mContext, "friends/setFollowing");
 | 
			
		||||
        request.addInt("friendID", friendID);
 | 
			
		||||
        request.addBoolean("follow", following);
 | 
			
		||||
 | 
			
		||||
        //Perform request on the server
 | 
			
		||||
        try {
 | 
			
		||||
            return new APIRequestHelper().exec(request).getResponse_code() == 200;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import android.widget.TextView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.R;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.asynctasks.SafeAsyncTask;
 | 
			
		||||
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;
 | 
			
		||||
@@ -65,32 +66,32 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
    /**
 | 
			
		||||
     * Get user helper
 | 
			
		||||
     */
 | 
			
		||||
    private GetUsersHelper usersHelper;
 | 
			
		||||
    private GetUsersHelper mUsersHelper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The current list of friends
 | 
			
		||||
     */
 | 
			
		||||
    private ArrayList<FriendUser> friendsList;
 | 
			
		||||
    private ArrayList<FriendUser> mList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Friend list operations object
 | 
			
		||||
     */
 | 
			
		||||
    private FriendsListHelper flistHelper;
 | 
			
		||||
    private FriendsListHelper mFriendsHelper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Conversation opener
 | 
			
		||||
     */
 | 
			
		||||
    private openConversationListener convOpener;
 | 
			
		||||
    private openConversationListener mConvOpener;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Users page opener
 | 
			
		||||
     */
 | 
			
		||||
    private onOpenUsersPageListener usersPageOpener;
 | 
			
		||||
    private onOpenUsersPageListener mUsersPageOpener;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Friend adapter
 | 
			
		||||
     */
 | 
			
		||||
    private FriendsAdapter fAdapter;
 | 
			
		||||
    private FriendsAdapter mAdapter;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Loading progress bar
 | 
			
		||||
@@ -123,15 +124,15 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
        mDbHelper = DatabaseHelper.getInstance(mContext);
 | 
			
		||||
 | 
			
		||||
        //Create friend list helper object
 | 
			
		||||
        flistHelper = new FriendsListHelper(mDbHelper, mContext);
 | 
			
		||||
        mFriendsHelper = new FriendsListHelper(mDbHelper, mContext);
 | 
			
		||||
 | 
			
		||||
        //Create get user helper
 | 
			
		||||
        usersHelper = new GetUsersHelper(mContext, mDbHelper);
 | 
			
		||||
        mUsersHelper = new GetUsersHelper(mContext, mDbHelper);
 | 
			
		||||
 | 
			
		||||
        //Cast activity to convOpener
 | 
			
		||||
        //Cast activity to mConvOpener
 | 
			
		||||
        try {
 | 
			
		||||
            convOpener = (openConversationListener) getActivity();
 | 
			
		||||
            usersPageOpener = (onOpenUsersPageListener) getActivity();
 | 
			
		||||
            mConvOpener = (openConversationListener) getActivity();
 | 
			
		||||
            mUsersPageOpener = (onOpenUsersPageListener) getActivity();
 | 
			
		||||
        } catch (ClassCastException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
 | 
			
		||||
@@ -193,22 +194,22 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
            protected ArrayList<FriendUser> doInBackground(Void... params) {
 | 
			
		||||
 | 
			
		||||
                //Fetch the list of friends
 | 
			
		||||
                ArrayList<Friend> friendsList = flistHelper.get();
 | 
			
		||||
                ArrayList<Friend> friendsList = mFriendsHelper.get();
 | 
			
		||||
 | 
			
		||||
                //Check for errors
 | 
			
		||||
                if (friendsList == null)
 | 
			
		||||
                    return null;
 | 
			
		||||
 | 
			
		||||
                //Get user info
 | 
			
		||||
                ArrayMap<Integer, UserInfo> userInfos = usersHelper.getMultiple(
 | 
			
		||||
                ArrayMap<Integer, UserInfo> userInfo = mUsersHelper.getMultiple(
 | 
			
		||||
                        FriendsUtils.getFriendsIDs(friendsList));
 | 
			
		||||
 | 
			
		||||
                //Check for errors
 | 
			
		||||
                if (userInfos == null)
 | 
			
		||||
                if (userInfo == null)
 | 
			
		||||
                    return null;
 | 
			
		||||
 | 
			
		||||
                //Merge friend and user and return result
 | 
			
		||||
                return FriendsUtils.merge_friends_user_infos_list(friendsList, userInfos);
 | 
			
		||||
                return FriendsUtils.merge_friends_user_infos_list(friendsList, userInfo);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -242,17 +243,17 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Save the list of friends
 | 
			
		||||
        this.friendsList = friendsList;
 | 
			
		||||
        this.mList = friendsList;
 | 
			
		||||
 | 
			
		||||
        //Update the visibility of the no friend notice
 | 
			
		||||
        updateNoFriendNoticeVisibility();
 | 
			
		||||
 | 
			
		||||
        //Set the adapter
 | 
			
		||||
        fAdapter = new FriendsAdapter(getActivity(), friendsList, this);
 | 
			
		||||
        mAdapter = new FriendsAdapter(getActivity(), friendsList, this);
 | 
			
		||||
        mFriendsList.setLayoutManager(new LinearLayoutManager(getActivity()));
 | 
			
		||||
        mFriendsList.addItemDecoration(new DividerItemDecoration(mFriendsList.getContext(),
 | 
			
		||||
                DividerItemDecoration.VERTICAL));
 | 
			
		||||
        mFriendsList.setAdapter(fAdapter);
 | 
			
		||||
        mFriendsList.setAdapter(mAdapter);
 | 
			
		||||
 | 
			
		||||
        //Register the view for the context menu
 | 
			
		||||
        registerForContextMenu(mFriendsList);
 | 
			
		||||
@@ -275,11 +276,11 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
            public void onClick(DialogInterface dialog, int which) {
 | 
			
		||||
 | 
			
		||||
                //Get the friend to delete
 | 
			
		||||
                final Friend toDelete = friendsList.get(pos).getFriend();
 | 
			
		||||
                final Friend toDelete = mList.get(pos).getFriend();
 | 
			
		||||
 | 
			
		||||
                //Apply new list version
 | 
			
		||||
                friendsList.remove(pos);
 | 
			
		||||
                fAdapter.notifyDataSetChanged();
 | 
			
		||||
                mList.remove(pos);
 | 
			
		||||
                mAdapter.notifyDataSetChanged();
 | 
			
		||||
 | 
			
		||||
                //Remove the friend list on a parallel thread
 | 
			
		||||
                new AsyncTask<Integer, Void, Void>() {
 | 
			
		||||
@@ -287,7 +288,7 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
                    protected Void doInBackground(Integer[] params) {
 | 
			
		||||
 | 
			
		||||
                        //Delete the friend from the list
 | 
			
		||||
                        flistHelper.remove(toDelete);
 | 
			
		||||
                        mFriendsHelper.remove(toDelete);
 | 
			
		||||
 | 
			
		||||
                        return null;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -303,30 +304,30 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onOpenUserPage(int userID) {
 | 
			
		||||
        usersPageOpener.openUserPage(userID);
 | 
			
		||||
        mUsersPageOpener.openUserPage(userID);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onRespondFrienshipRequest(int pos, final boolean response) {
 | 
			
		||||
 | 
			
		||||
        //Get the Friend object
 | 
			
		||||
        Friend targetFriend = friendsList.get(pos).getFriend();
 | 
			
		||||
        Friend targetFriend = mList.get(pos).getFriend();
 | 
			
		||||
 | 
			
		||||
        if (response)
 | 
			
		||||
            //Mark the friend as accepted
 | 
			
		||||
            targetFriend.setAccepted(true);
 | 
			
		||||
        else
 | 
			
		||||
            //Remove the friend from the list
 | 
			
		||||
            friendsList.remove(pos);
 | 
			
		||||
            mList.remove(pos);
 | 
			
		||||
 | 
			
		||||
        //Inform the adapter the list has changed
 | 
			
		||||
        fAdapter.notifyDataSetChanged();
 | 
			
		||||
        mAdapter.notifyDataSetChanged();
 | 
			
		||||
 | 
			
		||||
        //Accept the request on a separate thread
 | 
			
		||||
        new AsyncTask<Friend, Void, Void>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            protected Void doInBackground(Friend... params) {
 | 
			
		||||
                flistHelper.respondRequest(params[0], response);
 | 
			
		||||
                mFriendsHelper.respondRequest(params[0], response);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, targetFriend);
 | 
			
		||||
@@ -339,10 +340,16 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
        //Save selected position
 | 
			
		||||
        mPosInContextMenu = pos;
 | 
			
		||||
 | 
			
		||||
        //Initialize and show menu
 | 
			
		||||
        //Initialize menu
 | 
			
		||||
        PopupMenu menu = new PopupMenu(getActivity(), view);
 | 
			
		||||
        menu.inflate(R.menu.menu_fragment_friendslist_item);
 | 
			
		||||
        menu.inflate(R.menu.menu_friend);
 | 
			
		||||
        menu.setOnMenuItemClickListener(this);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Update following checkbox
 | 
			
		||||
        menu.getMenu().findItem(R.id.action_follow).setChecked(mList.get(pos).getFriend()
 | 
			
		||||
                .isFollowing());
 | 
			
		||||
 | 
			
		||||
        menu.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -352,20 +359,60 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
        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());
 | 
			
		||||
            case R.id.action_private_conversation:
 | 
			
		||||
                mConvOpener.openPrivateConversation(mList.get(mPosInContextMenu).getFriend().getId());
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            //To delete the friend
 | 
			
		||||
            case R.id.menu_fragment_friendslist_delete_friend:
 | 
			
		||||
            case R.id.action_delete_friend:
 | 
			
		||||
                delete_friend(mPosInContextMenu);
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            case R.id.action_follow:
 | 
			
		||||
                onSetFollowing(mPosInContextMenu,
 | 
			
		||||
                        !mList.get(mPosInContextMenu).getFriend().isFollowing());
 | 
			
		||||
                return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSetFollowing(int pos, boolean following) {
 | 
			
		||||
 | 
			
		||||
        Friend friend = mList.get(pos).getFriend();
 | 
			
		||||
        friend.setFollowing(following);
 | 
			
		||||
 | 
			
		||||
        mAdapter.notifyDataSetChanged();
 | 
			
		||||
 | 
			
		||||
        //Perform update
 | 
			
		||||
        new SetFollowingTask(getActivity(), friend.getId(), friend.isFollowing())
 | 
			
		||||
                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Class used to update following status
 | 
			
		||||
     */
 | 
			
		||||
    static class SetFollowingTask extends SafeAsyncTask<Void, Void, Void> {
 | 
			
		||||
 | 
			
		||||
        private int friendID;
 | 
			
		||||
        private boolean follow;
 | 
			
		||||
 | 
			
		||||
        SetFollowingTask(Context context, int friendID, boolean follow) {
 | 
			
		||||
            super(context);
 | 
			
		||||
            this.friendID = friendID;
 | 
			
		||||
            this.follow = follow;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        protected Void doInBackground(Void... voids) {
 | 
			
		||||
            new FriendsListHelper(getContext()).setFollowing(friendID, follow);
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Hide (or display) progress bar
 | 
			
		||||
     *
 | 
			
		||||
@@ -379,7 +426,7 @@ public class FriendsListFragment extends Fragment implements OnFriendListActionL
 | 
			
		||||
     * Update the visibility of the no friend notice
 | 
			
		||||
     */
 | 
			
		||||
    private void updateNoFriendNoticeVisibility() {
 | 
			
		||||
        if (friendsList != null)
 | 
			
		||||
            mNoFriendNotice.setVisibility(friendsList.size() == 0 ? View.VISIBLE : View.GONE);
 | 
			
		||||
        if (mList != null)
 | 
			
		||||
            mNoFriendNotice.setVisibility(mList.size() == 0 ? View.VISIBLE : View.GONE);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ public interface OnFriendListActionListener {
 | 
			
		||||
    /**
 | 
			
		||||
     * Respond to a friendship request
 | 
			
		||||
     *
 | 
			
		||||
     * @param pos Position of the friend on the list
 | 
			
		||||
     * @param pos      Position of the friend on the list
 | 
			
		||||
     * @param response TRUE to accept / FALSE else
 | 
			
		||||
     */
 | 
			
		||||
    void onRespondFrienshipRequest(int pos, boolean response);
 | 
			
		||||
@@ -30,4 +30,12 @@ public interface OnFriendListActionListener {
 | 
			
		||||
     * @param pos The position of the friend in the list
 | 
			
		||||
     */
 | 
			
		||||
    void onOpenContextMenuForFriend(View view, int pos);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Specify whether a friend should be followed or not
 | 
			
		||||
     *
 | 
			
		||||
     * @param pos       The position of the friend to update
 | 
			
		||||
     * @param following New following status
 | 
			
		||||
     */
 | 
			
		||||
    void onSetFollowing(int pos, boolean following);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,20 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
 | 
			
		||||
    <!-- Update following state -->
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/action_follow"
 | 
			
		||||
        android:title="@string/action_follow"
 | 
			
		||||
        android:checkable="true" />
 | 
			
		||||
 | 
			
		||||
    <!-- Start private conversation -->
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/menu_fragment_friendslist_private_conversation"
 | 
			
		||||
        android:id="@+id/action_private_conversation"
 | 
			
		||||
        android:title="@string/action_friends_start_private_conversation" />
 | 
			
		||||
 | 
			
		||||
    <!-- Delete the friend -->
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/menu_fragment_friendslist_delete_friend"
 | 
			
		||||
        android:id="@+id/action_delete_friend"
 | 
			
		||||
        android:title="@string/action_friends_delete" />
 | 
			
		||||
 | 
			
		||||
</menu>
 | 
			
		||||
@@ -243,4 +243,5 @@
 | 
			
		||||
    <string name="action_reject_friend_request">Reject</string>
 | 
			
		||||
    <string name="notice_request">Requested</string>
 | 
			
		||||
    <string name="action_more_description">Get more options</string>
 | 
			
		||||
    <string name="action_follow">Follow</string>
 | 
			
		||||
</resources>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user