mirror of https://github.com/KokaKiwi/BarInsta
121 lines
5.7 KiB
Java
121 lines
5.7 KiB
Java
package awais.instagrabber.adapters.viewholder.feed;
|
|
|
|
import android.content.Context;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
|
import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory;
|
|
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
|
|
|
import awais.instagrabber.adapters.FeedAdapterV2;
|
|
import awais.instagrabber.customviews.VideoPlayerCallbackAdapter;
|
|
import awais.instagrabber.customviews.VideoPlayerViewHelper;
|
|
import awais.instagrabber.databinding.ItemFeedVideoBinding;
|
|
import awais.instagrabber.models.FeedModel;
|
|
import awais.instagrabber.utils.Constants;
|
|
import awais.instagrabber.utils.NumberUtils;
|
|
import awais.instagrabber.utils.Utils;
|
|
|
|
import static awais.instagrabber.utils.Utils.settingsHelper;
|
|
|
|
public class FeedVideoViewHolder extends FeedItemViewHolder {
|
|
private static final String TAG = "FeedVideoViewHolder";
|
|
|
|
private final ItemFeedVideoBinding binding;
|
|
private final FeedAdapterV2.FeedItemCallback feedItemCallback;
|
|
private final Handler handler;
|
|
private final DefaultDataSourceFactory dataSourceFactory;
|
|
|
|
private CacheDataSourceFactory cacheDataSourceFactory;
|
|
private FeedModel feedModel;
|
|
|
|
// private final Runnable loadRunnable = new Runnable() {
|
|
// @Override
|
|
// public void run() {
|
|
// // loadPlayer(feedModel);
|
|
// }
|
|
// };
|
|
|
|
public FeedVideoViewHolder(@NonNull final ItemFeedVideoBinding binding,
|
|
final FeedAdapterV2.FeedItemCallback feedItemCallback) {
|
|
super(binding.getRoot(), binding.itemFeedTop, binding.itemFeedBottom, feedItemCallback);
|
|
this.binding = binding;
|
|
this.feedItemCallback = feedItemCallback;
|
|
binding.itemFeedBottom.tvVideoViews.setVisibility(View.VISIBLE);
|
|
handler = new Handler(Looper.getMainLooper());
|
|
final Context context = binding.getRoot().getContext();
|
|
dataSourceFactory = new DefaultDataSourceFactory(context, "instagram");
|
|
final SimpleCache simpleCache = Utils.getSimpleCacheInstance(context);
|
|
if (simpleCache != null) {
|
|
cacheDataSourceFactory = new CacheDataSourceFactory(simpleCache, dataSourceFactory);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void bindItem(final FeedModel feedModel) {
|
|
// Log.d(TAG, "Binding post: " + feedModel.getPostId());
|
|
this.feedModel = feedModel;
|
|
binding.itemFeedBottom.tvVideoViews.setText(String.valueOf(feedModel.getViewCount()));
|
|
final float vol = settingsHelper.getBoolean(Constants.MUTED_VIDEOS) ? 0f : 1f;
|
|
final VideoPlayerViewHelper.VideoPlayerCallback videoPlayerCallback = new VideoPlayerCallbackAdapter() {
|
|
|
|
@Override
|
|
public void onThumbnailClick() {
|
|
feedItemCallback.onPostClick(feedModel, binding.itemFeedTop.ivProfilePic, binding.videoPost.thumbnail);
|
|
}
|
|
|
|
@Override
|
|
public void onPlayerViewLoaded() {
|
|
final ViewGroup.LayoutParams layoutParams = binding.videoPost.playerView.getLayoutParams();
|
|
final int requiredWidth = Utils.displayMetrics.widthPixels;
|
|
final int resultingHeight = NumberUtils.getResultingHeight(requiredWidth, feedModel.getImageHeight(), feedModel.getImageWidth());
|
|
layoutParams.width = requiredWidth;
|
|
layoutParams.height = resultingHeight;
|
|
binding.videoPost.playerView.requestLayout();
|
|
}
|
|
};
|
|
final float aspectRatio = (float) feedModel.getImageWidth() / feedModel.getImageHeight();
|
|
final VideoPlayerViewHelper videoPlayerViewHelper = new VideoPlayerViewHelper(binding.getRoot().getContext(),
|
|
binding.videoPost,
|
|
feedModel.getDisplayUrl(),
|
|
vol,
|
|
aspectRatio,
|
|
feedModel.getThumbnailUrl(),
|
|
false,
|
|
null,
|
|
videoPlayerCallback);
|
|
binding.videoPost.thumbnail.post(() -> {
|
|
if (feedModel.getImageHeight() > 0.8 * Utils.displayMetrics.heightPixels) {
|
|
final ViewGroup.LayoutParams layoutParams = binding.videoPost.thumbnail.getLayoutParams();
|
|
layoutParams.height = (int) (0.8 * Utils.displayMetrics.heightPixels);
|
|
binding.videoPost.thumbnail.requestLayout();
|
|
}
|
|
});
|
|
}
|
|
|
|
public FeedModel getCurrentFeedModel() {
|
|
return feedModel;
|
|
}
|
|
|
|
// public void stopPlaying() {
|
|
// // Log.d(TAG, "Stopping post: " + feedModel.getPostId() + ", player: " + player + ", player.isPlaying: " + (player != null && player.isPlaying()));
|
|
// handler.removeCallbacks(loadRunnable);
|
|
// if (player != null) {
|
|
// player.release();
|
|
// }
|
|
// if (binding.videoPost.root.getDisplayedChild() == 1) {
|
|
// binding.videoPost.root.showPrevious();
|
|
// }
|
|
// }
|
|
//
|
|
// public void startPlaying() {
|
|
// handler.removeCallbacks(loadRunnable);
|
|
// handler.postDelayed(loadRunnable, 800);
|
|
// }
|
|
}
|