diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java index f90b2343..4a27ab89 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -11,7 +11,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.util.Log; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -281,6 +280,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter subredditOrUserIcons = new HashMap<>(); + private View.OnLayoutChangeListener onLayoutChangeListener; + private int recyclerViewWidth; public PostFragmentBase() { // Required empty public constructor @@ -322,6 +324,26 @@ public abstract class PostFragmentBase extends Fragment { return false; }); + onLayoutChangeListener = (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { + int width = right - left; + if (recyclerViewWidth == width) { + return; + } + recyclerViewWidth = width; + PostRecyclerViewAdapter adapter = getPostAdapter(); + if (adapter != null) { + if (mStaggeredGridLayoutManager != null) { + width /= mStaggeredGridLayoutManager.getSpanCount(); + } + int finalWidth = width; + v.post(() -> { + adapter.provideItemWidth(Utils.convertPxToDp(finalWidth, mActivity)); + refreshAdapter(); + }); + } + }; + getPostRecyclerView().addOnLayoutChangeListener(onLayoutChangeListener); + SharedPreferencesLiveDataKt.stringLiveData(mSharedPreferences, SharedPreferencesUtils.LONG_PRESS_POST_NON_MEDIA_AREA, SharedPreferencesUtils.LONG_PRESS_POST_VALUE_SHOW_POST_OPTIONS).observe(getViewLifecycleOwner(), s -> { if (getPostAdapter() != null) { getPostAdapter().setLongPressPostNonMediaAreaAction(s); @@ -355,6 +377,15 @@ public abstract class PostFragmentBase extends Fragment { ViewCompat.requestApplyInsets(view); } + @Override + public void onDestroyView() { + super.onDestroyView(); + if (onLayoutChangeListener != null) { + getPostRecyclerView().removeOnLayoutChangeListener(onLayoutChangeListener); + onLayoutChangeListener = null; + } + } + @Override public void onDestroy() { EventBus.getDefault().unregister(this); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java index 3f7cbc15..74aa571e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/Utils.java @@ -462,6 +462,11 @@ public final class Utils { return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); } + public static int convertPxToDp(int px, Context context) { + DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); + return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); + } + @Nullable public static Drawable getTintedDrawable(Context context, int drawableId, int color) { final Drawable drawable = AppCompatResources.getDrawable(context, drawableId);