keyCabinet-android/app/build.gradle
@@ -10,8 +10,8 @@ applicationId "com.doumee.keyCabinet" minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode 2 versionName "1.0.1" versionCode 5 versionName "1.0.5" //æ¯ævectorDrawablesç¢éå¾ vectorDrawables.useSupportLibrary = true @@ -108,7 +108,6 @@ implementation project(path: ':settinglibrary') implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation files('libs\\simple-xml-2.7.1.jar') implementation files('libs\\API-20250310.jar') testImplementation deps.test.junit androidTestImplementation deps.test.ext_junit androidTestImplementation deps.test.test_espresso keyCabinet-android/app/libs/enjoySDK.aarBinary files differ
keyCabinet-android/app/src/main/AndroidManifest.xml
@@ -10,11 +10,16 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="${network_security_config}" android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:theme="@style/CustomAppTheme" android:usesCleartextTraffic="true" tools:replace="android:allowBackup"> <activity android:name=".ui.face.ChoseActivationActivity" android:exported="false" /> <activity android:name=".ui.face.OfflineActivationActivity" android:exported="false" /> <activity android:name=".ui.keyCabinet.ChangeUrlActivity" android:exported="false" /> @@ -27,31 +32,30 @@ <activity android:name=".ui.keyCabinet.KeyCabinetActivity" android:exported="false" /> <activity android:name=".ui.guide.TestActivity"> </activity> <activity android:name=".ui.guide.TestActivity" /> <activity android:name="com.doumee.keyCabinet.ui.face.ErrActivity" android:name=".ui.face.ErrActivity" android:exported="false" /> <activity android:name="com.doumee.keyCabinet.ui.face.UserManagerActivity" android:name=".ui.face.UserManagerActivity" android:exported="false" /> <activity android:name="com.doumee.keyCabinet.ui.face.AddFaceActivity" android:name=".ui.face.AddFaceActivity" android:exported="false" /> <activity android:name="com.doumee.keyCabinet.ui.face.ActivationActivity" android:name=".ui.face.ActivationActivity" android:exported="false" /> <activity android:name="com.doumee.keyCabinet.ui.face.FaceActivity" android:name=".ui.face.FaceActivity" android:exported="false" android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/> <activity android:name="com.doumee.keyCabinet.ui.main.MainActivity" android:name=".ui.main.MainActivity" android:exported="true" android:launchMode="singleTask" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> @@ -75,8 +79,8 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider> <!--<receiver <!-- <receiver android:name="com.doumee.keyCabinet.ui.service.BootCompleteReceiver" android:enabled="true" android:exported="true"> @@ -85,22 +89,25 @@ <intent-filter android:priority="1000"> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>--> <!--<service android:name="com.doumee.keyCabinet.ui.service.HeartbeatService" /> <service android:name="com.doumee.keyCabinet.ui.service.FaceUpdateService" />--> </receiver> --> <!-- <service android:name="com.doumee.keyCabinet.ui.service.HeartbeatService" /> <service android:name="com.doumee.keyCabinet.ui.service.FaceUpdateService" /> --> <meta-data android:name="android:requestLegacyExternalStorage" android:value="true" /> <uses-library android:name="org.apache.http.legacy" android:required="false" /> </application> <uses-feature android:name="android.hardware.usb.host" /> <uses-feature android:name="android.hardware.nfc" /> <uses-permission android:name="android.permission.ACCESS_SURERUSER" /> <uses-permission android:name="android.permission.USB_PERMISSION"/> <uses-feature android:name="android.hardware.usb.host"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.nfc" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> @@ -109,7 +116,7 @@ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" @@ -120,7 +127,6 @@ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" @@ -128,6 +134,7 @@ <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.ACCESS_USB_PERMISSION"/> <uses-permission android:name="android.permission.NFC" /> keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java
@@ -14,12 +14,16 @@ private String devId; //æ¯å¦åééªè¯ 0å¦ 1æ¯ private int doubleAuth; //é ç²¾æ£æµå¼å¯ï¼0=å¼å¯ï¼1=å ³é private int alcoholStatus; //ä¸»é® private Integer id; //夿³¨ private String info; //设å¤åç§° private String name; //人è¸è¯å«ç¦»çº¿æ¿æ´»æä»¶ä¸è½½å°å private String activateFileUrl; private CabinetConfigDataBean cabinetConfigDataVO; private List<ManageKeyCabinetBean> cabinetGridInfoVOList; @@ -103,4 +107,20 @@ public void setCabinetConfigDataVO(CabinetConfigDataBean cabinetConfigDataVO) { this.cabinetConfigDataVO = cabinetConfigDataVO; } public String getActivateFileUrl() { return activateFileUrl; } public void setActivateFileUrl(String activateFileUrl) { this.activateFileUrl = activateFileUrl; } public int getAlcoholStatus() { return alcoholStatus; } public void setAlcoholStatus(int alcoholStatus) { this.alcoholStatus = alcoholStatus; } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/KeyCabinetBean.java
@@ -41,6 +41,10 @@ private Integer status; //è¿è¡ç¶æ 0æ£å¸¸ 1æ é private Integer workingStatus; //派车ç³è¯·åä¸»é® private Integer carUseBookId; //åé¥åæ¹å¼ï¼0=é车ï¼1=派车åï¼2=ä¿æ´ææ« private Integer getKeyWay; private ObservableField<Boolean> isSelected = new ObservableField<>(false); private ObservableField<Integer> text1Color = new ObservableField<>(0xff111111); @@ -185,4 +189,20 @@ public ObservableField<Integer> getText2Color() { return text2Color; } public Integer getCarUseBookId() { return carUseBookId; } public void setCarUseBookId(Integer carUseBookId) { this.carUseBookId = carUseBookId; } public Integer getGetKeyWay() { return getKeyWay; } public void setGetKeyWay(Integer getKeyWay) { this.getKeyWay = getKeyWay; } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/KeyResultEvent.java
@@ -4,5 +4,19 @@ * é¥åçå¬è¿å */ public class KeyResultEvent { //1ï¼1å·æ¿ï¼2:2å·æ¿ï¼3ï¼ä¸¤åæ¿ private String type; public KeyResultEvent(String type) { this.type = type; } public String getType() { return type; } public void setType(String type) { this.type = type; } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/Apis.java
@@ -23,7 +23,7 @@ public interface Apis { //æµè¯æ //String HTTP = "http://192.168.1.45:10010/"; String HTTP = "http://192.168.0.212/system_gateway/"; String HTTP = "http://10.49.152.112/system_gateway/"; String HEAT_HTTP = "do?c=220301"; /** * æ¥è¯¢çæ¬ä¿¡æ¯ @@ -44,6 +44,12 @@ */ @GET("visitsAdmin/cloudService/web/cabinet/updateRunStatusById") Observable<BaseResponse> heart(@Query("id")Integer id); /** * åæ¥ææ ¼å®é é¥åæ°æ® */ @POST("visitsAdmin/cloudService/web/cabinet/syncGridData") Observable<BaseResponse> syncGridData(@Body RequestBody requestBody); /** * ä¸ä¼ æ¥éä¿¡æ¯ @@ -128,6 +134,5 @@ */ @POST("loginCabinet") Observable<BaseResponse<String>> loginCabinet(@Body RequestBody requestBody); } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/BatchOpenGridAdminParam.java
@@ -7,6 +7,8 @@ private Integer cabinetId; //ææ ¼ä¸»é®å表 private List<Integer> gridIdList; //å¼å¯æ¹å¼ï¼0=ç³»ç»å¼å¯ï¼1=æå¨å¼å¯ private int openType; public Integer getCabinetId() { return cabinetId; @@ -23,4 +25,12 @@ public void setGridIdList(List<Integer> gridIdList) { this.gridIdList = gridIdList; } public int getOpenType() { return openType; } public void setOpenType(int openType) { this.openType = openType; } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java
@@ -12,6 +12,13 @@ private int cabinetId; //ææ ¼ä¸»é® private int gridId; //å¼å¯æ¹å¼ï¼0=ç³»ç»å¼å¯ï¼1=æå¨å¼å¯ private int openType; //派车ç³è¯·åä¸»é® private Integer carUseBookId; //åé¥åæ¹å¼ï¼0=é车ï¼1=派车åï¼2=ä¿æ´ææ« private Integer openWay; public int getAuthType() { return authType; @@ -44,4 +51,28 @@ public void setGridId(int gridId) { this.gridId = gridId; } public int getOpenType() { return openType; } public void setOpenType(int openType) { this.openType = openType; } public Integer getCarUseBookId() { return carUseBookId; } public void setCarUseBookId(Integer carUseBookId) { this.carUseBookId = carUseBookId; } public Integer getOpenWay() { return openWay; } public void setOpenWay(Integer openWay) { this.openWay = openWay; } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/SyncGridDataParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ package com.doumee.keyCabinet.http.param; import java.io.Serializable; import java.util.List; //åæ¥ææ ¼å®é é¥åæ°æ® public class SyncGridDataParam implements Serializable { //é¥åæç¼å· private String code; private List<GridDTO> gridDTOList; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<GridDTO> getGridDTOList() { return gridDTOList; } public void setGridDTOList(List<GridDTO> gridDTOList) { this.gridDTOList = gridDTOList; } public static class GridDTO{ //å®é é¥åç¼ç private String actualLable; //æ¿å· private String boardCode; //ééå· private String channelCode; public String getActualLable() { return actualLable; } public void setActualLable(String actualLable) { this.actualLable = actualLable; } public String getBoardCode() { return boardCode; } public void setBoardCode(String boardCode) { this.boardCode = boardCode; } public String getChannelCode() { return channelCode; } public void setChannelCode(String channelCode) { this.channelCode = channelCode; } } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationActivity.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.doumee.keyCabinet.ui.face; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.base.MyBaseActivity; import com.doumee.keyCabinet.databinding.ChoseActivationActivityBinding; import com.doumee.keyCabinet.utils.MCUtils; import com.doumee.lib_coremodel.bean.event.ActionEventData; import com.mc.enjoysdk.McSystemUi; import dagger.hilt.android.AndroidEntryPoint; @AndroidEntryPoint public class ChoseActivationActivity extends MyBaseActivity<ChoseActivationVM, ChoseActivationActivityBinding> { @Override public int getLayoutId() { return R.layout.chose_activation_activity; } @Override public void initView(@Nullable Bundle savedInstanceState) { isToGuild = false; normalConfig(); getDB().setModel(getVM()); McSystemUi mcSystemUi = McSystemUi.getInstance(this); MCUtils.show(mcSystemUi); } @Override public void initData(@Nullable Bundle savedInstanceState) { } @Override protected void doRegister(int type, ActionEventData data) { switch (type){ case 1: startActivity(ActivationActivity.class); finish(); break; case 2: startActivity(OfflineActivationActivity.class); finish(); break; default: break; } } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationVM.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.doumee.keyCabinet.ui.face; import android.app.Application; import androidx.annotation.NonNull; import androidx.hilt.lifecycle.ViewModelInject; import com.doumee.lib_coremodel.base.BaseModel; import com.doumee.lib_coremodel.base.DataViewModel; public class ChoseActivationVM extends DataViewModel { @ViewModelInject public ChoseActivationVM(@NonNull Application application, BaseModel model) { super(application, model); } @Override protected void clickByTypeCommand(int type) { doAction(type); } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
@@ -121,6 +121,12 @@ private SpannableString getErrPhoneText(){ String phone = MApplication.getConfigBean().getLinkPhone(); if(phone==null){ String text = "妿é®é¢è¯·è系管çå"; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return styledText; } String text = "妿é®é¢è¯·è系管çå"+phone; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length()-phone.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -137,14 +143,24 @@ //å-管çå人è¸éªè¯ getDB().tvTitle.setText("管çå身份éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clFace.setVisibility(View.VISIBLE); setFaceModel(0); break; case 10: //å-管çåæçº¹éªè¯ getDB().tvTitle.setText("管çå身份éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clFace.setVisibility(View.GONE); getDB().clZw.setVisibility(View.VISIBLE); setFaceModel(2); break; case 1: //å-管çåå·å¡éªè¯ getDB().etEwm.setText(""); getDB().tvTitle.setText("管çå身份éªè¯"); getDB().clFace.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clCard.setVisibility(View.VISIBLE); setFaceModel(2); break; @@ -152,6 +168,7 @@ //å-叿ºéªè¯æ¹å¼éæ©é¡µ getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clFace.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clCard.setVisibility(View.GONE); getDB().clTip1.setVisibility(View.GONE); getDB().clSjXuan.setVisibility(View.VISIBLE); @@ -162,9 +179,19 @@ //å-叿ºäººè¸éªè¯ getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clSjXuan.setVisibility(View.GONE); getDB().clFace.setVisibility(View.VISIBLE); setFaceModel(1); break; case 11: //å-叿ºæçº¹éªè¯ getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clFace.setVisibility(View.GONE); getDB().clSjXuan.setVisibility(View.GONE); getDB().clZw.setVisibility(View.VISIBLE); setFaceModel(2); break; case 3: //å-叿ºå·å¡éªè¯ @@ -172,6 +199,7 @@ getDB().etEwm.requestFocus(); getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clFace.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clSjXuan.setVisibility(View.GONE); getDB().clCard.setVisibility(View.VISIBLE); setFaceModel(2); @@ -181,6 +209,7 @@ getDB().tvTitle.setText("é ç²¾æ£æµ"); getDB().clFace.setVisibility(View.GONE); getDB().clCard.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clSjXuan.setVisibility(View.GONE); getDB().clTip1.setVisibility(View.GONE); getDB().clJiu.setVisibility(View.VISIBLE); @@ -206,8 +235,17 @@ //è¿-叿ºäººè¸éªè¯ getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clZw.setVisibility(View.GONE); getDB().clFace.setVisibility(View.VISIBLE); setFaceModel(1); break; case 12: //è¿-叿ºäººè¸éªè¯ getDB().tvTitle.setText("叿ºèº«ä»½éªè¯"); getDB().clCard.setVisibility(View.GONE); getDB().clFace.setVisibility(View.GONE); getDB().clZw.setVisibility(View.VISIBLE); setFaceModel(2); break; case 8: //è¿-叿ºå·å¡éªè¯ @@ -249,15 +287,37 @@ protected void doRegister(int type, ActionEventData data) { switch (type){ case 1: //忢å°å·å¡ if(flag==0){ if(status==0){ //忢å°ç®¡çåå·å¡ if(status==0||status==10){ statusFsm(1); }else if(status==2){ }else if(status==2||status==11){ statusFsm(3); } }else { //è¿-叿ºå·å¡éªè¯ statusFsm(8); } break; case 9: //管çåæçº¹éªè¯ statusFsm(10); break; case 10: //叿ºæçº¹éªè¯ statusFsm(11); break; case 11: //å·å¡-->æçº¹éªè¯ if(flag==0){ if(status==1){ statusFsm(10); }else { statusFsm(11); } }else { //è¿-叿ºæçº¹ statusFsm(12); } break; case 2: @@ -271,9 +331,9 @@ case 4: //忢å°äººè¸ if(flag==0){ if(status==1){ if(status==1||status==10){ statusFsm(0); }else if(status==3){ }else if(status==3||status==11){ statusFsm(2); } }else { @@ -291,7 +351,14 @@ //叿ºic塿å if(flag==0) { //å if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getAlcoholStatus()==1) { //éé ç²¾æ£æµ startActivity(KeyCabinetActivity.class); finish(); }else { //é ç²¾æ£æµ statusFsm(4); } }else { //è¿ startActivity(KeyCabinetActivity.class); @@ -306,6 +373,7 @@ getDB().message.requestLayout(); EventBus.getDefault().post(new HttpEvent("icå¡+++++++"+data.getData().get("type").toString())); break; default: break; } @@ -503,6 +571,7 @@ if(new BigDecimal(MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration()) .compareTo(resultEvent.getConcentration())>=0){ //é ç²¾éè¿ getVM().alcoholTestAlarm(resultEvent.getConcentration().toString()); getDB().clJiujinOk.setVisibility(View.VISIBLE); handler.sendEmptyMessageDelayed(4,1000); }else { @@ -645,7 +714,15 @@ MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId())); MApplication.getLoginBean().setAuthType(0); //handler.sendEmptyMessageDelayed(8,0); //Toast.makeText(mContext, "æ¯å¦é ç²¾æ£æµï¼"+MApplication.getConfigBean().getAlcoholStatus(), Toast.LENGTH_SHORT).show(); if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getAlcoholStatus()==1) { //éé ç²¾æ£æµ startActivity(KeyCabinetActivity.class); finish(); }else { //é ç²¾æ£æµ EventBus.getDefault().post(new FaceStatusChangeEvent(4)); } }else if(status==7){ //è¿-叿º MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId())); keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationActivity.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,232 @@ package com.doumee.keyCabinet.ui.face; import androidx.annotation.Nullable; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.text.TextUtils; import android.view.View; import android.widget.Toast; import com.baidu.idl.main.facesdk.FaceAuth; import com.baidu.idl.main.facesdk.callback.Callback; import com.doumee.keyCabinet.MApplication; import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.base.MyBaseActivity; import com.doumee.keyCabinet.databinding.OfflineActivationActivityBinding; import com.doumee.keyCabinet.event.TimeClockEvent; import com.doumee.keyCabinet.utils.LMobileInfo; import com.doumee.keyCabinet.utils.update.FileUtil; import com.doumee.lib_coremodel.view.ToastView; import com.example.datalibrary.utils.FileUtils; import com.example.datalibrary.utils.ToastUtils; import org.greenrobot.eventbus.Subscribe; import dagger.hilt.android.AndroidEntryPoint; @AndroidEntryPoint public class OfflineActivationActivity extends MyBaseActivity<OfflineActivationVM, OfflineActivationActivityBinding> implements View.OnClickListener { private FaceAuth faceAuth; private boolean isDownLoad; String filePath = Environment.getExternalStorageDirectory().getPath()+"/License.zip"; @Override public int getLayoutId() { return R.layout.offline_activation_activity; } @Override public void initView(@Nullable Bundle savedInstanceState) { isToGuild = false; normalConfig(); getDB().setModel(getVM()); } @Override public void initData(@Nullable Bundle savedInstanceState) { getDB().tvId.setText("NOï¼"+ LMobileInfo.getDeviceUniqueId()); // å¤å¶æé® faceAuth = new FaceAuth(); String a = faceAuth.getDeviceId(this); getDB().accreditDeviceTv.setText(a); // é¿æç¹å»å¤å¶ getDB().accreditDeviceTv.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboardManager.setText(getDB().accreditDeviceTv.getText()); ToastUtils.toast(OfflineActivationActivity.this, "deviceID å¤å¶æå"); return false; } }); getDB().accreditOffBtn.setOnClickListener(this); getDB().btnDown.setOnClickListener(this); setupDownloadManager(); setupDownloadReceiver(); } @Subscribe public void TimeClockEvent(TimeClockEvent e){ if(!isFinishing()){ runOnUiThread(new Runnable() { @Override public void run() { updateDownStatus(); } }); } } private void updateDownStatus(){ if(isDownLoad){ return; } //å æ ¡éªæ¯å¦æä¸è½½è·¯å¾ if(!TextUtils.isEmpty(MApplication.getConfigBean().getActivateFileUrl())){ if(FileUtil.FileIsExist(filePath)) { //æä»¶åå¨ getDB().btnDown.setText("éæ°ä¸è½½æ¿æ´»æä»¶"); getDB().btnDown.setClickable(true); getDB().btnDown.setBackgroundResource(R.mipmap.btn_main_normal); getDB().accreditOffBtn.setClickable(true); getDB().accreditOffBtn.setBackgroundResource(R.mipmap.btn_main_normal); }else { getDB().btnDown.setText("ä¸è½½æ¿æ´»æä»¶"); getDB().btnDown.setClickable(true); getDB().btnDown.setBackgroundResource(R.mipmap.btn_main_normal); getDB().accreditOffBtn.setClickable(false); getDB().accreditOffBtn.setBackgroundResource(R.mipmap.btn_less_normal); } }else { //å 餿¿æ´»æä»¶ FileUtils.deleteFile(filePath); getDB().btnDown.setText("å¾ åå°ä¸ä¼ æ¿æ´»æä»¶"); getDB().btnDown.setClickable(false); getDB().btnDown.setBackgroundResource(R.mipmap.btn_less_normal); getDB().accreditOffBtn.setClickable(false); getDB().accreditOffBtn.setBackgroundResource(R.mipmap.btn_less_normal); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_down: //ä¸è½½æé® if(isDownLoad){ ToastView.show(MApplication.mContext,"ä¸è½½ä¸..."); return; } if(!TextUtils.isEmpty(MApplication.getConfigBean().getActivateFileUrl())){ isDownLoad = true; startDownload(MApplication.getConfigBean().getActivateFileUrl()); } break; // ç¦»çº¿æ¿æ´» case R.id.accredit_offBtn: faceAuth.initLicenseOffLine(this, new Callback() { @Override public void onResponse(final int code, final String response) { if (code == 0) { runOnUiThread(new Runnable() { @Override public void run() { // æææå跳转åè½å ¥å£é¡µé¢ getDB().accreditHintTv.setText(""); finish(); } }); } else { runOnUiThread(new Runnable() { @Override public void run() { if (code == 7) { getDB().accreditHintTv.setText("æ¿æ´»å¤±è´¥ï¼è®¾å¤ç¡¬ä»¶æçº¹ä¸License.zipä¸ç¬¦"); } else if (code == 11) { getDB().accreditHintTv.setText("æ¿æ´»å¤±è´¥ï¼License.zipæä»¶å¯¹åºçåºåå·ä¸å¨æææèå´å "); } else if (code == -1) { getDB().accreditHintTv.setText("æªæ£æµå°License.zipæä»¶"); } else if (code == 14) { getDB().accreditHintTv.setText("æ¿æ´»å¤±è´¥ï¼License.zipæä»¶å¯¹åºçåºåå·ä¸å¨æææèå´å "); } else if (code == 4) { getDB().accreditHintTv.setText("æ¿æ´»å¤±è´¥ï¼è®¾å¤ç¡¬ä»¶æçº¹ä¸License.zipä¸ç¬¦"); } else { getDB().accreditHintTv.setText(code); } } }); } } }); break; } } @Override protected void onDestroy() { super.onDestroy(); if (downloadReceiver != null) { unregisterReceiver(downloadReceiver); } } private BroadcastReceiver downloadReceiver; private DownloadManager downloadManager; private long downloadId; private void setupDownloadManager() { downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); } private void startDownload(String url) { try { DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); // 设置ä¸è½½åæ° request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE); request.setTitle("æä»¶ä¸è½½"); request.setDescription("æ£å¨ä¸è½½æä»¶..."); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationInExternalPublicDir("", "License.zip"); // å¼å§ä¸è½½ downloadId = downloadManager.enqueue(request); Toast.makeText(mContext, "ä¸è½½å·²å¼å§", Toast.LENGTH_SHORT).show(); } catch (Exception e) { isDownLoad = false; Toast.makeText(this, "ä¸è½½å¤±è´¥: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } private void setupDownloadReceiver() { downloadReceiver = new BroadcastReceiver() { @Override public void onReceive (Context context, Intent intent){ long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (id == downloadId) { isDownLoad = false; Toast.makeText(context, "æä»¶ä¸è½½å®æ", Toast.LENGTH_LONG).show(); } } }; registerReceiver(downloadReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationVM.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.doumee.keyCabinet.ui.face; import android.app.Application; import androidx.annotation.NonNull; import androidx.hilt.lifecycle.ViewModelInject; import com.android.internal.logging.AndroidConfig; import com.doumee.lib_coremodel.base.BaseModel; import com.doumee.lib_coremodel.base.DataViewModel; public class OfflineActivationVM extends DataViewModel { @ViewModelInject public OfflineActivationVM(@NonNull Application application, BaseModel model) { super(application, model); } @Override protected void clickByTypeCommand(int type) { doAction(type); } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/UserManagerActivity.java
@@ -30,6 +30,7 @@ import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.base.MyBaseActivity; import com.doumee.keyCabinet.databinding.UserManagerActivityBinding; import com.doumee.keyCabinet.event.HttpEvent; import com.doumee.keyCabinet.ui.face.adapter.FaceUserAdapter; import com.doumee.keyCabinet.ui.view.TipDialog; import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig; @@ -41,6 +42,8 @@ import com.example.datalibrary.model.KeyboardsUtils; import com.example.datalibrary.model.User; import com.example.datalibrary.utils.DensityUtils; import org.greenrobot.eventbus.EventBus; import java.util.List; @@ -428,6 +431,12 @@ } if (mSelectCount != 0) { isDBLoad = false; String info = "æ°éï¼"+mUserInfoList.size(); for(User u:mUserInfoList){ String key = u.getUserName()+"-"+u.getGroupId(); info+="\n"+key+" :"+u.isChecked()+";"; } EventBus.getDefault().post(new HttpEvent(info)); UserInfoManager.getInstance().deleteUserListInfo(mUserInfoList, mEditTitleSearch.getText().toString() , mUserListListener, loadListener); keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/guide/TestActivity.java
@@ -8,7 +8,6 @@ import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.base.MyBaseActivity; import com.doumee.keyCabinet.databinding.ActivityTestBinding; import com.innohi.YNHAPI; import dagger.hilt.android.AndroidEntryPoint; keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ChangeUrlActivity.java
@@ -46,6 +46,7 @@ public void initData(@Nullable Bundle savedInstanceState) { getDB().etUrl.setText(SpUtil.getString("base_url", Apis.HTTP)); getDB().etTime.setText(SpUtil.getInt("loop_time",60)+""); getDB().etXj.setText(SpUtil.getString("rbgCameraId","0")); } @Override @@ -72,11 +73,18 @@ ToastView.show(MApplication.mContext,"æ¥å£è°ç¨é´éé误"); return; } String xj = getDB().etXj.getText().toString(); if(!"0".equals(xj)&&!"1".equals(xj)){ ToastView.show(MApplication.mContext,"æå头ç¼å·é误"); return; } String oldCameraId = SpUtil.getString("rbgCameraId","0"); SpUtil.saveString("rbgCameraId",xj); String oldUrl = SpUtil.getString("base_url", Apis.HTTP); SpUtil.saveString("base_url",url); SpUtil.saveInt("loop_time",time); ToastView.show(MApplication.mContext,"ä¿åæå"); if(!oldUrl.equals(url)){ if(!oldUrl.equals(url)||!oldCameraId.equals(xj)){ //æ¥å£ä¸åï¼éæ°å¯å¨ restartApp(); } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
@@ -167,6 +167,7 @@ //å¼å¯æé¨ getVM().openGridDriver(selectBean); downTime = 60; getDB().tvTitle.setVisibility(View.GONE); break; case 2: //getDB().clTip1.setVisibility(View.GONE); @@ -281,6 +282,12 @@ private SpannableString getErrPhoneText(){ String phone = MApplication.getConfigBean().getLinkPhone(); if(phone==null){ String text = "妿é®é¢è¯·è系管çå"; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return styledText; } String text = "妿é®é¢è¯·è系管çå"+phone; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip2), 0, text.length()-phone.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -473,6 +480,17 @@ if(handler.hasMessages(0)){ handler.removeMessages(0); } if("1".equals(e.getType())){ //1å·æ¿ if(!"1".equals(selectBean.getBoardCode())){ return; } }else if("2".equals(e.getType())){ //2å·æ¿ if(!"2".equals(selectBean.getBoardCode())){ return; } } String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode())) +SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode())); if(flag==0) { keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetVM.java
@@ -100,17 +100,20 @@ OpenGridDriverParam param = new OpenGridDriverParam(); param.setCabinetId(selectBean.getCabinetId()); param.setGridId(selectBean.getId()); param.setOpenWay(selectBean.getGetKeyWay()); param.setCarUseBookId(selectBean.getCarUseBookId()); param.setMemberId(MApplication.getLoginBean().getMemberId()); param.setAuthType(MApplication.getLoginBean().getAuthType()); showLoading(true); EventBus.getDefault().post(new HttpEvent("===>叿ºå¼é¨-请æ±")); getRetrofitService(Apis.class).openGridDriver(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { EventBus.getDefault().post(new HttpEvent("===>叿ºå¼é¨-è¿å")); if(200==response.getCode()){ //å¼é¨ EventBus.getDefault().post(new HttpEvent("å¼é¨æ¥å£æå")); doAction(2); }else { toast(response.getMessage()); @@ -141,12 +144,13 @@ param.setMemberId(loginBean.getMemberId()); param.setGridId(gridDo.getGridId()); param.setKeyStatus(!TextUtils.isEmpty(gridDo.getCurKeyCode())?1:2); EventBus.getDefault().post(new HttpEvent("===>叿ºå ³éææ ¼-请æ±")); getRetrofitService(Apis.class).closeGrid(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { EventBus.getDefault().post(new HttpEvent("å ³éææ ¼æ¥å£è°ç¨æå")); EventBus.getDefault().post(new HttpEvent("===>叿ºå ³éææ ¼-è¿å")); } @Override keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetActivity.java
@@ -37,12 +37,13 @@ import com.doumee.keyCabinet.event.OpenGridOneResultEvent; import com.doumee.keyCabinet.event.TimeClockEvent; import com.doumee.keyCabinet.ui.keyCabinet.adapter.ManageCabinetRcvAdapter; import com.doumee.keyCabinet.utils.MCUtils; import com.doumee.keyCabinet.utils.i485.SportUtils; import com.doumee.lib_coremodel.bean.event.ActionEventData; import com.doumee.lib_coremodel.util.RecyclerHelp; import com.doumee.lib_coremodel.util.StringUtil; import com.example.datalibrary.db.DBManager; import com.innohi.YNHAPI; import com.mc.enjoysdk.McSystemUi; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -110,8 +111,8 @@ @Override public boolean onLongClick(View v) { //å¯ä»¥ä¸æ YNHAPI mAPI = YNHAPI.getInstance(); mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.VISIBLE); McSystemUi mcSystemUi = McSystemUi.getInstance(ManageCabinetActivity.this); MCUtils.show(mcSystemUi); return true; } }); @@ -673,11 +674,28 @@ if(!isFail){ if(copyMap.containsKey(gridDo.getGridKey())){ //å ³é¨æå boolean isSend = false; String bh = gridDo.getGridKey().substring(0,2); if("1".equals(e.getType())){ //1å·æ¿ if("01".equals(bh)){ isSend = true; } }else if("2".equals(e.getType())){ //2å·æ¿ if("02".equals(bh)){ isSend = true; } }else { isSend = true; } if(isSend) { EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"é¨å ³éæå***************************>ç®æ ï¼"+gridDo.getKeyCode()+",å½åï¼"+gridDo.getCurKeyCode())); getVM().closeGrid(gridDo); } } } } if(sb.length()>0){ showKeyErrTip(sb.toString()); } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java
@@ -289,7 +289,7 @@ param.setMemberId(loginBean.getMemberId()); param.setGridId(gridDo.getGridId()); param.setKeyStatus(!TextUtils.isEmpty(gridDo.getCurKeyCode())?1:2); toast(gridDo.getGridKey()+"å ³éï¼å½åé¥åå·ï¼"+gridDo.getCurKeyCode()); //toast(gridDo.getGridKey()+"å ³éï¼å½åé¥åå·ï¼"+gridDo.getCurKeyCode()); getRetrofitService(Apis.class).closeGrid(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageLoginActivity.java
@@ -17,8 +17,9 @@ import com.doumee.keyCabinet.databinding.ManageLoginActivityBinding; import com.doumee.keyCabinet.event.TimeClockEvent; import com.doumee.keyCabinet.utils.LMobileInfo; import com.doumee.keyCabinet.utils.MCUtils; import com.doumee.lib_coremodel.bean.event.ActionEventData; import com.innohi.YNHAPI; import com.mc.enjoysdk.McSystemUi; import org.greenrobot.eventbus.Subscribe; @@ -51,8 +52,8 @@ public boolean onLongClick(View v) { if(MApplication.getConfigBean().getId()==null){ //å¯ä»¥ä¸æ YNHAPI mAPI = YNHAPI.getInstance(); mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.VISIBLE); McSystemUi mcSystemUi = McSystemUi.getInstance(ManageLoginActivity.this); MCUtils.show(mcSystemUi); return true; } return false; keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
@@ -14,6 +14,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.serialport.SerialPortFinder; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; @@ -69,6 +70,7 @@ import com.doumee.keyCabinet.event.OpenGridOneResultEvent; import com.doumee.keyCabinet.event.TimeClockEvent; import com.doumee.keyCabinet.ui.face.ActivationActivity; import com.doumee.keyCabinet.ui.face.ChoseActivationActivity; import com.doumee.keyCabinet.ui.face.FaceActivity; import com.doumee.keyCabinet.ui.keyCabinet.ChangeUrlActivity; import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity; @@ -84,6 +86,7 @@ import com.doumee.keyCabinet.utils.CircularQueue; import com.doumee.keyCabinet.utils.CrashHandler; import com.doumee.keyCabinet.utils.LMobileInfo; import com.doumee.keyCabinet.utils.MCUtils; import com.doumee.keyCabinet.utils.TimeUtils; import com.doumee.keyCabinet.utils.face.FaceSDKManager; import com.doumee.keyCabinet.utils.face.FaceUtils; @@ -107,13 +110,16 @@ import com.doumee.lib_coremodel.util.StringUtil; import com.doumee.lib_coremodel.view.ToastView; import com.example.datalibrary.api.FaceApi; import com.example.datalibrary.db.DBManager; import com.example.datalibrary.listener.DBLoadListener; import com.example.datalibrary.listener.SdkInitListener; import com.example.datalibrary.model.ImportFeatureResult; import com.example.datalibrary.model.User; import com.example.datalibrary.utils.ToastUtils; import com.example.datalibrary.view.PreviewTexture; import com.innohi.YNHAPI; import com.mc.enjoysdk.McHome; import com.mc.enjoysdk.McSystemUi; import com.mc.enjoysdk.transform.McSystemUiFlag; import com.yanzhenjie.permission.runtime.Permission; import org.greenrobot.eventbus.EventBus; @@ -160,6 +166,8 @@ private int downCount = 0; private Long lastDownTime; private Long showTime; private McSystemUi mcSystemUi; private McHome mcHome; private Handler handler = new Handler(){ @Override @@ -219,6 +227,8 @@ startService(intent2);*/ getPermission(); Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId()); mcSystemUi = McSystemUi.getInstance(this); mcHome = McHome.getInstance(this); } private void initM(){ @@ -253,6 +263,7 @@ @Override public void onChanged(List<FaceUserBean> beans) { //æ´æ°äººè¸æ°æ® getVM().addInfo("æ´æ°äººè¸æ°æ®======ãbeans = "+beans); if(beans!=null&&beans.size()>0){ initModel(beans); } @@ -324,8 +335,10 @@ }else { getDB().nsv.setVisibility(View.VISIBLE); } YNHAPI mAPI = YNHAPI.getInstance(); mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.VISIBLE); //æ¾ç¤ºç¶ææ mcSystemUi.temporarilySwitchStatusBar(true); //æ¾ç¤ºå¯¼èªæ mcSystemUi.temporarilySwitchNavigation(true); } }); upErrInfo(); @@ -340,6 +353,7 @@ } setJiuConfig(); initPort(); EventBus.getDefault().post(new GetFacesEvent()); } } }); @@ -458,6 +472,12 @@ private SpannableString getErrPhoneText(){ String phone = MApplication.getConfigBean().getLinkPhone(); if(phone==null){ String text = "妿é®é¢è¯·è系管çå"; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return styledText; } String text = "妿é®é¢è¯·è系管çå"+phone; SpannableString styledText = new SpannableString(text); styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length()-phone.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -470,9 +490,9 @@ protected void onResume() { super.onResume(); isShowing = true; YNHAPI mAPI = YNHAPI.getInstance(); mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.ALWAYS_INVISIBLE); mAPI.setBootLaunchApk("com.doumee.keyCabinet", true); getVM().setSubmit(true); MCUtils.hind(mcSystemUi); mcHome.setHomePackage("com.doumee.keyCabinet"); showTime = System.currentTimeMillis(); if(!isFaceOk) { initLicense(); @@ -512,7 +532,10 @@ if (future != null && !future.isDone()) { future.cancel(true); } if(isFaceOk) { //æ¿æ´»äºæå¤ç FaceApi.getInstance().cleanRecords(); } handler.removeCallbacksAndMessages(null); handler = null; faceHandler.removeCallbacksAndMessages(null); @@ -543,7 +566,9 @@ @Subscribe public void GetFacesEvent(GetFacesEvent event){ getVM().addInfo("æ¥è¯¢äººè¸æ°æ®======ã"); if(!isFinishing()&&!isUpdatingFace){ getVM().addInfo("æ¥è¯¢äººè¸æ°æ®======ãisDBLoad = "+isDBLoad); if(isDBLoad){ isNeedUpdateFace = false; //æ¥è¯¢äººè¸ @@ -577,7 +602,7 @@ /* *è¦æ§è¡çæä½*/ startActivity(new Intent(mContext, ActivationActivity.class)); startActivity(new Intent(mContext, ChoseActivationActivity.class)); } }; Timer timer = new Timer(); @@ -639,10 +664,10 @@ @Override public void run() { FaceApi.getInstance().setUsers(users); isDBLoad = true; initFaceSDKManager(null); if (successCount > 5000 || successCount == 0) { getDB().progressGroup.setVisibility(View.GONE); isDBLoad = true; isFaceOk = true; } } @@ -688,8 +713,10 @@ private void initModel(List<FaceUserBean> userBeans) { if (com.example.datalibrary.manager.FaceSDKManager.initStatus == com.example.datalibrary.manager.FaceSDKManager.SDK_MODEL_LOAD_SUCCESS) { getVM().addInfo("æ´æ°äººè¸===ãå¼å§æ´æ°"); waitUpdate(userBeans); }else { getVM().addInfo("æ´æ°äººè¸===ãåå§å"); initFaceSDKManager(userBeans); } } @@ -745,6 +772,7 @@ super.onPause(); showTime = null; isShowing = false; getVM().setSubmit(false); } private int finishCount; @@ -778,11 +806,9 @@ } }; private void waitUpdate(List<FaceUserBean> userBeans){ if(isUpdatingFace){ //æ£å¨æ´æ° waitBeans.addAll(userBeans); }else { private UserInfoManager.UserInfoListener mUserListListener = new UserInfoManager.UserInfoListener(){ @Override public void userListQuerySuccess(String userName, List<User> listUserInfo) { selectBeans.clear(); selectBeans.addAll(waitBeans); waitBeans.clear(); @@ -800,25 +826,37 @@ //å é¤ä¸åå¨ç¨æ· List<User> users = FaceApi.getInstance().getAllUserList(); List<User> dels = new ArrayList<>(); StringBuilder sb = new StringBuilder(); for(User u:users){ String key = u.getUserId()+"_"+u.getGroupId(); if(!uMap.containsKey(key)){ u.setChecked(true); dels.add(u); if(sb.length()>0){ sb.append(","); } sb.append(u.getUserName()); } } getVM().addInfo("æ´æ°äººè¸ãããããããããããããããããã"); if(dels.size()>0){ UserInfoManager.getInstance().deleteUserListInfo(dels, "", new UserInfoManager.UserInfoListener() { getVM().addInfo("åå¤å é¤ç¨æ·ï¼"+sb.toString()); UserInfoManager.getInstance().deleteUserListInfo(users, "1", new UserInfoManager.UserInfoListener() { @Override public void userListDeleteSuccess() { // ç¨æ·å表å 餿å faceHandler.sendEmptyMessage(0); getVM().addInfo("å é¤ç¨æ·æåï¼"); } @Override public void userListDeleteFailure(String message) { // ç¨æ·å表å é¤å¤±è´¥ faceHandler.sendEmptyMessage(0); getVM().addInfo("å é¤ç¨æ·å¤±è´¥ï¼"+message); getVM().addInfo("å é¤ç¨æ·å表ï¼"+sb.toString()); } }, new DBLoadListener() { @@ -846,11 +884,41 @@ faceHandler.sendEmptyMessage(0); } } @Override public void userListQueryFailure(String message) { } @Override public void userListDeleteSuccess() { } @Override public void userListDeleteFailure(String message) { } }; private List<FaceUserBean> userBeans = new ArrayList<>(); private void waitUpdate(List<FaceUserBean> userBeans){ if(isUpdatingFace){ //æ£å¨æ´æ° waitBeans.addAll(userBeans); getVM().addInfo("æ£å¨æ´æ°ãçå¾ ãããããããã"); }else { getVM().addInfo("åå§å人è¸åº ãããããããã"); com.example.datalibrary.manager.FaceSDKManager.getInstance().initDataBases(MainActivity.this); this.userBeans.clear(); this.userBeans.addAll(userBeans); UserInfoManager.getInstance().getUserListInfo(null, mUserListListener); } } private int repeatCount = 0; private void updateFace(FaceUserBean bean){ Timber.d("==UpdatingFace==>宿æ°é "+finishCount); //getVM().addInfo("==UpdatingFace==>宿æ°é " + finishCount); if (TextUtils.isEmpty(bean.getFaceImg())||bean.getFaceImg().endsWith("null")) { finishCount++; faceHandler.sendEmptyMessage(0); @@ -959,12 +1027,14 @@ isSave = FaceApi.getInstance().registerUserIntoDBmanager(newDo.getGroupId(), newDo.getUserId(), newDo.getUserName(), newDo.getImageName(), newDo.getUserInfo(), newDo.getFeature()); //System.out.println("==isOk==>ä¿åæå"); //getVM().addInfo("æ°å¢äººè¸==ã"+newDo.getUserName()+" ç»æï¼"+isSave); } else { //æ´æ° user.setUserName(newDo.getUserName()); user.setImageName(newDo.getImageName()); user.setFeature(newDo.getFeature()); isSave = FaceApi.getInstance().userUpdateOnly(user); //getVM().addInfo("æ´æ°äººè¸==ã"+newDo.getUserName()+" ç»æï¼"+isSave); //System.out.println("==isOk==>æ´æ°æå"); } @@ -1088,7 +1158,7 @@ SingleBaseConfig.getBaseConfig().setRBGCameraId(index); SingleBaseConfig.getBaseConfig().setRgbRevert(true); SingleBaseConfig.getBaseConfig().setRgbDetectDirection(90); SingleBaseConfig.getBaseConfig().setRgbVideoDirection(270); SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); GateConfigUtils.modityJson(); RegisterConfigUtils.modityJson(); } @@ -1178,7 +1248,6 @@ getVM().devLogin(); getPermission(); getVM().devHeart(); EventBus.getDefault().post(new GetFacesEvent()); }else { loopDownCount--; } @@ -1546,7 +1615,7 @@ } getVM().updateGrids(updateList); EventBus.getDefault().post(new KeyResultEvent()); EventBus.getDefault().post(new KeyResultEvent(bh+"")); } private SerialPortModel jiuPort; @@ -1610,20 +1679,28 @@ return; } runOnUiThread(() -> { getVM().addInfo("è·åå°é¨æ°æ®:" + SportUtils.bytesToHexSimple(bytes)); getVM().addInfo("è·åå°æ°æ®:" + SportUtils.bytesToHexSimple(bytes)); }); String data = SportUtils.bytesToHexSimple(bytes); if(startIndex==1){ if(data.toLowerCase().startsWith("80")){ gridPath = path; getVM().addInfo("设置é¨ä¸²å£è·¯å¾:" + path); getVM().addInfo("设置é¨ä¸²å£è·¯å¾:=====XXXXX===>" + path); SpUtil.saveString("port_grid",path); } }else if(startIndex==2){ if(data.toLowerCase().startsWith("cc")){ keyPath = path; getVM().addInfo("设置é¥å串å£è·¯å¾:" + path); getVM().addInfo("设置é¥å串å£è·¯å¾:====XXXX====>" + path); SpUtil.saveString("port_key",path); } }else if(startIndex==3){ String data2 = new String(bytes); if(data2.toLowerCase().startsWith("mic")) { jiuPath = path; getVM().addInfo("设置é 精串å£è·¯å¾:" + path); getVM().addInfo("设置é 精串å£è·¯å¾:====XXXX====>" + path); SpUtil.saveString("port_jiu",path); } } } }; @@ -1642,8 +1719,8 @@ switch (msg.what){ case 0: if(index>=1&&!checkEnd()){ path = ports.get(index); index--; path = ports.get(index); portHandler.sendEmptyMessage(4); }else if(checkEnd()){ initPort(); @@ -1747,9 +1824,11 @@ private boolean isInitPort; //åå§åä¸²å£ private void initPort(){ //SpUtil.setString("port_grid","/dev/ttyS7"); //SpUtil.setString("port_key","/dev/ttyS1"); //SpUtil.setString("port_jiu","/dev/ttyS2"); try { /*SpUtil.setString("port_grid","/dev/ttyS0"); SpUtil.setString("port_key","/dev/ttyS4"); SpUtil.setString("port_jiu","/dev/ttyS9");*/ gridPath = SpUtil.getString("port_grid"); getVM().addInfo("é¨ä¸²å£é¾æ¥ï¼"+gridPath); keyPath = SpUtil.getString("port_key"); @@ -1828,9 +1907,14 @@ getVM().addInfo("串å£å表ï¼"+ports.size()); } if(ports.size()>0){ index = ports.size()-1; index = ports.size(); portHandler.sendEmptyMessage(0); } } }catch (RuntimeException e){ Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show(); }catch (Exception e){ Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show(); } } @@ -1948,17 +2032,17 @@ private boolean checkEnd(){ if(TextUtils.isEmpty(gridPath)){ getVM().addInfo("é¨é误"); getVM().addInfo("é¨é误<<<<<<<<<<<<<<<<<<<"); startIndex=0; return false; } if(TextUtils.isEmpty(keyPath)){ getVM().addInfo("é¥åé误"); getVM().addInfo("é¥åé误<<<<<<<<<<<<<<<<<<<"); startIndex=1; return false; } if(TextUtils.isEmpty(jiuPath)){ getVM().addInfo("é ç²¾é误"); getVM().addInfo("é ç²¾é误<<<<<<<<<<<<<<<<<<<"); startIndex=2; return false; } @@ -2034,7 +2118,6 @@ if(handler.hasMessages(2)){ handler.removeMessages(2); } HashMap<String,String> copyMap = new HashMap<>(); copyMap.putAll(closeMap); closeMap.clear(); @@ -2071,11 +2154,28 @@ } if(!isFail){ //å ³é¨æå boolean isSend = false; String bh = gridDo.getGridKey().substring(0,2); if("1".equals(e.getType())){ //1å·æ¿ if("01".equals(bh)){ isSend = true; } }else if("2".equals(e.getType())){ //2å·æ¿ if("02".equals(bh)){ isSend = true; } }else { isSend = true; } if(isSend) { EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"é¨å ³éæå***************************>ç®æ ï¼"+gridDo.getKeyCode()+",å½åï¼"+gridDo.getCurKeyCode())); getVM().closeGrid(gridDo); } } } } if(sb.length()>0){ ToastView.show(MApplication.mContext, sb.toString() + "é¥ååæ¾ä½ç½®é误"); } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainVM.java
@@ -13,30 +13,24 @@ import com.doumee.keyCabinet.bean.CabinetFaceBean; import com.doumee.keyCabinet.bean.DevConfigBean; import com.doumee.keyCabinet.bean.FaceUserBean; import com.doumee.keyCabinet.bean.KeyCabinetBean; import com.doumee.keyCabinet.bean.LoginBean; import com.doumee.keyCabinet.bean.ManageKeyCabinetBean; import com.doumee.keyCabinet.dao.CabinetGridDo; import com.doumee.keyCabinet.dao.DaoManager; import com.doumee.keyCabinet.event.DevConfigEvent; import com.doumee.keyCabinet.event.HttpEvent; import com.doumee.keyCabinet.http.Apis; import com.doumee.keyCabinet.http.param.BaseResponse; import com.doumee.keyCabinet.http.param.CloseGridParam; import com.doumee.keyCabinet.http.param.DevErrInfoParam; import com.doumee.keyCabinet.http.param.DevLoginParam; import com.doumee.keyCabinet.http.param.FaceUserParam; import com.doumee.keyCabinet.http.param.RequestBaseObject; import com.doumee.keyCabinet.http.param.SyncGridDataParam; import com.doumee.keyCabinet.http.param.TimeOutUnCloseAlarmParam; import com.doumee.keyCabinet.utils.BraceletLogUtils; import com.doumee.keyCabinet.utils.LMobileInfo; import com.doumee.keyCabinet.utils.LanguageUtil; import com.doumee.keyCabinet.utils.ParamsUtil; import com.doumee.keyCabinet.utils.i485.SportUtils; import com.doumee.lib_coremodel.base.BaseModel; import com.doumee.lib_coremodel.base.DataViewModel; import com.doumee.lib_coremodel.http.rxJava.SimpleObserver; import com.doumee.lib_coremodel.http.utils.GsonTools; import com.doumee.lib_coremodel.http.utils.RxUtils; import com.doumee.lib_coremodel.util.SpUtil; import com.doumee.lib_coremodel.util.StringUtil; @@ -48,9 +42,6 @@ import java.util.HashMap; import java.util.List; import okhttp3.Headers; import retrofit2.Response; public class MainVM extends DataViewModel { public ObservableField<String> dayObs = new ObservableField<>(""); public ObservableField<String> timeObs = new ObservableField<>(""); @@ -58,6 +49,12 @@ private MutableLiveData<List<FaceUserBean>> faceLD = new MutableLiveData<>(); private MutableLiveData<DevConfigBean> confidLD = new MutableLiveData<>(); private boolean isSubmit = false; public void setSubmit(boolean submit) { isSubmit = submit; } @ViewModelInject public MainVM(@NonNull Application application, BaseModel model) { @@ -80,6 +77,7 @@ if(200==response.getCode()){ if(response.getData()!=null){ MApplication.saveConfigBean(response.getData()); EventBus.getDefault().post(new HttpEvent("é ç²¾æ£æµå¼å ³ï¼"+response.getData().getAlcoholStatus())); confidLD.setValue(response.getData()); if(response.getData().getCabinetGridInfoVOList()!=null){ updateDao(response.getData().getCabinetGridInfoVOList()); @@ -114,6 +112,7 @@ } List<CabinetGridDo> addList = new ArrayList<>(); List<CabinetGridDo> updateList = new ArrayList<>(); List<SyncGridDataParam.GridDTO> errList = new ArrayList<>(); for(ManageKeyCabinetBean bean:beans){ String key = SportUtils.intToHex(Integer.parseInt(bean.getBoardCode()))+SportUtils.intToHex(Integer.parseInt(bean.getChannelCode())); if(oldMap.containsKey(key)){ @@ -129,6 +128,13 @@ gridDo.setWorkingStatus(bean.getWorkingStatus()); updateList.add(gridDo); oldMap.remove(key); if(isSubmit&&!isCheck(gridDo.getKeyCode(),gridDo.getCurKeyCode())){ SyncGridDataParam.GridDTO errDo = new SyncGridDataParam.GridDTO(); errDo.setActualLable(gridDo.getCurKeyCode()); errDo.setBoardCode(bean.getBoardCode()); errDo.setChannelCode(bean.getChannelCode()); errList.add(errDo); } }else { //æ°å¢ CabinetGridDo gridDo = new CabinetGridDo(); @@ -165,6 +171,20 @@ } DaoManager.getCabinetGridDao().update(upList); } if(errList.size()>0){ syncGridData(errList); } } private boolean isCheck(String v1,String v2){ if(TextUtils.isEmpty(v1)&&TextUtils.isEmpty(v2)){ return true; }else if(TextUtils.isEmpty(v1)&&!TextUtils.isEmpty(v2)){ return false; }else if(!TextUtils.isEmpty(v1)&&TextUtils.isEmpty(v2)){ return false; } return v1.equals(v2); } public void devHeart(){ @@ -191,12 +211,45 @@ }); } public void syncGridData(List<SyncGridDataParam.GridDTO> errList){ SyncGridDataParam param = new SyncGridDataParam(); param.setCode(LMobileInfo.getDeviceUniqueId()); param.setGridDTOList(errList); StringBuilder sb = new StringBuilder(); for(SyncGridDataParam.GridDTO d:errList){ if(sb.length()>0){ sb.append(","); } sb.append(d.getBoardCode()+"_"+d.getChannelCode()+":"+d.getActualLable()); } EventBus.getDefault().post(new HttpEvent("䏿¥é误é¥åä¿¡æ¯===ã"+sb.toString())); getRetrofitService(Apis.class).syncGridData(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public MutableLiveData<List<FaceUserBean>> getFaceLD() { return faceLD; } public void getFaceDatas() { //showLoading(true); addInfo("æ¥è¯¢äººè¸æ°æ®======ãè°ç¨æ¥å£"); getRetrofitService(Apis.class).allFaceList( LMobileInfo.getDeviceUniqueId()) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse<CabinetFaceBean>>(rxJavaGcManager) { @@ -291,12 +344,13 @@ param.setCabinetId(MApplication.getConfigBean().getId()); param.setMemberId(loginBean.getMemberId()); param.setGridId(gridDo.getGridId()); EventBus.getDefault().post(new HttpEvent("===>è¶ æ¶æªå ³é¨-请æ±")); getRetrofitService(Apis.class).timeOutUnCloseAlarm(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { toast("è¶ æ¶æªå ³é¨æ¥å£è°ç¨æå"); toast("===>è¶ æ¶æªå ³é¨-è¿å"); } @Override @@ -319,12 +373,13 @@ param.setMemberId(loginBean.getMemberId()); param.setGridId(gridDo.getGridId()); param.setKeyStatus(!TextUtils.isEmpty(gridDo.getCurKeyCode())?1:2); EventBus.getDefault().post(new HttpEvent("===>é¦é¡µå ³éææ ¼-请æ±")); getRetrofitService(Apis.class).closeGrid(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver<BaseResponse>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { EventBus.getDefault().post(new HttpEvent("===>é¦é¡µå ³éææ ¼-è¿å")); } @Override keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/BraceletLogUtils.java
@@ -14,14 +14,14 @@ public static Long lastTime = 0L; public static void saveLog(String msg){ String time = TimeUtils.getNowDate(); /*String time = TimeUtils.getNowDate(); String text = SpUtil.getString(LOG_KEY); if(TextUtils.isEmpty(text)){ text = ""; } text+= time + "ï¼"+msg+" #"; COUNT++; SpUtil.saveString(LOG_KEY,text); SpUtil.saveString(LOG_KEY,text);*/ } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/CrashHandler.java
@@ -11,10 +11,12 @@ import android.os.Environment; import android.os.Looper; import com.doumee.keyCabinet.MApplication; import com.doumee.keyCabinet.ui.guide.GuideActivity; import com.doumee.keyCabinet.ui.main.MainActivity; import com.doumee.keyCabinet.utils.update.FileUtil; import com.doumee.lib_coremodel.util.SpUtil; import com.innohi.YNHAPI; import com.mc.enjoysdk.McSystemUi; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; @@ -28,6 +30,7 @@ import java.lang.Thread.UncaughtExceptionHandler; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Properties; /** @@ -40,7 +43,7 @@ */ public class CrashHandler implements UncaughtExceptionHandler { private static final String TAG = "CrashHandler"; private static String PATH = Environment.getExternalStorageDirectory().getPath() + "/log/"; private static String PATH = "/log/"; public static final String FILE_NAME = "crash"; //logæä»¶çåç¼å private static final String FILE_NAME_SUFFIX = ".txt"; @@ -87,9 +90,8 @@ public void uncaughtException(Thread thread, Throwable ex) { try { //导åºå¼å¸¸ä¿¡æ¯å°SDå¡ä¸ YNHAPI mAPI = YNHAPI.getInstance(); mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.VISIBLE); dumpExceptionToSDCard(ex); McSystemUi mcSystemUi = McSystemUi.getInstance(mContext); MCUtils.show(mcSystemUi); long time = SpUtil.getLong("err_app"); SpUtil.saveLong("err_app",System.currentTimeMillis()); if(System.currentTimeMillis()-time>60000){ @@ -111,10 +113,6 @@ } //è¿éå¯ä»¥éè¿ç½ç»ä¸ä¼ å¼å¸¸ä¿¡æ¯å°æå¡å¨ï¼ä¾¿äºå¼å人ååææ¥å¿ä»èè§£å³bug } catch (IOException e) { e.printStackTrace(); System.out.println("é误æ¥å¿1"+e.getMessage()); } //æå°åºå½åè°ç¨æ ä¿¡æ¯ ex.printStackTrace(); //å¦æç³»ç»æä¾äºé»è®¤çå¼å¸¸å¤çå¨ï¼å交ç»ç³»ç»å»ç»ææä»¬çç¨åºï¼å¦åå°±ç±æä»¬èªå·±ç»æèªå·± @@ -127,34 +125,28 @@ if (!handleException(ex) && mDefaultHandler != null) { // å¦æç¨æ·æ²¡æå¤çå让系ç»é»è®¤çå¼å¸¸å¤ç卿¥å¤ç mDefaultHandler.uncaughtException(thread, ex); } else { /*try { Thread.sleep(500); } catch (InterruptedException e) { Log.e(TAG, "error : ", e); }*/ /*System.out.println("éå¯åºç¨"); // å建ä¸ä¸ªæ°çå¯å¨æå¾ Intent intent = new Intent(mContext, GuideActivity.class); // 设置FLAG_ACTIVITY_CLEAR_TASKæ å¿ä½ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); // 使ç¨PendingIntentå è£ å¯å¨æå¾ PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT); // è·åAlarmManagerå®ä¾ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); // å¨500毫ç§å触åéå¯æä½ alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 10, pendingIntent); } long current = System.currentTimeMillis(); String time2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current)); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrintStream print = new PrintStream(out); //导åºåçå¼å¸¸çæ¶é´ print.println(time2); //å¯¼åºææºä¿¡æ¯ dumpPhoneInfo(print); print.println(); ex.printStackTrace(print); SpUtil.saveString(FILE_NAME+time2,new String(out.toByteArray())); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1);*/ /*// æªæè·å¼å¸¸åæä»¶ writeCrashInfoToFile(ex); // éåºæ´ä¸ªåºç¨ if (mDefaultHandler != null) { mDefaultHandler.uncaughtException(thread, ex); } else { System.exit(0); }*/ print.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("é误æ¥å¿2"+e.getMessage()); //LogUtils.e(TAG, "dump crash info failed"); } }catch (Exception e){ e.printStackTrace(); } } @@ -200,6 +192,8 @@ } catch (NameNotFoundException e) { e.printStackTrace(); System.out.println("é误æ¥å¿3"+e.getMessage()); }catch (Exception e){ e.printStackTrace(); } } @@ -244,7 +238,6 @@ Build.BRAND, // android SDKçæ¬ Build.VERSION.RELEASE); //sp.setString(Constants.SP_CRASH_EXCEPTION, errorLog); return null; } @@ -272,7 +265,8 @@ dumpPhoneInfo(print); print.println(); ex.printStackTrace(print); //SpUtil.saveString(FILE_NAME+time,new String(out.toByteArray())); SpUtil.saveString(FILE_NAME+time,new String(out.toByteArray())); print.close(); } catch (Exception e) { e.printStackTrace(); @@ -280,7 +274,7 @@ //LogUtils.e(TAG, "dump crash info failed"); } //以å½åæ¶é´å建logæä»¶ File file = new File(PATH , FILE_NAME + time + FILE_NAME_SUFFIX); File file = new File(FileUtil.getFile(mContext)+PATH , FILE_NAME + time + FILE_NAME_SUFFIX); try { PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); //导åºåçå¼å¸¸çæ¶é´ keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/MCUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.doumee.keyCabinet.utils; import com.mc.enjoysdk.McSystemUi; import com.mc.enjoysdk.transform.McSystemUiFlag; public class MCUtils { public static void hind(McSystemUi mcSystemUi){ mcSystemUi.temporarilySwitchStatusBar(false); mcSystemUi.temporarilySwitchNavigation(false); /*//éèç¶ææ ä¿¡æ¯ mcSystemUi.disableStatusBarItem(McSystemUiFlag.DISABLE_SYSTEM_INFO); //ç¦æ¢ç¶ææ å¼¹åº mcSystemUi.disableStatusBarItem(McSystemUiFlag.DISABLE_NOTIFICATION_ALERTS); //ç¦æ¢ç¶ææ 䏿 mcSystemUi.disableStatusBarItem(McSystemUiFlag.DISABLE_EXPAND);*/ } public static void show(McSystemUi mcSystemUi){ //mcSystemUi.disableStatusBarItem(McSystemUiFlag.DISABLE_NONE); mcSystemUi.temporarilySwitchStatusBar(true); mcSystemUi.temporarilySwitchNavigation(true); } } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java
@@ -5,34 +5,20 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbManager; import android.serialport.SerialPortFinder; import java.util.ArrayList; import java.util.List; public class SportUtils { public static List<String> getSerialPortPaths(Context context) { UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); List<UsbDevice> devices = new ArrayList<>(usbManager.getDeviceList().values()); // è·åææä¸²å£è®¾å¤è·¯å¾ String[] devices = new SerialPortFinder().getAllDevicesPath(); List<String> serialPaths = new ArrayList<>(); for (UsbDevice device : devices) { for (int i = 0; i < device.getInterfaceCount(); i++) { UsbInterface intf = device.getInterface(i); if (intf.getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA) { serialPaths.add(device.getDeviceName()); break; if(devices!=null){ for(String key:devices){ serialPaths.add(key); } } } if(serialPaths.size()==0){ serialPaths.add("/dev/ttyS0"); serialPaths.add("/dev/ttyS1"); serialPaths.add("/dev/ttyS2"); serialPaths.add("/dev/ttyS3"); serialPaths.add("/dev/ttyS4"); serialPaths.add("/dev/ttyS5"); serialPaths.add("/dev/ttyS6"); serialPaths.add("/dev/ttyS7"); } return serialPaths; } keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/update/FileUtil.java
@@ -10,6 +10,9 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.sql.Timestamp; import java.text.DecimalFormat; @@ -236,4 +239,60 @@ } return file; } public static interface DownLoadCallBack{ void sucess(); void err(String e); } public static void downLoadFile(String filePath,String url,DownLoadCallBack callBack){ try { URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setConnectTimeout(10000); int responeCode = conn.getResponseCode(); InputStream is; if (responeCode == 200) { is = conn.getInputStream(); } else { //è¿æ¥å¤±è´¥ if(callBack!=null){ callBack.err("ä¸è½½å°åé误"); } return; } int fileSize = conn.getContentLength(); if (fileSize < 1 || is == null) { //æä»¶å¤§å°ä¸å¯¹ if(callBack!=null){ callBack.err("æä»¶å¤§å°ä¸å¯¹"); } return; } else { //ä¸è½½ if (FileUtil.deleteFile(filePath)) {// å é¤åæ¥çå®è£ æä»¶åä¸è½½ FileOutputStream fos = new FileOutputStream(filePath); byte[] bytes = new byte[1024]; int len = -1; while ((len = is.read(bytes)) != -1) { fos.write(bytes, 0, len); fos.flush(); } //ä¸è½½å®æ if(callBack!=null){ callBack.sucess(); } is.close(); fos.close(); } } } catch (Exception e) { //ä¸è½½æ¥é if(callBack!=null){ callBack.err(e.getMessage()); } e.printStackTrace(); } } } keyCabinet-android/app/src/main/res/layout/change_url_activity.xml
@@ -60,6 +60,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@+id/viewBack" app:layout_constraintBottom_toTopOf="@+id/tv_bc" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" @@ -68,7 +79,7 @@ android:textColor="#ff111111" android:textSize="27sp" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@+id/viewBack" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp" android:layout_marginLeft="30dp"/> @@ -187,6 +198,52 @@ android:lines="1"/> <TextView android:id="@+id/tv5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="éæ©æå头(0æ1)" android:textColor="#ff111111" android:textSize="27sp" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@+id/v_3" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp" android:layout_marginLeft="30dp"/> <View android:id="@+id/v_4" android:layout_width="match_parent" android:layout_height="75dp" app:layout_constraintTop_toBottomOf="@+id/tv5" android:layout_marginTop="18dp" android:background="@drawable/shape_et_bg" android:layout_marginLeft="30dp" android:layout_marginRight="30dp"/> <EditText android:id="@+id/et_xj" android:layout_width="0dp" android:layout_height="75dp" android:background="@null" android:text="" android:textColor="#111111" android:hint="请è¾å ¥æå头ç¼å·(0æ1)" android:textColorHint="#999999" android:textSize="24sp" android:inputType="number" app:layout_constraintTop_toTopOf="@+id/v_4" app:layout_constraintStart_toStartOf="@+id/v_4" app:layout_constraintEnd_toEndOf="@+id/v_4" android:layout_marginLeft="18dp" android:layout_marginRight="18dp" android:gravity="center_vertical" android:lines="1"/> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> <TextView android:id="@+id/tv_bc" android:layout_width="match_parent" android:layout_height="75dp" keyCabinet-android/app/src/main/res/layout/face_activity.xml
@@ -220,13 +220,57 @@ </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:id="@+id/cl_zw_gl" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" android:background="@drawable/shape_r30_face_bg" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/cl_sk_gl" app:commandType="@{9}" app:onClickCommand="@{model.myTypeCommand}" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" android:layout_height="28dp" android:src="@mipmap/ic_zhiwen" android:layout_gravity="center_vertical"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="æçº¹éªè¯" android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_sk_gl" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" android:background="@drawable/shape_r30_face_bg" app:layout_constraintLeft_toRightOf="@+id/cl_zw_gl" app:layout_constraintRight_toRightOf="parent" app:commandType="@{1}" app:onClickCommand="@{model.myTypeCommand}" > @@ -252,14 +296,15 @@ android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="7dp"/> android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> <!--人è¸éªè¯--> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_fail" android:layout_width="wrap_content" @@ -308,6 +353,7 @@ </androidx.constraintlayout.widget.ConstraintLayout> <!-- 叿ºééªè¯æ¹å¼ --> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_sj_xuan" android:layout_width="match_parent" @@ -424,18 +470,68 @@ android:layout_marginBottom="30dp" android:visibility="visible"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_zw_sj" android:layout_width="0dp" android:layout_height="75dp" app:layout_constraintBottom_toBottomOf="parent" android:background="@drawable/shape_r30_face_bg" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/ll_01" android:layout_marginRight="20dp" app:commandType="@{10}" app:onClickCommand="@{model.myTypeCommand}" > <LinearLayout android:id="@+id/ll_01" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" android:layout_height="28dp" android:src="@mipmap/ic_zhiwen" android:layout_gravity="center_vertical"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="æçº¹" android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/ll_01" android:layout_width="0dp" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toRightOf="@+id/cl_zw_sj" app:layout_constraintRight_toLeftOf="@+id/ll_02" android:background="@drawable/shape_r30_face_bg" android:paddingLeft="30dp" android:paddingRight="30dp" app:commandType="@{2}" app:onClickCommand="@{model.myTypeCommand}"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" @@ -445,14 +541,15 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="å·å¡éªè¯" android:text="å·å¡" android:textColor="#ff279baa" android:textSize="24sp" android:layout_marginLeft="7dp" android:textStyle="bold" android:layout_gravity="center_vertical"/> android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:id="@+id/ll_02" @@ -484,7 +581,125 @@ </androidx.constraintlayout.widget.ConstraintLayout> <!--æçº¹éªè¯--> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_zw" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toTopOf="@+id/camera_textureview" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:background="@color/white" android:visibility="gone"> <View android:id="@+id/v_c_zw" android:layout_width="340dp" android:layout_height="340dp" android:background="@mipmap/ic_zhiwenyanzheng" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <TextView android:id="@+id/tv_zw_tip" android:layout_width="0dp" android:layout_height="wrap_content" android:text="è¯·å°æææ¾ç½®å¨æçº¹ééå¨ä¸" android:textColor="#ff666666" android:textSize="24sp" android:gravity="center" app:layout_constraintTop_toBottomOf="@+id/v_c_zw" android:layout_marginTop="42dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_sk_zw" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" android:background="@drawable/shape_r30_face_bg" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/cl_rl_zw" app:commandType="@{1}" app:onClickCommand="@{model.myTypeCommand}" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" android:layout_height="28dp" android:src="@mipmap/ic_shuaka" android:layout_gravity="center_vertical"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="å·å¡éªè¯" android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_rl_zw" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" app:layout_constraintLeft_toRightOf="@+id/cl_sk_zw" app:layout_constraintRight_toRightOf="parent" android:background="@drawable/shape_r30_face_bg" app:commandType="@{4}" app:onClickCommand="@{model.myTypeCommand}" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" android:layout_height="28dp" android:src="@mipmap/ic_renlian" android:layout_gravity="center_vertical"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人è¸éªè¯" android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> <!--å·å¡éªè¯--> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_card" android:layout_width="match_parent" @@ -520,12 +735,55 @@ app:layout_constraintEnd_toEndOf="parent"/> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:id="@+id/cl_zw_sk" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" android:background="@drawable/shape_r30_face_bg" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/cl_rl_sk" app:commandType="@{11}" app:onClickCommand="@{model.myTypeCommand}" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" > <ImageView android:layout_width="28dp" android:layout_height="28dp" android:src="@mipmap/ic_zhiwen" android:layout_gravity="center_vertical"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="æçº¹éªè¯" android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_rl_sk" android:layout_width="0dp" android:layout_height="75dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="30dp" app:layout_constraintLeft_toRightOf="@+id/cl_zw_sk" app:layout_constraintRight_toRightOf="parent" android:background="@drawable/shape_r30_face_bg" app:commandType="@{4}" app:onClickCommand="@{model.myTypeCommand}" @@ -552,13 +810,14 @@ android:textColor="#ff279baa" android:textSize="24sp" android:textStyle="bold" android:layout_marginLeft="7dp"/> android:layout_marginLeft="12dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> <!--é ç²¾æ£æµ--> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_jiu" android:layout_width="match_parent" keyCabinet-android/app/src/main/res/layout/key_cabinet_activity.xml
@@ -61,6 +61,19 @@ app:layout_constraintEnd_toEndOf="parent" android:layout_marginRight="30dp"/> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="éæ©æé¨" android:textColor="#ff111111" android:textSize="33sp" android:textStyle="bold" app:layout_constraintTop_toTopOf="@+id/viewBack" app:layout_constraintBottom_toBottomOf="@+id/viewBack" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_km" android:layout_width="match_parent" keyCabinet-android/app/src/main/res/layout/main_activity.xml
@@ -14,13 +14,14 @@ android:layout_height="match_parent" tools:context=".ui.main.MainActivity" > <TextureView android:id="@+id/checkNirTexture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="0" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"/> app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/img1" keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_zhiwen.png
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_zhiwenluru.png
keyCabinet-android/app/src/main/res/mipmap-xxhdpi/ic_zhiwenyanzheng.png
keyCabinet-android/app/src/main/res/values/strings.xml
@@ -73,6 +73,13 @@ <string name="on_number">请è¾å ¥16ä½åºåå·</string> <string name="accredit_use">åºç¨æ¿æ´»</string> <string name="filter_vcode">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</string> <string name="accredit_off">ç¦»çº¿æ¿æ´»</string> <string name="off_technological_process">ç¦»çº¿æ¿æ´»æµç¨: </string> <string name="off_technological_process_three">å¨ç¾åº¦æºè½äºå¹³å°è¾å ¥è®¾å¤ç¡¬ä»¶æçº¹å¹¶è·åç¦»çº¿æ¿æ´»æä»¶ï¼License.zipï¼</string> <string name="off_technological_process_four">å°ç¦»çº¿æ¿æ´»æä»¶æ·è´è³å ç½®SD塿 ¹ç®å½ä¸</string> <string name="off_technological_process_five">å¨SDKçé¢ä¸è§¦åç¦»çº¿æ¿æ´»</string> <string name="off_local_hardware">æ¬æºç¡¬ä»¶æçº¹</string> <string name="off_problem">æ¿æ´»éå°é®é¢?</string> <string name="home_face">人è¸å¯¼å ¥</string> <string name="home_faceLibrary">人è¸åºç®¡ç</string> <string name="home_camra">忢æå头</string> keyCabinet-android/app/src/test/java/com/doumee/ticketmachine/ExampleUnitTest.java
@@ -15,14 +15,9 @@ public class ExampleUnitTest { @Test public void addition_isCorrect() { CircularQueue queue = new CircularQueue(); for(int i=0;i<3;i++){ queue.enqueue(i+""); } System.out.println(queue.dequeue()); System.out.println(queue.dequeue()); System.out.println(queue.dequeue()); System.out.println(queue.dequeue()); String code = "EF 01 FF FF FF FF 01 00 03 1D 00"; String x = SportUtils.getBCC(code); System.out.println(x); } keyCabinet-android/datalibrary/build.gradle
@@ -3,12 +3,12 @@ } android { compileSdkVersion 29 compileSdkVersion 28 buildToolsVersion "29.0.3" defaultConfig { minSdkVersion 22 targetSdkVersion 29 targetSdkVersion 28 versionCode 5 versionName "5.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" keyCabinet-android/facelibrary/build.gradle
@@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { compileSdkVersion 29 compileSdkVersion 28 // buildToolsVersion '26.0.2' publishNonDefault true defaultConfig { minSdkVersion 22 targetSdkVersion 29 targetSdkVersion 28 versionCode 5 versionName "5.0" keyCabinet-android/lib_opensource/build.gradle
@@ -53,12 +53,12 @@ annotationProcessor deps.lifecycle.compiler //work api(deps.work.work_runtime){ /*api(deps.work.work_runtime){ exclude group:"com.google.guava",module:"listenablefuture" } api (deps.work.work_rxjava2){ exclude group:"com.google.guava",module:"listenablefuture" } }*/ //å¯¼èª nav api deps.nav.navigation_runtime keyCabinet-android/settinglibrary/build.gradle
@@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { compileSdkVersion 29 compileSdkVersion 28 buildToolsVersion "29.0.3" defaultConfig { minSdkVersion 22 targetSdkVersion 29 targetSdkVersion 28 versionCode 1 versionName "1.0" keyCabinet-android/versions.gradle
@@ -1,8 +1,8 @@ def build_versions = [:] build_versions.min_sdk = 22 build_versions.target_sdk = 30 build_versions.compile_sdk = 30 build_versions.target_sdk = 28 build_versions.compile_sdk = 28 build_versions.build_tools = "30.0.2" ext.build_versions = build_versions @@ -64,11 +64,6 @@ jetpack.datastore_preferences_rxjava2 = "androidx.datastore:datastore-preferences-rxjava2:1.0.0" deps.jetpack = jetpack //workManager def work = [:] work.work_runtime = "androidx.work:work-runtime:2.6.0" work.work_rxjava2 = "androidx.work:work-rxjava2:2.6.0" deps.work = work def nav=[:] nav.navigation_runtime = "androidx.navigation:navigation-runtime:2.3.5"