| | |
| | | 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 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; |
| | | } |
| | | 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) { |
| | |
| | | } |
| | | public boolean shouldPlayAlarmSound(){ |
| | | boolean hasSound = false; |
| | | try { |
| | | boolean mutedAlarms = false; |
| | | final Set<HomeGridViewAdapter.AlarmListAdapter.ViewHolder> viewHolderSet = |
| | | ((MainActivity)BaseApplication.getApplication().activity).fragment_home.viewHolderSet.keySet(); |
| | |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // if (mutedAlarms) { |
| | | // refreshGridView(); |
| | | // } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | 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(); |
| | | // } |
| | | // } |
| | | playAlarm(SettingManager.alarmAudio); |
| | | } else { |
| | | AudioPlayer.stop(mp); |
| | | // if (mp != null && mp.isPlaying()) { |
| | | // mp.stop(); |
| | | // mp.release(); |
| | | // mp = null; |
| | | // } |
| | | mp = null; |
| | | stopAlarm(); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | }.start(); |
| | | |
| | | } |
| | | } |