Signal-Android/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewHolder.java

66 wiersze
2.4 KiB
Java

package org.thoughtcrime.securesms.wallpaper;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.DisplayMetricsUtil;
import org.thoughtcrime.securesms.util.adapter.mapping.Factory;
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory;
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder;
class ChatWallpaperViewHolder extends MappingViewHolder<ChatWallpaperSelectionMappingModel> {
private final AspectRatioFrameLayout frame;
private final ImageView preview;
private final EventListener eventListener;
public ChatWallpaperViewHolder(@NonNull View itemView, @Nullable EventListener eventListener, @Nullable DisplayMetrics windowDisplayMetrics) {
super(itemView);
this.frame = itemView.findViewById(R.id.chat_wallpaper_preview_frame);
this.preview = itemView.findViewById(R.id.chat_wallpaper_preview);
this.eventListener = eventListener;
if (windowDisplayMetrics != null) {
DisplayMetricsUtil.forceAspectRatioToScreenByAdjustingHeight(windowDisplayMetrics, itemView);
} else if (frame != null) {
frame.setAspectRatio(1.0f);
}
}
@Override
public void bind(@NonNull ChatWallpaperSelectionMappingModel model) {
model.loadInto(preview);
preview.setColorFilter(ChatWallpaperDimLevelUtil.getDimColorFilterForNightMode(context, model.getWallpaper()));
if (eventListener != null) {
preview.setOnClickListener(unused -> {
if (getAdapterPosition() != RecyclerView.NO_POSITION) {
eventListener.onModelClick(model);
}
});
}
}
public static @NonNull Factory<ChatWallpaperSelectionMappingModel> createFactory(@LayoutRes int layout, @Nullable EventListener listener, @Nullable DisplayMetrics windowDisplayMetrics) {
return new LayoutFactory<>(view -> new ChatWallpaperViewHolder(view, listener, windowDisplayMetrics), layout);
}
public interface EventListener {
default void onModelClick(@NonNull ChatWallpaperSelectionMappingModel model) {
onClick(model.getWallpaper());
}
void onClick(@NonNull ChatWallpaper chatWallpaper);
}
}