From d1dd1bf2d48acd8147ed41c57029948146db3392 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 10 Jan 2020 10:49:19 +0800 Subject: [PATCH] opt --- .../mogo/connection/socket/SocketManager.java | 37 ++++++++++++++++--- .../mogo/map/impl/amap/navi/NaviClient.java | 7 ++++ .../impl/amap/navi/NaviListenerAdapter.java | 6 +++ .../map/impl/amap/navi/NaviOverlayHelper.java | 1 + .../java/com/mogo/map/navi/IMogoNavi.java | 5 +++ .../src/main/java/com/mogo/map/MogoNavi.java | 7 ++++ .../module/apps/AppNavigatorFragment.java | 13 ++++++- .../connection/IMogoSocketManager.java | 9 +++++ .../impl/connection/MogoSocketManager.java | 7 ++++ 9 files changed, 86 insertions(+), 6 deletions(-) diff --git a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java index 53dac19903..aab919bc38 100644 --- a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java +++ b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java @@ -4,6 +4,7 @@ import android.content.Context; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; +import com.mogo.map.listener.IMogoMapListener; import com.mogo.service.connection.IMogoMsgAckListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; @@ -17,6 +18,9 @@ import com.zhidao.socketsdk.manager.OnSocketReceiveCallback; import com.zhidao.socketsdk.manager.SocketConnManager; import com.zhidao.socketsdk.manager.SocketConnManagerImpl; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -58,7 +62,7 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac *

* key - msgType */ - private Map< Integer, IMogoOnMessageListener > mListeners = new ConcurrentHashMap<>(); + private Map< Integer, List< IMogoOnMessageListener > > mListeners = new ConcurrentHashMap<>(); /** * 管理消息回执 @@ -83,9 +87,15 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac MogoConnsvr.Payload payload = MogoConnsvr.Payload.parseFrom( content ); int msgType = payload.getMsgType(); Logger.d( TAG, "received msg type = %d", msgType ); - IMogoOnMessageListener listener = mListeners.get( msgType ); - if ( listener != null ) { - listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) ); + List< IMogoOnMessageListener > listeners = mListeners.get( msgType ); + if ( listeners != null && !listeners.isEmpty() ) { + Iterator< IMogoOnMessageListener > iterator = listeners.iterator(); + while ( iterator.hasNext() ) { + IMogoOnMessageListener listener = iterator.next(); + if ( listener != null ) { + listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) ); + } + } } } catch ( InvalidProtocolBufferException e ) { Logger.e( TAG, e, "parse msg error." ); @@ -115,7 +125,10 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac if ( mListeners.containsKey( msgType ) ) { Logger.w( TAG, "msgType %d is exist.", msgType ); } - mListeners.put( msgType, listener ); + if ( !mListeners.containsKey( msgType ) ) { + mListeners.put( msgType, new ArrayList< IMogoOnMessageListener >() ); + } + mListeners.get( msgType ).add( listener ); } @Override @@ -123,6 +136,20 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac mListeners.remove( msgType ); } + @Override + public void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ) { + if ( listener == null ) { + return; + } + if ( !mListeners.containsKey( msgType ) ) { + return; + } + List< IMogoOnMessageListener > listeners = mListeners.get( msgType ); + if ( listeners != null && listeners.contains( listener ) ) { + listeners.remove( listener ); + } + } + @Override public void sendMsg( MsgBody body, IMogoMsgAckListener listener ) { Logger.d( TAG, "sendMsg." ); diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java index cf27d3aff0..da5143003f 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java @@ -163,6 +163,13 @@ public class NaviClient implements IMogoNavi { } } + @Override + public void clearCalculatePaths() { + if ( mAMapNaviListener != null ) { + mAMapNaviListener.clearCalculatePaths(); + } + } + // -- end private boolean checkAMapNavi() { diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java index 986f2af4ea..2693c8381c 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java @@ -179,4 +179,10 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { mNaviOverlayHelper.setLineClickInteraction( lineClickInteraction ); } } + + public void clearCalculatePaths(){ + if ( mNaviOverlayHelper != null ) { + mNaviOverlayHelper.clearCalculatedOverlay(); + } + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java index 12f4c3cde6..b52a70cd05 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java @@ -180,6 +180,7 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { if ( mPaths != null ) { mPaths.clear(); } + mLineClickInteraction = null; } /** diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java index 7b2a50b868..9cfd922372 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java @@ -89,4 +89,9 @@ public interface IMogoNavi { * 设置线条点击回调 */ void setLineClickInteraction( OnCalculatePathItemClickInteraction itemClickInteraction ); + + /** + * 清除规划的路线 + */ + void clearCalculatePaths(); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java index 8b71b642ae..4c39598ce8 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java @@ -120,4 +120,11 @@ public class MogoNavi implements IMogoNavi { mDelegate.setLineClickInteraction( itemClickInteraction ); } } + + @Override + public void clearCalculatePaths() { + if ( mDelegate != null ) { + mDelegate.clearCalculatePaths(); + } + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index 016e9db4c9..3edd24855b 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -5,15 +5,18 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; +import com.mogo.module.common.MogoModulePaths; import com.mogo.service.MogoServicePaths; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.fragmentmanager.FragmentDescriptor; import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.service.module.IMogoModuleProvider; /** * @author congtaowang @@ -33,6 +36,11 @@ public class AppNavigatorFragment extends MvpFragment< IView, Presenter< IView > private AppsFragment mAppsFragment; private IMogoFragmentManager mMogoFragmentManager; + /** + * 搜索莫模块 + */ + private IMogoModuleProvider mSearchProvider; + @Override protected int getLayoutId() { return R.layout.module_apps_fragment_apps_navigator; @@ -42,13 +50,16 @@ public class AppNavigatorFragment extends MvpFragment< IView, Presenter< IView > protected void initViews() { mCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( getContext() ); + mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation(); mNavigation = findViewById( R.id.module_apps_id_navigation ); mMusic = findViewById( R.id.module_apps_id_music ); mChat = findViewById( R.id.module_apps_id_chat ); mApps = findViewById( R.id.module_apps_id_apps ); mNavigation.setOnClickListener( view -> { - mCardManager.switch2( "CARD_TYPE_NAVIGATION" ); + mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( MogoModulePaths.PATH_MODULE_SEARCH ).navigation(); + final Fragment fragment = mSearchProvider.createFragment( getContext(), null ); + mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment ).tag( MogoModulePaths.PATH_FRAGMENT_SEARCH ).notifyMainModule( true ).build() ); } ); mMusic.setOnClickListener( view -> { mCardManager.switch2( "CARD_TYPE_SHARE_MUSIC" ); diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java index 73410e1ad3..0aa36308bd 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java @@ -32,9 +32,18 @@ public interface IMogoSocketManager extends IProvider { * 注销消息监听 * * @param msgType 消息类型 + * use {@link #unregisterOnMessageListener(int, IMogoOnMessageListener)} instead. */ + @Deprecated void unregisterOnMessageListener( int msgType ); + /** + * 注销消息监听 + * + * @param msgType 消息类型 + */ + void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ); + /** * 发送消息 * diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java index 580cdf1557..1984aee994 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java @@ -42,6 +42,13 @@ public class MogoSocketManager implements IMogoSocketManager { } } + @Override + public void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ) { + if ( mDelegate != null ) { + mDelegate.unregisterOnMessageListener( msgType, listener ); + } + } + @Override public void sendMsg( MsgBody body, IMogoMsgAckListener listener ) { if ( mDelegate != null ) {