From 26ed6eb5e0c3a15b56f724e8890d33e3b6339882 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期五, 28 二月 2020 17:40:11 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge --- app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java | 1 app/src/main/res/layout/layout_check_signal.xml | 7 app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java | 3 app/src/main/res/values/strings.xml | 2 app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java | 13 app/src/main/res/layout/layout_basedata.xml | 9 app/src/main/res/layout/basedata_item_normal.xml | 12 app/src/main/res/drawable/right_arrow.png | 0 app/src/main/res/layout/inspect_signal_head.xml | 12 app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java | 38 ++ app/src/main/java/safeluck/drive/evaluation/app.java | 2 app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java | 41 ++ app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java | 258 +++++------------ app/src/main/res/layout/gps_info_item_rightarrow.xml | 12 app/src/main/java/safeluck/drive/evaluation/DB/Student.java | 4 app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java | 2 app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java | 72 +++++ app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java | 270 +++++++++++++++++++ app/src/main/res/layout/layout_base_datas.xml | 41 +- 19 files changed, 581 insertions(+), 218 deletions(-) diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/Student.java b/app/src/main/java/safeluck/drive/evaluation/DB/Student.java index 9d17de7..4bb8bc7 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/Student.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/Student.java @@ -94,10 +94,12 @@ @Override public String toString() { return "Student{" + - "stu_ID=" + stu_id + + "stu_id=" + stu_id + ", name='" + name + '\'' + ", ID='" + ID + '\'' + ", sex=" + sex + + ", head_url='" + head_url + '\'' + + ", begin_time=" + begin_time + '}'; } } diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java b/app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java index 44d415d..3babb18 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/StudentInfoUpdateWork.java @@ -8,6 +8,8 @@ import androidx.work.Worker; import androidx.work.WorkerParameters; +import com.anyun.exam.lib.MyLog; + import org.json.JSONException; import org.json.JSONObject; @@ -35,6 +37,7 @@ String name = jsonObject.getString("name"); Student student =new Student(1001,name,id,2); student.setHead_url(headUrl); + MyLog.i("鏇存柊绛惧埌浜哄憳淇℃伅锛�"+student.toString()); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getstudentDao().insert(student); return Result.success(); } catch (JSONException e) { diff --git a/app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java b/app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java new file mode 100644 index 0000000..112d331 --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/adapter/QuickAdapter.java @@ -0,0 +1,72 @@ +package safeluck.drive.evaluation.adapter; + +import android.util.SparseArray; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +public abstract class QuickAdapter<T> extends RecyclerView.Adapter<QuickAdapter.VH>{ + private List<T> mDatas; + public QuickAdapter(List<T> datas){ + this.mDatas = datas; + } + + public abstract int getLayoutId(int viewType); + + @Override + public VH onCreateViewHolder(ViewGroup parent, int viewType) { + return VH.get(parent,getLayoutId(viewType)); + } + + @Override + public void onBindViewHolder(VH holder, int position) { + convert(holder, mDatas.get(position), position); + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + public abstract void convert(VH holder, T data, int position); + //鏇存柊鏁版嵁 + public void updateData(List<T> data) { + this.mDatas = data; + notifyDataSetChanged(); + } + + public static class VH extends RecyclerView.ViewHolder{ + private SparseArray<View> mViews; + private View mConvertView; + + private VH(View v){ + super(v); + mConvertView = v; + mViews = new SparseArray<>(); + } + + public static VH get(ViewGroup parent, int layoutId){ + View convertView = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); + return new VH(convertView); + } + + public <T extends View> T getView(int id){ + View v = mViews.get(id); + if(v == null){ + v = mConvertView.findViewById(id); + mViews.put(id, v); + } + return (T)v; + } + + public void setText(int id, String value){ + TextView view = getView(id); + view.setText(value); + } + } +} diff --git a/app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java b/app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java index f697fb1..8d3dc6d 100644 --- a/app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java +++ b/app/src/main/java/safeluck/drive/evaluation/adapter/SimpleFragmentAdapter.java @@ -12,6 +12,7 @@ import safeluck.drive.evaluation.fragment.GpsInfoFragment; import safeluck.drive.evaluation.fragment.RTKConfigFragment; import safeluck.drive.evaluation.fragment.JiaXiaoFragment; +import safeluck.drive.evaluation.fragment.SetArgumentsFragment; /** @@ -21,7 +22,7 @@ * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class SimpleFragmentAdapter extends FragmentPagerAdapter { - private String[] mTitles = new String[]{"鍩虹鏁版嵁","RTK閰嶇疆","GNSS淇℃伅"}; + private String[] mTitles = new String[]{"鍩虹鏁版嵁","GNSS淇℃伅"}; public SimpleFragmentAdapter(FragmentManager fm) { super(fm); } @@ -34,15 +35,15 @@ //鍩烘湰鏁版嵁 supportFragment = BaseDatasFragment.newInstance(); break; - case 1: - supportFragment = RTKConfigFragment.newInstance(); - //ftp - break; +// case 1: +// supportFragment = RTKConfigFragment.newInstance(); +// //ftp +// break; // case 2: // supportFragment = JiaXiaoFragment.newInstance(); // //椹炬牎淇℃伅 // break; - case 2: + case 1: supportFragment = GpsInfoFragment.newInstance(); break; default:break; diff --git a/app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java b/app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java new file mode 100644 index 0000000..8862fcb --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/adapter/WrapContentLinearLayoutManager.java @@ -0,0 +1,38 @@ +package safeluck.drive.evaluation.adapter; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.anyun.exam.lib.MyLog; + +import safeluck.drive.evaluation.fragment.BaseDatasFragment; + +public class WrapContentLinearLayoutManager extends LinearLayoutManager { + private static final String TAG = "WrapContentLinearLayoutManager"; + public WrapContentLinearLayoutManager(Context context) { + super(context); + } + + public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { + super(context, orientation, reverseLayout); + } + + public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + // 鍦ㄨ繖閲岄�氳繃try鏉ユ崟鑾疯繖涓紓甯稿嵆鍙� + try { + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + MyLog.i(TAG, "onLayoutChildren: "+e.getLocalizedMessage()+" : "+e.getMessage()); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java index 7efed75..5d2a7cb 100644 --- a/app/src/main/java/safeluck/drive/evaluation/app.java +++ b/app/src/main/java/safeluck/drive/evaluation/app.java @@ -82,7 +82,7 @@ super.onCreate(); //鍒濆鍖朏ragment 寤鸿鍦ˋpplication onCreate閲岄潰鍒濆鍖� if (SystemUtil.compareProcessName(this)) { - Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(true) + Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(false) .handleException(new ExceptionHandler() { @Override public void onException(@NonNull Exception e) { diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java index b73577a..120ddc6 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java @@ -8,6 +8,8 @@ import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; @@ -15,6 +17,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -28,6 +31,8 @@ import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; @@ -37,6 +42,9 @@ import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel; import safeluck.drive.evaluation.MainActivity; import safeluck.drive.evaluation.R; +import safeluck.drive.evaluation.adapter.GpsInfoAdapter; +import safeluck.drive.evaluation.adapter.QuickAdapter; +import safeluck.drive.evaluation.adapter.WrapContentLinearLayoutManager; import safeluck.drive.evaluation.bean.ExamPlatformData; import safeluck.drive.evaluation.bean.MCUInfo; import safeluck.drive.evaluation.cEventCenter.CEventCenter; @@ -52,24 +60,12 @@ * 閭锛�632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ -public class BaseDatasFragment extends SupportFragment implements View.OnClickListener { +public class BaseDatasFragment extends SupportFragment { private static final String TAG = BaseDatasFragment.class.getSimpleName(); - private static final int REQUEST_CODE_MAP = 100; - private static final int REQUEST_CODE_CAR = 101; - private int request_code = REQUEST_CODE_MAP; - private Button btn_inspect_signal; - private Button btn_config_signal; - private Button btn_mcu_upgrade,btn_map_select; - private EditText et_ip,et_port; - private Gson gson; - StringBuffer stringBuffer = new StringBuffer(); - private EditText et_ip_rtk,et_port_rtk,et_city_id,et_city_province,et_phone; - private TextView tv_mcu; - // RTK娉ㄥ唽鐘舵�併�丷TK杩炴帴鐘舵�併�� -// private TextView tv_reg,tv_connect,tv_model,tv_sn,tv_imei,tv_login; - private RTKConfigViewModel rtkConfigViewModel; + private Gson gson = new Gson(); private RTKConfig mRtkConfig; + private AppStatus appStatus; private AppStatusViewModel appStatusViewModel; private ICEventListener icEventListener = new ICEventListener() { @Override @@ -78,30 +74,49 @@ String mcuinfoStr = (String)obj; if (gson != null){ final MCUInfo mcuInfo=gson.fromJson(mcuinfoStr, MCUInfo.class); - stringBuffer.delete(0,stringBuffer.toString().length()); - Field [] fields = mcuInfo.getClass().getDeclaredFields(); + datas.clear(); + for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); try { if (fields[i].getName().equalsIgnoreCase("version")){ String version = (String) fields[i].get(mcuInfo); version = new String(BytesUtils.hexStringToBytes(version),"GBK"); - stringBuffer.append(" "+fields[i].getName() + ":" + version); + Log.i(TAG, "onCEvent: "+version); + datas.add(fields[i].getName() + ":" + version); }else - stringBuffer.append(" "+fields[i].getName() + ":" + fields[i].get(mcuInfo)); + datas.add(fields[i].getName() + ":" + fields[i].get(mcuInfo)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } - tv_mcu.post(new Runnable() { + lv.post(new Runnable() { @Override public void run() { - tv_mcu.setText(getString(R.string.mcu_info)+stringBuffer.toString()); + + if (mRtkConfig != null){ + datas.add("鐪両D锛�"+mRtkConfig.getProvince()); + datas.add("甯侷D锛�"+mRtkConfig.getCity()); + datas.add("鐢佃瘽锛�"+mRtkConfig.getPhone()); + datas.add("RTK骞冲彴鍦板潃锛�"+mRtkConfig.getIp()); + datas.add("RTK骞冲彴绔彛锛�"+mRtkConfig.getPort()); + + datas.add("鑰冭瘯骞冲彴鍦板潃锛�"+ExamPlatformData.getInstance().getPlatformIP()); + datas.add("鑰冭瘯骞冲彴绔彛锛�"+ExamPlatformData.getInstance().getPlatformPort()); + } + if (appStatus != null){ + datas.add("RTK骞冲彴杩炴帴鐘舵�侊細"+appStatus.getRtk_connect_status()); + datas.add("RTK骞冲彴鐧诲綍鐘舵�侊細"+appStatus.getRtk_login_code()); + datas.add("鑰冭瘯骞冲彴杩炴帴鐘舵�侊細"+appStatus.getRtk_connect_status()); + datas.add("鑰冭瘯骞冲彴鐧诲綍鐘舵�侊細"+appStatus.getRtk_login_code()); + } + gpsInfoAdapter.addAll(datas); } }); + } } } @@ -111,194 +126,75 @@ return new BaseDatasFragment(); } + + private List<String> datas = new ArrayList<>(); + private RecyclerView recyclerView; + private ListView lv; + private GpsInfoAdapter gpsInfoAdapter; + private List<String> gpsinfos = new ArrayList<>(); @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.layout_base_datas, container, false); + + View view = inflater.inflate(R.layout.layout_gps_info, container, false); initView(view); - rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class); + + View footView = inflater.inflate(R.layout.gps_info_item_rightarrow,null); + View headView = inflater.inflate(R.layout.inspect_signal_head,null); + lv.addFooterView(footView); + lv.addHeaderView(headView); + footView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// SetArgumentsFragment setArgumentsFragment = findFragment(SetArgumentsFragment.class); +// if (setArgumentsFragment == null){ +// setArgumentsFragment = SetArgumentsFragment.newInstance(); +// } + ((BaseSettingFragment)getParentFragment()).startBrotherFragment(SetArgumentsFragment.newInstance()); + + } + }); + headView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ((BaseSettingFragment)getParentFragment()).startBrotherFragment(InspectSignalFragment.newInstance()); + + } + }); + + RTKConfigViewModel rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class); rtkConfigViewModel.getRTKConfig().observe(this, new Observer<RTKConfig>() { @Override public void onChanged(RTKConfig rtkConfig) { if (rtkConfig != null){ Log.i(TAG, "RTKConfig Changed: "+rtkConfig.toString()); mRtkConfig = rtkConfig; - et_ip_rtk.setText(rtkConfig.getIp()); - et_city_id.setText(String.valueOf(rtkConfig.getCity())); - et_city_province.setText(String.valueOf(rtkConfig.getProvince())); - et_port_rtk.setText(String.valueOf(rtkConfig.getPort())); - et_phone.setText(rtkConfig.getPhone()); -// tv_sn.setText(getResources().getString(R.string.rtk_config_sn,rtkConfig.getSn())); -// tv_model.setText(getResources().getString(R.string.rtk_config_model,rtkConfig.getModel())); -// tv_imei.setText(getResources().getString(R.string.rtk_config_imei,rtkConfig.getImei())); -// tv_reg.setText(getResources().getString(R.string.rtk_register_status,rtkConfig.getRegistered())); } } }); - appStatusViewModel = ViewModelProviders.of(this).get(AppStatusViewModel.class); + appStatusViewModel = ViewModelProviders.of(this).get(AppStatusViewModel.class); appStatusViewModel.getAppStatus().observe(this, new Observer<AppStatus>() { @Override - public void onChanged(AppStatus appStatus) { - if (appStatus != null){ -// tv_login.setText(getResources().getString(R.string.rtk_config_login,appStatus.getRtk_login_code())); -// tv_connect.setText(getResources().getString(R.string.rtk_connect_status,appStatus.getRtk_connect_status())); + public void onChanged(AppStatus ppStatus) { + if (ppStatus != null){ + appStatus = ppStatus; } } }); + return view; } - private void initView(View view) { - gson = new Gson(); - view.findViewById(R.id.btn_save_platform).setOnClickListener(this); - et_ip = view.findViewById(R.id.et_platform_ip); - et_port = view.findViewById(R.id.et_platform_port); - et_ip.setText(ExamPlatformData.getInstance().getPlatformIP()); - et_port.setText(ExamPlatformData.getInstance().getPlatformPort()+""); - btn_inspect_signal = view.findViewById(R.id.btn_inpsect_signal); - btn_mcu_upgrade = view.findViewById(R.id.btn_mcu_upgrade); - btn_map_select = view.findViewById(R.id.btn_map_select); - view.findViewById(R.id.btn_car_select).setOnClickListener(this); - btn_mcu_upgrade.setOnClickListener(this); - btn_map_select.setOnClickListener(this); - btn_inspect_signal.setOnClickListener(this); - btn_config_signal = view.findViewById(R.id.btn_signal_conf); - btn_config_signal.setOnClickListener(this); + lv = view.findViewById(R.id.lv_gpsinfo); + gpsInfoAdapter = new GpsInfoAdapter(_mActivity); + lv.setAdapter(gpsInfoAdapter); - - et_ip_rtk = view.findViewById(R.id.rtk_addr_ip); - et_city_id = view.findViewById(R.id.et_city_id); - et_city_province = view.findViewById(R.id.et_provice_id); - et_phone = view.findViewById(R.id.et_phone); - et_port_rtk = view.findViewById(R.id.rtk_addr_port); - tv_mcu = view.findViewById(R.id.tv_mcu_info); - -// tv_connect = view.findViewById(R.id.tv_rtk_connect);//RTK骞冲彴杩炴帴鐘舵�� -// tv_imei = view.findViewById(R.id.tv_rtk_imei); -// tv_login = view.findViewById(R.id.tv_rtk_login);//RTK骞冲彴鐧诲綍缁撴灉 -// tv_model = view.findViewById(R.id.tv_rtk_model); -// tv_reg = view.findViewById(R.id.tv_rtk_reg);//RTK骞冲彴娉ㄥ唽鐘舵�� -// tv_sn = view.findViewById(R.id.tv_rtk_sn); } - - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.btn_inpsect_signal: - ((BaseSettingFragment)getParentFragment()).startBrotherFragment(InspectSignalFragment.newInstance()); - break; - case R.id.btn_signal_conf: - ((BaseSettingFragment)getParentFragment()).startBrotherFragment(SignalConfigFragment.newInstance()); - break; - case R.id.btn_mcu_upgrade: - - - - try { - byte[] datas =FileUtil.readLocalFile(getActivity(),"dfu.bin"); - if (datas != null){ - Log.i(TAG,ByteUtil.byte2hex(datas)); - - String strs = new String(datas, Charset.forName("ISO-8859-1")); - Log.i(TAG, "onClick: datas.legnth=="+strs.getBytes("ISO-8859-1").length); - AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs); - }else{ - MyLog.i(TAG,"mcu鍗囩骇鏂囦欢涓嶅瓨鍦�"); - } - } catch (IOException e) { - e.printStackTrace(); - } - break; - case R.id.btn_save_platform: - if(ExamPlatformData.getInstance().compareIPandPort(et_ip.getText().toString().trim(),Integer.parseInt(et_port.getText().toString().trim()))){ - ((MainActivity)getActivity()).examPlatformModel.getDataChange().postValue(1); - ExamPlatformData.getInstance().insertPlatformIp(et_ip.getText().toString().trim()); - ExamPlatformData.getInstance().insertPlatformPort(Integer.parseInt(et_port.getText().toString().trim())); - } - - if (mRtkConfig != null){ - mRtkConfig.setPort(Integer.parseInt(et_port_rtk.getText().toString().trim())); - mRtkConfig.setCity(Integer.parseInt(et_city_id.getText().toString().trim())); - mRtkConfig.setProvince(Integer.parseInt(et_city_province.getText().toString().trim())); - mRtkConfig.setIp(et_ip_rtk.getText().toString().trim()); - mRtkConfig.setPhone(et_phone.getText().toString().trim()); - rtkConfigViewModel.insertRTKConfig(mRtkConfig); - } - break; - case R.id.btn_car_select://杞﹁締妯″瀷鍜屽湴鍥惧叕鐢ㄤ竴濂椾唬鐮� 鍖哄埆鍦ㄤ簬REQUEST_CODE - request_code = REQUEST_CODE_CAR; - openFileMgr(); - break; - case R.id.btn_map_select: - request_code = REQUEST_CODE_MAP; - openFileMgr(); - break; - default: - break; - } - } - - private void openFileMgr() { - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_GET_CONTENT); - intent.setType("*/*"); - intent.addCategory(Intent.CATEGORY_OPENABLE); - try { - startActivityForResult(intent, request_code); - } catch (android.content.ActivityNotFoundException e) { - e.printStackTrace(); - Toast.makeText(_mActivity, "璇峰畨瑁呮枃浠剁鐞嗗櫒", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (REQUEST_CODE_MAP == requestCode){ - if (data != null){ - final Uri uri= data.getData(); - Log.i(TAG, "onActivityResult: "+uri.getPath()); - ExamPlatformData.getInstance().setNewMapPath(uri.getPath()); - CThreadPoolExecutor.runInBackground(new Runnable() { - @Override - public void run() { - byte[] fileContent = FileUtil.readFile(uri.getPath()); - if (fileContent != null){ - String str = new String(fileContent); - Log.i(TAG, "鏂囦欢鍐呭锛�"+str); - AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,str); - } - } - }); - } - - - }else if (requestCode == REQUEST_CODE_CAR){ - if (data != null){ - final Uri uri= data.getData(); - Log.i(TAG, "onActivityResult: "+uri.getPath()); - ExamPlatformData.getInstance().setCarModelPath(uri.getPath()); - CThreadPoolExecutor.runInBackground(new Runnable() { - @Override - public void run() { - byte[] fileContent = FileUtil.readFile(uri.getPath()); - if (fileContent != null){ - String str = new String(fileContent); - Log.i(TAG, "鏂囦欢鍐呭锛�"+str); - AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,str); - } - } - }); - } - - - } - } - @Override public void onAttach(Context context) { super.onAttach(context); diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java index 20f7fc7..66fd5a1 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/BaseSettingFragment.java @@ -51,7 +51,6 @@ public void startBrotherFragment(SupportFragment targetFragment) { start(targetFragment); } - private void initView(View view) { tabLayout = view.findViewById(R.id.tab_base_set); viewPager = view.findViewById(R.id.vp_base_set); diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java index 1904435..5bd05f8 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java @@ -41,7 +41,7 @@ */ public class GpsInfoFragment extends SupportFragment { - private static final String TAG = "RTKConfigFragment"; + private static final String TAG = "GpsInfoFragment"; private ListView lv; private GpsInfoAdapter gpsInfoAdapter; diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java index c0dcab7..d869c7b 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/InspectSignalFragment.java @@ -1,5 +1,6 @@ package safeluck.drive.evaluation.fragment; +import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; @@ -13,8 +14,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; +import com.google.gson.Gson; + import me.yokeyword.fragmentation.SupportFragment; +import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.R; +import safeluck.drive.evaluation.bean.MCUInfo; +import safeluck.drive.evaluation.cEventCenter.CEventCenter; +import safeluck.drive.evaluation.cEventCenter.ICEventListener; /** * MyApplication2 @@ -24,8 +31,26 @@ */ public class InspectSignalFragment extends SupportFragment { - private TextView textView_turnLight; + private TextView textView_turnLight,tv_speed,tv_engine; private Toolbar toolbar; + private Gson gson= new Gson(); + private ICEventListener icEventListener = new ICEventListener() { + @Override + public void onCEvent(String topic, int msgCode, int resultCode, Object obj) { + if (msgCode==Constant.MCU_SN){ + final MCUInfo mcuInfo = gson.fromJson((String)obj, MCUInfo.class); + if (mcuInfo != null){ + tv_engine.post(new Runnable() { + @Override + public void run() { + tv_engine.setText(String.valueOf(mcuInfo.getEngine())); + tv_speed.setText(String.valueOf(mcuInfo.getSpeed())); + } + }); + } + } + } + }; public static SupportFragment newInstance(){ return new InspectSignalFragment(); @@ -41,6 +66,8 @@ } private void initView(View view) { + tv_engine = view.findViewById(R.id.tv_roate_speed); + tv_speed = view.findViewById(R.id.tv_dangwei_num); toolbar =view.findViewById(R.id.toolbar); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @@ -58,5 +85,17 @@ textView_turnLight.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null); } },5*1000); + + } + @Override + public void onAttach(Context context) { + super.onAttach(context); + CEventCenter.onBindEvent(true,icEventListener, Constant.BIND_MCUINFO_TOPIC); + } + + @Override + public void onDetach() { + super.onDetach(); + CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_MCUINFO_TOPIC); } } diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java new file mode 100644 index 0000000..8fb6e1e --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java @@ -0,0 +1,270 @@ +package safeluck.drive.evaluation.fragment; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.anyun.exam.lib.AYSdk; +import com.anyun.exam.lib.MyLog; +import com.anyun.exam.lib.util.ByteUtil; +import com.google.gson.Gson; +import com.safeluck.aykj.utils.BytesUtils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +import me.yokeyword.fragmentation.SupportFragment; +import safeluck.drive.evaluation.Constant; +import safeluck.drive.evaluation.DB.appstatusdb.AppStatus; +import safeluck.drive.evaluation.DB.appstatusdb.AppStatusViewModel; +import safeluck.drive.evaluation.DB.rtktb.RTKConfig; +import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel; +import safeluck.drive.evaluation.MainActivity; +import safeluck.drive.evaluation.R; +import safeluck.drive.evaluation.adapter.GpsInfoAdapter; +import safeluck.drive.evaluation.adapter.QuickAdapter; +import safeluck.drive.evaluation.adapter.WrapContentLinearLayoutManager; +import safeluck.drive.evaluation.bean.ExamPlatformData; +import safeluck.drive.evaluation.bean.MCUInfo; +import safeluck.drive.evaluation.cEventCenter.CEventCenter; +import safeluck.drive.evaluation.cEventCenter.ICEventListener; +import safeluck.drive.evaluation.util.CThreadPoolExecutor; +import safeluck.drive.evaluation.util.FileUtil; + +/** + * 璁剧疆鎵�鏈夊弬鏁� + * 閫氳繃璁剧疆IP鍜宲ort锛屼笌椹捐�冭緟鍔╄蒋浠堕�氳繃tcp浼犺緭GPS鎶ユ枃缁欒瘎鍒よ蒋浠� + * MyApplication2 + * Created by lzw on 2019/3/20. 11:22:39 + * 閭锛�632393724@qq.com + * All Rights Saved! Chongqing AnYun Tech co. LTD + */ +public class SetArgumentsFragment extends SupportFragment implements View.OnClickListener { + + private static final String TAG = SetArgumentsFragment.class.getSimpleName(); + private static final int REQUEST_CODE_MAP = 100; + private static final int REQUEST_CODE_CAR = 101; + private int request_code = REQUEST_CODE_MAP; + private Button btn_config_signal; + private Button btn_mcu_upgrade,btn_map_select; + private EditText et_ip,et_port; + private Gson gson = new Gson(); + private EditText et_ip_rtk,et_port_rtk,et_city_id,et_city_province,et_phone; + private RTKConfigViewModel rtkConfigViewModel; + private RTKConfig mRtkConfig; + private Toolbar toolbar; + + public static SetArgumentsFragment newInstance() { + return new SetArgumentsFragment(); + } +// + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + + View view = inflater.inflate(R.layout.layout_base_datas, container, false); + initView(view); + rtkConfigViewModel= ViewModelProviders.of(this).get(RTKConfigViewModel.class); + rtkConfigViewModel.getRTKConfig().observe(this, new Observer<RTKConfig>() { + @Override + public void onChanged(RTKConfig rtkConfig) { + if (rtkConfig != null){ + Log.i(TAG, "RTKConfig Changed: "+rtkConfig.toString()); + mRtkConfig = rtkConfig; + et_ip_rtk.setText(rtkConfig.getIp()); + et_city_id.setText(String.valueOf(rtkConfig.getCity())); + et_city_province.setText(String.valueOf(rtkConfig.getProvince())); + et_port_rtk.setText(String.valueOf(rtkConfig.getPort())); + et_phone.setText(rtkConfig.getPhone()); + } + + + } + }); + + + + return view; + } + private void initView(View view) { +// toolbar =view.findViewById(R.id.toolbar); +// toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null)); +// toolbar.setNavigationOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// _mActivity.onBackPressed(); +// } +// }); +// toolbar.setTitle("璁剧疆鍙傛暟"); + view.findViewById(R.id.btn_save_platform).setOnClickListener(this); + et_ip = view.findViewById(R.id.et_platform_ip); + et_port = view.findViewById(R.id.et_platform_port); + et_ip.setText(ExamPlatformData.getInstance().getPlatformIP()); + et_port.setText(ExamPlatformData.getInstance().getPlatformPort()+""); + btn_mcu_upgrade = view.findViewById(R.id.btn_mcu_upgrade); + btn_map_select = view.findViewById(R.id.btn_map_select); + view.findViewById(R.id.btn_car_select).setOnClickListener(this); + btn_mcu_upgrade.setOnClickListener(this); + btn_map_select.setOnClickListener(this); + btn_config_signal = view.findViewById(R.id.btn_signal_conf); + btn_config_signal.setOnClickListener(this); + + + et_ip_rtk = view.findViewById(R.id.rtk_addr_ip); + et_city_id = view.findViewById(R.id.et_city_id); + et_city_province = view.findViewById(R.id.et_provice_id); + et_phone = view.findViewById(R.id.et_phone); + et_port_rtk = view.findViewById(R.id.rtk_addr_port); + + } + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_inpsect_signal: + break; + case R.id.btn_signal_conf: + SupportFragment signalFragment = findChildFragment(SignalConfigFragment.class); + if (signalFragment == null){ + signalFragment= SignalConfigFragment.newInstance(); + } + start(signalFragment); +// ((BaseSettingFragment)getParentFragment()).startBrotherFragment(SignalConfigFragment.newInstance()); + break; + case R.id.btn_mcu_upgrade: + + + + try { + byte[] datas = FileUtil.readLocalFile(getActivity(),"dfu.bin"); + if (datas != null){ + Log.i(TAG, ByteUtil.byte2hex(datas)); + + String strs = new String(datas, Charset.forName("ISO-8859-1")); + Log.i(TAG, "onClick: datas.legnth=="+strs.getBytes("ISO-8859-1").length); + AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs); + }else{ + MyLog.i(TAG,"mcu鍗囩骇鏂囦欢涓嶅瓨鍦�"); + } + } catch (IOException e) { + e.printStackTrace(); + } + break; + case R.id.btn_save_platform: + Toast.makeText(_mActivity, "淇濆瓨鎴愬姛", Toast.LENGTH_SHORT).show(); + if(ExamPlatformData.getInstance().compareIPandPort(et_ip.getText().toString().trim(),Integer.parseInt(et_port.getText().toString().trim()))){ + ((MainActivity)getActivity()).examPlatformModel.getDataChange().postValue(1); + ExamPlatformData.getInstance().insertPlatformIp(et_ip.getText().toString().trim()); + ExamPlatformData.getInstance().insertPlatformPort(Integer.parseInt(et_port.getText().toString().trim())); + } + + if (mRtkConfig != null){ + mRtkConfig.setPort(Integer.parseInt(et_port_rtk.getText().toString().trim())); + mRtkConfig.setCity(Integer.parseInt(et_city_id.getText().toString().trim())); + mRtkConfig.setProvince(Integer.parseInt(et_city_province.getText().toString().trim())); + mRtkConfig.setIp(et_ip_rtk.getText().toString().trim()); + mRtkConfig.setPhone(et_phone.getText().toString().trim()); + rtkConfigViewModel.insertRTKConfig(mRtkConfig); + } + _mActivity.onBackPressed(); + break; + case R.id.btn_car_select://杞﹁締妯″瀷鍜屽湴鍥惧叕鐢ㄤ竴濂椾唬鐮� 鍖哄埆鍦ㄤ簬REQUEST_CODE + request_code = REQUEST_CODE_CAR; + openFileMgr(); + break; + case R.id.btn_map_select: + request_code = REQUEST_CODE_MAP; + openFileMgr(); + break; + default: + break; + } + } + + private void openFileMgr() { + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_GET_CONTENT); + intent.setType("*/*"); + intent.addCategory(Intent.CATEGORY_OPENABLE); + try { + startActivityForResult(intent, request_code); + } catch (android.content.ActivityNotFoundException e) { + e.printStackTrace(); + Toast.makeText(_mActivity, "璇峰畨瑁呮枃浠剁鐞嗗櫒", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (REQUEST_CODE_MAP == requestCode){ + if (data != null){ + final Uri uri= data.getData(); + Log.i(TAG, "onActivityResult: "+uri.getPath()); + ExamPlatformData.getInstance().setNewMapPath(uri.getPath()); + CThreadPoolExecutor.runInBackground(new Runnable() { + @Override + public void run() { + byte[] fileContent = FileUtil.readFile(uri.getPath()); + if (fileContent != null){ + String str = new String(fileContent); + Log.i(TAG, "鏂囦欢鍐呭锛�"+str); + AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,str); + } + } + }); + } + + + }else if (requestCode == REQUEST_CODE_CAR){ + if (data != null){ + final Uri uri= data.getData(); + Log.i(TAG, "onActivityResult: "+uri.getPath()); + ExamPlatformData.getInstance().setCarModelPath(uri.getPath()); + CThreadPoolExecutor.runInBackground(new Runnable() { + @Override + public void run() { + byte[] fileContent = FileUtil.readFile(uri.getPath()); + if (fileContent != null){ + String str = new String(fileContent); + Log.i(TAG, "鏂囦欢鍐呭锛�"+str); + AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,str); + } + } + }); + } + + + } + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public void onDetach() { + super.onDetach(); + } +} diff --git a/app/src/main/res/drawable/right_arrow.png b/app/src/main/res/drawable/right_arrow.png new file mode 100644 index 0000000..83a27d0 --- /dev/null +++ b/app/src/main/res/drawable/right_arrow.png Binary files differ diff --git a/app/src/main/res/layout/basedata_item_normal.xml b/app/src/main/res/layout/basedata_item_normal.xml new file mode 100644 index 0000000..6c30ca6 --- /dev/null +++ b/app/src/main/res/layout/basedata_item_normal.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/tv_base_data_normal" + android:padding="10dp" + android:text="456" + android:textColor="@android:color/black" + android:textSize="25sp" + android:gravity="center_vertical" + + android:layout_width="match_parent" android:layout_height="60dp"> + +</TextView> \ No newline at end of file diff --git a/app/src/main/res/layout/gps_info_item_rightarrow.xml b/app/src/main/res/layout/gps_info_item_rightarrow.xml new file mode 100644 index 0000000..e8a7a9b --- /dev/null +++ b/app/src/main/res/layout/gps_info_item_rightarrow.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/text_check_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceListItemSmall" + android:gravity="center_vertical" + android:text="璁剧疆鍙傛暟" + android:drawableRight="@drawable/right_arrow" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:minHeight="?android:attr/listPreferredItemHeightSmall" /> \ No newline at end of file diff --git a/app/src/main/res/layout/inspect_signal_head.xml b/app/src/main/res/layout/inspect_signal_head.xml new file mode 100644 index 0000000..0048d3d --- /dev/null +++ b/app/src/main/res/layout/inspect_signal_head.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/text_check_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceListItemSmall" + android:gravity="center_vertical" + android:text="杞﹁浇淇″彿" + android:drawableRight="@drawable/right_arrow" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:minHeight="?android:attr/listPreferredItemHeightSmall" /> \ No newline at end of file diff --git a/app/src/main/res/layout/layout_base_datas.xml b/app/src/main/res/layout/layout_base_datas.xml index ab91696..6e5f80a 100644 --- a/app/src/main/res/layout/layout_base_datas.xml +++ b/app/src/main/res/layout/layout_base_datas.xml @@ -1,12 +1,23 @@ <?xml version="1.0" encoding="utf-8"?> -<ScrollView android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> +<!-- <include layout="@layout/toolbar"/>--> +<!-- <ScrollView--> +<!-- android:layout_height="match_parent" android:layout_width="match_parent"--> + +<!-- >--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" android:gravity="center_horizontal" + android:background="@color/train_bg" > + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -122,12 +133,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" + android:visibility="gone" android:text="鐢佃瘽锛�"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/et_phone" android:text="19234567894" + android:visibility="gone" android:inputType="numberDecimal" android:background="@android:drawable/editbox_background_normal"/> </LinearLayout> @@ -146,7 +159,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/black" - android:text="杞﹁浇淇″彿杈撳叆锛�"/> + android:text="杞﹁浇淇″彿閰嶇疆锛�"/> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -231,6 +244,7 @@ <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="鏌ョ湅淇″彿" + android:visibility="gone" android:id="@+id/btn_inpsect_signal" android:padding="5dp" android:background="@drawable/btn_bg_baseset"/> @@ -293,27 +307,7 @@ </TableRow> </TableLayout> </LinearLayout> - <View - android:layout_width="match_parent" - android:layout_height="1px" - android:layout_marginTop="10dp" - android:layout_marginBottom="10dp" - android:background="@color/colorAccent" - /> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <TextView - android:textColor="@android:color/black" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:id="@+id/tv_mcu_info" - android:text="@string/mcu_info" - android:layout_weight="1"/> - - </LinearLayout> <View android:layout_width="match_parent" @@ -328,5 +322,6 @@ android:id="@+id/btn_save_platform" android:text="淇濆瓨"/> </LinearLayout> +<!-- </ScrollView>--> +</LinearLayout> -</ScrollView> diff --git a/app/src/main/res/layout/layout_basedata.xml b/app/src/main/res/layout/layout_basedata.xml new file mode 100644 index 0000000..a069a29 --- /dev/null +++ b/app/src/main/res/layout/layout_basedata.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" android:layout_width="match_parent" + android:layout_height="match_parent"> +<androidx.recyclerview.widget.RecyclerView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/recyclerview"/> +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/layout_check_signal.xml b/app/src/main/res/layout/layout_check_signal.xml index 12ed2a7..368e098 100644 --- a/app/src/main/res/layout/layout_check_signal.xml +++ b/app/src/main/res/layout/layout_check_signal.xml @@ -22,7 +22,7 @@ android:id="@+id/tv_dangwei" android:gravity="center" - android:text="妗d綅锛�"/> + android:text="@string/chesu"/> <TextView android:layout_width="35dp" android:layout_height="25dp" @@ -35,18 +35,19 @@ android:layout_width="70dp" android:layout_height="25dp" android:textColor="@android:color/black" - android:id="@+id/tv_roate_speed" + android:gravity="center" android:layout_marginTop="15dp" android:layout_below="@+id/tv_dangwei" - android:text="杞�燂細"/> + android:text="@string/engine"/> <TextView android:layout_width="70dp" android:layout_height="25dp" android:gravity="center" android:layout_marginTop="15dp" android:text="-1.32332" + android:id="@+id/tv_roate_speed" android:layout_toRightOf="@id/tv_dangwei" android:layout_below="@+id/tv_dangwei_num" android:background="@drawable/dangwei_bg"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 08c00e9..9adfd76 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,4 +32,6 @@ <string name="sex">鎬у埆锛�</string> <string name="begin_time">寮�濮嬫椂闂达細</string> <string name="mcu_info">鍗忓鐞嗗櫒淇℃伅锛�</string> + <string name="chesu">杞﹂�燂細</string> + <string name="engine">杞�燂細</string> </resources> -- Gitblit v1.8.0