From 1d1d7912a218ca8b14c38d73a4118b0b3afbd75d Mon Sep 17 00:00:00 2001 From: ritoseo Date: Sun, 7 Sep 2025 23:16:54 +0900 Subject: [PATCH] =?UTF-8?q?v2.0.7=20=EB=B2=84=EC=A0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9E=90=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=88=98=EC=A0=95=20=EA=B0=9C=EB=B0=A9=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EC=84=A4=EC=A0=95=20=EB=B0=94=EB=A1=9C=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20BLE?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=8C=8C=EC=8B=B1=20ASCII=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +- app/src/main/AndroidManifest.xml | 1 + .../java/kr/co/enicom/acs/BaseService.java | 25 +- .../java/kr/co/enicom/acs/GlobalInfo.java | 44 +- .../java/kr/co/enicom/acs/MainActivity.java | 143 ++++-- .../java/kr/co/enicom/acs/RfidManager.java | 8 +- .../java/kr/co/enicom/acs/ServerManager.java | 6 +- .../acs/manage/MgtAccessControlActivity.java | 7 +- .../acs/manage/MgtSystemSettingsActivity.java | 58 ++- .../acs/manage/MgtUserInfoActivity.java | 63 ++- .../acs/system/AttendanceSettingActivity.java | 438 ++++++++++++++++++ .../enicom/acs/system/LoginMenuActivity.java | 60 ++- .../layout/activity_attendance_setting.xml | 281 +++++++++++ .../main/res/layout/mgt_systemsettings.xml | 66 ++- app/src/main/res/values/strings.xml | 9 + 15 files changed, 1120 insertions(+), 100 deletions(-) create mode 100644 app/src/main/java/kr/co/enicom/acs/system/AttendanceSettingActivity.java create mode 100644 app/src/main/res/layout/activity_attendance_setting.xml diff --git a/app/build.gradle b/app/build.gradle index 4ad6cc6..311254a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "kr.co.enicom.acs" minSdkVersion 26 targetSdkVersion 30 - versionCode 204 - versionName "2.0.4" + versionCode 207 + versionName "2.0.7" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk.abiFilters 'armeabi-v7a' } @@ -38,6 +38,13 @@ android { } } + android.applicationVariants.all { variant -> + variant.outputs.all { + def date = new Date().format("yyMMdd") + outputFileName = "ACS-v${defaultConfig.versionName}-${date}.apk" + } + } + externalNativeBuild { cmake { version "3.10.2" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2a0f5d5..431761c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,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 417ce9d..7e8c883 100644 --- a/app/src/main/java/kr/co/enicom/acs/BaseService.java +++ b/app/src/main/java/kr/co/enicom/acs/BaseService.java @@ -304,17 +304,24 @@ public class BaseService extends Service { } } - if(MainActivity.INSTANCE != null) { + //if(MainActivity.INSTANCE != null) { + { if (GlobalInfo.mUseDoorControlTime == 1) { if (GlobalInfo.checkIsDoorControlOpenTime()) { + long curTime = SystemClock.uptimeMillis(); if (GlobalInfo.mDoorControlTimeStatus != 1) { //mDoorManager.controlDoor(true, -1); mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + GlobalInfo.mDoorControlSentLastTime = curTime; if (MainActivity.INSTANCE != null) { MainActivity.INSTANCE.turnToBaseUI(); } } GlobalInfo.mDoorControlTimeStatus = 1; + if(curTime - GlobalInfo.mDoorControlSentLastTime >= 5 * 60 * 1000) { // 5분 주기 OPENLOCK + mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_OPEN_LOCK); + GlobalInfo.mDoorControlSentLastTime = curTime; + } } else { if (GlobalInfo.mDoorControlTimeStatus != 0) { //mDoorManager.controlDoor(false, 0); @@ -533,6 +540,22 @@ public class BaseService extends Service { if(mGpioManager == null) { mGpioManager = new GpioManager(); + + // Initialize GPIO Status + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_RED, GpioManager.PIN_MODE_WRITE); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_GREEN, GpioManager.PIN_MODE_WRITE); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_BLUE, GpioManager.PIN_MODE_WRITE); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_RELAY_1, GpioManager.PIN_MODE_WRITE); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_RELAY_2, GpioManager.PIN_MODE_WRITE); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_CASE_CHECK, GpioManager.PIN_MODE_READ); + BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_UART_RTS, GpioManager.PIN_MODE_WRITE); + + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_RED, 0); + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_GREEN, 0); + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_BLUE, 1); + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_RELAY_1, 0); + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_RELAY_2, 0); + BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_UART_RTS, 0); } if(mDCUManager == 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 b85e08e..bfde7ab 100644 --- a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java @@ -270,12 +270,45 @@ public class GlobalInfo { public static int mUseDoorControlTime = 1; // 개방시간 사용 여부 public static int mDoorControlTimeStatus = -1; // 개방시간 문 상태 보존. -1 : 미제어, 0 : 닫음, 1 : 열림 + public static long mDoorControlSentLastTime = 0; // 개방시간 문 오픈 명령 보낸 최종 시간 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(); + + public static int getCurrentMinutesInDay() { + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int currentMinutes = hour * 60 + minute; + + return currentMinutes; + } + + public static boolean checkIsNowAttendanceStartTime() { + int currentMinutes = getCurrentMinutesInDay(); + if(currentMinutes <= mAttendanceStartTime) { + if(mAttendanceStartTime - currentMinutes <= mAttendanceAutoTimeMinute) { + return true; + } + } + + return false; + } + + public static boolean checkIsNowAttendanceEndTime() { + int currentMinutes = getCurrentMinutesInDay(); + if(currentMinutes >= mAttendanceEndTime) { + if(currentMinutes - mAttendanceEndTime <= mAttendanceAutoTimeMinute) { + return true; + } + } + + return false; + } + private static void updateTable(SQLiteDatabase database) { boolean isPrevVersion = false; String sql = "select address, port, address_slave, port_slave from serverinfo where idx = 0"; @@ -509,10 +542,11 @@ public class GlobalInfo { "%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, + 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, @@ -523,6 +557,7 @@ public class GlobalInfo { database.execSQL(sql); } catch (Exception e) { + e.printStackTrace(); } if(!columnExists(database, "settings", "dcu_watchdog_timeout")) { @@ -2420,10 +2455,7 @@ public class GlobalInfo { 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; + int currentMinutes = getCurrentMinutesInDay(); if(currentMinutes >= mDoorControlTimeStart && currentMinutes <= mDoorControlTimeEnd) return true; 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 c33d413..a338430 100644 --- a/app/src/main/java/kr/co/enicom/acs/MainActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/MainActivity.java @@ -9,8 +9,6 @@ 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; @@ -26,9 +24,7 @@ import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.Log; -import android.view.SurfaceView; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.Button; @@ -43,7 +39,6 @@ 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; @@ -51,7 +46,6 @@ import java.util.TimerTask; import kr.co.enicom.acs.manage.LogInfo; import kr.co.enicom.acs.system.LoginMenuActivity; import kr.co.enicom.acs.system.SystemUtil; -import kr.co.rito.RitoUtil; import kr.co.rito.miscmanager.GpioManager; import kr.co.rito.usbserial.driver.CustomProber; import kr.co.rito.usbserial.driver.UsbSerialDriver; @@ -67,8 +61,6 @@ import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_RFID; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_VEIN; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_VEIN_COMB_RFID; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_VEIN_FACE; -import static kr.co.enicom.acs.GlobalInfo.isVerifyMethodAllAnd; -import static kr.co.enicom.acs.GlobalInfo.mVerifyActivateMethod; import static kr.co.enicom.acs.GlobalInfo.mVerifyCombination; import static kr.co.enicom.acs.GlobalInfo.mVerifyMethod; @@ -108,6 +100,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul private boolean mBtnRelay2 = false; private boolean mIsOnRfidVerifyingProcess = false; // RFID 인증 정보 수신 후 처리 진행 중인 지. 중복 처리 방지용 + private boolean mIsMainUiThreadAlive = false; private int mConsecutiveVeinFailCount = 0; private MainUiHandler mMainUiHandler = null; @@ -1109,21 +1102,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul GlobalInfo.mDeviceStatusNormal = true; - // Initialize GPIO Status - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_RED, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_GREEN, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_LED_BLUE, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_RELAY_1, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_RELAY_2, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_CASE_CHECK, GpioManager.PIN_MODE_READ); - BaseService.gpioPinRegister(GlobalInfo.GPIO_PIN_UART_RTS, GpioManager.PIN_MODE_WRITE); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_RED, 0); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_GREEN, 0); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_LED_BLUE, 1); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_RELAY_1, 0); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_RELAY_2, 0); - BaseService.gpioPinWrite(GlobalInfo.GPIO_PIN_UART_RTS, 0); GlobalInfo.initInfo(); GlobalInfo.reloadUserListWithProgress(this); @@ -1365,9 +1344,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul 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); + setAttendanceButtonMode(GlobalInfo.ATTENDANCE_MODE_IN); } }); @@ -1382,9 +1359,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul 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); + setAttendanceButtonMode(GlobalInfo.ATTENDANCE_MODE_OUT); } }); @@ -1395,6 +1370,10 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul @Override public void onClick(View view) { + if(GlobalInfo.mUseAttendanceAutoMode == 1) { + return; + } + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; mWorkinButton.setVisibility(View.VISIBLE); mWorkoutButton.setVisibility(View.VISIBLE); @@ -1417,6 +1396,25 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul */ } + private void setAttendanceButtonMode(int attandanceMode) { + runOnUiThread(new Runnable() { + @Override + public void run() { + if(attandanceMode == GlobalInfo.ATTENDANCE_MODE_IN) { + mAttendanceButton.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.workin_icon_76, 0, 0); + mAttendanceButton.setText(R.string.main_attendance_mode_in); + mAttendanceButton.setVisibility(View.VISIBLE); + } else if(attandanceMode == GlobalInfo.ATTENDANCE_MODE_OUT) { + mAttendanceButton.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.workout_icon_76, 0, 0); + mAttendanceButton.setText(R.string.main_attendance_mode_out); + mAttendanceButton.setVisibility(View.VISIBLE); + } else { + mAttendanceButton.setVisibility(View.INVISIBLE); + } + } + }); + } + @TargetApi(Build.VERSION_CODES.M) public void checkVerify() { @@ -1685,9 +1683,11 @@ 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(GlobalInfo.mUseAttendanceAutoMode == 0) { + mWorkinButton.setVisibility(View.VISIBLE); + mWorkoutButton.setVisibility(View.VISIBLE); + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + } } /*if(mVeinManager == null) { @@ -1815,6 +1815,40 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul } }.start(); + + new Thread() { + @Override + public void run() { + int prevAttandanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + + mIsMainUiThreadAlive = true; + while(mIsMainUiThreadAlive) { + if(GlobalInfo.mUseAttendance == 1) { + if(GlobalInfo.mUseAttendanceAutoMode == 1) { + if(GlobalInfo.checkIsNowAttendanceStartTime()) { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_IN; + } else if(GlobalInfo.checkIsNowAttendanceEndTime()) { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_OUT; + } else { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + } + + if(prevAttandanceMode != GlobalInfo.mAttendanceMode) { + prevAttandanceMode = GlobalInfo.mAttendanceMode; + turnToBaseUI(); + } + } + } + + + try { + sleep(100); + } catch (InterruptedException e) { + } + } + } + }.start(); + /*if(mServerManager == null) { Log.i(TAG, "Create NEW ServerManager"); mServerManager = new ServerManager(); @@ -2039,7 +2073,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul } } - GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + if(GlobalInfo.mUseAttendanceAutoMode == 0) { + GlobalInfo.mAttendanceMode = GlobalInfo.ATTENDANCE_MODE_NONE; + } if(logResult.mId.length() > 0) { //Toast.makeText(this,"인증 성공 [" + logResult.mName + "]", Toast.LENGTH_SHORT).show(); @@ -2176,19 +2212,37 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul int imageTriple3PosX = 860; if(GlobalInfo.mUseAttendance == 1) { - imageWidth *= 0.738; - imageWidthTriple *= 0.738; - imageWidthWithFace *= 0.738; + boolean isNeedResizePos = false; - image1PosX = 39; - image2PosX = 500; - imageFace1PosX = 70; - imageFace2PosX = 500; - imageTriple2PosX = 350; - imageTriple3PosX = 660; + if(GlobalInfo.mUseAttendanceAutoMode == 0) { + isNeedResizePos = true; - mWorkinButton.setVisibility(View.VISIBLE); - mWorkoutButton.setVisibility(View.VISIBLE); + mWorkinButton.setVisibility(View.VISIBLE); + mWorkoutButton.setVisibility(View.VISIBLE); + } else { + boolean isOnStartTime = GlobalInfo.checkIsNowAttendanceStartTime(); + boolean isOnEndTime = GlobalInfo.checkIsNowAttendanceEndTime(); + if(isOnStartTime || isOnEndTime) { + isNeedResizePos = true; + + mWorkinButton.setVisibility(View.INVISIBLE); + mWorkoutButton.setVisibility(View.INVISIBLE); + } + setAttendanceButtonMode(GlobalInfo.mAttendanceMode); + } + + if(isNeedResizePos) { + imageWidth *= 0.738; + imageWidthTriple *= 0.738; + imageWidthWithFace *= 0.738; + + image1PosX = 39; + image2PosX = 500; + imageFace1PosX = 70; + imageFace2PosX = 500; + imageTriple2PosX = 350; + imageTriple3PosX = 660; + } } super.handleMessage(msg); @@ -2717,12 +2771,15 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul @Override protected void onPause() { INSTANCE = null; + mIsMainUiThreadAlive = false; if(mPopupManager != null) { mPopupManager.terminate(); mPopupManager = null; } + + super.onPause(); } 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 5419782..42a929b 100644 --- a/app/src/main/java/kr/co/enicom/acs/RfidManager.java +++ b/app/src/main/java/kr/co/enicom/acs/RfidManager.java @@ -13,6 +13,7 @@ import android.util.Log; import com.hitachi.fv.android.h1client.SecurityLevel; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.Executors; @@ -185,13 +186,16 @@ public class RfidManager implements SerialInputOutputManager.Listener { byte[] rfidId = new byte[GlobalInfo.BLE_RFID_CODE_LENGTH]; System.arraycopy(accData, 1, rfidId, 0, GlobalInfo.BLE_RFID_CODE_LENGTH); String rfidHex = byteArrayToHexString(rfidId); + String rfidStr = new String(rfidId, StandardCharsets.UTF_8); if(accFilled > PACKET_LENGTH) { System.arraycopy(accData, PACKET_LENGTH, tmpData, 0, accFilled - PACKET_LENGTH); System.arraycopy(tmpData, 0, accData, 0, accFilled - PACKET_LENGTH); } - Log.d(RfidManager.class.getName(), String.format("BLE Reader Try [%s]", rfidHex)); - mNotifyTarget.onRfidResult("success", rfidHex); +// Log.d(RfidManager.class.getName(), String.format("BLE Reader Try [%s]", rfidHex)); +// mNotifyTarget.onRfidResult("success", rfidHex); + Log.d(RfidManager.class.getName(), String.format("BLE Reader Try [%s]", rfidStr)); + mNotifyTarget.onRfidResult("success", rfidStr); accFilled -= PACKET_LENGTH; } else { diff --git a/app/src/main/java/kr/co/enicom/acs/ServerManager.java b/app/src/main/java/kr/co/enicom/acs/ServerManager.java index 19e0296..235f936 100644 --- a/app/src/main/java/kr/co/enicom/acs/ServerManager.java +++ b/app/src/main/java/kr/co/enicom/acs/ServerManager.java @@ -2302,21 +2302,21 @@ public class ServerManager extends Thread { _verifyString += "0"; // 얼굴은 전송 안함 - if (info.mFingerTemplate.length() > 0) { + if (info.mFingerTemplate2.length() > 0) { _verifyString += "1"; reg_cnt++; } else { _verifyString += "0"; } - if (info.mVeinTemplate.length() > 0) { + if (info.mVeinTemplate2.length() > 0) { _verifyString += "1"; reg_cnt++; } else { _verifyString += "0"; } - if (info.mRFIDCode.length() > 0) { + if (info.mRFIDCode2.length() > 0) { _verifyString += "1"; reg_cnt++; } else { diff --git a/app/src/main/java/kr/co/enicom/acs/manage/MgtAccessControlActivity.java b/app/src/main/java/kr/co/enicom/acs/manage/MgtAccessControlActivity.java index 0a180e3..6bf9308 100644 --- a/app/src/main/java/kr/co/enicom/acs/manage/MgtAccessControlActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/manage/MgtAccessControlActivity.java @@ -109,7 +109,7 @@ public class MgtAccessControlActivity extends BaseActivity { mAccessauthenticationMeansList[3] = getString(R.string.mgt_access_authentication_means_rfid_and_vein_or_face_text); } else if (GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_FACE)) { mAccessauthenticationMeansList[0] = getString(R.string.mgt_access_authentication_means_rfid_text); - mAccessauthenticationMeansList[1] = getString(R.string.mgt_access_authentication_means_face_text); + mAccessauthenticationMeansList[1] = getString(R.string.mgt_access_authentication_means_finger_text); mAccessauthenticationMeansList[2] = getString(R.string.mgt_access_authentication_means_rfid_or_finger_or_face_text); mAccessauthenticationMeansList[3] = getString(R.string.mgt_access_authentication_means_rfid_and_finger_or_face_text); } @@ -551,6 +551,11 @@ public class MgtAccessControlActivity extends BaseActivity { GlobalInfo.mVerifyMethod = VERIFY_METHOD_RFID; } else if (1 == np.getValue()) { GlobalInfo.mVerifyMethod = GlobalInfo.mVerifyActivateMethod; + if(GlobalInfo.mVerifyActivateMethod == VERIFY_METHOD_VEIN_FACE) { + GlobalInfo.mVerifyMethod = VERIFY_METHOD_VEIN; + } else if(GlobalInfo.mVerifyActivateMethod == VERIFY_METHOD_FINGER_FACE) { + GlobalInfo.mVerifyMethod = VERIFY_METHOD_FINGER_PRINT; + } } else { GlobalInfo.mVerifyMethod = (GlobalInfo.mVerifyActivateMethod | VERIFY_METHOD_RFID); 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 7833cc5..14d740b 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.AttendanceSettingActivity; import kr.co.enicom.acs.system.DoorControlTimeActivity; import kr.co.enicom.acs.system.LoginMenuActivity; import kr.co.enicom.acs.system.ServerSettingActivity; @@ -79,7 +80,7 @@ public class MgtSystemSettingsActivity extends BaseActivity implements RfidManag private TextView mSystemAutoRebootPeriodText = null, mSystemAutoRebootHourText = null; private String[] mBiometricsValuesList= null; - ConstraintLayout mConstraintLayout= null; + //ConstraintLayout mConstraintLayout= null; private ImageView mAutoForgeryImage = null , mAutoForgeryToggle = null, mAutoMaskWearImage = null, mAutoMaskWearToggle = null; private ImageView mManagerLoginCaptureSendImage = null, mManagerLoginCaptureSendToggle = null; @Override @@ -89,7 +90,7 @@ public class MgtSystemSettingsActivity extends BaseActivity implements RfidManag setContentView(R.layout.mgt_systemsettings); //mEncryptionMode setting? - mConstraintLayout = findViewById(R.id.mainLayout); + //mConstraintLayout = findViewById(R.id.mainLayout); menuKeySetting(); dataInit(); @@ -258,6 +259,19 @@ public class MgtSystemSettingsActivity extends BaseActivity implements RfidManag + Button attendancesettingbutton = (Button) findViewById(R.id.attendancesettingbutton); + attendancesettingbutton.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MgtSystemSettingsActivity.this, AttendanceSettingActivity.class); + startActivity(intent); + overridePendingTransition(R.anim.fadein, R.anim.fadeout); + } + }); + + + + Button dataservermenubutton = (Button) findViewById(R.id.dataservermenubutton); dataservermenubutton.setOnClickListener(new Button.OnClickListener() { @Override @@ -364,26 +378,26 @@ 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 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); +// } 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 726d9cb..8bd9e00 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 @@ -591,6 +591,19 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); Date currentTime = Calendar.getInstance().getTime(); + if(mode == DATE_POPUP) { + if(mPickerTarget.equalsIgnoreCase("s")) { + if(mStartDate.length() > 0) { + currentTime = GlobalInfo.convertDateTimeStringToDate(GlobalInfo.convertDateToSimple(mStartDate) + "000000"); + } + } else if(mPickerTarget.equalsIgnoreCase("e")) { + if(mEndDate.length() > 0) { + currentTime = GlobalInfo.convertDateTimeStringToDate(GlobalInfo.convertDateToSimple(mEndDate) + "000000"); + } + } + } else { + + } SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.getDefault()); SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.getDefault()); SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.getDefault()); @@ -691,28 +704,47 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re minuteValues[i] = String.format("%02d", i); } + int startHour = 9; + int startMinute = 0; + int endHour = 18; + int endMinute = 0; + + if(mTimeText.length() > 0) { + Log.w("RITO", "mTimeText : " + mTimeText.getText()); + String[] split = mTimeText.getText().toString().split("~"); + if(split.length == 2) { + String[] subSplit = split[0].trim().split(":"); + startHour = Integer.parseInt(subSplit[0]); + startMinute = Integer.parseInt(subSplit[1]); + + subSplit = split[1].trim().split(":"); + endHour = Integer.parseInt(subSplit[0]); + endMinute = Integer.parseInt(subSplit[1]); + } + } + numberpickertime.setMinValue(0); numberpickertime.setMaxValue(23); - numberpickertime.setValue(9); + numberpickertime.setValue(startHour); numberpickertime.setDisplayedValues(hourValues); numberpickertime.setWrapSelectorWheel(false); numberpickerminute.setMinValue(0); numberpickerminute.setMaxValue(59); - numberpickerminute.setValue(0); + numberpickerminute.setValue(startMinute); numberpickerminute.setDisplayedValues(minuteValues); numberpickerminute.setWrapSelectorWheel(false); numberpickertime2.setMinValue(0); numberpickertime2.setMaxValue(23); - numberpickertime2.setValue(18); + numberpickertime2.setValue(endHour); numberpickertime2.setDisplayedValues(hourValues); numberpickertime2.setWrapSelectorWheel(false); numberpickerminute2.setMinValue(0); numberpickerminute2.setMaxValue(59); - numberpickerminute2.setValue(0); + numberpickerminute2.setValue(endMinute); numberpickerminute2.setDisplayedValues(minuteValues); numberpickerminute2.setWrapSelectorWheel(false); @@ -825,13 +857,22 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re Button editstartdatebutton = (Button) dialog.findViewById(R.id.editstartdatebutton); Button editenddatebutton = (Button) dialog.findViewById(R.id.editenddatebutton); + if(mDateText.length() > 0) { + Log.w("RITO", "mDateText : " + mDateText.getText()); + String[] split = mDateText.getText().toString().split("~"); + if(split.length == 2) { + mStartDate = split[0].trim(); + mEndDate = split[1].trim(); + } + } + editstartdatebutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //numberPicker(menu, 0, editstartdate.getText().toString()); mPickerTarget = "s"; - numberPicker(0, dialog); + numberPicker(DATE_POPUP, dialog); } catch (Exception e) { e.printStackTrace(); } @@ -845,7 +886,7 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re try { //numberPicker(menu, 1, editenddate.getText().toString()); mPickerTarget = "e"; - numberPicker(0, dialog); + numberPicker(DATE_POPUP, dialog); } catch (Exception e) { e.printStackTrace(); } @@ -864,10 +905,16 @@ public class MgtUserInfoActivity extends BaseActivity implements RfidManager.re editstartdate.setText(startdate); editenddate.setText(enddate); - if (mStartDate.length() > 0) + if (mStartDate.length() > 0) { editstartdate.setText(mStartDate); - if (mEndDate.length() > 0) + } else { + mStartDate = startdate; + } + if (mEndDate.length() > 0) { editenddate.setText(mEndDate); + } else { + mEndDate = enddate; + } Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); diff --git a/app/src/main/java/kr/co/enicom/acs/system/AttendanceSettingActivity.java b/app/src/main/java/kr/co/enicom/acs/system/AttendanceSettingActivity.java new file mode 100644 index 0000000..ebed90c --- /dev/null +++ b/app/src/main/java/kr/co/enicom/acs/system/AttendanceSettingActivity.java @@ -0,0 +1,438 @@ +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 java.util.regex.Pattern; + +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; + +public class AttendanceSettingActivity 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_attendance_setting); + + menuKeySetting(); + + mStartTimeText = findViewById(R.id.attendancesettingstarttimetext); + mEndTimeText = findViewById(R.id.attendancesettingendtimetext); + mAutoModeDurationText = findViewById(R.id.attendancesettingautomodedurationtext); + + ImageView attendancesettinguseimage = (ImageView) findViewById(R.id.attendancesettinguseimage); + attendancesettinguseimage.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + if(GlobalInfo.mUseAttendance == 0) { + attendancesettinguseimage.setImageResource(R.drawable.toggle_pressed); + GlobalInfo.mUseAttendance = 1; + } + else { + GlobalInfo.mUseAttendance = 0; + attendancesettinguseimage.setImageResource(R.drawable.toggle_nor); + } + } + }); + + if(GlobalInfo.mUseAttendance == 0) { + attendancesettinguseimage.setImageResource(R.drawable.toggle_nor); + } else { + attendancesettinguseimage.setImageResource(R.drawable.toggle_pressed); + } + + + + + + ImageView attendancesettingautomodeuseimage = (ImageView) findViewById(R.id.attendancesettingautomodeuseimage); + attendancesettingautomodeuseimage.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + if(GlobalInfo.mUseAttendanceAutoMode == 0) { + attendancesettingautomodeuseimage.setImageResource(R.drawable.toggle_pressed); + GlobalInfo.mUseAttendanceAutoMode = 1; + } + else { + GlobalInfo.mUseAttendanceAutoMode = 0; + attendancesettingautomodeuseimage.setImageResource(R.drawable.toggle_nor); + } + } + }); + + if(GlobalInfo.mUseAttendanceAutoMode == 0) { + attendancesettingautomodeuseimage.setImageResource(R.drawable.toggle_nor); + } else { + attendancesettingautomodeuseimage.setImageResource(R.drawable.toggle_pressed); + } + + + + Button button = (Button) findViewById(R.id.attendancesettingstarttimeimagebutton) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mTimePopupTarget = 0; + numberPicker(1); + } + }); + + button = (Button) findViewById(R.id.attendancesettingendtimeimagebutton) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + mTimePopupTarget = 1; + numberPicker(1); + } + }); + + button = (Button) findViewById(R.id.attendancesettingautomodedurationimagebutton) ; + button.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + // TODO : click event + systemPopup(0); + } + }); + + + 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 void systemPopup(final int mode) + { + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.custom_dialog); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + FrameLayout layoutdialogtitle = (FrameLayout) dialog.findViewById(R.id.layoutdialogtitle); + TextView textview = (TextView) dialog.findViewById(R.id.dialogtitle); + EditText dialogedit = (EditText) dialog.findViewById(R.id.dialogedit); + Button buttonConfirm = (Button) dialog.findViewById(R.id.buttonConfirm); + Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); + + final NumberPicker np = (NumberPicker) dialog.findViewById(R.id.dialognumberpicker); + layoutdialogtitle.setVisibility(View.VISIBLE); + np.setVisibility(View.INVISIBLE); + + textview.setText(R.string.mgt_system_attendance_duration_popup_text); + dialogedit.setText(mAutoModeDurationText.getText().toString()); + + np.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(np, android.R.color.white); + setSelectedTextColor(np); + + np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + setSelectedTextColor(np); + } + }); + + dialogedit.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + boolean dismiss = true; + try { + GlobalInfo.mAttendanceAutoTimeMinute = Integer.parseInt(dialogedit.getText().toString()); + mAutoModeDurationText.setText(dialogedit.getText()); + } catch (Exception e) + { + e.printStackTrace(); + }finally { + if(dismiss) + dialog.dismiss(); + } + } + }); + + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + + } + + + + private final int DATE_POPUP = 0; + private final int TIME_POPUP = 1; + private int mTimePopupTarget = 0; + private TextView mStartTimeText = null; + private TextView mEndTimeText = null; + private TextView mAutoModeDurationText = 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){ + Field[] pickerFields = NumberPicker.class.getDeclaredFields(); + for(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; + + 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_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) { + + }else { + numberpickertime = (NumberPicker) dialog.findViewById(R.id.numberpickertime); + numberpickerminute = (NumberPicker) dialog.findViewById(R.id.numberpickerminute); + + int hour; + int minutes; + if(mTimePopupTarget == 0) { + hour = GlobalInfo.mAttendanceStartTime / 60; + minutes = GlobalInfo.mAttendanceStartTime % 60; + } else { + hour = GlobalInfo.mAttendanceEndTime / 60; + minutes = GlobalInfo.mAttendanceEndTime % 60; + } + + + numberpickertime.setMinValue(0); + numberpickertime.setMaxValue(23); + numberpickertime.setValue(hour); + numberpickertime.setWrapSelectorWheel(false); + + numberpickerminute.setMinValue(0); + numberpickerminute.setMaxValue(59); + numberpickerminute.setValue(minutes); + numberpickerminute.setWrapSelectorWheel(false); + + numberpickertime.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + setDividerColor(numberpickertime, android.R.color.white); + setSelectedTextColor(numberpickertime); + numberpickertime.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); + } + }); + } + + buttonConfirm.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + try{ + if(mTimePopupTarget == 0) { + GlobalInfo.mAttendanceStartTime = numberpickertime.getValue() * 60 + numberpickerminute.getValue(); + mStartTimeText.setText(String.format("%02d:%02d", numberpickertime.getValue(), numberpickerminute.getValue())); + } + else { + GlobalInfo.mAttendanceEndTime = numberpickertime.getValue() * 60 + numberpickerminute.getValue(); + mEndTimeText.setText(String.format("%02d:%02d", numberpickertime.getValue(), numberpickerminute.getValue())); + } + }catch (Exception e) + { + e.printStackTrace(); + }finally { + dialog.dismiss(); + } + } + }); + + buttonCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + + } + + void updateTimeTextFromGlobal() { + mStartTimeText.setText(String.format("%02d:%02d", GlobalInfo.mAttendanceStartTime / 60, GlobalInfo.mAttendanceStartTime % 60)); + mEndTimeText.setText(String.format("%02d:%02d", GlobalInfo.mAttendanceEndTime / 60, GlobalInfo.mAttendanceEndTime % 60)); + mAutoModeDurationText.setText(String.format("%d", GlobalInfo.mAttendanceAutoTimeMinute)); + } + + + + + + + + + + @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(AttendanceSettingActivity.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/LoginMenuActivity.java b/app/src/main/java/kr/co/enicom/acs/system/LoginMenuActivity.java index 44510ed..c82fcc7 100644 --- a/app/src/main/java/kr/co/enicom/acs/system/LoginMenuActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/system/LoginMenuActivity.java @@ -2,6 +2,7 @@ package kr.co.enicom.acs.system; import android.content.Intent; import android.os.Bundle; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -19,6 +20,7 @@ import kr.co.enicom.acs.R; 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; +import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_RFID; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_VEIN; import static kr.co.enicom.acs.GlobalInfo.VERIFY_METHOD_VEIN_FACE; @@ -101,19 +103,57 @@ public class LoginMenuActivity extends BaseActivity { } }); - if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_PRINT)) + Log.w("RITO", String.format("mVerifyMethod : %d, mVerifyActivateMethod : %d", GlobalInfo.mVerifyMethod, GlobalInfo.mVerifyActivateMethod)); + + if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_FINGER_PRINT)) { mImageView[2].setVisibility(View.GONE); mImageView[4].setVisibility(View.GONE); - }else if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN)) + + if(!GlobalInfo.isVerifyMethod(VERIFY_METHOD_RFID)) { + mImageView[1].setVisibility(View.GONE); + + ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mImageView[0].getLayoutParams(); + param.setMarginStart(245); + mImageView[0].setLayoutParams(param); + + param = (ViewGroup.MarginLayoutParams) mImageView[3].getLayoutParams(); + param.setMarginStart(653); + mImageView[3].setLayoutParams(param); + } + }else if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_VEIN)) { mImageView[3].setVisibility(View.GONE); mImageView[4].setVisibility(View.GONE); - }else if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_FACE)) + + if(!GlobalInfo.isVerifyMethod(VERIFY_METHOD_RFID)) { + mImageView[1].setVisibility(View.GONE); + + ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mImageView[0].getLayoutParams(); + param.setMarginStart(245); + mImageView[0].setLayoutParams(param); + + param = (ViewGroup.MarginLayoutParams) mImageView[2].getLayoutParams(); + param.setMarginStart(653); + mImageView[2].setLayoutParams(param); + } + }else if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_FACE)) { mImageView[2].setVisibility(View.GONE); mImageView[3].setVisibility(View.GONE); - }else if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN_FACE) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_FINGER_FACE)) + + if(!GlobalInfo.isVerifyMethod(VERIFY_METHOD_RFID)) { + mImageView[1].setVisibility(View.GONE); + + ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mImageView[0].getLayoutParams(); + param.setMarginStart(245); + mImageView[0].setLayoutParams(param); + + param = (ViewGroup.MarginLayoutParams) mImageView[4].getLayoutParams(); + param.setMarginStart(653); + mImageView[4].setLayoutParams(param); + } + }else if(GlobalInfo.isVerifyMethod(VERIFY_METHOD_VEIN_FACE) || GlobalInfo.isVerifyMethod(VERIFY_METHOD_FINGER_FACE)) { ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mImageView[0].getLayoutParams(); param.setMarginStart(245); @@ -143,6 +183,18 @@ public class LoginMenuActivity extends BaseActivity { param.topMargin = 326; mImageView[3].setLayoutParams(param); } + } else { + mImageView[2].setVisibility(View.GONE); + mImageView[3].setVisibility(View.GONE); + mImageView[4].setVisibility(View.GONE); + + ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mImageView[0].getLayoutParams(); + param.setMarginStart(245); + mImageView[0].setLayoutParams(param); + + param = (ViewGroup.MarginLayoutParams) mImageView[1].getLayoutParams(); + param.setMarginStart(653); + mImageView[1].setLayoutParams(param); } } diff --git a/app/src/main/res/layout/activity_attendance_setting.xml b/app/src/main/res/layout/activity_attendance_setting.xml new file mode 100644 index 0000000..0c59c8f --- /dev/null +++ b/app/src/main/res/layout/activity_attendance_setting.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +