Browse Source

Merge branch 'master' of https://github.com/austinhuang0131/barinsta

Merge branch 'master'
renovate/org.robolectric-robolectric-4.x
Ammar Githam 4 years ago
parent
commit
0c7fb20b2b
  1. 12
      README.md
  2. 4
      app/build.gradle
  3. 1
      app/src/main/java/awais/instagrabber/activities/MainActivity.java
  4. 2
      app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java
  5. 138
      app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java
  6. 4
      app/src/main/java/awais/instagrabber/managers/ThreadManager.java
  7. 4
      app/src/main/java/awais/instagrabber/repositories/requests/StoryViewerOptions.java
  8. 4
      app/src/main/java/awais/instagrabber/utils/LocaleUtils.java
  9. 17
      app/src/main/java/awais/instagrabber/webservices/FriendshipService.java
  10. 1
      app/src/main/res/layout/dialog_post_view.xml
  11. 1
      app/src/main/res/layout/fragment_notifications_viewer.xml
  12. 11
      app/src/main/res/menu/profile_menu.xml
  13. 2
      app/src/main/res/values/arrays.xml
  14. 3
      app/src/main/res/values/strings.xml
  15. 3
      fastlane/metadata/android/en-US/changelogs/63.txt
  16. 2
      fastlane/metadata/android/en-US/full_description.txt
  17. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg
  18. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
  19. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg
  20. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
  21. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg
  22. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
  23. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg
  24. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
  25. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg
  26. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
  27. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg
  28. BIN
      fastlane/metadata/android/en-US/images/phoneScreenshots/6.png

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/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/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/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/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/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/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.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.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.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.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.png"><img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg" alt="Discover Topics" width="15%"/></a>
## We need maintainers! ## We need maintainers!

4
app/build.gradle

@ -21,8 +21,8 @@ android {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 62
versionName '19.2.1'
versionCode 63
versionName '19.2.2'
multiDexEnabled true multiDexEnabled true

1
app/src/main/java/awais/instagrabber/activities/MainActivity.java

@ -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 {

2
app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java

@ -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);
} }

138
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 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.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);
}
});
friendshipService.changeBlock(profileModel.getFriendshipStatus().isBlocking(), profileModel.getPk(), changeCb);
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>() {
@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; 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>() {
@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 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(
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);
}
}))
friendshipService.unfollow(profileModel.getPk(), changeCb))
.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(
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);
}
});
friendshipService.unfollow(profileModel.getPk(), changeCb);
} else { } else {
friendshipService.follow(
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);
}
});
friendshipService.follow(profileModel.getPk(), changeCb);
} }
}); });
profileDetailsBinding.btnSaved.setOnClickListener(v -> { profileDetailsBinding.btnSaved.setOnClickListener(v -> {

4
app/src/main/java/awais/instagrabber/managers/ThreadManager.java

@ -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();

4
app/src/main/java/awais/instagrabber/repositories/requests/StoryViewerOptions.java

@ -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;
} }

4
app/src/main/java/awais/instagrabber/utils/LocaleUtils.java

@ -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;
} }
}
}

17
app/src/main/java/awais/instagrabber/webservices/FriendshipService.java

@ -78,14 +78,10 @@ public class FriendshipService extends BaseService {
change("destroy", targetUserId, callback); change("destroy", targetUserId, callback);
} }
public void block(final long targetUserId,
final ServiceCallback<FriendshipChangeResponse> callback) {
change("block", targetUserId, callback);
}
public void unblock(final long targetUserId,
final ServiceCallback<FriendshipChangeResponse> callback) {
change("unblock", targetUserId, callback);
public void changeBlock(final boolean unblock,
final long targetUserId,
final ServiceCallback<FriendshipChangeResponse> callback) {
change(unblock ? "unblock" : "block", 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) {

1
app/src/main/res/layout/dialog_post_view.xml

@ -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

1
app/src/main/res/layout/fragment_notifications_viewer.xml

@ -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

11
app/src/main/res/menu/profile_menu.xml

@ -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:title="@string/action_ayml"
android:id="@+id/remove_follower"
android:icon="@drawable/ic_block_24"
android:title="@string/remove_follower"
android:visible="false" android:visible="false"
app:showAsAction="never" /> app:showAsAction="never" />

2
app/src/main/res/values/arrays.xml

@ -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>

3
app/src/main/res/values/strings.xml

@ -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

@ -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

2
fastlane/metadata/android/en-US/full_description.txt

@ -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:

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg

Before

Width: 1080  |  Height: 1920  |  Size: 771 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png

After

Width: 1080  |  Height: 1920  |  Size: 1.1 MiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg

Before

Width: 1080  |  Height: 1920  |  Size: 592 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/2.png

After

Width: 1080  |  Height: 1920  |  Size: 638 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg

Before

Width: 720  |  Height: 1280  |  Size: 57 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png

After

Width: 1080  |  Height: 1920  |  Size: 109 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg

Before

Width: 720  |  Height: 1280  |  Size: 61 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png

After

Width: 1080  |  Height: 1920  |  Size: 248 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg

Before

Width: 1080  |  Height: 1920  |  Size: 1.2 MiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png

After

Width: 1080  |  Height: 1920  |  Size: 2.4 MiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg

Before

Width: 720  |  Height: 1280  |  Size: 143 KiB

BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/6.png

After

Width: 1080  |  Height: 1920  |  Size: 2.0 MiB

Loading…
Cancel
Save