mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 15:59:29 +00:00
Can display friendship status.
This commit is contained in:
parent
84de50f406
commit
d45bfbf284
@ -7,6 +7,7 @@ import android.util.Log;
|
|||||||
import org.communiquons.android.comunic.client.data.models.APIRequestParameters;
|
import org.communiquons.android.comunic.client.data.models.APIRequestParameters;
|
||||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
||||||
import org.communiquons.android.comunic.client.data.models.Friend;
|
import org.communiquons.android.comunic.client.data.models.Friend;
|
||||||
|
import org.communiquons.android.comunic.client.data.models.FriendshipStatus;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
@ -142,7 +143,7 @@ public class FriendsListHelper {
|
|||||||
public void respondRequest(Friend friend, boolean accept){
|
public void respondRequest(Friend friend, boolean accept){
|
||||||
try {
|
try {
|
||||||
|
|
||||||
//Perform a request to update the satus online
|
//Perform a request to update the status online
|
||||||
APIRequestParameters reqParams = new APIRequestParameters(mContext,
|
APIRequestParameters reqParams = new APIRequestParameters(mContext,
|
||||||
"friends/respondRequest");
|
"friends/respondRequest");
|
||||||
reqParams.addInt("friendID", friend.getId());
|
reqParams.addInt("friendID", friend.getId());
|
||||||
@ -163,4 +164,43 @@ public class FriendsListHelper {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a friendship status
|
||||||
|
*
|
||||||
|
* @param friendID The ID of the target friend
|
||||||
|
* @return Information about the friendship / null in case of failure
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public FriendshipStatus getFrienshipStatus(int friendID) {
|
||||||
|
|
||||||
|
//Perform a request on the API
|
||||||
|
APIRequestParameters params = new APIRequestParameters(mContext, "friends/getStatus");
|
||||||
|
params.addInt("friendID", friendID);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
//Get the response
|
||||||
|
APIResponse response = new APIRequestHelper().exec(params);
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(response.getResponse_code() != 200)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//Parse the response
|
||||||
|
JSONObject object = response.getJSONObject();
|
||||||
|
FriendshipStatus status = new FriendshipStatus();
|
||||||
|
status.setAreFriend(object.getBoolean("are_friend"));
|
||||||
|
status.setSentRequest(object.getBoolean("sent_request"));
|
||||||
|
status.setReceivedRequest(object.getBoolean("received_request"));
|
||||||
|
status.setFollowing(object.getBoolean("following"));
|
||||||
|
|
||||||
|
return status;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ public class GetUsersHelper {
|
|||||||
* Public constructor of the class
|
* Public constructor of the class
|
||||||
*
|
*
|
||||||
* @param context The context of execution of the application
|
* @param context The context of execution of the application
|
||||||
* @param dbHelper Databasehelpepr
|
* @param dbHelper DatabaseHelper
|
||||||
*/
|
*/
|
||||||
public GetUsersHelper(@NonNull Context context, @NonNull DatabaseHelper dbHelper){
|
public GetUsersHelper(@NonNull Context context, @NonNull DatabaseHelper dbHelper){
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@ -74,8 +74,8 @@ public class GetUsersHelper {
|
|||||||
/**
|
/**
|
||||||
* Get information about a single user from the server
|
* Get information about a single user from the server
|
||||||
*
|
*
|
||||||
* @param id The ID of the user to get informations on
|
* @param id The ID of the user to get information on
|
||||||
* @param force Force the informations to be fetched from the server
|
* @param force Force the information to be fetched from the server
|
||||||
* @return User information or null in case of failure
|
* @return User information or null in case of failure
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -103,7 +103,7 @@ public class GetUsersHelper {
|
|||||||
//Add the user to the database
|
//Add the user to the database
|
||||||
udbHelper.insertOrUpdate(infos);
|
udbHelper.insertOrUpdate(infos);
|
||||||
|
|
||||||
//Return user informations
|
//Return user information
|
||||||
return infos;
|
return infos;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -118,10 +118,10 @@ public class GetUsersHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get advanced informations about a single user
|
* Get advanced information about a single user
|
||||||
*
|
*
|
||||||
* @param userID The user to get information about
|
* @param userID The user to get information about
|
||||||
* @return Informations about the user / null in case of failure
|
* @return Information about the user / null in case of failure
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public AdvancedUserInfo get_advanced_infos(int userID){
|
public AdvancedUserInfo get_advanced_infos(int userID){
|
||||||
@ -129,13 +129,31 @@ public class GetUsersHelper {
|
|||||||
//Perform an API request
|
//Perform an API request
|
||||||
APIRequestParameters params = new APIRequestParameters(mContext,
|
APIRequestParameters params = new APIRequestParameters(mContext,
|
||||||
"user/getAdvancedUserInfos");
|
"user/getAdvancedUserInfos");
|
||||||
|
params.setTryContinueOnError(true);
|
||||||
params.addInt("userID", userID);
|
params.addInt("userID", userID);
|
||||||
|
|
||||||
//Perform the request
|
//Perform the request
|
||||||
try {
|
try {
|
||||||
APIResponse response = new APIRequestHelper().exec(params);
|
APIResponse response = new APIRequestHelper().exec(params);
|
||||||
|
|
||||||
//Parse user informations
|
//Check if the request echoed because the user is not allowed to access it
|
||||||
|
if(response.getResponse_code() != 200){
|
||||||
|
|
||||||
|
if(response.getResponse_code() == 401){
|
||||||
|
|
||||||
|
//Return an empty AdvancedUserInfo object with access forbidden set to true
|
||||||
|
AdvancedUserInfo info = new AdvancedUserInfo();
|
||||||
|
info.setAccessForbidden(true);
|
||||||
|
return info;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Else we can not do anything
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Parse user information
|
||||||
return parse_advanced_user_json(response.getJSONObject());
|
return parse_advanced_user_json(response.getJSONObject());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -368,7 +386,7 @@ public class GetUsersHelper {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private AdvancedUserInfo parse_advanced_user_json(JSONObject userObject){
|
private AdvancedUserInfo parse_advanced_user_json(JSONObject userObject){
|
||||||
|
|
||||||
//Parse basic informations about the user
|
//Parse basic information about the user
|
||||||
AdvancedUserInfo advancedUserInfo = (AdvancedUserInfo)
|
AdvancedUserInfo advancedUserInfo = (AdvancedUserInfo)
|
||||||
parse_base_user_json(new AdvancedUserInfo(), userObject);
|
parse_base_user_json(new AdvancedUserInfo(), userObject);
|
||||||
|
|
||||||
@ -376,7 +394,7 @@ public class GetUsersHelper {
|
|||||||
if(advancedUserInfo == null)
|
if(advancedUserInfo == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
//Parse advanced user informations
|
//Parse advanced user information
|
||||||
try {
|
try {
|
||||||
|
|
||||||
//Get account creation time
|
//Get account creation time
|
||||||
@ -393,19 +411,19 @@ public class GetUsersHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse user basic informations into a user object
|
* Parse user basic information into a user object
|
||||||
*
|
*
|
||||||
* @param userInfos The user informations object to fill
|
* @param userInfos The user information object to fill
|
||||||
* @param userObject The source JSON object
|
* @param userObject The source JSON object
|
||||||
* @return The filled user Infos object
|
* @return The filled user Infos object
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
private UserInfo parse_base_user_json(UserInfo userInfos, JSONObject userObject){
|
private UserInfo parse_base_user_json(UserInfo userInfos, JSONObject userObject){
|
||||||
|
|
||||||
//Try to retrieve basic user informations
|
//Try to retrieve basic user information
|
||||||
try {
|
try {
|
||||||
|
|
||||||
//Retrieve all user informations
|
//Retrieve all user information
|
||||||
userInfos.setId(userObject.getInt("userID"));
|
userInfos.setId(userObject.getInt("userID"));
|
||||||
userInfos.setFirstName(userObject.getString("firstName"));
|
userInfos.setFirstName(userObject.getString("firstName"));
|
||||||
userInfos.setLastName(userObject.getString("lastName"));
|
userInfos.setLastName(userObject.getString("lastName"));
|
||||||
@ -432,5 +450,12 @@ public class GetUsersHelper {
|
|||||||
* @param userID The ID of the user to create page
|
* @param userID The ID of the user to create page
|
||||||
*/
|
*/
|
||||||
void openUserPage(int userID);
|
void openUserPage(int userID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the page of a user for which the access has been denied
|
||||||
|
*
|
||||||
|
* @param userID The ID of the target user
|
||||||
|
*/
|
||||||
|
void openUserAccessDeniedPage(int userID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ public class AdvancedUserInfo extends UserInfo {
|
|||||||
|
|
||||||
//Private fields
|
//Private fields
|
||||||
private int account_creation_time;
|
private int account_creation_time;
|
||||||
|
private boolean accessForbidden = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the account creation time
|
* Get the account creation time
|
||||||
@ -29,4 +30,22 @@ public class AdvancedUserInfo extends UserInfo {
|
|||||||
public void setAccount_creation_time(int account_creation_time) {
|
public void setAccount_creation_time(int account_creation_time) {
|
||||||
this.account_creation_time = account_creation_time;
|
this.account_creation_time = account_creation_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the access to the page is forbidden or not
|
||||||
|
*
|
||||||
|
* @return TRUE if the access to the page is forbidden / FALSE else
|
||||||
|
*/
|
||||||
|
public boolean isAccessForbidden() {
|
||||||
|
return accessForbidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the forbidden state of the page
|
||||||
|
*
|
||||||
|
* @param accessForbidden TRUE if the access to the page is forbidden / FALSE else
|
||||||
|
*/
|
||||||
|
public void setAccessForbidden(boolean accessForbidden) {
|
||||||
|
this.accessForbidden = accessForbidden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
package org.communiquons.android.comunic.client.data.models;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This models handles a friendship status
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
* Created by pierre on 4/12/18.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class FriendshipStatus {
|
||||||
|
|
||||||
|
//Private fields
|
||||||
|
private boolean isFriend;
|
||||||
|
private boolean sentRequest;
|
||||||
|
private boolean receivedRequest;
|
||||||
|
private boolean following;
|
||||||
|
|
||||||
|
|
||||||
|
//Set and get the "are friend" value
|
||||||
|
public void setAreFriend(boolean areFriend) {
|
||||||
|
this.isFriend = areFriend;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFriend() {
|
||||||
|
return isFriend;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Set and get the sent request status
|
||||||
|
public void setSentRequest(boolean sentRequest) {
|
||||||
|
this.sentRequest = sentRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSentRequest() {
|
||||||
|
return sentRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Set and get the received request status
|
||||||
|
public void setReceivedRequest(boolean receivedRequest) {
|
||||||
|
this.receivedRequest = receivedRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReceivedRequest() {
|
||||||
|
return receivedRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set and get the following status
|
||||||
|
public void setFollowing(boolean following) {
|
||||||
|
this.following = following;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFollowing() {
|
||||||
|
return following;
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,7 @@ import org.communiquons.android.comunic.client.data.helpers.GetUsersHelper;
|
|||||||
import org.communiquons.android.comunic.client.data.helpers.ConversationsListHelper;
|
import org.communiquons.android.comunic.client.data.helpers.ConversationsListHelper;
|
||||||
import org.communiquons.android.comunic.client.data.runnables.FriendRefreshLoopRunnable;
|
import org.communiquons.android.comunic.client.data.runnables.FriendRefreshLoopRunnable;
|
||||||
import org.communiquons.android.comunic.client.data.services.NotificationsService;
|
import org.communiquons.android.comunic.client.data.services.NotificationsService;
|
||||||
|
import org.communiquons.android.comunic.client.ui.fragments.UserAccessDeniedFragment;
|
||||||
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
||||||
import org.communiquons.android.comunic.client.ui.fragments.ConversationFragment;
|
import org.communiquons.android.comunic.client.ui.fragments.ConversationFragment;
|
||||||
import org.communiquons.android.comunic.client.ui.fragments.ConversationsListFragment;
|
import org.communiquons.android.comunic.client.ui.fragments.ConversationsListFragment;
|
||||||
@ -339,6 +340,36 @@ public class MainActivity extends AppCompatActivity
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the page of a user for which the access has been denied
|
||||||
|
*
|
||||||
|
* @param userID The ID of the target user
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void openUserAccessDeniedPage(int userID) {
|
||||||
|
|
||||||
|
//Prepare the argument
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt(UserAccessDeniedFragment.ARGUMENT_USER_ID, userID);
|
||||||
|
|
||||||
|
//Create fragment
|
||||||
|
UserAccessDeniedFragment userAccessDeniedFragment = new UserAccessDeniedFragment();
|
||||||
|
userAccessDeniedFragment.setArguments(args);
|
||||||
|
|
||||||
|
//Remove the last entry of the backstack
|
||||||
|
//This is important in order to avoid to get the user unable to quit the page.
|
||||||
|
//Because it would get the user back to the user page fragment which would
|
||||||
|
//redirect immediately to this fragment indefinitely.
|
||||||
|
getFragmentManager().popBackStackImmediate();
|
||||||
|
|
||||||
|
//Perform the transition
|
||||||
|
FragmentTransaction transaction = getFragmentManager().beginTransaction();
|
||||||
|
transaction.addToBackStack(null);
|
||||||
|
transaction.replace(R.id.main_fragment, userAccessDeniedFragment);
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the conversation list fragment
|
* Open the conversation list fragment
|
||||||
*/
|
*/
|
||||||
|
@ -19,9 +19,11 @@ import android.widget.ProgressBar;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
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.GetUsersHelper;
|
||||||
import org.communiquons.android.comunic.client.data.helpers.NotificationsHelper;
|
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.arrays.NotifsList;
|
||||||
|
import org.communiquons.android.comunic.client.data.models.Notif;
|
||||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
||||||
import org.communiquons.android.comunic.client.ui.adapters.NotificationsAdapter;
|
import org.communiquons.android.comunic.client.ui.adapters.NotificationsAdapter;
|
||||||
|
|
||||||
@ -32,7 +34,8 @@ import org.communiquons.android.comunic.client.ui.adapters.NotificationsAdapter;
|
|||||||
* Created by pierre on 4/1/18.
|
* Created by pierre on 4/1/18.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class NotificationsFragment extends Fragment implements View.OnCreateContextMenuListener {
|
public class NotificationsFragment extends Fragment implements View.OnCreateContextMenuListener,
|
||||||
|
AdapterView.OnItemClickListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notifications helper
|
* Notifications helper
|
||||||
@ -69,6 +72,10 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
|||||||
*/
|
*/
|
||||||
private ProgressBar mLoadingProgress;
|
private ProgressBar mLoadingProgress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User page opener
|
||||||
|
*/
|
||||||
|
private GetUsersHelper.onOpenUsersPageListener mUserPageOpener;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
@ -118,6 +125,9 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
|||||||
((MainActivity) getActivity())
|
((MainActivity) getActivity())
|
||||||
.setSelectedNavigationItem(R.id.main_bottom_navigation_notif);
|
.setSelectedNavigationItem(R.id.main_bottom_navigation_notif);
|
||||||
|
|
||||||
|
//Get user page opener
|
||||||
|
mUserPageOpener = (GetUsersHelper.onOpenUsersPageListener) getActivity();
|
||||||
|
|
||||||
//Check if it is required to fetch the list of notifications
|
//Check if it is required to fetch the list of notifications
|
||||||
if(mNotificationsList == null){
|
if(mNotificationsList == null){
|
||||||
|
|
||||||
@ -251,6 +261,7 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
|||||||
|
|
||||||
//Set context menu creator
|
//Set context menu creator
|
||||||
mNotificationsListView.setOnCreateContextMenuListener(this);
|
mNotificationsListView.setOnCreateContextMenuListener(this);
|
||||||
|
mNotificationsListView.setOnItemClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -315,4 +326,23 @@ public class NotificationsFragment extends Fragment implements View.OnCreateCont
|
|||||||
}
|
}
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, notifID);
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, notifID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
|
||||||
|
//Delete the notification
|
||||||
|
//deleteNotification(position);
|
||||||
|
|
||||||
|
//Perform notification action
|
||||||
|
Notif notif = mNotificationsList.get(position);
|
||||||
|
|
||||||
|
//For friendship request
|
||||||
|
if(notif.getOn_elem_type() == NotifElemType.FRIEND_REQUEST){
|
||||||
|
|
||||||
|
//Open user page
|
||||||
|
mUserPageOpener.openUserPage(notif.getFrom_user_id());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,266 @@
|
|||||||
|
package org.communiquons.android.comunic.client.ui.fragments;
|
||||||
|
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.communiquons.android.comunic.client.R;
|
||||||
|
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.helpers.ImageLoadHelper;
|
||||||
|
import org.communiquons.android.comunic.client.data.models.FriendshipStatus;
|
||||||
|
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||||
|
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User access denied fragment
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
* Created by pierre on 4/11/18.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class UserAccessDeniedFragment extends Fragment {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name in the bundle of the target user ID
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_USER_ID = "user_id";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of the target user
|
||||||
|
*/
|
||||||
|
private int mUserID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get user helper
|
||||||
|
*/
|
||||||
|
private GetUsersHelper mUserHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Friend list helper
|
||||||
|
*/
|
||||||
|
private FriendsListHelper mFriendListHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about the user
|
||||||
|
*/
|
||||||
|
private UserInfo mUserInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about the friendship status
|
||||||
|
*/
|
||||||
|
private FriendshipStatus mFriendshipStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User account image
|
||||||
|
*/
|
||||||
|
private ImageView mUserImage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User account name
|
||||||
|
*/
|
||||||
|
private TextView mUserName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send request button
|
||||||
|
*/
|
||||||
|
private Button mSendRequestButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel request button
|
||||||
|
*/
|
||||||
|
private Button mCancelRequestButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accept request button
|
||||||
|
*/
|
||||||
|
private Button mAcceptRequestButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reject request button
|
||||||
|
*/
|
||||||
|
private Button mRejectRequestButton;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
//Create get user helper
|
||||||
|
mUserHelper = new GetUsersHelper(getActivity());
|
||||||
|
|
||||||
|
//Create friend info helper
|
||||||
|
mFriendListHelper = new FriendsListHelper(getActivity());
|
||||||
|
|
||||||
|
//Save the ID of the target user
|
||||||
|
mUserID = getArguments().getInt(ARGUMENT_USER_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.fragment_user_access_denied, container, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||||
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
//Get user related fields
|
||||||
|
mUserImage = view.findViewById(R.id.user_account_image);
|
||||||
|
mUserName = view.findViewById(R.id.user_account_name);
|
||||||
|
|
||||||
|
//Get the buttons
|
||||||
|
mSendRequestButton = view.findViewById(R.id.button_send_request);
|
||||||
|
mCancelRequestButton = view.findViewById(R.id.button_cancel_request);
|
||||||
|
mAcceptRequestButton = view.findViewById(R.id.button_accept_request);
|
||||||
|
mRejectRequestButton = view.findViewById(R.id.button_reject_request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
//Update activity dock
|
||||||
|
((MainActivity) getActivity())
|
||||||
|
.setSelectedNavigationItem(R.id.main_bottom_navigation_me_view);
|
||||||
|
|
||||||
|
//Check if it is required to fetch user information
|
||||||
|
if(mUserInfo == null){
|
||||||
|
getUserInfo();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
onGotUserInfos(mUserInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method get user information. Once it got it, it shows these information on the screen
|
||||||
|
*/
|
||||||
|
private void getUserInfo(){
|
||||||
|
|
||||||
|
//Perform the task in the background
|
||||||
|
new AsyncTask<Integer, Void, UserInfo>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected UserInfo doInBackground(Integer... params) {
|
||||||
|
//Force information about the user to be pulled
|
||||||
|
return mUserHelper.getSingle(mUserID, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(@Nullable UserInfo userInfo) {
|
||||||
|
if(getActivity() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
onGotUserInfos(userInfo);
|
||||||
|
}
|
||||||
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mUserID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called once we got information about the user
|
||||||
|
*
|
||||||
|
* @param info Information about the user / null in case of failure
|
||||||
|
*/
|
||||||
|
private void onGotUserInfos(@Nullable UserInfo info){
|
||||||
|
|
||||||
|
//Check for error
|
||||||
|
if(info == null){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_user_info, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Save user information
|
||||||
|
mUserInfo = info;
|
||||||
|
|
||||||
|
//Update activity name
|
||||||
|
getActivity().setTitle(mUserInfo.getDisplayFullName());
|
||||||
|
|
||||||
|
//Append user information
|
||||||
|
mUserName.setText(mUserInfo.getDisplayFullName());
|
||||||
|
ImageLoadHelper.load(getActivity(), mUserInfo.getAcountImageURL(), mUserImage);
|
||||||
|
|
||||||
|
//Check if we have got the friends
|
||||||
|
if(mFriendshipStatus == null){
|
||||||
|
getFrienshipStatus();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
onGotFriendshipStatus(mFriendshipStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the information about the friendship between the two users
|
||||||
|
*/
|
||||||
|
private void getFrienshipStatus(){
|
||||||
|
|
||||||
|
//Perform the request in the background
|
||||||
|
new AsyncTask<Integer, Void, FriendshipStatus>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected FriendshipStatus doInBackground(Integer... params) {
|
||||||
|
return mFriendListHelper.getFrienshipStatus(params[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(FriendshipStatus status) {
|
||||||
|
if(getActivity() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
onGotFriendshipStatus(status);
|
||||||
|
}
|
||||||
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mUserID);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called once we got information about the friendship status
|
||||||
|
*
|
||||||
|
* @param status The status of the frienship or null in case of failure
|
||||||
|
*/
|
||||||
|
private void onGotFriendshipStatus(@Nullable FriendshipStatus status){
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(status == null){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_friendship_status,
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Save the friendship status
|
||||||
|
mFriendshipStatus = status;
|
||||||
|
|
||||||
|
//Hide all the button by default
|
||||||
|
mSendRequestButton.setVisibility(View.GONE);
|
||||||
|
mCancelRequestButton.setVisibility(View.GONE);
|
||||||
|
mAcceptRequestButton.setVisibility(View.GONE);
|
||||||
|
mRejectRequestButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
//Check if the users are friend
|
||||||
|
if(mFriendshipStatus.isFriend())
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Check if the current user has sent a friendship request
|
||||||
|
if(mFriendshipStatus.isSentRequest()){
|
||||||
|
mCancelRequestButton.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if the current user has received a friendship request
|
||||||
|
else if(mFriendshipStatus.isReceivedRequest()){
|
||||||
|
mAcceptRequestButton.setVisibility(View.VISIBLE);
|
||||||
|
mRejectRequestButton.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Else the users have not pending request
|
||||||
|
else {
|
||||||
|
mSendRequestButton.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -107,6 +107,11 @@ public class UserPageFragment extends Fragment implements PostsCreateFormFragmen
|
|||||||
*/
|
*/
|
||||||
private View mCreatePostForm;
|
private View mCreatePostForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User page open listener
|
||||||
|
*/
|
||||||
|
private GetUsersHelper.onOpenUsersPageListener mOpenUsersPageListener;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
@ -123,6 +128,9 @@ public class UserPageFragment extends Fragment implements PostsCreateFormFragmen
|
|||||||
|
|
||||||
//Create posts helper instance
|
//Create posts helper instance
|
||||||
mPostsHelper = new PostsHelper(getActivity());
|
mPostsHelper = new PostsHelper(getActivity());
|
||||||
|
|
||||||
|
//Get the open user page listener
|
||||||
|
mOpenUsersPageListener = (GetUsersHelper.onOpenUsersPageListener) getActivity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -215,6 +223,14 @@ public class UserPageFragment extends Fragment implements PostsCreateFormFragmen
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Check if the user is not allowed to access user information
|
||||||
|
if(info.isAccessForbidden()){
|
||||||
|
//Open appropriate fragment
|
||||||
|
mOpenUsersPageListener.openUserAccessDeniedPage(mUserID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Save user information
|
//Save user information
|
||||||
userInfo = info;
|
userInfo = info;
|
||||||
|
|
||||||
|
96
app/src/main/res/layout/fragment_user_access_denied.xml
Normal file
96
app/src/main/res/layout/fragment_user_access_denied.xml
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<?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="match_parent">
|
||||||
|
|
||||||
|
<!-- Basic account information -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
android:layout_marginTop="16dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/user_account_image"
|
||||||
|
android:layout_width="@dimen/account_image_default_width"
|
||||||
|
android:layout_height="@dimen/account_image_default_height"
|
||||||
|
android:src="@drawable/default_account_image"
|
||||||
|
android:contentDescription="@string/user_image_description"
|
||||||
|
android:layout_marginEnd="10dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/user_account_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="User account name"
|
||||||
|
android:layout_gravity="center_vertical"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Available actions -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/buttons_list"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
android:layout_marginTop="0dp">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_send_request"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/button_send_friend_request"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_cancel_request"
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/button_cancel_friend_request"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/button_send_request" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_accept_request"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/button_accept_friend_request"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/button_cancel_request"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_reject_request"
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/button_reject_friend_request"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/button_accept_request" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- Account private notice -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:text="@string/notice_user_page_private"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/buttons_list"
|
||||||
|
android:layout_marginBottom="8dp" />
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
@ -7,7 +7,7 @@
|
|||||||
<color name="holo_green_dark">#ff669900</color>
|
<color name="holo_green_dark">#ff669900</color>
|
||||||
<color name="darker_gray">#aaa</color>
|
<color name="darker_gray">#aaa</color>
|
||||||
<color name="darker_darker_gray">#5b5b5b</color>
|
<color name="darker_darker_gray">#5b5b5b</color>
|
||||||
<color name="dark_blue">#303F9F</color>
|
<color name="dark_blue">#303f9f</color>
|
||||||
|
|
||||||
<!-- Conversation messages -->
|
<!-- Conversation messages -->
|
||||||
<color name="conversation_user_messages_background">#3F51B5</color>
|
<color name="conversation_user_messages_background">#3F51B5</color>
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
<string name="date_m">m</string>
|
<string name="date_m">m</string>
|
||||||
<string name="date_s">s</string>
|
<string name="date_s">s</string>
|
||||||
<string name="date_hours">date_hours</string>
|
<string name="date_hours">date_hours</string>
|
||||||
<string name="err_get_user_info">Couldn\'t get user information !</string>
|
<string name="err_get_user_info">Could not get user information !</string>
|
||||||
<string name="fragment_conversation_err_load_message">Could not load messages!</string>
|
<string name="fragment_conversation_err_load_message">Could not load messages!</string>
|
||||||
<string name="fragment_conversation_message_image">Conversation message image</string>
|
<string name="fragment_conversation_message_image">Conversation message image</string>
|
||||||
<string name="conversation_message_send">Send</string>
|
<string name="conversation_message_send">Send</string>
|
||||||
@ -166,4 +166,10 @@
|
|||||||
<string name="notif_on_user_page">on %1$s\'s page</string>
|
<string name="notif_on_user_page">on %1$s\'s page</string>
|
||||||
<string name="action_delete_notification">Delete</string>
|
<string name="action_delete_notification">Delete</string>
|
||||||
<string name="err_delete_notification">An error occurred while trying to delete the notification!</string>
|
<string name="err_delete_notification">An error occurred while trying to delete the notification!</string>
|
||||||
|
<string name="notice_user_page_private">This account is private.</string>
|
||||||
|
<string name="button_send_friend_request">Send request</string>
|
||||||
|
<string name="button_cancel_friend_request">Cancel request</string>
|
||||||
|
<string name="button_accept_friend_request">Accept request</string>
|
||||||
|
<string name="button_reject_friend_request">Reject request</string>
|
||||||
|
<string name="err_get_friendship_status">An error occurred while retrieving friendship status!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user