mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:38:02 +02:00
Android - People - Befriending working
This commit is contained in:
parent
3032c7802b
commit
d20c386102
3 changed files with 135 additions and 6 deletions
|
@ -15,7 +15,11 @@ import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
import retrofit2.converter.gson.GsonConverterFactory;
|
import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
|
import retrofit2.http.Body;
|
||||||
|
import retrofit2.http.DELETE;
|
||||||
import retrofit2.http.GET;
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.POST;
|
||||||
|
import retrofit2.http.Path;
|
||||||
import retrofit2.http.Query;
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,11 +97,85 @@ public class EndpointUsersProvider implements UsersProvider {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UserActionRetrofitCallback implements Callback<UsersResponse> {
|
||||||
|
|
||||||
|
UserActionCallback callback;
|
||||||
|
|
||||||
|
public UserActionRetrofitCallback(UserActionCallback callback) {
|
||||||
|
this.callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<UsersResponse> call, retrofit2.Response<UsersResponse> response) {
|
||||||
|
if (!response.isSuccessful()) {
|
||||||
|
callback.requestError(new Exception("Error with "
|
||||||
|
+ call.request().url().toString() + " "
|
||||||
|
+ call.request().method() + " call " + response.message()),
|
||||||
|
response.message());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.body() == null || !"success".equals(response.body().status)) {
|
||||||
|
callback.requestError(new Exception("Error with "
|
||||||
|
+ call.request().url().toString() + " "
|
||||||
|
+ call.request().method() + " call " + response.message()),
|
||||||
|
response.message());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
callback.requestOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<UsersResponse> call, Throwable t) {
|
||||||
|
callback.requestError(new Exception(t), t.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addFriend(String friendUserName, UserActionCallback callback) {
|
||||||
|
Call<UsersResponse> friendCall = mEndpointUsersProviderService.addFriend(new BodyAddFriend(friendUserName));
|
||||||
|
friendCall.enqueue(new UserActionRetrofitCallback(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeFriend(String friendUserName, UserActionCallback callback) {
|
||||||
|
Call<UsersResponse> friendCall = mEndpointUsersProviderService.removeFriend(friendUserName);
|
||||||
|
friendCall.enqueue(new UserActionRetrofitCallback(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeConnection(String connectionUserName, UserActionCallback callback) {
|
||||||
|
Call<UsersResponse> connectionCall = mEndpointUsersProviderService.removeConnection(connectionUserName);
|
||||||
|
connectionCall.enqueue(new UserActionRetrofitCallback(callback));
|
||||||
|
}
|
||||||
|
|
||||||
public interface EndpointUsersProviderService {
|
public interface EndpointUsersProviderService {
|
||||||
@GET("api/v1/users")
|
@GET("api/v1/users")
|
||||||
Call<UsersResponse> getUsers(@Query("filter") String filter,
|
Call<UsersResponse> getUsers(@Query("filter") String filter,
|
||||||
@Query("per_page") int perPage,
|
@Query("per_page") int perPage,
|
||||||
@Query("online") Boolean online);
|
@Query("online") Boolean online);
|
||||||
|
|
||||||
|
@DELETE("api/v1/user/connections/{connectionUserName}")
|
||||||
|
Call<UsersResponse> removeConnection(@Path("connectionUserName") String connectionUserName);
|
||||||
|
|
||||||
|
@DELETE("api/v1/user/friends/{friendUserName}")
|
||||||
|
Call<UsersResponse> removeFriend(@Path("friendUserName") String friendUserName);
|
||||||
|
|
||||||
|
@POST("api/v1/user/friends")
|
||||||
|
Call<UsersResponse> addFriend(@Body BodyAddFriend friendUserName);
|
||||||
|
|
||||||
|
/* response
|
||||||
|
{
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
class BodyAddFriend {
|
||||||
|
String username;
|
||||||
|
public BodyAddFriend(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class UsersResponse {
|
class UsersResponse {
|
||||||
|
|
|
@ -20,4 +20,16 @@ public interface UsersProvider {
|
||||||
void retrieveError(Exception e, String message);
|
void retrieveError(Exception e, String message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void addFriend(String friendUserName, UserActionCallback callback);
|
||||||
|
|
||||||
|
void removeFriend(String friendUserName, UserActionCallback callback);
|
||||||
|
|
||||||
|
void removeConnection(String connectionUserName, UserActionCallback callback);
|
||||||
|
|
||||||
|
interface UserActionCallback {
|
||||||
|
void requestOk();
|
||||||
|
void requestError(Exception e, String message);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.ViewHo
|
||||||
User aUser = mUsers.get(position);
|
User aUser = mUsers.get(position);
|
||||||
holder.mUsername.setText(aUser.name);
|
holder.mUsername.setText(aUser.name);
|
||||||
holder.mOnlineInfo.setVisibility(aUser.online? View.VISIBLE : View.GONE);
|
holder.mOnlineInfo.setVisibility(aUser.online? View.VISIBLE : View.GONE);
|
||||||
holder.mFriendStar.setChecked(aUser.connection.equals(UsersProvider.CONNECTION_TYPE_FRIEND));
|
holder.mFriendStar.onBindSet(aUser.name, aUser.connection.equals(UsersProvider.CONNECTION_TYPE_FRIEND));
|
||||||
Uri uri = Uri.parse(aUser.imageUrl);
|
Uri uri = Uri.parse(aUser.imageUrl);
|
||||||
holder.mLocation.setText(" - unknown"); // Bring info from the API and use it here
|
holder.mLocation.setText(" - unknown"); // Bring info from the API and use it here
|
||||||
Picasso.get().load(uri).into(holder.mImage, new RoundProfilePictureCallback(holder.mImage));
|
Picasso.get().load(uri).into(holder.mImage, new RoundProfilePictureCallback(holder.mImage));
|
||||||
|
@ -107,6 +107,8 @@ public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.ViewHo
|
||||||
|
|
||||||
private ImageView mImage;
|
private ImageView mImage;
|
||||||
private boolean mChecked = false;
|
private boolean mChecked = false;
|
||||||
|
private String mUsername;
|
||||||
|
private boolean waitingChangeConfirm = false;
|
||||||
|
|
||||||
public ToggleWrapper(ImageView imageView) {
|
public ToggleWrapper(ImageView imageView) {
|
||||||
mImage = imageView;
|
mImage = imageView;
|
||||||
|
@ -123,14 +125,51 @@ public class UserListAdapter extends RecyclerView.Adapter<UserListAdapter.ViewHo
|
||||||
mChecked ? R.color.starSelectedTint : R.color.starUnselectedTint));
|
mChecked ? R.color.starSelectedTint : R.color.starUnselectedTint));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void toggle() {
|
class RollbackUICallback implements UsersProvider.UserActionCallback {
|
||||||
// TODO API CALL TO CHANGE
|
|
||||||
mChecked = !mChecked;
|
boolean previousStatus;
|
||||||
refreshUI();
|
|
||||||
|
RollbackUICallback(boolean previousStatus) {
|
||||||
|
this.previousStatus = previousStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void requestOk() {
|
||||||
|
if (!waitingChangeConfirm) return;
|
||||||
|
mImage.setClickable(true);
|
||||||
|
// nothing to do, new status was set
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void requestError(Exception e, String message) {
|
||||||
|
if (!waitingChangeConfirm) return;
|
||||||
|
// new status was not set, rolling back
|
||||||
|
mChecked = previousStatus;
|
||||||
|
mImage.setClickable(true);
|
||||||
|
refreshUI();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setChecked(boolean checked) {
|
protected void toggle() {
|
||||||
|
// TODO API CALL TO CHANGE
|
||||||
|
final boolean previousStatus = mChecked;
|
||||||
|
mChecked = !mChecked;
|
||||||
|
mImage.setClickable(false);
|
||||||
|
refreshUI();
|
||||||
|
waitingChangeConfirm = true;
|
||||||
|
if (mChecked) {
|
||||||
|
mProvider.addFriend(mUsername, new RollbackUICallback(previousStatus));
|
||||||
|
} else {
|
||||||
|
mProvider.removeFriend(mUsername, new RollbackUICallback(previousStatus));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onBindSet(String username, boolean checked) {
|
||||||
mChecked = checked;
|
mChecked = checked;
|
||||||
|
mUsername = username;
|
||||||
|
waitingChangeConfirm = false;
|
||||||
|
mImage.setClickable(true);
|
||||||
refreshUI();
|
refreshUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue