From cbdaa0559af3b8ae9c8cf8287d30916d5f81ee3c Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 05 十一月 2020 13:56:16 +0800 Subject: [PATCH] 调整showlable --- app/src/main/java/com/basic/security/fragment/helper/HomePlayAlarmSound.java | 254 +++++++++++++++++++++++++++++--------------------- 1 files changed, 148 insertions(+), 106 deletions(-) diff --git a/app/src/main/java/com/basic/security/fragment/helper/HomePlayAlarmSound.java b/app/src/main/java/com/basic/security/fragment/helper/HomePlayAlarmSound.java index a2582f8..5543c34 100644 --- a/app/src/main/java/com/basic/security/fragment/helper/HomePlayAlarmSound.java +++ b/app/src/main/java/com/basic/security/fragment/helper/HomePlayAlarmSound.java @@ -16,91 +16,151 @@ 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"); @@ -114,52 +174,34 @@ // 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(); + } } -- Gitblit v1.8.0