mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-12-23 13:26:59 +00:00
Add like and save actions to post viewer fragment
This commit is contained in:
parent
2fd9589aaf
commit
034dbfa147
@ -220,12 +220,10 @@ public final class PostViewer extends BaseLanguageActivity {
|
||||
viewerBinding.bottomPanel.commentsCount.setText(String.valueOf(commentsCount));
|
||||
viewerBinding.bottomPanel.btnComments.setVisibility(View.VISIBLE);
|
||||
|
||||
viewerBinding.bottomPanel.btnComments.setOnClickListener(v ->
|
||||
startActivityForResult(new Intent(this, CommentsViewer.class)
|
||||
.putExtra(Constants.EXTRAS_SHORTCODE,
|
||||
postModel.getShortCode())
|
||||
.putExtra(Constants.EXTRAS_POST,
|
||||
viewerPostModel.getPostId())
|
||||
viewerBinding.bottomPanel.btnComments.setOnClickListener(v -> startActivityForResult(
|
||||
new Intent(this, CommentsViewer.class)
|
||||
.putExtra(Constants.EXTRAS_SHORTCODE, postModel.getShortCode())
|
||||
.putExtra(Constants.EXTRAS_POST, viewerPostModel.getPostId())
|
||||
.putExtra(Constants.EXTRAS_USER, postUserId),
|
||||
6969));
|
||||
viewerBinding.bottomPanel.btnComments.setClickable(true);
|
||||
|
@ -1,10 +1,14 @@
|
||||
package awais.instagrabber.adapters.viewholder;
|
||||
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
||||
@ -83,6 +87,39 @@ public class PostViewerViewHolder extends RecyclerView.ViewHolder {
|
||||
binding.bottomPanel.viewerCaption.setText(postCaption);
|
||||
}
|
||||
binding.bottomPanel.tvPostDate.setText(firstPost.getPostDate());
|
||||
setupLikes(firstPost);
|
||||
setupSave(firstPost);
|
||||
}
|
||||
|
||||
private void setupLikes(final ViewerPostModel firstPost) {
|
||||
final boolean liked = firstPost.getLike();
|
||||
final long likeCount = firstPost.getLikes();
|
||||
final Resources resources = itemView.getContext().getResources();
|
||||
if (liked) {
|
||||
final String unlikeString = resources.getString(R.string.unlike, String.valueOf(likeCount));
|
||||
binding.btnLike.setText(unlikeString);
|
||||
ViewCompat.setBackgroundTintList(binding.btnLike,
|
||||
ColorStateList.valueOf(ContextCompat.getColor(itemView.getContext(), R.color.btn_pink_background)));
|
||||
} else {
|
||||
final String likeString = resources.getString(R.string.like, String.valueOf(likeCount));
|
||||
binding.btnLike.setText(likeString);
|
||||
ViewCompat.setBackgroundTintList(binding.btnLike,
|
||||
ColorStateList.valueOf(ContextCompat.getColor(itemView.getContext(), R.color.btn_lightpink_background)));
|
||||
}
|
||||
}
|
||||
|
||||
private void setupSave(final ViewerPostModel firstPost) {
|
||||
final boolean saved = firstPost.getBookmark();
|
||||
if (saved) {
|
||||
binding.btnBookmark.setText(R.string.unbookmark);
|
||||
ViewCompat.setBackgroundTintList(binding.btnBookmark,
|
||||
ColorStateList.valueOf(ContextCompat.getColor(itemView.getContext(), R.color.btn_orange_background)));
|
||||
} else {
|
||||
binding.btnBookmark.setText(R.string.bookmark);
|
||||
ViewCompat.setBackgroundTintList(
|
||||
binding.btnBookmark,
|
||||
ColorStateList.valueOf(ContextCompat.getColor(itemView.getContext(), R.color.btn_lightorange_background)));
|
||||
}
|
||||
}
|
||||
|
||||
private void setupListeners(final ViewerPostModelWrapper wrapper,
|
||||
@ -98,6 +135,8 @@ public class PostViewerViewHolder extends RecyclerView.ViewHolder {
|
||||
binding.topPanel.ivProfilePic.setOnClickListener(onClickListener);
|
||||
binding.bottomPanel.btnDownload.setOnClickListener(onClickListener);
|
||||
binding.bottomPanel.viewerCaption.setOnClickListener(onClickListener);
|
||||
binding.btnLike.setOnClickListener(onClickListener);
|
||||
binding.btnBookmark.setOnClickListener(onClickListener);
|
||||
binding.bottomPanel.viewerCaption.setOnLongClickListener(v -> {
|
||||
longClickListener.onLongClick(binding.bottomPanel.viewerCaption.getText().toString());
|
||||
return true;
|
||||
@ -152,8 +191,8 @@ public class PostViewerViewHolder extends RecyclerView.ViewHolder {
|
||||
if (player == null) return;
|
||||
final float vol = player.getVolume() == 0f ? 1f : 0f;
|
||||
player.setVolume(vol);
|
||||
binding.bottomPanel.btnMute
|
||||
.setImageResource(vol == 0f ? R.drawable.ic_volume_up_24 : R.drawable.ic_volume_off_24);
|
||||
binding.bottomPanel.btnMute.setImageResource(vol == 0f ? R.drawable.ic_volume_up_24
|
||||
: R.drawable.ic_volume_off_24);
|
||||
Utils.sessionVolumeFull = vol == 1f;
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,8 @@ import awais.instagrabber.interfaces.MentionClickListener;
|
||||
import awais.instagrabber.models.ViewerPostModel;
|
||||
import awais.instagrabber.models.ViewerPostModelWrapper;
|
||||
import awais.instagrabber.models.enums.DownloadMethod;
|
||||
import awais.instagrabber.services.MediaService;
|
||||
import awais.instagrabber.services.ServiceCallback;
|
||||
import awais.instagrabber.utils.Constants;
|
||||
import awais.instagrabber.utils.Utils;
|
||||
|
||||
@ -46,6 +48,7 @@ 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;
|
||||
@ -58,14 +61,14 @@ public class PostViewFragment extends Fragment {
|
||||
private boolean hasInitialResult = false;
|
||||
private PostViewAdapter adapter;
|
||||
private boolean session;
|
||||
private MediaService mediaService;
|
||||
|
||||
private FetchListener<ViewerPostModel[]> pfl = result -> {
|
||||
if (result == null) return;
|
||||
if (result.length <= 0) return;
|
||||
final List<ViewerPostModelWrapper> viewerPostModels = viewerPostViewModel.getList()
|
||||
.getValue();
|
||||
final List<ViewerPostModelWrapper> temp = viewerPostModels == null ? new ArrayList<>(
|
||||
idOrCodeList.size()) : new ArrayList<>(viewerPostModels);
|
||||
final List<ViewerPostModelWrapper> viewerPostModels = viewerPostViewModel.getList().getValue();
|
||||
final List<ViewerPostModelWrapper> temp = viewerPostModels == null ? new ArrayList<>(idOrCodeList.size())
|
||||
: new ArrayList<>(viewerPostModels);
|
||||
final ViewerPostModel firstPost = result[0];
|
||||
if (firstPost == null) return;
|
||||
String idOrCode = isId ? firstPost.getPostId() : firstPost.getShortCode();
|
||||
@ -104,15 +107,6 @@ public class PostViewFragment extends Fragment {
|
||||
NavHostFragment.findNavController(this).navigate(action);
|
||||
};
|
||||
private OnPostViewChildViewClickListener clickListener = (v, wrapper, postPosition, childPosition) -> {
|
||||
// final FeedModel feedModel = (FeedModel) tag;
|
||||
// if (v.getId() == ) {
|
||||
// if (feedModel.isMentionClicked())
|
||||
// feedModel.toggleCaption();
|
||||
// feedModel.setMentionClicked(false);
|
||||
// if (!FeedItemViewHolder.expandCollapseTextView((RamboTextView) v, feedModel.getPostCaption()))
|
||||
// feedModel.toggleCaption();
|
||||
// return;
|
||||
// }
|
||||
final ViewerPostModel postModel = wrapper.getViewerPostModels()[0];
|
||||
final String username = postModel.getProfileModel().getUsername();
|
||||
final int id = v.getId();
|
||||
@ -125,8 +119,7 @@ public class PostViewFragment extends Fragment {
|
||||
postModel.getShortCode())
|
||||
.putExtra(Constants.EXTRAS_POST, postModel.getPostId())
|
||||
.putExtra(Constants.EXTRAS_USER,
|
||||
Utils.getUserIdFromCookie(settingsHelper.getString(
|
||||
Constants.COOKIE))));
|
||||
Utils.getUserIdFromCookie(COOKIE)));
|
||||
break;
|
||||
case R.id.btnDownload:
|
||||
if (checkSelfPermission(requireContext(),
|
||||
@ -142,15 +135,69 @@ public class PostViewFragment extends Fragment {
|
||||
case R.id.title:
|
||||
mentionListener.onClick(null, username, false, false);
|
||||
break;
|
||||
case R.id.btnLike:
|
||||
if (mediaService != null) {
|
||||
final String userId = Utils.getUserIdFromCookie(COOKIE);
|
||||
final String csrfToken = Utils.getCsrfTokenFromCookie(COOKIE);
|
||||
final ServiceCallback<Boolean> likeCallback = new ServiceCallback<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(final Boolean result) {
|
||||
if (result) {
|
||||
postModel.setManualLike(!postModel.getLike());
|
||||
adapter.notifyItemChanged(postPosition);
|
||||
return;
|
||||
}
|
||||
Log.e(TAG, "like/unlike unsuccessful!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(final Throwable t) {
|
||||
Log.e(TAG, "Error during like/unlike", t);
|
||||
}
|
||||
};
|
||||
private PostViewAdapter.OnPostCaptionLongClickListener captionLongClickListener = text -> Utils
|
||||
.copyText(requireContext(), text);
|
||||
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 = Utils.getUserIdFromCookie(COOKIE);
|
||||
final String csrfToken = Utils.getCsrfTokenFromCookie(COOKIE);
|
||||
final ServiceCallback<Boolean> saveCallback = new ServiceCallback<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(final Boolean result) {
|
||||
if (result) {
|
||||
postModel.setBookmarked(!postModel.getBookmark());
|
||||
adapter.notifyItemChanged(postPosition);
|
||||
return;
|
||||
}
|
||||
Log.e(TAG, "save/unsave unsuccessful!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(final Throwable t) {
|
||||
Log.e(TAG, "Error during save/unsave", t);
|
||||
}
|
||||
};
|
||||
if (!postModel.getBookmark()) {
|
||||
mediaService.save(postModel.getPostId(), userId, csrfToken, saveCallback);
|
||||
} else {
|
||||
mediaService.unsave(postModel.getPostId(), userId, csrfToken, saveCallback);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
private PostViewAdapter.OnPostCaptionLongClickListener captionLongClickListener = text -> Utils.copyText(requireContext(), text);
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
fragmentActivity = getActivity();
|
||||
mediaService = MediaService.getInstance();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -1,574 +0,0 @@
|
||||
// package awais.instagrabber.fragments;
|
||||
//
|
||||
// import android.content.Context;
|
||||
// import android.content.Intent;
|
||||
// import android.graphics.drawable.Animatable;
|
||||
// import android.net.Uri;
|
||||
// import android.os.AsyncTask;
|
||||
// import android.os.Bundle;
|
||||
// import android.os.Handler;
|
||||
// import android.text.SpannableString;
|
||||
// import android.view.LayoutInflater;
|
||||
// import android.view.View;
|
||||
// import android.view.ViewGroup;
|
||||
// import android.widget.LinearLayout;
|
||||
// import android.widget.RelativeLayout;
|
||||
// import android.widget.TextView;
|
||||
// import android.widget.Toast;
|
||||
//
|
||||
// import androidx.annotation.NonNull;
|
||||
// import androidx.annotation.Nullable;
|
||||
// import androidx.appcompat.app.AppCompatActivity;
|
||||
// import androidx.core.view.GestureDetectorCompat;
|
||||
// import androidx.fragment.app.Fragment;
|
||||
// import androidx.lifecycle.ViewModelProvider;
|
||||
// import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
// import androidx.recyclerview.widget.RecyclerView;
|
||||
//
|
||||
// import com.facebook.drawee.backends.pipeline.Fresco;
|
||||
// import com.facebook.drawee.controller.BaseControllerListener;
|
||||
// import com.facebook.imagepipeline.image.ImageInfo;
|
||||
// import com.facebook.imagepipeline.request.ImageRequest;
|
||||
// import com.facebook.imagepipeline.request.ImageRequestBuilder;
|
||||
// import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
// import com.google.android.exoplayer2.source.MediaSource;
|
||||
// import com.google.android.exoplayer2.source.MediaSourceEventListener;
|
||||
// import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
||||
// import com.google.android.exoplayer2.upstream.DataSource;
|
||||
// import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||
// import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory;
|
||||
// import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
||||
//
|
||||
// import java.io.IOException;
|
||||
// import java.util.List;
|
||||
//
|
||||
// import awais.instagrabber.R;
|
||||
// import awais.instagrabber.adapters.PostsMediaAdapter;
|
||||
// import awais.instagrabber.asyncs.PostFetcher;
|
||||
// import awais.instagrabber.asyncs.ProfileFetcher;
|
||||
// import awais.instagrabber.asyncs.i.iPostFetcher;
|
||||
// import awais.instagrabber.customviews.CommentMentionClickSpan;
|
||||
// import awais.instagrabber.customviews.helpers.SwipeGestureListener;
|
||||
// import awais.instagrabber.databinding.FragmentPostViewBinding;
|
||||
// import awais.instagrabber.fragments.main.viewmodels.BasePostViewModel;
|
||||
// import awais.instagrabber.fragments.main.viewmodels.DiscoverItemViewModel;
|
||||
// import awais.instagrabber.fragments.main.viewmodels.FeedViewModel;
|
||||
// import awais.instagrabber.interfaces.FetchListener;
|
||||
// import awais.instagrabber.interfaces.SwipeEvent;
|
||||
// import awais.instagrabber.models.BasePostModel;
|
||||
// import awais.instagrabber.models.PostModel;
|
||||
// import awais.instagrabber.models.ProfileModel;
|
||||
// import awais.instagrabber.models.ViewerPostModel;
|
||||
// import awais.instagrabber.models.enums.MediaItemType;
|
||||
// import awais.instagrabber.models.enums.PostItemType;
|
||||
// import awais.instagrabber.utils.Constants;
|
||||
// import awais.instagrabber.utils.Utils;
|
||||
//
|
||||
// import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||
//
|
||||
// public class PostViewFragmentBackup extends Fragment {
|
||||
//
|
||||
// private FragmentPostViewBinding binding;
|
||||
// private LinearLayout root;
|
||||
// private AppCompatActivity fragmentActivity;
|
||||
// private PostItemType postType;
|
||||
// private int postIndex;
|
||||
// private String postId;
|
||||
// private SimpleExoPlayer player;
|
||||
// private String postShortCode;
|
||||
// private BasePostViewModel<?> postViewModel;
|
||||
// private ViewerPostModel currentPost;
|
||||
// private List<? extends BasePostModel> postList;
|
||||
// private LinearLayout.LayoutParams containerLayoutParams;
|
||||
// private BasePostModel basePostModel;
|
||||
// private String prevUsername;
|
||||
// private ProfileModel profileModel;
|
||||
// private String postUserId;
|
||||
// private CharSequence postCaption;
|
||||
//
|
||||
// private final View.OnClickListener onClickListener = new View.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(final View v) {
|
||||
// // if (v == binding.topPanel.ivProfilePic) {
|
||||
// // new AlertDialog.Builder(requireContext()).setAdapter(profileDialogAdapter, profileDialogListener)
|
||||
// //.setNeutralButton(R.string.cancel, null).setTitle(viewerPostModel.getUsername()).show();
|
||||
// // return;
|
||||
// // }
|
||||
// if (v == binding.ivToggleFullScreen) {
|
||||
// // toggleFullscreen();
|
||||
//
|
||||
// final LinearLayout topPanelRoot = binding.topPanel.getRoot();
|
||||
// final int iconRes;
|
||||
//
|
||||
// if (containerLayoutParams.weight != 3.3f) {
|
||||
// containerLayoutParams.weight = 3.3f;
|
||||
// iconRes = R.drawable.ic_fullscreen_exit;
|
||||
// topPanelRoot.setVisibility(View.GONE);
|
||||
// binding.btnDownload.setVisibility(View.VISIBLE);
|
||||
// binding.bottomPanel.tvPostDate.setVisibility(View.GONE);
|
||||
// } else {
|
||||
// containerLayoutParams.weight = (binding.mediaList.getVisibility() == View.VISIBLE) ? 1.35f : 1.9f;
|
||||
// containerLayoutParams.weight += (Utils.isEmpty(settingsHelper.getString(Constants.COOKIE))) ? 0.3f : 0;
|
||||
// iconRes = R.drawable.ic_fullscreen;
|
||||
// topPanelRoot.setVisibility(View.VISIBLE);
|
||||
// binding.btnDownload.setVisibility(View.GONE);
|
||||
// binding.bottomPanel.tvPostDate.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
//
|
||||
// binding.ivToggleFullScreen.setImageResource(iconRes);
|
||||
// binding.container.setLayoutParams(containerLayoutParams);
|
||||
//
|
||||
// } else if (v == binding.bottomPanel.btnMute) {
|
||||
// if (player != null) {
|
||||
// final float intVol = player.getVolume() == 0f ? 1f : 0f;
|
||||
// player.setVolume(intVol);
|
||||
// binding.bottomPanel.btnMute.setImageResource(intVol == 0f ? R.drawable.ic_volume_off_24 : R.drawable.ic_volume_up_24);
|
||||
// Utils.sessionVolumeFull = intVol == 1f;
|
||||
// }
|
||||
// } else if (v == binding.btnLike) {
|
||||
// // new PostViewer.PostAction().execute("likes");
|
||||
// } else if (v == binding.btnBookmark) {
|
||||
// // new PostViewer.PostAction().execute("save");
|
||||
// } else {
|
||||
// // final Object tag = v.getTag();
|
||||
// // if (tag instanceof ViewerPostModel) {
|
||||
// // viewerPostModel = (ViewerPostModel) tag;
|
||||
// // slidePos = Math.max(0, viewerPostModel.getPosition());
|
||||
// // refreshPost();
|
||||
// // }
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
// private final PostsMediaAdapter mediaAdapter = new PostsMediaAdapter(null, onClickListener);
|
||||
// private final FetchListener<ViewerPostModel[]> pfl = result -> {
|
||||
// final Context context = getContext();
|
||||
// if (result == null || result.length < 1 && context != null) {
|
||||
// Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||
// return;
|
||||
// }
|
||||
// currentPost = result[0];
|
||||
// mediaAdapter.setData(result);
|
||||
// if (result.length > 1) {
|
||||
// binding.mediaList.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
// LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.55f
|
||||
// ));
|
||||
// containerLayoutParams.weight = 1.35f;
|
||||
// containerLayoutParams.weight += (Utils.isEmpty(settingsHelper.getString(Constants.COOKIE))) ? 0.3f : 0;
|
||||
// binding.container.setLayoutParams(containerLayoutParams);
|
||||
// binding.mediaList.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
//
|
||||
// // viewerCaptionParent.setOnTouchListener(gestureTouchListener);
|
||||
// // binding.playerView.setOnTouchListener(gestureTouchListener);
|
||||
// // binding.imageViewer.setOnSingleFlingListener((e1, e2, velocityX, velocityY) -> {
|
||||
// // final float diffX = e2.getX() - e1.getX();
|
||||
// // if (Math.abs(diffX) > Math.abs(e2.getY() - e1.getY()) && Math.abs(diffX) > SwipeGestureListener.SWIPE_THRESHOLD
|
||||
// // && Math.abs(velocityX) > SwipeGestureListener.SWIPE_VELOCITY_THRESHOLD) {
|
||||
// // swipeEvent.onSwipe(diffX > 0);
|
||||
// // return true;
|
||||
// // }
|
||||
// // return false;
|
||||
// // });
|
||||
//
|
||||
// final long commentsCount = currentPost.getCommentsCount();
|
||||
// binding.bottomPanel.commentsCount.setText(String.valueOf(commentsCount));
|
||||
// binding.bottomPanel.btnComments.setVisibility(View.VISIBLE);
|
||||
//
|
||||
// // binding.bottomPanel.btnComments.setOnClickListener(v -> startActivityForResult(
|
||||
// // new Intent(requireContext(), CommentsViewer.class)
|
||||
// // .putExtra(Constants.EXTRAS_SHORTCODE, postModel.getShortCode())
|
||||
// // .putExtra(Constants.EXTRAS_POST, currentPost.getPostId())
|
||||
// // .putExtra(Constants.EXTRAS_USER, postUserId), 6969)
|
||||
// binding.bottomPanel.btnComments.setClickable(true);
|
||||
// binding.bottomPanel.btnComments.setEnabled(true);
|
||||
//
|
||||
// if (basePostModel instanceof PostModel) {
|
||||
// final PostModel postModel = (PostModel) basePostModel;
|
||||
// postModel.setPostId(currentPost.getPostId());
|
||||
// postModel.setTimestamp(currentPost.getTimestamp());
|
||||
// postModel.setPostCaption(currentPost.getPostCaption());
|
||||
// // if (!ok) {
|
||||
// // liked = currentPost.getLike();
|
||||
// // saved = currentPost.getBookmark();
|
||||
// // }
|
||||
// }
|
||||
// showCurrentPost();
|
||||
// // refreshPost();
|
||||
// };
|
||||
// private int lastSlidePos;
|
||||
// private int slidePos;
|
||||
// private String url;
|
||||
// private SwipeEvent swipeEvent;
|
||||
// private GestureDetectorCompat gestureDetector;
|
||||
//
|
||||
// @Override
|
||||
// public void onCreate(@Nullable final Bundle savedInstanceState) {
|
||||
// super.onCreate(savedInstanceState);
|
||||
// fragmentActivity = (AppCompatActivity) requireActivity();
|
||||
// if (fragmentActivity.getSupportActionBar() != null) {
|
||||
// fragmentActivity.getSupportActionBar().setTitle("");
|
||||
// }
|
||||
// setHasOptionsMenu(true);
|
||||
// }
|
||||
//
|
||||
// @Nullable
|
||||
// @Override
|
||||
// public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
|
||||
// if (root != null) {
|
||||
// return root;
|
||||
// }
|
||||
// binding = FragmentPostViewBinding.inflate(inflater, container, false);
|
||||
// root = binding.getRoot();
|
||||
// binding.mediaList.setLayoutManager(new LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false));
|
||||
// binding.mediaList.setAdapter(mediaAdapter);
|
||||
// binding.mediaList.setVisibility(View.GONE);
|
||||
// return root;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
|
||||
// containerLayoutParams = (LinearLayout.LayoutParams) binding.container.getLayoutParams();
|
||||
// init();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onDestroy() {
|
||||
// super.onDestroy();
|
||||
// }
|
||||
//
|
||||
// private void init() {
|
||||
// final Bundle arguments = getArguments();
|
||||
// if (arguments == null) return;
|
||||
// final PostViewFragmentArgs fragmentArgs = PostViewFragmentArgs.fromBundle(arguments);
|
||||
// postType = fragmentArgs.getPostType() == null ? null : PostItemType.valueOf(fragmentArgs.getPostType());
|
||||
// postIndex = fragmentArgs.getPostIndex();
|
||||
// postId = fragmentArgs.getPostId();
|
||||
// postShortCode = fragmentArgs.getPostShortCode();
|
||||
// setupSwipe();
|
||||
// if (postType != null && postIndex >= 0) {
|
||||
// basePostModel = getBasePostFromViewModel();
|
||||
// if (basePostModel != null) {
|
||||
// if (basePostModel.getShortCode() != null) {
|
||||
// fetchPostFromShortCode(basePostModel.getShortCode());
|
||||
// return;
|
||||
// }
|
||||
// fetchPostFromPostId(basePostModel.getPostId());
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// // getStartPost();
|
||||
// // showCurrentPost();
|
||||
// // setupTop();
|
||||
// // setupPost();
|
||||
// // setupBottom();
|
||||
// }
|
||||
//
|
||||
// private void setupSwipe() {
|
||||
// swipeEvent = isRight -> {
|
||||
// // final List<? extends BasePostModel> itemGetterItems;
|
||||
// // final boolean isMainSwipe;
|
||||
// //
|
||||
// // if (postType == PostItemType.SAVED && SavedViewer.itemGetter != null) {
|
||||
// // itemGetterItems = SavedViewer.itemGetter.get(postType);
|
||||
// // isMainSwipe = !(itemGetterItems.size() < 1 || postType == PostItemType.SAVED && isFromShare);
|
||||
// // } else if (postType != null && MainActivityBackup.itemGetter != null) {
|
||||
// // itemGetterItems = MainActivityBackup.itemGetter.get(postType);
|
||||
// // isMainSwipe = !(itemGetterItems.size() < 1 || postType == PostItemType.MAIN && isFromShare);
|
||||
// // } else {
|
||||
// // itemGetterItems = null;
|
||||
// // isMainSwipe = false;
|
||||
// // }
|
||||
// //
|
||||
// // final BasePostModel[] basePostModels = mediaAdapter.getPostModels();
|
||||
// // final int slides = basePostModels.length;
|
||||
// //
|
||||
// // int position = basePostModel.getPosition();
|
||||
// //
|
||||
// // if (isRight) {
|
||||
// // --slidePos;
|
||||
// // if (!isMainSwipe && slidePos < 0) slidePos = 0;
|
||||
// // if (slides > 0 && slidePos >= 0) {
|
||||
// // if (basePostModels[slidePos] instanceof ViewerPostModel) {
|
||||
// // currentPost = (ViewerPostModel) basePostModels[slidePos];
|
||||
// // }
|
||||
// // showCurrentPost();
|
||||
// // return;
|
||||
// // }
|
||||
// // if (isMainSwipe && --position < 0) position = itemGetterItems.size() - 1;
|
||||
// // } else {
|
||||
// // ++slidePos;
|
||||
// // if (!isMainSwipe && slidePos >= slides) slidePos = slides - 1;
|
||||
// // if (slides > 0 && slidePos < slides) {
|
||||
// // if (basePostModels[slidePos] instanceof ViewerPostModel) {
|
||||
// // currentPost = (ViewerPostModel) basePostModels[slidePos];
|
||||
// // }
|
||||
// // showCurrentPost();
|
||||
// // return;
|
||||
// // }
|
||||
// // if (isMainSwipe && ++position >= itemGetterItems.size()) position = 0;
|
||||
// // }
|
||||
// //
|
||||
// // if (isMainSwipe) {
|
||||
// // slidePos = 0;
|
||||
// // ok = false;
|
||||
// // Log.d("AWAISKING_APP", "swipe left <<< post[" + position + "]: " + basePostModel + " -- " + slides);
|
||||
// // basePostModel = itemGetterItems.get(position);
|
||||
// // basePostModel.setPosition(position);
|
||||
// // showCurrentPost();
|
||||
// // }
|
||||
// };
|
||||
// gestureDetector = new GestureDetectorCompat(requireContext(), new SwipeGestureListener(swipeEvent));
|
||||
// }
|
||||
//
|
||||
// private void fetchPostFromPostId(final String postId) {
|
||||
// new iPostFetcher(postId, pfl).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
// }
|
||||
//
|
||||
// private void fetchPostFromShortCode(final String shortCode) {
|
||||
// new PostFetcher(shortCode, pfl)
|
||||
// .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
// }
|
||||
//
|
||||
// private BasePostModel getBasePostFromViewModel() {
|
||||
// switch (postType) {
|
||||
// case FEED:
|
||||
// postViewModel = new ViewModelProvider(fragmentActivity).get(FeedViewModel.class);
|
||||
// break;
|
||||
// case MAIN:
|
||||
// // ???
|
||||
// break;
|
||||
// case SAVED:
|
||||
// // ???
|
||||
// break;
|
||||
// case DISCOVER:
|
||||
// postViewModel = new ViewModelProvider(fragmentActivity).get(DiscoverItemViewModel.class);
|
||||
// }
|
||||
// if (postViewModel == null) return null;
|
||||
// postList = postViewModel.getList().getValue();
|
||||
// if (postList == null) return null;
|
||||
// return postList.get(postIndex);
|
||||
// }
|
||||
//
|
||||
// private void showCurrentPost() {
|
||||
// setupPostInfoBar("@" + currentPost.getUsername(),
|
||||
// currentPost.getItemType(),
|
||||
// currentPost.getLocationName(),
|
||||
// currentPost.getLocation());
|
||||
// // postCaption = basePostModel.getPostCaption();
|
||||
// ((View) binding.bottomPanel.viewerCaption.getParent()).setVisibility(View.VISIBLE);
|
||||
// // binding.bottomPanel.btnDownload.setOnClickListener(downloadClickListener);
|
||||
// if (containerLayoutParams.weight != 3.3f) {
|
||||
// containerLayoutParams.weight = (binding.mediaList.getVisibility() == View.VISIBLE) ? 1.35f : 1.9f;
|
||||
// binding.container.setLayoutParams(containerLayoutParams);
|
||||
// }
|
||||
// if (binding.mediaList.getVisibility() == View.VISIBLE) {
|
||||
// ViewerPostModel item = mediaAdapter.getItemAt(lastSlidePos);
|
||||
// if (item != null) {
|
||||
// item.setCurrentSlide(false);
|
||||
// mediaAdapter.notifyItemChanged(lastSlidePos, item);
|
||||
// }
|
||||
//
|
||||
// item = mediaAdapter.getItemAt(slidePos);
|
||||
// if (item != null) {
|
||||
// item.setCurrentSlide(true);
|
||||
// mediaAdapter.notifyItemChanged(slidePos, item);
|
||||
// }
|
||||
// }
|
||||
// lastSlidePos = slidePos;
|
||||
// postCaption = currentPost.getPostCaption();
|
||||
//
|
||||
// if (Utils.hasMentions(postCaption)) {
|
||||
// binding.bottomPanel.viewerCaption.setText(Utils.getMentionText(postCaption), TextView.BufferType.SPANNABLE);
|
||||
// // binding.bottomPanel.viewerCaption.setMentionClickListener((view, text, isHashtag, isLocation) -> searchUsername(text));
|
||||
// } else {
|
||||
// binding.bottomPanel.viewerCaption.setMentionClickListener(null);
|
||||
// binding.bottomPanel.viewerCaption.setText(postCaption);
|
||||
// }
|
||||
//
|
||||
// // setupPostInfoBar("@" + viewerPostModel.getUsername(), viewerPostModel.getItemType(),
|
||||
// // viewerPostModel.getLocationName(), viewerPostModel.getLocation());
|
||||
//
|
||||
// // if (postModel instanceof PostModel) {
|
||||
// // final PostModel postModel = (PostModel) this.postModel;
|
||||
// // postModel.setPostId(viewerPostModel.getPostId());
|
||||
// // postModel.setTimestamp(viewerPostModel.getTimestamp());
|
||||
// // postModel.setPostCaption(viewerPostModel.getPostCaption());
|
||||
// // if (liked == true) {
|
||||
// // binding.btnLike.setText(resources.getString(R.string.unlike, viewerPostModel.getLikes()
|
||||
// // + ((ok && viewerPostModel.getLike() != liked) ? (liked ? 1L : -1L) : 0L)));
|
||||
// // binding.btnLike.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(
|
||||
// // getApplicationContext(), R.color.btn_pink_background)));
|
||||
// // } else {
|
||||
// // binding.btnLike.setText(resources.getString(R.string.like, viewerPostModel.getLikes()
|
||||
// // + ((ok && viewerPostModel.getLike() != liked) ? (liked ? 1L : -1L) : 0L)));
|
||||
// // binding.btnLike.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(
|
||||
// // getApplicationContext(), R.color.btn_lightpink_background)));
|
||||
// // }
|
||||
// // if (saved == true) {
|
||||
// // binding.btnBookmark.setText(R.string.unbookmark);
|
||||
// // binding.btnBookmark.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(
|
||||
// // getApplicationContext(), R.color.btn_orange_background)));
|
||||
// // } else {
|
||||
// // binding.btnBookmark.setText(R.string.bookmark);
|
||||
// // binding.btnBookmark.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(
|
||||
// // getApplicationContext(), R.color.btn_lightorange_background)));
|
||||
// // }
|
||||
// // }
|
||||
//
|
||||
// binding.bottomPanel.tvPostDate.setText(currentPost.getPostDate());
|
||||
// binding.bottomPanel.tvPostDate.setVisibility(containerLayoutParams.weight != 3.3f ? View.VISIBLE : View.GONE);
|
||||
// binding.bottomPanel.tvPostDate.setSelected(true);
|
||||
//
|
||||
// url = currentPost.getDisplayUrl();
|
||||
// // releasePlayer();
|
||||
//
|
||||
// binding.btnDownload.setVisibility(containerLayoutParams.weight == 3.3f ? View.VISIBLE : View.GONE);
|
||||
// if (currentPost.getItemType() == MediaItemType.MEDIA_TYPE_VIDEO) setupVideo();
|
||||
// else setupImage();
|
||||
// }
|
||||
//
|
||||
// private void setupPostInfoBar(final String username,
|
||||
// final MediaItemType itemType,
|
||||
// final String locationName,
|
||||
// final String location) {
|
||||
// if (prevUsername == null || !prevUsername.equals(username)) {
|
||||
// binding.topPanel.ivProfilePic.setImageRequest(null);
|
||||
// if (!Utils.isEmpty(username) && username.charAt(0) == '@') {
|
||||
// new ProfileFetcher(username.substring(1), result -> {
|
||||
// profileModel = result;
|
||||
//
|
||||
// if (result != null) {
|
||||
// // final String hdProfilePic = result.getHdProfilePic();
|
||||
// // final String sdProfilePic = result.getSdProfilePic();
|
||||
// postUserId = result.getId();
|
||||
// // final boolean hdPicEmpty = Utils.isEmpty(hdProfilePic);
|
||||
// binding.topPanel.ivProfilePic.setImageURI(profileModel.getSdProfilePic());
|
||||
// binding.topPanel.viewStoryPost.setOnClickListener(v -> {
|
||||
// if (result.isPrivate()) {
|
||||
// Toast.makeText(requireContext(), R.string.share_private_post, Toast.LENGTH_LONG).show();
|
||||
// }
|
||||
// Intent sharingIntent = new Intent(Intent.ACTION_SEND);
|
||||
// sharingIntent.setType("text/plain");
|
||||
// sharingIntent.putExtra(Intent.EXTRA_TEXT, "https://instagram.com/p/" + postShortCode);
|
||||
// startActivity(Intent.createChooser(sharingIntent, result.isPrivate()
|
||||
// ? getString(R.string.share_private_post)
|
||||
// : getString(R.string.share_public_post)));
|
||||
// });
|
||||
// }
|
||||
// }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
// }
|
||||
// prevUsername = username;
|
||||
// }
|
||||
//
|
||||
// final String titlePrefix = getString(itemType == MediaItemType.MEDIA_TYPE_VIDEO ? R.string.post_viewer_video_post : R.string.post_viewer_image_post);
|
||||
// if (Utils.isEmpty(username)) binding.topPanel.title.setText(titlePrefix);
|
||||
// else {
|
||||
// final int titleLen = username.length();
|
||||
// final SpannableString spannableString = new SpannableString(username);
|
||||
// spannableString.setSpan(new CommentMentionClickSpan(), 0, titleLen, 0);
|
||||
// binding.topPanel.title.setText(spannableString);
|
||||
// }
|
||||
//
|
||||
// if (location == null) {
|
||||
// binding.topPanel.location.setVisibility(View.GONE);
|
||||
// binding.topPanel.title.setLayoutParams(new RelativeLayout.LayoutParams(
|
||||
// RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
|
||||
// } else {
|
||||
// binding.topPanel.location.setVisibility(View.VISIBLE);
|
||||
// binding.topPanel.location.setText(locationName);
|
||||
// // binding.topPanel.location.setOnClickListener(v -> searchUsername(location));
|
||||
// binding.topPanel.title.setLayoutParams(new RelativeLayout.LayoutParams(
|
||||
// RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT
|
||||
// ));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void setupVideo() {
|
||||
// binding.playerView.setVisibility(View.VISIBLE);
|
||||
// binding.bottomPanel.btnDownload.setVisibility(View.VISIBLE);
|
||||
// binding.bottomPanel.btnMute.setVisibility(View.VISIBLE);
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// binding.imageViewer.setVisibility(View.GONE);
|
||||
// binding.imageViewer.setController(null);
|
||||
//
|
||||
// if (currentPost.getVideoViews() > -1) {
|
||||
// binding.bottomPanel.videoViewsContainer.setVisibility(View.VISIBLE);
|
||||
// binding.bottomPanel.tvVideoViews.setText(String.valueOf(currentPost.getVideoViews()));
|
||||
// }
|
||||
//
|
||||
// player = new SimpleExoPlayer.Builder(requireContext()).build();
|
||||
// binding.playerView.setPlayer(player);
|
||||
// float vol = Utils.settingsHelper.getBoolean(Constants.MUTED_VIDEOS) ? 0f : 1f;
|
||||
// if (vol == 0f && Utils.sessionVolumeFull) vol = 1f;
|
||||
//
|
||||
// player.setVolume(vol);
|
||||
// player.setPlayWhenReady(Utils.settingsHelper.getBoolean(Constants.AUTOPLAY_VIDEOS));
|
||||
// final Context context = requireContext();
|
||||
// final DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(context, "instagram");
|
||||
// final SimpleCache simpleCache = Utils.getSimpleCacheInstance(context);
|
||||
// CacheDataSourceFactory cacheDataSourceFactory = null;
|
||||
// if (simpleCache != null) {
|
||||
// cacheDataSourceFactory = new CacheDataSourceFactory(simpleCache, dataSourceFactory);
|
||||
// }
|
||||
// final DataSource.Factory factory = cacheDataSourceFactory != null ? cacheDataSourceFactory : dataSourceFactory;
|
||||
// final ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(factory).createMediaSource(Uri.parse(url));
|
||||
// mediaSource.addEventListener(new Handler(), new MediaSourceEventListener() {
|
||||
// @Override
|
||||
// public void onLoadCompleted(final int windowIndex, @Nullable final MediaSource.MediaPeriodId mediaPeriodId, final LoadEventInfo loadEventInfo, final MediaLoadData mediaLoadData) {
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onLoadStarted(final int windowIndex, @Nullable final MediaSource.MediaPeriodId mediaPeriodId, final LoadEventInfo loadEventInfo, final MediaLoadData mediaLoadData) {
|
||||
// binding.progressView.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onLoadCanceled(final int windowIndex, @Nullable final MediaSource.MediaPeriodId mediaPeriodId, final LoadEventInfo loadEventInfo, final MediaLoadData mediaLoadData) {
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onLoadError(final int windowIndex, @Nullable final MediaSource.MediaPeriodId mediaPeriodId, final LoadEventInfo loadEventInfo, final MediaLoadData mediaLoadData, final IOException error, final boolean wasCanceled) {
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// }
|
||||
// });
|
||||
// player.prepare(mediaSource);
|
||||
// player.setVolume(vol);
|
||||
// binding.bottomPanel.btnMute.setImageResource(vol == 0f ? R.drawable.ic_volume_up_24 : R.drawable.ic_volume_off_24);
|
||||
// binding.bottomPanel.btnMute.setOnClickListener(onClickListener);
|
||||
// }
|
||||
//
|
||||
// private void setupImage() {
|
||||
// binding.bottomPanel.videoViewsContainer.setVisibility(View.GONE);
|
||||
// binding.playerView.setVisibility(View.GONE);
|
||||
// binding.progressView.setVisibility(View.VISIBLE);
|
||||
// binding.bottomPanel.btnMute.setVisibility(View.GONE);
|
||||
// binding.bottomPanel.btnDownload.setVisibility(View.VISIBLE);
|
||||
// binding.imageViewer.setVisibility(View.VISIBLE);
|
||||
//
|
||||
// final ImageRequest requestBuilder = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
|
||||
// .setLocalThumbnailPreviewsEnabled(true)
|
||||
// .setProgressiveRenderingEnabled(true)
|
||||
// .build();
|
||||
// binding.imageViewer.setController(
|
||||
// Fresco.newDraweeControllerBuilder()
|
||||
// .setImageRequest(requestBuilder)
|
||||
// .setOldController(binding.imageViewer.getController())
|
||||
// .setLowResImageRequest(ImageRequest.fromUri(url))
|
||||
// .setControllerListener(new BaseControllerListener<ImageInfo>() {
|
||||
//
|
||||
// @Override
|
||||
// public void onFailure(final String id, final Throwable throwable) {
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onFinalImageSet(final String id, final ImageInfo imageInfo, final Animatable animatable) {
|
||||
// binding.progressView.setVisibility(View.GONE);
|
||||
// }
|
||||
// })
|
||||
// .build()
|
||||
// );
|
||||
// }
|
||||
// }
|
@ -78,6 +78,10 @@ public final class ViewerPostModel extends BasePostModel {
|
||||
return liked;
|
||||
}
|
||||
|
||||
public void setBookmarked(final boolean bookmarked) {
|
||||
this.bookmarked = bookmarked;
|
||||
}
|
||||
|
||||
public void setSliderDisplayUrl(final String sliderDisplayUrl) {
|
||||
this.sliderDisplayUrl = sliderDisplayUrl;
|
||||
}
|
||||
|
@ -0,0 +1,20 @@
|
||||
package awais.instagrabber.repositories;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.FieldMap;
|
||||
import retrofit2.http.FormUrlEncoded;
|
||||
import retrofit2.http.Header;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.Path;
|
||||
|
||||
public interface MediaRepository {
|
||||
|
||||
@FormUrlEncoded
|
||||
@POST("/api/v1/media/{mediaId}/{action}/")
|
||||
Call<String> likeAction(@Header("User-Agent") final String userAgent,
|
||||
@Path("action") final String action,
|
||||
@Path("mediaId") final String mediaId,
|
||||
@FieldMap final Map<String, String> signedForm);
|
||||
}
|
128
app/src/main/java/awais/instagrabber/services/MediaService.java
Normal file
128
app/src/main/java/awais/instagrabber/services/MediaService.java
Normal file
@ -0,0 +1,128 @@
|
||||
package awais.instagrabber.services;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import awais.instagrabber.repositories.MediaRepository;
|
||||
import awais.instagrabber.utils.Constants;
|
||||
import awais.instagrabber.utils.Utils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class MediaService extends BaseService {
|
||||
private static final String TAG = "MediaService";
|
||||
|
||||
private final MediaRepository repository;
|
||||
|
||||
private static MediaService instance;
|
||||
|
||||
private MediaService() {
|
||||
final Retrofit retrofit = getRetrofitBuilder()
|
||||
.baseUrl("https://i.instagram.com")
|
||||
.build();
|
||||
repository = retrofit.create(MediaRepository.class);
|
||||
}
|
||||
|
||||
public static MediaService getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new MediaService();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public void like(final String mediaId,
|
||||
final String userId,
|
||||
final String csrfToken,
|
||||
final ServiceCallback<Boolean> callback) {
|
||||
likeAction(mediaId, userId, "like", csrfToken, callback);
|
||||
}
|
||||
|
||||
public void unlike(final String mediaId,
|
||||
final String userId,
|
||||
final String csrfToken,
|
||||
final ServiceCallback<Boolean> callback) {
|
||||
likeAction(mediaId, userId, "unlike", csrfToken, callback);
|
||||
}
|
||||
|
||||
public void save(final String mediaId,
|
||||
final String userId,
|
||||
final String csrfToken,
|
||||
final ServiceCallback<Boolean> callback) {
|
||||
likeAction(mediaId, userId, "save", csrfToken, callback);
|
||||
}
|
||||
|
||||
public void unsave(final String mediaId,
|
||||
final String userId,
|
||||
final String csrfToken,
|
||||
final ServiceCallback<Boolean> callback) {
|
||||
likeAction(mediaId, userId, "unsave", csrfToken, callback);
|
||||
}
|
||||
|
||||
private void likeAction(final String mediaId,
|
||||
final String userId,
|
||||
final String action,
|
||||
final String csrfToken,
|
||||
final ServiceCallback<Boolean> callback) {
|
||||
final Map<String, Object> form = new HashMap<>(4);
|
||||
form.put("media_id", mediaId);
|
||||
form.put("_csrftoken", csrfToken);
|
||||
form.put("_uid", userId);
|
||||
form.put("_uuid", UUID.randomUUID().toString());
|
||||
// form.put("radio_type", "wifi-none");
|
||||
final Map<String, String> signedForm = Utils.sign(form);
|
||||
final Call<String> request = repository.likeAction(Constants.I_USER_AGENT, action, mediaId, signedForm);
|
||||
request.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull final Call<String> call,
|
||||
@NonNull final Response<String> response) {
|
||||
if (callback == null) return;
|
||||
final String body = response.body();
|
||||
if (body == null) {
|
||||
callback.onFailure(new RuntimeException("Returned body is null"));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final JSONObject jsonObject = new JSONObject(body);
|
||||
final String status = jsonObject.optString("status");
|
||||
callback.onSuccess(status.equals("ok"));
|
||||
} catch (JSONException e) {
|
||||
callback.onFailure(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull final Call<String> call,
|
||||
@NonNull final Throwable t) {
|
||||
if (callback != null) {
|
||||
callback.onFailure(t);
|
||||
}
|
||||
}
|
||||
});
|
||||
// const signedFormData = this.client.request.sign({
|
||||
// media_id: options.mediaId,
|
||||
// _csrftoken: this.client.state.cookieCsrfToken,
|
||||
// _uid: this.client.state.cookieUserId,
|
||||
// _uuid: this.client.state.uuid,
|
||||
// });
|
||||
//
|
||||
// const { body } = await this.client.request.send({
|
||||
// url: `/api/v1/media/${options.mediaId}/${options.action}/`,
|
||||
// method: 'POST',
|
||||
// form: {
|
||||
// ...signedFormData,
|
||||
// d: options.d,
|
||||
// },
|
||||
// });
|
||||
// return body;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -7,8 +7,7 @@
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:animateLayoutChanges="true"
|
||||
android:orientation="vertical"
|
||||
android:weightSum="3.2"
|
||||
tools:context=".activities.PostViewer">
|
||||
android:weightSum="3.2">
|
||||
|
||||
<include
|
||||
android:id="@+id/topPanel"
|
||||
@ -49,15 +48,16 @@
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/ivToggleFullScreen"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="end|top"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:padding="4dp"
|
||||
app:srcCompat="@drawable/ic_fullscreen"
|
||||
app:tint="?android:textColorPrimary" />
|
||||
<!-- Removing for now, will add in later versions -->
|
||||
<!--<androidx.appcompat.widget.AppCompatImageView-->
|
||||
<!-- android:id="@+id/ivToggleFullScreen"-->
|
||||
<!-- android:layout_width="48dp"-->
|
||||
<!-- android:layout_height="48dp"-->
|
||||
<!-- android:layout_gravity="end|top"-->
|
||||
<!-- android:background="?selectableItemBackgroundBorderless"-->
|
||||
<!-- android:padding="4dp"-->
|
||||
<!-- app:srcCompat="@drawable/ic_fullscreen"-->
|
||||
<!-- app:tint="?android:textColorPrimary" />-->
|
||||
</FrameLayout>
|
||||
|
||||
<include
|
||||
|
Loading…
Reference in New Issue
Block a user