package com.basic.security.activity;
|
|
import android.content.Intent;
|
import android.hardware.Sensor;
|
import android.hardware.SensorEvent;
|
import android.hardware.SensorEventListener;
|
import android.hardware.SensorManager;
|
import android.os.SystemClock;
|
import android.view.WindowManager;
|
import android.widget.LinearLayout;
|
|
import com.alfeye.a1io.A1IoDevBaseUtil;
|
import com.alfeye.a1io.A1IoDevManager;
|
import com.alfeye.a1io.DeviceControl;
|
import com.alfeye.readcardlib.readcard.ReadCardUtil;
|
import com.alfeye.seriallib.Listener.OnDistanceListener;
|
import com.alfeye.seriallib.Listener.OnRadarDistanceListener;
|
import com.alfeye.seriallib.SerialDevice.DistanceSensor;
|
import com.alfeye.seriallib.SerialDevice.RadarDistanceSensor;
|
import com.alfeye.seriallib.android_serialport_api.SerialPortFinder;
|
import com.basic.security.R;
|
import com.basic.security.activity.helper.MaLoggedInTimeoutToLogout;
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.manager.DatabaseManager;
|
import com.basic.security.manager.IdCardManager;
|
import com.basic.security.manager.impl.cblite.DeviceManager;
|
import com.basic.security.manager.impl.sqlite.SlDeviceManager;
|
import com.basic.security.receiver.WebRtcBroadCastReceiver;
|
import com.basic.security.service.KeepLifeService;
|
import com.basic.security.service.UpgradeAppService;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.KeyboardUtil;
|
import com.basic.security.utils.MultipartUtilityV2;
|
import com.basic.security.utils.NetUtil;
|
import com.basic.security.utils.PermissionHelper;
|
import com.basic.security.utils.ProcessImageAndDrawResults;
|
import com.basic.security.utils.ToastUtil;
|
import com.basic.security.utils.socket.RelayServerUtil2;
|
|
import org.androidannotations.annotations.AfterViews;
|
import org.androidannotations.annotations.EActivity;
|
import org.androidannotations.annotations.ViewById;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
import static com.basic.security.utils.Constants.isNewIDCardReader;
|
|
|
@EActivity(R.layout.activity_main)
|
public class MainActivity extends MaLoggedInTimeoutToLogout {
|
|
public static long lastTimeDetectedFace = 0;
|
public static boolean faceDbInitComplete = false;
|
public static RadarDistanceSensor distanceSensor;
|
public boolean mainActivityInitComplete = false;
|
|
|
//1是usb模式 0是串口模式 5.1.1
|
// public ReadUtil readUtil;
|
//新的pad 白色 身份证读卡器
|
public ReadCardUtil readCardUtil;
|
public A1IoDevBaseUtil basUtil;
|
@ViewById
|
LinearLayout id111;
|
long startTime = 0;
|
private List<Integer> integers = new ArrayList<>();
|
// private DistanceSensor sr04Device;
|
private String[] allDevices;
|
/**
|
* 距离感应器
|
*/
|
private boolean isOpen = false;
|
//最大缓存数量
|
private int MaxCacheNumber = 5;
|
//开灯距离
|
private int MIN_SRDEV = 1000;
|
//关灯距离
|
private int SRDEVNO = 1400;
|
private SensorManager sensorManager;
|
private Sensor lightSensor;
|
|
public MainActivity getActivity() {
|
return this;
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
if (Constants.useAlf) {
|
basUtil.closeLED();
|
basUtil.closeDIST();
|
distanceSensor.close();
|
// sr04Device.close();
|
}
|
}
|
|
public boolean needLight() {
|
return Constants.useLight && (currentFragment == fragment_su_auto_wait_face
|
|| currentFragment == fragment_su_logged_wait_face
|
|| currentFragment == fragment_su_logged_nic_wait_face
|
|| currentFragment == fragment_su_logged_ic_wait_face
|
|| currentFragment == fragment_door_access_result
|
|| currentFragment == fragment_admin_face_login
|
|| currentFragment == fragment_home
|
|| currentFragment == fragment_account_setting);
|
}
|
|
int lightStrong = 10;
|
//开灯
|
public synchronized void serialDeviceOpenLamp(int distance) {
|
// System.out.println("MainActivity.serialDeviceOpenLamp 0 " + needLight());
|
if (needLight()) {
|
// System.out.println("MainActivity.serialDeviceOpenLamp 1 " + needLight());
|
if (distance != 0) {
|
integers.add(distance);
|
if (integers.size() >= MaxCacheNumber) {
|
Collections.sort(integers);
|
if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV) {
|
lastTimeDetectedFace = System.currentTimeMillis();
|
if (!isOpen) {
|
isOpen = true;
|
basUtil.openLED(100);
|
// BaseApplication.getApplication().executorService.execute(()->{
|
// try {
|
// while (isOpen) {
|
// lightStrong += 4;
|
// if (lightStrong > 100)
|
// break;
|
// basUtil.openLED(lightStrong);
|
// SystemClock.sleep(100);
|
// }
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
//
|
// });
|
basUtil.openIRDA();
|
}
|
}
|
if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV && !isOpen) {
|
ProcessImageAndDrawResults.shouldExtractFeatureFirstTimeInWaitFace = 2;
|
if (currentFragment == fragment_home) {
|
showFragment(fragment_su_auto_wait_face);
|
}
|
} else if (integers.get(0) >= SRDEVNO && isOpen
|
) {
|
} else {
|
}
|
integers.clear();
|
|
if (System.currentTimeMillis() - lastTimeDetectedFace > 2 * 1000) {
|
if (isOpen) {
|
isOpen = false;
|
basUtil.closeLED();
|
basUtil.closeIRDA();
|
}
|
}
|
}
|
} else {
|
integers.clear();
|
}
|
}
|
if (System.currentTimeMillis() - lastTimeDetectedFace > 2 * 1000) {
|
if (isOpen) {
|
isOpen = false;
|
basUtil.closeLED();
|
basUtil.closeIRDA();
|
}
|
}
|
|
}
|
|
@AfterViews
|
protected void afterViews() {
|
BaseApplication.getApplication().executorService.execute(()->{
|
while (true) {
|
try {
|
serialDeviceOpenLamp(0);
|
SystemClock.sleep(1*1000);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
BaseApplication.getApplication().executorService.execute(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
MultipartUtilityV2.uploadCrashDirectory();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
DatabaseManager.setCustomDatabaseFiles(this);
|
|
String ip = NetUtil.getIPAddress(true);
|
Constants.erlangLocalNode = SlDeviceManager.getDeviceId() + "@" + ip;
|
Constants.deviceId = DeviceManager.getDeviceId();
|
if (Constants.useAlf) {
|
distanceSensor = new RadarDistanceSensor("/dev/ttyUSB0", new OnRadarDistanceListener() {
|
@Override
|
public void onRevData(final int data) {
|
// System.out.println("MainActivity.onRevData " + data);
|
if (data > 0) {
|
serialDeviceOpenLamp(data);
|
} else {
|
serialDeviceOpenLamp(-data);
|
}
|
// openLED();
|
|
// runOnUiThread(new Runnable() {
|
// @Override
|
// public void run() {
|
// stringBuffer.insert(0, "雷达测距: " + data + "\n");
|
// if (stringBuffer.length() > 1200) {
|
// stringBuffer.delete(800, stringBuffer.length());
|
// }
|
// tvDisTxt.setText(stringBuffer.toString());
|
// }
|
// });
|
}
|
|
@Override
|
public void onCmdResult(final String result) {
|
runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
if (result.contains("OK") || result.contains("TH")) {
|
System.out.println("MainActivity.run " + result);
|
// tvSetResultTxt.append(result);
|
}
|
}
|
});
|
}
|
});
|
distanceSensor.open();
|
// sr04Device = new DistanceSensor("/dev/ttyUSB0", new Sr04DeviceDate());
|
allDevices = new SerialPortFinder().getAllDevicesPath();
|
//获取SensorManager对象
|
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
|
//获取Sensor对象
|
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
|
sensorManager.registerListener(new MySensorListener(), lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
|
|
basUtil = A1IoDevManager.initIOManager();
|
basUtil.openDIST();
|
// boolean open = sr04Device.open();
|
|
basUtil.closeLED();
|
basUtil.closeIRDA();
|
}
|
|
if (!PermissionHelper.hasWriteStoragePermission(this)) {
|
PermissionHelper.requestWriteStoragePermission(this);
|
}
|
|
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 保持屏幕常亮
|
|
hideSystemUIThread();
|
addFragments();
|
|
addCameraToFragment();
|
addVideoViewToFragment();
|
addToolbarButtonsToFragment();
|
|
addTimeoutToBlank();
|
|
addIdCardPhoneComponent();
|
|
addBackgroundAndBorderComponent();
|
|
addCameras();
|
|
setUpClickHook();
|
|
addFaceComponents();
|
|
addSystemSettingTabs();
|
|
addSystemSettingHintTabs();
|
|
addPersonManagerComponents();
|
|
logoutChecker();
|
|
hideOneFragment(fragment_menu);
|
hideOneFragment(fragment_person_identity);
|
hideOneFragment(fragment_face_list);
|
hideOneFragment(fragment_face_detail);
|
hideOneFragment(fragment_system_setting_tabs);
|
hideOneFragment(fragment_su_auto_ic_wait_phone);
|
hideOneFragment(fragment_su_logged_ic_wait_idcard);
|
hideOneFragment(fragment_su_logged_ic_compare_success);
|
hideOneFragment(fragment_background_and_border);
|
|
showFragment(fragment_home);
|
|
mainActivityInitComplete = true;
|
checkDeviceId();
|
|
// DeviceControl.sendInformationScreen(this, false);
|
// DeviceControl.hideNavigationBar(this, true);
|
// com.basic.security.utils.DeviceControl.devicesTatusbar(this, false);
|
stopService(new Intent(this, KeepLifeService.class));
|
startService(new Intent(this, KeepLifeService.class));
|
stopService(new Intent(this, UpgradeAppService.class));
|
startService(new Intent(this, UpgradeAppService.class));
|
// System.out.println("MainActivity.afterViews");
|
if (Constants.useAlf) {
|
DeviceControl.setSystemLauncher(BaseApplication.getApplication(), "com.basic.security");
|
DeviceControl.configCameraHdr(BaseApplication.getApplication(), true);
|
}
|
|
if (Constants.useAlf) {
|
RelayServerUtil2.startOpenDoorThread();
|
}
|
// WebRtcBroadCastReceiver webRtcBroadCastReceiver = new WebRtcBroadCastReceiver();
|
// IntentFilter intentFilter = new IntentFilter();
|
// intentFilter.addAction("video.call.status");
|
// registerReceiver(webRtcBroadCastReceiver, intentFilter);
|
// new ANRWatchDog().start();
|
|
|
}
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
WebRtcBroadCastReceiver.webRtcClientConnected = false;
|
WebRtcBroadCastReceiver.webRtcServerStarted = false;
|
// System.out.println("MainActivity.onResume");
|
|
if (Constants.needIdCardModule) {
|
Intent intent1 = new Intent();
|
intent1.setPackage("com.basic.project.idcardservice");
|
intent1.setAction("com.basic.read.IDCard");
|
intent1.putExtra("type", "start_service");
|
intent1.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
|
startService(intent1);
|
}
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
// System.out.println("MainActivity.onPause");
|
KeyboardUtil.hideSoftKeyboard();
|
}
|
|
@Override
|
protected void onStop() {
|
super.onStop();
|
// System.out.println("MainActivity.onStop");
|
// exitApp();
|
}
|
|
@Override
|
public void onBackPressed() {
|
long currentTime = System.currentTimeMillis();
|
if ((currentTime - startTime) >= 2000) {
|
ToastUtil.show("再按一次退出");
|
startTime = currentTime;
|
} else {
|
// ErlangProcess.stopErlangProcess();
|
exitApp();
|
}
|
}
|
|
private void exitApp() {
|
if (Constants.needIdCardModule) {
|
if (isNewIDCardReader) {
|
|
if (readCardUtil != null) {
|
readCardUtil.stopReadCard();
|
readCardUtil.destroy();
|
}
|
|
} else {
|
IdCardManager.unRegisterBroadcast(this);
|
}
|
}
|
|
|
finish();
|
System.exit(0);
|
}
|
|
public void upgradeAppThread() {
|
// while(true) {
|
// try {
|
//
|
// DeviceControl.startInstallApk(
|
// BaseApplication.getApplication(),
|
// "com.basic.security",
|
// "/sdcard/download/"+Constants.updateApkFileName,
|
// true,
|
// true
|
// );
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
// SystemClock.sleep(5000);
|
// }
|
}
|
|
public boolean needCopyCameraData() {
|
if (
|
// AccountManager.adminLoggedIn()
|
currentFragment == fragment_su_logged_wait_face
|
|| currentFragment == fragment_su_logged_ic_wait_face
|
|| currentFragment == fragment_su_logged_nic_wait_face
|
) {
|
// System.out.println("MainActivity.needCopyCameraData true");
|
return true;
|
} else {
|
// System.out.println("MainActivity.needCopyCameraData false");
|
return false;
|
}
|
}
|
|
public class Sr04DeviceDate implements OnDistanceListener {
|
@Override
|
public void onRevData(final int i1) {
|
serialDeviceOpenLamp(i1);
|
}
|
}
|
|
public class MySensorListener implements SensorEventListener {
|
|
@Override
|
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
}
|
|
@Override
|
public void onSensorChanged(SensorEvent event) {
|
}
|
|
}
|
|
|
}
|