diff --git a/app/build.gradle b/app/build.gradle index 3c18c7f..4ad6cc6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "kr.co.enicom.acs" minSdkVersion 26 targetSdkVersion 30 - versionCode 1 - versionName "2.0.3" + versionCode 204 + versionName "2.0.4" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk.abiFilters 'armeabi-v7a' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 91423e5..2a0f5d5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ + diff --git a/app/src/main/java/kr/co/enicom/acs/BaseService.java b/app/src/main/java/kr/co/enicom/acs/BaseService.java index 29def34..417ce9d 100644 --- a/app/src/main/java/kr/co/enicom/acs/BaseService.java +++ b/app/src/main/java/kr/co/enicom/acs/BaseService.java @@ -31,6 +31,8 @@ import kr.co.enicom.acs.system.SystemUtil; import kr.co.rito.RitoUtil; import kr.co.rito.miscmanager.GpioManager; +import static kr.co.enicom.acs.GlobalInfo.DOOR_CONTROL_STATUS_CLOSE; +import static kr.co.enicom.acs.GlobalInfo.DOOR_CONTROL_STATUS_OPEN_LOCK; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_FACE; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_FINGER_FACE; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_FINGER_PRINT; @@ -217,6 +219,7 @@ public class BaseService extends Service { class PeriodicChecker extends Thread { int mAliveCount = 0; boolean mIsAlive = false; + int mPrevDoorControlOpenStatus = -1; private long getUTC() { @@ -301,6 +304,35 @@ public class BaseService extends Service { } } + if(MainActivity.INSTANCE != null) { + if (GlobalInfo.mUseDoorControlTime == 1) { + if (GlobalInfo.checkIsDoorControlOpenTime()) { + if (GlobalInfo.mDoorControlTimeStatus != 1) { + //mDoorManager.controlDoor(true, -1); + mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + if (MainActivity.INSTANCE != null) { + MainActivity.INSTANCE.turnToBaseUI(); + } + } + GlobalInfo.mDoorControlTimeStatus = 1; + } else { + if (GlobalInfo.mDoorControlTimeStatus != 0) { + //mDoorManager.controlDoor(false, 0); + mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_CLOSE); + if (MainActivity.INSTANCE != null) { + MainActivity.INSTANCE.turnToBaseUI(); + } + } + GlobalInfo.mDoorControlTimeStatus = 0; + } + } else { + if (GlobalInfo.mDoorControlTimeStatus != -1) { + GlobalInfo.mDoorControlTimeStatus = -1; + mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_CLOSE); + } + } + } + if(isOnBlocking) continue; diff --git a/app/src/main/java/kr/co/enicom/acs/FingerManager.java b/app/src/main/java/kr/co/enicom/acs/FingerManager.java index bb70b6f..d87a558 100644 --- a/app/src/main/java/kr/co/enicom/acs/FingerManager.java +++ b/app/src/main/java/kr/co/enicom/acs/FingerManager.java @@ -354,6 +354,28 @@ public class FingerManager implements DigentFPUsbDriver.DigentFPUsbCallBack { } } + { + idx = 0; + int[] scoreList = new int[humans]; + for (UserInfo user : userList) { + if (user.mFingerTemplate2.length() > 0 && user.mFingerTemplate2.length() == ServerManager.FINGER_CODE_LENGTH) { + byte[] fingerFeature = hexToByteArray(user.mFingerTemplate2); + System.arraycopy(fingerFeature, 0, compareList, idx * IzzixOEMAPI32Values.MAX_FEATUREVECT_LEN, IzzixOEMAPI32Values.MAX_FEATUREVECT_LEN); + finger_users++; + } + scoreList[idx] = idx; + idx++; + } + + byte[] feature = hexToByteArray(veinCode); + int[] findIndex = new int[1]; + IzzixOEMAPI32ErrorCodes result = mIzzixOEMAPI32.matchFingerOneToN(feature, compareList, humans, IzzixOEMAPI32Values.LOWER_LEVEL, scoreList, findIndex, null); + if (result.getErrorCode() >= IzzixOEMAPI32ErrorCodes.FPAPIERR_NO.getErrorCode()) { + Log.w(TAG, "리턴 유저 : " + userList.get(findIndex[0]).mName); + return userList.get(findIndex[0]); + } + } + // for (UserInfo user : userList) { // if (user.mFingerTemplate.length() > 0 && user.mFingerTemplate.length() == ServerManager.FINGER_CODE_LENGTH) { @@ -374,25 +396,6 @@ public class FingerManager implements DigentFPUsbDriver.DigentFPUsbCallBack { // //idx++; // } - - - - - -// int maxScore = scoreList[0]; -// int maxIdx = 0; -// for(int i = 1;i < humans;i++) { -// if(scoreList[i] > maxScore) { -// maxScore = scoreList[i]; -// maxIdx = i; -// } -// } -// -// Log.w(TAG, "최고 점수 : " + maxScore); -// if(maxScore >= 90) { -// return userList.get(maxIdx); -// } - return null; } diff --git a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java index 6212323..8e46fab 100644 --- a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java @@ -23,6 +23,7 @@ import java.io.OutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -88,6 +89,10 @@ public class GlobalInfo { public static final int DEFAULT_AUTO_MASK_WEAR = 0; public static final int DEFAULT_MANAGER_LOGIN_CAPTURE_SEND = 0; + public static final int DEFAULT_USE_ATTENDANCE = 0; + public static final int DEFAULT_USE_DOOR_CONTROL_TIME = 0; + public static final int DEFAULT_DOOR_CONTROL_TIME_START = 9 * 60; + public static final int DEFAULT_DOOR_CONTROL_TIME_END = 18 * 60; public static final int VERIFY_COMBINATION_WITH_RFID = 0; public static final int VERIFY_COMBINATION_WITH_ID = 1; @@ -157,6 +162,9 @@ public class GlobalInfo { public static int VEIN_MULTI_SCAN_COUNT_BASE = 7000; public static int mVerifyActivateMethod = (VERIFY_METHOD_VEIN | VERIFY_METHOD_RFID); +// public static int mRfidDualMode = 0; // RFID 2개 등록 모드 +// public static int mBioDualMode = 0; // 지문/지정맥 2개 등록 모드 + public static String mDeviceId; public static String mDeviceName; public static String mSerialNumber = null; @@ -241,6 +249,17 @@ public class GlobalInfo { public static boolean mIsReloadUserListFinished = false; public static boolean mIsCaseOpened = false; // 본체가 열렸는 지 여부 + public static int mUseAttendance = 1; // 근태 관리 사용 여부 + public static final int ATTENDANCE_MODE_NONE = 0; + public static final int ATTENDANCE_MODE_IN = 1; + public static final int ATTENDANCE_MODE_OUT = 2; + public static int mAttendanceMode = ATTENDANCE_MODE_NONE; // 근태 관리. 1 : 출근, 2 : 퇴근 + + public static int mUseDoorControlTime = 1; // 개방시간 사용 여부 + public static int mDoorControlTimeStatus = -1; // 개방시간 문 상태 보존. -1 : 미제어, 0 : 닫음, 1 : 열림 + public static int mDoorControlTimeStart = 7 * 60 + 41; // 개방시간 시작 시간(Minute) Default = 09:00 + public static int mDoorControlTimeEnd = 7 * 60 + 41; //18 * 60; // 개방시간 종료 시간(Minute) Default = 18:00 + public static ArrayList mUserList; private static Object mLock = new Object(); @@ -325,7 +344,7 @@ public class GlobalInfo { } private static void createLogTable(SQLiteDatabase database) { - String sql = "create table logging(idx integer PRIMARY KEY AUTOINCREMENT, log_time text, log_id text, log_name text, oprno text, johapnum text, verify_method integer, rfid_code text)"; + String sql = "create table logging(idx integer PRIMARY KEY AUTOINCREMENT, log_time text, log_id text, log_name text, oprno text, johapnum text, verify_method integer, rfid_code text, attendance_code integer)"; try { database.execSQL(sql); } catch (Exception e) { @@ -335,6 +354,10 @@ public class GlobalInfo { columnAppend(database, "logging", "rfid_code", "text"); } + if(!columnExists(database, "logging", "attendance_code")) { + columnAppend(database, "logging", "attendance_code", "integer"); + } + sql = "create table adminlog(idx integer PRIMARY KEY AUTOINCREMENT, log_time text, log_id text, log_name text, verify_method integer, rfid_code text, verify_result integer, capture_file text)"; try { database.execSQL(sql); @@ -343,7 +366,7 @@ public class GlobalInfo { } private static void createLogTempTable(SQLiteDatabase database) { - String sql = "create table logtemp(idx integer PRIMARY KEY AUTOINCREMENT, id text, name text, oprno text, johapnum text, date text, time text, method integer, resultcode integer, rfid_code text)"; + String sql = "create table logtemp(idx integer PRIMARY KEY AUTOINCREMENT, id text, name text, oprno text, johapnum text, date text, time text, method integer, resultcode integer, rfid_code text, attendance_code integer)"; try { database.execSQL(sql); } catch (Exception e) { @@ -352,15 +375,20 @@ public class GlobalInfo { if(!columnExists(database, "logtemp", "rfid_code")) { columnAppend(database, "logtemp", "rfid_code", "text"); } + + if(!columnExists(database, "logtemp", "attendance_code")) { + columnAppend(database, "logtemp", "attendance_code", "integer"); + } } private static void createTable(SQLiteDatabase database) { String sql = "create table userinfo(idx integer PRIMARY KEY AUTOINCREMENT, id text, name text, authority integer, password text, rfidcode text, veincode text, " + - "oprno text, johapnum text, user_reg_date text, rfid_reg_date text, vein_reg_date text, fingercode text, finger_reg_date text, facecode blob, face_reg_date text)"; + "oprno text, johapnum text, user_reg_date text, rfid_reg_date text, vein_reg_date text, fingercode text, finger_reg_date text, facecode blob, face_reg_date text, " + + "rfidcode2 text, veincode2 text, fingercode2 text, permit_date text, permit_time text)"; try { database.execSQL(sql); - sql = String.format("insert into userinfo (id, name, authority, password, rfidcode, veincode, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date) values " + - "('%s', '관리자', %d, '%s', '', '', '', '', '', '', '', '', '')", + sql = String.format("insert into userinfo (id, name, authority, password, rfidcode, veincode, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time) values " + + "('%s', '관리자', %d, '%s', '', '', '', '', '', '', '', '', '', '', '', '', '', '')", ADMIN_ID, AUTHORITY_TYPE_ADMIN, ADMIN_PASSWD); database.execSQL(sql); } catch (Exception e) { @@ -383,6 +411,22 @@ public class GlobalInfo { columnAppend(database, "userinfo", "face_reg_date", "text"); } + if(!columnExists(database, "userinfo", "rfidcode2")) { + columnAppend(database, "userinfo", "rfidcode2", "text"); + } + if(!columnExists(database, "userinfo", "veincode2")) { + columnAppend(database, "userinfo", "veincode2", "text"); + } + if(!columnExists(database, "userinfo", "fingercode2")) { + columnAppend(database, "userinfo", "fingercode2", "text"); + } + + if(!columnExists(database, "userinfo", "permit_date")) { + columnAppend(database, "userinfo", "permit_date", "text"); + } + if(!columnExists(database, "userinfo", "permit_time")) { + columnAppend(database, "userinfo", "permit_time", "text"); + } sql = "create table serverinfo(idx integer, address text, port integer, address_slave text, port_slave integer," + "update_addr text, update_port integer, update_protocol integer)"; @@ -431,7 +475,8 @@ public class GlobalInfo { "state_period integer, volume integer, use_access_control integer, door_control_mode integer, door_control_time integer," + "socket_use_encrypt integer, dcu_device_type integer, use_dcu_watchdog integer, use_case_check integer, input_timeout integer, " + "auto_reboot_use integer, auto_reboot_period integer, auto_reboot_hour integer, dcu_watchdog_timeout integer, verify_log_auto_resend integer, verify_activate_method integer," + - "auto_forgery integer, auto_mask_wear integer, manager_login_capture_send integer" + + "auto_forgery integer, auto_mask_wear integer, manager_login_capture_send integer, use_attendance integer, " + + "use_door_control_time integer, door_control_time_start integer, door_control_time_end integer" + ")"; try { database.execSQL(sql); @@ -440,20 +485,23 @@ public class GlobalInfo { "state_period, volume, use_access_control, door_control_mode, door_control_time, " + "socket_use_encrypt, dcu_device_type, use_dcu_watchdog, use_case_check, input_timeout, " + "auto_reboot_use, auto_reboot_period, auto_reboot_hour, dcu_watchdog_timeout, verify_log_auto_resend, verify_activate_method, " + - "auto_forgery, auto_mask_wear, manager_login_capture_send" + + "auto_forgery, auto_mask_wear, manager_login_capture_send, use_attendance, " + + "use_door_control_time, door_control_time_start, door_control_time_end" + ") " + "values (0, '', '', 0, 0, %d, " + "%d, %d, %d, %d, %d, %d, " + "%d, %d, %d, %d, %d, " + "%d, %d, %d, %d, %d, " + "%d, %d, %d, %d, %d, %d, " + + "%d, %d, %d, %d, " + "%d, %d, %d" + ")", VERIFY_COMBINATION_OR, DEFAULT_VERIFY_PRINTUSERNAME, DEFAULT_VERIFY_POPUPTIME, DEFAULT_LOG_DELETESTATUS , 1, 1, 1, DEFAULT_SERVER_CHECK_TIME_DURATION, DEFAULT_DEVICE_VOLUME, DOOR_USE_ACCESS_CONTROL, DEFAULT_DOOR_CONTROL_MODE, DEFAULT_DOOR_OPEN_TIME, DEFAULT_SOCKET_USE_ENCRYPTION, DEFAULT_DCU_DEVICE_TYPE, DEFAULT_USE_DCU_WATCHDOG, DEFAULT_USE_CASE_CHECK, DEFAULT_INPUT_TIMEOUT_SECONDS, DEFAULT_AUTO_REBOOT_USE, DEFAULT_AUTO_REBOOT_PERIOD, DEFAULT_AUTO_REBOOT_HOUR, DEFAULT_DCU_WATCHDOG_TIME, DEFAULT_VERIFY_LOG_AUTO_RESEND, DEFAULT_VERIFY_ACTIVATE_METHOD, - DEFAULT_AUTO_FORGERY, DEFAULT_AUTO_MASK_WEAR, DEFAULT_MANAGER_LOGIN_CAPTURE_SEND + DEFAULT_AUTO_FORGERY, DEFAULT_AUTO_MASK_WEAR, DEFAULT_MANAGER_LOGIN_CAPTURE_SEND, DEFAULT_USE_ATTENDANCE, + DEFAULT_USE_DOOR_CONTROL_TIME, DEFAULT_DOOR_CONTROL_TIME_START, DEFAULT_DOOR_CONTROL_TIME_END ); database.execSQL(sql); @@ -514,6 +562,40 @@ public class GlobalInfo { } } + if(!columnExists(database, "settings", "use_attendance")) { + columnAppend(database, "settings", "use_attendance", "integer"); + sql = String.format("update settings set use_attendance = %d where idx = 0", DEFAULT_USE_ATTENDANCE); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + + if(!columnExists(database, "settings", "use_door_control_time")) { + columnAppend(database, "settings", "use_door_control_time", "integer"); + sql = String.format("update settings set use_door_control_time = %d where idx = 0", DEFAULT_USE_DOOR_CONTROL_TIME); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + if(!columnExists(database, "settings", "door_control_time_start")) { + columnAppend(database, "settings", "door_control_time_start", "integer"); + sql = String.format("update settings set door_control_time_start = %d where idx = 0", DEFAULT_DOOR_CONTROL_TIME_START); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + if(!columnExists(database, "settings", "door_control_time_end")) { + columnAppend(database, "settings", "door_control_time_end", "integer"); + sql = String.format("update settings set door_control_time_end = %d where idx = 0", DEFAULT_DOOR_CONTROL_TIME_END); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + /*sql = "create table logging(idx integer PRIMARY KEY AUTOINCREMENT, log_time text, log_id text, log_name text, verify_method integer)"; try { database.execSQL(sql); @@ -620,8 +702,8 @@ public class GlobalInfo { // info.mID, info.mName, info.mAuthority, info.mPassword, info.mRFIDCode, info.mVeinTemplate, info.mOprno, info.mJohapnum, info.mUserRegistDateTime, info.mRfidRegistDateTime, info.mVeinRegistDateTime, info.mFingerTemplate, info.mFingerRegistDateTime); // _database.execSQL(sql); - String sql = String.format("insert into userinfo (id, name, authority, password, rfidcode, veincode, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date) " + - "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + String sql = String.format("insert into userinfo (id, name, authority, password, rfidcode, veincode, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time) " + + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); SQLiteStatement insertStmt; insertStmt = _database.compileStatement(sql); @@ -642,6 +724,11 @@ public class GlobalInfo { insertStmt.bindString(idx++, info.mFingerRegistDateTime); insertStmt.bindBlob(idx++, info.mFaceTemplate); insertStmt.bindString(idx++, info.mFaceRegistDateTime); + insertStmt.bindString(idx++, info.mRFIDCode2); + insertStmt.bindString(idx++, info.mVeinTemplate2); + insertStmt.bindString(idx++, info.mFingerTemplate2); + insertStmt.bindString(idx++, info.mPermitDate); + insertStmt.bindString(idx++, info.mPermitTime); insertStmt.execute(); mUserList.add(info); @@ -682,7 +769,7 @@ public class GlobalInfo { // info.mID, info.mName, info.mAuthority, info.mPassword, info.mRFIDCode, info.mVeinTemplate, info.mFingerTemplate, info.mOprno, info.mJohapnum, info.mUserRegistDateTime, info.mRfidRegistDateTime, info.mVeinRegistDateTime, info.mFingerRegistDateTime, info.mIndex); // _database.execSQL(sql); - String sql = String.format("update userinfo set id = ?, name = ?, authority = ?, password = ?, rfidcode = ?, veincode = ?, fingercode = ?, facecode = ?, oprno = ?, johapnum = ?, user_reg_date = ?, rfid_reg_date = ?, vein_reg_date = ?, finger_reg_date = ?, face_reg_date = ? where idx = ?"); + String sql = String.format("update userinfo set id = ?, name = ?, authority = ?, password = ?, rfidcode = ?, veincode = ?, fingercode = ?, facecode = ?, oprno = ?, johapnum = ?, user_reg_date = ?, rfid_reg_date = ?, vein_reg_date = ?, finger_reg_date = ?, face_reg_date = ?, rfidcode2 = ?, veincode2 = ?, fingercode2 = ?, permit_date = ?, permit_time = ? where idx = ?"); SQLiteStatement insertStmt; insertStmt = _database.compileStatement(sql); insertStmt.clearBindings(); @@ -702,6 +789,11 @@ public class GlobalInfo { insertStmt.bindString(idx++, info.mVeinRegistDateTime); insertStmt.bindString(idx++, info.mFingerRegistDateTime); insertStmt.bindString(idx++, info.mFaceRegistDateTime); + insertStmt.bindString(idx++, info.mRFIDCode2); + insertStmt.bindString(idx++, info.mVeinTemplate2); + insertStmt.bindString(idx++, info.mFingerTemplate2); + insertStmt.bindString(idx++, info.mPermitDate); + insertStmt.bindString(idx++, info.mPermitTime); insertStmt.bindLong(idx++, info.mIndex); insertStmt.execute(); @@ -789,7 +881,7 @@ public class GlobalInfo { if(database == null) return null; - String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date " + + String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time " + "from userinfo where id = '" + id + "'"; try { //Log.w("RITO", "ScanQuery : " + sql ); @@ -818,6 +910,13 @@ public class GlobalInfo { _info.mFaceTemplate = cursor.getBlob(14); _info.mFaceRegistDateTime = cursor.getString(15); + + _info.mRFIDCode2 = cursor.getString(16); + _info.mVeinTemplate2 = cursor.getString(17); + _info.mFingerTemplate2 = cursor.getString(18); + + _info.mPermitDate = cursor.getString(19); + _info.mPermitTime = cursor.getString(20); _info.makeSafe(); database.close(); return _info; @@ -835,6 +934,14 @@ public class GlobalInfo { return (mVerifyActivateMethod & method) > 0; } +// public static boolean isRfidDualMode() { +// return (mRfidDualMode > 0); +// } +// +// public static boolean isBioDualMode() { +// return (mBioDualMode > 0); +// } + public static boolean isVerifyMethod(int method) { return (mVerifyMethod & method) > 0; } @@ -846,7 +953,7 @@ public class GlobalInfo { return; mUserList.clear(); - String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date from userinfo"; + String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time from userinfo"; try { Cursor cursor = database.rawQuery(sql, null); if(cursor != null){ @@ -875,6 +982,14 @@ public class GlobalInfo { _info.mFaceTemplate = cursor.getBlob(14); _info.mFaceRegistDateTime = cursor.getString(15); + + _info.mRFIDCode2 = cursor.getString(16); + _info.mVeinTemplate2 = cursor.getString(17); + _info.mFingerTemplate2 = cursor.getString(18); + + _info.mPermitDate = cursor.getString(19); + _info.mPermitTime = cursor.getString(20); + _info.makeSafe(); //Log.w(TAG, "User #"+i+" : " + _info.mName); mUserList.add(_info); @@ -959,7 +1074,8 @@ public class GlobalInfo { sql = "select device_id, device_name, verify_mode, verify_method, verify_combination, verify_printusername, verify_popuptime, log_delete_status, log_delete_term, log_delete_checkperiod, log_delete_checkperiod_cnt, " + "state_period, volume, use_access_control, door_control_mode, door_control_time, socket_use_encrypt, dcu_device_type, use_dcu_watchdog, use_case_check, input_timeout, auto_reboot_use, auto_reboot_period, auto_reboot_hour, " + - "dcu_watchdog_timeout, verify_log_auto_resend, verify_activate_method, auto_forgery, auto_mask_wear, manager_login_capture_send " + + "dcu_watchdog_timeout, verify_log_auto_resend, verify_activate_method, auto_forgery, auto_mask_wear, manager_login_capture_send, use_attendance, " + + "use_door_control_time, door_control_time_start, door_control_time_end " + " from settings where idx = 0"; try { Cursor cursor = database.rawQuery(sql, null); @@ -999,6 +1115,11 @@ public class GlobalInfo { GlobalInfo.mAutoForgery = cursor.getInt(27); GlobalInfo.mAutoMaskWear = cursor.getInt(28); GlobalInfo.mManagerLoginCaptureSend = cursor.getInt(29); + GlobalInfo.mUseAttendance = cursor.getInt(30); + + GlobalInfo.mUseDoorControlTime = cursor.getInt(31); + GlobalInfo.mDoorControlTimeStart = cursor.getInt(32); + GlobalInfo.mDoorControlTimeEnd = cursor.getInt(33); Log.w("RITO", "mAutoForgery : " + GlobalInfo.mAutoForgery); Log.w("RITO", "mAutoMaskWear : " + GlobalInfo.mAutoMaskWear); @@ -1171,7 +1292,7 @@ public class GlobalInfo { { try { SQLiteDatabase _database; - if (target.equals("log")) { + if (target.equals("log") || target.equals("attendance")) { _database = getLogDatabase(); } else { _database = getDatabase(); @@ -1268,6 +1389,30 @@ public class GlobalInfo { sql += " and"; sql += String.format(" datetime(log_time, 'localtime') <= datetime('%s:59', 'localtime')", to); } + sql += "and (attendance_code < 1 or attendance_code > 2 or attendance_code IS NULL)"; + } else { + sql += " where (attendance_code < 1 or attendance_code > 2 or attendance_code IS NULL)"; + } + + try { + _database.execSQL(sql); + } catch (Exception e) { + } + } else if (target.equals("attendance")) { + sql = String.format("delete from logging"); + if (from.length() > 0 || to.length() > 0) { + sql += " where"; + if (from.length() > 0) { + sql += String.format(" datetime(log_time, 'localtime') >= datetime('%s:00', 'localtime')", from); + } + if (to.length() > 0) { + if (from.length() > 0) + sql += " and"; + sql += String.format(" datetime(log_time, 'localtime') <= datetime('%s:59', 'localtime')", to); + } + sql += "and (attendance_code >= 1 and attendance_code <= 2)"; + } else { + sql += " where (attendance_code >= 1 and attendance_code <= 2)"; } try { @@ -1455,7 +1600,7 @@ public class GlobalInfo { return null; ArrayList logList = new ArrayList(); - String sql = "select log_time, log_id, log_name, oprno, johapnum, verify_method, rfid_code from logging"; + String sql = "select log_time, log_id, log_name, oprno, johapnum, verify_method, rfid_code, attendance_code from logging"; if(from != null || to != null) { sql += " where"; if(from != null) { @@ -1488,6 +1633,7 @@ public class GlobalInfo { if(_info.mRfidCode == null) { _info.mRfidCode = ""; } + _info.mAttendanceCode = cursor.getInt(7); logList.add(_info); } } @@ -1499,6 +1645,67 @@ public class GlobalInfo { return logList; } + + public static ArrayList queryLogDataAttendance(String from, String to, boolean isAttendance) { + SQLiteDatabase _database= getLogDatabase(); + if(_database == null) + return null; + + ArrayList logList = new ArrayList(); + String sql = "select log_time, log_id, log_name, oprno, johapnum, verify_method, rfid_code, attendance_code from logging"; + if(from != null || to != null) { + sql += " where"; + if(from != null) { + sql += String.format(" datetime(log_time, 'localtime') >= datetime('%s 00:00:01', 'localtime')", from); + } + if(to != null) { + if(from != null) + sql += " and"; + sql += String.format(" datetime(log_time, 'localtime') <= datetime('%s 23:59:59', 'localtime')", to); + } + if(isAttendance) { + sql += String.format(" and attendance_code >= 1 and attendance_code <= 2"); + } else { + sql += String.format(" and (attendance_code < 1 or attendance_code > 2 or attendance_code IS NULL)"); + } + } + try { + Cursor cursor = _database.rawQuery(sql, null); + if(cursor != null){ + int count = cursor.getCount(); + Log.d(TAG, "Log Count : " + count); + + for(int i = 0; i< count ; i++){ + cursor.moveToNext(); + LogInfo _info = new LogInfo(); + String _datetime = cursor.getString(0); + _info.mDate = _datetime.substring(0, 10); + _info.mTime = _datetime.substring(11); + _info.mId = cursor.getString(1); + _info.mName = cursor.getString(2); + _info.mOprno = cursor.getString(3); + _info.mJohapnum = cursor.getString(4); + _info.mMethod = cursor.getInt(5); + _info.mRfidCode = cursor.getString(6); + if(_info.mRfidCode == null) { + _info.mRfidCode = ""; + } + _info.mAttendanceCode = cursor.getInt(7); + logList.add(_info); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + _database.close(); + return logList; + } + + + + + public static ArrayList queryUserDataDateTime(String from, String to) { SQLiteDatabase _database= getDatabase(); if(_database == null) @@ -1508,7 +1715,7 @@ public class GlobalInfo { to = SystemUtil.convertDateTime14ToDateTime19(to); ArrayList userList = new ArrayList(); - String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date from userinfo"; + String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time from userinfo"; if(from != null || to != null) { sql += " where"; if(from != null) { @@ -1550,6 +1757,14 @@ public class GlobalInfo { _info.mFaceTemplate = cursor.getBlob(14); _info.mFaceRegistDateTime = cursor.getString(15); + + _info.mRFIDCode2 = cursor.getString(16); + _info.mVeinTemplate2 = cursor.getString(17); + _info.mFingerTemplate2 = cursor.getString(18); + + _info.mPermitDate = cursor.getString(19); + _info.mPermitTime = cursor.getString(20); + _info.makeSafe(); userList.add(_info); } @@ -1568,7 +1783,7 @@ public class GlobalInfo { return null; ArrayList userList = new ArrayList(); - String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date from userinfo"; + String sql = "select id, name, authority, password, rfidcode, veincode, idx, oprno, johapnum, user_reg_date, rfid_reg_date, vein_reg_date, fingercode, finger_reg_date, facecode, face_reg_date, rfidcode2, veincode2, fingercode2, permit_date, permit_time from userinfo"; if(from != null || to != null) { sql += " where"; if(from != null) { @@ -1609,6 +1824,14 @@ public class GlobalInfo { _info.mFaceTemplate = cursor.getBlob(14); _info.mFaceRegistDateTime = cursor.getString(15); + + _info.mRFIDCode2 = cursor.getString(16); + _info.mVeinTemplate2 = cursor.getString(17); + _info.mFingerTemplate2 = cursor.getString(18); + + _info.mPermitDate = cursor.getString(19); + _info.mPermitTime = cursor.getString(20); + _info.makeSafe(); userList.add(_info); } @@ -1728,7 +1951,8 @@ public class GlobalInfo { "use_access_control = %d, door_control_mode = %d, door_control_time = %d, " + "socket_use_encrypt = %d, dcu_device_type = %d, use_dcu_watchdog = %d, use_case_check = %d, input_timeout = %d, " + "auto_reboot_use = %d, auto_reboot_period = %d, auto_reboot_hour = %d, dcu_watchdog_timeout = %d, verify_log_auto_resend = %d, verify_activate_method = %d, " + - "auto_forgery = %d, auto_mask_wear = %d, manager_login_capture_send = %d " + + "auto_forgery = %d, auto_mask_wear = %d, manager_login_capture_send = %d, use_attendance = %d, " + + "use_door_control_time = %d, door_control_time_start = %d, door_control_time_end = %d " + " where idx = 0", GlobalInfo.mDeviceId, GlobalInfo.mDeviceName, GlobalInfo.mVerifyMode, GlobalInfo.mVerifyMethod, GlobalInfo.mVerifyCombination, GlobalInfo.mVerifyPrintUserName, GlobalInfo.mVerifyPopupTime, GlobalInfo.mLogDeleteStatus, GlobalInfo.mLogDeleteTerm, GlobalInfo.mLogDeleteCheckPeriod, GlobalInfo.mLogDeleteCheckPeriodCnt, @@ -1736,7 +1960,8 @@ public class GlobalInfo { GlobalInfo.mUseAccessControl, GlobalInfo.mDoorControlMode, GlobalInfo.mDoorControlTime, GlobalInfo.mUseSocketEncrypt, GlobalInfo.mDcuDeviceType, GlobalInfo.mUseDCUWatchdog, GlobalInfo.mUseCaseCheck, GlobalInfo.mInputTimeout, GlobalInfo.mAutoRebootUse, GlobalInfo.mAutoRebootPeriod, GlobalInfo.mAutoRebootHour, GlobalInfo.mDCUWatchdogTime, GlobalInfo.mVerifyLogAutoResend, GlobalInfo.mVerifyActivateMethod, - GlobalInfo.mAutoForgery, GlobalInfo.mAutoMaskWear, GlobalInfo.mManagerLoginCaptureSend + GlobalInfo.mAutoForgery, GlobalInfo.mAutoMaskWear, GlobalInfo.mManagerLoginCaptureSend, GlobalInfo.mUseAttendance, + GlobalInfo.mUseDoorControlTime, GlobalInfo.mDoorControlTimeStart, GlobalInfo.mDoorControlTimeEnd ); try { @@ -1885,8 +2110,8 @@ public class GlobalInfo { return; try { - String sql = String.format("insert into logging (log_time, log_id, log_name, oprno, johapnum, verify_method, rfid_code) values (datetime('now', 'localtime'), '%s', '%s', '%s', '%s', %d, '%s')", - logInfo.mId, logInfo.mName, logInfo.mOprno, logInfo.mJohapnum, logInfo.mMethod, logInfo.mRfidCode); + String sql = String.format("insert into logging (log_time, log_id, log_name, oprno, johapnum, verify_method, rfid_code, attendance_code) values (datetime('now', 'localtime'), '%s', '%s', '%s', '%s', %d, '%s', %d)", + logInfo.mId, logInfo.mName, logInfo.mOprno, logInfo.mJohapnum, logInfo.mMethod, logInfo.mRfidCode, logInfo.mAttendanceCode); _database.execSQL(sql); } catch (Exception e) { } @@ -2045,4 +2270,49 @@ public class GlobalInfo { } } } + + public static boolean checkIsDoorControlOpenTime() { + if(mUseDoorControlTime == 0) + return false; + + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24시간 기준 + int minute = calendar.get(Calendar.MINUTE); + int currentMinutes = hour * 60 + minute; + if(currentMinutes >= mDoorControlTimeStart && currentMinutes <= mDoorControlTimeEnd) + return true; + + return false; + } + + + public static boolean checkIsDateInRange(String range, String date) { + if(range == null || date == null || date.length() == 0) + return false; + + if(!range.contains("~")) + return false; + + String[] split = range.split("~"); + + if(date.compareTo(split[0].trim()) >= 0 && date.compareTo(split[1].trim()) <= 0) + return true; + + return false; + } + + public static boolean checkIsTimeInRange(String range, String time) { + if(range == null || time == null || time.length() == 0) + return false; + + if(!range.contains("~")) + return false; + + String[] split = range.split("~"); + + if(time.compareTo(split[0].trim()) >= 0 && time.compareTo(split[1].trim()) <= 0) + return true; + + return false; + } } diff --git a/app/src/main/java/kr/co/enicom/acs/MainActivity.java b/app/src/main/java/kr/co/enicom/acs/MainActivity.java index 3649b4e..67d6249 100644 --- a/app/src/main/java/kr/co/enicom/acs/MainActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/MainActivity.java @@ -9,6 +9,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.AssetFileDescriptor; import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.drawable.Drawable; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.media.AudioAttributes; @@ -41,6 +43,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; @@ -114,6 +117,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul private Handler mDelayHandler = new Handler(); private Button mSettingButton = null, mTitleBackButton = null; + private Button mWorkinButton = null, mWorkoutButton = null, mAttendanceButton = null; private CameraSurfaceView mCameraView = null; @@ -254,6 +258,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul LogInfo _logInfo = new LogInfo(); _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; _logInfo.mMethod = GlobalInfo.VERIFY_METHOD_FINGER_PRINT; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; Log.i("Finger", "Finger Code : " + value); _logInfo.mDate = GlobalInfo.getOffsetDateFromToday(0); @@ -267,6 +272,20 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if (GlobalInfo.isVerifyMethodAllAnd() && !info.mID.equals(mLastVerifyUser.mID)) { info = null; } + + if(info.mPermitDate.length() > 0) { + if(!GlobalInfo.checkIsDateInRange(info.mPermitDate, _logInfo.mDate)) { + Log.i("Finger", String.format("사용자 출입 기간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + } + } + + if(info != null && info.mPermitTime.length() > 0) { + if(!GlobalInfo.checkIsTimeInRange(info.mPermitTime, _logInfo.mTime)) { + Log.i("Finger", String.format("사용자 출입 시간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + } + } } if (info != null) { @@ -343,6 +362,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if (value.length() == 0) { // Code 획득 실패. LogInfo _logInfo = new LogInfo(); _logInfo.mMethod = GlobalInfo.VERIFY_METHOD_FINGER_PRINT; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; _logInfo.mDate = GlobalInfo.getOffsetDateFromToday(0); _logInfo.mTime = GlobalInfo.getOffsetTimeFromToday(0); processVerifyResult(_logInfo); // 지정맥 인증 실패 로그 전송 @@ -375,6 +395,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul LogInfo _logInfo = new LogInfo(); _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; _logInfo.mMethod = VERIFY_METHOD_FACE; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; Log.i("Face", "Face Code : " + faceCode); _logInfo.mDate = GlobalInfo.getOffsetDateFromToday(0); @@ -676,6 +697,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if(status.equals("success") && mVerifyMethod != GlobalInfo.VERIFY_METHOD_VEIN) { LogInfo _logInfo = new LogInfo(); _logInfo.mMethod = GlobalInfo.VERIFY_METHOD_RFID; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; Log.i("RFID", "Card Code : " + value); _logInfo.mRfidCode = value; // Added by ritoseo - 2021-04-16 @@ -691,6 +713,25 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul _logInfo.mId = info.mID; _logInfo.mName = info.mName; _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_SUCCESS; + + if(info.mPermitDate.length() > 0) { + if(!GlobalInfo.checkIsDateInRange(info.mPermitDate, _logInfo.mDate)) { + Log.i("RFID", String.format("사용자 출입 기간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + _logInfo.mId = ""; + _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; + } + } + + if(info != null && info.mPermitTime.length() > 0) { + if(!GlobalInfo.checkIsTimeInRange(info.mPermitTime, _logInfo.mTime)) { + Log.i("RFID", String.format("사용자 출입 시간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + _logInfo.mId = ""; + _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; + } + } + mLastVerifyUser = info; } } @@ -710,6 +751,25 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul _logInfo.mId = info.mID; _logInfo.mName = info.mName; _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_SUCCESS; + + if(info.mPermitDate.length() > 0) { + if(!GlobalInfo.checkIsDateInRange(info.mPermitDate, _logInfo.mDate)) { + Log.i("RFID", String.format("사용자 출입 기간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + _logInfo.mId = ""; + _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; + } + } + + if(info != null && info.mPermitTime.length() > 0) { + if(!GlobalInfo.checkIsTimeInRange(info.mPermitTime, _logInfo.mTime)) { + Log.i("RFID", String.format("사용자 출입 시간 실패 : [%s] %s", info.mID, info.mName)); + info = null; + _logInfo.mId = ""; + _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; + } + } + mLastVerifyUser = info; } } @@ -740,6 +800,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul LogInfo _logInfo = new LogInfo(); _logInfo.mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; _logInfo.mMethod = GlobalInfo.VERIFY_METHOD_VEIN; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; Log.i("VEIN", "Vein Code : " + value); // Log.i("VEIN", "Vein Code Length: " + value.length()); // try { @@ -864,6 +925,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul mConsecutiveVeinFailCount = 0; LogInfo _logInfo = new LogInfo(); _logInfo.mMethod = GlobalInfo.VERIFY_METHOD_VEIN; + _logInfo.mAttendanceCode = GlobalInfo.mAttendanceMode; _logInfo.mDate = GlobalInfo.getOffsetDateFromToday(0); _logInfo.mTime = GlobalInfo.getOffsetTimeFromToday(0); processVerifyResult(_logInfo); // 지정맥 인증 실패 로그 전송 @@ -973,9 +1035,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //setTheme(R.style.AppBlackTheme); - INSTANCE = this; - SystemUtil.shellCommand("niasysc SHELL-ORDER=killall kr.co.rito.factory"); + SystemUtil.shellCommand("niasysc SHELL-ORDER=chmod 666 /dev/ttyACM0"); // new Thread() { // @Override @@ -1284,8 +1345,61 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul return true; } }); + + + if(mWorkinButton == null) + mWorkinButton = (Button) findViewById(R.id.workinbutton) ; + + mWorkinButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) + { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_IN; + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + + mAttendanceButton.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.workin_icon_76, 0, 0); + mAttendanceButton.setText(R.string.main_attendance_mode_in); + mAttendanceButton.setVisibility(View.VISIBLE); + } + }); + + if(mWorkoutButton == null) + mWorkoutButton = (Button) findViewById(R.id.workoutbutton) ; + + mWorkoutButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) + { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_OUT; + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + + mAttendanceButton.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.workout_icon_76, 0, 0); + mAttendanceButton.setText(R.string.main_attendance_mode_out); + mAttendanceButton.setVisibility(View.VISIBLE); + } + }); + + if(mAttendanceButton == null) + mAttendanceButton = (Button) findViewById(R.id.attendancebutton) ; + + mAttendanceButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) + { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + mWorkinButton.setVisibility(View.VISIBLE); + mWorkoutButton.setVisibility(View.VISIBLE); + mAttendanceButton.setVisibility(View.INVISIBLE); + } + }); + startService(new Intent(this, BaseService.class)); + GlobalInfo.mDoorControlTimeStatus = -1; + INSTANCE = this; + //BaseService.setLastActivity(null); /* @@ -1563,6 +1677,12 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul BaseService.setLastActivity(null); + if(GlobalInfo.mUseAttendance == 1) { + mWorkinButton.setVisibility(View.VISIBLE); + mWorkoutButton.setVisibility(View.VISIBLE); + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + } + /*if(mVeinManager == null) { Log.i(TAG, "Create NEW VeinManager"); mVeinManager = new VeinManager(this); @@ -1684,38 +1804,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul } //Log.e("ryu", "on start face init!"); - if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN); - else if(mVerifyMethod == VERIFY_METHOD_RFID) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_CARD); - else if(mVerifyMethod == VERIFY_METHOD_FINGER_PRINT) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_PRINT); - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FACE) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FACE); - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN_FACE) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN_FACE); - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FINGER_FACE) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_FACE); - else if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_RFID)){ - if(mVerifyMethod == VERIFY_METHOD_VEIN_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN); - else if(mVerifyMethod == VERIFY_METHOD_FINGER_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_PRINT); - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FACE); - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) { - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN_FACE); - } - else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FINGER_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_FACE); - else { - mMainUiHandler.sendEmptyMessage(MAIN_SELECT_CARD); - } - } - else - mMainUiHandler.sendEmptyMessage(MAIN_UI_INIT); - - + turnToBaseUI(); } }.start(); @@ -1939,6 +2028,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul BaseService.mServerManager.reportLoggingResult(logResult); } + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + if(logResult.mId.length() > 0) { //Toast.makeText(this,"인증 성공 [" + logResult.mName + "]", Toast.LENGTH_SHORT).show(); @@ -2015,21 +2106,80 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul } }.start(); - - Message message = new Message(); mMainUiHandler.sendEmptyMessage(RESULT_FAIL); - - //processResultPopup(POPUP_TYPE_DENIED, "인증 실패"); new LedScheduler(GlobalInfo.GPIO_PIN_LED_RED).start(); } } + public void turnToBaseUI() { + if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN); + else if(mVerifyMethod == VERIFY_METHOD_RFID) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_CARD); + else if(mVerifyMethod == VERIFY_METHOD_FINGER_PRINT) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_PRINT); + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FACE) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FACE); + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN_FACE) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN_FACE); + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FINGER_FACE) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_FACE); + else if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_RFID)){ + if(mVerifyMethod == VERIFY_METHOD_VEIN_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN); + else if(mVerifyMethod == VERIFY_METHOD_FINGER_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_PRINT); + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FACE); + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) { + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN_FACE); + } + else if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FINGER_FACE_COMB_RFID && mVerifyCombination == VERIFY_COMBINATION_OR) + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_FINGER_FACE); + else { + mMainUiHandler.sendEmptyMessage(MAIN_SELECT_CARD); + } + } + else + mMainUiHandler.sendEmptyMessage(MAIN_UI_INIT); + } + class MainUiHandler extends Handler{ @Override public void handleMessage(Message msg) { + int imageWidth = 585; + int imageHeight = 402; + int imageWidthTriple = 380; + int imageHeightTriple = 261; + int imageWidthWithFace = 490; + int imageHeightWithFace = 337; + + int image1PosX = 39; + int image2PosX = 665; + int imageFace1PosX = 135; + int imageFace2PosX = 656; + int imageTriple2PosX = 450; + int imageTriple3PosX = 860; + + if(GlobalInfo.mUseAttendance == 1) { + imageWidth *= 0.738; + imageWidthTriple *= 0.738; + imageWidthWithFace *= 0.738; + + image1PosX = 39; + image2PosX = 500; + imageFace1PosX = 70; + imageFace2PosX = 500; + imageTriple2PosX = 350; + imageTriple3PosX = 660; + + mWorkinButton.setVisibility(View.VISIBLE); + mWorkoutButton.setVisibility(View.VISIBLE); + } + super.handleMessage(msg); mMainUiStatus = msg.what; mSettingButton.setVisibility(View.VISIBLE); @@ -2041,24 +2191,50 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul mCameraView.setDropFrame(true); BaseService.mFaceManager.mRBitmapFrameQueue.clear(); + if(GlobalInfo.checkIsDoorControlOpenTime()) { // 개방시간 사용 시간여부 + LayoutSetting(mVerifyCheck, CHECK, 563, 126, 155, 155, R.drawable.popup_fail, View.INVISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, 348, 40, 0, 0, R.drawable.main_img1, View.INVISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, 348, 40, 0, 0, R.drawable.main_img2, View.INVISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, 348, 40, 0, 0, R.drawable.main_fingerprint, View.INVISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, 348, 40, 0, 0, R.drawable.main_fingerprint, View.INVISIBLE); + LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 534, 385, 340, 65, R.string.main_verify_fail, View.INVISIBLE); + LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 582, 498, 660, 65, R.string.main_card_text2, View.INVISIBLE); + + if(GlobalInfo.mUseAttendance == 1) { + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + mAttendanceButton.setVisibility(View.INVISIBLE); + } + + TextView tv = findViewById(R.id.doorcontroltimetext); + tv.setText(String.format("%d:%02d~%d:%02d", GlobalInfo.mDoorControlTimeStart / 60, GlobalInfo.mDoorControlTimeStart % 60 + , GlobalInfo.mDoorControlTimeEnd / 60, GlobalInfo.mDoorControlTimeEnd % 60)); + findViewById(R.id.doorcontrolframe).setVisibility(View.VISIBLE); + + return; + } else { + findViewById(R.id.doorcontrolframe).setVisibility(View.INVISIBLE); + } + + //Log.e(TAG,"[RYU] MainUiHandler msg.what: " + msg.what); switch (msg.what) { case MAIN_UI_INIT: //or LayoutSetting(mVerifyCheck, CHECK, 0, 0, 0, 0, 0, View.INVISIBLE); - LayoutSetting(mLoginImage[CARD], CARD, 39, 40, 585, 402, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, image1PosX, 40, imageWidth, imageHeight, R.drawable.main_img1, View.VISIBLE); LayoutSetting(mLoginImage[FACE], FACE, 0,0,0,0, 0, View.INVISIBLE); if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN)) { - LayoutSetting(mLoginImage[VEIN], VEIN, 665, 40, 585, 402, R.drawable.main_img2, View.VISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 665, 40, 585, 402, R.drawable.main_fingerprint, View.INVISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_img2, View.VISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_fingerprint, View.INVISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 50, 498, 337, 65, R.string.main_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 387, 498, 660, 65, R.string.main_text2, View.VISIBLE); }else { - LayoutSetting(mLoginImage[VEIN], VEIN, 665, 40, 585, 402, R.drawable.main_img2, View.INVISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 665, 40, 585, 402, R.drawable.main_fingerprint, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_img2, View.INVISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_fingerprint, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 50, 498, 337+660, 65, R.string.main_card_finger_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 387, 498, 0, 0, 0, View.INVISIBLE); } @@ -2066,9 +2242,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul case MAIN_SELECT_CARD: LayoutSetting(mVerifyCheck, CHECK, 0,0,0,0,0, View.INVISIBLE); - LayoutSetting(mLoginImage[CARD], CARD, 348, 40, 585, 402, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 665, 40, 0, 0, R.drawable.main_img2, View.INVISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 665, 40, 0, 0, R.drawable.main_fingerprint, View.INVISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, 348, 40, imageWidth, imageHeight, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, image2PosX, 40, 0, 0, R.drawable.main_img2, View.INVISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, image2PosX, 40, 0, 0, R.drawable.main_fingerprint, View.INVISIBLE); LayoutSetting(mLoginImage[FACE], FACE, 0,0,0,0, 0, View.INVISIBLE); if (mVerifyMethod == VERIFY_METHOD_VEIN_COMB_RFID || mVerifyMethod == GlobalInfo.VERIFY_METHOD_FINGER_COMB_RFID) { @@ -2087,7 +2263,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul case MAIN_SELECT_VEIN: LayoutSetting(mVerifyCheck, CHECK, 0,0,0,0,0, View.INVISIBLE); LayoutSetting(mLoginImage[CARD], CARD, 348, 40, 0, 0, R.drawable.main_img1, View.INVISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 348, 40, 585, 402, R.drawable.main_img2, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, 348, 40, imageWidth, imageHeight, R.drawable.main_img2, View.VISIBLE); LayoutSetting(mLoginImage[FINGER], FINGER, 348, 40, 0, 0, R.drawable.main_fingerprint, View.INVISIBLE); LayoutSetting(mLoginImage[FACE], FACE, 0,0,0,0, 0, View.INVISIBLE); if(mVerifyMethod == VERIFY_METHOD_VEIN_COMB_RFID) { @@ -2097,8 +2273,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul mTitleBackButton.setVisibility(View.VISIBLE); waitTimeHandler(MAIN_SELECT_VEIN, GlobalInfo.mVerifyPopupTime * 1000); }else{ - LayoutSetting(mLoginImage[CARD], CARD, 39, 40, 585, 402, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 665, 40, 585, 402, R.drawable.main_img2, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, image1PosX, 40, imageWidth, imageHeight, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_img2, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 50, 498, 337, 65, R.string.main_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 387, 498, 660, 65, R.string.main_text2, View.VISIBLE); } @@ -2111,8 +2287,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul case MAIN_SELECT_FINGER_PRINT: LayoutSetting(mVerifyCheck, CHECK, 0,0,0,0,0, View.INVISIBLE); LayoutSetting(mLoginImage[CARD], CARD, 348, 40, 0, 0, R.drawable.main_img1, View.INVISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 348, 40, 585, 402, R.drawable.main_img2, View.INVISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 348, 40, 585, 402, R.drawable.main_fingerprint, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, 348, 40, imageWidth, imageHeight, R.drawable.main_img2, View.INVISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, 348, 40, imageWidth, imageHeight, R.drawable.main_fingerprint, View.VISIBLE); LayoutSetting(mLoginImage[FACE], FACE, 0,0,0,0, 0, View.INVISIBLE); if(mVerifyMethod == VERIFY_METHOD_FINGER_COMB_RFID){ if(mVerifyCombination == VERIFY_COMBINATION_AND) { @@ -2121,8 +2297,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul mTitleBackButton.setVisibility(View.VISIBLE); waitTimeHandler(MAIN_SELECT_FINGER_PRINT, GlobalInfo.mVerifyPopupTime * 1000); }else{ - LayoutSetting(mLoginImage[CARD], CARD, 39, 40, 585, 402, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 665, 40, 585, 402, R.drawable.main_fingerprint, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, image1PosX, 40, imageWidth, imageHeight, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_fingerprint, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 50, 498, 337+660, 65, R.string.main_card_finger_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 387, 498, 0, 0, 0, View.INVISIBLE); } @@ -2143,24 +2319,24 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_FACE_COMB_RFID) { if(mVerifyCombination == VERIFY_COMBINATION_OR) { - LayoutSetting(mLoginImage[CARD], CARD, 39, 40, 585, 402, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[FACE], FACE, 665, 40, 585, 402, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, image1PosX, 40, imageWidth, imageHeight, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, image2PosX, 40, imageWidth, imageHeight, R.drawable.main_img4, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 0, 0, 0, 0, 0, View.INVISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 40, 498, 1000, 65, R.string.main_face_rfid_text, View.VISIBLE); - //mCameraView.surfaceMove(665, 40, 585, 402); + //mCameraView.surfaceMove(image2PosX, 40, 585, 402); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); } else { //mCameraView.surfaceMove(348, 40, 585, 402); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); - LayoutSetting(mLoginImage[FACE], FACE, 348, 40, 585, 402, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, 348, 40, imageWidth, imageHeight, R.drawable.main_img4, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 288, 498, 1000, 65, R.string.main_face_and_rfid_text, View.VISIBLE); mTitleBackButton.setVisibility(View.VISIBLE); waitTimeHandler(MAIN_SELECT_FACE,GlobalInfo.mVerifyPopupTime * 1000); } } else { //mCameraView.surfaceMove(348, 40, 585, 402); - //LayoutSetting(mLoginImage[FACE], FACE, 348, 40, 585, 402, R.drawable.main_img4, View.VISIBLE); + //LayoutSetting(mLoginImage[FACE], FACE, 348, 40, imageWidth, imageHeight, R.drawable.main_img4, View.VISIBLE); //mCameraView.surfaceMove(152, 10, 896, 476); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); LayoutSetting(mLoginImage[FACE_BG], FACE_BG, 0, 0, 1280, 626, R.drawable.bg, View.INVISIBLE); @@ -2182,9 +2358,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if(mVerifyCombination == VERIFY_COMBINATION_OR) { //mCameraView.surfaceMove(450, 110, 380, 261); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); - LayoutSetting(mLoginImage[CARD], CARD, 40, 110, 380, 261, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[FACE], FACE, 450, 110, 380, 261, R.drawable.main_img4, View.VISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 860, 110, 380, 261, R.drawable.main_img2, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, 40, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, imageTriple2PosX, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, imageTriple3PosX, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_img2, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 40, 433, 1000, 65, R.string.main_vein_or_face_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 40, 498, 660, 65, R.string.main_vein_or_face_text2, View.VISIBLE); } @@ -2201,8 +2377,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul //mCameraView.surfaceMove(656, 30, 490, 337); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); LayoutSetting(mLoginImage[CARD], CARD, 0, 0, 0, 0, 0, View.INVISIBLE); - LayoutSetting(mLoginImage[VEIN], VEIN, 135, 30, 490, 337, R.drawable.main_img2, View.VISIBLE); - LayoutSetting(mLoginImage[FACE], FACE, 656, 30, 490, 337, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[VEIN], VEIN, imageFace1PosX, 30, imageWidthWithFace, imageHeightWithFace, R.drawable.main_img2, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, imageFace2PosX, 30, imageWidthWithFace, imageHeightWithFace, R.drawable.main_img4, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 263, 433, 800, 65, R.string.main_vein_and_face_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 394, 498, 660, 65, R.string.main_vein_and_face_text2, View.VISIBLE); } @@ -2220,9 +2396,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul //mCameraView.surfaceMove(450, 110, 380, 261); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); - LayoutSetting(mLoginImage[CARD], CARD, 40, 110, 380, 261, R.drawable.main_img1, View.VISIBLE); - LayoutSetting(mLoginImage[FACE], FACE, 450, 110, 380, 261, R.drawable.main_img4, View.VISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 860, 110, 380, 261, R.drawable.main_fingerprint, View.VISIBLE); + LayoutSetting(mLoginImage[CARD], CARD, 40, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_img1, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, imageTriple2PosX, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, imageTriple3PosX, 110, imageWidthTriple, imageHeightTriple, R.drawable.main_fingerprint, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 40, 433, 1000, 65, R.string.main_finger_or_face_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 40, 498, 660, 65, R.string.main_finger_or_face_text2, View.VISIBLE); } else { @@ -2238,8 +2414,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul //mCameraView.surfaceMove(656, 30, 490, 337); mCameraView.surfaceMove(160 + 10, 36 + 10, 960 - 20, 540 - 20); LayoutSetting(mLoginImage[CARD], CARD, 0, 0, 0, 0, 0, View.INVISIBLE); - LayoutSetting(mLoginImage[FINGER], FINGER, 135, 30, 490, 337, R.drawable.main_fingerprint, View.VISIBLE); - LayoutSetting(mLoginImage[FACE], FACE, 656, 30, 490, 337, R.drawable.main_img4, View.VISIBLE); + LayoutSetting(mLoginImage[FINGER], FINGER, imageFace1PosX, 30, imageWidthWithFace, imageHeightWithFace, R.drawable.main_fingerprint, View.VISIBLE); + LayoutSetting(mLoginImage[FACE], FACE, imageFace2PosX, 30, imageWidthWithFace, imageHeightWithFace, R.drawable.main_img4, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 346, 433, 800, 65, R.string.main_finger_and_face_text1, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 500, 498, 660, 65, R.string.main_finger_and_face_text2, View.VISIBLE); } @@ -2267,6 +2443,12 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 0, 385, 660, 65, 0, View.VISIBLE, " "); } + if(GlobalInfo.mUseAttendance == 1) { + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + mAttendanceButton.setVisibility(View.INVISIBLE); + } + waitTimeHandler(RESULT_SUCCESS,GlobalInfo.mVerifyPopupTime * 1000); break; @@ -2284,6 +2466,13 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul //LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 402, 385, 340, 65, R.string.main_verify_fail, View.VISIBLE); LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, 534, 385, 340, 65, R.string.main_verify_fail, View.VISIBLE); LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, 582, 498, 660, 65, R.string.main_card_text2, View.INVISIBLE); + + if(GlobalInfo.mUseAttendance == 1) { + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + mAttendanceButton.setVisibility(View.INVISIBLE); + } + waitTimeHandler(RESULT_FAIL,GlobalInfo.mVerifyPopupTime * 1000); break; } @@ -2308,6 +2497,33 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul mLoginImage[target].setImageResource(resId); mLoginImage[target].setVisibility(visible); +// mLoginImage[target].setScaleType(ImageView.ScaleType.FIT_XY); +// mLoginImage[target].post(() -> { +// Drawable drawable = mLoginImage[target].getDrawable(); +// if (drawable == null) return; +// +// float viewWidth = mLoginImage[target].getWidth(); +// float viewHeight = mLoginImage[target].getHeight(); +// +// float drawableWidth = drawable.getIntrinsicWidth(); +// float drawableHeight = drawable.getIntrinsicHeight(); +// +// // 높이 기준으로 스케일 결정 +// float scale = viewHeight / drawableHeight; +// +// // 스케일된 이미지의 너비 +// float scaledWidth = drawableWidth * scale; +// +// // 우측 정렬을 위한 이동 거리 (오른쪽을 잘라냄) +// float dx = 0; +// +// Matrix matrix = new Matrix(); +// matrix.setScale(scale, scale); +// matrix.postTranslate(dx, 0); +// +// mLoginImage[target].setImageMatrix(matrix); +// }); + } else if (object instanceof TextView) { mLoginText[target].setLayoutParams(new FrameLayout.LayoutParams(width, height)); mLoginText[target].setX(x); diff --git a/app/src/main/java/kr/co/enicom/acs/RfidManager.java b/app/src/main/java/kr/co/enicom/acs/RfidManager.java index d4156f2..84a3d72 100644 --- a/app/src/main/java/kr/co/enicom/acs/RfidManager.java +++ b/app/src/main/java/kr/co/enicom/acs/RfidManager.java @@ -35,6 +35,10 @@ public class RfidManager implements SerialInputOutputManager.Listener { private boolean withIoManager; private Context mContext = null; + private SerialManager mSerialManager = null; + private int acmHandle = -1; + private Thread mSerialThread = null; + //private Handler mainLooper; private BroadcastReceiver broadcastReceiver; @@ -67,7 +71,7 @@ public class RfidManager implements SerialInputOutputManager.Listener { public UserInfo scanUserForVerify(ArrayList userList, String rfidCode) { for(UserInfo user : userList) { - if(user.mRFIDCode.equals(rfidCode)) + if(user.mRFIDCode.equals(rfidCode) || user.mRFIDCode2.equals(rfidCode)) return user; } @@ -147,6 +151,73 @@ public class RfidManager implements SerialInputOutputManager.Listener { if(!succeed) { connect(); } + + if(mSerialManager == null) { + mSerialManager = new SerialManager(); + mSerialThread = new Thread() { + byte[] accData = new byte[128]; + int accFilled = 0; + @Override + public void run() { + byte[] tmpData = new byte[128]; + while(true) { + if(acmHandle >= 0) { + byte[] readData = new byte[128]; + int recvSize = mSerialManager.ReadSerial(acmHandle, readData, 128); + if(recvSize > 0) { + byte[] rfidId = new byte[recvSize]; + System.arraycopy(readData, 0, rfidId, 0, recvSize); + Log.d(RfidManager.class.getName(), String.format("Received from BLE Reader Module : %d bytes. [%s]", recvSize, byteArrayToHexString(rfidId))); + System.arraycopy(readData, 0, accData, accFilled, recvSize); + accFilled += recvSize; + } + + if(accFilled > 0) { + while (accData[0] != 0x02 && accFilled > 1) { + System.arraycopy(accData, 1, tmpData, 0, accFilled - 1); + System.arraycopy(tmpData, 0, accData, 0, accFilled - 1); + accFilled--; + } + + if(accFilled >= 9) { + if(accData[0] == 0x02 && accData[8] == 0x03) { // 모바일 신분증 데이터 형식 매칭 + byte[] rfidId = new byte[7]; + System.arraycopy(accData, 1, rfidId, 0, 7); + String rfidHex = byteArrayToHexString(rfidId); + + if(accFilled > 9) { + System.arraycopy(accData, 9, tmpData, 0, accFilled - 9); + System.arraycopy(tmpData, 0, accData, 0, accFilled - 9); + } + Log.d(RfidManager.class.getName(), String.format("BLE Reader Try [%s]", rfidHex)); + mNotifyTarget.onRfidResult("success", rfidHex); + + accFilled -= 9; + } else { + accFilled = 0; + } + } + } + } + + try { + sleep(50); + } catch (InterruptedException e) { + } + } + } + }; + mSerialThread.start(); + } + + if(acmHandle < 0) { + acmHandle = mSerialManager.OpenSerial("/dev/ttyACM0", 115200); + if(acmHandle < 0) { + Log.e(RfidManager.class.getName(), "Error to open BLE Reader Module[ttyACM0]!"); + } else { + Log.d(RfidManager.class.getName(), "Success to open BLE Reader Module[ttyACM0] :-)"); + } + } } @Override diff --git a/app/src/main/java/kr/co/enicom/acs/SerialManager.java b/app/src/main/java/kr/co/enicom/acs/SerialManager.java new file mode 100644 index 0000000..33708ac --- /dev/null +++ b/app/src/main/java/kr/co/enicom/acs/SerialManager.java @@ -0,0 +1,11 @@ +package kr.co.enicom.acs; + +public class SerialManager { + public SerialManager() { + System.loadLibrary("serialutil"); + } + public native int OpenSerial(String dev, int baudrate); + public native int ReadSerial(int devHandle, byte[] buffer, int maxlen); + public native int WriteSerial(int devHandle, byte[] buffer, int length); + public native int CloseSerial(int devHandle); +} diff --git a/app/src/main/java/kr/co/enicom/acs/UserInfo.java b/app/src/main/java/kr/co/enicom/acs/UserInfo.java index 6b10a17..2d2cb6b 100644 --- a/app/src/main/java/kr/co/enicom/acs/UserInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/UserInfo.java @@ -9,7 +9,9 @@ public class UserInfo { public int mAuthority; // 0 : Admin, 1 : User public String mPassword; public String mRFIDCode; + public String mRFIDCode2; public String mVeinTemplate; + public String mVeinTemplate2; public String mUserRegistDateTime; public String mRfidRegistDateTime; public String mVeinRegistDateTime; @@ -18,18 +20,24 @@ public class UserInfo { public boolean mCheck; public String mFingerTemplate; + public String mFingerTemplate2; public String mFingerRegistDateTime; public byte[] mFaceTemplate; public String mFaceRegistDateTime; + public String mPermitDate; + public String mPermitTime; + public UserInfo() { mID = ""; mName = ""; mAuthority = -1; mPassword = ""; mRFIDCode = ""; + mRFIDCode2 = ""; mVeinTemplate = ""; + mVeinTemplate2 = ""; mOprno = ""; mJohapnum = ""; mUserRegistDateTime = ""; @@ -38,10 +46,14 @@ public class UserInfo { mCheck = false; mFingerTemplate = ""; + mFingerTemplate2 = ""; mFingerRegistDateTime = ""; mFaceTemplate = "".getBytes(); mFaceRegistDateTime = ""; + + mPermitDate = ""; + mPermitTime = ""; } public void makeSafe() { @@ -53,8 +65,12 @@ public class UserInfo { mPassword = ""; if(mRFIDCode == null) mRFIDCode = ""; + if(mRFIDCode2 == null) + mRFIDCode2 = ""; if(mVeinTemplate == null) mVeinTemplate = ""; + if(mVeinTemplate2 == null) + mVeinTemplate2 = ""; if(mOprno == null) mOprno = ""; @@ -68,10 +84,17 @@ public class UserInfo { mVeinRegistDateTime = ""; if(mFingerTemplate == null) mFingerTemplate = ""; + if(mFingerTemplate2 == null) + mFingerTemplate2 = ""; if(mFingerRegistDateTime == null) mFingerRegistDateTime = ""; if(mFaceRegistDateTime == null) mFaceRegistDateTime = ""; + + if(mPermitDate == null) + mPermitDate = ""; + if(mPermitTime == null) + mPermitTime = ""; } public void copyMemberToInfo(UserInfo target) { @@ -83,7 +106,9 @@ public class UserInfo { target.mAuthority = mAuthority; target.mPassword = mPassword; target.mRFIDCode = mRFIDCode; + target.mRFIDCode2 = mRFIDCode2; target.mVeinTemplate = mVeinTemplate; + target.mVeinTemplate2 = mVeinTemplate2; target.mOprno = mOprno; target.mIndex = mIndex; target.mJohapnum = mJohapnum; @@ -92,7 +117,11 @@ public class UserInfo { target.mVeinRegistDateTime = mVeinRegistDateTime; target.mFingerTemplate = mFingerTemplate; + target.mFingerTemplate2 = mFingerTemplate2; target.mFaceTemplate = mFaceTemplate; + + target.mPermitDate = mPermitDate; + target.mPermitTime = mPermitTime; } public boolean valueExist(String value) { diff --git a/app/src/main/java/kr/co/enicom/acs/VeinManager.java b/app/src/main/java/kr/co/enicom/acs/VeinManager.java index 0b45de5..5bd62ff 100644 --- a/app/src/main/java/kr/co/enicom/acs/VeinManager.java +++ b/app/src/main/java/kr/co/enicom/acs/VeinManager.java @@ -248,6 +248,20 @@ public class VeinManager { } catch (Exception e) { } } + + if(user.mVeinTemplate2.length() > 0 && user.mVeinTemplate2.length() == ServerManager.VEIN_CODE_ENROLL_LENGTH) { + try { + boolean result = VeinManager.this.h1Client.verify(user.mVeinTemplate2, mVeinCode, SecurityLevel.MIDDLE); + if (result) { + Log.e("ENROLL", user.mVeinTemplate2); + Log.e("Vein", mVeinCode); + mResultInfo = user; + scanFinished = true; + return; + } + } catch (Exception e) { + } + } } scanFinished = true; @@ -268,6 +282,18 @@ public class VeinManager { } catch (Exception e) { } } + + if (user.mVeinTemplate2.length() > 0 && user.mVeinTemplate2.length() == ServerManager.VEIN_CODE_ENROLL_LENGTH) { + try { + boolean result = this.h1Client.verify(user.mVeinTemplate2, veinCode, SecurityLevel.MIDDLE); + if (result) { + Log.e("ENROLL", user.mVeinTemplate2); + Log.e("Vein", veinCode); + return user; + } + } catch (Exception e) { + } + } } } else { // 멀티스레드 SCAN int verifierCount = (userList.size() / GlobalInfo.VEIN_MULTI_SCAN_COUNT_BASE); diff --git a/app/src/main/java/kr/co/enicom/acs/manage/LogAdapter.java b/app/src/main/java/kr/co/enicom/acs/manage/LogAdapter.java index 3ed2d0d..5d765b8 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/LogAdapter.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/LogAdapter.java @@ -25,6 +25,7 @@ public class LogAdapter extends ArrayAdapter { ArrayList sample; ArrayList filteredItemList; LayoutInflater mLayoutInflater = null; + int mViewMode = 0; // 0 : 인증 이력, 1 : 근태 이력 public LogAdapter(Context context, ArrayList data) { super(context,0, data); @@ -35,6 +36,10 @@ public class LogAdapter extends ArrayAdapter { mLayoutInflater = LayoutInflater.from(mContext); } + public void setViewMode(int mode) { + mViewMode = mode; + } + @Override public int getCount() { //Log.w("RITO", "filteredItem getCount : " + filteredItemList.size()); @@ -71,7 +76,7 @@ public class LogAdapter extends ArrayAdapter { TextView userName = (TextView)convertView.findViewById(R.id.username); TextView logDate = (TextView)convertView.findViewById(R.id.logDate); TextView logTime = (TextView)convertView.findViewById(R.id.logTime); - //TextView logResult = (TextView)convertView.findViewById(R.id.logResult); + TextView logResult = (TextView)convertView.findViewById(R.id.logResult); ImageView imageMethodRfid = (ImageView) convertView.findViewById(R.id.imageMethodRfid); ImageView imageMethodVein = (ImageView) convertView.findViewById(R.id.imageMethodVein); // ImageView imageMethodFinger = (ImageView) convertView.findViewById(R.id.imageMethodFinger); @@ -95,10 +100,12 @@ public class LogAdapter extends ArrayAdapter { } else if (GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_VEIN_FACE)) { imageMethodFace.setVisibility(View.VISIBLE); imageMethodFace.setBackgroundResource(R.drawable.list_face_icon_nor); + logResult.setVisibility(View.GONE); } else if (GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_FINGER_FACE)) { imageMethodFace.setVisibility(View.VISIBLE); imageMethodFace.setBackgroundResource(R.drawable.list_face_icon_nor); imageMethodVein.setBackgroundResource(R.drawable.list_fprint_icon_nor); + logResult.setVisibility(View.GONE); } if(listViewItem.mId != null && listViewItem.mId.length() > 0) { @@ -121,14 +128,24 @@ public class LogAdapter extends ArrayAdapter { imageMethodFace.setBackgroundResource(R.drawable.list_face_icon_color); } - //logResult.setText("성공"); - //logResult.setTextColor(Color.parseColor("#1DAE17")); imageResult.setBackgroundResource(R.drawable.list_success_icon); + if(listViewItem.mAttendanceCode == GlobalInfo.ATTENDANCE_MODE_NONE) { + logResult.setText("성공"); + logResult.setTextColor(Color.parseColor("#1DAE17")); + } else if(listViewItem.mAttendanceCode == GlobalInfo.ATTENDANCE_MODE_IN) { + logResult.setText("출근"); + logResult.setTextColor(Color.parseColor("#117EF8")); + imageResult.setBackgroundResource(R.drawable.list_workin_icon_resized); + } else if(listViewItem.mAttendanceCode == GlobalInfo.ATTENDANCE_MODE_OUT) { + logResult.setText("퇴근"); + logResult.setTextColor(Color.parseColor("#1DAE17")); + } + } else { userId.setText(""); userName.setText(""); - //logResult.setText("실패"); - //logResult.setTextColor(Color.parseColor("#E42E2E")); + logResult.setText("실패"); + logResult.setTextColor(Color.parseColor("#E42E2E")); imageResult.setBackgroundResource(R.drawable.list_fail_icon); } listViewItem.mDate = listViewItem.mDate.replaceAll("-",""); diff --git a/app/src/main/java/kr/co/enicom/acs/manage/LogInfo.java b/app/src/main/java/kr/co/enicom/acs/manage/LogInfo.java index e9a563d..4d9acb3 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/LogInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/LogInfo.java @@ -23,6 +23,8 @@ public class LogInfo { // For Setting ADMIN Login public String mCaptureId; + public int mAttendanceCode; // 근태 정보. 0 : 적용없음, 1 : 출근, 2 : 퇴근 + public LogInfo() { mId = ""; mName = ""; @@ -30,6 +32,7 @@ public class LogInfo { mJohapnum = ""; mRfidCode = ""; mCaptureId = ""; + mAttendanceCode = 0; mMethod = GlobalInfo.VERIFY_METHOD_VEIN; mResultCode = GlobalInfo.VERIFY_RESULT_FAILED; } diff --git a/app/src/main/java/kr/co/enicom/acs/manage/MgtDataActivity.java b/app/src/main/java/kr/co/enicom/acs/manage/MgtDataActivity.java index 240fdba..526905a 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/MgtDataActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/MgtDataActivity.java @@ -98,6 +98,17 @@ public class MgtDataActivity extends BaseActivity { } }); + Button dataattendancebutton = (Button) findViewById(R.id.dataattendancebutton); + dataattendancebutton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + deleteDialog(7, POPMODE_ALL); + } + }); + + + + Button datafingerbutton = (Button) findViewById(R.id.datafingerbutton); datafingerbutton.setOnClickListener(new Button.OnClickListener() { @Override @@ -134,6 +145,12 @@ public class MgtDataActivity extends BaseActivity { } else if (GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_FINGER_FACE)) { dataveinlayout.setVisibility(View.GONE); } + + if(GlobalInfo.mUseAttendance == 1) { + findViewById(R.id.dataattendance).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.dataattendance).setVisibility(View.INVISIBLE); + } } @Override @@ -249,6 +266,8 @@ public class MgtDataActivity extends BaseActivity { mDeleteTarget = "finger"; } else if (menu == 6) { mDeleteTarget = "face"; + } else if (menu == 7) { + mDeleteTarget = "attendance"; } if (popupmode == POPMODE_ALL) { diff --git a/app/src/main/java/kr/co/enicom/acs/manage/MgtLogActivity.java b/app/src/main/java/kr/co/enicom/acs/manage/MgtLogActivity.java index 15a23e2..0ddf450 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/MgtLogActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/MgtLogActivity.java @@ -102,6 +102,17 @@ public class MgtLogActivity extends BaseActivity { } }); + Button logattendancebutton = (Button) findViewById(R.id.logattendancebutton); + logattendancebutton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + layoutChange(3); + logInfoSetting(); + } + }); + + + ImageView logdeleteimage = (ImageView) findViewById(R.id.logdeleteimage); logdeleteimage.setOnClickListener(new Button.OnClickListener() { @Override @@ -159,7 +170,11 @@ public class MgtLogActivity extends BaseActivity { } }); - + if(GlobalInfo.mUseAttendance == 1) { + findViewById(R.id.logattendance).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.logattendance).setVisibility(View.INVISIBLE); + } } String startbeforeText = ""; @@ -192,7 +207,12 @@ public class MgtLogActivity extends BaseActivity { mStartdate.setText(fromday); mEnddate.setText(today); - updateLogList(fromday, today); + //updateLogList(fromday, today); + if(mLayoutDeps == 2) { + updateLogListAttendance(fromday, today, false); + } else { + updateLogListAttendance(fromday, today, true); + } } private void updateLogList(String fromDate, String toDate) { @@ -202,6 +222,13 @@ public class MgtLogActivity extends BaseActivity { mLogAdapter.notifyDataSetChanged(); } + private void updateLogListAttendance(String fromDate, String toDate, boolean isAttendance) { + ArrayList infoList = GlobalInfo.queryLogDataAttendance(fromDate, toDate, isAttendance); + mLogAdapter.sample = infoList; + mLogAdapter.filteredItemList = infoList; + mLogAdapter.notifyDataSetChanged(); + } + @Override protected void onStart() { //checkVerify(); @@ -285,7 +312,7 @@ public class MgtLogActivity extends BaseActivity { FrameLayout sub3 = (FrameLayout) findViewById(R.id.frameLayoutsub3); sub3.setVisibility(View.INVISIBLE); } - else + else if(layout == 2) { LinearLayout sub1 = (LinearLayout) findViewById(R.id.frameLayoutsub1); sub1.setVisibility(View.INVISIBLE); @@ -298,6 +325,19 @@ public class MgtLogActivity extends BaseActivity { titleView.setText(R.string.mgt_log_authentication_text); } + else if(layout == 3) + { + LinearLayout sub1 = (LinearLayout) findViewById(R.id.frameLayoutsub1); + sub1.setVisibility(View.INVISIBLE); + + LinearLayout sub2 = (LinearLayout) findViewById(R.id.frameLayoutsub2); + sub2.setVisibility(View.INVISIBLE); + + FrameLayout sub3 = (FrameLayout) findViewById(R.id.frameLayoutsub3); + sub3.setVisibility(View.VISIBLE); + + titleView.setText(R.string.mgt_log_attendance_text); + } mLayoutDeps = layout; }catch(Exception e) @@ -512,7 +552,12 @@ public class MgtLogActivity extends BaseActivity { mEnddate.setText(String.format("%04d-%02d-%02d", numberpickeryear.getValue(), numberpickermonth.getValue(), numberpickerday.getValue())); } - updateLogList(mStartdate.getText().toString(), mEnddate.getText().toString()); + //updateLogList(mStartdate.getText().toString(), mEnddate.getText().toString()); + if(mLayoutDeps == 2) { + updateLogListAttendance(mStartdate.getText().toString(), mEnddate.getText().toString(), false); + } else { + updateLogListAttendance(mStartdate.getText().toString(), mEnddate.getText().toString(), true); + } }catch (Exception e) { diff --git a/app/src/main/java/kr/co/enicom/acs/manage/MgtSystemSettingsActivity.java b/app/src/main/java/kr/co/enicom/acs/manage/MgtSystemSettingsActivity.java index 64fb470..7833cc5 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/MgtSystemSettingsActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/MgtSystemSettingsActivity.java @@ -41,6 +41,7 @@ import kr.co.enicom.acs.GlobalInfo; import kr.co.enicom.acs.MainActivity; import kr.co.enicom.acs.R; import kr.co.enicom.acs.RfidManager; +import kr.co.enicom.acs.system.DoorControlTimeActivity; import kr.co.enicom.acs.system.LoginMenuActivity; import kr.co.enicom.acs.system.ServerSettingActivity; import kr.co.enicom.acs.system.SettingsActivity; @@ -236,6 +237,17 @@ public class MgtSystemSettingsActivity extends BaseActivity implements RfidManag }); + Button datadoorcontroltimebutton = (Button) findViewById(R.id.datadoorcontroltimebutton); + datadoorcontroltimebutton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MgtSystemSettingsActivity.this, DoorControlTimeActivity.class); + startActivity(intent); + overridePendingTransition(R.anim.fadein, R.anim.fadeout); + } + }); + + Button biometricsmenubutton = (Button) findViewById(R.id.biometricsmenubutton); biometricsmenubutton.setOnClickListener(new Button.OnClickListener() { @Override @@ -351,6 +363,30 @@ public class MgtSystemSettingsActivity extends BaseActivity implements RfidManag }); + + ImageView systemattendanceimage = (ImageView) findViewById(R.id.systemattendanceimage); + systemattendanceimage.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + if(GlobalInfo.mUseAttendance == 0) { + systemattendanceimage.setImageResource(R.drawable.toggle_pressed); + GlobalInfo.mUseAttendance = 1; + } + else { + GlobalInfo.mUseAttendance = 0; + systemattendanceimage.setImageResource(R.drawable.toggle_nor); + } + } + }); + + if(GlobalInfo.mUseAttendance == 0) { + systemattendanceimage.setImageResource(R.drawable.toggle_nor); + } else { + systemattendanceimage.setImageResource(R.drawable.toggle_pressed); + } + + + ImageView systemautorebootuseimage = (ImageView) findViewById(R.id.systemautorebootuseimage); systemautorebootuseimage.setOnClickListener(new Button.OnClickListener() { @Override diff --git a/app/src/main/java/kr/co/enicom/acs/manage/MgtUserInfoActivity.java b/app/src/main/java/kr/co/enicom/acs/manage/MgtUserInfoActivity.java index ea1e502..9f49d0f 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/MgtUserInfoActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/MgtUserInfoActivity.java @@ -24,13 +24,21 @@ import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.NumberPicker; import android.widget.RadioButton; import android.widget.TextView; import android.widget.Toast; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + import kr.co.enicom.acs.Base64Util; import kr.co.enicom.acs.BaseActivity; import kr.co.enicom.acs.BaseService; @@ -45,6 +53,7 @@ import kr.co.enicom.acs.system.LoginMenuActivity; import kr.co.enicom.acs.system.SettingsActivity; import kr.co.enicom.acs.UserInfo; import kr.co.enicom.acs.VeinManager; +import kr.co.enicom.acs.system.SystemUtil; import kr.co.rito.RitoUtil; public class MgtUserInfoActivity extends BaseActivity implements RfidManager.resultNotify, VeinManager.resultNotify, FingerManager.resultNotify, FaceManager.resultNotify { @@ -61,6 +70,10 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re private static int UPDATE_DATA_FINGER_CODE = (1 << 6); private static int UPDATE_DATA_FACE_CODE = (1 << 7); private Dialog mCognitionDialog = null; + private int mUpdateIndex = 0; // RFID1,2 또는 지정맥 1,2 지정 + + private int mBioDualMode = 0; + private int mRfidDualMode = 0; LinearLayout mLinearLayout= null; InputMethodManager mImm = null; @@ -115,27 +128,74 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re button.performClick(); } - TextView view = (TextView)findViewById(R.id.textViewRfidValue); - if(view != null && info.mRFIDCode != null) { - view.setText(info.mRFIDCode); + if(info.mRFIDCode.length() > 0 && info.mRFIDCode2.length() > 0) { + mRfidDualMode = 1; + TextView view = (TextView) findViewById(R.id.textViewRfid1Value); + if (view != null && info.mRFIDCode != null) { + view.setText(info.mRFIDCode); + } + view = (TextView) findViewById(R.id.textViewRfid2Value); + if (view != null && info.mRFIDCode2 != null) { + view.setText(info.mRFIDCode2); + } + } else { + TextView view = (TextView) findViewById(R.id.textViewRfidValue); + if (view != null && info.mRFIDCode != null) { + view.setText(info.mRFIDCode); + } } - view = (TextView)findViewById(R.id.textViewVeinValue); - if (view != null && info.mVeinTemplate != null) { - view.setText(info.mVeinTemplate); + if(info.mVeinTemplate.length() > 0 && info.mVeinTemplate2.length() > 0) { + mBioDualMode = 1; + TextView view = (TextView) findViewById(R.id.textViewVein1Value); + if (view != null && info.mVeinTemplate != null) { + view.setText(info.mVeinTemplate); + } + + view = (TextView) findViewById(R.id.textViewVein2Value); + if (view != null && info.mVeinTemplate2 != null) { + view.setText(info.mVeinTemplate2); + } + } else { + TextView view = (TextView) findViewById(R.id.textViewVeinValue); + if (view != null && info.mVeinTemplate != null) { + view.setText(info.mVeinTemplate); + } } + if(info.mFingerTemplate.length() > 0 && info.mFingerTemplate2.length() > 0) { + mBioDualMode = 1; + TextView view = (TextView) findViewById(R.id.textViewFinger1Value); + if (view != null && info.mFingerTemplate != null) { + view.setText(info.mFingerTemplate); + } - view = (TextView)findViewById(R.id.textViewFingerValue); - if (view != null && info.mFingerTemplate != null) { - view.setText(info.mFingerTemplate); + view = (TextView) findViewById(R.id.textViewFinger2Value); + if (view != null && info.mFingerTemplate2 != null) { + view.setText(info.mFingerTemplate2); + } + } else { + TextView view = (TextView) findViewById(R.id.textViewFingerValue); + if (view != null && info.mFingerTemplate != null) { + view.setText(info.mFingerTemplate); + } } - view = (TextView)findViewById(R.id.textViewFaceValue); + TextView view = (TextView)findViewById(R.id.textViewFaceValue); if (view != null && info.mFaceTemplate != null) { String faceTemplate = byteArrayToHexString(info.mFaceTemplate); view.setText(faceTemplate); } + + view = (TextView)findViewById(R.id.textViewPermitDateValue); + if (view != null && info.mPermitDate != null) { + view.setText(info.mPermitDate); + } + + view = (TextView)findViewById(R.id.textViewPermitTimeValue); + if (view != null && info.mPermitTime != null) { + view.setText(info.mPermitTime); + } } LinearLayout layoutVein = (LinearLayout)findViewById(R.id.layoutVein); @@ -157,46 +217,712 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re layoutFinger.setVisibility(View.GONE); } + updateMenuListVisibility(); + + + mDateText = findViewById(R.id.textViewPermitDateValue); + mTimeText = findViewById(R.id.textViewPermitTimeValue); + + + /* + RFID UI 처리 + */ Button button = (Button) findViewById(R.id.buttonSetRfid) ; button.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { // TODO : click event + mUpdateIndex = 0; + cognitionPopup(GlobalInfo.VERIFY_METHOD_RFID); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + button = (Button) findViewById(R.id.buttonSetRfid1) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 0; + cognitionPopup(GlobalInfo.VERIFY_METHOD_RFID); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + button = (Button) findViewById(R.id.buttonSetRfid2) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 1; cognitionPopup(GlobalInfo.VERIFY_METHOD_RFID); //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); } }); + ImageButton imgButton = (ImageButton) findViewById(R.id.buttonDeleteRfid1); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewRfid2Value); + TextView tv2 = findViewById(R.id.textViewRfidValue); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewRfid2Value); + tv1.setText(""); + + mRfidDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonDeleteRfid2); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewRfid1Value); + TextView tv2 = findViewById(R.id.textViewRfidValue); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewRfid2Value); + tv1.setText(""); + + mRfidDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonAddRfid); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewRfidValue); + TextView tv2 = findViewById(R.id.textViewRfid1Value); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewRfid2Value); + tv1.setText(""); + + mRfidDualMode = 1; + updateMenuListVisibility(); + } + }); + + + /* + 지정맥 UI 처리 + */ button = (Button) findViewById(R.id.buttonSetVein) ; button.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { // TODO : click event + mUpdateIndex = 0; cognitionPopup(GlobalInfo.VERIFY_METHOD_VEIN); } }); + button = (Button) findViewById(R.id.buttonSetVein1) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 0; + cognitionPopup(GlobalInfo.VERIFY_METHOD_VEIN); + } + }); + button = (Button) findViewById(R.id.buttonSetVein2) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 1; + cognitionPopup(GlobalInfo.VERIFY_METHOD_VEIN); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonDeleteVein1); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewVein2Value); + TextView tv2 = findViewById(R.id.textViewVeinValue); + tv2.setText(tv1.getText()); + tv1 = findViewById(R.id.textViewVein2Value); + tv1.setText(""); + + mBioDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonDeleteVein2); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewVein1Value); + TextView tv2 = findViewById(R.id.textViewVeinValue); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewVein2Value); + tv1.setText(""); + + mBioDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonAddVein); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewVeinValue); + TextView tv2 = findViewById(R.id.textViewVein1Value); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewVein2Value); + tv1.setText(""); + + mBioDualMode = 1; + updateMenuListVisibility(); + } + }); + + + /* + 지문 UI 처리 + */ button = (Button) findViewById(R.id.buttonSetFinger) ; button.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { // TODO : click event + mUpdateIndex = 0; cognitionPopup(GlobalInfo.VERIFY_METHOD_FINGER_PRINT); } }); - - button = (Button) findViewById(R.id.buttonSetFace) ; + button = (Button) findViewById(R.id.buttonSetFinger1) ; button.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { // TODO : click event + mUpdateIndex = 0; + cognitionPopup(GlobalInfo.VERIFY_METHOD_FINGER_PRINT); + } + }); + button = (Button) findViewById(R.id.buttonSetFinger2) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 1; + cognitionPopup(GlobalInfo.VERIFY_METHOD_FINGER_PRINT); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonDeleteFinger1); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewFinger2Value); + TextView tv2 = findViewById(R.id.textViewFingerValue); + tv2.setText(tv1.getText()); + + mBioDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonDeleteFinger2); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewFinger1Value); + TextView tv2 = findViewById(R.id.textViewFingerValue); + tv2.setText(tv1.getText()); + + mBioDualMode = 0; + updateMenuListVisibility(); + //showRegistVerifyTemplate(GlobalInfo.VERIFY_METHOD_RFID); + } + }); + imgButton = (ImageButton) findViewById(R.id.buttonAddFinger); + imgButton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + TextView tv1 = findViewById(R.id.textViewFingerValue); + TextView tv2 = findViewById(R.id.textViewFinger1Value); + tv2.setText(tv1.getText()); + + tv1 = findViewById(R.id.textViewFinger2Value); + tv1.setText(""); + + mBioDualMode = 1; + updateMenuListVisibility(); + } + }); + + + + button = (Button) findViewById(R.id.buttonSetFace); + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mUpdateIndex = 0; cognitionPopup(GlobalInfo.VERIFY_METHOD_FACE); } }); + + + button = (Button) findViewById(R.id.buttonSetPermitDate); + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + permitDateDialog(); + } + }); + + button = (Button) findViewById(R.id.buttonSetPermitTime); + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + numberPicker(1, null); + } + }); + } + + + private final int DATE_POPUP = 0; + private final int TIME_POPUP = 1; + private TextView mDateText = null, mTimeText = null; + private NumberPicker numberpickeryear = null, numberpickermonth = null, numberpickerday = null; + private NumberPicker numberpickertime = null, numberpickerminute = null, numberpickertime2 = null, numberpickerminute2 = null; + + private void setDividerColor(NumberPicker picker, int color){ + java.lang.reflect.Field[] pickerFields = NumberPicker.class.getDeclaredFields(); + for(java.lang.reflect.Field pf : pickerFields){ + if(pf.getName().equals("mSelectionDivider")){ + pf.setAccessible(true); + try{ + ColorDrawable colorDrawable = new ColorDrawable(color); + pf.set(picker, colorDrawable); + }catch(Exception e) + { + } + break; + } + } + } + + public void setSelectedTextColor(NumberPicker np) { + final int count = np.getChildCount(); + for(int i = 0; i < count; i++){ + View child = np.getChildAt(i); + if(child instanceof EditText){ + try{ + Field selectorWheelPaintField = np.getClass().getDeclaredField("mSelectorWheelPaint"); + selectorWheelPaintField.setAccessible(true); + ((EditText) child).setTextSize(42); + ((EditText) child).setTextColor(Color.parseColor("#333333")); + np.performClick(); + } + catch(NoSuchFieldException e){ + } + catch(IllegalArgumentException e){ + } + } + } + } + private void numberPicker(final int mode, final Dialog pdialog) + { + numberpickeryear = null; + numberpickermonth = null; + numberpickerday = null; + numberpickertime = null; + numberpickerminute = null; + numberpickertime2 = null; + numberpickerminute2 = null; + + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + if(mode == DATE_POPUP) + dialog.setContentView(R.layout.date_yyyymmdd_dialog); + else + dialog.setContentView(R.layout.date_hhmm_hhmm_dialog); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + Date currentTime = Calendar.getInstance().getTime(); + SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.getDefault()); + SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.getDefault()); + SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.getDefault()); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH", Locale.getDefault()); + SimpleDateFormat minuteFormat = new SimpleDateFormat("mm", Locale.getDefault()); + + String year = yearFormat.format(currentTime); + String month = monthFormat.format(currentTime); + String day = dayFormat.format(currentTime); + String time = timeFormat.format(currentTime); + String minute = minuteFormat.format(currentTime); + + Calendar maxday = Calendar.getInstance(); + maxday.set(Integer.valueOf(year),Integer.valueOf(month) -1,1); + + if(mode == DATE_POPUP) { + numberpickeryear = (NumberPicker) dialog.findViewById(R.id.numberpickeryear); + numberpickermonth = (NumberPicker) dialog.findViewById(R.id.numberpickermonth); + numberpickerday = (NumberPicker) dialog.findViewById(R.id.numberpickerday); + + numberpickeryear.setMinValue(Integer.valueOf(year) - 1); + numberpickeryear.setMaxValue(Integer.valueOf(year) + 50); + numberpickeryear.setValue(Integer.valueOf(year)); + numberpickeryear.setWrapSelectorWheel(false); + + numberpickermonth.setMinValue(1); + numberpickermonth.setMaxValue(12); + numberpickermonth.setValue(Integer.valueOf(month)); + numberpickermonth.setWrapSelectorWheel(false); + + numberpickerday.setMinValue(1); + numberpickerday.setMaxValue(maxday.getActualMaximum(Calendar.DAY_OF_MONTH)); + numberpickerday.setValue(Integer.valueOf(day)); + numberpickerday.setWrapSelectorWheel(false); + + + numberpickeryear.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickeryear, android.R.color.white); + setSelectedTextColor(numberpickeryear); + numberpickeryear.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickermonth.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickermonth, android.R.color.white); + setSelectedTextColor(numberpickermonth); + numberpickermonth.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickermonth.setOnScrollListener(new NumberPicker.OnScrollListener() { + @Override + public void onScrollStateChange(NumberPicker view, int scrollState) { + NumberPicker picker = view; + if (scrollState == SCROLL_STATE_IDLE) { + + Calendar maxday = Calendar.getInstance(); + maxday.set(Integer.valueOf(year), Integer.valueOf(picker.getValue()) - 1, 1); + + numberpickerday.setMinValue(1); + numberpickerday.setMaxValue(maxday.getActualMaximum(Calendar.DAY_OF_MONTH)); + numberpickerday.setValue(Integer.valueOf(day)); + numberpickerday.setWrapSelectorWheel(false); + numberpickerday.invalidate(); + } + } + }); + + numberpickerday.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerday, android.R.color.white); + setSelectedTextColor(numberpickerday); + numberpickerday.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + + }else { + numberpickertime = (NumberPicker) dialog.findViewById(R.id.numberpickerhour); + numberpickerminute = (NumberPicker) dialog.findViewById(R.id.numberpickerminute); + numberpickertime2 = (NumberPicker) dialog.findViewById(R.id.numberpickerhour2); + numberpickerminute2 = (NumberPicker) dialog.findViewById(R.id.numberpickerminute2); + + String[] hourValues = new String[24]; + String[] minuteValues = new String[60]; + for(int i = 0;i < 24;i++) { + hourValues[i] = String.format("%02d", i); + } + for(int i = 0;i < 60;i++) { + minuteValues[i] = String.format("%02d", i); + } + + numberpickertime.setMinValue(0); + numberpickertime.setMaxValue(23); + numberpickertime.setValue(9); + numberpickertime.setDisplayedValues(hourValues); + numberpickertime.setWrapSelectorWheel(false); + + numberpickerminute.setMinValue(0); + numberpickerminute.setMaxValue(59); + numberpickerminute.setValue(0); + numberpickerminute.setDisplayedValues(minuteValues); + numberpickerminute.setWrapSelectorWheel(false); + + + numberpickertime2.setMinValue(0); + numberpickertime2.setMaxValue(23); + numberpickertime2.setValue(18); + numberpickertime2.setDisplayedValues(hourValues); + numberpickertime2.setWrapSelectorWheel(false); + + numberpickerminute2.setMinValue(0); + numberpickerminute2.setMaxValue(59); + numberpickerminute2.setValue(0); + numberpickerminute2.setDisplayedValues(minuteValues); + numberpickerminute2.setWrapSelectorWheel(false); + + numberpickertime.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickertime, android.R.color.white); + setSelectedTextColor(numberpickertime); + + numberpickertime2.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickertime2, android.R.color.white); + setSelectedTextColor(numberpickertime2); + + numberpickertime.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickertime2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickerminute.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerminute, android.R.color.white); + setSelectedTextColor(numberpickerminute); + numberpickerminute.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + + numberpickerminute2.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerminute2, android.R.color.white); + setSelectedTextColor(numberpickerminute2); + numberpickerminute2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + } + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + try{ + if(mode == 0) { + TextView editstartdate = (TextView) pdialog.findViewById(R.id.editstartdate); + TextView editenddate = (TextView) pdialog.findViewById(R.id.editenddate); + + //mDateText.setText(String.format("%04d-%02d-%02d", numberpickeryear.getValue(), numberpickermonth.getValue(), numberpickerday.getValue())); + if(mPickerTarget.equals("s")) { + mStartDate = String.format("%04d-%02d-%02d", numberpickeryear.getValue(), numberpickermonth.getValue(), numberpickerday.getValue()); + editstartdate.setText(mStartDate); + } else if(mPickerTarget.equals("e")) { + mEndDate = String.format("%04d-%02d-%02d", numberpickeryear.getValue(), numberpickermonth.getValue(), numberpickerday.getValue()); + editenddate.setText(mEndDate); + } + + dialog.dismiss(); + } else { + if(numberpickertime.getValue() * 60 + numberpickerminute.getValue() >= numberpickertime2.getValue() * 60 + numberpickerminute2.getValue()) { + Toast.makeText(MgtUserInfoActivity.this, "종료시간이 더 커야 합니다.", Toast.LENGTH_SHORT).show(); + return; + } + mTimeText.setText(String.format("%02d:%02d ~ %02d:%02d", + numberpickertime.getValue(), numberpickerminute.getValue(), numberpickertime2.getValue(), numberpickerminute2.getValue())); + + dialog.dismiss(); + } + + }catch (Exception e) + { + e.printStackTrace(); + } + } + }); + + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + + } + + private String mStartDate = ""; + private String mEndDate = ""; + private String mPickerTarget = ""; + private void permitDateDialog() { + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.date_range_dialog); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + TextView editstartdate = (TextView) dialog.findViewById(R.id.editstartdate); + TextView editenddate = (TextView) dialog.findViewById(R.id.editenddate); + Button editstartdatebutton = (Button) dialog.findViewById(R.id.editstartdatebutton); + Button editenddatebutton = (Button) dialog.findViewById(R.id.editenddatebutton); + + editstartdatebutton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + //numberPicker(menu, 0, editstartdate.getText().toString()); + mPickerTarget = "s"; + numberPicker(0, dialog); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + + editenddatebutton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + //numberPicker(menu, 1, editenddate.getText().toString()); + mPickerTarget = "e"; + numberPicker(0, dialog); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + Date currentTime = Calendar.getInstance().getTime(); + + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.MONTH, -1); + + String startdate = dayFormat.format(cal.getTime()); + String enddate = dayFormat.format(currentTime); + editstartdate.setText(startdate); + editenddate.setText(enddate); + + if (mStartDate.length() > 0) + editstartdate.setText(mStartDate); + if (mEndDate.length() > 0) + editenddate.setText(mEndDate); + + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + buttonConfirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + mStartDate = editstartdate.getText().toString(); + mEndDate = editenddate.getText().toString(); + mDateText.setText(mStartDate + " ~ " + mEndDate); + } catch (Exception e) { + e.printStackTrace(); + } finally { + dialog.dismiss(); + } + } + }); + + buttonCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + + } catch (Exception e) { + e.printStackTrace(); + } finally { + dialog.dismiss(); + } + + } + }); + dialog.show(); + + } + + + private void updateMenuListVisibility() { + if(mRfidDualMode == 1) { + findViewById(R.id.layoutRfid).setVisibility(View.GONE); + findViewById(R.id.layoutRfid1).setVisibility(View.VISIBLE); + findViewById(R.id.layoutRfid2).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.layoutRfid).setVisibility(View.VISIBLE); + findViewById(R.id.layoutRfid1).setVisibility(View.GONE); + findViewById(R.id.layoutRfid2).setVisibility(View.GONE); + } + + if(GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_VEIN) || GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_VEIN_FACE)) { + findViewById(R.id.layoutFinger).setVisibility(View.GONE); + findViewById(R.id.layoutFinger1).setVisibility(View.GONE); + findViewById(R.id.layoutFinger2).setVisibility(View.GONE); + + if(mBioDualMode == 1) { + findViewById(R.id.layoutVein).setVisibility(View.GONE); + findViewById(R.id.layoutVein1).setVisibility(View.VISIBLE); + findViewById(R.id.layoutVein2).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.layoutVein).setVisibility(View.VISIBLE); + findViewById(R.id.layoutVein1).setVisibility(View.GONE); + findViewById(R.id.layoutVein2).setVisibility(View.GONE); + } + } + else if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_PRINT) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_FACE)) { + findViewById(R.id.layoutVein).setVisibility(View.GONE); + findViewById(R.id.layoutVein1).setVisibility(View.GONE); + findViewById(R.id.layoutVein2).setVisibility(View.GONE); + + if(mBioDualMode == 1) { + findViewById(R.id.layoutFinger).setVisibility(View.GONE); + findViewById(R.id.layoutFinger1).setVisibility(View.VISIBLE); + findViewById(R.id.layoutFinger2).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.layoutFinger).setVisibility(View.VISIBLE); + findViewById(R.id.layoutFinger1).setVisibility(View.GONE); + findViewById(R.id.layoutFinger2).setVisibility(View.GONE); + } + } + + findViewById(R.id.scrollView).postInvalidate(); + } + private void menuKeySetting() { mIsIntent = false; @@ -474,34 +1200,66 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re if(edit.getText().toString().length() > 0) info.mPassword = edit.getText().toString(); - TextView text = (TextView) findViewById(R.id.textViewRfidValue); - if(text.getText().toString().length() > 0) - info.mRFIDCode = text.getText().toString(); + if(mRfidDualMode == 1) { + TextView text = (TextView) findViewById(R.id.textViewRfid1Value); + if (text.getText().toString().length() > 0) + info.mRFIDCode = text.getText().toString(); - text = (TextView) findViewById(R.id.textViewVeinValue); - if(text.getText().toString().length() > 0) { - info.mVeinTemplate = text.getText().toString(); -// if(GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_VEIN) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN_FACE)) { -// info.mVeinTemplate = text.getText().toString(); -// } else if(GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_FINGER_PRINT) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_FACE)) { -// info.mFingerTemplate = text.getText().toString(); -// } + text = (TextView) findViewById(R.id.textViewRfid2Value); + if (text.getText().toString().length() > 0) + info.mRFIDCode2 = text.getText().toString(); + } else { + TextView text = (TextView) findViewById(R.id.textViewRfidValue); + if (text.getText().toString().length() > 0) + info.mRFIDCode = text.getText().toString(); } - text = (TextView) findViewById(R.id.textViewFingerValue); - if(text.getText().toString().length() > 0) { - info.mFingerTemplate = text.getText().toString(); -// if(GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_VEIN) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN_FACE)) { -// info.mVeinTemplate = text.getText().toString(); -// } else if(GlobalInfo.isActivatedMethod(GlobalInfo.VERIFY_METHOD_FINGER_PRINT) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_FACE)) { -// info.mFingerTemplate = text.getText().toString(); -// } + if(mBioDualMode == 1) { + TextView text = (TextView) findViewById(R.id.textViewVein1Value); + if (text.getText().toString().length() > 0) { + info.mVeinTemplate = text.getText().toString(); + } + + text = (TextView) findViewById(R.id.textViewVein2Value); + if (text.getText().toString().length() > 0) { + info.mVeinTemplate2 = text.getText().toString(); + } + } else { + TextView text = (TextView) findViewById(R.id.textViewVeinValue); + if (text.getText().toString().length() > 0) { + info.mVeinTemplate = text.getText().toString(); + } } - text = (TextView) findViewById(R.id.textViewFaceValue); + if(mBioDualMode == 1) { + TextView text = (TextView) findViewById(R.id.textViewFinger1Value); + if (text.getText().toString().length() > 0) { + info.mFingerTemplate = text.getText().toString(); + } + + text = (TextView) findViewById(R.id.textViewFinger2Value); + if (text.getText().toString().length() > 0) { + info.mFingerTemplate2 = text.getText().toString(); + } + } else { + TextView text = (TextView) findViewById(R.id.textViewFingerValue); + if (text.getText().toString().length() > 0) { + info.mFingerTemplate = text.getText().toString(); + } + } + + TextView text = (TextView) findViewById(R.id.textViewFaceValue); if(text.getText().toString().length() > 0) info.mFaceTemplate = FaceManager.hexToByteArray(text.getText().toString().trim()); + text = (TextView) findViewById(R.id.textViewPermitDateValue); + if(text.getText().toString().length() > 0) + info.mPermitDate = text.getText().toString().trim(); + + text = (TextView) findViewById(R.id.textViewPermitTimeValue); + if(text.getText().toString().length() > 0) + info.mPermitTime = text.getText().toString().trim(); + int authority = -1; RadioButton button = (RadioButton)findViewById(R.id.radioButtonAdmin); if(button.isChecked()) @@ -895,8 +1653,18 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re runOnUiThread(new Runnable() { @Override public void run() { - TextView text = (TextView) findViewById(R.id.textViewRfidValue); - text.setText(value); + if(mRfidDualMode == 1) { + if(mUpdateIndex == 0) { + TextView text = (TextView) findViewById(R.id.textViewRfid1Value); + text.setText(value); + } else { + TextView text = (TextView) findViewById(R.id.textViewRfid2Value); + text.setText(value); + } + } else { + TextView text = (TextView) findViewById(R.id.textViewRfidValue); + text.setText(value); + } } }); @@ -927,8 +1695,18 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re // } if(status.equals("enroll_success")) { - TextView text = (TextView) findViewById(R.id.textViewVeinValue); - text.setText(value); + if(mBioDualMode == 1) { + if(mUpdateIndex == 0) { + TextView text = (TextView) findViewById(R.id.textViewVein1Value); + text.setText(value); + } else { + TextView text = (TextView) findViewById(R.id.textViewVein2Value); + text.setText(value); + } + } else { + TextView text = (TextView) findViewById(R.id.textViewVeinValue); + text.setText(value); + } if(mCognitionDialog != null) { mCognitionDialog.dismiss(); @@ -982,10 +1760,18 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re runOnUiThread(new Runnable() { @Override public void run() { - TextView text = (TextView) findViewById(R.id.textViewFingerValue); - //TextView text = (TextView) findViewById(R.id.textViewVeinValue); - text.setText(fingerCode); - //text.setText("1234567890"); + if(mBioDualMode == 1) { + if(mUpdateIndex == 0) { + TextView text = (TextView) findViewById(R.id.textViewFinger1Value); + text.setText(value); + } else { + TextView text = (TextView) findViewById(R.id.textViewFinger2Value); + text.setText(value); + } + } else { + TextView text = (TextView) findViewById(R.id.textViewFingerValue); + text.setText(fingerCode); + } if(mCognitionDialog != null) { mCognitionDialog.dismiss(); diff --git a/app/src/main/java/kr/co/enicom/acs/system/DeviceSettingActivity.java b/app/src/main/java/kr/co/enicom/acs/system/DeviceSettingActivity.java index bb82c65..58294a4 100644 --- a/app/src/main/java/kr/co/enicom/acs/system/DeviceSettingActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/system/DeviceSettingActivity.java @@ -70,6 +70,16 @@ public class DeviceSettingActivity extends BaseActivity { } }); + Button deviceidreset = (Button) findViewById(R.id.deviceidreset); + deviceidreset.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + popupDialog(0); + } + }); + + + } private void menuKeySetting() @@ -106,6 +116,59 @@ public class DeviceSettingActivity extends BaseActivity { }); } + private void popupDialog(final int mode) + { + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + dialog.setContentView(R.layout.delete_dialog); + + TextView textview = (TextView) dialog.findViewById(R.id.dialogtext); + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + if (mode == 0) { + textview.setText(R.string.mgt_reset); + textview.setVisibility(View.VISIBLE); + buttonConfirm.setText(R.string.dialog_ok); + buttonConfirm.setTextColor(Color.parseColor("#00816D")); + } else if (mode == 1) { + textview.setText(R.string.mgt_save); + textview.setVisibility(View.VISIBLE); + buttonConfirm.setText(R.string.dialog_save); + buttonConfirm.setTextColor(Color.parseColor("#00816D")); + } + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + try { + if (mode == 0) { + mDeviceIdText.setText(""); + mDeviceNameText.setText(""); + + GlobalInfo.mDeviceId = ""; + GlobalInfo.mDeviceName = ""; + GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO); + } else if (mode == 1) { + + } + }catch (Exception e) + { + e.printStackTrace(); + }finally { + dialog.dismiss(); + } + } + }); + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + } private void systemPopup(final int mode) { diff --git a/app/src/main/java/kr/co/enicom/acs/system/DoorControlTimeActivity.java b/app/src/main/java/kr/co/enicom/acs/system/DoorControlTimeActivity.java new file mode 100644 index 0000000..27b58c0 --- /dev/null +++ b/app/src/main/java/kr/co/enicom/acs/system/DoorControlTimeActivity.java @@ -0,0 +1,441 @@ +package kr.co.enicom.acs.system; + +import android.app.Dialog; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.InputType; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.NumberPicker; +import android.widget.TextView; +import android.widget.Toast; + +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +import kr.co.enicom.acs.BaseActivity; +import kr.co.enicom.acs.GlobalInfo; +import kr.co.enicom.acs.MainActivity; +import kr.co.enicom.acs.R; +import kr.co.enicom.acs.manage.MgtSystemSettingsActivity; +import kr.co.enicom.acs.manage.MgtUserInfoActivity; + +public class DoorControlTimeActivity extends BaseActivity { + + private ImageView mMenuKey[] = null; + + private final int DEVICE_ID_POPUP = 0; + private final int DEVICE_NAME_POPUP = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_door_control_time); + + menuKeySetting(); + + mTimeText = findViewById(R.id.doorcontroltimesettext); + + ImageView doorcontroltimeuseimage = (ImageView) findViewById(R.id.doorcontroltimeuseimage); + doorcontroltimeuseimage.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + if(GlobalInfo.mUseDoorControlTime == 0) { + doorcontroltimeuseimage.setImageResource(R.drawable.toggle_pressed); + GlobalInfo.mUseDoorControlTime = 1; + } + else { + GlobalInfo.mUseDoorControlTime = 0; + doorcontroltimeuseimage.setImageResource(R.drawable.toggle_nor); + } + } + }); + + if(GlobalInfo.mUseDoorControlTime == 0) { + doorcontroltimeuseimage.setImageResource(R.drawable.toggle_nor); + } else { + doorcontroltimeuseimage.setImageResource(R.drawable.toggle_pressed); + } + + + Button button = (Button) findViewById(R.id.doorcontroltimesetimagebutton) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + numberPicker(1); + } + }); + + updateTimeTextFromGlobal(); + } + + private void menuKeySetting() + { + mMenuKey = new ImageView[2]; + mMenuKey[0] = (ImageView) findViewById(R.id.logincard_title_back) ; + mMenuKey[0].setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if(!mIsIntent) { + mIsIntent = true; + Intent intent = new Intent(getApplicationContext(), MgtSystemSettingsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + overridePendingTransition(R.anim.fadein, R.anim.fadeout); + } + return false; + } + }); + + mMenuKey[1] = (ImageView) findViewById(R.id.logincard_title_home) ; + mMenuKey[1].setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if(!mIsIntent) { + mIsIntent = true; + Intent intent = new Intent(getApplicationContext(), MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + overridePendingTransition(R.anim.fadein, R.anim.fadeout); + } + return false; + } + }); + } + + + + + private final int DATE_POPUP = 0; + private final int TIME_POPUP = 1; + private TextView mTimeText = null; + private NumberPicker numberpickeryear = null, numberpickermonth = null, numberpickerday = null; + private NumberPicker numberpickertime = null, numberpickerminute = null, numberpickertime2 = null, numberpickerminute2 = null; + + private void setDividerColor(NumberPicker picker, int color){ + java.lang.reflect.Field[] pickerFields = NumberPicker.class.getDeclaredFields(); + for(java.lang.reflect.Field pf : pickerFields){ + if(pf.getName().equals("mSelectionDivider")){ + pf.setAccessible(true); + try{ + ColorDrawable colorDrawable = new ColorDrawable(color); + pf.set(picker, colorDrawable); + }catch(Exception e) + { + } + break; + } + } + } + + public void setSelectedTextColor(NumberPicker np) { + final int count = np.getChildCount(); + for(int i = 0; i < count; i++){ + View child = np.getChildAt(i); + if(child instanceof EditText){ + try{ + Field selectorWheelPaintField = np.getClass().getDeclaredField("mSelectorWheelPaint"); + selectorWheelPaintField.setAccessible(true); + ((EditText) child).setTextSize(42); + ((EditText) child).setTextColor(Color.parseColor("#333333")); + np.performClick(); + } + catch(NoSuchFieldException e){ + } + catch(IllegalArgumentException e){ + } + } + } + } + private void numberPicker(final int mode) + { + numberpickeryear = null; + numberpickermonth = null; + numberpickerday = null; + numberpickertime = null; + numberpickerminute = null; + numberpickertime2 = null; + numberpickerminute2 = null; + + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + if(mode == DATE_POPUP) + dialog.setContentView(R.layout.date_yyyymmdd_dialog); + else + dialog.setContentView(R.layout.date_hhmm_hhmm_dialog); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + Date currentTime = Calendar.getInstance().getTime(); + SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.getDefault()); + SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.getDefault()); + SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.getDefault()); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH", Locale.getDefault()); + SimpleDateFormat minuteFormat = new SimpleDateFormat("mm", Locale.getDefault()); + + String year = yearFormat.format(currentTime); + String month = monthFormat.format(currentTime); + String day = dayFormat.format(currentTime); + String time = timeFormat.format(currentTime); + String minute = minuteFormat.format(currentTime); + + Calendar maxday = Calendar.getInstance(); + maxday.set(Integer.valueOf(year),Integer.valueOf(month) -1,1); + + if(mode == DATE_POPUP) { + numberpickeryear = (NumberPicker) dialog.findViewById(R.id.numberpickeryear); + numberpickermonth = (NumberPicker) dialog.findViewById(R.id.numberpickermonth); + numberpickerday = (NumberPicker) dialog.findViewById(R.id.numberpickerday); + + numberpickeryear.setMinValue(Integer.valueOf(year) - 1); + numberpickeryear.setMaxValue(Integer.valueOf(year) + 50); + numberpickeryear.setValue(Integer.valueOf(year)); + numberpickeryear.setWrapSelectorWheel(false); + + numberpickermonth.setMinValue(1); + numberpickermonth.setMaxValue(12); + numberpickermonth.setValue(Integer.valueOf(month)); + numberpickermonth.setWrapSelectorWheel(false); + + numberpickerday.setMinValue(1); + numberpickerday.setMaxValue(maxday.getActualMaximum(Calendar.DAY_OF_MONTH)); + numberpickerday.setValue(Integer.valueOf(day)); + numberpickerday.setWrapSelectorWheel(false); + + + numberpickeryear.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickeryear, android.R.color.white); + setSelectedTextColor(numberpickeryear); + numberpickeryear.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickermonth.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickermonth, android.R.color.white); + setSelectedTextColor(numberpickermonth); + numberpickermonth.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickermonth.setOnScrollListener(new NumberPicker.OnScrollListener() { + @Override + public void onScrollStateChange(NumberPicker view, int scrollState) { + NumberPicker picker = view; + if (scrollState == SCROLL_STATE_IDLE) { + + Calendar maxday = Calendar.getInstance(); + maxday.set(Integer.valueOf(year), Integer.valueOf(picker.getValue()) - 1, 1); + + numberpickerday.setMinValue(1); + numberpickerday.setMaxValue(maxday.getActualMaximum(Calendar.DAY_OF_MONTH)); + numberpickerday.setValue(Integer.valueOf(day)); + numberpickerday.setWrapSelectorWheel(false); + numberpickerday.invalidate(); + } + } + }); + + numberpickerday.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerday, android.R.color.white); + setSelectedTextColor(numberpickerday); + numberpickerday.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + + }else { + numberpickertime = (NumberPicker) dialog.findViewById(R.id.numberpickerhour); + numberpickerminute = (NumberPicker) dialog.findViewById(R.id.numberpickerminute); + numberpickertime2 = (NumberPicker) dialog.findViewById(R.id.numberpickerhour2); + numberpickerminute2 = (NumberPicker) dialog.findViewById(R.id.numberpickerminute2); + + String[] hourValues = new String[24]; + String[] minuteValues = new String[60]; + for(int i = 0;i < 24;i++) { + hourValues[i] = String.format("%02d", i); + } + for(int i = 0;i < 60;i++) { + minuteValues[i] = String.format("%02d", i); + } + + numberpickertime.setMinValue(0); + numberpickertime.setMaxValue(23); + //numberpickertime.setValue(Integer.valueOf(time)); + numberpickertime.setDisplayedValues(hourValues); + numberpickertime.setWrapSelectorWheel(false); + numberpickertime.setValue(GlobalInfo.mDoorControlTimeStart / 60); + + numberpickerminute.setMinValue(0); + numberpickerminute.setMaxValue(59); + //numberpickerminute.setValue(Integer.valueOf(minute)); + numberpickerminute.setDisplayedValues(minuteValues); + numberpickerminute.setWrapSelectorWheel(false); + numberpickerminute.setValue(GlobalInfo.mDoorControlTimeStart % 60); + + + numberpickertime2.setMinValue(0); + numberpickertime2.setMaxValue(23); + //numberpickertime2.setValue(Integer.valueOf(time)); + numberpickertime2.setDisplayedValues(hourValues); + numberpickertime2.setWrapSelectorWheel(false); + numberpickertime2.setValue(GlobalInfo.mDoorControlTimeEnd / 60); + + numberpickerminute2.setMinValue(0); + numberpickerminute2.setMaxValue(59); + //numberpickerminute2.setValue(Integer.valueOf(minute)); + numberpickerminute2.setDisplayedValues(minuteValues); + numberpickerminute2.setWrapSelectorWheel(false); + numberpickerminute2.setValue(GlobalInfo.mDoorControlTimeEnd % 60); + + numberpickertime.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickertime, android.R.color.white); + setSelectedTextColor(numberpickertime); + + numberpickertime2.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickertime2, android.R.color.white); + setSelectedTextColor(numberpickertime2); + + numberpickertime.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickertime2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + numberpickerminute.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerminute, android.R.color.white); + setSelectedTextColor(numberpickerminute); + numberpickerminute.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + + numberpickerminute2.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickerminute2, android.R.color.white); + setSelectedTextColor(numberpickerminute2); + numberpickerminute2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(picker); + } + }); + + } + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + try{ + if(mode == 0) { + dialog.dismiss(); + } else { + if(numberpickertime.getValue() * 60 + numberpickerminute.getValue() >= numberpickertime2.getValue() * 60 + numberpickerminute2.getValue()) { + Toast.makeText(DoorControlTimeActivity.this, "종료시간이 더 커야 합니다.", Toast.LENGTH_SHORT).show(); + return; + } + + GlobalInfo.mDoorControlTimeStart = numberpickertime.getValue() * 60 + numberpickerminute.getValue(); + GlobalInfo.mDoorControlTimeEnd = numberpickertime2.getValue() * 60 + numberpickerminute2.getValue(); + +// mTimeText.setText(String.format("%02d:%02d ~ %02d:%02d", +// numberpickertime.getValue(), numberpickerminute.getValue(), numberpickertime2.getValue(), numberpickerminute2.getValue())); + + updateTimeTextFromGlobal(); + dialog.dismiss(); + } + + }catch (Exception e) + { + e.printStackTrace(); + } + } + }); + + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + + } + + void updateTimeTextFromGlobal() { + mTimeText.setText(String.format("%02d:%02d ~ %02d:%02d", + GlobalInfo.mDoorControlTimeStart / 60, GlobalInfo.mDoorControlTimeStart % 60, GlobalInfo.mDoorControlTimeEnd / 60, GlobalInfo.mDoorControlTimeEnd % 60)); + } + + + + + + + + + + @Override + protected void onStart() { + //checkVerify(); + //refresh(); + View decorView = getWindow().getDecorView(); + // Hide the status bar. + int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE; + decorView.setSystemUiVisibility(uiOptions); + + super.onStart(); + } + + @Override + public void onPause() { + + GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO); + super.onPause(); + } + + + @Override + public void finish() { + super.finish(); + + Intent intent = new Intent(DoorControlTimeActivity.this, MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + //intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + startActivity(intent); + overridePendingTransition(R.anim.fadein, R.anim.fadeout); + } +} diff --git a/app/src/main/java/kr/co/enicom/acs/system/ServerSettingActivity.java b/app/src/main/java/kr/co/enicom/acs/system/ServerSettingActivity.java index 62d586e..f33a7c6 100644 --- a/app/src/main/java/kr/co/enicom/acs/system/ServerSettingActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/system/ServerSettingActivity.java @@ -155,6 +155,73 @@ public class ServerSettingActivity extends BaseActivity { doServerTest(GlobalInfo.mServerAddressSlave, GlobalInfo.mServerPortSlave); } }); + + + Button serverreset = (Button) findViewById(R.id.serverreset); + serverreset.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + popupDialog(0); + } + }); + } + + private void popupDialog(final int mode) + { + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + dialog.setContentView(R.layout.delete_dialog); + + TextView textview = (TextView) dialog.findViewById(R.id.dialogtext); + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + if (mode == 0) { + textview.setText(R.string.mgt_reset); + textview.setVisibility(View.VISIBLE); + buttonConfirm.setText(R.string.dialog_ok); + buttonConfirm.setTextColor(Color.parseColor("#00816D")); + } else if (mode == 1) { + textview.setText(R.string.mgt_save); + textview.setVisibility(View.VISIBLE); + buttonConfirm.setText(R.string.dialog_save); + buttonConfirm.setTextColor(Color.parseColor("#00816D")); + } + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + try { + if (mode == 0) { + mServer1IpText.setText(""); + mServer1PostText.setText(""); + mServer2IpText.setText(""); + mServer2PostText.setText(""); + + GlobalInfo.mServerAddress = ""; + GlobalInfo.mServerPort = 0; + GlobalInfo.mServerAddressSlave = ""; + GlobalInfo.mServerPortSlave = 0; + GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_SERVER_INFO); + } else if (mode == 1) { + + } + }catch (Exception e) + { + e.printStackTrace(); + }finally { + dialog.dismiss(); + } + } + }); + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); } private void menuKeySetting() diff --git a/app/src/main/jni/CMakeLists.txt b/app/src/main/jni/CMakeLists.txt index a564e02..c99910e 100644 --- a/app/src/main/jni/CMakeLists.txt +++ b/app/src/main/jni/CMakeLists.txt @@ -28,3 +28,9 @@ target_link_libraries(ritoutil ncnn lib_opencv ) + +add_library(serialutil SHARED serial_jni.cpp) + +target_include_directories(serialutil PRIVATE libyuv/include) + +target_link_libraries(serialutil) diff --git a/app/src/main/jni/ritoutil_jni.cpp b/app/src/main/jni/ritoutil_jni.cpp index 8bc32f4..8abeec2 100644 --- a/app/src/main/jni/ritoutil_jni.cpp +++ b/app/src/main/jni/ritoutil_jni.cpp @@ -2543,4 +2543,8 @@ Java_kr_co_enicom_acs_Camera2APIs_ARGBScaleEx( return ret; -} \ No newline at end of file +} + + + + diff --git a/app/src/main/res/drawable/add_btn_nor.png b/app/src/main/res/drawable/add_btn_nor.png new file mode 100644 index 0000000..01759d3 Binary files /dev/null and b/app/src/main/res/drawable/add_btn_nor.png differ diff --git a/app/src/main/res/drawable/add_btn_pressed.png b/app/src/main/res/drawable/add_btn_pressed.png new file mode 100644 index 0000000..aa7e47d Binary files /dev/null and b/app/src/main/res/drawable/add_btn_pressed.png differ diff --git a/app/src/main/res/drawable/del_btn_nor.png b/app/src/main/res/drawable/del_btn_nor.png new file mode 100644 index 0000000..32c180b Binary files /dev/null and b/app/src/main/res/drawable/del_btn_nor.png differ diff --git a/app/src/main/res/drawable/del_btn_pressed.png b/app/src/main/res/drawable/del_btn_pressed.png new file mode 100644 index 0000000..e4580f4 Binary files /dev/null and b/app/src/main/res/drawable/del_btn_pressed.png differ diff --git a/app/src/main/res/drawable/list_workin_icon.png b/app/src/main/res/drawable/list_workin_icon.png new file mode 100644 index 0000000..b7d6345 Binary files /dev/null and b/app/src/main/res/drawable/list_workin_icon.png differ diff --git a/app/src/main/res/drawable/list_workin_icon_resized.png b/app/src/main/res/drawable/list_workin_icon_resized.png new file mode 100644 index 0000000..0ba370b Binary files /dev/null and b/app/src/main/res/drawable/list_workin_icon_resized.png differ diff --git a/app/src/main/res/drawable/panel_shape_door_control.xml b/app/src/main/res/drawable/panel_shape_door_control.xml new file mode 100644 index 0000000..6476a6d --- /dev/null +++ b/app/src/main/res/drawable/panel_shape_door_control.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/workin_btn.xml b/app/src/main/res/drawable/workin_btn.xml new file mode 100644 index 0000000..7e7c34e --- /dev/null +++ b/app/src/main/res/drawable/workin_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/workin_btn_nor.png b/app/src/main/res/drawable/workin_btn_nor.png new file mode 100644 index 0000000..501547d Binary files /dev/null and b/app/src/main/res/drawable/workin_btn_nor.png differ diff --git a/app/src/main/res/drawable/workin_btn_pressed.png b/app/src/main/res/drawable/workin_btn_pressed.png new file mode 100644 index 0000000..e263d26 Binary files /dev/null and b/app/src/main/res/drawable/workin_btn_pressed.png differ diff --git a/app/src/main/res/drawable/workin_icon.png b/app/src/main/res/drawable/workin_icon.png new file mode 100644 index 0000000..f95ab37 Binary files /dev/null and b/app/src/main/res/drawable/workin_icon.png differ diff --git a/app/src/main/res/drawable/workout_btn.xml b/app/src/main/res/drawable/workout_btn.xml new file mode 100644 index 0000000..f7c9e5e --- /dev/null +++ b/app/src/main/res/drawable/workout_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/workout_icon.png b/app/src/main/res/drawable/workout_icon.png new file mode 100644 index 0000000..1555480 Binary files /dev/null and b/app/src/main/res/drawable/workout_icon.png differ diff --git a/app/src/main/res/drawable/worout_btn_nor.png b/app/src/main/res/drawable/worout_btn_nor.png new file mode 100644 index 0000000..35db172 Binary files /dev/null and b/app/src/main/res/drawable/worout_btn_nor.png differ diff --git a/app/src/main/res/drawable/worout_btn_pressed.png b/app/src/main/res/drawable/worout_btn_pressed.png new file mode 100644 index 0000000..7fdbbe5 Binary files /dev/null and b/app/src/main/res/drawable/worout_btn_pressed.png differ diff --git a/app/src/main/res/font/pretendardsemibold.ttf b/app/src/main/res/font/pretendardsemibold.ttf new file mode 100644 index 0000000..0852372 Binary files /dev/null and b/app/src/main/res/font/pretendardsemibold.ttf differ diff --git a/app/src/main/res/layout/activity_device_setting.xml b/app/src/main/res/layout/activity_device_setting.xml index 3d538a1..9db8f46 100644 --- a/app/src/main/res/layout/activity_device_setting.xml +++ b/app/src/main/res/layout/activity_device_setting.xml @@ -144,6 +144,41 @@ + + + + + + + + +