package com.basic.security.fragment.helper;
|
|
import android.media.MediaPlayer;
|
import android.os.SystemClock;
|
import android.view.View;
|
import android.widget.ArrayAdapter;
|
|
import com.basic.security.R;
|
import com.basic.security.activity.MainActivity;
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.fragment.SettingFragment;
|
import com.basic.security.manager.AlarmManager;
|
import com.basic.security.manager.SettingManager;
|
import com.basic.security.utils.AudioPlayer;
|
|
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;
|
|
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) {
|
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);
|
}
|
}
|
}
|
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");
|
// if (matchPersonListStr != null && matchPersonListStr.length() > 0 && !"null".equals(matchPersonListStr)) {
|
// matchPersonArray = matchPersonListStr.split("`", -1);
|
// }
|
// if (matchPersonArray != null && matchPersonArray.length > 1) {
|
// viewHolder.matchPersonList.setVisibility(View.VISIBLE);
|
//// viewHolder.matchPersonList.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text2, matchPersonArray));
|
//// viewHolder.matchPersonList.setPopupBackgroundResource(R.drawable.round_border);
|
// viewHolder.showMatchPersonList.setVisibility(View.VISIBLE);
|
// }
|
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return hasSound;
|
}
|
public void execute() {
|
if (shouldPlayAlarmSound()) {
|
playAlarm(SettingManager.alarmAudio);
|
} else {
|
stopAlarm();
|
}
|
}
|
}
|
new Helper().execute();
|
SystemClock.sleep(500);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}.start();
|
|
}
|
}
|