From ec9e28bc09f80b974a6aa8fd0e3ba5fbf4c21673 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Fri, 21 May 2021 12:23:24 -0400 Subject: [PATCH] close #1267 and also simplify FriendshipService --- .../fragments/main/ProfileFragment.java | 138 +++++------------- .../instagrabber/managers/ThreadManager.java | 4 +- .../webservices/FriendshipService.java | 17 ++- app/src/main/res/menu/profile_menu.xml | 11 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 60 insertions(+), 111 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index ad59cf06..1dca8751 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -132,7 +132,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe private HighlightsAdapter highlightsAdapter; private HighlightsViewModel highlightsViewModel; private MenuItem blockMenuItem, restrictMenuItem, chainingMenuItem; - private MenuItem muteStoriesMenuItem, mutePostsMenuItem; + private MenuItem muteStoriesMenuItem, mutePostsMenuItem, removeFollowerMenuItem; private boolean accountIsUpdated = false; private boolean postsSetupDone = false; private Set selectedFeedModels; @@ -141,6 +141,23 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe private long myId; private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT); + private final ServiceCallback changeCb = new ServiceCallback() { + @Override + public void onSuccess(final FriendshipChangeResponse result) { + if (result.getFriendshipStatus() != null) { + profileModel.setFriendshipStatus(result.getFriendshipStatus()); + setProfileDetails(); + return; + } + fetchProfileDetails(); + } + + @Override + public void onFailure(final Throwable t) { + Log.e(TAG, "Error editing relationship", t); + } + }; + private final Runnable usernameSettingRunnable = () -> { final ActionBar actionBar = fragmentActivity.getSupportActionBar(); if (actionBar != null && !TextUtils.isEmpty(username)) { @@ -374,8 +391,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe @Override public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { inflater.inflate(R.menu.profile_menu, menu); + final boolean isNotMe = profileModel != null && isLoggedIn + && !Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie)); blockMenuItem = menu.findItem(R.id.block); - final boolean isNotMe = profileModel != null && !Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie)); if (blockMenuItem != null) { if (isNotMe) { blockMenuItem.setVisible(true); @@ -415,6 +433,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe if (chainingMenuItem != null) { chainingMenuItem.setVisible(isNotMe && profileModel.hasChaining()); } + removeFollowerMenuItem = menu.findItem(R.id.remove_follower); + if (removeFollowerMenuItem != null) { + removeFollowerMenuItem.setVisible(isNotMe && profileModel.getFriendshipStatus().isFollowedBy()); + } } @Override @@ -445,37 +467,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } if (item.getItemId() == R.id.block) { if (!isLoggedIn) return false; - if (profileModel.getFriendshipStatus().isBlocking()) { - friendshipService.unblock( - profileModel.getPk(), - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - Log.d(TAG, "Unblock success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error unblocking", t); - } - }); - return true; - } - friendshipService.block( - profileModel.getPk(), - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - Log.d(TAG, "Block success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error blocking", t); - } - }); + friendshipService.changeBlock(profileModel.getFriendshipStatus().isBlocking(), profileModel.getPk(), changeCb); return true; } if (item.getItemId() == R.id.chaining) { @@ -493,18 +485,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe profileModel.getFriendshipStatus().isMutingReel(), profileModel.getPk(), true, - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - Log.d(TAG, action + " success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error while performing " + action, t); - } - }); + changeCb); return true; } if (item.getItemId() == R.id.mute_posts) { @@ -514,18 +495,12 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe profileModel.getFriendshipStatus().isMuting(), profileModel.getPk(), false, - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - Log.d(TAG, action + " success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error while performing " + action, t); - } - }); + changeCb); + return true; + } + if (item.getItemId() == R.id.remove_follower) { + if (!isLoggedIn) return false; + friendshipService.removeFollower(profileModel.getPk(), changeCb); return true; } return super.onOptionsItemSelected(item); @@ -973,6 +948,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe profileDetailsBinding.mainStatus.setText(R.string.status_mutual); } } + else profileDetailsBinding.mainStatus.setVisibility(View.GONE); if (profileModel.getFriendshipStatus().isFollowing()) { profileDetailsBinding.btnFollow.setText(R.string.unfollow); profileDetailsBinding.btnFollow.setChipIconResource(R.drawable.ic_outline_person_add_disabled_24); @@ -1002,6 +978,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe if (chainingMenuItem != null) { chainingMenuItem.setVisible(profileModel.hasChaining()); } + if (removeFollowerMenuItem != null) { + removeFollowerMenuItem.setVisible(profileModel.getFriendshipStatus().isFollowedBy()); + } } } @@ -1069,52 +1048,13 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe .setTitle(R.string.priv_acc) .setMessage(R.string.priv_acc_confirm) .setPositiveButton(R.string.confirm, (d, w) -> - friendshipService.unfollow( - profileModel.getPk(), - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - // Log.d(TAG, "Unfollow success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error unfollowing", t); - } - })) + friendshipService.unfollow(profileModel.getPk(), changeCb)) .setNegativeButton(R.string.cancel, null) .show(); } else if (profileModel.getFriendshipStatus().isFollowing() || profileModel.getFriendshipStatus().isOutgoingRequest()) { - friendshipService.unfollow( - profileModel.getPk(), - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - // Log.d(TAG, "Unfollow success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error unfollowing", t); - } - }); + friendshipService.unfollow(profileModel.getPk(), changeCb); } else { - friendshipService.follow( - profileModel.getPk(), - new ServiceCallback() { - @Override - public void onSuccess(final FriendshipChangeResponse result) { - // Log.d(TAG, "Follow success: " + result); - fetchProfileDetails(); - } - - @Override - public void onFailure(final Throwable t) { - Log.e(TAG, "Error following", t); - } - }); + friendshipService.follow(profileModel.getPk(), changeCb); } }); profileDetailsBinding.btnSaved.setOnClickListener(v -> { diff --git a/app/src/main/java/awais/instagrabber/managers/ThreadManager.java b/app/src/main/java/awais/instagrabber/managers/ThreadManager.java index 6a81e3dc..a1e55dc7 100644 --- a/app/src/main/java/awais/instagrabber/managers/ThreadManager.java +++ b/app/src/main/java/awais/instagrabber/managers/ThreadManager.java @@ -1597,7 +1597,7 @@ public final class ThreadManager { public LiveData> blockUser(final User user) { final MutableLiveData> data = new MutableLiveData<>(); if (user == null) return data; - friendshipService.block(user.getPk(), new ServiceCallback() { + friendshipService.changeBlock(false, user.getPk(), new ServiceCallback() { @Override public void onSuccess(final FriendshipChangeResponse result) { refreshChats(); @@ -1615,7 +1615,7 @@ public final class ThreadManager { public LiveData> unblockUser(final User user) { final MutableLiveData> data = new MutableLiveData<>(); if (user == null) return data; - friendshipService.unblock(user.getPk(), new ServiceCallback() { + friendshipService.changeBlock(true, user.getPk(), new ServiceCallback() { @Override public void onSuccess(final FriendshipChangeResponse result) { refreshChats(); diff --git a/app/src/main/java/awais/instagrabber/webservices/FriendshipService.java b/app/src/main/java/awais/instagrabber/webservices/FriendshipService.java index ced49305..c363a865 100644 --- a/app/src/main/java/awais/instagrabber/webservices/FriendshipService.java +++ b/app/src/main/java/awais/instagrabber/webservices/FriendshipService.java @@ -78,14 +78,10 @@ public class FriendshipService extends BaseService { change("destroy", targetUserId, callback); } - public void block(final long targetUserId, - final ServiceCallback callback) { - change("block", targetUserId, callback); - } - - public void unblock(final long targetUserId, - final ServiceCallback callback) { - change("unblock", targetUserId, callback); + public void changeBlock(final boolean unblock, + final long targetUserId, + final ServiceCallback callback) { + change(unblock ? "unblock" : "block", targetUserId, callback); } public void toggleRestrict(final long targetUserId, @@ -126,6 +122,11 @@ public class FriendshipService extends BaseService { change("ignore", targetUserId, callback); } + public void removeFollower(final long targetUserId, + final ServiceCallback callback) { + change("remove_follower", targetUserId, callback); + } + private void change(final String action, final long targetUserId, final ServiceCallback callback) { diff --git a/app/src/main/res/menu/profile_menu.xml b/app/src/main/res/menu/profile_menu.xml index d8950667..337188db 100644 --- a/app/src/main/res/menu/profile_menu.xml +++ b/app/src/main/res/menu/profile_menu.xml @@ -7,6 +7,12 @@ android:title="@string/layout" app:showAsAction="never" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a841598..0d80ebb9 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,6 +126,7 @@ Mute posts Unmute stories Unmute posts + Remove follower Copy bio Translate bio Mutual