Merge branch 'master' of https://github.com/austinhuang0131/barinsta
Merge branch 'master'
12
README.md
@ -27,12 +27,12 @@ Version status: ![F-Droid](https://img.shields.io/f-droid/v/me.austinhuang.insta
|
|||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg" alt="Profile" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg" alt="Profile" width="15%"/></a>
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg" alt="Post" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg" alt="Post" width="15%"/></a>
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg" alt="Comments" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg" alt="Comments" width="15%"/></a>
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg" alt="Story" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg" alt="Story" width="15%"/></a>
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg" alt="Hashtag" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg" alt="Hashtag" width="15%"/></a>
|
||||||
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg" alt="Discover Topics" width="15%"/></a>
|
<a href="https://github.com/austinhuang0131/instagrabber/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg" alt="Discover Topics" width="15%"/></a>
|
||||||
|
|
||||||
## We need maintainers!
|
## We need maintainers!
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@ android {
|
|||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
|
|
||||||
versionCode 62
|
versionCode 63
|
||||||
versionName '19.2.1'
|
versionName '19.2.2'
|
||||||
|
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
|
@ -412,6 +412,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
showBottomViewDestinations = currentTabs.stream()
|
showBottomViewDestinations = currentTabs.stream()
|
||||||
.map(Tab::getStartDestinationFragmentId)
|
.map(Tab::getStartDestinationFragmentId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
showBottomViewDestinations.add(R.id.postViewFragment);
|
||||||
if (setDefaultTabFromSettings) {
|
if (setDefaultTabFromSettings) {
|
||||||
setSelectedTab(currentTabs);
|
setSelectedTab(currentTabs);
|
||||||
} else {
|
} else {
|
||||||
|
@ -88,7 +88,7 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr
|
|||||||
public void onHighlightClick(final HighlightModel model, final int position) {
|
public void onHighlightClick(final HighlightModel model, final int position) {
|
||||||
if (model == null) return;
|
if (model == null) return;
|
||||||
final NavDirections action = StoryListViewerFragmentDirections
|
final NavDirections action = StoryListViewerFragmentDirections
|
||||||
.actionStoryListFragmentToStoryViewerFragment(StoryViewerOptions.forStoryArchive(model.getId()));
|
.actionStoryListFragmentToStoryViewerFragment(StoryViewerOptions.forStoryArchive(position));
|
||||||
NavHostFragment.findNavController(StoryListViewerFragment.this).navigate(action);
|
NavHostFragment.findNavController(StoryListViewerFragment.this).navigate(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private HighlightsAdapter highlightsAdapter;
|
private HighlightsAdapter highlightsAdapter;
|
||||||
private HighlightsViewModel highlightsViewModel;
|
private HighlightsViewModel highlightsViewModel;
|
||||||
private MenuItem blockMenuItem, restrictMenuItem, chainingMenuItem;
|
private MenuItem blockMenuItem, restrictMenuItem, chainingMenuItem;
|
||||||
private MenuItem muteStoriesMenuItem, mutePostsMenuItem;
|
private MenuItem muteStoriesMenuItem, mutePostsMenuItem, removeFollowerMenuItem;
|
||||||
private boolean accountIsUpdated = false;
|
private boolean accountIsUpdated = false;
|
||||||
private boolean postsSetupDone = false;
|
private boolean postsSetupDone = false;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
@ -141,6 +141,23 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private long myId;
|
private long myId;
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT);
|
||||||
|
|
||||||
|
private final ServiceCallback<FriendshipChangeResponse> changeCb = new ServiceCallback<FriendshipChangeResponse>() {
|
||||||
|
@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 = () -> {
|
private final Runnable usernameSettingRunnable = () -> {
|
||||||
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
||||||
if (actionBar != null && !TextUtils.isEmpty(username)) {
|
if (actionBar != null && !TextUtils.isEmpty(username)) {
|
||||||
@ -374,8 +391,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) {
|
public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) {
|
||||||
inflater.inflate(R.menu.profile_menu, menu);
|
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);
|
blockMenuItem = menu.findItem(R.id.block);
|
||||||
final boolean isNotMe = profileModel != null && !Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie));
|
|
||||||
if (blockMenuItem != null) {
|
if (blockMenuItem != null) {
|
||||||
if (isNotMe) {
|
if (isNotMe) {
|
||||||
blockMenuItem.setVisible(true);
|
blockMenuItem.setVisible(true);
|
||||||
@ -415,6 +433,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
if (chainingMenuItem != null) {
|
if (chainingMenuItem != null) {
|
||||||
chainingMenuItem.setVisible(isNotMe && profileModel.hasChaining());
|
chainingMenuItem.setVisible(isNotMe && profileModel.hasChaining());
|
||||||
}
|
}
|
||||||
|
removeFollowerMenuItem = menu.findItem(R.id.remove_follower);
|
||||||
|
if (removeFollowerMenuItem != null) {
|
||||||
|
removeFollowerMenuItem.setVisible(isNotMe && profileModel.getFriendshipStatus().isFollowedBy());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -445,37 +467,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
if (item.getItemId() == R.id.block) {
|
if (item.getItemId() == R.id.block) {
|
||||||
if (!isLoggedIn) return false;
|
if (!isLoggedIn) return false;
|
||||||
if (profileModel.getFriendshipStatus().isBlocking()) {
|
friendshipService.changeBlock(profileModel.getFriendshipStatus().isBlocking(), profileModel.getPk(), changeCb);
|
||||||
friendshipService.unblock(
|
|
||||||
profileModel.getPk(),
|
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
|
||||||
@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<FriendshipChangeResponse>() {
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (item.getItemId() == R.id.chaining) {
|
if (item.getItemId() == R.id.chaining) {
|
||||||
@ -493,18 +485,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
profileModel.getFriendshipStatus().isMutingReel(),
|
profileModel.getFriendshipStatus().isMutingReel(),
|
||||||
profileModel.getPk(),
|
profileModel.getPk(),
|
||||||
true,
|
true,
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
changeCb);
|
||||||
@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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (item.getItemId() == R.id.mute_posts) {
|
if (item.getItemId() == R.id.mute_posts) {
|
||||||
@ -514,18 +495,12 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
profileModel.getFriendshipStatus().isMuting(),
|
profileModel.getFriendshipStatus().isMuting(),
|
||||||
profileModel.getPk(),
|
profileModel.getPk(),
|
||||||
false,
|
false,
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
changeCb);
|
||||||
@Override
|
return true;
|
||||||
public void onSuccess(final FriendshipChangeResponse result) {
|
}
|
||||||
Log.d(TAG, action + " success: " + result);
|
if (item.getItemId() == R.id.remove_follower) {
|
||||||
fetchProfileDetails();
|
if (!isLoggedIn) return false;
|
||||||
}
|
friendshipService.removeFollower(profileModel.getPk(), changeCb);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(final Throwable t) {
|
|
||||||
Log.e(TAG, "Error while performing " + action, t);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@ -973,6 +948,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
profileDetailsBinding.mainStatus.setText(R.string.status_mutual);
|
profileDetailsBinding.mainStatus.setText(R.string.status_mutual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else profileDetailsBinding.mainStatus.setVisibility(View.GONE);
|
||||||
if (profileModel.getFriendshipStatus().isFollowing()) {
|
if (profileModel.getFriendshipStatus().isFollowing()) {
|
||||||
profileDetailsBinding.btnFollow.setText(R.string.unfollow);
|
profileDetailsBinding.btnFollow.setText(R.string.unfollow);
|
||||||
profileDetailsBinding.btnFollow.setChipIconResource(R.drawable.ic_outline_person_add_disabled_24);
|
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) {
|
if (chainingMenuItem != null) {
|
||||||
chainingMenuItem.setVisible(profileModel.hasChaining());
|
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)
|
.setTitle(R.string.priv_acc)
|
||||||
.setMessage(R.string.priv_acc_confirm)
|
.setMessage(R.string.priv_acc_confirm)
|
||||||
.setPositiveButton(R.string.confirm, (d, w) ->
|
.setPositiveButton(R.string.confirm, (d, w) ->
|
||||||
friendshipService.unfollow(
|
friendshipService.unfollow(profileModel.getPk(), changeCb))
|
||||||
profileModel.getPk(),
|
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
} else if (profileModel.getFriendshipStatus().isFollowing() || profileModel.getFriendshipStatus().isOutgoingRequest()) {
|
} else if (profileModel.getFriendshipStatus().isFollowing() || profileModel.getFriendshipStatus().isOutgoingRequest()) {
|
||||||
friendshipService.unfollow(
|
friendshipService.unfollow(profileModel.getPk(), changeCb);
|
||||||
profileModel.getPk(),
|
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
friendshipService.follow(
|
friendshipService.follow(profileModel.getPk(), changeCb);
|
||||||
profileModel.getPk(),
|
|
||||||
new ServiceCallback<FriendshipChangeResponse>() {
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
profileDetailsBinding.btnSaved.setOnClickListener(v -> {
|
profileDetailsBinding.btnSaved.setOnClickListener(v -> {
|
||||||
|
@ -1597,7 +1597,7 @@ public final class ThreadManager {
|
|||||||
public LiveData<Resource<Object>> blockUser(final User user) {
|
public LiveData<Resource<Object>> blockUser(final User user) {
|
||||||
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
||||||
if (user == null) return data;
|
if (user == null) return data;
|
||||||
friendshipService.block(user.getPk(), new ServiceCallback<FriendshipChangeResponse>() {
|
friendshipService.changeBlock(false, user.getPk(), new ServiceCallback<FriendshipChangeResponse>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(final FriendshipChangeResponse result) {
|
public void onSuccess(final FriendshipChangeResponse result) {
|
||||||
refreshChats();
|
refreshChats();
|
||||||
@ -1615,7 +1615,7 @@ public final class ThreadManager {
|
|||||||
public LiveData<Resource<Object>> unblockUser(final User user) {
|
public LiveData<Resource<Object>> unblockUser(final User user) {
|
||||||
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
||||||
if (user == null) return data;
|
if (user == null) return data;
|
||||||
friendshipService.unblock(user.getPk(), new ServiceCallback<FriendshipChangeResponse>() {
|
friendshipService.changeBlock(true, user.getPk(), new ServiceCallback<FriendshipChangeResponse>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(final FriendshipChangeResponse result) {
|
public void onSuccess(final FriendshipChangeResponse result) {
|
||||||
refreshChats();
|
refreshChats();
|
||||||
|
@ -61,6 +61,10 @@ public class StoryViewerOptions implements Serializable {
|
|||||||
return new StoryViewerOptions(id, Type.STORY_ARCHIVE);
|
return new StoryViewerOptions(id, Type.STORY_ARCHIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static StoryViewerOptions forStoryArchive(final int position) {
|
||||||
|
return new StoryViewerOptions(position, Type.STORY_ARCHIVE);
|
||||||
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -82,8 +82,10 @@ public final class LocaleUtils {
|
|||||||
case 20: return "ja";
|
case 20: return "ja";
|
||||||
case 21: return "el";
|
case 21: return "el";
|
||||||
case 22: return "eu";
|
case 22: return "eu";
|
||||||
|
case 23: return "sv";
|
||||||
|
case 24: return "ko";
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,14 +78,10 @@ public class FriendshipService extends BaseService {
|
|||||||
change("destroy", targetUserId, callback);
|
change("destroy", targetUserId, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void block(final long targetUserId,
|
public void changeBlock(final boolean unblock,
|
||||||
final ServiceCallback<FriendshipChangeResponse> callback) {
|
final long targetUserId,
|
||||||
change("block", targetUserId, callback);
|
final ServiceCallback<FriendshipChangeResponse> callback) {
|
||||||
}
|
change(unblock ? "unblock" : "block", targetUserId, callback);
|
||||||
|
|
||||||
public void unblock(final long targetUserId,
|
|
||||||
final ServiceCallback<FriendshipChangeResponse> callback) {
|
|
||||||
change("unblock", targetUserId, callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toggleRestrict(final long targetUserId,
|
public void toggleRestrict(final long targetUserId,
|
||||||
@ -126,6 +122,11 @@ public class FriendshipService extends BaseService {
|
|||||||
change("ignore", targetUserId, callback);
|
change("ignore", targetUserId, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeFollower(final long targetUserId,
|
||||||
|
final ServiceCallback<FriendshipChangeResponse> callback) {
|
||||||
|
change("remove_follower", targetUserId, callback);
|
||||||
|
}
|
||||||
|
|
||||||
private void change(final String action,
|
private void change(final String action,
|
||||||
final long targetUserId,
|
final long targetUserId,
|
||||||
final ServiceCallback<FriendshipChangeResponse> callback) {
|
final ServiceCallback<FriendshipChangeResponse> callback) {
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?colorSurface"
|
android:background="?colorSurface"
|
||||||
|
android:paddingBottom="?attr/actionBarSize"
|
||||||
tools:context=".fragments.PostViewV2Fragment">
|
tools:context=".fragments.PostViewV2Fragment">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
android:id="@+id/swipeRefreshLayout"
|
android:id="@+id/swipeRefreshLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:paddingBottom="?attr/actionBarSize"
|
||||||
tools:context=".fragments.NotificationsViewerFragment">
|
tools:context=".fragments.NotificationsViewerFragment">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
android:title="@string/layout"
|
android:title="@string/layout"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/chaining"
|
||||||
|
android:title="@string/action_ayml"
|
||||||
|
android:visible="false"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/block"
|
android:id="@+id/block"
|
||||||
android:icon="@drawable/ic_block_24"
|
android:icon="@drawable/ic_block_24"
|
||||||
@ -22,8 +28,9 @@
|
|||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/chaining"
|
android:id="@+id/remove_follower"
|
||||||
android:title="@string/action_ayml"
|
android:icon="@drawable/ic_block_24"
|
||||||
|
android:title="@string/remove_follower"
|
||||||
android:visible="false"
|
android:visible="false"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
<item translatable="false">日本語</item>
|
<item translatable="false">日本語</item>
|
||||||
<item translatable="false">Ελληνικά</item>
|
<item translatable="false">Ελληνικά</item>
|
||||||
<item translatable="false">Euskara</item>
|
<item translatable="false">Euskara</item>
|
||||||
|
<item translatable="false">Svenska</item>
|
||||||
|
<item translatable="false">한국어</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="theme_presets">
|
<string-array name="theme_presets">
|
||||||
<item>Auto / Follow System</item>
|
<item>Auto / Follow System</item>
|
||||||
|
@ -126,6 +126,7 @@
|
|||||||
<string name="mute_posts">Mute posts</string>
|
<string name="mute_posts">Mute posts</string>
|
||||||
<string name="unmute_stories">Unmute stories</string>
|
<string name="unmute_stories">Unmute stories</string>
|
||||||
<string name="unmute_posts">Unmute posts</string>
|
<string name="unmute_posts">Unmute posts</string>
|
||||||
|
<string name="remove_follower">Remove follower</string>
|
||||||
<string name="bio_copy">Copy bio</string>
|
<string name="bio_copy">Copy bio</string>
|
||||||
<string name="bio_translate">Translate bio</string>
|
<string name="bio_translate">Translate bio</string>
|
||||||
<string name="status_mutual">Mutual</string>
|
<string name="status_mutual">Mutual</string>
|
||||||
@ -504,7 +505,7 @@
|
|||||||
<string name="recent">Recent</string>
|
<string name="recent">Recent</string>
|
||||||
<string name="clear">Clear</string>
|
<string name="clear">Clear</string>
|
||||||
<string name="no_external_map_app">No Map app found!</string>
|
<string name="no_external_map_app">No Map app found!</string>
|
||||||
<string name="click_to_show_full">Click to view full count</string>
|
<string name="click_to_show_full">Click to show full like count</string>
|
||||||
<string name="no_profile_pic_found">No profile pic found!</string>
|
<string name="no_profile_pic_found">No profile pic found!</string>
|
||||||
<string name="swipe_up_confirmation">Are you sure you want to open this link?</string>
|
<string name="swipe_up_confirmation">Are you sure you want to open this link?</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
3
fastlane/metadata/android/en-US/changelogs/63.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Search history, new comments/posts layout, and various improvements!
|
||||||
|
|
||||||
|
For details see https://github.com/austinhuang0131/barinsta/releases/tag/v19.2.2
|
@ -1,6 +1,6 @@
|
|||||||
If you don't upload posts or stories on Instagram, but can't get rid of it because of people and contents, you now have an alternative: Barinsta is a beautiful client that allows you to browse and interact with Instagram, while giving you more options to control your data.
|
If you don't upload posts or stories on Instagram, but can't get rid of it because of people and contents, you now have an alternative: Barinsta is a beautiful client that allows you to browse and interact with Instagram, while giving you more options to control your data.
|
||||||
|
|
||||||
* For those not having an account, you can access public profiles/hashtags/locations!
|
* For those not having an account, you can access public profiles/hashtags/locations (depends on availability)!
|
||||||
* For those logged in, Barinsta can achieve most viewing and interaction features, with extra features such as downloading posts/stories/avatars, copying texts, comparing followers/following, and more!
|
* For those logged in, Barinsta can achieve most viewing and interaction features, with extra features such as downloading posts/stories/avatars, copying texts, comparing followers/following, and more!
|
||||||
|
|
||||||
Extra merits:
|
Extra merits:
|
||||||
|
Before Width: | Height: | Size: 771 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 592 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
Normal file
After Width: | Height: | Size: 638 KiB |
Before Width: | Height: | Size: 57 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
Normal file
After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 61 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
Normal file
After Width: | Height: | Size: 248 KiB |
Before Width: | Height: | Size: 1.2 MiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 143 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
Normal file
After Width: | Height: | Size: 2.0 MiB |