Commit 723771e4 authored by Thomas's avatar Thomas
Browse files

Fix a memory leak for not cropped media

parent b1b3c523
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -1612,6 +1612,15 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
            });
        }
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        //Release players if they already exist
        if(holder.binding.mediaContainer.getChildCount() > 0 ) {
            for(int i = 0 ; i < holder.binding.mediaContainer.getChildCount() ; i++ ) {
                PlayerView video =  holder.binding.mediaContainer.getChildAt(i).findViewById(R.id.media_video);
                if (video != null && video.getPlayer() != null) {
                    video.getPlayer().release();
                }
            }
        }
        holder.binding.mediaContainer.removeAllViews();
        PlayerView video = holder.binding.media.media1Container.findViewById(R.id.media_video);
        if (video != null && video.getPlayer() != null) {
@@ -3620,12 +3629,24 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
    public void onViewRecycled(@NonNull RecyclerView.ViewHolder viewHolder) {
        super.onViewRecycled(viewHolder);
        if (viewHolder instanceof StatusViewHolder holder) {
            if (holder.binding != null) {
                PlayerView doubleTapPlayerView = holder.binding.media.getRoot().findViewById(R.id.media_video);
            //Release players
            if (holder.binding != null) { //Cropped views
                if(holder.binding.media.getRoot().getChildCount() > 0) {
                    for(int i = 0 ; i < holder.binding.media.getRoot().getChildCount() ; i++ ) {
                        PlayerView doubleTapPlayerView =  holder.binding.media.getRoot().getChildAt(i).findViewById(R.id.media_video);
                        if (doubleTapPlayerView != null && doubleTapPlayerView.getPlayer() != null) {
                            doubleTapPlayerView.getPlayer().release();
                        }
                    }
                } else if (holder.binding.mediaContainer.getChildCount() > 0) { //Not cropped views
                    for(int i = 0 ; i < holder.binding.mediaContainer.getChildCount() ; i++ ) {
                        PlayerView doubleTapPlayerView =  holder.binding.mediaContainer.getChildAt(i).findViewById(R.id.media_video);
                        if (doubleTapPlayerView != null && doubleTapPlayerView.getPlayer() != null) {
                            doubleTapPlayerView.getPlayer().release();
                        }
                    }
                }
            }
        }
    }