v2.0.22 버전

최종 릴리즈
This commit is contained in:
ritoseo 2026-02-27 10:15:47 +09:00
parent 694bb5718b
commit a435c64ee3
18 changed files with 844 additions and 106 deletions

View File

@ -22,8 +22,8 @@ android {
minSdkVersion 26
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 30
versionCode 200000012
versionName "2.0.12"
versionCode 200000022
versionName "2.0.22"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk.abiFilters 'armeabi-v7a'
}

View File

@ -294,8 +294,8 @@ public class BaseService extends Service {
}
if(getUTC() - touchTimeLong > GlobalInfo.mInputTimeout) {
if (mLastActivity != null) {
//Log.w(TAG, "Input Timeout! Back to Main Activity");
//mLastActivity.forceTimeoutReturn();
Log.w(TAG, "Input Timeout! Back to Main Activity");
mLastActivity.forceTimeoutReturn();
}
}
@ -367,18 +367,54 @@ public class BaseService extends Service {
} else if(testDebug.equals("3")) {
SystemUtil.property_set("sys.rito.test", "");
GlobalInfo.updateHolidayList();
} else if(testDebug.equals("4")) {
GlobalInfo.mUseDoorControlTimeOuting = 1;
GlobalInfo.mDoorControlTimeStatus = -1;
SystemUtil.property_set("sys.rito.test", "");
} else if(testDebug.equals("5")) {
GlobalInfo.mUseDoorControlTimeOuting = 0;
GlobalInfo.mDoorControlTimeStatus = 0;
SystemUtil.property_set("sys.rito.test", "");
}
//if(MainActivity.INSTANCE != null) {
{
{ // 개방 모드 제어 관련 부분
if (GlobalInfo.mUseDoorControlTime == 1) {
if (GlobalInfo.checkIsDoorControlOpenTime()) {
if(GlobalInfo.mIsOnOutingConfirm == 1 && GlobalInfo.mOutingConfirmStartTime > 0) {
if (MainActivity.INSTANCE != null) {
long curTime = SystemClock.uptimeMillis();
if(curTime - GlobalInfo.mOutingConfirmStartTime >= 10 * 1000) { // 10초 이내 입력 없을 컨펌 모드 해제
GlobalInfo.mIsOnOutingConfirm = 0;
GlobalInfo.mOutingConfirmStartTime = 0;
MainActivity.INSTANCE.clearOnRfidVerifyingProcess();
MainActivity.INSTANCE.turnToBaseUI();
}
}
}
if(GlobalInfo.mIsOnOuting == 1) {
String curTimeStr = GlobalInfo.getCurrentDateString();
if(GlobalInfo.mOutingDate.length() > 0 && !GlobalInfo.mOutingDate.equals(curTimeStr)) {
GlobalInfo.mIsOnOuting = 0;
GlobalInfo.updateOutingInfo(false);
if (MainActivity.INSTANCE != null) {
Log.w(TAG, "Call turnToBaseUI here 0");
MainActivity.INSTANCE.turnToBaseUI();
}
}
}
if (GlobalInfo.checkIsDoorControlOpenTime() && !GlobalInfo.checkIsOutingMode()) {
long curTime = SystemClock.uptimeMillis();
if (GlobalInfo.mDoorControlTimeStatus != 1) {
boolean isTimeChanged = GlobalInfo.checkIsDoorControlOpenTimeChanged();
if (GlobalInfo.mDoorControlTimeStatus != 1 || isTimeChanged) {
Log.w(TAG, "강제 개방 트리거");
//mDoorManager.controlDoor(true, -1);
mDoorManager.forceStatusOrder(DOOR_CONTROL_STATUS_OPEN_LOCK);
GlobalInfo.mDoorControlSentLastTime = curTime;
if (MainActivity.INSTANCE != null) {
//Log.w(TAG, "Call turnToBaseUI here 1");
MainActivity.INSTANCE.turnToBaseUI();
}
}
@ -392,6 +428,7 @@ public class BaseService extends Service {
//mDoorManager.controlDoor(false, 0);
mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_CLOSE);
if (MainActivity.INSTANCE != null) {
//Log.w(TAG, "Call turnToBaseUI here 2");
MainActivity.INSTANCE.turnToBaseUI();
}
}
@ -403,6 +440,7 @@ public class BaseService extends Service {
mDoorManager.queueControlOrder(DOOR_CONTROL_STATUS_CLOSE);
if (MainActivity.INSTANCE != null) {
//Log.w(TAG, "Call turnToBaseUI here 3");
MainActivity.INSTANCE.turnToBaseUI();
}
}

View File

@ -12,10 +12,12 @@ import android.os.Environment;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
@ -29,6 +31,7 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Locale;
import kr.co.enicom.acs.manage.LogInfo;
import kr.co.enicom.acs.system.SystemUtil;
@ -96,6 +99,7 @@ public class GlobalInfo {
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_USE_DOOR_CONTROL_TIME_OUTING = 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));
@ -282,12 +286,18 @@ public class GlobalInfo {
public static int mDoorControlTimeStart = 9 * 60; // 개방시간 시작 시간(Minute) Default = 09:00
public static int mDoorControlTimeEnd = 18 * 60; //18 * 60; // 개방시간 종료 시간(Minute) Default = 18:00
public static int mUseDoorControlTimeHoliday = 0; // 개방시간 주말 휴무일 사용 여부
public static int mUseDoorControlTimeOuting = 0; // 개방시간 외출/복귀 모드 사용 여부
public static int mIsOnOuting = 0; // 개방시간 외출중 여부. 0 : 복귀상태, 1 : 외출중상태. mUseDoorControlTimeOuting = 1인 경우만 유효
public static int mIsOnOutingConfirm = 0; // 외출하기, 복귀하기 버튼 처리 중인지
public static long mOutingConfirmStartTime = 0; // 외출하기, 복귀하기 버튼 처리 시작 uptimeMillis
public static String mOutingDate = ""; // 외출 시작 일자
public static String mDoorControlTimeData = DEFAULT_DOOR_CONTROL_TIME_DATA;
public static ArrayList<HolidayInfo> mHolidayList = null;
public static ArrayList<UserInfo> mUserList;
private static Object mLock = new Object();
public static DoorControlTime[] mDoorControlTimeList = null;
public static DoorControlTime mCurrentDoorControlTime = null;
public static void updateHolidayList() {
LocalDate today = LocalDate.now();
@ -365,6 +375,15 @@ public class GlobalInfo {
}
}
public static String getCurrentDateString() {
SimpleDateFormat dayFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
Date currentTime = Calendar.getInstance().getTime();
String curdate = dayFormat.format(currentTime);
return curdate;
}
public static int getCurrentMinutesInDay() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
@ -617,7 +636,7 @@ public class GlobalInfo {
"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, " +
"use_door_control_time_holiday integer, door_control_time_data text" +
"use_door_control_time_holiday integer, door_control_time_data text, use_door_control_time_outing integer" +
")";
try {
database.execSQL(sql);
@ -629,7 +648,7 @@ public class GlobalInfo {
"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, " +
"use_door_control_time_holiday, door_control_time_data " +
"use_door_control_time_holiday, door_control_time_data, use_door_control_time_outing " +
") " +
"values (0, '', '', 0, 0, %d, " +
"%d, %d, %d, %d, %d, %d, " +
@ -639,7 +658,7 @@ public class GlobalInfo {
"%d, %d, %d, %d, " +
"%d, %d, %d, " +
"%d, %d, %d, %d, " +
"%d, '%s'" +
"%d, '%s', %d" +
")",
VERIFY_COMBINATION_OR,
DEFAULT_VERIFY_PRINTUSERNAME, DEFAULT_VERIFY_POPUPTIME, DEFAULT_LOG_DELETESTATUS , 1, 1, 1,
@ -649,7 +668,7 @@ public class GlobalInfo {
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_USE_DOOR_CONTROL_TIME_HOLIDAY, DEFAULT_DOOR_CONTROL_TIME_DATA
DEFAULT_USE_DOOR_CONTROL_TIME_HOLIDAY, DEFAULT_DOOR_CONTROL_TIME_DATA, DEFAULT_USE_DOOR_CONTROL_TIME_OUTING
);
database.execSQL(sql);
@ -761,6 +780,14 @@ public class GlobalInfo {
} catch (Exception e) {
}
}
if(!columnExists(database, "settings", "use_door_control_time_outing")) {
columnAppend(database, "settings", "use_door_control_time_outing", "integer");
sql = String.format("update settings set use_door_control_time_outing = %d where idx = 0", DEFAULT_USE_DOOR_CONTROL_TIME_OUTING);
try {
database.execSQL(sql);
} catch (Exception e) {
}
}
if(!columnExists(database, "settings", "attendance_start_time")) {
columnAppend(database, "settings", "attendance_start_time", "integer");
@ -1360,7 +1387,7 @@ public class GlobalInfo {
"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, " +
"use_door_control_time_holiday, door_control_time_data " +
"use_door_control_time_holiday, door_control_time_data, use_door_control_time_outing " +
" from settings where idx = 0";
try {
Cursor cursor = database.rawQuery(sql, null);
@ -1414,6 +1441,8 @@ public class GlobalInfo {
GlobalInfo.mUseDoorControlTimeHoliday = cursor.getInt(38);
GlobalInfo.mDoorControlTimeData = cursor.getString(39);
GlobalInfo.mUseDoorControlTimeOuting = cursor.getInt(40);
Log.w("RITO", "mAutoForgery : " + GlobalInfo.mAutoForgery);
Log.w("RITO", "mAutoMaskWear : " + GlobalInfo.mAutoMaskWear);
}
@ -2314,7 +2343,7 @@ public class GlobalInfo {
"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, " +
"use_door_control_time_holiday = %d, door_control_time_data = '%s' " +
"use_door_control_time_holiday = %d, door_control_time_data = '%s', use_door_control_time_outing = %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,
@ -2325,7 +2354,7 @@ public class GlobalInfo {
GlobalInfo.mAutoForgery, GlobalInfo.mAutoMaskWear, GlobalInfo.mManagerLoginCaptureSend, GlobalInfo.mUseAttendance,
GlobalInfo.mUseDoorControlTime, GlobalInfo.mDoorControlTimeStart, GlobalInfo.mDoorControlTimeEnd,
GlobalInfo.mAttendanceStartTime, GlobalInfo.mAttendanceEndTime, GlobalInfo.mUseAttendanceAutoMode, GlobalInfo.mAttendanceAutoTimeMinute,
GlobalInfo.mUseDoorControlTimeHoliday, GlobalInfo.mDoorControlTimeData
GlobalInfo.mUseDoorControlTimeHoliday, GlobalInfo.mDoorControlTimeData, GlobalInfo.mUseDoorControlTimeOuting
);
try {
@ -2567,6 +2596,44 @@ public class GlobalInfo {
return tableCount;
}
public static void updateOutingInfo(boolean isOut) {
String saveStr = null;
if(isOut) {
saveStr = "1";
} else {
saveStr = "0";
}
String dateStr = getCurrentDateString();
saveStr += ":";
saveStr += dateStr;
saveStringInfo("outing.info", saveStr);
GlobalInfo.mOutingDate = dateStr;
}
public static String readValueFromFile(String filename) {
String _storagePath = Environment.getExternalStorageDirectory().toString();
String _acsPath = _storagePath + "/ACS";
String _acsFilePath = _acsPath + "/" + filename;
File file = new File(_acsFilePath);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
// 줄만 읽기
return reader.readLine();
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void saveStringInfo(String filename, String data) {
String _storagePath = Environment.getExternalStorageDirectory().toString();
String _acsPath = _storagePath + "/ACS";
@ -2686,6 +2753,55 @@ public class GlobalInfo {
return null;
}
public static boolean checkIsDoorControlOpenTimeChanged() {
boolean isChanged = false;
if(!checkIsDoorControlOpenTime())
return false;
DoorControlTime[] timeList;
synchronized (mLock) {
timeList = mDoorControlTimeList;
}
if(timeList == null || timeList.length == 0)
return false;
int currentMinutes = getCurrentMinutesInDay();
for(DoorControlTime info : timeList) {
if(currentMinutes >= info.startTime && currentMinutes < info.endTime) {
if(mCurrentDoorControlTime == null || mCurrentDoorControlTime.startTime != info.startTime || mCurrentDoorControlTime.endTime != info.endTime) {
isChanged = true;
mCurrentDoorControlTime = info;
String changedTime = convertTimeToLonger(convertMinutesToSimpleTime(info.startTime)) + "~" + convertTimeToLonger(convertMinutesToSimpleTime(info.endTime));
Log.d(TAG, "DoorOpen Time is Changed to [" + changedTime + "]");
}
break;
}
}
return isChanged;
}
public static boolean checkIsOutingConfirmMode() {
if(mUseDoorControlTimeOuting == 0)
return false;
if(mIsOnOutingConfirm == 1)
return true;
return false;
}
public static boolean checkIsOutingMode() {
if(mUseDoorControlTimeOuting == 0)
return false;
if(mIsOnOuting == 1)
return true;
return false;
}
public static boolean checkIsDoorControlOpenTime() {
if(mUseDoorControlTime == 0)
return false;

View File

@ -88,4 +88,6 @@ public class MWMessage {
public String yearOfHoliday;
public String monthOfHoliday;
public String daysOfHoliday;
public String useDoorControlTimeOuting;
}

View File

@ -18,6 +18,7 @@ import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Spannable;
@ -62,6 +63,7 @@ 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.getCurrentMinutesInDay;
import static kr.co.enicom.acs.GlobalInfo.mSerialNumber;
import static kr.co.enicom.acs.GlobalInfo.mVerifyCombination;
import static kr.co.enicom.acs.GlobalInfo.mVerifyMethod;
@ -81,6 +83,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
VerifyPopupManager mPopupManager = null;
MediaPlayer mPlayer = null;
public boolean mIsOnUiTransition = false; // turnToBaseUI 블럭
ServerManager.ServerNotify NOTIFY_HANDLER;
public static int POPUP_TYPE_GRANT = 1;
@ -114,6 +118,8 @@ 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 Button mOutButton = null, mReturnButton = null;
private CameraSurfaceView mCameraView = null;
@ -680,6 +686,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}.start();*/
}
public void clearOnRfidVerifyingProcess() {
mIsOnRfidVerifyingProcess = false;
}
@Override
public void onRfidResult(String status, String value) {
@ -687,6 +696,15 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
//if(mMainUiStatus == MAIN_SELECT_VEIN)
//return;
// OpenLock 상태인지 체크 강제 개방 처리
if (GlobalInfo.checkIsDoorControlOpenTime() && !GlobalInfo.checkIsOutingMode())
{
int doorStatus = BaseService.mDCUManager.getReportValues(DCUManager.DCU_REPORT_TYPE_DMON)[0];
if(doorStatus == GlobalInfo.DOOR_CONTROL_STATUS_CLOSE) {
GlobalInfo.mDoorControlTimeStatus = 0;
}
}
if(mMainUiStatus == RESULT_SUCCESS || mMainUiStatus == RESULT_FAIL)
return;
@ -1107,11 +1125,14 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
GlobalInfo.mDeviceStatusNormal = true;
GlobalInfo.initInfo();
GlobalInfo.reloadUserListWithProgress(this);
GlobalInfo.updateDoorControlTimeList();
if(GlobalInfo.mDeviceId.length() > 0) {
version.setText(String.format("[ V%s](ID:%s)", getVersionInfo(this), GlobalInfo.mDeviceId));
}
//test
//GlobalInfo.mVerifyMethod = GlobalInfo.VERIFY_METHOD_FINGER_FACE;
//GlobalInfo.mVerifyCombination = VERIFY_COMBINATION_AND;
@ -1280,6 +1301,11 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
@Override
public void onClick(View view) {
// TODO : click event
if(GlobalInfo.checkIsOutingConfirmMode()) {
return;
}
mMainUiStatus = -1;
if(GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN) || GlobalInfo.isActivatedMethod(VERIFY_METHOD_VEIN_FACE)) {
GlobalInfo.mVeinWorkMode = GlobalInfo.VEIN_WORK_MODE_NONE;
@ -1386,6 +1412,36 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
});
if(mOutButton == null)
mOutButton = (Button) findViewById(R.id.outbutton) ;
mOutButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view)
{
GlobalInfo.mOutingConfirmStartTime = SystemClock.uptimeMillis();
GlobalInfo.mIsOnOutingConfirm = 1;
turnToBaseUI();
}
});
if(mReturnButton == null)
mReturnButton = (Button) findViewById(R.id.returnbutton) ;
mReturnButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view)
{
GlobalInfo.mOutingConfirmStartTime = SystemClock.uptimeMillis();
GlobalInfo.mIsOnOutingConfirm = 1;
turnToBaseUI();
}
});
startService(new Intent(this, BaseService.class));
GlobalInfo.mDoorControlTimeStatus = -1;
@ -1472,6 +1528,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
@Override
public void run() {
boolean prev_link_status = false;
boolean prev_conn_status = false;
mIsAlive = true;
while(mIsAlive) {
TextView _view = findViewById(R.id.editDateTime);
@ -1491,43 +1549,47 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
if (BaseService.mServerManager != null) {
_view = findViewById(R.id.textNetwork);
if (BaseService.mServerManager.checkServerConnection()/* || force*/) {
runOnUiThread(new Runnable() {
@Override
public void run() {
boolean conn_status = BaseService.mServerManager.checkServerConnection();
if(prev_conn_status != conn_status) {
prev_conn_status = conn_status;
if (conn_status/* || force*/) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TextView _textNetwork = findViewById(R.id.textNetwork);
// _textNetwork.setTextColor(Color.parseColor("#3AD531"));
// _textNetwork.setText(R.string.main_network_success);
ImageView _imgView = findViewById(R.id.imageViewServerLink);
if (_imgView != null) {
//_imgView.setImageResource(R.drawable.network_icon);
_imgView.setImageResource(R.drawable.main_server_icon_nor);
_imgView.setVisibility(View.VISIBLE);
ImageView _imgView = findViewById(R.id.imageViewServerLink);
if (_imgView != null) {
//_imgView.setImageResource(R.drawable.network_icon);
_imgView.setImageResource(R.drawable.main_server_icon_nor);
_imgView.setVisibility(View.VISIBLE);
//_imgView.setVisibility(View.INVISIBLE);
//_imgView.setVisibility(View.INVISIBLE);
}
}
}
});
} else {
});
} else {
/*_view.setTextColor(Color.RED);
_view.setText("네트워크 오류");*/
runOnUiThread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TextView _textNetwork = findViewById(R.id.textNetwork);
// _textNetwork.setTextColor(Color.parseColor("#FF0000"));
// _textNetwork.setText(R.string.main_network_fail);
ImageView _imgView = findViewById(R.id.imageViewServerLink);
if (_imgView != null) {
//_imgView.setImageResource(R.drawable.network_icon_error);
_imgView.setImageResource(R.drawable.main_server_icon_error);
_imgView.setVisibility(View.VISIBLE);
ImageView _imgView = findViewById(R.id.imageViewServerLink);
if (_imgView != null) {
//_imgView.setImageResource(R.drawable.network_icon_error);
_imgView.setImageResource(R.drawable.main_server_icon_error);
_imgView.setVisibility(View.VISIBLE);
}
}
}
});
});
}
}
// Check physical link
@ -1535,13 +1597,21 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
if(file != null && file.exists())
{
String linkCheck = null;
try {
String line = null;
BufferedReader buf = new BufferedReader(new FileReader(file.getAbsoluteFile().toString()));
while((line=buf.readLine())!=null){
linkCheck = line.trim();
}
buf.close();
// try {
// String line = null;
// BufferedReader buf = new BufferedReader(new FileReader(file.getAbsoluteFile().toString()));
// while((line=buf.readLine())!=null){
// linkCheck = line.trim();
// }
// buf.close();
// } catch (Exception e) {
// e.printStackTrace();
// }
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
// 작업 수행 (끝나면 자동으로 close 호출됨)
String line = br.readLine();
linkCheck = line.trim();
} catch (Exception e) {
e.printStackTrace();
}
@ -1553,21 +1623,28 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
}
final boolean link_status = link_is_okay;
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView _imgView = findViewById(R.id.imageViewNetwork);
if (_imgView != null) {
if(link_status) {
_imgView.setImageResource(R.drawable.main_network_icon_nor);
} else {
_imgView.setImageResource(R.drawable.main_network_icon_error);
}
_imgView.setVisibility(View.VISIBLE);
}
if(prev_link_status != link_is_okay) {
if(prev_link_status && !link_is_okay) {
SystemUtil.shellCommand("niasysc SHELL-ORDER=ifconfig eth0 down && ifconfig eth0 up && touch /mnt/obb/ethrenew");
}
});
prev_link_status = link_is_okay;
final boolean link_status = link_is_okay;
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView _imgView = findViewById(R.id.imageViewNetwork);
if (_imgView != null) {
if (link_status) {
_imgView.setImageResource(R.drawable.main_network_icon_nor);
} else {
_imgView.setImageResource(R.drawable.main_network_icon_error);
}
_imgView.setVisibility(View.VISIBLE);
}
}
});
}
}
}
@ -1823,6 +1900,23 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
//Log.e("ryu", "on start face init!");
if(GlobalInfo.mUseDoorControlTimeOuting == 1) {
String outingValue = GlobalInfo.readValueFromFile("outing.info");
if (outingValue != null) {
outingValue = outingValue.trim();
Log.w(TAG, "outingValue : " + outingValue);
try {
String[] values = outingValue.split(":");
Log.w(TAG, "values[0] : " + values[0]);
GlobalInfo.mIsOnOuting = Integer.parseInt(values[0]);
GlobalInfo.mOutingDate = values[1];
} catch (Exception e) {
e.printStackTrace();
}
}
}
Log.w(TAG, "mIsOnOuting : " + GlobalInfo.mIsOnOuting);
turnToBaseUI();
}
}.start();
@ -2076,6 +2170,59 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
}
if(GlobalInfo.checkIsOutingMode() && !GlobalInfo.checkIsOutingConfirmMode()) {
mIsOnRfidVerifyingProcess = false;
return;
}
if(logResult.mId.length() > 0 && GlobalInfo.checkIsOutingConfirmMode()) { // 외출 인증 모드인 경우
if(mOutButton.getVisibility() == View.VISIBLE) {
GlobalInfo.mIsOnOuting = 1;
mIsOnUiTransition = true;
Message message = new Message();
message.what= RESULT_OUTING_CHANGE;
message.obj = logResult.mName;
mMainUiHandler.handleMessage(message);
new Thread() {
@Override
public void run() {
GlobalInfo.updateOutingInfo(true);
}
}.start();
return;
} else if(mReturnButton.getVisibility() == View.VISIBLE) {
GlobalInfo.mIsOnOuting = 0;
mIsOnUiTransition = true;
Message message = new Message();
message.what= RESULT_OUTING_CHANGE;
message.obj = logResult.mName;
mMainUiHandler.handleMessage(message);
new Thread() {
@Override
public void run() {
GlobalInfo.updateOutingInfo(false);
}
}.start();
return;
}
}
if(logResult.mId.length() == 0 && GlobalInfo.checkIsOutingConfirmMode()) {
mIsOnUiTransition = true;
Message message = new Message();
message.what= RESULT_OUTING_CHANGE_FAIL;
message.obj = logResult.mName;
mMainUiHandler.handleMessage(message);
return;
}
GlobalInfo.updateLogging(logResult);
if(BaseService.mServerManager != null) {
if(GlobalInfo.mUseAttendance == 1 && GlobalInfo.mAttendanceMode != GlobalInfo.ATTENDANCE_MODE_NONE) {
@ -2179,6 +2326,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
public void turnToBaseUI() {
if(mIsOnUiTransition)
return;
if(mVerifyMethod == GlobalInfo.VERIFY_METHOD_VEIN)
mMainUiHandler.sendEmptyMessage(MAIN_SELECT_VEIN);
else if(mVerifyMethod == VERIFY_METHOD_RFID)
@ -2273,7 +2423,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
mCameraView.setDropFrame(true);
BaseService.mFaceManager.mRBitmapFrameQueue.clear();
if(GlobalInfo.checkIsDoorControlOpenTime()) { // 개방시간 사용 시간여부
if((GlobalInfo.checkIsOutingMode() || GlobalInfo.checkIsDoorControlOpenTime()) && !GlobalInfo.checkIsOutingConfirmMode()) { // 개방시간 사용 시간여부(외출 모드 인증 모드는 아니어야 )
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);
@ -2288,18 +2438,52 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
mAttendanceButton.setVisibility(View.INVISIBLE);
}
TextView tv = findViewById(R.id.doorcontroltimetext);
if(GlobalInfo.mUseDoorControlTimeOuting == 1) {
if(GlobalInfo.mIsOnOuting == 0) {
TextView tv = findViewById(R.id.doorcontroltimeoutingtext);
GlobalInfo.DoorControlTime timeInfo = GlobalInfo.getMatchDoorControlOpenTime(getCurrentMinutesInDay());
if (timeInfo != null) {
tv.setText(String.format("%02d:%02d~%02d:%02d", timeInfo.startTime / 60, timeInfo.startTime % 60
, timeInfo.endTime / 60, timeInfo.endTime % 60));
}
mOutButton.setVisibility(View.VISIBLE);
findViewById(R.id.doorcontroltimeoutingtext).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolmsgoutingtext).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolframeouting).setVisibility(View.VISIBLE);
mReturnButton.setVisibility(View.INVISIBLE);
findViewById(R.id.doorcontroltimeoutingtext2).setVisibility(View.INVISIBLE);
findViewById(R.id.doorcontrolmsgoutingtext2).setVisibility(View.INVISIBLE);
} else {
mOutButton.setVisibility(View.INVISIBLE);
findViewById(R.id.doorcontroltimeoutingtext).setVisibility(View.INVISIBLE);
findViewById(R.id.doorcontrolmsgoutingtext).setVisibility(View.INVISIBLE);
mReturnButton.setVisibility(View.VISIBLE);
findViewById(R.id.doorcontroltimeoutingtext2).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolmsgoutingtext2).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolframeouting).setVisibility(View.VISIBLE);
}
findViewById(R.id.doorcontrolframeouting).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolframe).setVisibility(View.INVISIBLE);
} else {
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));
GlobalInfo.DoorControlTime timeInfo = GlobalInfo.getMatchDoorControlOpenTime(getCurrentMinutesInDay());
if(timeInfo != null) {
tv.setText(String.format("%02d:%02d~%02d:%02d", timeInfo.startTime / 60, timeInfo.startTime % 60
, timeInfo.endTime / 60, timeInfo.endTime % 60));
GlobalInfo.DoorControlTime timeInfo = GlobalInfo.getMatchDoorControlOpenTime(getCurrentMinutesInDay());
if (timeInfo != null) {
tv.setText(String.format("%02d:%02d~%02d:%02d", timeInfo.startTime / 60, timeInfo.startTime % 60
, timeInfo.endTime / 60, timeInfo.endTime % 60));
}
findViewById(R.id.doorcontrolframe).setVisibility(View.VISIBLE);
findViewById(R.id.doorcontrolframeouting).setVisibility(View.INVISIBLE);
}
findViewById(R.id.doorcontrolframe).setVisibility(View.VISIBLE);
return;
} else {
findViewById(R.id.doorcontrolframeouting).setVisibility(View.INVISIBLE);
findViewById(R.id.doorcontrolframe).setVisibility(View.INVISIBLE);
}
@ -2509,6 +2693,8 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
break;
case RESULT_OUTING_CHANGE:
case RESULT_SUCCESS:
if(mCameraView != null) {
mCameraView.setDropFrame(true);
@ -2520,6 +2706,36 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
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);
if(msg.what == RESULT_OUTING_CHANGE) {
String user = "[외출모드]";
if(GlobalInfo.mIsOnOuting == 0) {
user = "[개방모드]";
}
int width = (int)mLoginText[COLOR_YELLOW].getPaint().measureText(user);
int startx = (1280 - 465 - width)/2;
LayoutSetting(mLoginText[COLOR_WHITE], COLOR_WHITE, startx + width, 375, 465, 65, R.string.main_outing_change, View.VISIBLE);
LayoutSetting(mLoginText[COLOR_YELLOW], COLOR_YELLOW, startx, 375, width, 65, 0, View.VISIBLE, user);
GlobalInfo.mIsOnOutingConfirm = 0;
GlobalInfo.mOutingConfirmStartTime = 0;
mIsOnRfidVerifyingProcess = false;
//waitTimeHandler(MAIN_UI_INIT, GlobalInfo.mVerifyPopupTime * 1000);
new Thread() {
@Override
public void run() {
try {
sleep(GlobalInfo.mVerifyPopupTime * 1000);
mIsOnUiTransition = false;
turnToBaseUI();
} catch(Exception e) {
}
}
}.start();
break;
}
String user = getString(R.string.main_verify_1) + ((String)msg.obj) + getString(R.string.main_verify_2) + getString(R.string.main_verify_3);
if(GlobalInfo.mVerifyPrintUserName == GlobalInfo.DEFAULT_VERIFY_PRINTUSERNAME) {
int width = (int)mLoginText[COLOR_YELLOW].getPaint().measureText(user);
@ -2541,7 +2757,9 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
waitTimeHandler(RESULT_SUCCESS,GlobalInfo.mVerifyPopupTime * 1000);
break;
case RESULT_OUTING_CHANGE_FAIL:
case RESULT_FAIL:
if(mCameraView != null) {
mCameraView.setDropFrame(true);
}
@ -2563,6 +2781,26 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
}
mIsOnRfidVerifyingProcess = false;
if(msg.what == RESULT_OUTING_CHANGE_FAIL) {
GlobalInfo.mIsOnOutingConfirm = 0;
GlobalInfo.mOutingConfirmStartTime = 0;
mIsOnRfidVerifyingProcess = false;
new Thread() {
@Override
public void run() {
try {
sleep(GlobalInfo.mVerifyPopupTime * 1000);
mIsOnUiTransition = false;
turnToBaseUI();
} catch(Exception e) {
}
}
}.start();
break;
}
waitTimeHandler(RESULT_FAIL,GlobalInfo.mVerifyPopupTime * 1000);
break;
}
@ -2689,6 +2927,7 @@ public class MainActivity extends AppCompatActivity implements RfidManager.resul
mDelayHandler.removeMessages(MAIN_SELECT_FACE);
mDelayHandler.removeMessages(MAIN_SELECT_VEIN_FACE);
mDelayHandler.removeMessages(MAIN_SELECT_FINGER_FACE);
mDelayHandler.removeMessages(RESULT_OUTING_CHANGE);
}
}

