package com.basic.security.fragment.helper; import android.gesture.GestureOverlayView; import android.graphics.Color; import android.os.SystemClock; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.VideoView; import com.basic.security.R; import com.basic.security.base.BaseApplication; import com.basic.security.manager.AlarmManager; import com.basic.security.manager.LogManager; import com.basic.security.model.Alarm; import com.basic.security.utils.KeyboardUtil; import com.basic.security.utils.ToastUtil; import com.basic.security.utils.VideoPath; import com.basic.security.widget.CustomSpinner2; import com.bumptech.glide.Glide; import org.androidannotations.annotations.EFragment; import org.xutils.common.util.KeyValue; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; @EFragment public abstract class HomeGridViewAdapter extends HomePlayAlarmSound { public HomeGridViewAdapter.AlarmListAdapter alarmListAdapter; public Map viewHolderSet = new ConcurrentHashMap<>(); public class AlarmListAdapter extends BaseAdapter { public int getCount() { sqliteAlarmListLock.lock(); int size = sqliteAlarmList.size(); sqliteAlarmListLock.unlock(); return size; } public Object getItem(int position) { sqliteAlarmListLock.lock(); Object obj = sqliteAlarmList.get(position); sqliteAlarmListLock.unlock(); return obj; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; sqliteAlarmListLock.lock(); final Map alarm = sqliteAlarmList.get(position); sqliteAlarmListLock.unlock(); if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.alarm_view, null); viewHolder = new ViewHolder(); viewHolder.alarmPicture = convertView.findViewById(R.id.alarmPicture); viewHolder.alarmVideo = convertView.findViewById(R.id.alarmVideo); viewHolder.alarmVideoOverlay = convertView.findViewById(R.id.alarmVideoOverlay); viewHolder.alarmVideoGestureOverlayView = convertView.findViewById(R.id.alarmVideoGestureOverlayView); viewHolder.alarmTime = convertView.findViewById(R.id.alarmTime); viewHolder.alarmAddress = convertView.findViewById(R.id.alarmAddress); viewHolder.property = convertView.findViewById(R.id.property); viewHolder.alarmType = convertView.findViewById(R.id.alarmType); viewHolder.layout1 = convertView.findViewById(R.id.layout1); viewHolder.alarmPerson = convertView.findViewById(R.id.alarmPerson); viewHolder.showMatchPersonList = convertView.findViewById(R.id.showMatchPersonList); viewHolder.matchPersonListParent = convertView.findViewById(R.id.matchPersonListParent); viewHolder.matchPersonList = convertView.findViewById(R.id.matchPersonList); viewHolder.showPicture = convertView.findViewById(R.id.showPicture); viewHolder.playVideo = convertView.findViewById(R.id.playVideo); viewHolder.highlightShadow = convertView.findViewById(R.id.highlightShadow); viewHolder.highlightBorder = convertView.findViewById(R.id.highlightBorder); viewHolder.toggleSound = convertView.findViewById(R.id.toggleSound); viewHolder.closeAlarm = convertView.findViewById(R.id.closeAlarm); // KeyboardUtil.setupUI(convertView); convertView.setTag(viewHolder); KeyboardUtil.setupUI(convertView); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolderSet.put(viewHolder, viewHolder); ViewHolder viewHolder1 = viewHolder; viewHolder1.alarm = alarm; // if ("true".equals(alarm.get("alarmVideoValid"))) { // viewHolder.layout1.setBackgroundColor(Color.BLUE); // } else { // if ("DSVAD010220181119".equals(alarm.get(Alarm.indeviceid))) { // // viewHolder.layout1.setBackgroundColor(Color.GREEN); // } else { // viewHolder.layout1.setBackgroundColor(Color.RED); // // } // } viewHolder.showPicture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewHolder1.alarmVideoOverlay.setVisibility(View.INVISIBLE); stopVideo(viewHolder1); if (!"true".equals(viewHolder1.alarm.get("alarmPictureValid"))) { ToastUtil.show("显示图片失败, 图片路径错误。"); } goto_picture_fullscreen(viewHolder1); } }); if (!AlarmManager.removeNewAlarmIdSet(alarm)) { if ("true".equals(alarm.get("alarmVideoValid"))) { viewHolder1.alarmVideo.setVideoPath(alarm.get("alarmVideo")); if (AlarmManager.getAlarmPlaying(alarm)) { playVideo(viewHolder1); } else { stopVideo(viewHolder1); } } } else { AlarmManager.putAlarmPlaying(alarm, false); viewHolder.showPicture.setVisibility(View.VISIBLE); } viewHolder.playVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { goto_video_fullscreen(viewHolder1, true); } }); viewHolder.toggleSound.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { soundPlaying = !soundPlaying; viewHolder1.alarm.put("mute", "true"); AlarmManager.save(viewHolder1.alarm); viewHolder1.highlightBorder.setBackgroundResource(R.drawable.confirm_dialog_background); viewHolder1.highlightShadow.setVisibility(View.INVISIBLE); viewHolder1.toggleSound.setImageResource(R.drawable.u258); } }); if ("true".equals(viewHolder1.alarm.get("mute"))) { viewHolder1.toggleSound.setImageResource(R.drawable.u258); viewHolder1.highlightBorder.setBackgroundResource(R.drawable.confirm_dialog_background); viewHolder1.highlightShadow.setVisibility(View.INVISIBLE); } else { viewHolder1.toggleSound.setImageResource(R.drawable.u257); viewHolder1.highlightBorder.setBackgroundResource(R.drawable.highlight_border); viewHolder1.highlightShadow.setVisibility(View.VISIBLE); } if ("true".equals(viewHolder1.alarm.get("canClose"))) { viewHolder1.closeAlarm.setImageResource(R.drawable.u259); viewHolder.closeAlarm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewHolder1.alarm.put(Alarm.mute, "true"); viewHolder1.alarm.put("closeAlarm", "true"); new Thread(){ @Override public void run() { AlarmManager.deleteAlarm(viewHolder1.alarm); } }.start(); stopVideo(viewHolder1); sqliteAlarmListLock.lock(); sqliteAlarmList.remove(viewHolder1.alarm); sqliteAlarmListLock.unlock(); alarmListAdapter.notifyDataSetChanged(); ToastUtil.show("报警已确认!", false); } }); } else { viewHolder1.closeAlarm.setImageResource(R.drawable.u259_gray); viewHolder.closeAlarm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } viewHolder.alarmPicture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { goto_picture_fullscreen(viewHolder1); } }); viewHolder.alarmVideoGestureOverlayView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { goto_video_fullscreen(viewHolder1, true); } }); if (("true").equals(alarm.get("alarmPictureValid"))) { Glide .with(mainActivity()) .load(alarm.get("alarmPicture")) .into(viewHolder1.alarmPicture); } else { viewHolder1.alarmPicture.setImageResource(R.drawable.placeholder); } viewHolder.alarmAddress.setText(alarm.get("alarmAddress")); viewHolder.alarmTime.setText(alarm.get("alarmTime")); viewHolder.property.setText(alarm.get("property")); viewHolder.alarmType.setText("报警类型: "+alarm.get("alarmType")); viewHolder.matchPersonList.setVisibility(View.INVISIBLE); viewHolder.showMatchPersonList.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewHolder1.matchPersonList.performClick(); // viewHolder1.alarmPerson.setVisibility(View.INVISIBLE); // viewHolder1.showMatchPersonList.setVisibility(View.INVISIBLE); } }); viewHolder.showMatchPersonList.setVisibility(View.GONE); ViewGroup.LayoutParams alarmPictureParams = viewHolder.alarmPicture.getLayoutParams(); alarmPictureParams.height = WRAP_CONTENT; alarmPictureParams.width = WRAP_CONTENT; if ("人脸".equals(alarm.get("alarmType"))) { alarmPictureParams.height = MATCH_PARENT; viewHolder.matchPersonListParent.setVisibility(View.VISIBLE); String matchPersonListStr = viewHolder1.alarm.get("matchPersonListStr"); String[] matchPersonArray = null; if (matchPersonListStr != null && matchPersonListStr.length() > 0 && !"null".equals(matchPersonListStr)) { matchPersonArray = matchPersonListStr.split("`", -1); } viewHolder.alarmPerson.setVisibility(View.VISIBLE); if (matchPersonArray == null || matchPersonArray.length == 0 ) { viewHolder.showMatchPersonList.setVisibility(View.GONE); } else { for (int i = 0; i < matchPersonArray.length; i++) { String matchPerson = matchPersonArray[i]; if (matchPerson.length() > 9) { int len = 0; String newMatchPerson = ""; for (int j = 0; j < matchPerson.length(); j++) { if (Character.isIdeographic(matchPerson.codePointAt(j))) { len = len + 2; } else { len = len + 1; } if (len > 16 ) { newMatchPerson += "\r\n"; len = 0; } newMatchPerson += matchPerson.charAt(j); if (len == 16 ) { newMatchPerson += "\r\n"; len = 0; } } matchPersonArray[i] = newMatchPerson; } } viewHolder.alarmPerson.setText(matchPersonArray[0]); if (matchPersonArray.length > 1) { viewHolder.matchPersonList.setVisibility(View.VISIBLE); viewHolder.matchPersonList.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text2, matchPersonArray)); viewHolder.matchPersonList.setPopupBackgroundResource(R.drawable.round_border); viewHolder.showMatchPersonList.setVisibility(View.VISIBLE); } } try { if (viewHolder.matchPersonList.getAdapter() != null) { if (viewHolder.matchPersonList.getAdapter().getCount() > 1) { viewHolder.showMatchPersonList.setVisibility(View.VISIBLE); } else { viewHolder.showMatchPersonList.setVisibility(View.INVISIBLE); } } } catch (Exception e) { e.printStackTrace(); } } else { alarmPictureParams.width = MATCH_PARENT; viewHolder.matchPersonListParent.setVisibility(View.GONE); viewHolder.property.setVisibility(View.GONE); viewHolder.alarmPerson.setVisibility(View.GONE); viewHolder.showMatchPersonList.setVisibility(View.GONE); } viewHolder.alarmPicture.setLayoutParams(alarmPictureParams); viewHolder1.matchPersonList.setVisibility(View.VISIBLE); viewHolder1.matchPersonList.setViewHolder(viewHolder1); return convertView; } public class ViewHolder { public ImageView alarmPicture; public VideoView alarmVideo; public View alarmVideoOverlay; public GestureOverlayView alarmVideoGestureOverlayView; public TextView alarmTime; public TextView alarmAddress; public TextView property; public TextView alarmType; public TextView alarmPerson; public ImageView showPicture; public ImageView playVideo; public ImageView toggleSound; public ImageView closeAlarm; public ImageView showMatchPersonList; public View layout1; public CustomSpinner2 matchPersonList; public LinearLayout matchPersonListParent; public LinearLayout highlightShadow; public LinearLayout highlightBorder; public Map alarm; public long alarmVideoOverlayVisibleTime = 0; } } public void goto_picture_fullscreen(AlarmListAdapter.ViewHolder viewHolder) { if ("true".equals(viewHolder.alarm.get("alarmLargePictureValid"))) { mainActivity().goto_fullscreenImageView(viewHolder.alarm.get("alarmLargePicture")); } else { if ("true".equals(viewHolder.alarm.get("alarmPictureValid"))) { mainActivity().goto_fullscreenImageView(viewHolder.alarm.get("alarmPicture")); } ToastUtil.show("加载大图失败,图片路径错误"); } } public void goto_video_fullscreen(final AlarmListAdapter.ViewHolder viewHolder) { goto_video_fullscreen(viewHolder, false); } public void goto_video_fullscreen(final AlarmListAdapter.ViewHolder viewHolder, boolean fromButtonClick) { goto_video_fullscreen(viewHolder, fromButtonClick, false); } public void goto_video_fullscreen(final AlarmListAdapter.ViewHolder viewHolder, boolean fromButtonClick, boolean fromRetry) { System.out.println("HomeGridViewAdapter.goto_video_fullscreen 1 " + ("true".equals(viewHolder.alarm.get("alarmVideoValid"))) + " retry="+fromRetry); if ("true".equals(viewHolder.alarm.get("alarmVideoValid"))) { for (AlarmListAdapter.ViewHolder vh : viewHolderSet.keySet()) { if (AlarmManager.getAlarmPlaying(vh.alarm)) { vh.alarmVideoOverlay.setVisibility(View.VISIBLE); vh.alarmVideoOverlayVisibleTime = System.currentTimeMillis(); } } BaseApplication.getApplication().executorService.execute(new Runnable() { @Override public void run() { SystemClock.sleep(100); mainActivity().runOnUiThread(new Runnable() { @Override public void run() { System.out.println("HomeGridViewAdapter.goto_video_fullscreen 2 "); currentVideoPlayTimeMap.remove(viewHolder.alarm.get("id")); playVideo(viewHolder); if (!"true".equals(viewHolder.alarm.get("alarmVideoValid"))) { ToastUtil.show("录像正在处理中,请稍后再试。", false); } System.out.println("HomeGridViewAdapter.goto_video_fullscreen 3 fromButtonClick="+fromButtonClick + "true".equals(viewHolder.alarm.get("alarmVideoValid"))); if ("true".equals(viewHolder.alarm.get("alarmVideoValid"))) { System.out.println("HomeGridViewAdapter.goto_video_fullscreen 4 fromButtonClick="+fromButtonClick); if (fromButtonClick) { AlarmManager.putAlarmPlaying(viewHolder.alarm, true); } viewHolder.alarmVideo.setVisibility(View.INVISIBLE); viewHolder.alarmVideoGestureOverlayView.setVisibility(View.INVISIBLE); stopAllVideoPlays(viewHolder.alarmVideo); mainActivity().goto_fullscreenVideoView(viewHolder.alarm.get("alarmVideo")); try { LogManager.saveLog(viewHolder.alarm.get("alarmVideo")); } catch (Exception e) { e.printStackTrace(); } } else { ToastUtil.show("录像正在处理中,请稍后再试。", false); } } }); } }); } else { if (!fromRetry) { tryGetRemoveVideoUrl(viewHolder, fromButtonClick); } } } public void tryGetRemoveVideoUrl(AlarmListAdapter.ViewHolder viewHolder, boolean fromButtonClick) { BaseApplication.getApplication().executorService.execute(new Runnable() { @Override public void run() { try { long requestVideoUrlBegin = System.currentTimeMillis(); String alarmVideo = VideoPath.getVideoUrl(viewHolder.alarm); System.out.println("alarmVideo="+alarmVideo); // System.out.println("HomeGridViewAdapter.run alarmVideo="+alarmVideo); // System.out.println("HomeGridViewAdapter.run 2 " + (!TextUtils.isEmpty(alarmVideo) && alarmVideo.startsWith("http"))); if (!TextUtils.isEmpty(alarmVideo) && alarmVideo.startsWith("http")) { viewHolder.alarm.put("alarmVideoValid", "true"); viewHolder.alarm.put(Alarm.alarmVideo, alarmVideo); AlarmManager.save(viewHolder.alarm); mainActivity().fragment_home.refreshGridView(); // System.out.println("HomeGridViewAdapter.run 3 " + (System.currentTimeMillis() - requestVideoUrlBegin < 5* 1000) ); if (System.currentTimeMillis() - requestVideoUrlBegin < 5* 1000) { viewHolder.alarm.put("alarmVideoValid", "true"); AlarmManager.putAlarmPlaying(viewHolder.alarm, true); // System.out.println("HomeGridViewAdapter.run goto_video_fullscreen"); mainActivity().runOnUiThread(new Runnable() { @Override public void run() { viewHolder.alarmVideoOverlay.setVisibility(View.INVISIBLE); goto_video_fullscreen(viewHolder, fromButtonClick, true); } }); return; } } ToastUtil.show("录像正在处理中,请稍后再试。", false); } catch (Exception e) { e.printStackTrace(); } } }); } }