mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-23 22:09:30 +00:00
Ready to implement friend deletion
This commit is contained in:
parent
c6cbdc20f0
commit
e8fd331c7d
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user