package com.xxpatx.os.adapter; import android.content.Context; import android.graphics.Bitmap; import android.media.AudioAttributes; import android.media.MediaPlayer; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.shehuan.niv.NiceImageView; import com.xxpatx.os.R; import com.xxpatx.os.alarm.AlarmClockData; import com.xxpatx.os.utils.FFmpegUtils; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class NotificationAdapter extends RecyclerView.Adapter { private Context mContext; private List dataList; private OnClickListener mOnClickListener; public void setDataList(List data) { this.dataList = data; notifyDataSetChanged(); } public void setOnClickListener(OnClickListener listener) { this.mOnClickListener = listener; } public interface OnClickListener { void onClick(); } @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { mContext = parent.getContext(); return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_notification, parent, false)); } @Override public void onBindViewHolder(@NonNull Holder holder, int position) { switch (position%3){ case 1: holder.root.setBackground(mContext.getDrawable(R.drawable.home_alarm_blue)); break; case 2: holder.root.setBackground(mContext.getDrawable(R.drawable.home_alarm_green)); break; case 0: holder.root.setBackground(mContext.getDrawable(R.drawable.home_alarm_red)); break; default: } AlarmClockData alarmClockData = dataList.get(position); // holder.tv_title.setText("提醒事件:" + alarmClockData.getTitle()); String time = alarmClockData.getTime(); if (time.length() > 5) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat hours = new SimpleDateFormat("HH:mm"); try { Date date = sdf.parse(time); String hourTime = hours.format(date); holder.tv_time.setText(hourTime); } catch (ParseException e) { e.printStackTrace(); } } else { holder.tv_time.setText(time); } String file = alarmClockData.getFile(); if (TextUtils.isEmpty(file)) { // Glide.with(holder.iv_cover).load(R.drawable.home_reminder_icon).into(holder.iv_cover); } else { FFmpegUtils.loadVideoScreenshot(file, new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Bitmap bitmap) { // Glide.with(holder.iv_cover).load(bitmap).into(holder.iv_cover); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } String voice = alarmClockData.getVoice(); holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mOnClickListener != null) { mOnClickListener.onClick(); } } }); if (TextUtils.isEmpty(voice)) { // holder.cl_voice.setVisibility(View.GONE); } else { // holder.cl_voice.setVisibility(View.VISIBLE); MediaPlayer mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioAttributes( new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build() ); mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: ")); mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: ")); mMediaPlayer.setOnErrorListener((mp, what, extra) -> false); //设置音频文件到MediaPlayer对象中 try { mMediaPlayer.setDataSource(voice); } catch (IOException e) { e.printStackTrace(); } //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr mMediaPlayer.prepareAsync(); FFmpegUtils.getDurationInMilliseconds(voice, new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Integer integer) { // holder.tv_voice.setText(integer + "秒"); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); // holder.cl_voice.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // mMediaPlayer.start(); // } // }); } } @Override public int getItemCount() { return dataList == null ? 0 : dataList.size(); } class Holder extends RecyclerView.ViewHolder { // TextView tv_title; TextView tv_time; // TextView tv_voice; // ConstraintLayout cl_voice; ConstraintLayout root; NiceImageView iv_cover; public Holder(@NonNull View itemView) { super(itemView); root = itemView.findViewById(R.id.root); // tv_title = itemView.findViewById(R.id.tv_title); tv_time = itemView.findViewById(R.id.tv_time); // tv_voice = itemView.findViewById(R.id.tv_voice); // cl_voice = itemView.findViewById(R.id.cl_voice); iv_cover = itemView.findViewById(R.id.iv_cover); } } }