a
554325746@qq.com
2019-12-25 38492bbaa63586e2f4877da0eaa01a082fd565a6
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();
    }
}