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