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 detectedResultQueue = new PriorityQueue<>(); public static List 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(); } } }