From c3d92b8fc0d5d9bd2e0a9fc3d818d52f263034f2 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Sat, 29 Aug 2020 16:42:08 -0400 Subject: [PATCH] implement swipe-up sticker + refresh inbox list after sending message --- .../instagrabber/activities/StoryViewer.java | 18 ++++++++++--- .../asyncs/i/iStoryStatusFetcher.java | 18 +++++++++++++ .../DirectMessageInboxFragment.java | 6 ++--- .../DirectMessageSettingsFragment.java | 2 +- .../DirectMessageThreadFragment.java | 13 +++++++--- .../awais/instagrabber/models/StoryModel.java | 8 ++++++ .../models/stickers/SwipeUpModel.java | 20 +++++++++++++++ .../java/awais/instagrabber/utils/Utils.java | 25 ++++++------------- .../main/res/layout/activity_story_viewer.xml | 9 +++++++ 9 files changed, 90 insertions(+), 29 deletions(-) create mode 100755 app/src/main/java/awais/instagrabber/models/stickers/SwipeUpModel.java diff --git a/app/src/main/java/awais/instagrabber/activities/StoryViewer.java b/app/src/main/java/awais/instagrabber/activities/StoryViewer.java index 2385b557..125b357e 100755 --- a/app/src/main/java/awais/instagrabber/activities/StoryViewer.java +++ b/app/src/main/java/awais/instagrabber/activities/StoryViewer.java @@ -65,6 +65,7 @@ import awais.instagrabber.models.enums.MediaItemType; import awais.instagrabber.models.stickers.PollModel; import awais.instagrabber.models.stickers.QuestionModel; import awais.instagrabber.models.stickers.QuizModel; +import awais.instagrabber.models.stickers.SwipeUpModel; import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.Utils; import awaisomereport.LogCollector; @@ -99,6 +100,7 @@ public final class StoryViewer extends BaseLanguageActivity { private QuestionModel question; private String[] mentions; private QuizModel quiz; + private SwipeUpModel swipeUp; private StoryModel currentStory; private String url, username; private int slidePos = 0, lastSlidePos = 0; @@ -220,14 +222,17 @@ public final class StoryViewer extends BaseLanguageActivity { return false; }); - storyViewerBinding.spotify.setOnClickListener(v -> { + final View.OnClickListener linkActionListener = v -> { final Object tag = v.getTag(); if (tag instanceof CharSequence) { final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(tag.toString())); startActivity(intent); } - }); + }; + + storyViewerBinding.spotify.setOnClickListener(linkActionListener); + storyViewerBinding.swipeUp.setOnClickListener(linkActionListener); storyViewerBinding.viewStoryPost.setOnClickListener(v -> { final Object tag = v.getTag(); @@ -279,7 +284,7 @@ public final class StoryViewer extends BaseLanguageActivity { .show(); } else if (tag instanceof QuizModel) { - quiz = (QuizModel) quiz; + quiz = quiz; String[] choices = new String[quiz.getChoices().length]; for (int q = 0; q < choices.length; ++q) { choices[q] = (quiz.getMyChoice() == q ? "√ " :"") + quiz.getChoices()[q]+ " (" + quiz.getCounts()[q] + ")"; @@ -509,6 +514,13 @@ public final class StoryViewer extends BaseLanguageActivity { storyViewerBinding.quiz.setVisibility(quiz != null ? View.VISIBLE : View.GONE); storyViewerBinding.quiz.setTag(quiz); + swipeUp = currentStory.getSwipeUp(); + storyViewerBinding.swipeUp.setVisibility(swipeUp != null ? View.VISIBLE : View.GONE); + if (swipeUp != null) { + storyViewerBinding.swipeUp.setText(swipeUp.getText()); + storyViewerBinding.swipeUp.setTag(swipeUp.getUrl()); + } + releasePlayer(); final Intent intent = getIntent(); if (intent.getBooleanExtra(Constants.EXTRAS_HASHTAG, false)) { diff --git a/app/src/main/java/awais/instagrabber/asyncs/i/iStoryStatusFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/i/iStoryStatusFetcher.java index d85f3d47..bae3c618 100755 --- a/app/src/main/java/awais/instagrabber/asyncs/i/iStoryStatusFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/i/iStoryStatusFetcher.java @@ -16,7 +16,9 @@ import awais.instagrabber.models.enums.MediaItemType; import awais.instagrabber.models.stickers.PollModel; import awais.instagrabber.models.stickers.QuestionModel; import awais.instagrabber.models.stickers.QuizModel; +import awais.instagrabber.models.stickers.SwipeUpModel; import awais.instagrabber.utils.Constants; +import awais.instagrabber.utils.LocaleUtils; import awais.instagrabber.utils.Utils; import awaisomereport.LogCollector; @@ -51,6 +53,7 @@ public final class iStoryStatusFetcher extends AsyncTask currentlyRunning; private InboxThreadModelListViewModel listViewModel; - public static boolean afterLeave = false; + public static boolean refreshPlease = false; private final FetchListener fetchListener = new FetchListener() { @Override @@ -119,9 +119,9 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh @Override public void onResume() { super.onResume(); - if (afterLeave) { + if (refreshPlease) { onRefresh(); - afterLeave = false; + refreshPlease = false; } } diff --git a/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageSettingsFragment.java b/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageSettingsFragment.java index 9b2c642d..1f589a30 100644 --- a/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageSettingsFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageSettingsFragment.java @@ -199,7 +199,7 @@ public class DirectMessageSettingsFragment extends Fragment implements SwipeRefr titleText.clearFocus(); } else if (action.equals("leave")) { - DirectMessageInboxFragment.afterLeave = true; + DirectMessageInboxFragment.refreshPlease = true; NavHostFragment.findNavController(DirectMessageSettingsFragment.this).popBackStack(R.id.directMessagesInboxFragment, false); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageThreadFragment.java b/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageThreadFragment.java index 2d19a507..2cccabac 100644 --- a/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageThreadFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/directmessages/DirectMessageThreadFragment.java @@ -221,12 +221,16 @@ public class DirectMessageThreadFragment extends Fragment { case RAVEN_MEDIA: case MEDIA: final ProfileModel user = getUser(directItemModel.getUserId()); - String url = selectedItem.getMediaType() == MediaItemType.MEDIA_TYPE_VIDEO ? selectedItem.getVideoUrl() : selectedItem.getThumbUrl(); - if (url != null) { - Utils.dmDownload(requireContext(), user.getUsername(), DownloadMethod.DOWNLOAD_DIRECT, Collections.singletonList(itemType == DirectItemType.MEDIA ? directItemModel.getMediaModel() : directItemModel.getRavenMediaModel().getMedia())); + final DirectItemModel.DirectItemMediaModel selectedItem = + itemType == DirectItemType.MEDIA ? directItemModel.getMediaModel() : directItemModel.getRavenMediaModel().getMedia(); + final String url = selectedItem.getMediaType() == MediaItemType.MEDIA_TYPE_VIDEO ? selectedItem.getVideoUrl() : selectedItem.getThumbUrl(); + if (url == null) { + Toast.makeText(requireContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + } + else { + Utils.dmDownload(requireContext(), user.getUsername(), DownloadMethod.DOWNLOAD_DIRECT, selectedItem); Toast.makeText(requireContext(), R.string.downloader_downloading_media, Toast.LENGTH_SHORT).show(); } - else Toast.makeText(requireContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); break; case STORY_SHARE: if (directItemModel.getReelShare() != null) { @@ -372,6 +376,7 @@ public class DirectMessageThreadFragment extends Fragment { } directItemModel.setLiked(); } + DirectMessageInboxFragment.refreshPlease = true; hasSentSomething = true; new DirectMessageInboxThreadFetcher(threadId, UserInboxDirection.OLDER, null, fetchListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }); diff --git a/app/src/main/java/awais/instagrabber/models/StoryModel.java b/app/src/main/java/awais/instagrabber/models/StoryModel.java index 1e2256d6..a2962e2b 100755 --- a/app/src/main/java/awais/instagrabber/models/StoryModel.java +++ b/app/src/main/java/awais/instagrabber/models/StoryModel.java @@ -6,6 +6,7 @@ import awais.instagrabber.models.enums.MediaItemType; import awais.instagrabber.models.stickers.PollModel; import awais.instagrabber.models.stickers.QuestionModel; import awais.instagrabber.models.stickers.QuizModel; +import awais.instagrabber.models.stickers.SwipeUpModel; public final class StoryModel implements Serializable { private final String storyMediaId, storyUrl, username, userId; @@ -15,6 +16,7 @@ public final class StoryModel implements Serializable { private PollModel poll; private QuestionModel question; private QuizModel quiz; + private SwipeUpModel swipeUp; private String[] mentions; private int position; private boolean isCurrentSlide = false, canReply = false; @@ -66,6 +68,8 @@ public final class StoryModel implements Serializable { return quiz; } + public SwipeUpModel getSwipeUp() { return swipeUp;} + public String[] getMentions() { return mentions; } @@ -106,6 +110,10 @@ public final class StoryModel implements Serializable { this.mentions = mentions; } + public void setSwipeUp(final SwipeUpModel swipeUp) { + this.swipeUp = swipeUp; + } + public void setPosition(final int position) { this.position = position; } diff --git a/app/src/main/java/awais/instagrabber/models/stickers/SwipeUpModel.java b/app/src/main/java/awais/instagrabber/models/stickers/SwipeUpModel.java new file mode 100755 index 00000000..4007d9b1 --- /dev/null +++ b/app/src/main/java/awais/instagrabber/models/stickers/SwipeUpModel.java @@ -0,0 +1,20 @@ +package awais.instagrabber.models.stickers; + +import java.io.Serializable; + +public final class SwipeUpModel implements Serializable { + private final String url, text; + + public SwipeUpModel(final String url, final String text) { + this.url = url; + this.text = text; + } + + public String getUrl() { + return url; + } + + public String getText() { + return text; + } +} \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/utils/Utils.java b/app/src/main/java/awais/instagrabber/utils/Utils.java index 1674f945..ef5f8222 100755 --- a/app/src/main/java/awais/instagrabber/utils/Utils.java +++ b/app/src/main/java/awais/instagrabber/utils/Utils.java @@ -990,10 +990,10 @@ public final class Utils { } public static void dmDownload(@NonNull final Context context, @Nullable final String username, final DownloadMethod method, - final List itemsToDownload) { + final DirectItemMediaModel itemsToDownload) { if (settingsHelper == null) settingsHelper = new SettingsHelper(context); - if (itemsToDownload == null || itemsToDownload.size() < 1) return; + if (itemsToDownload == null) return; if (ContextCompat.checkSelfPermission(context, Utils.PERMS[0]) == PackageManager.PERMISSION_GRANTED) dmDownloadImpl(context, username, method, itemsToDownload); @@ -1002,7 +1002,7 @@ public final class Utils { } private static void dmDownloadImpl(@NonNull final Context context, @Nullable final String username, - final DownloadMethod method, final List itemsToDownload) { + final DownloadMethod method, final DirectItemMediaModel selectedItem) { File dir = new File(Environment.getExternalStorageDirectory(), "Download"); if (settingsHelper.getBoolean(FOLDER_SAVE_TO)) { @@ -1014,22 +1014,11 @@ public final class Utils { dir = new File(dir, username); if (dir.exists() || dir.mkdirs()) { - final Main main = method != DownloadMethod.DOWNLOAD_FEED && context instanceof Main ? (Main) context : null; - - final int itemsToDownloadSize = itemsToDownload.size(); - final File finalDir = dir; - for (int i = itemsToDownloadSize - 1; i >= 0; i--) { - final DirectItemMediaModel selectedItem = itemsToDownload.get(i); - - if (main == null) { - new DownloadAsync(context, - selectedItem.getMediaType() == MediaItemType.MEDIA_TYPE_VIDEO ? selectedItem.getVideoUrl() : selectedItem.getThumbUrl(), - getDownloadSaveFileDm(finalDir, selectedItem, ""), - null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - - } - } + new DownloadAsync(context, + selectedItem.getMediaType() == MediaItemType.MEDIA_TYPE_VIDEO ? selectedItem.getVideoUrl() : selectedItem.getThumbUrl(), + getDownloadSaveFileDm(finalDir, selectedItem, ""), + null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else Toast.makeText(context, R.string.error_creating_folders, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/res/layout/activity_story_viewer.xml b/app/src/main/res/layout/activity_story_viewer.xml index 55bae71f..7d7d0e08 100755 --- a/app/src/main/res/layout/activity_story_viewer.xml +++ b/app/src/main/res/layout/activity_story_viewer.xml @@ -81,6 +81,15 @@ android:textColor="@color/btn_blue_text_color" android:visibility="gone" app:backgroundTint="@color/btn_blue_background" /> +