package com.basic.security.manager;
|
|
import android.content.Intent;
|
import android.os.SystemClock;
|
|
import com.basic.security.activity.MainActivity;
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.fragment.CameraFragment;
|
import com.basic.security.manager.helper.rm.base.CurrentBase;
|
import com.basic.security.manager.helper.rm.fragment.CurrentAccountSetting;
|
import com.basic.security.manager.helper.rm.fragment.CurrentAdminFaceLogin;
|
import com.basic.security.manager.helper.rm.fragment.CurrentAdminLogout;
|
import com.basic.security.manager.helper.rm.fragment.CurrentAdminPasswordLogin;
|
import com.basic.security.manager.helper.rm.fragment.CurrentBaseSetting;
|
import com.basic.security.manager.helper.rm.fragment.CurrentBusinessPerson;
|
import com.basic.security.manager.helper.rm.fragment.CurrentCluster;
|
import com.basic.security.manager.helper.rm.fragment.CurrentDevice;
|
import com.basic.security.manager.helper.rm.fragment.CurrentDoorAccessResult;
|
import com.basic.security.manager.helper.rm.fragment.CurrentGuestMode;
|
import com.basic.security.manager.helper.rm.fragment.CurrentHintDoorAccess;
|
import com.basic.security.manager.helper.rm.fragment.CurrentHintRecognize;
|
import com.basic.security.manager.helper.rm.fragment.CurrentHintSignUp;
|
import com.basic.security.manager.helper.rm.fragment.CurrentHome;
|
import com.basic.security.manager.helper.rm.fragment.CurrentOrg;
|
import com.basic.security.manager.helper.rm.fragment.CurrentOrgPerson;
|
import com.basic.security.manager.helper.rm.fragment.CurrentPersonManger;
|
import com.basic.security.manager.helper.rm.fragment.CurrentRuleDetail;
|
import com.basic.security.manager.helper.rm.fragment.CurrentRuleList;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSignUpSuccess;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuAutoNicWaitDetail;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuAutoWaitAdmin;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuAutoWaitFace;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuAutoWaitIdCard;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedIcCompareSuccess;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedIcWaitFace;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedIcWaitIdCard;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedNicWaitDetail;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedNicWaitFace;
|
import com.basic.security.manager.helper.rm.fragment.CurrentSuLoggedWaitFace;
|
import com.basic.security.manager.helper.rm.fragment.CurrentTimeRule;
|
import com.basic.security.manager.helper.rm.fragment.CurrentTimeRuleAdd;
|
import com.basic.security.manager.helper.rm.fragment.CurrentVerifyIDCardSuccess;
|
import com.basic.security.manager.helper.rm.fragment.CurrentVisitList;
|
import com.basic.security.utils.AppUtil;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.DetectedResult;
|
import com.basic.security.utils.MemoryUtil;
|
import com.basic.security.utils.ThreadUtil;
|
import com.basic.security.widget.Preview;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.PriorityQueue;
|
import java.util.Queue;
|
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.ReentrantLock;
|
|
public class RecognizeManager {
|
public static final Lock recongizeLock = new ReentrantLock();
|
public static final Object recongizeObjectLock = new Object();
|
public static Queue<String> detectedResultQueue = new PriorityQueue<>();
|
public static List<CurrentBase> currentList = new ArrayList<>();
|
static long lastSendKeepLife = 0;
|
|
public static void restartWaitFace() {
|
if (recongizeLock.tryLock()) {
|
try {
|
CurrentBase.detectedResult = null;
|
DetectResultManager.detectedResult = null;
|
CompareFeatureResultManager.clear();
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
recongizeLock.unlock();
|
}
|
}
|
}
|
|
private static void makeChains() {
|
currentList.add(new CurrentSuAutoWaitFace());
|
currentList.add(new CurrentHome());
|
currentList.add(new CurrentAdminFaceLogin());
|
currentList.add(new CurrentSuLoggedNicWaitFace());
|
currentList.add(new CurrentSuLoggedIcWaitFace());
|
currentList.add(new CurrentAccountSetting());
|
currentList.add(new CurrentSuAutoWaitAdmin());
|
currentList.add(new CurrentSuAutoWaitIdCard());
|
currentList.add(new CurrentSuLoggedIcWaitIdCard());
|
currentList.add(new CurrentSuAutoNicWaitDetail());
|
currentList.add(new CurrentSignUpSuccess());
|
currentList.add(new CurrentPersonManger());
|
currentList.add(new CurrentSuLoggedWaitFace());
|
currentList.add(new CurrentSuLoggedNicWaitDetail());
|
currentList.add(new CurrentSuLoggedIcCompareSuccess());
|
currentList.add(new CurrentVerifyIDCardSuccess());
|
currentList.add(new CurrentDoorAccessResult());
|
if (Constants.indoorOutdoorInOne) {
|
currentList.add(new CurrentAdminPasswordLogin());
|
currentList.add(new CurrentBaseSetting());
|
currentList.add(new CurrentBusinessPerson());
|
currentList.add(new CurrentCluster());
|
currentList.add(new CurrentDevice());
|
currentList.add(new CurrentGuestMode());
|
currentList.add(new CurrentHintDoorAccess());
|
currentList.add(new CurrentHintRecognize());
|
currentList.add(new CurrentHintSignUp());
|
currentList.add(new CurrentOrg());
|
currentList.add(new CurrentOrgPerson());
|
currentList.add(new CurrentRuleDetail());
|
currentList.add(new CurrentRuleList());
|
currentList.add(new CurrentTimeRule());
|
currentList.add(new CurrentTimeRuleAdd());
|
currentList.add(new CurrentVisitList());
|
currentList.add(new CurrentAdminLogout());
|
}
|
}
|
|
public static void processRecognizeResult() {
|
BaseApplication.getApplication().executorService.execute(() -> {
|
while (true) {
|
SystemClock.sleep(200);
|
CurrentBase.activity = BaseApplication.getApplication().activity;
|
if (CurrentBase.activity != null && CurrentBase.activity.mainActivityInitComplete) {
|
makeChains();
|
break;
|
}
|
}
|
if (Constants.needIdCardModule) {
|
IdCardManager.startReadIdCard();
|
}
|
while (true) {
|
sendKeepLife();
|
ThreadUtil.threadCreateObserver();
|
MemoryUtil.monitorMemory();
|
boolean fromTimeout = true;
|
try {
|
recongizeLock.lock();
|
synchronized (RecognizeManager.recongizeObjectLock) {
|
if (detectedResultQueue.peek() == null) {
|
recongizeObjectLock.wait(3000);
|
if (detectedResultQueue.size() > 0) {
|
fromTimeout = false;
|
detectedResultQueue.remove();
|
} else {
|
fromTimeout = true;
|
CameraFragment.lastDetectedResult = new DetectedResult();
|
}
|
} else {
|
if (detectedResultQueue.size() > 0) {
|
fromTimeout = false;
|
detectedResultQueue.remove();
|
}
|
}
|
}
|
if (!fromTimeout) {
|
if (MainActivity.faceDbInitComplete && CurrentBase.activity.shouldDetectFace()) {
|
CurrentBase.startNewDetectResult();
|
for (CurrentBase currentBase : currentList) {
|
if (currentBase.showFragment()) {
|
break;
|
}
|
}
|
CurrentBase.startNewDetectResult();
|
}
|
}
|
CurrentBase.activity.needTimeoutToBlank();
|
CurrentBase.showFragmentSuccess = false;
|
if (Constants.isIndoor) {
|
BaseApplication.getApplication().activity.lastAdminClickTime = System.currentTimeMillis();
|
}
|
// if (System.currentTimeMillis() - lastSendKeepLife > 20) {
|
// if (Preview.lastTimeOnPreviewFrame == 0) {
|
// SystemClock.sleep(2000);
|
// }
|
// ToastUtil.show("摄像头打开失败,1分钟之后将重启");
|
// AppUtil.restartApp(BaseApplication.getApplication());
|
// }
|
BaseApplication.getApplication().activity.fragment_password_open_door.hideKeyboardFromTimeout();
|
// System1.out.println("RecognizeManager.processRecognizeResult " + FragmentUtil.guestModeFragment().camera1.getVisibility());
|
BaseApplication.getApplication().activity.runOnUiThread(() -> {
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
recongizeLock.unlock();
|
}
|
}
|
});
|
}
|
|
public static void sendKeepLife() {
|
if (System.currentTimeMillis() - Preview.lastTimeOnPreviewFrame > 2 * 60 * 1000) {
|
AppUtil.restartApp(BaseApplication.getApplication());
|
}
|
try {
|
if (System.currentTimeMillis() - lastSendKeepLife > 2 * 1000) {
|
Intent intent = new Intent("keepLife");
|
intent.putExtra("message", "This is my message!");
|
BaseApplication.getApplication().activity.sendBroadcast(intent);
|
lastSendKeepLife = System.currentTimeMillis();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|