View File

@ -28,5 +28,6 @@ public interface MainUiDefine {
public static final int MAIN_SELECT_FACE = 6;
public static final int MAIN_SELECT_VEIN_FACE = 7;
public static final int MAIN_SELECT_FINGER_FACE = 8;
public static final int RESULT_OUTING_CHANGE = 9;
public static final int RESULT_OUTING_CHANGE_FAIL = 10;
}

View File

@ -12,6 +12,7 @@ import android.util.Log;
import com.hitachi.fv.android.h1client.SecurityLevel;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@ -173,6 +174,10 @@ public class RfidManager implements SerialInputOutputManager.Listener {
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;
} else if(recvSize == 0) {
accFilled = 0;
mSerialManager.CloseSerial(acmHandle);
acmHandle = -1;
}
if(accFilled > 0) {
@ -212,19 +217,40 @@ public class RfidManager implements SerialInputOutputManager.Listener {
}
if(acmHandle < 0) {
acmHandle = mSerialManager.OpenSerial("/dev/ttyACM0", 115200);
if(acmHandle < 0) {
if(failedCount < 10000) {
String acmDevice = "";
for(int i = 0;i < 20;i++) {
acmDevice = "/dev/ttyACM" + i;
File acmCheck = new File(acmDevice);
if(acmCheck.exists())
break;
acmDevice = "";
}
if(acmDevice.length() > 0) {
acmHandle = mSerialManager.OpenSerial(acmDevice, 115200);
if (acmHandle < 0) {
if (failedCount < 10000) {
failedCount++;
}
Log.e(RfidManager.class.getName(), "Error to open BLE Reader Module[" + acmDevice + "]!");
try {
sleep(500 * failedCount);
} catch (InterruptedException e) {
}
} else {
failedCount = 0;
Log.d(RfidManager.class.getName(), "Success to open BLE Reader Module[" + acmDevice + "] :-)");
}
} else {
Log.d(RfidManager.class.getName(), "Cannot find BLE Reader Module :-(");
if (failedCount < 10000) {
failedCount++;
}
Log.e(RfidManager.class.getName(), "Error to open BLE Reader Module[ttyACM0]!");
try {
sleep(500 * failedCount);
} catch (InterruptedException e) {
}
} else {
failedCount = 0;
Log.d(RfidManager.class.getName(), "Success to open BLE Reader Module[ttyACM0] :-)");
}
}
}

View File

@ -489,6 +489,7 @@ public class ServerManager extends Thread {
public final static int FINGER_CODE_LENGTH = 960;
public final static int FACE_EMBED_LENGTH = 2048;
public final static int DOOR_CONTROL_COMMAND_LENGTH = 1;
public final static int FIRE_STATUS_LENGTH = 20;
public final static int NETWORK_TYPE_LENGTH = 1;
public final static int NETWORK_IPV4_LENGTH = 15;
public final static int DEVICE_NAME_LENGTH = 20;
@ -566,11 +567,16 @@ public class ServerManager extends Thread {
public final static byte COMMAND_TYPE_ATTENDANCE_LOG_GET = 0x44; // 41. 근태 이력 로그 요청
public final static byte COMMAND_TYPE_DELETE_ATTENDANCE_LOG_ALL = 0x45;
// v3.8
public final static byte COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V2 = 0x46; // 43. 개방시간 저장(2) - 다중저장
public final static byte COMMAND_TYPE_DOOR_CONTROL_TIME_GET_V2 = 0x47;
public final static byte COMMAND_TYPE_HOLYDAY_SET = 0x48; // 45. 공휴일 저장
public final static byte COMMAND_TYPE_HOLYDAY_GET = 0x49;
// v3.9
public final static byte COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V3 = 0x50;
public final static byte COMMAND_TYPE_DOOR_CONTROL_TIME_GET_V3 = 0x51;
boolean callback_progress = true;
LogInfo result_handler = new LogInfo();
ServerNotify NOTIFY_HANDLER = new ServerNotify() {
@ -1641,8 +1647,11 @@ public class ServerManager extends Thread {
if(!GlobalInfo.mDeviceStatusNormal)
replyStatus = PKT_STATUS_FAIL;
String[] dataArray = new String[1];
String[] dataArray = new String[2];
dataArray[0] = getPaddingString("" + openStatus, DOOR_CONTROL_COMMAND_LENGTH);
int[] values = BaseService.mDCUManager.getReportValues(DCUManager.DCU_REPORT_TYPE_FIRESW);
String fireStatus = String.format("%d,%d", values[0], values[1]);
dataArray[1] = getPaddingString(fireStatus, FIRE_STATUS_LENGTH);
message = createClientMessage(COMMAND_TYPE_DEVICE_DOOR_STATUS_GET, getMsgDeviceId(), replyStatus, dataArray);
sendPushMessage(message);
}
@ -2457,6 +2466,57 @@ public class ServerManager extends Thread {
message = createClientMessage(COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V2, getMsgDeviceId(), replyStatus, null);
sendPushMessage(message);
}
} else if(commandMsg[1] == COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V3) { // 47. 개방시간 설정 3
if(statusMsgStr.equals(PKT_STATUS_OKAY)) {
int parseLen = 1;
byte[] parseMsg = new byte[parseLen];
System.arraycopy(message, idx, parseMsg, 0, parseLen);
idx += parseLen;
msg.useDoorControlTime = new String(parseMsg).trim();
Log.i(TAG, "parseMessage. useDoorControlTime : " + msg.useDoorControlTime);
parseMsg = new byte[parseLen];
System.arraycopy(message, idx, parseMsg, 0, parseLen);
idx += parseLen;
msg.useDoorControlTimeHoliday = new String(parseMsg).trim();
Log.i(TAG, "parseMessage. useDoorControlTimeHoliday : " + msg.useDoorControlTimeHoliday);
parseMsg = new byte[parseLen];
System.arraycopy(message, idx, parseMsg, 0, parseLen);
idx += parseLen;
msg.useDoorControlTimeOuting = new String(parseMsg).trim();
Log.i(TAG, "parseMessage. useDoorControlTimeOuting : " + msg.useDoorControlTimeOuting);
parseLen = TOTAL_COUNT_LENGTH;
parseMsg = new byte[parseLen];
System.arraycopy(message, idx, parseMsg, 0, parseLen);
idx += parseLen;
int totalCount = SystemUtil.fromByteArrayToInt(parseMsg);
msg.doorControlTimeListCount = "" + totalCount;
if(totalCount > 0) {
msg.doorControlTimeList = new String[totalCount];
for (int i = 0; i < totalCount; i++) {
parseLen = TIME_LENGTH_RANGE;
parseMsg = new byte[parseLen];
System.arraycopy(message, idx, parseMsg, 0, parseLen);
idx += parseLen;
try {
msg.doorControlTimeList[i] = new String(parseMsg).trim();
Log.i(TAG, "parseMessage. doorControlTime : " + msg.doorControlTimeList[i]);
} catch (Exception e) {
}
}
}
String replyStatus = PKT_STATUS_FAIL;
boolean result = handleMessage(msg);
if(result)
replyStatus = PKT_STATUS_OKAY;
message = createClientMessage(COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V3, getMsgDeviceId(), replyStatus, null);
sendPushMessage(message);
}
} else if(commandMsg[1] == COMMAND_TYPE_DOOR_CONTROL_TIME_GET_V2) { // 개방시간 정보 조회 2
String replyStatus = PKT_STATUS_OKAY;
if(statusMsgStr.equals(PKT_STATUS_OKAY)) {
@ -2479,6 +2539,30 @@ public class ServerManager extends Thread {
message = createClientMessage(commandMsg[1], getMsgDeviceId(), replyStatus, null);
}
sendPushMessage(message);
} else if(commandMsg[1] == COMMAND_TYPE_DOOR_CONTROL_TIME_GET_V3) { // 개방시간 정보 조회 3
String replyStatus = PKT_STATUS_OKAY;
if(statusMsgStr.equals(PKT_STATUS_OKAY)) {
GlobalInfo.DoorControlTime[] timeList = GlobalInfo.getDoorControlTimeList();
int totalCount = timeList.length;
byte[][] dataArray = new byte[4 + totalCount][];
dataArray[0] = getPaddingString(GlobalInfo.mUseDoorControlTime == 1 ? "Y" : "N", 1).getBytes();
dataArray[1] = getPaddingString(GlobalInfo.mUseDoorControlTimeHoliday == 1 ? "Y" : "N", 1).getBytes();
dataArray[2] = getPaddingString(GlobalInfo.mUseDoorControlTimeOuting == 1 ? "Y" : "N", 1).getBytes();
dataArray[3] = intTobyte(totalCount, ByteOrder.LITTLE_ENDIAN);
for(int i = 0;i < totalCount;i++) {
String timeRange = getPaddingString(GlobalInfo.convertMinutesToSimpleTime(timeList[i].startTime), TIME_LENGTH);
timeRange += getPaddingString(GlobalInfo.convertMinutesToSimpleTime(timeList[i].endTime), TIME_LENGTH);
dataArray[4 + i] = timeRange.getBytes();
}
message = createClientMessageByte(commandMsg[1], getMsgDeviceId(), replyStatus, dataArray);
sendPushMessage(message);
} else {
replyStatus = PKT_STATUS_FAIL;
message = createClientMessage(commandMsg[1], getMsgDeviceId(), replyStatus, null);
}
sendPushMessage(message);
} else if(commandMsg[1] == COMMAND_TYPE_HOLYDAY_SET) { // 45. 공휴일 설정
if(statusMsgStr.equals(PKT_STATUS_OKAY)) {
@ -3129,23 +3213,23 @@ public class ServerManager extends Thread {
} else if(msg.command == COMMAND_TYPE_DOOR_CONTROL_TIME_SET) { // 37. 개방시간 설정
try {
int nextUse = msg.useDoorControlTime.equals("Y") ? 1 : 0;
boolean isNeedInvalidate = false;
if(nextUse != GlobalInfo.mUseDoorControlTime) {
isNeedInvalidate = true;
}
// boolean isNeedInvalidate = false;
// if(nextUse != GlobalInfo.mUseDoorControlTime) {
// isNeedInvalidate = true;
// }
// isNeedInvalidate = true;
// GlobalInfo.mUseDoorControlTime = msg.useDoorControlTime.equals("Y") ? 1 : 0;
GlobalInfo.mDoorControlTimeStart = GlobalInfo.convertSimpleTimeToMinutes(msg.doorControlStartTime);
GlobalInfo.mDoorControlTimeEnd = GlobalInfo.convertSimpleTimeToMinutes(msg.doorControlEndTime);
GlobalInfo.mDoorControlTimeData = GlobalInfo.convertTimeToLonger(msg.doorControlStartTime) + "~" + GlobalInfo.convertTimeToLonger(msg.doorControlEndTime);
GlobalInfo.updateDoorControlTimeList();
GlobalInfo.mUseDoorControlTime = nextUse;
if(isNeedInvalidate) {
if (nextUse == 1) {
GlobalInfo.mDoorControlTimeStatus = -1;
} else {
GlobalInfo.mDoorControlTimeStatus = 0;
}
if (nextUse == 1) {
GlobalInfo.mDoorControlTimeStatus = -1;
} else {
GlobalInfo.mDoorControlTimeStatus = 0;
}
GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO);
} catch(Exception e) {
ret = false;
@ -3154,13 +3238,13 @@ public class ServerManager extends Thread {
try {
int nextUse = msg.useDoorControlTime.equals("Y") ? 1 : 0;
int nextUseHoliday = msg.useDoorControlTimeHoliday.equals("Y") ? 1 : 0;
boolean isNeedInvalidate = false;
if(nextUse != GlobalInfo.mUseDoorControlTime) {
isNeedInvalidate = true;
}
if(nextUseHoliday != GlobalInfo.mUseDoorControlTimeHoliday) {
isNeedInvalidate = true;
}
// boolean isNeedInvalidate = false;
// if(nextUse != GlobalInfo.mUseDoorControlTime) {
// isNeedInvalidate = true;
// }
// if(nextUseHoliday != GlobalInfo.mUseDoorControlTimeHoliday) {
// isNeedInvalidate = true;
// }
int totalCount = Integer.parseInt(msg.doorControlTimeListCount);
String newTime = "";
@ -3176,13 +3260,13 @@ public class ServerManager extends Thread {
GlobalInfo.updateDoorControlTimeList();
GlobalInfo.mUseDoorControlTimeHoliday = nextUseHoliday;
GlobalInfo.mUseDoorControlTime = nextUse;
if(isNeedInvalidate) {
if (nextUse == 1) {
GlobalInfo.mDoorControlTimeStatus = -1;
} else {
GlobalInfo.mDoorControlTimeStatus = 0;
}
if (nextUse == 1) {
GlobalInfo.mDoorControlTimeStatus = -1;
} else {
GlobalInfo.mDoorControlTimeStatus = 0;
}
GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO);
} catch(Exception e) {
ret = false;
@ -3204,6 +3288,37 @@ public class ServerManager extends Thread {
} catch(Exception e) {
ret = false;
}
} else if(msg.command == COMMAND_TYPE_DOOR_CONTROL_TIME_SET_V3) { // 47. 개방시간 설정 3
try {
int nextUse = msg.useDoorControlTime.equals("Y") ? 1 : 0;
int nextUseHoliday = msg.useDoorControlTimeHoliday.equals("Y") ? 1 : 0;
int totalCount = Integer.parseInt(msg.doorControlTimeListCount);
String newTime = "";
for(int i = 0;i < totalCount;i++) {
String startTime = msg.doorControlTimeList[i].substring(0, 4);
String endTime = msg.doorControlTimeList[i].substring(4);
if(i > 0) {
newTime += ",";
}
newTime += (GlobalInfo.convertTimeToLonger(startTime) + "~" + GlobalInfo.convertTimeToLonger(endTime));
}
GlobalInfo.mDoorControlTimeData = newTime;
GlobalInfo.updateDoorControlTimeList();
GlobalInfo.mUseDoorControlTimeHoliday = nextUseHoliday;
GlobalInfo.mUseDoorControlTime = nextUse;
GlobalInfo.mUseDoorControlTimeOuting = msg.useDoorControlTimeOuting.equals("Y") ? 1 : 0;
if (nextUse == 1) {
GlobalInfo.mDoorControlTimeStatus = -1;
} else {
GlobalInfo.mDoorControlTimeStatus = 0;
}
GlobalInfo.updateDatabase(GlobalInfo.TARGET_FLAG_DEVICE_INFO);
} catch(Exception e) {
ret = false;
}
}
@ -3291,6 +3406,7 @@ public class ServerManager extends Thread {
public void run() {
byte[] buffer = new byte[32768];
int cnt = 0;
int prevFireStatus = -1;
int ret;
long checkTime = SystemClock.uptimeMillis() - GlobalInfo.mStatePeriod * 1000;
long reportTime = SystemClock.uptimeMillis() - GlobalInfo.mStatePeriod * 1000 + 1000;
@ -3400,6 +3516,19 @@ public class ServerManager extends Thread {
}
}
// 소방 상태 주기적 체크
int[] fireStatusValue = BaseService.mDCUManager.getReportValues(DCUManager.DCU_REPORT_TYPE_FIRESW);
boolean needToNotifyDoorStatus = false;
if(fireStatusValue != null) {
if(prevFireStatus < 0)
prevFireStatus = fireStatusValue[0];
if(prevFireStatus != fireStatusValue[0]) {
needToNotifyDoorStatus = true;
}
prevFireStatus = fireStatusValue[0];
}
long curTime = SystemClock.uptimeMillis();
if(curTime - checkTime > GlobalInfo.mStatePeriod * 1000) {
checkTime = curTime;
@ -3419,7 +3548,7 @@ public class ServerManager extends Thread {
}
}
if(curTime - reportTime > GlobalInfo.mStatePeriod * 1000) {
if(curTime - reportTime > GlobalInfo.mStatePeriod * 1000 || needToNotifyDoorStatus) {
reportTime = curTime;
if(mWrite != null) {
byte[] message;
@ -3429,8 +3558,15 @@ public class ServerManager extends Thread {
if(!GlobalInfo.mDeviceStatusNormal)
replyStatus = PKT_STATUS_FAIL;
String[] dataArray = new String[1];
// SDK V3.7까지
// String[] dataArray = new String[1];
// dataArray[0] = getPaddingString("" + openStatus, DOOR_CONTROL_COMMAND_LENGTH);
// SDK V3.8
String[] dataArray = new String[2];
dataArray[0] = getPaddingString("" + openStatus, DOOR_CONTROL_COMMAND_LENGTH);
//int[] values = BaseService.mDCUManager.getReportValues(DCUManager.DCU_REPORT_TYPE_FIRESW);
String fireStatus = String.format("%d,%d", fireStatusValue[0], fireStatusValue[1]);
dataArray[1] = getPaddingString(fireStatus, FIRE_STATUS_LENGTH);
message = createClientMessage(COMMAND_TYPE_DEVICE_DOOR_REPORT, getMsgDeviceId(), replyStatus, dataArray);
sendPushMessage(message);
}

View File

@ -46,12 +46,13 @@ public class DoorControlTimeActivity extends BaseActivity {
private final int DEVICE_NAME_POPUP = 1;
private int modifyIdx = 0;
private static int INSERT_DATA_ROW = 3;
protected void refreshDoorControlTimeList() {
String[] timeList = GlobalInfo.mDoorControlTimeData.split(",");
LinearLayout parentLayout = findViewById(R.id.frameLayout2);
int viewCount = parentLayout.getChildCount();
if(viewCount > 3) {
parentLayout.removeViews(2, viewCount - 3);
if(viewCount > INSERT_DATA_ROW + 1) {
parentLayout.removeViews(INSERT_DATA_ROW, viewCount - INSERT_DATA_ROW - 1);
}
int offset = -60;
@ -155,7 +156,7 @@ public class DoorControlTimeActivity extends BaseActivity {
newLayout.addView(imgButton);
}
int insertIndex = 2; // 원하는 위치
int insertIndex = INSERT_DATA_ROW; // 원하는 위치
parentLayout.addView(newLayout, insertIndex);
}
@ -217,6 +218,26 @@ public class DoorControlTimeActivity extends BaseActivity {
}
ImageView doorcontroltimeuseoutingimage = (ImageView) findViewById(R.id.doorcontroltimeuseoutingimage);
doorcontroltimeuseoutingimage.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
if(GlobalInfo.mUseDoorControlTimeOuting == 0) {
doorcontroltimeuseoutingimage.setImageResource(R.drawable.toggle_pressed);
GlobalInfo.mUseDoorControlTimeOuting = 1;
}
else {
GlobalInfo.mUseDoorControlTimeOuting = 0;
doorcontroltimeuseoutingimage.setImageResource(R.drawable.toggle_nor);
}
}
});
if(GlobalInfo.mUseDoorControlTimeOuting == 0) {
doorcontroltimeuseoutingimage.setImageResource(R.drawable.toggle_nor);
} else {
doorcontroltimeuseoutingimage.setImageResource(R.drawable.toggle_pressed);
}
// Button button = (Button) findViewById(R.id.doorcontroltimesetimagebutton) ;
// button.setOnClickListener(new Button.OnClickListener() {

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/out_btn_pressed" /> <!-- pressed -->
<item android:drawable="@drawable/out_btn_nor" /> <!-- default -->
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/return_btn_pressed" /> <!-- pressed -->
<item android:drawable="@drawable/return_btn_nor" /> <!-- default -->
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -144,6 +144,50 @@
app:srcCompat="@drawable/toggle_pressed" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="94px"
android:background="@drawable/layout_border">
<TextView
android:layout_width="400px"
android:layout_height="150px"
android:layout_marginStart="40px"
android:layout_marginTop="23px"
android:fontFamily="@font/nanumbarungothic"
android:text="@string/mgt_system_door_control_time_use_outing_text"
android:textColor="#333333"
android:textSize="42px" />
<TextView
android:layout_width="386px"
android:layout_height="144px"
android:layout_marginStart="778px"
android:layout_marginTop="23px"
android:textAlignment="viewEnd"
android:fontFamily="@font/nanumbarungothic"
android:textColor="#666666"
android:textSize="42px" />
<ImageView
android:layout_width="19px"
android:layout_height="38px"
android:layout_marginStart="1217px"
android:layout_marginTop="27px"
app:srcCompat="@drawable/list_arrow_icon" />
<ImageView
android:id="@+id/doorcontroltimeuseoutingimage"
android:layout_width="105px"
android:layout_height="56px"
android:layout_marginStart="1135px"
android:layout_marginTop="20px"
app:srcCompat="@drawable/toggle_pressed" />
</FrameLayout>
<!-- <FrameLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="94px"-->

View File

@ -23,7 +23,7 @@
android:layout_marginStart="1104px"
android:layout_marginTop="20px"
android:visibility="visible"
app:srcCompat="@drawable/main_network_icon_nor" />
app:srcCompat="@drawable/main_network_icon_error" />
<ImageView
android:id="@+id/imageViewServerLink"
@ -32,7 +32,7 @@
android:layout_marginStart="1180px"
android:layout_marginTop="20px"
android:visibility="visible"
app:srcCompat="@drawable/main_server_icon_nor" />
app:srcCompat="@drawable/main_server_icon_error" />
<TextView
android:id="@+id/editDateTime"
@ -48,13 +48,15 @@
<TextView
android:id="@+id/version"
android:layout_width="161px"
android:layout_width="600px"
android:layout_height="37px"
android:layout_marginStart="405px"
android:layout_marginTop="30px"
android:fontFamily="@font/nanumbarungothicbold"
android:textColor="#CCCCCC"
android:alpha="1"
android:singleLine="true"
android:ellipsize="end"
android:textAlignment="textStart"
android:includeFontPadding="false"
android:textSize="32px" />
@ -92,6 +94,7 @@
android:layout_height="95px"
android:layout_marginStart="1145px"
android:layout_marginTop="481px"
android:alpha="0"
android:background="@drawable/admin_icon_btn" />
<Button
@ -263,6 +266,101 @@
</FrameLayout>
<FrameLayout
android:id="@+id/doorcontrolframeouting"
android:layout_width="1040px"
android:layout_height="460px"
android:layout_marginLeft="120px"
android:layout_marginTop="80px"
android:visibility="invisible"
android:background="@drawable/panel_shape_door_control"
>
<TextView
android:id="@+id/doorcontroltimeoutingtext"
android:layout_width="700px"
android:layout_height="110px"
android:layout_marginTop="90px"
android:gravity="center_horizontal"
android:fontFamily="@font/pretendardbold"
android:text=""
android:textStyle="bold"
android:textColor="#ffe600"
android:textSize="84px" />
<TextView
android:id="@+id/doorcontrolmsgoutingtext"
android:layout_width="700px"
android:layout_height="224px"
android:layout_marginTop="210px"
android:gravity="center_horizontal"
android:fontFamily="@font/pretendardsemibold"
android:text="현재는 출입문\n 개방시간입니다."
android:textColor="#ffffff"
android:textSize="48px" />
<TextView
android:id="@+id/doorcontroltimeoutingtext2"
android:layout_width="700px"
android:layout_height="220px"
android:layout_marginTop="80px"
android:gravity="center_horizontal"
android:fontFamily="@font/pretendardbold"
android:text="Out on\n business"
android:textStyle="bold"
android:lineSpacingMultiplier="0.8"
android:textColor="#ffe600"
android:visibility="invisible"
android:textSize="84px" />
<TextView
android:id="@+id/doorcontrolmsgoutingtext2"
android:layout_width="700px"
android:layout_height="112px"
android:layout_marginTop="270px"
android:gravity="center_horizontal"
android:fontFamily="@font/pretendardsemibold"
android:text="현재 외출중입니다."
android:visibility="invisible"
android:textColor="#ffffff"
android:textSize="48px" />
<Button
android:id="@+id/outbutton"
android:layout_width="296px"
android:layout_height="352px"
android:layout_marginStart="692px"
android:layout_marginTop="54px"
android:fontFamily="@font/nanumbarungothicbold"
android:textColor="#ffffff"
android:paddingTop="80px"
android:textSize="40px"
android:visibility="invisible"
android:text = "@string/main_outing_out"
android:background="@drawable/out_btn"/>
<Button
android:id="@+id/returnbutton"
android:layout_width="296px"
android:layout_height="352px"
android:layout_marginStart="692px"
android:layout_marginTop="54px"
android:fontFamily="@font/nanumbarungothicbold"
android:textColor="#ffffff"
android:paddingTop="80px"
android:textSize="40px"
android:visibility="invisible"
android:text = "@string/main_outing_return"
android:background="@drawable/return_btn"/>
</FrameLayout>
</FrameLayout>
<!--

View File

@ -37,12 +37,16 @@
<string name="main_verify_fail">인증 실패</string>
<string name="main_network_success">네트워크 정상</string>
<string name="main_network_fail">네트워크 오류</string>
<string name="main_outing_change">로 전환되었습니다.</string>
<string name="main_attendance_in">출근</string>
<string name="main_attendance_out">퇴근</string>
<string name="main_attendance_mode_in">출근모드\n입니다.</string>
<string name="main_attendance_mode_out">퇴근모드\n입니다.</string>
<string name="main_outing_out">외출하기</string>
<string name="main_outing_return">복귀하기</string>
<string name="title_activity_login">Sign in</string>
<string name="prompt_email">Email</string>
<string name="prompt_password">Password</string>
@ -256,6 +260,7 @@
<string name="mgt_system_door_control_time_use_text">"개방시간 사용"</string>
<string name="mgt_system_door_control_time_use_holiday_text">"주말 및 휴무일 개방"</string>
<string name="mgt_system_door_control_time_use_outing_text">"외출/복귀 모드 사용"</string>
<string name="mgt_system_door_control_time_set_text">"설정시간"</string>
<string name="mgt_system_door_control_time_add_text">"시간 추가"</string>