package com.basic.security.fragment.helper; import android.media.MediaPlayer; import android.os.SystemClock; import android.view.View; import android.widget.ArrayAdapter; import com.basic.security.R; import com.basic.security.activity.MainActivity; import com.basic.security.base.BaseApplication; import com.basic.security.fragment.SettingFragment; import com.basic.security.manager.AlarmManager; import com.basic.security.manager.SettingManager; import com.basic.security.utils.AudioPlayer; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @EFragment public abstract class HomePlayAlarmSound extends HomeBase { public static boolean shouldRestartSound = false; public static List mediaPlayers = new ArrayList<>(); public static Lock mediaPlayersLock = new ReentrantLock(); public static MediaPlayer mp; public static MediaPlayer playAlarm(String alarmAudio) { mediaPlayersLock.lock(); boolean looping = true; try { if (mp == null ) { stopAlarm(); mp = MediaPlayer.create(BaseApplication.getApplication().activity, SettingFragment.getAudioRawIndex(alarmAudio)); mp.setLooping(looping); mp.start(); mediaPlayers.add(mp); } else { boolean isPlaying = false; try { isPlaying = mp.isPlaying(); } catch (Exception e) { System.out.println("HomePlayAlarmSound.playAlarm " + e.getMessage()); } if (!isPlaying || !looping || HomePlayAlarmSound.shouldRestartSound) { if (HomePlayAlarmSound.shouldRestartSound) { HomePlayAlarmSound.shouldRestartSound = false; } stopAlarm(); mp = MediaPlayer.create(BaseApplication.getApplication().activity, SettingFragment.getAudioRawIndex(alarmAudio)); mp.setLooping(looping); mp.start(); mediaPlayers.add(mp); } } } catch (Exception e) { e.printStackTrace(); } mediaPlayersLock.unlock(); return mp; } public static void stopAlarm() { mediaPlayersLock.lock(); for (MediaPlayer mediaPlayer : mediaPlayers) { try { mediaPlayer.stop(); mediaPlayer.release(); } catch (Exception e) { e.printStackTrace(); } } mediaPlayers.clear(); mediaPlayersLock.unlock(); } public void playAlarmSound() { new Thread(){ @Override public void run() { SettingManager.initMilliSecond(); SettingManager.initAlarmAudio(); while (true) { try { class Helper { public int getAlarmAudio() { String alarmAudio = SettingManager.alarmAudio; return SettingFragment.getAudioRawIndex(alarmAudio); } public boolean shouldPlayAlarmSound(){ boolean hasSound = false; try { boolean mutedAlarms = false; final Set viewHolderSet = ((MainActivity)BaseApplication.getApplication().activity).fragment_home.viewHolderSet.keySet(); Map viewHolderMap = new HashMap<>(); final Set viewHolderMuteSet = new HashSet<>(); sqliteAlarmListLock.lock(); for (Map sqliteAlarm : sqliteAlarmList) { long currentTime = System.currentTimeMillis(); try{ if ("false".equals(sqliteAlarm.get("mute"))) { long createTime = Long.parseLong(sqliteAlarm.get("createTime")); if ((currentTime - createTime) < SettingManager.milliSeconds) { hasSound = true; } else { mutedAlarms = true; sqliteAlarm.put("mute", "true"); // final HomeGridViewAdapter.AlarmListAdapter.ViewHolder viewHolder = viewHolderMap.get(sqliteAlarm.get("id")); // viewHolderMuteSet.add(viewHolder); AlarmManager.save(sqliteAlarm); } } } catch (Exception e){ e.printStackTrace(); } } sqliteAlarmListLock.unlock(); BaseApplication.getApplication().activity.runOnUiThread(new Runnable() { @Override public void run() { for (final HomeGridViewAdapter.AlarmListAdapter.ViewHolder viewHolder: viewHolderSet) { try{ if (viewHolder != null) { if ("true".equals(viewHolder.alarm.get("mute"))) { if (viewHolder.highlightBorder != null) { viewHolder.highlightBorder.setBackgroundResource(R.drawable.confirm_dialog_background); } if (viewHolder.highlightShadow != null) { viewHolder.highlightShadow.setVisibility(View.INVISIBLE); } if (viewHolder.toggleSound != null) { viewHolder.toggleSound.setImageResource(R.drawable.u258); } } } if (!"人脸".equals(viewHolder.alarm.get("alarmType"))) { if (viewHolder.showMatchPersonList.getVisibility() == View.VISIBLE) { viewHolder.showMatchPersonList.setVisibility(View.INVISIBLE); } } else { 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(); } // String[] matchPersonArray = null; // String matchPersonListStr = viewHolder.alarm.get("matchPersonListStr"); // if (matchPersonListStr != null && matchPersonListStr.length() > 0 && !"null".equals(matchPersonListStr)) { // matchPersonArray = matchPersonListStr.split("`", -1); // } // if (matchPersonArray != null && 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); // } } } catch (Exception e) { e.printStackTrace(); } } } }); } catch (Exception e) { e.printStackTrace(); } return hasSound; } public void execute() { if (shouldPlayAlarmSound()) { playAlarm(SettingManager.alarmAudio); } else { stopAlarm(); } } } new Helper().execute(); SystemClock.sleep(500); } catch (Exception e) { e.printStackTrace(); } } } }.start(); } }