197 lines
6.6 KiB
Java
197 lines
6.6 KiB
Java
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<NotificationAdapter.Holder> {
|
||
private Context mContext;
|
||
private List<AlarmClockData> dataList;
|
||
private OnClickListener mOnClickListener;
|
||
|
||
public void setDataList(List<AlarmClockData> 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<Bitmap>() {
|
||
@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<Integer>() {
|
||
@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);
|
||
}
|
||
}
|
||
}
|