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