| | |
| | | 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; |
| | | |
| | | @Background |
| | | public void playAlarmSound() { |
| | | SettingManager.initMilliSecond(); |
| | | SettingManager.initAlarmAudio(); |
| | | while (true) { |
| | | try { |
| | | class Helper { |
| | | public int getAlarmAudio() { |
| | | String alarmAudio = SettingManager.alarmAudio; |
| | | return SettingFragment.getAudioRawIndex(alarmAudio); |
| | | public static List<MediaPlayer> 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; |
| | | } |
| | | public boolean shouldPlayAlarmSound(){ |
| | | boolean hasSound = false; |
| | | boolean mutedAlarms = false; |
| | | final Set<HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderSet = |
| | | ((MainActivity)BaseApplication.getApplication().activity).fragment_home.viewHolderSet.keySet(); |
| | | Map<String, HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderMap = new HashMap<>(); |
| | | 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; |
| | | } |
| | | |
| | | final Set<HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderMuteSet = new HashSet<>(); |
| | | sqliteAlarmListLock.lock(); |
| | | for (Map<String, String> 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"); |
| | | 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<HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderSet = |
| | | ((MainActivity)BaseApplication.getApplication().activity).fragment_home.viewHolderSet.keySet(); |
| | | Map<String, HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderMap = new HashMap<>(); |
| | | |
| | | final Set<HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderMuteSet = new HashSet<>(); |
| | | sqliteAlarmListLock.lock(); |
| | | for (Map<String, String> 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); |
| | | AlarmManager.save(sqliteAlarm); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | 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); |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | 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"); |
| | |
| | | // viewHolder.showMatchPersonList.setVisibility(View.VISIBLE); |
| | | // } |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return hasSound; |
| | | } |
| | | public void execute() { |
| | | if (shouldPlayAlarmSound()) { |
| | | playAlarm(SettingManager.alarmAudio); |
| | | } else { |
| | | stopAlarm(); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // if (mutedAlarms) { |
| | | // refreshGridView(); |
| | | // } |
| | | return hasSound; |
| | | } |
| | | public void execute() { |
| | | if (shouldPlayAlarmSound()) { |
| | | mp = AudioPlayer.play(mp, SettingManager.alarmAudio, true); |
| | | // if (mp == null ) { |
| | | // mp = MediaPlayer.create(mainActivity(), getAlarmAudio()); |
| | | // mp.setLooping(true); |
| | | // mp.start(); |
| | | // } else { |
| | | // if (!mp.isPlaying()) { |
| | | // mp.stop(); |
| | | // mp.release(); |
| | | // mp = MediaPlayer.create(mainActivity(), getAlarmAudio()); |
| | | // mp.setLooping(true); |
| | | // mp.start(); |
| | | // } |
| | | // } |
| | | } else { |
| | | AudioPlayer.stop(mp); |
| | | // if (mp != null && mp.isPlaying()) { |
| | | // mp.stop(); |
| | | // mp.release(); |
| | | // mp = null; |
| | | // } |
| | | mp = null; |
| | | } |
| | | new Helper().execute(); |
| | | SystemClock.sleep(500); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | new Helper().execute(); |
| | | SystemClock.sleep(500); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | }.start(); |
| | | |
| | | } |
| | | } |