From 566395037b806828d7f21fa714d41a3340eb861f Mon Sep 17 00:00:00 2001 From: ritoseo Date: Wed, 29 Oct 2025 00:12:55 +0900 Subject: [PATCH] =?UTF-8?q?v2.0.12=20=EB=B2=84=EC=A0=84=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=A9=EC=8B=9C=EA=B0=84=20=EC=84=A4=EC=A0=95=20=EC=A3=BC?= =?UTF-8?q?=EB=A7=90=20=EB=B0=8F=20=ED=9C=B4=EB=AC=B4=EC=9D=BC=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=A9=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=201?= =?UTF-8?q?=EB=8B=A8=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../java/kr/co/enicom/acs/BaseService.java | 34 ++++++++++++ .../java/kr/co/enicom/acs/GlobalInfo.java | 53 +++++++++++++++---- .../java/kr/co/enicom/acs/MainActivity.java | 3 ++ .../java/kr/co/enicom/acs/ServerManager.java | 15 +++++- .../acs/system/DoorControlTimeActivity.java | 23 ++++++++ .../kr/co/enicom/acs/system/SystemUtil.java | 39 ++++++++++++-- .../res/layout/activity_door_control_time.xml | 45 +++++++++++++++- app/src/main/res/values/strings.xml | 1 + 9 files changed, 198 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b99440a..a3107d8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,8 +22,8 @@ android { minSdkVersion 26 //noinspection ExpiredTargetSdkVersion targetSdkVersion 30 - versionCode 200000011 - versionName "2.0.11" + versionCode 200000012 + versionName "2.0.12" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk.abiFilters 'armeabi-v7a' } 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 54745a8..8e52595 100644 --- a/app/src/main/java/kr/co/enicom/acs/BaseService.java +++ b/app/src/main/java/kr/co/enicom/acs/BaseService.java @@ -225,6 +225,7 @@ public class BaseService extends Service { class PeriodicChecker extends Thread { int mAliveCount = 0; boolean mIsAlive = false; + boolean mPrevUseDoorControlTime; int mPrevDoorControlOpenStatus = -1; private long getUTC() @@ -325,6 +326,35 @@ public class BaseService extends Service { } } + String testDebug = SystemUtil.property_get("sys.rito.test"); + String testParam1 = SystemUtil.property_get("sys.rito.tparam1"); + String testParam2 = SystemUtil.property_get("sys.rito.tparam2"); + if(testDebug.equals("1")) { + SystemUtil.property_set("sys.rito.test", ""); + MWMessage msg = new MWMessage(); + msg.command = ServerManager.COMMAND_TYPE_DOOR_CONTROL_TIME_SET; + msg.useDoorControlTime = "Y"; + msg.doorControlStartTime = "0001"; + msg.doorControlEndTime = "2359"; + if(testParam1.length() > 0) + msg.doorControlStartTime = testParam1; + if(testParam2.length() > 0) + msg.doorControlEndTime = testParam2; + mServerManager.handleMessage(msg); + } else if(testDebug.equals("2")) { + SystemUtil.property_set("sys.rito.test", ""); + MWMessage msg = new MWMessage(); + msg.command = ServerManager.COMMAND_TYPE_DOOR_CONTROL_TIME_SET; + msg.useDoorControlTime = "N"; + msg.doorControlStartTime = "0001"; + msg.doorControlEndTime = "2359"; + if(testParam1.length() > 0) + msg.doorControlStartTime = testParam1; + if(testParam2.length() > 0) + msg.doorControlEndTime = testParam2; + mServerManager.handleMessage(msg); + } + //if(MainActivity.INSTANCE != null) { { if (GlobalInfo.mUseDoorControlTime == 1) { @@ -357,6 +387,10 @@ public class BaseService extends Service { if (GlobalInfo.mDoorControlTimeStatus != -1) { GlobalInfo.mDoorControlTimeStatus = -1; mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_CLOSE); + + if (MainActivity.INSTANCE != null) { + MainActivity.INSTANCE.turnToBaseUI(); + } } } } 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 32ffc21..b64d9a0 100644 --- a/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java +++ b/app/src/main/java/kr/co/enicom/acs/GlobalInfo.java @@ -10,7 +10,6 @@ import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Environment; import android.util.Log; -import android.widget.TextView; import java.io.BufferedInputStream; import java.io.File; @@ -27,11 +26,9 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; -import java.util.List; import kr.co.enicom.acs.manage.LogInfo; import kr.co.enicom.acs.system.SystemUtil; @@ -98,8 +95,10 @@ public class GlobalInfo { public static final int DEFAULT_ATTENDANCE_START_TIME = 9 * 60; public static final int DEFAULT_ATTENDANCE_END_TIME = 18 * 60; public static final int DEFAULT_USE_DOOR_CONTROL_TIME = 0; + public static final int DEFAULT_USE_DOOR_CONTROL_TIME_HOLIDAY = 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 String DEFAULT_DOOR_CONTROL_TIME_DATA = convertTimeToLonger(convertMinutesToSimpleTime(DEFAULT_DOOR_CONTROL_TIME_START)) + "~" + convertTimeToLonger(convertMinutesToSimpleTime(DEFAULT_DOOR_CONTROL_TIME_END)); public static final int VERIFY_COMBINATION_WITH_RFID = 0; public static final int VERIFY_COMBINATION_WITH_ID = 1; @@ -274,6 +273,8 @@ public class GlobalInfo { 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 int mUseDoorControlTimeHoliday = 0; // 개방시간 주말 및 휴무일 사용 여부 + public static String mDoorControlTimeData = DEFAULT_DOOR_CONTROL_TIME_DATA; public static ArrayList mUserList; private static Object mLock = new Object(); @@ -530,7 +531,8 @@ public class GlobalInfo { "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, use_attendance integer, " + "use_door_control_time integer, door_control_time_start integer, door_control_time_end integer, " + - "attendance_start_time integer, attendance_end_time integer, use_attendance_auto_mode integer, attendance_auto_time integer " + + "attendance_start_time integer, attendance_end_time integer, use_attendance_auto_mode integer, attendance_auto_time integer, " + + "use_door_control_time_holiday integer, door_control_time_data text" + ")"; try { database.execSQL(sql); @@ -541,7 +543,8 @@ public class GlobalInfo { "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, use_attendance, " + "use_door_control_time, door_control_time_start, door_control_time_end, " + - "attendance_start_time, attendance_end_time, use_attendance_auto_mode, attendance_auto_time " + + "attendance_start_time, attendance_end_time, use_attendance_auto_mode, attendance_auto_time, " + + "use_door_control_time_holiday, door_control_time_data " + ") " + "values (0, '', '', 0, 0, %d, " + "%d, %d, %d, %d, %d, %d, " + @@ -550,7 +553,8 @@ 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, '%s'" + ")", VERIFY_COMBINATION_OR, DEFAULT_VERIFY_PRINTUSERNAME, DEFAULT_VERIFY_POPUPTIME, DEFAULT_LOG_DELETESTATUS , 1, 1, 1, @@ -559,7 +563,8 @@ public class GlobalInfo { 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_USE_ATTENDANCE, DEFAULT_USE_DOOR_CONTROL_TIME, DEFAULT_DOOR_CONTROL_TIME_START, DEFAULT_DOOR_CONTROL_TIME_END, - DEFAULT_ATTENDANCE_START_TIME, DEFAULT_ATTENDANCE_END_TIME, DEFAULT_USE_ATTENDANCE_AUTO_MODE, DEFAULT_ATTENDANCE_AUTO_TIME + DEFAULT_ATTENDANCE_START_TIME, DEFAULT_ATTENDANCE_END_TIME, DEFAULT_USE_ATTENDANCE_AUTO_MODE, DEFAULT_ATTENDANCE_AUTO_TIME, + DEFAULT_USE_DOOR_CONTROL_TIME_HOLIDAY, DEFAULT_DOOR_CONTROL_TIME_DATA ); database.execSQL(sql); @@ -655,6 +660,23 @@ public class GlobalInfo { } } + if(!columnExists(database, "settings", "use_door_control_time_holiday")) { + columnAppend(database, "settings", "use_door_control_time_holiday", "integer"); + sql = String.format("update settings set use_door_control_time_holiday = %d where idx = 0", DEFAULT_USE_DOOR_CONTROL_TIME_HOLIDAY); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + if(!columnExists(database, "settings", "door_control_time_data")) { + columnAppend(database, "settings", "door_control_time_data", "text"); + sql = String.format("update settings set door_control_time_data = '%s' where idx = 0", DEFAULT_DOOR_CONTROL_TIME_DATA); + try { + database.execSQL(sql); + } catch (Exception e) { + } + } + if(!columnExists(database, "settings", "attendance_start_time")) { columnAppend(database, "settings", "attendance_start_time", "integer"); sql = String.format("update settings set attendance_start_time = %d where idx = 0", DEFAULT_ATTENDANCE_START_TIME); @@ -1182,7 +1204,8 @@ 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, use_attendance, " + "use_door_control_time, door_control_time_start, door_control_time_end, " + - "attendance_start_time, attendance_end_time, use_attendance_auto_mode, attendance_auto_time " + + "attendance_start_time, attendance_end_time, use_attendance_auto_mode, attendance_auto_time, " + + "use_door_control_time_holiday, door_control_time_data " + " from settings where idx = 0"; try { Cursor cursor = database.rawQuery(sql, null); @@ -1233,6 +1256,9 @@ public class GlobalInfo { GlobalInfo.mUseAttendanceAutoMode = cursor.getInt(36); GlobalInfo.mAttendanceAutoTimeMinute = cursor.getInt(37); + GlobalInfo.mUseDoorControlTimeHoliday = cursor.getInt(38); + GlobalInfo.mDoorControlTimeData = cursor.getString(39); + Log.w("RITO", "mAutoForgery : " + GlobalInfo.mAutoForgery); Log.w("RITO", "mAutoMaskWear : " + GlobalInfo.mAutoMaskWear); } @@ -2132,7 +2158,8 @@ public class GlobalInfo { "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, use_attendance = %d, " + "use_door_control_time = %d, door_control_time_start = %d, door_control_time_end = %d, " + - "attendance_start_time = %d, attendance_end_time = %d, use_attendance_auto_mode = %d, attendance_auto_time = %d " + + "attendance_start_time = %d, attendance_end_time = %d, use_attendance_auto_mode = %d, attendance_auto_time = %d, " + + "use_door_control_time_holiday = %d, door_control_time_data = '%s' " + " 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, @@ -2142,7 +2169,8 @@ public class GlobalInfo { GlobalInfo.mAutoRebootUse, GlobalInfo.mAutoRebootPeriod, GlobalInfo.mAutoRebootHour, GlobalInfo.mDCUWatchdogTime, GlobalInfo.mVerifyLogAutoResend, GlobalInfo.mVerifyActivateMethod, GlobalInfo.mAutoForgery, GlobalInfo.mAutoMaskWear, GlobalInfo.mManagerLoginCaptureSend, GlobalInfo.mUseAttendance, GlobalInfo.mUseDoorControlTime, GlobalInfo.mDoorControlTimeStart, GlobalInfo.mDoorControlTimeEnd, - GlobalInfo.mAttendanceStartTime, GlobalInfo.mAttendanceEndTime, GlobalInfo.mUseAttendanceAutoMode, GlobalInfo.mAttendanceAutoTimeMinute + GlobalInfo.mAttendanceStartTime, GlobalInfo.mAttendanceEndTime, GlobalInfo.mUseAttendanceAutoMode, GlobalInfo.mAttendanceAutoTimeMinute, + GlobalInfo.mUseDoorControlTimeHoliday, GlobalInfo.mDoorControlTimeData ); try { @@ -2493,6 +2521,11 @@ public class GlobalInfo { if(mUseDoorControlTime == 0) return false; + if(mUseDoorControlTimeHoliday == 0) { + if(SystemUtil.DateTimeUtil.isHoliday()) + return false; + } + 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 d935130..56ac62c 100644 --- a/app/src/main/java/kr/co/enicom/acs/MainActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/MainActivity.java @@ -1053,6 +1053,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul if (mLoginImage == null) mLoginImage = new ImageView[10]; + SystemUtil.updateBGImageForView(this, findViewById(R.id.mainLayout)); + SystemUtil.updateBGImageForView(this, findViewById(R.id.mainloginfacebg)); + mLoginImage[CARD] = findViewById(R.id.mainlogincardimage); mLoginImage[VEIN] = findViewById(R.id.mainloginveinimage); mLoginImage[FINGER] = findViewById(R.id.mainloginfingerimage); 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 235f936..d072306 100644 --- a/app/src/main/java/kr/co/enicom/acs/ServerManager.java +++ b/app/src/main/java/kr/co/enicom/acs/ServerManager.java @@ -2990,9 +2990,22 @@ public class ServerManager extends Thread { } else if(msg.command == COMMAND_TYPE_DOOR_CONTROL_TIME_SET) { // 37. 개방시간 설정 try { - GlobalInfo.mUseDoorControlTime = msg.useDoorControlTime.equals("Y") ? 1 : 0; + int nextUse = msg.useDoorControlTime.equals("Y") ? 1 : 0; + boolean isNeedInvalidate = false; + if(nextUse != GlobalInfo.mUseDoorControlTime) { + isNeedInvalidate = true; + } +// GlobalInfo.mUseDoorControlTime = msg.useDoorControlTime.equals("Y") ? 1 : 0; GlobalInfo.mDoorControlTimeStart = GlobalInfo.convertSimpleTimeToMinutes(msg.doorControlStartTime); GlobalInfo.mDoorControlTimeEnd = GlobalInfo.convertSimpleTimeToMinutes(msg.doorControlEndTime); + GlobalInfo.mUseDoorControlTime = nextUse; + if(isNeedInvalidate) { + if (nextUse == 1) { + GlobalInfo.mDoorControlTimeStatus = -1; + } else { + GlobalInfo.mDoorControlTimeStatus = 0; + } + } GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO); } catch(Exception e) { ret = false; 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 index 27b58c0..6f5b129 100644 --- a/app/src/main/java/kr/co/enicom/acs/system/DoorControlTimeActivity.java +++ b/app/src/main/java/kr/co/enicom/acs/system/DoorControlTimeActivity.java @@ -69,6 +69,29 @@ public class DoorControlTimeActivity extends BaseActivity { } + ImageView doorcontroltimeuseholidayimage = (ImageView) findViewById(R.id.doorcontroltimeuseholidayimage); + doorcontroltimeuseholidayimage.setOnClickListener(new Button.OnClickListener() { + @Override + public void onClick(View view) { + if(GlobalInfo.mUseDoorControlTimeHoliday == 0) { + doorcontroltimeuseholidayimage.setImageResource(R.drawable.toggle_pressed); + GlobalInfo.mUseDoorControlTimeHoliday = 1; + } + else { + GlobalInfo.mUseDoorControlTimeHoliday = 0; + doorcontroltimeuseholidayimage.setImageResource(R.drawable.toggle_nor); + } + } + }); + + if(GlobalInfo.mUseDoorControlTimeHoliday == 0) { + doorcontroltimeuseholidayimage.setImageResource(R.drawable.toggle_nor); + } else { + doorcontroltimeuseholidayimage.setImageResource(R.drawable.toggle_pressed); + } + + + Button button = (Button) findViewById(R.id.doorcontroltimesetimagebutton) ; button.setOnClickListener(new Button.OnClickListener() { @Override diff --git a/app/src/main/java/kr/co/enicom/acs/system/SystemUtil.java b/app/src/main/java/kr/co/enicom/acs/system/SystemUtil.java index 996cf10..86fbb70 100644 --- a/app/src/main/java/kr/co/enicom/acs/system/SystemUtil.java +++ b/app/src/main/java/kr/co/enicom/acs/system/SystemUtil.java @@ -4,6 +4,9 @@ import android.app.AlarmManager; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.media.AudioManager; import android.net.ConnectivityManager; import android.net.EthernetManager; @@ -17,12 +20,12 @@ import android.net.RouteInfo; import android.net.StaticIpConfiguration; import android.provider.Settings; import android.util.Log; +import android.view.View; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -31,14 +34,12 @@ import java.math.BigInteger; import java.net.Inet4Address; import java.net.InetAddress; -import kr.co.enicom.acs.GlobalInfo; import kr.co.enicom.acs.MainActivity; -import kr.co.enicom.acs.R; -import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; import java.util.Calendar; import java.util.Date; @@ -112,6 +113,24 @@ public class SystemUtil { } } + public static boolean isBackGroundImageExist() { + File file = new File("/sdcard/ACS/bg.png"); + if(file.exists() && file.canRead()) + return true; + + return false; + } + + public static void updateBGImageForView(Context context, View view) { + if(!isBackGroundImageExist()) + return; + + File imgFile = new File("/sdcard/ACS/bg.png"); + Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); + BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap); + view.setBackground(drawable); + } + public static int fromByteArrayToInt(byte[] bytes) { /*return bytes[0] << 24 | (bytes[1] & 0xFF) << 16 | (bytes[2] & 0xFF) << 8 | (bytes[3] & 0xFF);*/ return ((bytes[3] & 0xFF) << 24) | @@ -296,6 +315,16 @@ public class SystemUtil { } } + public static boolean isHoliday() { + LocalDate today = LocalDate.now(); + DayOfWeek dayOfWeek = today.getDayOfWeek(); + + if(dayOfWeek.getValue() == 6 || dayOfWeek.getValue() == 7) + return true; + + return false; + } + public static void setTime(int hourOfDay, int minute, int second) { Calendar c = Calendar.getInstance(); diff --git a/app/src/main/res/layout/activity_door_control_time.xml b/app/src/main/res/layout/activity_door_control_time.xml index 556ed5d..c7aa7b2 100644 --- a/app/src/main/res/layout/activity_door_control_time.xml +++ b/app/src/main/res/layout/activity_door_control_time.xml @@ -74,7 +74,6 @@ + + + + + + + + + + + + + + "Device Name를 입력해 주세요." "개방시간 사용" + "주말 및 휴무일 개방" "설정시간" "근태관리 사용"