From 9a697d6a8bc05955b9f7322bc86dc3e920e90e14 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 06 十一月 2025 18:07:21 +0800
Subject: [PATCH] Merge branch 'wuhuyancao' of http://139.186.142.91:10010/r/productDev/dmvisit into wuhuyancao
---
keyCabinet-android/app/libs/simple-xml-2.7.1.jar | 0
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationActivity.java | 55 +++
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java | 2
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationVM.java | 21 +
keyCabinet-android/app/src/main/res/layout/key_cabinet_activity.xml | 13
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationVM.java | 22 +
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java | 7
keyCabinet-android/app/libs/API-20250310.jar | 0
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/update/FileUtil.java | 59 ++++
keyCabinet-android/app/src/main/res/layout/chose_activation_activity.xml | 66 ++++
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/BatchOpenGridAdminParam.java | 10
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java | 10
keyCabinet-android/app/src/main/res/values/strings.xml | 7
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java | 6
keyCabinet-android/app/src/main/AndroidManifest.xml | 52 ++-
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/BraceletLogUtils.java | 4
keyCabinet-android/app/src/main/res/layout/offline_activation_activity.xml | 263 ++++++++++++++++++
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationActivity.java | 190 +++++++++++++
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java | 10
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java | 9
20 files changed, 779 insertions(+), 27 deletions(-)
diff --git a/keyCabinet-android/app/libs/API-20250310.jar b/keyCabinet-android/app/libs/API-20250310.jar
new file mode 100644
index 0000000..0235b6c
--- /dev/null
+++ b/keyCabinet-android/app/libs/API-20250310.jar
Binary files differ
diff --git a/keyCabinet-android/app/libs/simple-xml-2.7.1.jar b/keyCabinet-android/app/libs/simple-xml-2.7.1.jar
new file mode 100644
index 0000000..b09d6c7
--- /dev/null
+++ b/keyCabinet-android/app/libs/simple-xml-2.7.1.jar
Binary files differ
diff --git a/keyCabinet-android/app/src/main/AndroidManifest.xml b/keyCabinet-android/app/src/main/AndroidManifest.xml
index 9b7b0e1..1246ac8 100644
--- a/keyCabinet-android/app/src/main/AndroidManifest.xml
+++ b/keyCabinet-android/app/src/main/AndroidManifest.xml
@@ -16,6 +16,12 @@
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" />
<activity
@@ -27,31 +33,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"/>
+ android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
- android:name="com.doumee.keyCabinet.ui.main.MainActivity"
+ android:name=".ui.main.MainActivity"
android:exported="true"
- android:launchMode="singleTask" >
+ android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
+
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
@@ -75,8 +80,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,20 +90,22 @@
<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" />
+ -->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
- <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.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-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<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" />
@@ -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"
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java
index db00eab..2f176a9 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/bean/DevConfigBean.java
@@ -20,6 +20,8 @@
private String info;
//璁惧鍚嶇О
private String name;
+ //浜鸿劯璇嗗埆绂荤嚎婵�娲绘枃浠朵笅杞藉湴鍧�
+ private String activateFileUrl;
private CabinetConfigDataBean cabinetConfigDataVO;
private List<ManageKeyCabinetBean> cabinetGridInfoVOList;
@@ -103,4 +105,12 @@
public void setCabinetConfigDataVO(CabinetConfigDataBean cabinetConfigDataVO) {
this.cabinetConfigDataVO = cabinetConfigDataVO;
}
+
+ public String getActivateFileUrl() {
+ return activateFileUrl;
+ }
+
+ public void setActivateFileUrl(String activateFileUrl) {
+ this.activateFileUrl = activateFileUrl;
+ }
}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/BatchOpenGridAdminParam.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/BatchOpenGridAdminParam.java
index 9ae636c..07d582b 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/BatchOpenGridAdminParam.java
+++ b/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;
+ }
}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java
index 45696b6..dd4d1de 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/http/param/OpenGridDriverParam.java
@@ -12,6 +12,8 @@
private int cabinetId;
//鏌滄牸涓婚敭
private int gridId;
+ //寮�鍚柟寮忥細0=绯荤粺寮�鍚紱1=鎵嬪姩寮�鍚�
+ private int openType;
public int getAuthType() {
return authType;
@@ -44,4 +46,12 @@
public void setGridId(int gridId) {
this.gridId = gridId;
}
+
+ public int getOpenType() {
+ return openType;
+ }
+
+ public void setOpenType(int openType) {
+ this.openType = openType;
+ }
}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationActivity.java
new file mode 100644
index 0000000..31d9203
--- /dev/null
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationActivity.java
@@ -0,0 +1,55 @@
+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.lib_coremodel.bean.event.ActionEventData;
+import com.innohi.YNHAPI;
+
+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());
+
+ YNHAPI mAPI = YNHAPI.getInstance();
+ mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.VISIBLE);
+ }
+
+ @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;
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationVM.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/ChoseActivationVM.java
new file mode 100644
index 0000000..9f436ec
--- /dev/null
+++ b/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);
+ }
+
+}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
index c4c3570..c7ffe76 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
+++ b/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);
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationActivity.java
new file mode 100644
index 0000000..6245db2
--- /dev/null
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationActivity.java
@@ -0,0 +1,190 @@
+package com.doumee.keyCabinet.ui.face;
+
+import androidx.annotation.Nullable;
+
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Environment;
+import android.text.TextUtils;
+import android.view.View;
+
+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);
+ }
+
+ @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;
+ FileUtil.downLoadFile(filePath, MApplication.getConfigBean().getActivateFileUrl(), new FileUtil.DownLoadCallBack() {
+ @Override
+ public void sucess() {
+ ToastView.show(MApplication.mContext,"涓嬭浇鎴愬姛");
+ isDownLoad = false;
+ }
+
+ @Override
+ public void err(String e) {
+ ToastView.show(MApplication.mContext,e);
+ isDownLoad = false;
+ }
+ });
+ }
+ 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("婵�娲诲け璐ワ紝璁惧纭欢鎸囩汗涓嶭icense.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("婵�娲诲け璐ワ紝璁惧纭欢鎸囩汗涓嶭icense.zip涓嶇");
+ } else {
+ getDB().accreditHintTv.setText(code);
+ }
+ }
+ });
+
+ }
+ }
+ });
+ break;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+}
\ No newline at end of file
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationVM.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationVM.java
new file mode 100644
index 0000000..251a8e0
--- /dev/null
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/OfflineActivationVM.java
@@ -0,0 +1,22 @@
+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 OfflineActivationVM extends DataViewModel {
+
+ @ViewModelInject
+ public OfflineActivationVM(@NonNull Application application, BaseModel model) {
+ super(application, model);
+ }
+
+ @Override
+ protected void clickByTypeCommand(int type) {
+ doAction(type);
+ }
+}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
index 2377446..f3e8818 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
+++ b/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);
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java
index 780a18c..40d7828 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetVM.java
+++ b/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) {
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 2584140..204cdf4 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
@@ -69,6 +69,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;
@@ -458,6 +459,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);
@@ -577,7 +584,7 @@
/*
*瑕佹墽琛岀殑鎿嶄綔*/
- startActivity(new Intent(mContext, ActivationActivity.class));
+ startActivity(new Intent(mContext, ChoseActivationActivity.class));
}
};
Timer timer = new Timer();
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/BraceletLogUtils.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/BraceletLogUtils.java
index a2716c6..070bf0a 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/BraceletLogUtils.java
+++ b/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);*/
}
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/update/FileUtil.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/update/FileUtil.java
index 596cbae..42bd3b6 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/update/FileUtil.java
+++ b/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();
+ }
+ }
}
\ No newline at end of file
diff --git a/keyCabinet-android/app/src/main/res/layout/chose_activation_activity.xml b/keyCabinet-android/app/src/main/res/layout/chose_activation_activity.xml
new file mode 100644
index 0000000..ef78ae5
--- /dev/null
+++ b/keyCabinet-android/app/src/main/res/layout/chose_activation_activity.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout >
+ <data>
+ <import type="com.doumee.lib_coremodel.base.BaseViewModel"/>
+ <import type="android.view.View"/>
+ <variable
+ name="model"
+ type="com.doumee.keyCabinet.ui.face.ChoseActivationVM" />
+ </data>
+ <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ui.face.ChoseActivationActivity">
+
+ <TextView
+ 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="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ android:layout_marginTop="30dp"/>
+
+ <TextView
+ android:id="@+id/tv_zx"
+ android:layout_width="match_parent"
+ android:layout_height="75dp"
+ android:text="鍦ㄧ嚎婵�娲�"
+ android:textColor="@color/white"
+ android:textSize="24sp"
+ android:textStyle="bold"
+ android:gravity="center"
+ android:background="@drawable/shape_mb_bt_ok"
+ android:layout_marginLeft="30dp"
+ android:layout_marginRight="30dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:commandType="@{1}"
+ app:onClickCommand="@{model.myTypeCommand}"
+ android:layout_marginBottom="30dp"/>
+
+ <TextView
+ android:id="@+id/tv_km"
+ android:layout_width="match_parent"
+ android:layout_height="75dp"
+ android:text="绂荤嚎婵�娲�"
+ android:textColor="@color/white"
+ android:textSize="24sp"
+ android:textStyle="bold"
+ android:gravity="center"
+ android:background="@drawable/shape_mb_bt_ok"
+ android:layout_marginLeft="30dp"
+ android:layout_marginRight="30dp"
+ app:layout_constraintTop_toBottomOf="@+id/tv_zx"
+ android:layout_marginTop="60dp"
+ app:commandType="@{2}"
+ app:onClickCommand="@{model.myTypeCommand}"
+ android:layout_marginBottom="30dp"/>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
\ No newline at end of file
diff --git a/keyCabinet-android/app/src/main/res/layout/key_cabinet_activity.xml b/keyCabinet-android/app/src/main/res/layout/key_cabinet_activity.xml
index a32a5b2..fc9932d 100644
--- a/keyCabinet-android/app/src/main/res/layout/key_cabinet_activity.xml
+++ b/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"
diff --git a/keyCabinet-android/app/src/main/res/layout/offline_activation_activity.xml b/keyCabinet-android/app/src/main/res/layout/offline_activation_activity.xml
new file mode 100644
index 0000000..7cccb3f
--- /dev/null
+++ b/keyCabinet-android/app/src/main/res/layout/offline_activation_activity.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout >
+ <data>
+ <import type="com.doumee.lib_coremodel.base.BaseViewModel"/>
+ <import type="android.view.View"/>
+ <variable
+ name="model"
+ type="com.doumee.keyCabinet.ui.face.OfflineActivationVM" />
+ </data>
+ <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ui.face.OfflineActivationActivity">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!--绂荤嚎婵�娲�-->
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_15"
+ android:id="@+id/accredit_offRl"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:id="@+id/accredit_Ll"
+ android:layout_marginRight="49.3dp"
+ android:layout_marginLeft="49.3dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:background="@drawable/bg_round_import"
+ android:orientation="vertical">
+
+ <TextView
+ android:textSize="20sp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="@dimen/start_15"
+ android:text="@string/off_technological_process"
+ android:textColor="#999999" />
+
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_15"
+ android:orientation="horizontal"
+ android:layout_marginRight="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/activity_hintOne"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="涓�"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+ <TextView
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@+id/activity_hintOne"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/off_technological_process_one"
+ android:textColor="#ffffff"
+ android:textSize="18sp" />
+ </RelativeLayout>
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_10"
+ android:orientation="horizontal"
+ android:layout_marginRight="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/activity_hintTwo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="浜�"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+ <TextView
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@+id/activity_hintTwo"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/off_technological_process_two"
+ android:textColor="#ffffff"
+ android:textSize="18sp" />
+ </RelativeLayout>
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_10"
+ android:orientation="horizontal"
+ android:layout_marginRight="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/activity_hintThree"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="涓�"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@+id/activity_hintThree"
+ android:text="@string/off_technological_process_three"
+ android:textColor="#ffffff"
+ android:textSize="18sp" />
+ </RelativeLayout>
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_10"
+ android:orientation="horizontal"
+ android:layout_marginRight="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/activity_hintFour"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鍥�"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+ <TextView
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@+id/activity_hintFour"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/off_technological_process_four"
+ android:textColor="#ffffff"
+ android:textSize="18sp" />
+ </RelativeLayout>
+ <RelativeLayout
+ android:layout_marginTop="@dimen/start_10"
+ android:orientation="horizontal"
+ android:layout_marginRight="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_marginBottom="@dimen/start_15"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/activity_hintFive"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="浜�"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+ <TextView
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@+id/activity_hintFive"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/off_technological_process_five"
+ android:textColor="#ffffff"
+ android:textSize="18sp" />
+ </RelativeLayout>
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/accredit_setTv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/accredit_Ll"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="30dp"
+ android:text="@string/off_local_hardware"
+ android:textColor="#666666"
+ android:textSize="20sp" />
+
+ <TextView
+ android:textSize="20sp"
+ android:id="@+id/accredit_deviceTv"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/accredit_setTv"
+ android:layout_marginTop="20dp"
+ android:gravity="center"
+ android:textColor="@color/white" />
+
+ <View
+ android:id="@+id/aaccredit_view"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_below="@+id/accredit_deviceTv"
+ android:layout_marginLeft="50dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="50dp"
+ android:background="#222222" />
+
+ <TextView
+ android:layout_marginLeft="49.3dp"
+ android:layout_marginRight="49.3dp"
+ android:textSize="@dimen/bottom_font"
+ android:id="@+id/accredit_hintTv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/aaccredit_view"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="@dimen/activition_14"
+ android:textColor="#F34B56" />
+
+ <Button
+ android:padding="13dp"
+ android:id="@+id/accredit_offBtn"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/accredit_hintTv"
+ android:layout_centerHorizontal="true"
+ android:layout_marginLeft="@dimen/activition_49"
+ android:layout_marginTop="13dp"
+ android:layout_marginRight="@dimen/activition_49"
+ android:background="@mipmap/btn_less_normal"
+ android:text="@string/accredit_off"
+ android:textColor="@color/white"
+ android:textSize="@dimen/activition_18_sp" />
+
+ <Button
+ android:padding="13dp"
+ android:id="@+id/btn_down"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/accredit_offBtn"
+ android:layout_centerHorizontal="true"
+ android:layout_marginLeft="@dimen/activition_49"
+ android:layout_marginTop="13dp"
+ android:layout_marginRight="@dimen/activition_49"
+ android:background="@mipmap/btn_less_normal"
+ android:text="涓嬭浇婵�娲绘枃浠�"
+ android:textColor="@color/white"
+ android:textSize="@dimen/activition_18_sp"/>
+ </RelativeLayout>
+ </ScrollView>
+
+ <TextView
+ android:id="@+id/tv_id"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="NO锛�"
+ android:textColor="#ffaaaaaa"
+ android:textSize="18sp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ android:layout_marginLeft="30dp"
+ android:layout_marginBottom="22dp"
+ />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
\ No newline at end of file
diff --git a/keyCabinet-android/app/src/main/res/values/strings.xml b/keyCabinet-android/app/src/main/res/values/strings.xml
index 65190e7..9a89d5f 100644
--- a/keyCabinet-android/app/src/main/res/values/strings.xml
+++ b/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">鍦⊿DK鐣岄潰涓Е鍙戠绾挎縺娲�</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>
--
Gitblit v1.9.3