package com.application.zhangshi_app_android.adapter; import android.app.Activity; import android.content.Context; import android.util.Base64; import android.util.TypedValue; import android.view.View; import androidx.annotation.Nullable; import com.android.app_base.base.BaseConfig; import com.android.app_base.base.adapter.BaseRVAdapter; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.databinding.ItemElectronicFileAddBinding; import com.application.zhangshi_app_android.ui.BrowserActivity; import com.application.zhangshi_app_android.ui.ImagePreviewActivity; import com.application.zhangshi_app_android.ui.PlayerActivity; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author Ljj * @date 2023.08.18. 23:54 * @desc 详情页里 可添加的电子文件 适配器 */ public class ElectronicFileAddAdapter extends BaseRVAdapter> { public static final String TAG = "ElectronicFileAddAdapter"; public static final int TYPE_NORMAL = 1; public static final int TYPE_Add = 2; public static final int TYPE_Add_INVISIBLE = 3; private boolean isShowAddItem;//是否显示添加按钮,即是否为编辑状态 true 为显示,false 为隐藏 private boolean isShowDeleteIcon;//是否显示右上角图标 true 为显示,false 为隐藏 private boolean isShowSelectIcon = false;//是否显示左上角选中图标 true 为显示,false 为隐藏 private boolean isPreview = true;//是否开启长按预览 true 为开启,false 为不开启 private final Set selectedItems = new HashSet<>();//被选中的item private OnItemAndAddClickListener mItemAndAddClickListener; public ElectronicFileAddAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_electronic_file_add; } @Override public int getItemCount() { int dataSize = mDataList == null ? 0 : mDataList.size(); if (isShowAddItem){ return dataSize + 1; }else { if (dataSize == 0) { return dataSize + 1;//没有数据时,需要多出一个item给添加按钮占位 } return dataSize; } } @Override public int getItemViewType(int position) { int dataSize = mDataList == null ? 0 : mDataList.size(); if (dataSize == 0){ //没有数据时,需要添加按钮占位 if (isShowAddItem) { return TYPE_Add; } else { return TYPE_Add_INVISIBLE; } }else { if (isShowAddItem) { if (position == dataSize) { return TYPE_Add; } else { return TYPE_NORMAL; } } else { return TYPE_NORMAL; } } } @Override protected void onBind(BaseViewHolder holder, int position) { if (getItemViewType(position) == TYPE_Add) { holder.getBinding().flAdd.setVisibility(View.VISIBLE); holder.getBinding().flImage.setVisibility(View.GONE); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemAndAddClickListener != null) { mItemAndAddClickListener.onAddClick(); } } }); } else if (getItemViewType(position) == TYPE_Add_INVISIBLE){ holder.getBinding().flAdd.setVisibility(View.INVISIBLE); holder.getBinding().flImage.setVisibility(View.GONE); } else if (getItemViewType(position) == TYPE_NORMAL){ holder.getBinding().flAdd.setVisibility(View.GONE); holder.getBinding().flImage.setVisibility(View.VISIBLE); String item = mDataList.get(position); if (isShowAddItem) { holder.getBinding().ivDelete.setVisibility(View.VISIBLE); } else { holder.getBinding().ivDelete.setVisibility(View.GONE); } if (isShowDeleteIcon) { holder.getBinding().ivDelete.setVisibility(View.VISIBLE); } else { holder.getBinding().ivDelete.setVisibility(View.GONE); } if (isShowSelectIcon) { holder.getBinding().ivSelect.setVisibility(View.VISIBLE); if (selectedItems.contains(item)){ holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_checked); } else { holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_unchecked); } } else { holder.getBinding().ivSelect.setVisibility(View.GONE); } //非预览状态下,点击item 调用 mItemAndAddClickListener.onItemClick //预览状态下,点击item 调用 相应的 文件预览 if (!isPreview){ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemAndAddClickListener != null) { mItemAndAddClickListener.onItemClick(holder.itemView,position); } } }); }else { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String url = mDataList.get(position); if (url.contains("profile/upload")) {//如果是上传到服务器的文件 //只取profile/upload以后的部分 url = url.substring(url.indexOf("profile/upload")); url = BaseConfig.BASE_URL_DOMAIN + "/" + url; //处理url进行Base64编码,借助 kkfileview 进行文件预览 // URL编码Base64编码后的URL try { String encodedUrl = URLEncoder.encode(Base64.encodeToString(url.getBytes(), Base64.NO_WRAP), "UTF-8"); String kkFileViewUrl = "https://www.bendudu.com:8085/preview/onlinePreview?url=" + encodedUrl; BrowserActivity.start(mContext, kkFileViewUrl); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } }); } if (item != null) { //非图片视频,打开文件预览 if (item.endsWith(".pdf") || item.endsWith(".PDF")) { TypedValue icPdf = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icPdf, icPdf, true); holder.getBinding().ivImage.setImageResource(icPdf.resourceId); } else if (item.endsWith(".zip") || item.endsWith(".ZIP") || item.endsWith(".aar") || item.endsWith(".AAR") || item.endsWith(".7z")) { TypedValue icZip = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icZip, icZip, true); holder.getBinding().ivImage.setImageResource(icZip.resourceId); } else if (item.endsWith(".doc") || item.endsWith(".docx") || item.endsWith(".DOC") || item.endsWith(".DOCX") || item.endsWith(".wps") || item.endsWith(".WPS")) { TypedValue icWord = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icWord, icWord, true); holder.getBinding().ivImage.setImageResource(icWord.resourceId); } else if (item.endsWith(".xls") || item.endsWith(".xlsx") || item.endsWith(".XLS") || item.endsWith(".XLSX")) { TypedValue icExcel = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icExcel, icExcel, true); holder.getBinding().ivImage.setImageResource(icExcel.resourceId); } else if (item.endsWith(".ppt") || item.endsWith(".PPT") || item.endsWith(".pptx") || item.endsWith(".PPTX")) { TypedValue icPpt = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icPpt, icPpt, true); holder.getBinding().ivImage.setImageResource(icPpt.resourceId); } else if (item.endsWith(".txt") || item.endsWith(".TXT")) { TypedValue icTxt = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icTxt, icTxt, true); holder.getBinding().ivImage.setImageResource(icTxt.resourceId); } else if (item.endsWith(".jpg") || item.endsWith(".JPG") || item.endsWith(".jpeg") || item.endsWith(".JPEG") || item.endsWith(".png") || item.endsWith(".PNG") || item.endsWith(".gif") || item.endsWith(".GIF") || item.endsWith(".bmp") || item.endsWith(".BMP")) { holder.getBinding().setUrl(item); if (isPreview) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImagePreviewActivity.start(mContext, item); } }); } } else if (item.endsWith(".mp4") || item.endsWith(".MP4") ) { holder.getBinding().flPlay.setVisibility(View.VISIBLE); holder.getBinding().setUrl(item); if (isPreview) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // new VideoPlayActivity.Builder() // .setVideoSource(item) // .setActivityOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) // .start(mContext); PlayerActivity.startWrapUrl((Activity) mContext, item,holder.itemView,true); } }); } } else if (item.endsWith(".mp3") || item.endsWith(".m4a") || item.endsWith(".MP3") || item.endsWith(".M4A")) { // holder.getBinding().flPlay.setVisibility(View.VISIBLE); TypedValue icAudio = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icAudio, icAudio, true); holder.getBinding().ivImage.setImageResource(icAudio.resourceId); } else { TypedValue icOther = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.icOther, icOther, true); holder.getBinding().ivImage.setImageResource(icOther.resourceId); } } } } @Override protected BaseViewHolder getViewHolder(ItemElectronicFileAddBinding itemBind, int viewType) { return new BaseViewHolder<>(itemBind); } public void setItemAndAddClickListener(OnItemAndAddClickListener itemAndAddClickListener) { mItemAndAddClickListener = itemAndAddClickListener; } public interface OnItemAndAddClickListener { /** * item点击事件 */ void onItemClick(View itemView, int position); /** * 添加电子文件 */ void onAddClick(); } public void setShowAddItem(boolean showAddItem) { isShowAddItem = showAddItem; notifyItemRangeChanged(0, getItemCount()); } public void setShowDeleteIcon(boolean showDeleteIcon) { isShowDeleteIcon = showDeleteIcon; notifyItemRangeChanged(0, getItemCount()); } public void setShowSelectIcon(boolean showSelectIcon) { isShowSelectIcon = showSelectIcon; notifyItemRangeChanged(0, getItemCount()); } public void setIsEdited(boolean isEdit) { setShowAddItem(isEdit); setShowDeleteIcon(isEdit); } public void addSelectedItem(String item) { selectedItems.add(item); notifyItemRangeChanged(0, getItemCount()); } public void addSelectedItems(List items) { selectedItems.addAll(items); notifyItemRangeChanged(0, getItemCount()); } public void removeSelectedItem(String item) { selectedItems.remove(item); notifyItemRangeChanged(0, getItemCount()); } public void changeSelectedItem(String item) { if (selectedItems.contains(item)) { selectedItems.remove(item); } else { selectedItems.add(item); } notifyItemRangeChanged(0, getItemCount()); } @Override public void setData(@Nullable List data) { selectedItems.clear(); super.setData(data); } public void clearSelectedItems() { selectedItems.clear(); notifyItemRangeChanged(0, getItemCount()); } public Set getSelectedItems() { return selectedItems; } public void changeSingleSelected(String item) { if (selectedItems.contains(item)) { selectedItems.remove(item); } else { selectedItems.clear(); selectedItems.add(item); } notifyItemRangeChanged(0, getItemCount()); } public void setPreview(boolean preview) { isPreview = preview; notifyItemRangeChanged(0, getItemCount()); } }