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 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_door_control_time.xml b/app/src/main/res/layout/activity_door_control_time.xml
new file mode 100644
index 0000000..556ed5d
--- /dev/null
+++ b/app/src/main/res/layout/activity_door_control_time.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 24b12de..bd62687 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -74,6 +74,8 @@
android:visibility="invisible" />
+
+
+
+
+
+
+
+
+
+ android:visibility="invisible" />
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
+
-
+
+
+
+
+
+ android:layout_height="94px"
+ android:background="@drawable/layout_border">
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="94px"
+ android:background="@drawable/layout_border">
-
-
-
-
-
+
-
+
-
+
+
+
+
+
+ android:layout_height="94px"
+ android:background="@drawable/layout_border">
-
+
+
+
-
-
+
-
+
+
+
-
-
-