mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-12-26 13:38:59 +00:00
Can get and display information about groups in notification fragment.
This commit is contained in:
parent
2f4621c0e5
commit
9a2520efd5
@ -3,6 +3,7 @@ package org.communiquons.android.comunic.client.data.arrays;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.ArrayMap;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.models.GroupInfo;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.enums.NotifElemType;
|
||||
import org.communiquons.android.comunic.client.data.models.Notif;
|
||||
@ -23,6 +24,11 @@ public class NotifsList extends ArrayList<Notif> {
|
||||
*/
|
||||
private ArrayMap<Integer, UserInfo> mUsersInfo;
|
||||
|
||||
/**
|
||||
* Information about the groups related to the notifications
|
||||
*/
|
||||
private ArrayMap<Integer, GroupInfo> mGroupsInfo;
|
||||
|
||||
/**
|
||||
* Get and return the IDs of the users related to the notifications
|
||||
*
|
||||
@ -62,6 +68,29 @@ public class NotifsList extends ArrayList<Notif> {
|
||||
return IDs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and return the IDs of the groups related to the notificatoin
|
||||
*
|
||||
* @return The ID of the groups related to the notification
|
||||
*/
|
||||
public ArrayList<Integer> getGroupsID(){
|
||||
ArrayList<Integer> IDs = new ArrayList<>();
|
||||
|
||||
for(Notif notif : this){
|
||||
|
||||
if(notif.getOn_elem_type() == NotifElemType.GROUP_PAGE
|
||||
&& !IDs.contains(notif.getOn_elem_id()))
|
||||
IDs.add(notif.getOn_elem_id());
|
||||
|
||||
if(notif.getFrom_container_type() == NotifElemType.GROUP_PAGE
|
||||
&& !IDs.contains(notif.getFrom_container_id()))
|
||||
IDs.add(notif.getFrom_container_id());
|
||||
|
||||
}
|
||||
|
||||
return IDs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set information about the users related to the notifications
|
||||
*
|
||||
@ -80,4 +109,22 @@ public class NotifsList extends ArrayList<Notif> {
|
||||
public ArrayMap<Integer, UserInfo> getUsersInfo() {
|
||||
return mUsersInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get information about the related groups
|
||||
*
|
||||
* @return Information about the related groups
|
||||
*/
|
||||
public ArrayMap<Integer, GroupInfo> getGroupsInfo() {
|
||||
return mGroupsInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set information about the related groups
|
||||
*
|
||||
* @param mGroupsInfo Information about the groups
|
||||
*/
|
||||
public void setGroupsInfo(ArrayMap<Integer, GroupInfo> mGroupsInfo) {
|
||||
this.mGroupsInfo = mGroupsInfo;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
package org.communiquons.android.comunic.client.data.enums;
|
||||
|
||||
/**
|
||||
* Posts creations levels
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public enum GroupPostsCreationLevel {
|
||||
MODERATORS,
|
||||
MEMBERS
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.communiquons.android.comunic.client.data.enums;
|
||||
|
||||
/**
|
||||
* Group registration levels
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public enum GroupRegistrationLevel {
|
||||
OPEN,
|
||||
MODERATED,
|
||||
CLOSED
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.communiquons.android.comunic.client.data.enums;
|
||||
|
||||
/**
|
||||
* Groups visibility levels
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public enum GroupVisibility {
|
||||
OPEN,
|
||||
PRIVATE,
|
||||
SECRETE
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package org.communiquons.android.comunic.client.data.enums;
|
||||
|
||||
/**
|
||||
* Groups membership levels
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public enum GroupsMembershipLevels {
|
||||
|
||||
ADMINISTRATOR,
|
||||
MODERATOR,
|
||||
MEMBER,
|
||||
INVITED,
|
||||
PENDING,
|
||||
VISITOR
|
||||
|
||||
}
|
@ -0,0 +1,220 @@
|
||||
package org.communiquons.android.comunic.client.data.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.ArrayMap;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupPostsCreationLevel;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupRegistrationLevel;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupVisibility;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupsMembershipLevels;
|
||||
import org.communiquons.android.comunic.client.data.models.APIRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
||||
import org.communiquons.android.comunic.client.data.models.GroupInfo;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Groups helper
|
||||
*/
|
||||
public class GroupsHelper extends BaseHelper {
|
||||
|
||||
/**
|
||||
* Groups constructor
|
||||
*
|
||||
* @param context The context of the application
|
||||
*/
|
||||
public GroupsHelper(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get information about multiple groups
|
||||
*
|
||||
* @param IDs The ID of the target groups
|
||||
* @return Information about the related groups
|
||||
*/
|
||||
@Nullable
|
||||
public ArrayMap<Integer, GroupInfo> getInfoMultiple(ArrayList<Integer> IDs){
|
||||
return downloadMultiple(IDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download information of multiple groups from the server
|
||||
*
|
||||
* @param IDs The IDs of the groups to get
|
||||
* @return Information about the groups / null in case of failure
|
||||
*/
|
||||
@Nullable
|
||||
private ArrayMap<Integer, GroupInfo> downloadMultiple(ArrayList<Integer> IDs){
|
||||
|
||||
//Make a request over the server
|
||||
APIRequest request = new APIRequest(getContext(), "groups/get_multiple_info");
|
||||
|
||||
//Process the list of groups to get
|
||||
StringBuilder reqList = new StringBuilder();
|
||||
for(Integer id : IDs) {
|
||||
reqList.append(id);
|
||||
reqList.append(",");
|
||||
}
|
||||
request.addString("list", reqList.toString());
|
||||
|
||||
|
||||
try {
|
||||
|
||||
APIResponse response = new APIRequestHelper().exec(request);
|
||||
JSONObject object = response.getJSONObject();
|
||||
ArrayMap<Integer, GroupInfo> list = new ArrayMap<>();
|
||||
|
||||
if(object == null) return null;
|
||||
|
||||
//Parse the list of keys
|
||||
for(Integer id : IDs){
|
||||
|
||||
//Get raw information about the group
|
||||
JSONObject info = object.getJSONObject(id + "");
|
||||
|
||||
//Check if we did not get anything
|
||||
if(info == null)
|
||||
return null;
|
||||
|
||||
list.put(id, parse_group_info(info));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse group information into GroupInfo object
|
||||
*
|
||||
* @param object The object to parse
|
||||
* @return Generated group object
|
||||
* @throws JSONException In case of failure
|
||||
*/
|
||||
private GroupInfo parse_group_info(@NonNull JSONObject object) throws JSONException {
|
||||
|
||||
GroupInfo info = new GroupInfo();
|
||||
|
||||
info.setId(object.getInt("id"));
|
||||
info.setName(object.getString("name"));
|
||||
info.setIcon_url(object.getString("icon_url"));
|
||||
info.setNumber_members(object.getInt("number_members"));
|
||||
info.setMembershipLevel(parse_membership_level(object.getString("membership")));
|
||||
info.setVisibility(parse_group_visibility(object.getString("visibility")));
|
||||
info.setRegistrationLevel(parse_group_registration_level(object.getString("registration_level")));
|
||||
info.setPostCreationLevel(parse_post_creation_level(object.getString("posts_level")));
|
||||
info.setVirtualDirectory(object.getString("virtual_directory"));
|
||||
info.setFollowing(object.getBoolean("following"));
|
||||
|
||||
return info;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse membership level
|
||||
*
|
||||
* @param level Membership level to parse as string
|
||||
* @return Equivalent membership level
|
||||
*/
|
||||
private GroupsMembershipLevels parse_membership_level(String level){
|
||||
switch (level){
|
||||
|
||||
case "administrator":
|
||||
return GroupsMembershipLevels.ADMINISTRATOR;
|
||||
|
||||
case "moderator":
|
||||
return GroupsMembershipLevels.MODERATOR;
|
||||
|
||||
case "member":
|
||||
return GroupsMembershipLevels.MEMBER;
|
||||
|
||||
case "invited":
|
||||
return GroupsMembershipLevels.INVITED;
|
||||
|
||||
case "pending":
|
||||
return GroupsMembershipLevels.PENDING;
|
||||
|
||||
case "visitor":
|
||||
return GroupsMembershipLevels.VISITOR;
|
||||
|
||||
default:
|
||||
throw new RuntimeException("Unsupported membership level: " + level);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse group visibility level
|
||||
*
|
||||
* @param level The level to parse
|
||||
* @return Equivalent visibility level
|
||||
*/
|
||||
private GroupVisibility parse_group_visibility(String level){
|
||||
switch (level){
|
||||
|
||||
case "open":
|
||||
return GroupVisibility.OPEN;
|
||||
|
||||
case "private":
|
||||
return GroupVisibility.PRIVATE;
|
||||
|
||||
case "secrete":
|
||||
return GroupVisibility.SECRETE;
|
||||
|
||||
default:
|
||||
throw new RuntimeException("Unsupported group visibility level: " + level);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse group registration level
|
||||
*
|
||||
* @param level The level to parse
|
||||
* @return Equivalent registration level
|
||||
*/
|
||||
private GroupRegistrationLevel parse_group_registration_level(String level){
|
||||
switch (level){
|
||||
|
||||
case "open":
|
||||
return GroupRegistrationLevel.OPEN;
|
||||
|
||||
case "moderated":
|
||||
return GroupRegistrationLevel.MODERATED;
|
||||
|
||||
case "closed":
|
||||
return GroupRegistrationLevel.CLOSED;
|
||||
|
||||
default:
|
||||
throw new RuntimeException("Unsupported group registration level: " + level);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse post creation level
|
||||
*
|
||||
* @param level The level to parse
|
||||
* @return Equivalent post creation post level
|
||||
*/
|
||||
private GroupPostsCreationLevel parse_post_creation_level(String level){
|
||||
switch (level){
|
||||
|
||||
case "moderators":
|
||||
return GroupPostsCreationLevel.MODERATORS;
|
||||
|
||||
case "members":
|
||||
return GroupPostsCreationLevel.MEMBERS;
|
||||
|
||||
|
||||
default:
|
||||
throw new RuntimeException("Unsupported group post creation level: " + level);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,119 @@
|
||||
package org.communiquons.android.comunic.client.data.models;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupRegistrationLevel;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupVisibility;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupsMembershipLevels;
|
||||
import org.communiquons.android.comunic.client.data.enums.GroupPostsCreationLevel;
|
||||
|
||||
/**
|
||||
* Group information base model
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class GroupInfo {
|
||||
|
||||
//Private fields
|
||||
private int id;
|
||||
private String name;
|
||||
private String icon_url;
|
||||
private int number_members;
|
||||
private GroupsMembershipLevels membershipLevel;
|
||||
private GroupVisibility visibility;
|
||||
private GroupRegistrationLevel registrationLevel;
|
||||
private GroupPostsCreationLevel postCreationLevel;
|
||||
private String virtualDirectory;
|
||||
private boolean following;
|
||||
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getIcon_url() {
|
||||
return icon_url;
|
||||
}
|
||||
|
||||
public void setIcon_url(String icon_url) {
|
||||
this.icon_url = icon_url;
|
||||
}
|
||||
|
||||
public int getNumber_members() {
|
||||
return number_members;
|
||||
}
|
||||
|
||||
public void setNumber_members(int number_members) {
|
||||
this.number_members = number_members;
|
||||
}
|
||||
|
||||
public GroupsMembershipLevels getMembershipLevel() {
|
||||
return membershipLevel;
|
||||
}
|
||||
|
||||
public void setMembershipLevel(GroupsMembershipLevels membershipLevel) {
|
||||
this.membershipLevel = membershipLevel;
|
||||
}
|
||||
|
||||
public GroupVisibility getVisibility() {
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public void setVisibility(GroupVisibility visibility) {
|
||||
this.visibility = visibility;
|
||||
}
|
||||
|
||||
public GroupRegistrationLevel getRegistrationLevel() {
|
||||
return registrationLevel;
|
||||
}
|
||||
|
||||
public void setRegistrationLevel(GroupRegistrationLevel registrationLevel) {
|
||||
this.registrationLevel = registrationLevel;
|
||||
}
|
||||
|
||||
public GroupPostsCreationLevel getPostCreationLevel() {
|
||||
return postCreationLevel;
|
||||
}
|
||||
|
||||
public void setPostCreationLevel(GroupPostsCreationLevel creationLevel) {
|
||||
this.postCreationLevel = creationLevel;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getVirtualDirectory() {
|
||||
return virtualDirectory;
|
||||
}
|
||||
|
||||
public boolean hasVirtualDirectory(){
|
||||
return virtualDirectory != null;
|
||||
}
|
||||
|
||||
public void setVirtualDirectory(@Nullable String virtualDirectory) {
|
||||
this.virtualDirectory = virtualDirectory;
|
||||
|
||||
if(virtualDirectory != null){
|
||||
if(virtualDirectory.equals("null"))
|
||||
this.virtualDirectory = null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isFollowing() {
|
||||
return following;
|
||||
}
|
||||
|
||||
public void setFollowing(boolean following) {
|
||||
this.following = following;
|
||||
}
|
||||
}
|
@ -6,10 +6,13 @@ import android.util.ArrayMap;
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.enums.NotifElemType;
|
||||
import org.communiquons.android.comunic.client.data.enums.NotificationTypes;
|
||||
import org.communiquons.android.comunic.client.data.models.GroupInfo;
|
||||
import org.communiquons.android.comunic.client.data.models.Notif;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
||||
|
||||
import java.security.acl.Group;
|
||||
|
||||
/**
|
||||
* Notifications utilities
|
||||
*
|
||||
@ -25,10 +28,12 @@ public class NotifsUtils {
|
||||
* @param context The context of the application
|
||||
* @param notif The target notification
|
||||
* @param userInfos Information about the user of the notification
|
||||
* @param groupsInfo Information about related groups
|
||||
* @return The message associated to the notification
|
||||
*/
|
||||
public static String getNotificationMessage(Context context, Notif notif,
|
||||
ArrayMap<Integer, UserInfo> userInfos){
|
||||
ArrayMap<Integer, UserInfo> userInfos,
|
||||
ArrayMap<Integer, GroupInfo> groupsInfo){
|
||||
|
||||
//First, put the name of the user
|
||||
String message = userInfos.get(notif.getFrom_user_id()).getDisplayFullName();
|
||||
@ -74,7 +79,8 @@ public class NotifsUtils {
|
||||
|
||||
//Group page
|
||||
else if(notif.getFrom_container_type() == NotifElemType.GROUP_PAGE){
|
||||
message += UiUtils.getString(context, R.string.notif_on_group_page);
|
||||
message += UiUtils.getString(context, R.string.notif_on_group_page,
|
||||
groupsInfo.get(notif.getFrom_container_id()).getName());
|
||||
}
|
||||
|
||||
//Return the message
|
||||
|
@ -13,12 +13,15 @@ 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.GroupInfo;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.models.Notif;
|
||||
import org.communiquons.android.comunic.client.data.arrays.NotifsList;
|
||||
import org.communiquons.android.comunic.client.data.utils.NotifsUtils;
|
||||
import org.communiquons.android.comunic.client.data.utils.Utilities;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
|
||||
/**
|
||||
* Notifications list adapter
|
||||
*
|
||||
@ -38,6 +41,11 @@ public class NotificationsAdapter extends ArrayAdapter<Notif>{
|
||||
*/
|
||||
private ArrayMap<Integer, UserInfo> mUsersInfo;
|
||||
|
||||
/**
|
||||
* Information about the groups related to the notifications
|
||||
*/
|
||||
private ArrayMap<Integer, GroupInfo> mGroupsInfo;
|
||||
|
||||
/**
|
||||
* Public adapter constructor
|
||||
*
|
||||
@ -47,8 +55,9 @@ public class NotificationsAdapter extends ArrayAdapter<Notif>{
|
||||
public NotificationsAdapter(Context context, NotifsList list){
|
||||
super(context, 0, list);
|
||||
|
||||
//Save user information
|
||||
//Save users and groups information
|
||||
mUsersInfo = list.getUsersInfo();
|
||||
mGroupsInfo = list.getGroupsInfo();
|
||||
|
||||
mUtils = new Utilities(context);
|
||||
}
|
||||
@ -75,7 +84,8 @@ public class NotificationsAdapter extends ArrayAdapter<Notif>{
|
||||
|
||||
//Update the message of the notification
|
||||
TextView message = convertView.findViewById(R.id.notification_message);
|
||||
message.setText(NotifsUtils.getNotificationMessage(getContext(), notif, mUsersInfo));
|
||||
message.setText(NotifsUtils.getNotificationMessage(getContext(), notif,
|
||||
mUsersInfo, mGroupsInfo));
|
||||
|
||||
//Update the date of the notification
|
||||
TextView date = convertView.findViewById(R.id.notification_date);
|
||||
|
@ -22,6 +22,7 @@ import android.widget.Toast;
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.enums.NotifElemType;
|
||||
import org.communiquons.android.comunic.client.data.helpers.GetUsersHelper;
|
||||
import org.communiquons.android.comunic.client.data.helpers.GroupsHelper;
|
||||
import org.communiquons.android.comunic.client.data.helpers.NotificationsHelper;
|
||||
import org.communiquons.android.comunic.client.data.arrays.NotifsList;
|
||||
import org.communiquons.android.comunic.client.data.models.Notif;
|
||||
@ -50,6 +51,11 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
||||
*/
|
||||
private GetUsersHelper mUsersInfoHelper;
|
||||
|
||||
/**
|
||||
* Groups heper
|
||||
*/
|
||||
private GroupsHelper mGroupsHelper;
|
||||
|
||||
/**
|
||||
* Notifications list
|
||||
*/
|
||||
@ -94,11 +100,10 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
//Create notifications helper
|
||||
//Initialize helpers
|
||||
mNotificationsHelper = new NotificationsHelper(getActivity());
|
||||
|
||||
//Create get users helper
|
||||
mUsersInfoHelper = new GetUsersHelper(getActivity());
|
||||
mGroupsHelper = new GroupsHelper(getActivity());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -228,8 +233,10 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
||||
NotifsList list = mNotificationsHelper.getListUnread();
|
||||
|
||||
//If we got the list of notifications, fetch users information
|
||||
if(list != null)
|
||||
if(list != null) {
|
||||
list.setUsersInfo(mUsersInfoHelper.getMultiple(list.getUsersID()));
|
||||
list.setGroupsInfo(mGroupsHelper.getInfoMultiple(list.getGroupsID()));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user