From f94146b3af6cf8a83c8c0ba62f7f86bae500dec2 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 06 一月 2020 11:23:43 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge
---
app/src/main/res/layout/layout_train_exit.xml | 3
app/src/main/java/safeluck/drive/evaluation/app.java | 2
app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventObjPool.java | 25 ++++
lib/src/main/java/com/anyun/exam/lib/SvrManager.java | 10 +
app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java | 30 ++++
app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventCenter.java | 202 +++++++++++++++++++++++++++++++++
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java | 32 +++++
app/src/main/java/safeluck/drive/evaluation/cEventCenter/ICEventListener.java | 23 +++
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java | 17 ++
9 files changed, 338 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index 57d4f83..90930b5 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -15,6 +15,7 @@
import com.anyun.exam.lib.crash.CrashHandler;
import com.facebook.stetho.Stetho;
+import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.util.SystemUtil;
/**
@@ -68,6 +69,7 @@
@Override
public void callBackMsg(String json) {
MyLog.d(TAG, "鏀跺埌==" + json);
+ CEventCenter.dispatchEvent("train",0,0,json);
}
diff --git a/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventCenter.java b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventCenter.java
new file mode 100644
index 0000000..f87b93c
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventCenter.java
@@ -0,0 +1,202 @@
+package safeluck.drive.evaluation.cEventCenter;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * MyApplication2
+ * Created by lzw on 2020/1/2. 14:03:04
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class CEventCenter {
+
+ private static final String TAG = CEventCenter.class.getSimpleName();
+
+ /**
+ * 鐩戝惉鍣ㄥ垪琛紝鏀寔涓�瀵瑰瀛樺偍
+ */
+ private static final HashMap<String , Object> LISTENER_MAP = new HashMap<>();
+
+ /**
+ * 鐩戝惉鍣ㄥ垪琛ㄩ攣
+ */
+ private static final Object LISTENER_LOCK = new Object();
+
+ /**
+ * 浜嬩欢瀵硅薄姹�
+ */
+ private static final CEventObjPool POOL = new CEventObjPool(5);
+
+ /**
+ * 娉ㄥ唽/娉ㄩ攢鐩戝惉鍣�
+ * @param toBind true娉ㄥ唽 false娉ㄩ攢
+ * @param listener 鐩戝惉鍣�
+ * @param topic 鍗曚釜涓婚
+ */
+ public static void onBindEvent(boolean toBind,ICEventListener listener,String topic){
+ onBindEvent(toBind,listener,new String[]{topic});
+ }
+
+ /**
+ *
+ * @param toBind
+ * @param listener
+ * @param topics 澶氫釜涓婚
+ */
+ public static void onBindEvent(boolean toBind,ICEventListener listener,String[] topics){
+ if (toBind){
+ registerEventListener(listener, topics);
+ }else{
+ unregisterEventListener(listener, topics);
+ }
+ }
+
+ /**
+ * 娉ㄥ唽鐩戝惉鍣�
+ * @param listener
+ * @param topic 鍗曚釜涓婚
+ */
+ public static void registerEventListener(ICEventListener listener, String topic){
+ registerEventListener(listener,new String[]{topic});
+ }
+
+ /**
+ * 娉ㄩ攢鐩戝惉鍣�
+ * @param listener
+ * @param topic 鍗曚釜涓富棰�
+ */
+ private static void unregisterEventListener(ICEventListener listener, String topic) {
+ unregisterEventListener(listener,new String[]{topic});
+ }
+
+ /**
+ * 娉ㄩ攢鐩戝惉鍣�
+ * @param listener
+ * @param topics 澶氫釜涓婚
+ */
+ private static void unregisterEventListener(ICEventListener listener, String[] topics) {
+ if (null == listener || null == topics){
+ return;
+ }
+ synchronized (LISTENER_LOCK){
+ for (String topic :
+ topics) {
+ if (TextUtils.isEmpty(topic)) {
+ continue;
+ }
+ Object obj = LISTENER_MAP.get(topic);
+ if (null == obj){
+ continue;
+ }else if (obj instanceof ICEventListener){
+ //鏈変竴涓洃鍚櫒
+ if (obj == listener){
+ LISTENER_MAP.remove(topic);
+ }
+ }else if (obj instanceof List){
+ //鏈夊涓洃鍚櫒
+ LinkedList<ICEventListener> listeners = (LinkedList<ICEventListener>)obj;
+ listeners.remove(listener);
+ }
+ }
+ }
+ }
+ /**
+ * 娉ㄥ唽鐩戝惉鍣�
+ * @param listener
+ * @param topics 澶氫釜涓婚
+ */
+ private static void registerEventListener(ICEventListener listener, String[] topics) {
+ if (null == listener || null == topics){
+ return;
+ }
+ synchronized (LISTENER_LOCK){
+ for (String topic :
+ topics) {
+ if (TextUtils.isEmpty(topic)){
+ continue;
+ }
+ Object obj = LISTENER_MAP.get(topic);
+ if (null == obj){
+ //杩樻病鏈夌洃鍚櫒锛岀洿鎺ユ斁鍒癕ap闆嗗悎
+ LISTENER_MAP.put(topic,listener);
+ }else if (obj instanceof ICEventListener){
+ //鏈変竴涓洃鍚櫒
+ ICEventListener oldListener = (ICEventListener)obj;
+ if (listener == oldListener){
+ //鍘婚噸
+ continue;
+ }
+
+ LinkedList<ICEventListener> list = new LinkedList<>();
+ list.add(oldListener);
+ list.add(listener);
+ LISTENER_MAP.put(topic,list);
+ }else if (obj instanceof List){
+ //鏈夊涓洃鍚櫒
+ LinkedList<ICEventListener> listeners = (LinkedList<ICEventListener>)obj;
+ if (listeners.indexOf(listener) >=0){
+ //鍘婚噸
+ continue;
+ }
+ listeners.add(listener);
+ }
+ }
+ }
+ }
+
+ public static void dispatchEvent(String topic, int msgCode, int resultCode, Object object){
+ if (!TextUtils.isEmpty(topic)){
+ CEvent event = POOL.get();
+ event.setMsgCode(msgCode);
+ event.setTopic(topic);
+ event.setResultCode(resultCode);
+ event.setObj(object);
+
+ dispatchEvent(event);
+ }
+ }
+
+ private static void dispatchEvent(CEvent event){
+ if (LISTENER_MAP.size() == 0){
+ return;
+ }
+ if (null != event && !TextUtils.isEmpty(event.getTopic())){
+ String topic = event.getTopic();
+
+ //閫氱煡浜嬩欢鐩戝惉鍣ㄥ鐞嗕簨浠�
+ ICEventListener listener = null;
+ LinkedList<ICEventListener> listeners = null;
+ synchronized (LISTENER_LOCK){
+ Log.d(TAG, "dispatchEvent | topic="+topic+"\tmsgCode="+event.getMsgCode()+"\tresultCode="+event.getResultCode()
+ +"\tobj="+event.getObj());
+ Object obj = LISTENER_MAP.get(topic);
+ if (obj == null){
+ return;
+ }
+ if (obj instanceof ICEventListener){
+ listener = (ICEventListener)obj;
+ }else if (obj instanceof List){
+ listeners = (LinkedList<ICEventListener>)((LinkedList)obj).clone();
+ }
+ }
+
+ if (null != listener){
+ listener.onCEvent(topic,event.getMsgCode(),event.getResultCode(),event.getObj());
+ }else if (null != listeners && listeners.size()>0){
+ for (ICEventListener
+ l:
+ listeners) {
+ l.onCEvent(topic, event.getMsgCode(), event.getResultCode(), event.getObj());
+ }
+ }
+ //鎶婂璞℃斁鍥炴睜閲�
+ POOL.returnObj(event);
+ }
+ }
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventObjPool.java b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventObjPool.java
new file mode 100644
index 0000000..ce514ea
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEventObjPool.java
@@ -0,0 +1,25 @@
+package safeluck.drive.evaluation.cEventCenter;
+
+/**
+ * 浜嬩欢瀵硅薄姹�
+ * MyApplication2
+ * Created by lzw on 2020/1/2. 13:58:00
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class CEventObjPool extends ObjectPool<CEvent>{
+
+ public CEventObjPool(int capacity) {
+ super(capacity);
+ }
+
+ @Override
+ protected CEvent[] createObjPool(int capacity) {
+ return new CEvent[capacity];
+ }
+
+ @Override
+ protected CEvent createNewObj() {
+ return new CEvent();
+ }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ICEventListener.java b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ICEventListener.java
new file mode 100644
index 0000000..e24ab31
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ICEventListener.java
@@ -0,0 +1,23 @@
+package safeluck.drive.evaluation.cEventCenter;
+
+/**
+ * 浜嬩欢鐩戝惉鍣�
+ * MyApplication2
+ * Created by lzw on 2020/1/2. 14:00:14
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public interface ICEventListener {
+
+ /**
+ * 浜嬩欢鍥炶皟鍑芥暟
+ *
+ * 濡傛灉obj浣跨敤浜嗗璞℃睜
+ * 閭d箞浜嬩欢瀹屾垚鍚庯紝obj鍗宠嚜鍔ㄤ細鍙楀埌瀵硅薄姹狅紝璇蜂笉瑕佸啀鍏朵粬绾跨▼缁х画浣跨敤锛屽惁鍒欏彲鑳戒細瀵艰嚧鏁版嵁涓嶆甯�
+ * @param topic
+ * @param msgCode
+ * @param resultCode
+ * @param obj
+ */
+ void onCEvent(String topic, int msgCode, int resultCode, Object obj);
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java
index 3eafce0..acaa4e5 100644
--- a/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java
+++ b/app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java
@@ -8,12 +8,20 @@
* All Rights Saved! Chongqing AnYun Tech co. LTD
*/
public abstract class ObjectPool<T extends PooledObject> {
+ /**
+ * 瀵硅薄瀹瑰櫒
+ */
+ private T[] mContainer;
- private T[] mContainer;//瀵硅薄瀹瑰櫒
+ /**
+ * 瀵硅薄閿�
+ */
+ private final Object LOCK = new Object();
- private final Object LOCK = new Object();//瀵硅薄閿�
-
- private int length;//姣忔杩斿洖瀵硅薄閮芥斁鍒版暟鎹湯绔紝length琛ㄧず鍓嶉潰鍙敤瀵硅薄鏁�
+ /***
+ * 姣忔杩斿洖瀵硅薄閮芥斁鍒版暟鎹湯绔紝length琛ㄧず鍓嶉潰鍙敤瀵硅薄鏁�
+ */
+ private int length;
public ObjectPool(int capacity) {
mContainer = createObjPool(capacity);
@@ -60,4 +68,18 @@
}
return obj;
}
+
+ /**
+ * 鎶婂璞℃斁鍥炴睜閲岄潰
+ * @param obj
+ */
+ public final void returnObj(T obj){
+ synchronized (LOCK){
+ int size = mContainer.length;
+ if (length < size){
+ mContainer[length] = obj;
+ length++;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
index bbb0ad3..6b9695e 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -5,11 +5,14 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.ListView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+
+import com.anyun.exam.lib.AYSdk;
import java.util.ArrayList;
import java.util.List;
@@ -26,9 +29,10 @@
* 閭锛�632393724@qq.com
* All Rights Saved! Chongqing AnYun Tech co. LTD
*/
-public class NetWorkTrainFragment extends SupportFragment {
+public class NetWorkTrainFragment extends SupportFragment implements View.OnClickListener {
private ListView mListView ;
+ private Button btn_start_exam;
private ScoreAdapter mScoreAdapter;
private List<ScoreBean> mArrayList = new ArrayList<>();
@@ -49,6 +53,8 @@
mListView = view.findViewById(R.id.lv);
mScoreAdapter = new ScoreAdapter(_mActivity);
mListView.setAdapter(mScoreAdapter);
+ btn_start_exam = view.findViewById(R.id.btn_start);
+ btn_start_exam.setOnClickListener(this);
mListView.addHeaderView(LayoutInflater.from(_mActivity).inflate(R.layout.layout_score_item,null));
mArrayList.add(new ScoreBean(12,"鐩磋杞集","鍚庤疆鑳庡帇绾�"));
mArrayList.add(new ScoreBean(100,"鍊掕溅鍏ュ簱","鏈郴瀹夊叏甯�"));
@@ -59,4 +65,13 @@
mScoreAdapter.addDatas(mArrayList);
}
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.btn_start:
+ AYSdk.getInstance().at_sendCmd("AT+BEGIN_EXAM:0\r\n");
+ break;
+ }
+ }
}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
index d2a793d..518cb39 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -1,5 +1,6 @@
package safeluck.drive.evaluation.fragment;
+import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
@@ -11,10 +12,12 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
+import java.util.EventListener;
import java.util.List;
import me.yokeyword.fragmentation.SupportFragment;
@@ -26,6 +29,8 @@
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.adapter.ScoreAdapter;
import safeluck.drive.evaluation.bean.ScoreBean;
+import safeluck.drive.evaluation.cEventCenter.CEventCenter;
+import safeluck.drive.evaluation.cEventCenter.ICEventListener;
/**鍗曟満璁粌UI
* MyApplication2
@@ -37,12 +42,31 @@
private static final String TAG = TrainFragment.class.getSimpleName();
private ListView mListView ;
+ private Button btn_train;
private ScoreAdapter mScoreAdapter;
private int item_id;
private List<ScoreBean> mArrayList = new ArrayList<>();
+ private ICEventListener eventListener =new ICEventListener() {
+ @Override
+ public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+ Log.i(TAG, "onCEvent: "+(String)obj);
+ }
+ };
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ CEventCenter.onBindEvent(true, eventListener,"train");
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ CEventCenter.onBindEvent(false,eventListener,"train");
+ }
public static SupportFragment newInstance(){
return new TrainFragment();
@@ -83,10 +107,15 @@
return view;
}
private void initView(View view) {
+
mListView = view.findViewById(R.id.lv);
view.findViewById(R.id.view_map).setOnClickListener(this);
+ btn_train = view.findViewById(R.id.btn_start);
+ btn_train.setOnClickListener(this);
+ btn_train.setText("寮�濮嬭缁�");
mScoreAdapter = new ScoreAdapter(_mActivity);
mListView.setAdapter(mScoreAdapter);
+
mListView.addHeaderView(LayoutInflater.from(_mActivity).inflate(R.layout.layout_score_item,null));
mArrayList.add(new ScoreBean(12,"鐩磋杞集","鍚庤疆鑳庡帇绾�"));
mArrayList.add(new ScoreBean(100,"鍊掕溅鍏ュ簱","鏈郴瀹夊叏甯�"));
@@ -107,6 +136,9 @@
start(passwordFragment);
}
break;
+ case R.id.btn_start:
+ Toast.makeText(_mActivity, "寮�濮嬪方瀵�", Toast.LENGTH_SHORT).show();
+ break;
}
}
}
diff --git a/app/src/main/res/layout/layout_train_exit.xml b/app/src/main/res/layout/layout_train_exit.xml
index 00ed465..2405699 100644
--- a/app/src/main/res/layout/layout_train_exit.xml
+++ b/app/src/main/res/layout/layout_train_exit.xml
@@ -23,6 +23,7 @@
android:textSize="20sp"
android:layout_below="@+id/btn_return"
android:padding="10dp"
+ android:id="@+id/btn_start"
android:textColor="@android:color/white"
- android:text="寮�濮嬭缁�"/>
+ android:text="寮�濮嬭�冭瘯"/>
</RelativeLayout>
diff --git a/lib/src/main/java/com/anyun/exam/lib/SvrManager.java b/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
index 128fff3..8335ad4 100644
--- a/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
+++ b/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
@@ -69,6 +69,16 @@
}
}
+ public void at_sendCmd(String s) {
+ if (!checkRemoteIsNull()){
+// try {
+// remoteInterface.at_sendCmd(s);
+// } catch (RemoteException e) {
+// e.printStackTrace();
+// }
+ }
+ }
+
class MyServiceConn implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
--
Gitblit v1.8.0