a
554325746@qq.com
2019-12-25 38492bbaa63586e2f4877da0eaa01a082fd565a6
app/src/main/java/com/basic/security/manager/AlarmManager.java
@@ -1,16 +1,30 @@
package com.basic.security.manager;
import android.database.Cursor;
import android.text.TextUtils;
import android.widget.TextView;
import com.basic.security.activity.MainActivity;
import com.basic.security.base.BaseApplication;
import com.basic.security.dao.DatabaseManager;
import com.basic.security.dao.SqliteManager;
import com.basic.security.fragment.HomeFragment;
import com.basic.security.fragment.helper.HomeGridViewAdapter;
import com.basic.security.model.Alarm;
import com.basic.security.utils.Constants;
import com.basic.security.utils.FrameUtil;
import com.basic.security.utils.VideoPath;
import java.text.SimpleDateFormat;
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;
public class AlarmManager extends SqliteManager {
@@ -50,7 +64,12 @@
        }
        for (Map<String, String> apiModel : listApiModel) {
            apiModel.put("table", "alarm");
            apiModel.put("alarmTime", apiModel.get("picDate"));
            String picDate = apiModel.get("picDate");
            String alarmTime = picDate;
            if (alarmTime != null && alarmTime.length() > "2019-11-11 12:32:05".length()) {
                alarmTime = alarmTime.substring(0, "2019-11-11 12:32:05".length());
            }
            apiModel.put("alarmTime", alarmTime);
            apiModel.put("alarmPerson", "");
            String sdkType = apiModel.get("sdkType");
@@ -63,7 +82,6 @@
                }
            }
            apiModel.put("alarmVideo", apiModel.get("videoNum"));
            String picDate = apiModel.get("picDate");
            if (picDate != null) {
                apiModel.put("alarmPicture", apiModel.remove("picDate"));
            }
@@ -73,6 +91,7 @@
            apiModel.put("alarmLargePicture",
                    apiModel.get("picMaxUrl")
            );
            apiModel.put(Alarm.picDate, picDate);
            String picAddress = apiModel.get("picAddress");
            if (picAddress != null) {
                apiModel.put("alarmAddress", apiModel.remove("picAddress"));
@@ -136,20 +155,62 @@
            } else {
                alarm.put("canClose", "false");
            }
//            alarm.put("alarmVideo", "/sdcard/face1.mp4");
        }
        return sqliteAlarmList;
    }
    public static Set<String> newAlarmIdSet = new HashSet<>();
    public static Lock newAlarmIdSetLock = new ReentrantLock();
    public static void putNewAlarmIdSet(Map<String, String> newRemoteAlarm) {
        newAlarmIdSetLock.lock();
        try {
            String id = newRemoteAlarm.get(Alarm.id);
            if (!TextUtils.isEmpty(id)) {
                newAlarmIdSet.add(id);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        newAlarmIdSetLock.unlock();
    }
    public static boolean removeNewAlarmIdSet(Map<String, String> alarm) {
        newAlarmIdSetLock.lock();
        boolean success = false;
        try {
            String id = alarm.get(Alarm.id);
            if (!TextUtils.isEmpty(id)) {
                if (newAlarmIdSet.contains(id)) {
                    success = true;
                }
                newAlarmIdSet.remove(id);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        newAlarmIdSetLock.unlock();
        return success;
    }
    public static int saveRemoteAlarmListToSqlite(List<Map<String, String>> newRemoteAlarmList) {
        int savedCount = 0;
        for (Map<String, String> newRemoteAlarm : newRemoteAlarmList) {
            if (findById(newRemoteAlarm.get("id")) == null) {
            Map<String, String> dbRemoteAlarm = findById(newRemoteAlarm.get("id"));
            if (dbRemoteAlarm == null) {
                newRemoteAlarm.put("table", "alarm");
                newRemoteAlarm.put("closeAlarm", "false");
                newRemoteAlarm.put("mute", "false");
                newRemoteAlarm.put("createTime", new Date().getTime()+"");
                save(newRemoteAlarm);
                putNewAlarmIdSet(newRemoteAlarm);
                savedCount++;
            } else {
                if (TextUtils.isEmpty(dbRemoteAlarm.get("alarmVideo"))) {
                    dbRemoteAlarm.put("table", "alarm");
                    dbRemoteAlarm.put("alarmVideo", newRemoteAlarm.get("alarmVideo"));
                    save(dbRemoteAlarm);
                    savedCount++;
                }
            }
        }
        return savedCount;
@@ -162,4 +223,82 @@
            e.printStackTrace();
        }
    }
    public static List<Map<String, String>> newSqliteAlarmListBackup = new ArrayList<>();
    public static void updateVideoUrl() {
        HomeFragment homeFragment = ((MainActivity)BaseApplication.getApplication().activity).fragment_home;
        if (homeFragment == null) {
            return;
        }
        if (homeFragment.refreshGridViewLocker != null) {
            try {
                homeFragment.refreshGridViewLocker.lock();
                if (homeFragment.newSqliteAlarmList != null) {
                    for (int i = 0; i < homeFragment.newSqliteAlarmList.size(); i++) {
                        Map<String, String> alarm = homeFragment.newSqliteAlarmList.get(i);
                        if (alarm.get(Alarm.alarmVideo).length() < 5) {
                            Map<String, String> newAlarm = new HashMap<>();
                            newAlarm.putAll(alarm);
                            newSqliteAlarmListBackup.add(newAlarm);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                homeFragment.refreshGridViewLocker.unlock();
            }
        }
        int videoUrlChangeCount = 0;
        if (newSqliteAlarmListBackup.size() > 0) {
            for (Map<String, String> alarm : newSqliteAlarmListBackup) {
                String videoUrl = VideoPath.getVideoUrl(alarm);
                if (!TextUtils.isEmpty(videoUrl)) {
                    alarm.put(Alarm.alarmVideo, videoUrl);
                    save(alarm);
                    videoUrlChangeCount++;
                }
            }
        }
        if (videoUrlChangeCount > 0) {
            homeFragment.refreshGridView();
        }
    }
    static Map<String, String> alarmPlayingMap = new HashMap<>();
    static Lock alarmPlayingMapLock = new ReentrantLock();
    public static void putAlarmPlaying(Map<String, String> alarm, boolean state) {
        try {
            String id = alarm.get(Alarm.id);
            if (!TextUtils.isEmpty(id)) {
                if (state) {
                    System.out.println("AlarmManager.putAlarmPlaying " + state + " " +id + FrameUtil.getFrames());
                }
                alarmPlayingMapLock.lock();
                alarmPlayingMap.put(id, state ? Constants.TRUE : Constants.FALSE);
                alarmPlayingMapLock.unlock();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static boolean getAlarmPlaying(Map<String, String> alarm) {
        boolean state = false;
        try {
            String id = alarm.get(Alarm.id);
            if (!TextUtils.isEmpty(id)) {
                alarmPlayingMapLock.lock();
                if ("true".equals(alarmPlayingMap.get(id))) {
                    state = true;
                }
                alarmPlayingMapLock.unlock();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return state;
    }
}