|
@@ -0,0 +1,857 @@
|
|
|
|
|
+package com.artncore.WallPadDataMgr;
|
|
|
|
|
+
|
|
|
|
|
+import android.content.ContentValues;
|
|
|
|
|
+import android.content.Context;
|
|
|
|
|
+import android.database.Cursor;
|
|
|
|
|
+import android.util.Log;
|
|
|
|
|
+
|
|
|
|
|
+import com.util.LogUtil;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Calendar;
|
|
|
|
|
+import java.util.GregorianCalendar;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+public class WallpadFaceIDRegData extends wallpaddbmgr
|
|
|
|
|
+{
|
|
|
|
|
+ private final static String TAG = "WallpadFaceIDRegData";
|
|
|
|
|
+
|
|
|
|
|
+ public List<FaceIDDataClass> SyncData = new ArrayList<FaceIDDataClass>();
|
|
|
|
|
+
|
|
|
|
|
+ private final String INIT_HEX = "00000000";
|
|
|
|
|
+ private final String INIT_DATE = "0000:00:00:00:00:00";
|
|
|
|
|
+
|
|
|
|
|
+ private final int USED_FALSE = 0;
|
|
|
|
|
+ private final int USED_TRUE = 1;
|
|
|
|
|
+
|
|
|
|
|
+ private final int MAX_COUNT = 255;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 안면인식ID 데이터 포멧 클래스
|
|
|
|
|
+ */
|
|
|
|
|
+ public static class FaceIDDataClass
|
|
|
|
|
+ {
|
|
|
|
|
+ /** 키 일련번호 - 범위 (1~10) */
|
|
|
|
|
+ public int id;
|
|
|
|
|
+
|
|
|
|
|
+ /** 안면인식ID 정보 */
|
|
|
|
|
+ public String FaceID;
|
|
|
|
|
+
|
|
|
|
|
+ /** 등록 일자 */
|
|
|
|
|
+ public Calendar RegDateCal;
|
|
|
|
|
+ /** 최종사용 일자 */
|
|
|
|
|
+ public Calendar LastUseDateCal;
|
|
|
|
|
+ /** 닉네임 */
|
|
|
|
|
+ public String Nickname;
|
|
|
|
|
+
|
|
|
|
|
+ public FaceIDDataClass()
|
|
|
|
|
+ {
|
|
|
|
|
+ id = -1;
|
|
|
|
|
+ FaceID = null;
|
|
|
|
|
+ RegDateCal = null;
|
|
|
|
|
+ LastUseDateCal = null;
|
|
|
|
|
+ Nickname = null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public String ToDebugString()
|
|
|
|
|
+ {
|
|
|
|
|
+ String retStr =
|
|
|
|
|
+ "==========================\r\n" +
|
|
|
|
|
+ "id - " + id + "\r\n" +
|
|
|
|
|
+ "==========================\r\n" +
|
|
|
|
|
+ "FaceID : " + FaceID + "\r\n" +
|
|
|
|
|
+
|
|
|
|
|
+ "RegDateCal : " + RegDateCal.get(Calendar.YEAR) + "-" + (int)(RegDateCal.get(Calendar.MONTH)+1) + "-" + RegDateCal.get(Calendar.DAY_OF_MONTH) + " " +
|
|
|
|
|
+ RegDateCal.get(Calendar.HOUR_OF_DAY) + ":" + RegDateCal.get(Calendar.MINUTE) + ":" + RegDateCal.get(Calendar.SECOND) + "\r\n" +
|
|
|
|
|
+
|
|
|
|
|
+ "LastUseDateCal : " + LastUseDateCal.get(Calendar.YEAR) + "-" + (int)(LastUseDateCal.get(Calendar.MONTH)+1) + "-" + LastUseDateCal.get(Calendar.DAY_OF_MONTH) + " " +
|
|
|
|
|
+ LastUseDateCal.get(Calendar.HOUR_OF_DAY) + ":" + LastUseDateCal.get(Calendar.MINUTE) + ":" + LastUseDateCal.get(Calendar.SECOND) + "\r\n" +
|
|
|
|
|
+
|
|
|
|
|
+ "Nickname : " + Nickname + "\r\n" +
|
|
|
|
|
+ "==========================\r\n\r\n";
|
|
|
|
|
+ return retStr;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 본 클래스 생성자
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param ctx - (Context)
|
|
|
|
|
+ */
|
|
|
|
|
+ public WallpadFaceIDRegData(Context ctx)
|
|
|
|
|
+ {
|
|
|
|
|
+ super(ctx);
|
|
|
|
|
+
|
|
|
|
|
+ //if(wdb!=null) wdb.execSQL("DROP TABLE " + FaceIDRegTBL);
|
|
|
|
|
+
|
|
|
|
|
+ if (!CheckTableExist(FaceIDRegTBL))
|
|
|
|
|
+ {
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.i(TAG, "[Create] CreateFaceIDRegDB");
|
|
|
|
|
+ if(wdb!=null) wdb.execSQL(CreateFaceIDRegDB);
|
|
|
|
|
+
|
|
|
|
|
+ //yjyoon
|
|
|
|
|
+ boolean bRet = InitInsert();
|
|
|
|
|
+ //boolean bRet = TestInitInsert();
|
|
|
|
|
+
|
|
|
|
|
+ Log.i(TAG, "[Create] InitInsert = " + bRet);
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.e(TAG, "[Create] Exception Error !!!");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 초기화 데이터 기입
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (boolean) 성공여부 true : 성공 , false : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean InitInsert()
|
|
|
|
|
+ {
|
|
|
|
|
+ for(int i=0 ; i<255 ; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ ContentValues values = GetInitValues((int)(i+1));
|
|
|
|
|
+ if(wdb!=null)
|
|
|
|
|
+ {
|
|
|
|
|
+ long ret = wdb.insert(FaceIDRegTBL, null, values);
|
|
|
|
|
+ if(ret < 0) return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 초기화 데이터 기입
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (boolean) 성공여부 true : 성공 , false : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean TestInitInsert()
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.v("yjyoon", "TestInitInsert()");
|
|
|
|
|
+ for(int i=0 ; i<255 ; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ ContentValues values;
|
|
|
|
|
+ if (i < 10)
|
|
|
|
|
+ values = TestGetInitValues((int)(i+1));
|
|
|
|
|
+ else
|
|
|
|
|
+ values = GetInitValues((int)(i+1));
|
|
|
|
|
+
|
|
|
|
|
+ if(wdb!=null)
|
|
|
|
|
+ {
|
|
|
|
|
+ long ret = wdb.insert(FaceIDRegTBL, null, values);
|
|
|
|
|
+ if(ret < 0) return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 초기화 ContentValues 기입
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param id - (int) 초기화할 Id
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (ContentValues) 초기화포멧으로 기입된 ContentValues
|
|
|
|
|
+ */
|
|
|
|
|
+ private ContentValues GetInitValues(int id)
|
|
|
|
|
+ {
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ values.put("id" , (int)(id));
|
|
|
|
|
+ values.put("Used" , USED_FALSE);
|
|
|
|
|
+ values.put("FaceID" , "00");
|
|
|
|
|
+ values.put("RegDate" , INIT_DATE);
|
|
|
|
|
+ values.put("LastUseDate" , INIT_DATE);
|
|
|
|
|
+ values.put("NickName" , "");
|
|
|
|
|
+
|
|
|
|
|
+ return values;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 초기화 ContentValues 기입
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param id - (int) 초기화할 Id
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (ContentValues) 초기화포멧으로 기입된 ContentValues
|
|
|
|
|
+ */
|
|
|
|
|
+ private ContentValues TestGetInitValues(int id)
|
|
|
|
|
+ {
|
|
|
|
|
+ String nick = "";
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ values.put("id" , (int)(id));
|
|
|
|
|
+ if (id == 8 || id == 9) {
|
|
|
|
|
+ values.put("Used" , USED_FALSE);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ values.put("Used" , USED_TRUE);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ values.put("FaceID" , String.format("%02X", id));
|
|
|
|
|
+ values.put("RegDate" , String.format("2022:06:16:11:30:%d", id));
|
|
|
|
|
+ values.put("LastUseDate" , String.format("2022:06:16:12:30:%d", id));
|
|
|
|
|
+ if (id == 3)
|
|
|
|
|
+ nick = "슈퍼맨";
|
|
|
|
|
+ else if (id == 4)
|
|
|
|
|
+ nick = "울트라맨";
|
|
|
|
|
+ values.put("NickName" , nick);
|
|
|
|
|
+
|
|
|
|
|
+ return values;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 빈 ID 를 찾는다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >0 : 성공, <=0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int GetEmptyId()
|
|
|
|
|
+ {
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used from " + FaceIDRegTBL + ";", null);
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ int Used = 0;
|
|
|
|
|
+ while (cursor.moveToNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_FALSE)
|
|
|
|
|
+ {
|
|
|
|
|
+ int id = cursor.getInt(0);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ Log.e(TAG, "[GetEmptyId] Exception Error !!!");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 데이터를 등록한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param id - (byte) 등록할 ID (*일련번호)
|
|
|
|
|
+ * @param FaceID - (byte) 등록할 FaceID
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int Register(byte id, byte FaceID)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. id
|
|
|
|
|
+ if((id & 0xFF) < 1 || (id & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - id Out Of Range !!! (id:" + id + ")");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 1.2. FaceID
|
|
|
|
|
+ if((FaceID & 0xFF) < 1 || (FaceID & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - FaceID Out Of Range !!! (FaceID:" + FaceID + ")");
|
|
|
|
|
+ return -2;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 기존 등록 데이터에서 FaceID 존재유무 확인
|
|
|
|
|
+ int ret = 0;
|
|
|
|
|
+ int ExistId = isExist(FaceID);
|
|
|
|
|
+ if(ExistId > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 존재할시 삭제
|
|
|
|
|
+ Log.w(TAG, "[Update] isExist - Find !!! (ExistId:" + ExistId + ", FaceID:" + String.format("%02X", FaceID) + ")");
|
|
|
|
|
+ ret = UnRegister((byte)ExistId);
|
|
|
|
|
+ Log.w(TAG, "[Update] isExist - Find !!! UnRegister - ret:" + ret);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. Make values
|
|
|
|
|
+ String whereClause = "id = " + id;
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ values.put("Used" , USED_TRUE);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("FaceID" , String.format("%02X", FaceID));
|
|
|
|
|
+
|
|
|
|
|
+ Calendar cal = new GregorianCalendar();
|
|
|
|
|
+ String DateStr = cal.get(Calendar.YEAR) + ":" +
|
|
|
|
|
+ (int)(cal.get(Calendar.MONTH)+1) + ":"+
|
|
|
|
|
+ cal.get(Calendar.DAY_OF_MONTH) + ":" +
|
|
|
|
|
+ cal.get(Calendar.HOUR_OF_DAY) + ":" +
|
|
|
|
|
+ cal.get(Calendar.MINUTE) + ":" +
|
|
|
|
|
+ cal.get(Calendar.SECOND);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("RegDate" , DateStr);
|
|
|
|
|
+ values.put("LastUseDate" , DateStr);
|
|
|
|
|
+ values.put("Nickname" , "");
|
|
|
|
|
+
|
|
|
|
|
+ // 4. update
|
|
|
|
|
+ ret = wdb.update(FaceIDRegTBL, values, whereClause, null);
|
|
|
|
|
+
|
|
|
|
|
+ if(ret < 0) return -10;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 데이터를 등록한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param total - (byte)
|
|
|
|
|
+ * @param FaceID - (ArrayList<Byte>) 등록할 FaceID
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int RegisterAll (byte total, ArrayList<Byte> FaceID)
|
|
|
|
|
+ {
|
|
|
|
|
+ if ((total & 0xFF) < 1 || (total & 0xFF) > 255) {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - id Out Of Range !!! (total:" + total + ")");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ byte faceId;
|
|
|
|
|
+ for (int i = 0; i < (total & 0xFF); i++) {
|
|
|
|
|
+
|
|
|
|
|
+ faceId = FaceID.get(i) ;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.2. FaceID
|
|
|
|
|
+ if ((faceId & 0xFF) < 0 || (faceId & 0xFF) > 255) {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - FaceID Out Of Range !!! (FaceID:" + faceId + ")");
|
|
|
|
|
+ return -2;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ((faceId & 0xFF) == 0) {
|
|
|
|
|
+ // 현관카메라에서 FaceID Array[50]을 전달. FaceID는 index+1 값으로 value에 저장.
|
|
|
|
|
+ // value = 0 이면 해당 index + 1 FaceID가 삭제되어 없다는 의미.
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 기존 등록 데이터에서 FaceID 존재유무 확인
|
|
|
|
|
+ int ret = 0;
|
|
|
|
|
+ int ExistId = isExist(faceId);
|
|
|
|
|
+ if (ExistId > 0) {
|
|
|
|
|
+
|
|
|
|
|
+ // 존재할시 삭제
|
|
|
|
|
+ //Log.w(TAG, "[Update] isExist - Find !!! (ExistId:" + ExistId + ", FaceID:" + String.format("%02X", faceId) + ")");
|
|
|
|
|
+ //ret = UnRegister((byte) ExistId);
|
|
|
|
|
+ //Log.w(TAG, "[Update] isExist - Find !!! UnRegister - ret:" + ret);
|
|
|
|
|
+
|
|
|
|
|
+ // yjyoon. 기존 등록 데이터가 있을 경우 continue.
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ int id = ExistId > 0 ? ExistId : GetEmptyId();
|
|
|
|
|
+
|
|
|
|
|
+ // 3. Make values
|
|
|
|
|
+ String whereClause = "id = " + id;
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ values.put("Used", USED_TRUE);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("FaceID", String.format("%02X", faceId));
|
|
|
|
|
+
|
|
|
|
|
+ Calendar cal = new GregorianCalendar();
|
|
|
|
|
+ String DateStr = cal.get(Calendar.YEAR) + ":" +
|
|
|
|
|
+ (int) (cal.get(Calendar.MONTH) + 1) + ":" +
|
|
|
|
|
+ cal.get(Calendar.DAY_OF_MONTH) + ":" +
|
|
|
|
|
+ cal.get(Calendar.HOUR_OF_DAY) + ":" +
|
|
|
|
|
+ cal.get(Calendar.MINUTE) + ":" +
|
|
|
|
|
+ cal.get(Calendar.SECOND);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("RegDate", DateStr);
|
|
|
|
|
+ values.put("LastUseDate", DateStr);
|
|
|
|
|
+ values.put("Nickname", "");
|
|
|
|
|
+
|
|
|
|
|
+// // 4. insert
|
|
|
|
|
+// if(wdb.insert(FaceIDRegTBL, null, values) < 0)
|
|
|
|
|
+// return -10;
|
|
|
|
|
+
|
|
|
|
|
+ // 4. update
|
|
|
|
|
+ ret = wdb.update(FaceIDRegTBL, values, whereClause, null);
|
|
|
|
|
+
|
|
|
|
|
+ if(ret < 0) return -10;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 데이터를 삭제한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param id - (byte) 등록 삭제할 ID (*일련번호)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int UnRegister(byte id)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. id
|
|
|
|
|
+ if((id & 0xFF) < 1 || (id & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - id Out Of Range !!! (id:" + id + ")");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. Make values
|
|
|
|
|
+ ContentValues values = GetInitValues(id & 0xFF);
|
|
|
|
|
+ String whereClause = "id = " + (id & 0xFF);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. update
|
|
|
|
|
+ int ret = wdb.update(FaceIDRegTBL, values, whereClause, null);
|
|
|
|
|
+ if(ret < 0) return -10;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 저장된 모든 FaceID 데이터를 삭제한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int UnRegisterAll()
|
|
|
|
|
+ {
|
|
|
|
|
+ int ret = -1;
|
|
|
|
|
+ for(int i=0 ; i<255 ; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ ret = UnRegister((byte)(i+1));
|
|
|
|
|
+ if(ret < 0) return -100 + -((int)i);
|
|
|
|
|
+ }
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 저장된 FaceID 를 기준으로 Id를 찾는다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param FaceID - (byte) 찾을 FaceID
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int FindId(byte FaceID)
|
|
|
|
|
+ {
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used, FaceID from " + FaceIDRegTBL + ";", null);
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ int Used = 0;
|
|
|
|
|
+ String IdStr = String.format("%02X", FaceID);
|
|
|
|
|
+ while (cursor.moveToNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_TRUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(IdStr != null && IdStr.equals(cursor.getString(2) ) )
|
|
|
|
|
+ {
|
|
|
|
|
+ int id = cursor.getInt(0);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ Log.e(TAG, "[FindId] Exception Error !!!");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 최근사용일자 갱신
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param id - (byte) 갱신할 ID (*일련번호)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int UpdateLastUseDate(byte id)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. id
|
|
|
|
|
+ if((id & 0xFF) < 1 || (id & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[Update] Param - id Out Of Range !!! (id:" + id + ")");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. Make values
|
|
|
|
|
+ String whereClause = "id = " + (id & 0xFF);
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ Calendar cal = new GregorianCalendar();
|
|
|
|
|
+ String DateStr = cal.get(Calendar.YEAR) + ":" +
|
|
|
|
|
+ (int)(cal.get(Calendar.MONTH)+1) + ":"+
|
|
|
|
|
+ cal.get(Calendar.DAY_OF_MONTH) + ":" +
|
|
|
|
|
+ cal.get(Calendar.HOUR_OF_DAY) + ":" +
|
|
|
|
|
+ cal.get(Calendar.MINUTE) + ":" +
|
|
|
|
|
+ cal.get(Calendar.SECOND);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("LastUseDate" , DateStr);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. update
|
|
|
|
|
+ int ret = wdb.update(FaceIDRegTBL, values, whereClause, null);
|
|
|
|
|
+
|
|
|
|
|
+ if(ret < 0) return -10;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 를 기준으로 등록 존재 여부를 체크한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param FaceID - (byte) 찾을 FaceID
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=1 : 성공 (등록된 id 반환), =<0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int isExist(byte FaceID)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. FaceID
|
|
|
|
|
+ if((FaceID & 0xFF) < 1 || (FaceID & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[isExist] Param - FaceID Out Of Range !!! (FaceID:" + FaceID + ")");
|
|
|
|
|
+ return -10;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. Find
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used, FaceID from " + FaceIDRegTBL + ";", null);
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ int Used = 0;
|
|
|
|
|
+ String nIdStr = String.format("%02X", FaceID);
|
|
|
|
|
+ String IdStr = null;
|
|
|
|
|
+ while (cursor.moveToNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_TRUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ IdStr = cursor.getString(2);
|
|
|
|
|
+ if(nIdStr != null && IdStr != null && nIdStr.equals(IdStr))
|
|
|
|
|
+ {
|
|
|
|
|
+ int id = cursor.getInt(0);
|
|
|
|
|
+ return id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+
|
|
|
|
|
+ return -1; // Not Find
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ Log.e(TAG, "[isExist] Exception Error");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 명칭을 가져온다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param FaceID - (byte) 찾을 FaceID
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (String) - null : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public String getNickname(byte FaceID)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. FaceID
|
|
|
|
|
+ if((FaceID & 0xFF) < 1 || (FaceID & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[getNickname] Param - FaceID Out Of Range !!! (FaceID:" + FaceID + ")");
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. Find
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used, FaceID, Nickname from " + FaceIDRegTBL + ";", null);
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ int Used = 0;
|
|
|
|
|
+ String nIdStr = String.format("%02X", FaceID);
|
|
|
|
|
+ String IdStr = null;
|
|
|
|
|
+ while (cursor.moveToNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_TRUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ IdStr = cursor.getString(2);
|
|
|
|
|
+ if(nIdStr != null && IdStr != null && nIdStr.equals(IdStr))
|
|
|
|
|
+ {
|
|
|
|
|
+ String id = cursor.getString(3);
|
|
|
|
|
+ return id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+
|
|
|
|
|
+ return null; // Not Find
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ Log.e(TAG, "[getNickname] Exception Error");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * FaceID 명칭을 설정한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param FaceID - (byte) 명칭을 설정할 FaceID
|
|
|
|
|
+ * @param NewNickname - (String) 설정할 명칭
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (int) - >=0 : 성공, <0 : 실패
|
|
|
|
|
+ */
|
|
|
|
|
+ public int SetNickname(byte FaceID, String NewNickname)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1. Param Check
|
|
|
|
|
+ // 1.1. FaceID
|
|
|
|
|
+ if((FaceID & 0xFF) < 1 || (FaceID & 0xFF) > 255)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[SetNickname] Param - FaceID Out Of Range !!! (FaceID:" + FaceID + ")");
|
|
|
|
|
+ return -2;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 1.2. NewNickname
|
|
|
|
|
+ if(NewNickname == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ Log.w(TAG, "[SetNickname] Param - NewNickname is NULL !!!");
|
|
|
|
|
+ return -3;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 기존 등록 데이터에서 FaceID 존재유무 확인
|
|
|
|
|
+ int ret = 0;
|
|
|
|
|
+ int ExistId = isExist(FaceID);
|
|
|
|
|
+ if(ExistId > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 존재할시 삭제
|
|
|
|
|
+ Log.w(TAG, "[SetNickname] isExist - Find !!! (ExistId:" + ExistId + ", FaceID:" + String.format("%02X", FaceID) + ")");
|
|
|
|
|
+ ret = UnRegister((byte)ExistId);
|
|
|
|
|
+ Log.w(TAG, "[SetNickname] isExist - Find !!! UnRegister - ret:" + ret);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. Make values
|
|
|
|
|
+ String whereClause = "id = " + ExistId;
|
|
|
|
|
+ ContentValues values = new ContentValues();
|
|
|
|
|
+
|
|
|
|
|
+ values.put("Used" , USED_TRUE);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("FaceID" , String.format("%02X", FaceID));
|
|
|
|
|
+
|
|
|
|
|
+ Calendar cal = new GregorianCalendar();
|
|
|
|
|
+ String DateStr = cal.get(Calendar.YEAR) + ":" +
|
|
|
|
|
+ (int)(cal.get(Calendar.MONTH)+1) + ":"+
|
|
|
|
|
+ cal.get(Calendar.DAY_OF_MONTH) + ":" +
|
|
|
|
|
+ cal.get(Calendar.HOUR_OF_DAY) + ":" +
|
|
|
|
|
+ cal.get(Calendar.MINUTE) + ":" +
|
|
|
|
|
+ cal.get(Calendar.SECOND);
|
|
|
|
|
+
|
|
|
|
|
+ values.put("RegDate" , DateStr);
|
|
|
|
|
+ values.put("LastUseDate" , DateStr);
|
|
|
|
|
+ values.put("Nickname" , NewNickname);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. update
|
|
|
|
|
+ ret = wdb.update(FaceIDRegTBL, values, whereClause, null);
|
|
|
|
|
+
|
|
|
|
|
+ if(ret < 0) return -10;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 등록되어있는 FaceID 데이터 List 를 반환한다.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return (List<FaceIDDataClass>) 등록 데이터 List
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<FaceIDDataClass> GetFaceIDRegData()
|
|
|
|
|
+ {
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used, FaceID, RegDate, LastUseDate, Nickname from " + FaceIDRegTBL + " ORDER BY FaceID ASC;", null);
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ int Used = 0;
|
|
|
|
|
+ String RegDateStr = null;
|
|
|
|
|
+ String LastUseDateStr = null;
|
|
|
|
|
+ int testI = 0;
|
|
|
|
|
+ while (cursor.moveToNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_TRUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ FaceIDDataClass getdata = new FaceIDDataClass();
|
|
|
|
|
+
|
|
|
|
|
+ getdata.id = cursor.getInt(0);
|
|
|
|
|
+ getdata.FaceID = cursor.getString(2);
|
|
|
|
|
+ RegDateStr = cursor.getString(3);
|
|
|
|
|
+ LastUseDateStr = cursor.getString(4);
|
|
|
|
|
+ getdata.Nickname = cursor.getString(5);
|
|
|
|
|
+
|
|
|
|
|
+ testI++;
|
|
|
|
|
+
|
|
|
|
|
+ String[] retData = null;
|
|
|
|
|
+
|
|
|
|
|
+ retData = RegDateStr.split(":");
|
|
|
|
|
+ if(retData != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(retData.length >= 6)
|
|
|
|
|
+ {
|
|
|
|
|
+ getdata.RegDateCal = new GregorianCalendar();
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.YEAR, Integer.parseInt(retData[0]));
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.MONTH, Integer.parseInt(retData[1])-1);
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(retData[2]));
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(retData[3]));
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.MINUTE, Integer.parseInt(retData[4]));
|
|
|
|
|
+ getdata.RegDateCal.set(Calendar.SECOND, Integer.parseInt(retData[5]));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ retData = LastUseDateStr.split(":");
|
|
|
|
|
+ if(retData != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(retData.length >= 6)
|
|
|
|
|
+ {
|
|
|
|
|
+ getdata.LastUseDateCal = new GregorianCalendar();
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.YEAR, Integer.parseInt(retData[0]));
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.MONTH, Integer.parseInt(retData[1])-1);
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(retData[2]));
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(retData[3]));
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.MINUTE, Integer.parseInt(retData[4]));
|
|
|
|
|
+ getdata.LastUseDateCal.set(Calendar.SECOND, Integer.parseInt(retData[5]));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ SyncData.add(getdata);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (RuntimeException re) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, re);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
|
+ {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ SyncData.clear();
|
|
|
|
|
+ Log.e(TAG, "[GetFaceIDRegData] Exception Error");
|
|
|
|
|
+ //e.printStackTrace();
|
|
|
|
|
+ LogUtil.errorLogInfo("", TAG, e);
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ return SyncData;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param in
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private static String GetByteStringFormat(byte [] in)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(in == null) return null;
|
|
|
|
|
+ if(in.length != 4) return null;
|
|
|
|
|
+
|
|
|
|
|
+ return String.format("%02X%02X%02X%02X", in[0], in[1], in[2], in[3]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public String ToDebugFaceIDData(List<FaceIDDataClass> data)
|
|
|
|
|
+ {
|
|
|
|
|
+ String retstr;
|
|
|
|
|
+
|
|
|
|
|
+ retstr = "-----------------------------\r\n";
|
|
|
|
|
+ retstr += "FaceIDData\r\n";
|
|
|
|
|
+ retstr += "-----------------------------\r\n";
|
|
|
|
|
+
|
|
|
|
|
+ if(data.isEmpty())
|
|
|
|
|
+ {
|
|
|
|
|
+ retstr += "Empty ...\r\n";
|
|
|
|
|
+ retstr += "-----------------------------\r\n";
|
|
|
|
|
+ return retstr;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ for(int i=0 ; i<data.size() ; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ FaceIDDataClass getData = data.get(i);
|
|
|
|
|
+ if(getData != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ retstr += getData.ToDebugString();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ retstr += "-----------------------------\r\n";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return retstr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public int GetCount() {
|
|
|
|
|
+ Cursor cursor = wdb.rawQuery("select id, Used from " + FaceIDRegTBL + ";", null);
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ int i = 0;
|
|
|
|
|
+ int Used;
|
|
|
|
|
+ while(cursor.moveToNext()){
|
|
|
|
|
+ Used = cursor.getInt(1);
|
|
|
|
|
+ if(Used == USED_TRUE)
|
|
|
|
|
+ {
|
|
|
|
|
+ i++;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return i;
|
|
|
|
|
+ } catch (RuntimeException var6) {
|
|
|
|
|
+ LogUtil.errorLogInfo("", "WallpadSmartKeyRegData", var6);
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ } catch (Exception var7) {
|
|
|
|
|
+ cursor.close();
|
|
|
|
|
+ Log.e("WallpadSmartKeyRegData", "[GetCount] Exception Error !!!");
|
|
|
|
|
+ LogUtil.errorLogInfo("", "WallpadSmartKeyRegData", var7);
|
|
|
|
|
+ return -100;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|