From 221c873ee48ed5f44680578d32b0bbf19fd9e4c1 Mon Sep 17 00:00:00 2001 From: weimingfei <fei_gaming@sina.com> Date: 星期六, 18 十月 2025 15:23:59 +0800 Subject: [PATCH] 钥匙柜 --- keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java | 330 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 273 insertions(+), 57 deletions(-) diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java index e1e7a17..fcac3d4 100644 --- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java +++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java @@ -8,10 +8,15 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.hardware.Camera; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.text.SpannableString; +import android.text.Spanned; import android.text.TextUtils; +import android.text.style.TextAppearanceSpan; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; @@ -19,6 +24,7 @@ import android.view.ViewGroup; import android.widget.PopupWindow; import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -38,14 +44,21 @@ import com.doumee.keyCabinet.BuildConfig; import com.doumee.keyCabinet.base.BannerPicResponsePara; import com.doumee.keyCabinet.bean.FaceUserBean; +import com.doumee.keyCabinet.bean.LoginBean; import com.doumee.keyCabinet.databinding.MainActivityBinding; import com.doumee.keyCabinet.event.GetFacesEvent; +import com.doumee.keyCabinet.event.HeartEvent; +import com.doumee.keyCabinet.event.KeyDoorEvent; +import com.doumee.keyCabinet.event.KeyResultEvent; +import com.doumee.keyCabinet.event.KeyStatusListener; +import com.doumee.keyCabinet.event.OpenGridEvent; import com.doumee.keyCabinet.event.ReLoginEvent; import com.doumee.keyCabinet.event.TimeClockEvent; import com.doumee.keyCabinet.ui.face.ActivationActivity; import com.doumee.keyCabinet.ui.face.FaceActivity; import com.doumee.keyCabinet.ui.guide.GuideActivity; import com.doumee.keyCabinet.ui.keyCabinet.ChangeUrlActivity; +import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity; import com.doumee.keyCabinet.ui.keyCabinet.ManageLoginActivity; import com.doumee.keyCabinet.ui.service.FaceUpdateService; import com.doumee.keyCabinet.ui.service.HeartbeatService; @@ -64,6 +77,9 @@ import com.doumee.keyCabinet.utils.face.ImportFileManager; import com.doumee.keyCabinet.utils.face.RegisterConfigUtils; import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig; +import com.doumee.keyCabinet.utils.i485.SerialPortModel; +import com.doumee.keyCabinet.utils.i485.SerialPortReadObserver; +import com.doumee.keyCabinet.utils.i485.SportUtils; import com.doumee.keyCabinet.utils.update.PermissionUtils; import com.doumee.keyCabinet.utils.update.PermissiondDialog; import com.doumee.keyCabinet.utils.update.UpdateUtil; @@ -84,12 +100,15 @@ import com.example.datalibrary.view.PreviewTexture; import com.yanzhenjie.permission.runtime.Permission; import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Logger; import org.greenrobot.eventbus.Subscribe; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Random; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executors; @@ -130,15 +149,15 @@ if(!isFinishing()){ switch (msg.what) { case 0: - initM(); + //initM(); TimeUtils.updateTimeUi(getVM().dayObs, getVM().timeObs); handler.sendEmptyMessageDelayed(0, 1000); EventBus.getDefault().post(new TimeClockEvent()); - if (isDBLoad && isNeedUpdateFace && !isUpdatingFace) { + /*if (isDBLoad && isNeedUpdateFace && !isUpdatingFace) { isNeedUpdateFace = false; getVM().getFaceLD(); } - getVM().upBraceletLog(); + getVM().upBraceletLog();*/ case 2: getVM().resetReq(); break; @@ -155,19 +174,21 @@ @Override public void initView(@Nullable Bundle savedInstanceState) { - //isToGuild = true; + isAddCountTimer = false; SpUtil.initWH(this); normalConfig(); getDB().setModel(getVM()); //initRGBCheck(); + handler.sendEmptyMessageDelayed(0, 1000); //鍚姩蹇冭烦 Intent intent = new Intent(MainActivity.this, HeartbeatService.class); startService(intent); //鍚姩鏇存柊浜鸿劯 Intent intent2 = new Intent(MainActivity.this, FaceUpdateService.class); startService(intent2); - //getPermission(); - //getDB().tvName.setText(String.format(getString(R.string.main_name),MApplication.getConfigBean().getName(), LMobileInfo.getDeviceUniqueId())); + getPermission(); + Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId()); + initPort(); } private void initM(){ @@ -225,6 +246,44 @@ } } }); + getDB().tv1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //绠$悊鍛樼櫥褰� + if(lastDownTime1!=null){ + if(System.currentTimeMillis()-lastDownTime1>1000){ + downCount1=0; + } + } + lastDownTime1 = System.currentTimeMillis(); + downCount1++; + System.out.println(); + Timber.tag("==>").d(""+downCount1); + if(downCount1>4) { + downCount1=0; + lastDownTime1=null; + startActivity(ManageLoginActivity.class); + } + } + }); + getDB().tvId.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //鏇存敼url + if(lastDownTime2!=null){ + if(System.currentTimeMillis()-lastDownTime2>1000){ + downCount2=0; + } + } + lastDownTime2 = System.currentTimeMillis(); + downCount2++; + if(downCount2>4) { + downCount2=0; + lastDownTime2=null; + startActivity(ChangeUrlActivity.class); + } + } + }); upErrInfo(); getVM().devHeart(); BraceletLogUtils.saveLog("app鎵撳紑"); @@ -273,45 +332,26 @@ @Override protected void doRegister(int type, ActionEventData data) { switch (type){ - case 1: - { - //绠$悊鍛樼櫥褰� - if(lastDownTime1!=null){ - if(System.currentTimeMillis()-lastDownTime1>1000){ - downCount1=0; - } - } - lastDownTime1 = System.currentTimeMillis(); - downCount1++; - if(downCount1>4) { - downCount1=0; - lastDownTime1=null; - startActivity(ManageLoginActivity.class); - } - } - break; case 2: case 3: - Bundle b = new Bundle(); - b.putString("flag",type==2?"0":"1"); - startActivity(FaceActivity.class,b); + /*tipDownCount = 10; + isShowTip = true; + getDB().tvDjs.setText(tipDownCount+"s"); + getDB().tvTip21.setText(getTipText("AC101"), TextView.BufferType.SPANNABLE); + getDB().clTip.setVisibility(View.VISIBLE);*/ + //鏍¢獙鏄惁鐧诲綍 + if(MApplication.getConfigBean().getId()==null){ + Toast.makeText(mContext, "璁惧鏈坊鍔狅紝鏃犳硶鎿嶄綔", Toast.LENGTH_SHORT).show(); + getVM().devLogin(); + return; + } + MApplication.getLoginBean().setFlag(type==2?0:1); + startActivity(FaceActivity.class); + //startActivity(KeyCabinetActivity.class,b); break; case 4: - { - //鏇存敼url - if(lastDownTime2!=null){ - if(System.currentTimeMillis()-lastDownTime2>1000){ - downCount2=0; - } - } - lastDownTime2 = System.currentTimeMillis(); - downCount2++; - if(downCount2>4) { - downCount2=0; - lastDownTime2=null; - startActivity(ChangeUrlActivity.class); - } - } + isShowTip = false; + getDB().clTip.setVisibility(View.GONE); break; default: break; @@ -322,7 +362,7 @@ protected void onResume() { super.onResume(); showTime = System.currentTimeMillis(); - MApplication.saveMemberBean(new MemberBean()); + MApplication.setLoginBean(new LoginBean()); if(!isFaceOk) { //initLicense(); } @@ -355,6 +395,8 @@ handler = null; faceHandler.removeCallbacksAndMessages(null); faceHandler = null; + portHandler.removeCallbacksAndMessages(null); + portHandler = null; } private void restartApp(){ @@ -606,14 +648,6 @@ //缁撴潫 isUpdatingFace = false; //System.out.println("==UpdatingFace==>鏇存柊缁撴潫锛�"); - FaceUserBean bean = selectBeans.get(selectBeans.size()-1); - if(!TextUtils.isEmpty(bean.getEditTime())){ - Date date = StringUtil.StrToDate(bean.getEditTime()); - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - cal.add(Calendar.SECOND,1); - SpUtil.saveString("LastTime",StringUtil.DateToStr(cal.getTime())); - } // 娓呴櫎鍐呭瓨缂撳瓨 Glide.get(MainActivity.this).clearMemory(); } @@ -642,7 +676,7 @@ private int repeatCount = 0; private void updateFace(FaceUserBean bean){ Timber.d("==UpdatingFace==>瀹屾垚鏁伴噺 "+finishCount); - if (TextUtils.isEmpty(bean.getFaceUrl())||bean.getFaceUrl().endsWith("null")) { + if (TextUtils.isEmpty(bean.getFaceImg())||bean.getFaceImg().endsWith("null")) { finishCount++; faceHandler.sendEmptyMessage(0); return; @@ -651,7 +685,7 @@ //System.out.println("==UpdatingFace==>寮�濮嬶細" + bean.getName()); Glide.with(this) .asBitmap() - .load(bean.getFaceUrl()) + .load(bean.getFaceImg()) .addListener(new RequestListener<Bitmap>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { @@ -695,10 +729,10 @@ if (ret == 128) { Timber.d("==UpdatingFace==>鍥剧墖鐗瑰緛鎶藉彇鎴愬姛: %s", JSON.toJSONString(bean)); User user = new User(); - user.setUserId(bean.getId()); - user.setGroupId(bean.getType()); - user.setUserName(bean.getName()); - user.setImageName(bean.getFaceUrl()); + user.setUserId(bean.getMemberId()); + user.setGroupId(bean.getGroupId()); + user.setUserName(bean.getMemberName()); + user.setImageName(bean.getFaceImg()); user.setUserInfo(GsonTools.changeGsonToJson(bean)); user.setFeature(secondFeature); insertOrUpdate(user); @@ -952,12 +986,57 @@ } } + private int tipDownCount = 10; + private boolean isShowTip; @Subscribe public void TimeClockEvent(TimeClockEvent e){ - + if(isShowTip){ + if(tipDownCount==0){ + isShowTip = false; + getDB().clTip.setVisibility(View.GONE); + }else { + tipDownCount--; + getDB().tvDjs.setText(tipDownCount+"s"); + } + } } + /** + * 鐩戝惉寮�闂� + * @param e + */ + @Subscribe + public void OpenGridEvent(OpenGridEvent e){ + if(!isFinishing()){ + EventBus.getDefault().post(new KeyDoorEvent(MApplication.nextBoolean()?"0":"1")); + } + } + /** + * 鐩戝惉閽ュ寵 + * @param e + */ + @Subscribe + public void KeyStatusListener(KeyStatusListener e){ + if(!isFinishing()){ + if(e.getStatus()==0){ + //寮�濮� + Random random = new Random(); + EventBus.getDefault().post(new KeyResultEvent(random.nextBoolean()?"0":"1")); + }else { + //缁撴潫 + } + } + } + + private SpannableString getTipText(String name){ + String text = name+"鏌滈棬鏈叧闂�"; + SpannableString styledText = new SpannableString(text); + styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip1), + 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), name.length()+1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + return styledText; + } @Override protected void onRestart() { @@ -965,6 +1044,143 @@ getVM().devHeart(); } + @Subscribe + public void HeartEvent(HeartEvent e){ + if(!isFinishing()){ + getVM().devHeart(); + } + } + private SerialPortModel gridPort; + private SerialPortReadObserver gridReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + } + + @Override + public void onResultBytes(byte[] bytes) { + if(gridPort!=null && !gridPort.isOk()){ + gridPort.setOk(true); + } + } + }; + private SerialPortModel keyPort; + private SerialPortReadObserver keyReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + + } + + @Override + public void onResultBytes(byte[] bytes) { + if(keyPort!=null && !keyPort.isOk()){ + keyPort.setOk(true); + } + } + }; + private SerialPortModel jiuPort; + private SerialPortReadObserver jiuReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + + } + + @Override + public void onResultBytes(byte[] bytes) { + if(jiuPort!=null && !jiuPort.isOk()){ + jiuPort.setOk(true); + } + } + }; + + List<String> ports; + private int index = 0; + private Handler portHandler = new Handler(){ + @Override + public void handleMessage(@NonNull Message msg) { + switch (msg.what){ + case 0: + if(index>=1&&!checkEnd()){ + index--; + chosePort(ports.get(index)); + } + break; + default: + break; + } + } + }; + //鍒濆鍖栦覆鍙� + private void initPort(){ + ports = SportUtils.getSerialPortPaths(this); + if(ports.size()>0){ + index = ports.size()-1; + chosePort(ports.get(ports.size()-1)); + } + } + + private void chosePort(String path){ + if(gridPort==null||!gridPort.isOk()){ + closePort(gridPort); + gridPort = new SerialPortModel(path,9600 ,8 + ,1 , 0); + boolean isSucc = gridPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + gridPort.startRead(gridReadObserver); + //todo 鍙戦�佹煖鏍兼牎楠屼俊鎭� + } + } + if(keyPort==null||!keyPort.isOk()){ + closePort(keyPort); + keyPort = new SerialPortModel(path,115200 ,8 + ,1 , 0); + boolean isSucc = keyPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + keyPort.startRead(keyReadObserver); + //todo 鍙戦�侀挜鍖欐牎楠屼俊鎭� + } + } + if(jiuPort==null||!jiuPort.isOk()){ + closePort(jiuPort); + jiuPort = new SerialPortModel(path,9600 ,8 + ,1 , 0); + boolean isSucc = jiuPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + jiuPort.startRead(jiuReadObserver); + //todo 鍙戦�侀厭绮炬牎楠屼俊鎭� + } + } + + portHandler.sendEmptyMessageDelayed(0,2000); + } + + private void closePort(SerialPortModel port){ + if(port==null){ + return; + } + port.startRead(null); + port.stopRead(); + port.close(); + port = null; + } + + private boolean checkEnd(){ + if(gridPort==null||!gridPort.isOk()){ + return false; + } + if(keyPort==null||!keyPort.isOk()){ + return false; + } + if(jiuPort==null||!jiuPort.isOk()){ + return false; + } + return true; + } } -- Gitblit v1.9.3