Browse Source
comments and verified
comments and verified
* fix comments count on profile posts * all comments should be visible now * add verified badge to comments and post titlerenovate/org.robolectric-robolectric-4.x
Austin Huang
4 years ago
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
10 changed files with 58 additions and 352 deletions
-
10app/src/main/java/awais/instagrabber/adapters/CommentsAdapter.java
-
3app/src/main/java/awais/instagrabber/adapters/viewholder/comments/ChildCommentViewHolder.java
-
3app/src/main/java/awais/instagrabber/adapters/viewholder/comments/ParentCommentViewHolder.java
-
2app/src/main/java/awais/instagrabber/asyncs/CommentsFetcher.java
-
340app/src/main/java/awais/instagrabber/fragments/PostViewFragment.java
-
1app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java
-
2app/src/main/java/awais/instagrabber/webservices/ProfileService.java
-
19app/src/main/res/layout/dialog_post_view.xml
-
16app/src/main/res/layout/item_comment.xml
-
14app/src/main/res/layout/item_comment_small.xml
@ -1,340 +0,0 @@ |
|||||
// package awais.instagrabber.fragments; |
|
||||
// |
|
||||
// import android.content.Context; |
|
||||
// import android.content.DialogInterface; |
|
||||
// import android.content.pm.PackageManager; |
|
||||
// import android.os.AsyncTask; |
|
||||
// import android.os.Bundle; |
|
||||
// import android.util.Log; |
|
||||
// import android.view.LayoutInflater; |
|
||||
// import android.view.View; |
|
||||
// import android.view.ViewGroup; |
|
||||
// |
|
||||
// import androidx.annotation.NonNull; |
|
||||
// import androidx.annotation.Nullable; |
|
||||
// import androidx.appcompat.app.AlertDialog; |
|
||||
// import androidx.fragment.app.Fragment; |
|
||||
// import androidx.fragment.app.FragmentActivity; |
|
||||
// import androidx.lifecycle.ViewModelProvider; |
|
||||
// import androidx.navigation.NavDirections; |
|
||||
// import androidx.navigation.fragment.NavHostFragment; |
|
||||
// import androidx.viewpager2.widget.ViewPager2; |
|
||||
// |
|
||||
// import java.util.ArrayList; |
|
||||
// import java.util.Arrays; |
|
||||
// import java.util.Collections; |
|
||||
// import java.util.List; |
|
||||
// |
|
||||
// import awais.instagrabber.R; |
|
||||
// import awais.instagrabber.adapters.PostViewAdapter; |
|
||||
// import awais.instagrabber.adapters.PostViewAdapter.OnPostViewChildViewClickListener; |
|
||||
// import awais.instagrabber.asyncs.PostFetcher; |
|
||||
// import awais.instagrabber.asyncs.i.iPostFetcher; |
|
||||
// import awais.instagrabber.databinding.FragmentPostViewBinding; |
|
||||
// import awais.instagrabber.interfaces.FetchListener; |
|
||||
// import awais.instagrabber.interfaces.MentionClickListener; |
|
||||
// import awais.instagrabber.models.FeedModel; |
|
||||
// import awais.instagrabber.models.ViewerPostModel; |
|
||||
// import awais.instagrabber.models.ViewerPostModelWrapper; |
|
||||
// import awais.instagrabber.models.enums.DownloadMethod; |
|
||||
// import awais.instagrabber.utils.Constants; |
|
||||
// import awais.instagrabber.utils.CookieUtils; |
|
||||
// import awais.instagrabber.utils.DownloadUtils; |
|
||||
// import awais.instagrabber.utils.Utils; |
|
||||
// import awais.instagrabber.viewmodels.ViewerPostViewModel; |
|
||||
// import awais.instagrabber.webservices.MediaService; |
|
||||
// import awais.instagrabber.webservices.ServiceCallback; |
|
||||
// |
|
||||
// import static androidx.core.content.ContextCompat.checkSelfPermission; |
|
||||
// import static awais.instagrabber.utils.Utils.settingsHelper; |
|
||||
// |
|
||||
// public class PostViewFragment extends Fragment { |
|
||||
// private static final String TAG = "PostViewFragment"; |
|
||||
// private static final String COOKIE = settingsHelper.getString(Constants.COOKIE); |
|
||||
// |
|
||||
// private FragmentActivity fragmentActivity; |
|
||||
// private FragmentPostViewBinding binding; |
|
||||
// private ViewPager2 root; |
|
||||
// private boolean shouldRefresh = true; |
|
||||
// private ViewerPostViewModel viewerPostViewModel; |
|
||||
// private boolean isId; |
|
||||
// private int currentPostIndex; |
|
||||
// private List<String> idOrCodeList; |
|
||||
// private boolean hasInitialResult = false; |
|
||||
// private PostViewAdapter adapter; |
|
||||
// private boolean session; |
|
||||
// private MediaService mediaService; |
|
||||
// |
|
||||
// private FetchListener<FeedModel> pfl = result -> { |
|
||||
// if (result == null) return; |
|
||||
// final List<ViewerPostModelWrapper> viewerPostModels = viewerPostViewModel.getList().getValue(); |
|
||||
// final List<ViewerPostModelWrapper> temp = viewerPostModels == null ? new ArrayList<>(idOrCodeList.size()) |
|
||||
// : new ArrayList<>(viewerPostModels); |
|
||||
// String idOrCode = isId ? result.getPostId() : result.getShortCode(); |
|
||||
// if (idOrCode == null) return; |
|
||||
// if (isId) { |
|
||||
// // the post id is appended with `_` in the result |
|
||||
// idOrCode = idOrCode.substring(0, idOrCode.indexOf('_')); |
|
||||
// } |
|
||||
// final int index = idOrCodeList.indexOf(idOrCode); |
|
||||
// if (index < 0) return; |
|
||||
// final ViewerPostModelWrapper viewerPostModelWrapper = temp.get(index); |
|
||||
// viewerPostModelWrapper.setViewerPostModels(result.getSliderItems() == null ? Collections.emptyList() : result.getSliderItems()); |
|
||||
// temp.set(index, viewerPostModelWrapper); |
|
||||
// viewerPostViewModel.getList().setValue(temp); |
|
||||
// adapter.notifyItemChanged(index); |
|
||||
// if (!hasInitialResult) { |
|
||||
// Log.d(TAG, "setting delayed position to: " + currentPostIndex); |
|
||||
// binding.getRoot() |
|
||||
// .postDelayed(() -> binding.getRoot().setCurrentItem(currentPostIndex), 200); |
|
||||
// } |
|
||||
// hasInitialResult = true; |
|
||||
// }; |
|
||||
// private MentionClickListener mentionListener = (view, text, isHashtag, isLocation) -> { |
|
||||
// if (isHashtag) { |
|
||||
// final NavDirections action = PostViewFragmentDirections |
|
||||
// .actionGlobalHashTagFragment(text); |
|
||||
// NavHostFragment.findNavController(this).navigate(action); |
|
||||
// return; |
|
||||
// } |
|
||||
// if (isLocation) { |
|
||||
// final NavDirections action = PostViewFragmentDirections |
|
||||
// .actionGlobalLocationFragment(text); |
|
||||
// NavHostFragment.findNavController(this).navigate(action); |
|
||||
// return; |
|
||||
// } |
|
||||
// final NavDirections action = PostViewFragmentDirections |
|
||||
// .actionGlobalProfileFragment("@" + text); |
|
||||
// NavHostFragment.findNavController(this).navigate(action); |
|
||||
// }; |
|
||||
// private OnPostViewChildViewClickListener clickListener = (v, wrapper, postPosition, childPosition) -> { |
|
||||
// final ViewerPostModel postModel = wrapper.getViewerPostModels().get(0); |
|
||||
// final String username = postModel.getProfileModel().getUsername(); |
|
||||
// final int id = v.getId(); |
|
||||
// switch (id) { |
|
||||
// case R.id.viewerCaption: |
|
||||
// break; |
|
||||
// case R.id.btnComments: |
|
||||
// String postId = postModel.getPostId(); |
|
||||
// if (postId.contains("_")) postId = postId.substring(0, postId.indexOf("_")); |
|
||||
// final NavDirections commentsAction = PostViewFragmentDirections.actionGlobalCommentsViewerFragment( |
|
||||
// postModel.getShortCode(), |
|
||||
// postId, |
|
||||
// postModel.getProfileModel().getId() |
|
||||
// ); |
|
||||
// NavHostFragment.findNavController(this).navigate(commentsAction); |
|
||||
// break; |
|
||||
// case R.id.btnDownload: |
|
||||
// final Context context = getContext(); |
|
||||
// if (context == null) return; |
|
||||
// if (checkSelfPermission(context, |
|
||||
// DownloadUtils.PERMS[0]) == PackageManager.PERMISSION_GRANTED) { |
|
||||
// showDownloadDialog(wrapper.getViewerPostModels(), |
|
||||
// childPosition, |
|
||||
// username); |
|
||||
// return; |
|
||||
// } |
|
||||
// requestPermissions(DownloadUtils.PERMS, 8020); |
|
||||
// break; |
|
||||
// case R.id.ivProfilePic: |
|
||||
// case R.id.title: |
|
||||
// mentionListener.onClick(null, username, false, false); |
|
||||
// break; |
|
||||
// case R.id.btnLike: |
|
||||
// if (mediaService != null) { |
|
||||
// final String userId = CookieUtils.getUserIdFromCookie(COOKIE); |
|
||||
// final String csrfToken = CookieUtils.getCsrfTokenFromCookie(COOKIE); |
|
||||
// v.setEnabled(false); |
|
||||
// final ServiceCallback<Boolean> likeCallback = new ServiceCallback<Boolean>() { |
|
||||
// @Override |
|
||||
// public void onSuccess(final Boolean result) { |
|
||||
// v.setEnabled(true); |
|
||||
// if (result) { |
|
||||
// postModel.setManualLike(!postModel.getLike()); |
|
||||
// adapter.notifyItemChanged(postPosition); |
|
||||
// return; |
|
||||
// } |
|
||||
// Log.e(TAG, "like/unlike unsuccessful!"); |
|
||||
// } |
|
||||
// |
|
||||
// @Override |
|
||||
// public void onFailure(final Throwable t) { |
|
||||
// v.setEnabled(true); |
|
||||
// Log.e(TAG, "Error during like/unlike", t); |
|
||||
// } |
|
||||
// }; |
|
||||
// if (!postModel.getLike()) { |
|
||||
// mediaService.like(postModel.getPostId(), userId, csrfToken, likeCallback); |
|
||||
// } else { |
|
||||
// mediaService.unlike(postModel.getPostId(), userId, csrfToken, likeCallback); |
|
||||
// } |
|
||||
// } |
|
||||
// break; |
|
||||
// case R.id.btnBookmark: |
|
||||
// if (mediaService != null) { |
|
||||
// final String userId = CookieUtils.getUserIdFromCookie(COOKIE); |
|
||||
// final String csrfToken = CookieUtils.getCsrfTokenFromCookie(COOKIE); |
|
||||
// v.setEnabled(false); |
|
||||
// final ServiceCallback<Boolean> saveCallback = new ServiceCallback<Boolean>() { |
|
||||
// @Override |
|
||||
// public void onSuccess(final Boolean result) { |
|
||||
// v.setEnabled(true); |
|
||||
// if (result) { |
|
||||
// // postModel.setBookmarked(!postModel.isSaved()); |
|
||||
// adapter.notifyItemChanged(postPosition); |
|
||||
// return; |
|
||||
// } |
|
||||
// Log.e(TAG, "save/unsave unsuccessful!"); |
|
||||
// } |
|
||||
// |
|
||||
// @Override |
|
||||
// public void onFailure(final Throwable t) { |
|
||||
// v.setEnabled(true); |
|
||||
// Log.e(TAG, "Error during save/unsave", t); |
|
||||
// } |
|
||||
// }; |
|
||||
// if (!postModel.isSaved()) { |
|
||||
// mediaService.save(postModel.getPostId(), userId, csrfToken, saveCallback); |
|
||||
// } else { |
|
||||
// mediaService.unsave(postModel.getPostId(), userId, csrfToken, saveCallback); |
|
||||
// } |
|
||||
// } |
|
||||
// break; |
|
||||
// } |
|
||||
// }; |
|
||||
// private PostViewAdapter.OnPostCaptionLongClickListener captionLongClickListener = text -> { |
|
||||
// final Context context = getContext(); |
|
||||
// if (context == null) return; |
|
||||
// Utils.copyText(context, text); |
|
||||
// }; |
|
||||
// |
|
||||
// @Override |
|
||||
// public void onCreate(@Nullable final Bundle savedInstanceState) { |
|
||||
// super.onCreate(savedInstanceState); |
|
||||
// fragmentActivity = getActivity(); |
|
||||
// mediaService = MediaService.getInstance(); |
|
||||
// } |
|
||||
// |
|
||||
// @Nullable |
|
||||
// @Override |
|
||||
// public View onCreateView(@NonNull final LayoutInflater inflater, |
|
||||
// @Nullable final ViewGroup container, |
|
||||
// @Nullable final Bundle savedInstanceState) { |
|
||||
// if (root != null) { |
|
||||
// shouldRefresh = false; |
|
||||
// return root; |
|
||||
// } |
|
||||
// binding = FragmentPostViewBinding.inflate(inflater, container, false); |
|
||||
// root = binding.getRoot(); |
|
||||
// setupViewPager(); |
|
||||
// return root; |
|
||||
// } |
|
||||
// |
|
||||
// @Override |
|
||||
// public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { |
|
||||
// if (!shouldRefresh) return; |
|
||||
// init(); |
|
||||
// shouldRefresh = false; |
|
||||
// } |
|
||||
// |
|
||||
// private void setupViewPager() { |
|
||||
// viewerPostViewModel = new ViewModelProvider(fragmentActivity) |
|
||||
// .get(ViewerPostViewModel.class); |
|
||||
// adapter = new PostViewAdapter(clickListener, captionLongClickListener, mentionListener); |
|
||||
// root.setAdapter(adapter); |
|
||||
// root.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { |
|
||||
// |
|
||||
// @Override |
|
||||
// public void onPageSelected(final int position) { |
|
||||
// // Log.d(TAG, "onPageSelected: " + position + ", hasInitialResult: " + hasInitialResult); |
|
||||
// if (!hasInitialResult) { |
|
||||
// return; |
|
||||
// } |
|
||||
// currentPostIndex = position; |
|
||||
// fetchPost(); |
|
||||
// } |
|
||||
// }); |
|
||||
// viewerPostViewModel.getList().observe(fragmentActivity, list -> adapter.submitList(list)); |
|
||||
// } |
|
||||
// |
|
||||
// private void init() { |
|
||||
// if (getArguments() == null) return; |
|
||||
// final PostViewFragmentArgs fragmentArgs = PostViewFragmentArgs.fromBundle(getArguments()); |
|
||||
// final String[] idOrCodeArray = fragmentArgs.getIdOrCodeArray(); |
|
||||
// if (idOrCodeArray.length == 0) return; |
|
||||
// currentPostIndex = fragmentArgs.getIndex(); |
|
||||
// if (currentPostIndex < 0) return; |
|
||||
// if (currentPostIndex >= idOrCodeArray.length) return; |
|
||||
// idOrCodeList = Arrays.asList(idOrCodeArray); |
|
||||
// viewerPostViewModel.getList().setValue(createPlaceholderModels(idOrCodeArray.length)); |
|
||||
// isId = fragmentArgs.getIsId(); |
|
||||
// fetchPost(); |
|
||||
// } |
|
||||
// |
|
||||
// private List<ViewerPostModelWrapper> createPlaceholderModels(final int size) { |
|
||||
// final List<ViewerPostModelWrapper> viewerPostModels = new ArrayList<>(size); |
|
||||
// for (int i = 0; i < size; i++) { |
|
||||
// // viewerPostModels.add(new ViewerPostModel[]{ViewerPostModel.getDefaultModel(-i, "")}); |
|
||||
// viewerPostModels.add(new ViewerPostModelWrapper(i, null)); |
|
||||
// } |
|
||||
// return viewerPostModels; |
|
||||
// } |
|
||||
// |
|
||||
// private void fetchPost() { |
|
||||
// // Log.d(TAG, "fetchPost, currentPostIndex: " + currentPostIndex); |
|
||||
// final List<ViewerPostModelWrapper> list = viewerPostViewModel.getList().getValue(); |
|
||||
// if (list != null) { |
|
||||
// final ViewerPostModelWrapper viewerPostModels = list.get(currentPostIndex); |
|
||||
// if (viewerPostModels != null && viewerPostModels |
|
||||
// .getViewerPostModels() != null && viewerPostModels |
|
||||
// .getViewerPostModels().size() > 0) { |
|
||||
// Log.d(TAG, "returning without fetching"); |
|
||||
// return; |
|
||||
// } |
|
||||
// } |
|
||||
// if (currentPostIndex >= idOrCodeList.size() || currentPostIndex < 0) return; |
|
||||
// final String idOrShortCode = idOrCodeList.get(currentPostIndex); |
|
||||
// if (isId) { |
|
||||
// new iPostFetcher(idOrShortCode, pfl).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|
||||
// return; |
|
||||
// } |
|
||||
// new PostFetcher(idOrShortCode, pfl).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|
||||
// } |
|
||||
// |
|
||||
// private void showDownloadDialog(final List<ViewerPostModel> postModels, |
|
||||
// final int childPosition, |
|
||||
// final String username) { |
|
||||
// final List<ViewerPostModel> postModelsToDownload = new ArrayList<>(); |
|
||||
// final Context context = getContext(); |
|
||||
// if (context == null) return; |
|
||||
// if (!session && postModels.size() > 1) { |
|
||||
// final DialogInterface.OnClickListener clickListener = (dialog, which) -> { |
|
||||
// if (which == DialogInterface.BUTTON_NEGATIVE) { |
|
||||
// postModelsToDownload.addAll(postModels); |
|
||||
// } else if (which == DialogInterface.BUTTON_POSITIVE) { |
|
||||
// postModelsToDownload.add(postModels.get(childPosition)); |
|
||||
// } else { |
|
||||
// session = true; |
|
||||
// postModelsToDownload.add(postModels.get(childPosition)); |
|
||||
// } |
|
||||
// if (postModelsToDownload.size() > 0) { |
|
||||
// DownloadUtils.batchDownload(context, |
|
||||
// username, |
|
||||
// DownloadMethod.DOWNLOAD_POST_VIEWER, |
|
||||
// postModelsToDownload); |
|
||||
// } |
|
||||
// }; |
|
||||
// new AlertDialog.Builder(context) |
|
||||
// .setTitle(R.string.post_viewer_download_dialog_title) |
|
||||
// .setMessage(R.string.post_viewer_download_message) |
|
||||
// .setNeutralButton(R.string.post_viewer_download_session, clickListener) |
|
||||
// .setPositiveButton(R.string.post_viewer_download_current, clickListener) |
|
||||
// .setNegativeButton(R.string.post_viewer_download_album, clickListener).show(); |
|
||||
// } else { |
|
||||
// DownloadUtils.batchDownload(context, |
|
||||
// username, |
|
||||
// DownloadMethod.DOWNLOAD_POST_VIEWER, |
|
||||
// Collections.singletonList(postModels.get(childPosition))); |
|
||||
// } |
|
||||
// } |
|
||||
// } |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue