From 28b74a6975fd63228980cccc1f422ec52b767dfc Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Sun, 7 Feb 2021 17:45:16 -0500 Subject: [PATCH] #512, #575, #583, #656, #665 --- app/build.gradle | 2 +- .../instagrabber/asyncs/ProfileFetcher.java | 10 ++- .../dialogs/ProfilePicDialogFragment.java | 5 +- .../fragments/CollectionPostsFragment.java | 10 ++- .../fragments/CommentsViewerFragment.java | 20 ++++- .../fragments/FollowViewerFragment.java | 86 ++++--------------- .../fragments/HashTagFragment.java | 3 +- .../fragments/LocationFragment.java | 3 +- .../fragments/main/ProfileFragment.java | 30 +++++-- .../settings/MorePreferencesFragment.java | 7 +- .../instagrabber/webservices/UserService.java | 2 +- app/src/main/res/values/strings.xml | 5 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 14 files changed, 88 insertions(+), 101 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8083b4e2..7db7b24c 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ dependencies { def nav_version = '2.3.2' def exoplayer_version = '2.12.0' - implementation 'com.google.android.material:material:1.3.0-beta01' + implementation 'com.google.android.material:material:1.3.0' implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer_version" diff --git a/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java index 46559dfb..5da3b5aa 100755 --- a/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java @@ -15,7 +15,7 @@ import awais.instagrabber.webservices.GraphQLService; import awais.instagrabber.webservices.ServiceCallback; import awais.instagrabber.webservices.UserService; -public final class ProfileFetcher extends AsyncTask { +public final class ProfileFetcher extends AsyncTask { private static final String TAG = ProfileFetcher.class.getSimpleName(); private final UserService userService; private final GraphQLService graphQLService; @@ -36,12 +36,11 @@ public final class ProfileFetcher extends AsyncTask { @Nullable @Override - protected String doInBackground(final Void... voids) { + protected Void doInBackground(final Void... voids) { if (isLoggedIn) { userService.getUsernameInfo(userName, new ServiceCallback() { @Override public void onSuccess(final User user) { - Log.d("austin_debug", user.getUsername() + " " + userName); userService.getUserFriendship(user.getPk(), new ServiceCallback() { @Override public void onSuccess(final FriendshipStatus status) { @@ -52,6 +51,7 @@ public final class ProfileFetcher extends AsyncTask { @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error", t); + fetchListener.onFailure(t); } }); } @@ -59,6 +59,7 @@ public final class ProfileFetcher extends AsyncTask { @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error", t); + fetchListener.onFailure(t); } }); } @@ -72,10 +73,11 @@ public final class ProfileFetcher extends AsyncTask { @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error", t); + fetchListener.onFailure(t); } }); } - return "yeah"; + return null; } @Override diff --git a/app/src/main/java/awais/instagrabber/dialogs/ProfilePicDialogFragment.java b/app/src/main/java/awais/instagrabber/dialogs/ProfilePicDialogFragment.java index dbc7d223..09862f49 100644 --- a/app/src/main/java/awais/instagrabber/dialogs/ProfilePicDialogFragment.java +++ b/app/src/main/java/awais/instagrabber/dialogs/ProfilePicDialogFragment.java @@ -127,7 +127,10 @@ public class ProfilePicDialogFragment extends DialogFragment { @Override public void onFailure(final Throwable t) { final Context context = getContext(); - Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} getDialog().dismiss(); } }); diff --git a/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java b/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java index ee154b63..bfedd70e 100644 --- a/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java @@ -307,7 +307,10 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error deleting collection", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); }) @@ -334,7 +337,10 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error editing collection", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); }) diff --git a/app/src/main/java/awais/instagrabber/fragments/CommentsViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/CommentsViewerFragment.java index 18cc9762..d40f8608 100644 --- a/app/src/main/java/awais/instagrabber/fragments/CommentsViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/CommentsViewerFragment.java @@ -371,7 +371,10 @@ public final class CommentsViewerFragment extends BottomSheetDialogFragment impl @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error liking comment", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); return; @@ -389,7 +392,10 @@ public final class CommentsViewerFragment extends BottomSheetDialogFragment impl @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error unliking comment", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); break; @@ -411,7 +417,10 @@ public final class CommentsViewerFragment extends BottomSheetDialogFragment impl @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error translating comment", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); break; @@ -432,7 +441,10 @@ public final class CommentsViewerFragment extends BottomSheetDialogFragment impl @Override public void onFailure(final Throwable t) { Log.e(TAG, "Error deleting comment", t); - Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} } }); break; diff --git a/app/src/main/java/awais/instagrabber/fragments/FollowViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/FollowViewerFragment.java index 115f5849..8112d497 100644 --- a/app/src/main/java/awais/instagrabber/fragments/FollowViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/FollowViewerFragment.java @@ -44,7 +44,7 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh private final ArrayList followersModels = new ArrayList<>(); private final ArrayList allFollowing = new ArrayList<>(); - private boolean moreAvailable = true, isFollowersList, isCompare = false, loading = false, shouldRefresh = true; + private boolean moreAvailable = true, isFollowersList, isCompare = false, loading = false, shouldRefresh = true, searching = false; private long profileId; private String username; private String namePost; @@ -65,7 +65,7 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh final ServiceCallback followingFetchCb = new ServiceCallback() { @Override public void onSuccess(final FriendshipListFetchResponse result) { - if (result != null) { + if (result != null && isCompare) { followingModels.addAll(result.getItems()); if (!isFollowersList) followModels.addAll(result.getItems()); if (result.isMoreAvailable()) { @@ -78,7 +78,7 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh if (!isFollowersList) moreAvailable = false; showCompare(); } - } else binding.swipeRefreshLayout.setRefreshing(false); + } else if (isCompare) binding.swipeRefreshLayout.setRefreshing(false); } @Override @@ -94,7 +94,7 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh final ServiceCallback followersFetchCb = new ServiceCallback() { @Override public void onSuccess(final FriendshipListFetchResponse result) { - if (result != null) { + if (result != null && isCompare) { followersModels.addAll(result.getItems()); if (isFollowersList) followModels.addAll(result.getItems()); if (result.isMoreAvailable()) { @@ -107,7 +107,7 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh if (isFollowersList) moreAvailable = false; showCompare(); } - } + } else if (isCompare) binding.swipeRefreshLayout.setRefreshing(false); } @Override @@ -237,12 +237,12 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh }; layoutManager = new LinearLayoutManager(getContext()); lazyLoader = new RecyclerLazyLoader(layoutManager, (page, totalItemsCount) -> { - if (!TextUtils.isEmpty(endCursor)) { + if (!TextUtils.isEmpty(endCursor) && !searching) { binding.swipeRefreshLayout.setRefreshing(true); layoutManager.setStackFromEnd(true); friendshipService.getList(isFollowersList, profileId, endCursor, cb); + endCursor = null; } - endCursor = null; }); binding.rvFollow.addOnScrollListener(lazyLoader); binding.rvFollow.setLayoutManager(layoutManager); @@ -303,68 +303,6 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh final SearchView searchView = (SearchView) menuSearch.getActionView(); searchView.setQueryHint(getResources().getString(R.string.action_search)); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - // private final Filter filter = new Filter() { - // private final ArrayList searchFollowModels = new ArrayList<>(followModels.size() / 2); - // private final ArrayList searchFollowingModels = new ArrayList<>(followingModels.size() / 2); - // private final ArrayList searchFollowersModels = new ArrayList<>(followersModels.size() / 2); - // private final ArrayList searchAllFollowing = new ArrayList<>(allFollowing.size() / 2); - // - // @Nullable - // @Override - // protected FilterResults performFiltering(@NonNull final CharSequence constraint) { - // searchFollowModels.clear(); - // searchFollowingModels.clear(); - // searchFollowersModels.clear(); - // searchAllFollowing.clear(); - // - // final int followModelsSize = followModels.size(); - // final int followingModelsSize = followingModels.size(); - // final int followersModelsSize = followersModels.size(); - // final int allFollowingSize = allFollowing.size(); - // - // int maxSize = followModelsSize; - // if (maxSize < followingModelsSize) maxSize = followingModelsSize; - // if (maxSize < followersModelsSize) maxSize = followersModelsSize; - // if (maxSize < allFollowingSize) maxSize = allFollowingSize; - // - // final String query = constraint.toString().toLowerCase(); - // FollowModel followModel; - // while (maxSize != -1) { - // if (maxSize < followModelsSize) { - // followModel = followModels.get(maxSize); - // if (Utils.hasKey(query, followModel.getUsername(), followModel.getFullName())) - // searchFollowModels.add(followModel); - // } - // - // if (maxSize < followingModelsSize) { - // followModel = followingModels.get(maxSize); - // if (Utils.hasKey(query, followModel.getUsername(), followModel.getFullName())) - // searchFollowingModels.add(followModel); - // } - // - // if (maxSize < followersModelsSize) { - // followModel = followersModels.get(maxSize); - // if (Utils.hasKey(query, followModel.getUsername(), followModel.getFullName())) - // searchFollowersModels.add(followModel); - // } - // - // if (maxSize < allFollowingSize) { - // followModel = allFollowing.get(maxSize); - // if (Utils.hasKey(query, followModel.getUsername(), followModel.getFullName())) - // searchAllFollowing.add(followModel); - // } - // - // --maxSize; - // } - // - // return null; - // } - // - // @Override - // protected void publishResults(final CharSequence query, final FilterResults results) { - // refreshAdapter(searchFollowModels, searchFollowingModels, searchFollowersModels, searchAllFollowing); - // } - // }; @Override public boolean onQueryTextSubmit(final String query) { @@ -373,9 +311,15 @@ public final class FollowViewerFragment extends Fragment implements SwipeRefresh @Override public boolean onQueryTextChange(final String query) { - // if (Utils.isEmpty(query)) refreshAdapter(followModels, followingModels, followersModels, allFollowing); + if (TextUtils.isEmpty(query)) { + searching = false; + // refreshAdapter(followModels, followingModels, followersModels, allFollowing); + } // else filter.filter(query.toLowerCase()); - if (adapter != null) adapter.getFilter().filter(query); + if (adapter != null) { + searching = true; + adapter.getFilter().filter(query); + } return true; } }); diff --git a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java index ce3b1cf9..845da1c6 100644 --- a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java @@ -376,7 +376,8 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe final Context context = getContext(); if (context == null) return; if (hashtagModel == null) { - Toast.makeText(context, R.string.error_loading_profile, Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.error_loading_hashtag, Toast.LENGTH_SHORT).show(); + binding.swipeRefreshLayout.setEnabled(false); return; } setTitle(); diff --git a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java index 67b7e5d7..49e23159 100644 --- a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java @@ -385,7 +385,8 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR if (locationModel == null) { final Context context = getContext(); if (context == null) return; - Toast.makeText(context, R.string.error_loading_profile, Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.error_loading_location, Toast.LENGTH_SHORT).show(); + binding.swipeRefreshLayout.setEnabled(false); return; } setTitle(); 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 d0567bfb..55e52f1b 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -538,10 +538,26 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe private void fetchProfileDetails() { if (TextUtils.isEmpty(username)) return; - new ProfileFetcher(username.trim().substring(1), isLoggedIn, profileModel -> { - if (getContext() == null) return; - this.profileModel = profileModel; - setProfileDetails(); + new ProfileFetcher(username.trim().substring(1), isLoggedIn, new FetchListener() { + @Override + public void onResult(final User user) { + if (getContext() == null) return; + profileModel = user; + setProfileDetails(); + } + + @Override + public void onFailure(final Throwable t) { + Log.e(TAG, "Error fetching profile", t); + final Context context = getContext(); + try { + if (t == null) Toast.makeText(context, + isLoggedIn ? R.string.error_loading_profile_loggedin : R.string.error_loading_profile, + Toast.LENGTH_LONG).show(); + else Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch(final Throwable e) {} + } }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } @@ -902,7 +918,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe @Override public void onSuccess(final FriendshipChangeResponse result) { // Log.d(TAG, "Unfollow success: " + result); - onRefresh(); + fetchProfileDetails(); } @Override @@ -920,7 +936,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe @Override public void onSuccess(final FriendshipChangeResponse result) { // Log.d(TAG, "Unfollow success: " + result); - onRefresh(); + fetchProfileDetails(); } @Override @@ -935,7 +951,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe @Override public void onSuccess(final FriendshipChangeResponse result) { // Log.d(TAG, "Follow success: " + result); - onRefresh(); + fetchProfileDetails(); } @Override diff --git a/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java b/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java index ad4d401b..55088c8b 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java @@ -64,7 +64,7 @@ public class MorePreferencesFragment extends BasePreferencesFragment { screen.addPreference(accountCategory); if (isLoggedIn) { accountCategory.setSummary(R.string.account_hint); - accountCategory.addPreference(getAccountSwitcherPreference(cookie)); + accountCategory.addPreference(getAccountSwitcherPreference(cookie, context)); accountCategory.addPreference(getPreference(R.string.logout, R.string.logout_summary, R.drawable.ic_logout_24, preference -> { if (getContext() == null) return false; CookieUtils.setupCookies("LOGOUT"); @@ -79,7 +79,7 @@ public class MorePreferencesFragment extends BasePreferencesFragment { public void onSuccess(@NonNull final List accounts) { if (!isLoggedIn) { if (accounts.size() > 0) { - accountCategory.addPreference(getAccountSwitcherPreference(null)); + accountCategory.addPreference(getAccountSwitcherPreference(null, context)); } // Need to show something to trigger login activity accountCategory.addPreference(getPreference(R.string.add_account, R.drawable.ic_add, preference -> { @@ -235,8 +235,7 @@ public class MorePreferencesFragment extends BasePreferencesFragment { } } - private AccountSwitcherPreference getAccountSwitcherPreference(final String cookie) { - final Context context = getContext(); + private AccountSwitcherPreference getAccountSwitcherPreference(final String cookie, final Context context) { if (context == null) return null; return new AccountSwitcherPreference(context, cookie, accountRepository, v -> showAccountSwitcherDialog()); } diff --git a/app/src/main/java/awais/instagrabber/webservices/UserService.java b/app/src/main/java/awais/instagrabber/webservices/UserService.java index 0aff3f32..52bb064d 100644 --- a/app/src/main/java/awais/instagrabber/webservices/UserService.java +++ b/app/src/main/java/awais/instagrabber/webservices/UserService.java @@ -62,7 +62,7 @@ public class UserService extends BaseService { public void onResponse(@NonNull final Call call, @NonNull final Response response) { final WrappedUser user = response.body(); if (user == null) { - callback.onSuccess(null); + callback.onFailure(null); return; } callback.onSuccess(user.getUser()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4f007c79..4c1c4078 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,7 +36,10 @@ Other members will know you viewed it Enable activity notifications Feed stories sort - Error loading profile!\nTry logging in and search again. + Error loading profile! Is the username valid? If so, you may be ratelimited. + Error loading profile! Is the username valid? Or did they block you? + Error loading hashtag! Is the name valid? + Error loading hashtag! Is the URL valid? Error creating Download folder(s). Save to custom folder Select folder diff --git a/build.gradle b/build.gradle index cdffced1..1c106f22 100755 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:4.1.2' def nav_version = "2.3.2" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa54c83c..6b0a820c 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=0080de8491f0918e4f529a6db6820fa0b9e818ee2386117f4394f95feb1d5583 -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionSha256Sum=1433372d903ffba27496f8d5af24265310d2da0d78bf6b4e5138831d4fe066e9 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip # https://gradle.org/releases/ # https://gradle.org/release-checksums/ zipStoreBase=GRADLE_USER_HOME