diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..707ee6e613 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index dfa7b35300..8fcf202aa0 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -1,6 +1,7 @@ package com.mogo.commons.voice; import android.content.Context; +import android.content.Intent; import com.zhidao.auto.platform.voice.VoiceClient; @@ -202,4 +203,13 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { List< IMogoVoiceCmdCallBack > callBacks = mCmdMap.get( cmd ); callBacks.remove( callBack ); } + + public static void startAssistant(Context context) { + final Intent intent = new Intent(); + intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES ); + intent.setAction( "pvetec.intent.action.txz.switch" ); + intent.putExtra( "window_start_cancel", 1 ); + intent.putExtra( "extra_switch_type", "window_start_cancel" ); + context.sendBroadcast( intent ); + } } 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 aab919bc38..6aad984e2c 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 @@ -93,6 +93,7 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac while ( iterator.hasNext() ) { IMogoOnMessageListener listener = iterator.next(); if ( listener != null ) { + Logger.d(TAG, "received msg ==" + payload.getPayload().toStringUtf8()); listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) ); } } diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestLogInterceptor.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestLogInterceptor.java index 5af287c703..2bb8c921ae 100644 --- a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestLogInterceptor.java +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestLogInterceptor.java @@ -3,12 +3,15 @@ package com.mogo.utils.network; import com.mogo.utils.logger.Logger; import java.io.IOException; +import java.nio.charset.Charset; import okhttp3.Interceptor; +import okhttp3.MediaType; import okhttp3.Protocol; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +import okio.Buffer; final class RequestLogInterceptor implements Interceptor { @@ -33,9 +36,26 @@ final class RequestLogInterceptor implements Interceptor { logMsg.append(request.url()).append("\r\n"); if(hasRequestBody){ logMsg.append("Content-Type: ").append(requestBody.contentType()).append(", "); - logMsg.append("Content-Length: ").append(requestBody.contentLength()); + logMsg.append("\r\nContent-Length: ").append(requestBody.contentLength()); + try { + String body = null; + Charset UTF8 = Charset.forName("UTF-8"); + Buffer buffer = new Buffer(); + requestBody.writeTo(buffer); + Charset charset = UTF8; + MediaType contentType = requestBody.contentType(); + if (contentType != null) { + charset = contentType.charset(UTF8); + } + if (charset != null) { + body = buffer.readString(charset); + } + logMsg.append("\r\nContent-body: ").append(body); + } catch (IOException e) { + e.printStackTrace(); + } } - logMsg.append(" <-- end http request"); + logMsg.append("\r\n<-- end http request"); if(NetConfig.instance().isLoggable()){ Logger.d(TAG, logMsg.toString()); diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java index 50c75c5dc1..433b4dada0 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java @@ -6,6 +6,7 @@ import com.mogo.map.MogoLatLng; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @author congtaowang @@ -52,6 +53,12 @@ public interface IMogoMarkerManager { * @return */ List< IMogoMarker > getMarkers( String tag ); + /** + * 获取所有类型的marker。 + * + * @return + */ + Map< String, List< IMogoMarker > > getAllMarkers( ); /** * 仅保留指定类型的tag diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkersHandler.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkersHandler.java index be1a9944a5..07919c3124 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkersHandler.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkersHandler.java @@ -77,6 +77,11 @@ public class MogoMarkersHandler implements IMogoMarkerClickListener, IMogoMarker } + public synchronized Map< String, List< IMogoMarker > > getAllMarkers() { + return mServicesMarkers; + } + + public synchronized void add( String tag, IMogoMarker marker ) { if ( marker == null ) { return; diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java index 3072f7e06d..c65a4e90a6 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java @@ -11,6 +11,7 @@ import com.mogo.map.marker.MogoMarkersHandler; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @author congtaowang @@ -78,6 +79,11 @@ public class MogoMarkerManager implements IMogoMarkerManager { return MogoMarkersHandler.getInstance().getMarkers( tag ); } + @Override + public Map< String, List< IMogoMarker > > getAllMarkers() { + return MogoMarkersHandler.getInstance().getAllMarkers(); + } + @Override public void removeMarkersExcept( String tag ) { MogoMarkersHandler.getInstance().deleteAllExcept( tag ); 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 121bd860d6..249509325e 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 @@ -13,10 +13,14 @@ 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.analytics.IMogoAnalytics; import com.mogo.service.fragmentmanager.FragmentDescriptor; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.module.IMogoModuleProvider; +import java.util.HashMap; +import java.util.Map; + /** * @author congtaowang * @since 2020-01-06 @@ -38,6 +42,8 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi */ private IMogoModuleProvider mSearchProvider; + private IMogoAnalytics mMogoAnalytics; + @Override protected int getLayoutId() { return R.layout.module_apps_fragment_apps_navigator; @@ -53,16 +59,18 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mCarSettings = findViewById( R.id.module_apps_ic_car_settings ); mApps = findViewById( R.id.module_apps_id_apps ); mNavigation.setOnClickListener( view -> { - 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() ); + openSearchPanel(); + trackNavigatorClickEvent( 1 ); } ); mMediaCenter.setOnClickListener( view -> { + trackNavigatorClickEvent( 2 ); } ); mCarSettings.setOnClickListener( view -> { + trackNavigatorClickEvent( 3 ); } ); mApps.setOnClickListener( view -> { openAppsPanel(); + trackNavigatorClickEvent( 4 ); } ); } @@ -72,10 +80,17 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi return new AppNavigatorPresenter( this ); } + private void openSearchPanel() { + 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() ); + } + @Override public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); + mMogoAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); } @Override @@ -84,6 +99,12 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mMogoFragmentManager.push( new FragmentDescriptor.Builder().hasTransition( true ).fragment( mAppsFragment ).tag( "apps" ).notifyMainModule( false ).build() ); } + private void trackNavigatorClickEvent( int type ) { + final Map< String, Object > properties = new HashMap<>(); + properties.put( "type", type ); + mMogoAnalytics.track( "Launcher_APP_Icon", properties ); + } + @Override public void closeAppsPanel() { if ( getActivity() != null ) { diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java index 0a83e3b9d6..054707c758 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java @@ -81,4 +81,14 @@ public class AppsFragmentProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java index 370543ed93..088d3b7ac7 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java @@ -5,13 +5,19 @@ import android.content.Intent; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.model.AppsModel; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.TipToast; import com.mogo.utils.UiThreadHandler; +import java.util.HashMap; +import java.util.Map; + /** * @author congtaowang * @since 2019-12-30 @@ -22,6 +28,8 @@ public class AppsPresenter extends Presenter< AppsView > { private static final String TAG = "AppsPresenter"; + private IMogoAnalytics mAnalytics; + public AppsPresenter( AppsView view ) { super( view ); } @@ -35,6 +43,8 @@ public class AppsPresenter extends Presenter< AppsView > { renderAppsList(); } } ); + + mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); } private void renderAppsList() { @@ -55,6 +65,8 @@ public class AppsPresenter extends Presenter< AppsView > { return; } + trackAppClicked( appInfo ); + try { Intent intent = getContext().getPackageManager().getLaunchIntentForPackage( appInfo.getPackageName() ); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); @@ -64,6 +76,19 @@ public class AppsPresenter extends Presenter< AppsView > { } } + + private void trackAppClicked( AppInfo appInfo ) { + if ( appInfo == null ) { + return; + } + Map< String, Object > properties = new HashMap<>(); + properties.put( "appname", appInfo.getName() ); + properties.put( "packagename", appInfo.getPackageName() ); + properties.put( "appversion", appInfo.getVersionName() ); + properties.put( "from", 1 ); + mAnalytics.track( "appenterfront", properties ); + } + @Override public void onDestroy( @NonNull LifecycleOwner owner ) { super.onDestroy( owner ); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java index 817e4f31ab..250f5ee2a1 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -11,6 +13,9 @@ public class MarkerCarInfo implements Serializable { private String carTypeName; public String getCarBrandLogoUrl() { + if (TextUtils.isEmpty(carBrandLogoUrl)) { + return ""; + } return carBrandLogoUrl; } @@ -19,6 +24,9 @@ public class MarkerCarInfo implements Serializable { } public String getCarTypeName() { + if (TextUtils.isEmpty(carTypeName)) { + return "未知"; + } return carTypeName; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java index d90490c832..d147275d40 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java @@ -11,6 +11,7 @@ public class MarkerCardResult implements Serializable { private List exploreWay; private List onlineCar; private List shareMusic; + private List noveltyInfo; public List getCarChat() { return carChat; @@ -44,6 +45,14 @@ public class MarkerCardResult implements Serializable { this.shareMusic = shareMusic; } + public List getNoveltyInfo() { + return noveltyInfo; + } + + public void setNoveltyInfo(List noveltyInfo) { + this.noveltyInfo = noveltyInfo; + } + @Override public String toString() { return "MarkerCardResult{" + @@ -51,6 +60,7 @@ public class MarkerCardResult implements Serializable { ", exploreWay=" + exploreWay + ", onlineCar=" + onlineCar + ", shareMusic=" + shareMusic + + ", noveltyInfo=" + noveltyInfo + '}'; } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerDynamicData.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerDynamicData.java index a345206b2e..0d94fae475 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerDynamicData.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerDynamicData.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -20,6 +22,9 @@ public class MarkerDynamicData implements Serializable { } public String getName() { + if (TextUtils.isEmpty(name)) { + return "未知"; + } return name; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java index df0972cfb3..e5214dcfd0 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java @@ -1,6 +1,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; import java.util.List; @@ -21,6 +23,9 @@ public class MarkerExploreWay implements Serializable { private List items;//视频地址和图片地址 public String getAddr() { + if (TextUtils.isEmpty(addr)) { + return "未知"; + } return addr; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWayItem.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWayItem.java index 9f367ee7fe..efc6a88649 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWayItem.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWayItem.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -11,6 +13,9 @@ public class MarkerExploreWayItem implements Serializable { private String url; public String getThumbnail() { + if (TextUtils.isEmpty(thumbnail)) { + return ""; + } return thumbnail; } @@ -19,6 +24,9 @@ public class MarkerExploreWayItem implements Serializable { } public String getUrl() { + if (TextUtils.isEmpty(url)) { + return ""; + } return url; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerHobbyDatum.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerHobbyDatum.java index 4cf8e1504c..5d69c78ec0 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerHobbyDatum.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerHobbyDatum.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -12,6 +14,9 @@ public class MarkerHobbyDatum implements Serializable { private int isCheck; public String getContent() { + if (TextUtils.isEmpty(content)) { + return "未知"; + } return content; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerLocation.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerLocation.java index 9895187033..16ccc2cf36 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerLocation.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerLocation.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -37,6 +39,9 @@ public class MarkerLocation implements Serializable { } public String getAddress() { + if (TextUtils.isEmpty(address)) { + return "未知"; + } return address; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java new file mode 100644 index 0000000000..1b013807f9 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java @@ -0,0 +1,115 @@ + +package com.mogo.module.common.entity; + +/** + * 新鲜事儿Marker数据 + */ +public class MarkerNoveltyInfo { + private String type; + private MarkerLocation location; + private MarkerUserInfo userInfo; + /** + * @see MarkerPoiTypeEnum + */ + private String poiType; + private ContentData contentData; + + + public ContentData getContentData() { + return contentData; + } + + public void setContentData(ContentData contentData) { + this.contentData = contentData; + } + + public MarkerLocation getLocation() { + return location; + } + + public void setLocation(MarkerLocation location) { + this.location = location; + } + + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public MarkerUserInfo getUserInfo() { + return userInfo; + } + + public void setUserInfo(MarkerUserInfo userInfo) { + this.userInfo = userInfo; + } + + public class ContentData { + private String content; + private String iconUrl; + private String imgUrl; + private String infoId; + private Long likeNum; + private String title; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getIconUrl() { + return iconUrl; + } + + public void setIconUrl(String iconUrl) { + this.iconUrl = iconUrl; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + public String getInfoId() { + return infoId; + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + + public Long getLikeNum() { + return likeNum; + } + + public void setLikeNum(Long likeNum) { + this.likeNum = likeNum; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + } +} diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java new file mode 100644 index 0000000000..5045d0d203 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java @@ -0,0 +1,21 @@ +package com.mogo.module.common.entity; + +/** + * author : donghongyu + * e-mail : 1358506549@qq.com + * date : 2020-01-1514:47 + * desc : 车机启动状态 + * version: 1.0 + */ +public interface MarkerPoiTypeEnum { + //加油站 + public String GAS_STATION = "10001"; + //交通检查 + public String TRAFFIC_CHECK = "10002"; + //封路 + public String ROAD_CLOSED = "10003"; + //商场打折 + public String SHOP_DISCOUNT = "10004"; + //4S店 + public String FOURS_SHOP = "10005"; +} \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShareMusic.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShareMusic.java index 2f9feeff19..4af69a02dd 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShareMusic.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShareMusic.java @@ -2,6 +2,8 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.io.Serializable; @SuppressWarnings("unused") @@ -54,6 +56,9 @@ public class MarkerShareMusic implements Serializable { } public String getMediaImg() { + if (TextUtils.isEmpty(mediaImg)) { + return ""; + } return mediaImg; } @@ -62,6 +67,9 @@ public class MarkerShareMusic implements Serializable { } public String getMediaName() { + if (TextUtils.isEmpty(mediaName)) { + return "未知"; + } return mediaName; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShowEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShowEntity.java index fd2b18276b..9bfab11dec 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShowEntity.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShowEntity.java @@ -1,5 +1,7 @@ package com.mogo.module.common.entity; +import android.text.TextUtils; + import java.util.Objects; /** @@ -13,6 +15,8 @@ public class MarkerShowEntity { // false - 没选中,true - 选中 private boolean isChecked; + // false - 非高亮,true - 高亮 + private boolean isHighlighted; // icon 地址,例如:头像,唱片图片,探路缩略,可能为空展示默认图 private String iconUrl; // 要展示的文本 @@ -32,6 +36,14 @@ public class MarkerShowEntity { isChecked = checked; } + public boolean isHighlighted() { + return isHighlighted; + } + + public void setHighlighted(boolean highlighted) { + isHighlighted = highlighted; + } + public String getIconUrl() { return iconUrl; } @@ -41,6 +53,9 @@ public class MarkerShowEntity { } public String getTextContent() { + if (TextUtils.isEmpty(textContent)) { + return "未知"; + } return textContent; } @@ -77,8 +92,7 @@ public class MarkerShowEntity { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MarkerShowEntity that = (MarkerShowEntity) o; - return isChecked == that.isChecked && - Objects.equals(iconUrl, that.iconUrl) && + return Objects.equals(iconUrl, that.iconUrl) && Objects.equals(textContent, that.textContent) && Objects.equals(markerType, that.markerType) && Objects.equals(bindObj, that.bindObj) && @@ -87,13 +101,14 @@ public class MarkerShowEntity { @Override public int hashCode() { - return Objects.hash(isChecked, iconUrl, textContent, markerType, bindObj, markerLocation); + return Objects.hash(iconUrl, textContent, markerType, bindObj, markerLocation); } @Override public String toString() { return "MarkerShowEntity{" + "isChecked=" + isChecked + + ", isHighlighted=" + isHighlighted + ", iconUrl='" + iconUrl + '\'' + ", textContent='" + textContent + '\'' + ", markerType='" + markerType + '\'' + diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java index 5c29773053..ec6271c154 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java @@ -90,6 +90,9 @@ public class MarkerUserInfo implements Serializable { } public String getSn() { + if (TextUtils.isEmpty(sn)) { + return ""; + } return sn; } @@ -98,6 +101,9 @@ public class MarkerUserInfo implements Serializable { } public String getUserHead() { + if (TextUtils.isEmpty(userHead)) { + return ""; + } return userHead; } @@ -114,6 +120,9 @@ public class MarkerUserInfo implements Serializable { } public String getUserName() { + if (TextUtils.isEmpty(userName)) { + return ""; + } return userName; } diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_default_user_head.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_default_user_head.png new file mode 100644 index 0000000000..d5df99fa78 Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_default_user_head.png differ diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index 959e14392f..3395db70fd 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -11,8 +11,13 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; +import com.mogo.commons.voice.AIAssist; import com.mogo.module.extensions.anim.AnimRes; import com.mogo.module.extensions.anim.JSurfaceView; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.utils.UiThreadHandler; /** * @author congtaowang @@ -36,6 +41,9 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private View mMsgContainer; private TextView mMsgCounter; + private IMogoFragmentManager mMogoFragmentManager; + private IMogoAnalytics mAnalytics; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_extensions; @@ -47,8 +55,12 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP mVoiceMsg = findViewById( R.id.module_ext_id_voice_msg ); mVoiceIcon.setOnClickListener( view -> { + mVoiceMsg.performClick(); + } ); + mVoiceMsg.setOnClickListener( view -> { + AIAssist.startAssistant( getContext() ); + mAnalytics.track( "Launcher_xiaozhi_Click", null ); } ); - mVoiceMsg.setOnClickListener( view -> {} ); mTime = findViewById( R.id.module_ext_id_time ); mDate = findViewById( R.id.module_ext_id_date ); @@ -65,6 +77,15 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP mMsgCounter = findViewById( R.id.module_ext_id_msg_counter ); mVoiceIcon.setFrames( AnimRes.sRes ); + + mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); + mMogoFragmentManager.addMainFragmentStackTransactionListener( size -> { + if ( size == 0 ) { + mVoiceIcon.setVisibility( View.VISIBLE ); + } else { + mVoiceIcon.setVisibility( View.INVISIBLE ); + } + } ); } @NonNull @@ -76,6 +97,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); + mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); mVoiceIcon.startAnim(); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleProvider.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleProvider.java index 991ef5d737..2484719833 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleProvider.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleProvider.java @@ -77,4 +77,14 @@ public class ExtensionsModuleProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java index 8c4ab7e9b0..cae414cf21 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java @@ -51,7 +51,7 @@ public class JSurfaceView extends SurfaceView implements Runnable, SurfaceHolder private void init() { mHolder = getHolder(); mHolder.addCallback( this ); - setZOrderOnTop( false ); + setZOrderOnTop( true ); mHolder.setFormat( PixelFormat.TRANSLUCENT ); } @@ -92,7 +92,7 @@ public class JSurfaceView extends SurfaceView implements Runnable, SurfaceHolder return; } //绘制透明色 - mCanvas.drawColor( Color.parseColor( "#1F000000" ) ); + mCanvas.drawColor( Color.TRANSPARENT, PorterDuff.Mode.CLEAR ); Bitmap mBitmap = BitmapFactory.decodeResource( getResources(), mFrames[mCurrentPos % mFrames.length] ); Paint paint = new Paint(); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceProvider.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceProvider.java index 353ea158b7..b3bbc3bed7 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceProvider.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceProvider.java @@ -80,4 +80,14 @@ public class EntranceProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 9c760baf55..deb4f5b845 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -1,11 +1,13 @@ package com.mogo.module.main; import android.os.Bundle; +import android.os.SystemClock; import android.view.View; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.viewpager.widget.ViewPager; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpActivity; @@ -24,18 +26,20 @@ import com.mogo.module.main.cards.MogoModulesManager; import com.mogo.module.main.cards.OnPageChangeListenerAdapter; import com.mogo.module.main.cards.OrientedViewPager; import com.mogo.module.main.cards.VerticalStackTransformer; -import com.mogo.module.main.fragmentmanager.FragmentStack; -import com.mogo.module.main.fragmentmanager.FragmentStackTransactionListener; import com.mogo.module.main.windowview.WindowViewHandler; -import com.mogo.module.map.VoiceConstants; import com.mogo.module.service.ServiceConst; import com.mogo.service.MogoServicePaths; -import com.mogo.service.connection.IMogoSocketManager; +import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.cardmanager.IMogoCardManager; +import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.service.impl.fragmentmanager.FragmentStack; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.utils.logger.Logger; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author congtaowang @@ -52,6 +56,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private IMogoMapService mMogoMapService; private IMogoMapUIController mMogoMapUIController; private MogoModulesHandler mMogoModuleHandler; + private IMogoCardManager mMogoCardManager; + private IMogoFragmentManager mMogoFragmentManager; private OrientedViewPager mCardsContainer; private CardModulesAdapter mCardModulesAdapter; @@ -70,6 +76,13 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private int mCurrentPosition = 0; + // 是否是点击Marker进行的页面切换,false-不是,true-是 + private boolean isClickMarker; + + private long mCardStartShowTime = 0; + + private IMogoAnalytics mAnalytics; + @Override protected int getLayoutId() { return R.layout.module_main_activity_main; @@ -81,27 +94,80 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL ); mCardsContainer.setOnPageChangeListener( new OnPageChangeListenerAdapter() { + + private boolean mCardFlipStatus = false; + @Override public void onPageSelected( int position ) { try { mCurrentPosition = position; - mMogoModuleHandler.setEnable( mCardModulesAdapter.getProvider( position ).getModuleName() ); - mShadowFrame.setVisibility( View.VISIBLE ); + final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( position ); + mMogoModuleHandler.setEnable( provider.getModuleName() ); + if ( !isClickMarker ) { + mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); + } + trackCardSelectedEvent( provider ); } catch ( Exception e ) { e.printStackTrace(); } } + + @Override + public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels ) { + super.onPageScrolled( position, positionOffset, positionOffsetPixels ); + } + + @Override + public void onPageScrollStateChanged( int state ) { + super.onPageScrollStateChanged( state ); + if ( state == ViewPager.SCROLL_STATE_DRAGGING ) { + if ( !mCardFlipStatus ) { + mCardFlipStatus = true; + final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition ); + trackCardFlipEvent( provider ); + } + } else if ( state == ViewPager.SCROLL_STATE_IDLE ) { + mCardFlipStatus = false; + } + } + + /** + * 卡片展示时长埋点 + * @param provider + */ + private void trackCardSelectedEvent( IMogoModuleProvider provider ) { + if ( provider == null ) { + return; + } + Map< String, Object > properties = new HashMap<>(); + properties.put( "appname", provider.getAppName() ); + properties.put( "packagename", provider.getAppPackage() ); + properties.put( "activeTime", System.currentTimeMillis() - mCardStartShowTime ); + mAnalytics.track( "Launcher_Card_Show", properties ); + mCardStartShowTime = System.currentTimeMillis(); + } + + /** + * 卡片滑动埋点,WTF + */ + private void trackCardFlipEvent( IMogoModuleProvider provider ) { + if ( provider == null ) { + return; + } + Map< String, Object > properties = new HashMap<>(); + properties.put( "appname", provider.getAppName() ); + properties.put( "packagename", provider.getAppPackage() ); + mAnalytics.track( "Launcher_Card_Slide", properties ); + } } ); - FragmentStack.getInstance().init( this, R.id.module_main_id_search_fragment ); - FragmentStack.getInstance().setFragmentStackTransactionListener( new FragmentStackTransactionListener() { - @Override - public void onTransaction() { - if ( FragmentStack.getInstance().isEmpty() ) { - show(); - } else if ( FragmentStack.getInstance().getStackSize() == 1 ) { - hide(); - } + mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this ); + mMogoFragmentManager.init( this, R.id.module_main_id_search_fragment ); + mMogoFragmentManager.registerMainFragmentStackTransactionListener( ( size ) -> { + if ( size == 0 ) { + show(); + } else if ( size == 1 ) { + hide(); } } ); mHeader = findViewById( R.id.module_main_id_header_fragment_container ); @@ -153,14 +219,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoMapUIController = mMogoMapService.getMapUIController(); mMogoModuleHandler.loadModules(); - mMogoModuleHandler.onMapLoadedCallback( new Runnable() { - @Override - public void run() { - Logger.d( TAG, "map loaded." + Thread.currentThread().getName() ); - loadModules(); - mShadowFrame.setVisibility( View.VISIBLE ); - mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 ); - } + mMogoModuleHandler.onMapLoadedCallback( () -> { + Logger.d( TAG, "map loaded." + Thread.currentThread().getName() ); + loadModules(); + mShadowFrame.setVisibility( View.VISIBLE ); + mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 ); } ); // 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。 mMogoModuleHandler.loadMap( R.id.module_main_id_map_fragment_container ); @@ -171,6 +234,9 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() ); mLocationClient.addLocationListener( this ); mLocationClient.start(); + + mMogoCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( this ); + mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( this ); } private void loadModules() { @@ -181,6 +247,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mCardsContainer.setPageTransformer( true, new VerticalStackTransformer( this ) ); mCardsContainer.setAdapter( mCardModulesAdapter ); mCardsContainer.setCurrentItem( mCurrentPosition ); + + mCardStartShowTime = System.currentTimeMillis(); } @@ -199,10 +267,12 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override public boolean onMarkerClicked( IMogoMarker marker ) { + isClickMarker = true; switch2( marker.getOwner() ); if ( mMogoModuleHandler != null ) { mMogoModuleHandler.onMarkerReceive( marker ); } + isClickMarker = false; return false; } @@ -212,6 +282,9 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme int position = mCardModulesAdapter.getProviderPosition( cardType ); if ( position != -1 ) { mCardsContainer.setCurrentItem( position, Math.abs( mCurrentPosition - position ) == 1 ); + if ( !isClickMarker ) { + mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); + } } else { Logger.e( TAG, "Can't find type of %s's position", cardType ); } @@ -221,7 +294,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override public void onBackPressed() { if ( FragmentStack.getInstance().isEmpty() ) { - super.onBackPressed(); return; } FragmentStack.getInstance().pop(); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java index 905d597035..0fe4ebc494 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java @@ -24,14 +24,13 @@ public class MainPresenter extends Presenter< MainView > { @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - CardSwitchLiveData.getInstance().observeForever( new Observer< String >() { - @Override - public void onChanged( String s ) { - if ( TextUtils.isEmpty( s ) ) { - return; - } - mView.switch2( s ); + CardSwitchLiveData.getInstance().observeForever( to -> { + if ( TextUtils.isEmpty( to ) ) { + return; } + mView.switch2( to ); } ); } + + } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java index 5fcd499113..b34f781b5a 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java @@ -5,8 +5,13 @@ import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.module.main.livedata.CardSwitchLiveData; import com.mogo.service.MogoServicePaths; +import com.mogo.service.cardmanager.IMogoCardChangedListener; import com.mogo.service.cardmanager.IMogoCardManager; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + /** * @author congtaowang * @since 2020-01-06 @@ -16,11 +21,36 @@ import com.mogo.service.cardmanager.IMogoCardManager; @Route( path = MogoServicePaths.PATH_CARD_MANAGER ) public class MogoCardManager implements IMogoCardManager { + private static final Map< String, IMogoCardChangedListener > sListeners = new HashMap<>(); + @Override public void switch2( String cardType ) { CardSwitchLiveData.getInstance().postValue( cardType ); } + @Override + public void registerCardChangedListener( String tag, IMogoCardChangedListener listener ) { + sListeners.put( tag, listener ); + } + + @Override + public void unregisterCardChangedListener( String tag ) { + sListeners.remove( tag ); + } + + @Override + public void invoke( int position, String moduleName ) { + if ( sListeners != null && !sListeners.isEmpty() ) { + Iterator< IMogoCardChangedListener > iterator = sListeners.values().iterator(); + while ( iterator.hasNext() ) { + IMogoCardChangedListener listener = iterator.next(); + if ( listener != null ) { + listener.onSwitched( position, moduleName ); + } + } + } + } + @Override public void init( Context context ) { diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java index 7b58e433e1..1ca561946f 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java @@ -77,7 +77,15 @@ public interface MogoModulesHandler extends IMogoMapListener, /** * 卡片接收到Marker传入数据 + * * @param marker marker */ - void onMarkerReceive(IMogoMarker marker); + void onMarkerReceive( IMogoMarker marker ); + + /** + * 当前卡片名称 + * + * @return + */ + String getCurrentModuleName(); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index a6a4ed7bf1..dec3600f87 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -100,6 +100,9 @@ public class MogoModulesManager implements MogoModulesHandler, for ( MogoModule module : modules ) { IMogoModuleProvider provider = mModuleProviders.get( module ); if ( provider.getType() == ModuleType.TYPE_CARD_FRAGMENT ) { + if ( mEnableModuleName == null ) { + mEnableModuleName = provider.getModuleName(); + } providers.add( provider ); } } @@ -355,6 +358,7 @@ public class MogoModulesManager implements MogoModulesHandler, try { getApplicationContext().unregisterReceiver( mReceiver ); } catch ( Exception e ) { + e.printStackTrace(); } } mReceiver = null; @@ -374,4 +378,9 @@ public class MogoModulesManager implements MogoModulesHandler, listener.onMarkerClicked( marker ); } } + + @Override + public String getCurrentModuleName() { + return mEnableModuleName; + } } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragmentProvider.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragmentProvider.java index 86038c722e..c817646cc3 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragmentProvider.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragmentProvider.java @@ -81,4 +81,14 @@ public class MapFragmentProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index 01d71bc90c..4dcf0f939b 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -32,8 +32,9 @@ import java.util.Map; *

* 描述 */ -public class MapPresenter extends Presenter< MapView > - implements IMogoIntentListener, IMogoVoiceCmdCallBack { +public class MapPresenter extends Presenter< MapView > implements + IMogoIntentListener, + IMogoVoiceCmdCallBack { private static final String TAG = "MapPresenter"; @@ -58,8 +59,6 @@ public class MapPresenter extends Presenter< MapView > .build( MogoServicePaths.PATH_SEARCH_MANAGER ) .navigation( getContext() ); - registerVoiceCmd(); - IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() ); mogoNavi.setCalculatePathDisplayBounds( new Rect( ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.dp_730 ) @@ -84,26 +83,24 @@ public class MapPresenter extends Presenter< MapView > } private void registerVoiceCmd() { - if ( VoiceConstants.sVoiceCmds.isEmpty() ) { - Logger.w( TAG, "no unwakeup words" ); - return; - } for ( Map.Entry< String, String[] > entry : VoiceConstants.sVoiceCmds.entrySet() ) { - mMogoIntentManager.registerIntentListener( entry.getKey(), this ); -// AIAssist.getInstance( getContext() ).registerUnWakeupCommand( entry.getKey(), entry.getValue(), this ); + AIAssist.getInstance( getContext() ).registerUnWakeupCommand( entry.getKey(), entry.getValue(), this ); + } + + for ( String cmd : VoiceConstants.sCmds ) { + mMogoIntentManager.registerIntentListener( cmd, this ); } } private void unregisterVoiceCmd() { - if ( VoiceConstants.sVoiceCmds.isEmpty() ) { - Logger.w( TAG, "no unwakeup words" ); - return; - } for ( Map.Entry< String, String[] > entry : VoiceConstants.sVoiceCmds.entrySet() ) { - mMogoIntentManager.unregisterIntentListener( entry.getKey() ); -// AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( entry.getKey(), this ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( entry.getKey(), this ); + } + + for ( String cmd : VoiceConstants.sCmds ) { + mMogoIntentManager.unregisterIntentListener( cmd ); } } @@ -118,92 +115,90 @@ public class MapPresenter extends Presenter< MapView > @Override public void onCmdSelected( String cmd ) { switch ( cmd ) { - case VoiceConstants.CMD_MAP_TRAFFIC_MODE: case VoiceConstants.CMD_MAP_TRAFFIC_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_TRAFFIC_MODE: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开", null ); mView.getUIController().setTrafficEnabled( true ); mSearchManager.showSearch(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开", null ); break; - case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE: case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已关闭", null ); mView.getUIController().setTrafficEnabled( false ); mSearchManager.showMain(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已关闭", null ); break; - case VoiceConstants.CMD_MAP_ZOOM_IN: case VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP: - mView.getUIController().changeZoom( true ); AIAssist.getInstance( getContext() ).speakTTSVoice( "已放大", null ); + case VoiceConstants.CMD_MAP_ZOOM_IN: + mView.getUIController().changeZoom( true ); break; - case VoiceConstants.CMD_MAP_ZOOM_OUT: case VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP: AIAssist.getInstance( getContext() ).speakTTSVoice( "已缩小", null ); + case VoiceConstants.CMD_MAP_ZOOM_OUT: mView.getUIController().changeZoom( false ); break; - case VoiceConstants.CMD_MAP_2D: case VoiceConstants.CMD_MAP_2D_UN_WAKEUP: - case VoiceConstants.CMD_MAP_NORTH_UP_MODE: + case VoiceConstants.CMD_MAP_2D: case VoiceConstants.CMD_MAP_NORTH_UP_MODE_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_NORTH_UP_MODE: mView.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_3D: case VoiceConstants.CMD_MAP_3D_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_3D: mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_DAY_TIME_MODE: case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP: - mView.getUIController().changeMapMode( EnumMapUI.Type_Light ); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_DAY_TIME_MODE: + mView.getUIController().changeMapMode( EnumMapUI.Type_Light ); break; - case VoiceConstants.CMD_MAP_GO_COMPANY: case VoiceConstants.CMD_MAP_GO_COMPANY_UN_WAKEUP: + case VoiceConstants.CMD_MAP_GO_COMPANY: mSearchManager.goCompany(); break; - case VoiceConstants.CMD_MAP_GO_HOME: case VoiceConstants.CMD_MAP_GO_HOME_UN_WAKEUP: + case VoiceConstants.CMD_MAP_GO_HOME: mSearchManager.goHome(); break; - case VoiceConstants.CMD_MAP_HISTORY: case VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP: + case VoiceConstants.CMD_MAP_HISTORY: mSearchManager.showSearch(); break; - case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: mSearchManager.showMain(); break; - case VoiceConstants.CMD_MAP_NIGHT_MODE: case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_NIGHT_MODE: mView.getUIController().changeMapMode( EnumMapUI.Type_Night ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE: case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE: mView.getUIController().changeMapMode( EnumMapUI.Type_AUTO_LIGHT_Night ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE: case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE: mView.getUIController().displayOverview(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE: case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE_UN_WAKEUP: + AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); + case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE: mView.getUIController().recoverLockMode(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - case VoiceConstants.CMD_MAP_CAR_UP_MODE: case VoiceConstants.CMD_MAP_CAR_UP_MODE_UN_WAKEUP: - mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D ); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - default: + case VoiceConstants.CMD_MAP_CAR_UP_MODE: + mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D ); break; } } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java index df5fb4dde7..6ae747efef 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java @@ -1,6 +1,8 @@ package com.mogo.module.map; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -24,14 +26,14 @@ public class VoiceConstants { */ public static final String CMD_MAP_GO_HOME = "com.ileja.navi.map.go.home"; public static final String CMD_MAP_GO_HOME_UN_WAKEUP = "CMD_MAP_GO_HOME_UN_WAKEUP"; - public static final String[] CMD_MAP_ZOOM_IN_GO_HOME = {"我要回家","导航回家","带我回家"}; + public static final String[] CMD_MAP_ZOOM_IN_GO_HOME = {"我要回家", "导航回家", "带我回家"}; /** * 去公司 */ public static final String CMD_MAP_GO_COMPANY = "com.ileja.navi.map.go.company"; public static final String CMD_MAP_GO_COMPANY_UN_WAKEUP = "CMD_MAP_GO_COMPANY_UN_WAKEUP"; - public static final String[] CMD_MAP_ZOOM_IN_GO_COMPANY = {"我要去公司","导航去公司","带我去公司"}; + public static final String[] CMD_MAP_ZOOM_IN_GO_COMPANY = {"我要去公司", "导航去公司", "带我去公司"}; /** * 导航历史记录 @@ -41,7 +43,6 @@ public class VoiceConstants { public static final String[] CMD_MAP_HISTORY_TRIGGER_WORDS = {"查询导航历史记录"}; - /** * 缩小地图 */ @@ -129,20 +130,22 @@ public class VoiceConstants { /** * 车头朝上 */ - public static final String CMD_MAP_CAR_UP_MODE = "com.ileja.navi.mode.car_up"; + public static final String CMD_MAP_CAR_UP_MODE = "com.ileja.traffic.head.up"; public static final String CMD_MAP_CAR_UP_MODE_UN_WAKEUP = "CMD_MAP_CAR_UP_MODE_UN_WAKEUP"; public static final String[] CMD_MAP_CAR_UP_MODE_TRIGGER_WORDS = {"车头朝上"}; /** * 北朝上 */ - public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.navi.mode.north_up"; + public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.traffic.north.up"; public static final String CMD_MAP_NORTH_UP_MODE_UN_WAKEUP = "CMD_MAP_NORTH_UP_MODE_UN_WAKEUP"; public static final String[] CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS = {"北朝上"}; public static final Map< String, String[] > sVoiceCmds = new HashMap<>(); + public static final List< String > sCmds = new ArrayList<>(); static { + // 免唤醒 sVoiceCmds.put( VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP, VoiceConstants.CMD_MAP_ZOOM_IN_TRIGGER_WORDS ); sVoiceCmds.put( VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP, VoiceConstants.CMD_MAP_ZOOM_OUT_TRIGGER_WORDS ); sVoiceCmds.put( VoiceConstants.CMD_MAP_2D_UN_WAKEUP, VoiceConstants.CMD_MAP_2D_TRIGGER_WORDS ); @@ -161,5 +164,23 @@ public class VoiceConstants { sVoiceCmds.put( VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP, VoiceConstants.CMD_MAP_HISTORY_TRIGGER_WORDS ); sVoiceCmds.put( VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS ); sVoiceCmds.put( VoiceConstants.CMD_MAP_GEO_NEARBY_WAKEUP, VoiceConstants.CMD_MAP_GEO_NEARBY_TRIGGER_WORDS ); + // 唤醒 + sCmds.add( VoiceConstants.CMD_MAP_ZOOM_IN ); + sCmds.add( VoiceConstants.CMD_MAP_ZOOM_OUT ); + sCmds.add( VoiceConstants.CMD_MAP_2D ); + sCmds.add( VoiceConstants.CMD_MAP_3D ); + sCmds.add( VoiceConstants.CMD_MAP_DAY_TIME_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_NIGHT_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_TRAFFIC_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_CAR_UP_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_NORTH_UP_MODE ); + sCmds.add( VoiceConstants.CMD_MAP_GO_HOME ); + sCmds.add( VoiceConstants.CMD_MAP_GO_COMPANY ); + sCmds.add( VoiceConstants.CMD_MAP_HISTORY ); + sCmds.add( VoiceConstants.CMD_MAP_STOP_NAVI_MODE ); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt index 73b4798ea3..5721a7b94a 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt @@ -67,6 +67,9 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener { ) } + // 是否开启导航 + var isStartedNavi = false + override fun onViewCreated( view: View, savedInstanceState: Bundle? @@ -96,6 +99,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener { tv_navi_navi.setOnClickListener { SearchServiceHolder.getNavi() .startNavi(false) + isStartedNavi = true SearchServiceHolder.fragmentManager.clearAll() } @@ -122,10 +126,12 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener { SearchServiceHolder.statusManager.setSearchUIShow( MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT, false ) - SearchServiceHolder.getNavi() - .clearCalculatePaths() + if (!isStartedNavi) { + SearchServiceHolder.getNavi().clearCalculatePaths() + } } + companion object { fun newInstance(searchPoi: MogoLatLng): Fragment { var bundle = Bundle() diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragmentProvider.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragmentProvider.java index c55cf62928..4bd1f58d00 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragmentProvider.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragmentProvider.java @@ -79,4 +79,14 @@ public class SearchFragmentProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 4686b82471..28a9cf8288 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -14,12 +14,17 @@ import com.mogo.module.common.entity.MarkerCarChat; import com.mogo.module.common.entity.MarkerCardResult; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; +import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; +import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerResponse; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.marker.MapMarkerAdapter; import com.mogo.service.MogoServicePaths; +import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.cardmanager.IMogoCardChangedListener; +import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; import com.mogo.service.imageloader.IMogoImageloader; @@ -27,7 +32,9 @@ import com.mogo.service.map.IMogoMapService; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.logger.Logger; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * author : donghongyu @@ -49,6 +56,8 @@ public class MarkerServiceHandler { private static IMogoStatusManager mMogoStatusManager; private static IMogoImageloader mImageloader; private static IMogoSocketManager mMogoSocketManager; + private static IMogoCardManager mMogoCardManager; + private static IMogoAnalytics mMogoAnalytics; private static Context mContext; @@ -57,14 +66,17 @@ public class MarkerServiceHandler { mMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(context); mImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(context); mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(context); + mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(context); + mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation(); + mMogoCardManager = (IMogoCardManager) ARouter.getInstance().build(MogoServicePaths.PATH_CARD_MANAGER).navigation(); + mMogoAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation(); + mMarkerManager = mMapService.getMarkerManager(context); mNavi = mMapService.getNavi(context); mMapUIController = mMapService.getMapUIController(); - mogoMarkerClickListener = new MoGoMarkerClickListener(); // 长连接 - mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation(); mMogoSocketManager.registerOnMessageListener(401001, new IMogoOnMessageListener() { @Override @@ -80,6 +92,15 @@ public class MarkerServiceHandler { } } }); + + getMogoCardManager().registerCardChangedListener("LAUNCHER_MARKER_MODULE", new IMogoCardChangedListener() { + + @Override + public void onSwitched(int position, String moduleName) { + Logger.e(TAG, "======moduleName:" + moduleName); + highlightedMarker(moduleName); + } + }); } public static IMogoMapService getMapService() { @@ -110,6 +131,13 @@ public class MarkerServiceHandler { return mMogoStatusManager; } + public static IMogoCardManager getMogoCardManager() { + return mMogoCardManager; + } + + public static IMogoAnalytics getMogoAnalytics() { + return mMogoAnalytics; + } private static IMogoMarker lastMarker; @@ -121,37 +149,112 @@ public class MarkerServiceHandler { @Override public boolean onMarkerClicked(IMogoMarker marker) { Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker); - if (lastMarker != null) { - // 判断点击的是否是同一个 - if (marker.equals(lastMarker)) { - Logger.w(TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker); - return false; + try { + if (lastMarker != null) { + // 判断点击的是否是同一个 + if (marker.equals(lastMarker)) { + Logger.w(TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker); + return false; + } + + // 将上次选中 Marker 设置为未选中状态 + MarkerShowEntity lastMarkerShowEntity = (MarkerShowEntity) lastMarker.getObject(); + + Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker lastMarkerShowEntity:" + lastMarkerShowEntity); + + lastMarkerShowEntity.setChecked(false); + lastMarkerShowEntity.setHighlighted(false); + + drawMapMarker(lastMarkerShowEntity); + + lastMarker.remove(); } - // 将上次选中 Marker 设置为未选中状态 - MarkerShowEntity lastMarkerShowEntity = (MarkerShowEntity) lastMarker.getObject(); + // 将当前的Marker设置为选中 + MarkerShowEntity markerShowEntity = (MarkerShowEntity) marker.getObject(); + Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker markerShowEntity:" + markerShowEntity); - Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker lastMarkerShowEntity:" + lastMarkerShowEntity); + markerShowEntity.setChecked(true); + markerShowEntity.setHighlighted(true); - lastMarkerShowEntity.setChecked(false); - drawMapMarker(lastMarkerShowEntity); + lastMarker = drawMapMarker(markerShowEntity); + if (lastMarker != null) { + lastMarker.setAlpha(1f); + } - lastMarker.remove(); + marker.remove(); + + final Map properties = new HashMap<>(); + switch (lastMarker.getOwner()) { + case ServiceConst.CARD_TYPE_CARS_CHATTING: + properties.put("type", 3); + break; + case ServiceConst.CARD_TYPE_USER_DATA: + properties.put("type", 5); + break; + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + properties.put("type", 2); + break; + case ServiceConst.CARD_TYPE_NOVELTY: + MarkerShowEntity showEntity = (MarkerShowEntity) lastMarker.getObject(); + Object bindObj = showEntity.getBindObj(); + if (bindObj instanceof MarkerNoveltyInfo) { + switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + case MarkerPoiTypeEnum.GAS_STATION: + properties.put("type", 4); + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + properties.put("type", 8); + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + properties.put("type", 7); + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + properties.put("type", 9); + break; + case MarkerPoiTypeEnum.FOURS_SHOP: + properties.put("type", 10); + break; + } + } + break; + case ServiceConst.CARD_TYPE_SHARE_MUSIC: + properties.put("type", 6); + break; + } + + getMogoAnalytics().track("Launcher_Icon_Click", properties); + + } catch (Exception e) { + e.printStackTrace(); } - - // 将当前的Marker设置为选中 - MarkerShowEntity markerShowEntity = (MarkerShowEntity) marker.getObject(); - Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker markerShowEntity:" + markerShowEntity); - - markerShowEntity.setChecked(true); - - lastMarker = drawMapMarker(markerShowEntity); - - marker.remove(); return false; } } + // 对指定类型高亮处理 + public static void highlightedMarker(String typeTag) { + try { + Map> allMarker = getMarkerManager().getAllMarkers(); + for (Map.Entry> entry : allMarker.entrySet()) { + String keyStr = entry.getKey(); + List markerList = entry.getValue(); + + if (keyStr.equals(typeTag)) { + for (IMogoMarker marker : markerList) { + marker.setAlpha(1f); + } + } else { + for (IMogoMarker marker : markerList) { + marker.setAlpha(0.7f); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + } /** * 绘制Marker @@ -164,13 +267,14 @@ public class MarkerServiceHandler { if (response != null && response.getResult() != null) { MarkerCardResult markerCardResult = response.getResult(); - List carChat = markerCardResult.getCarChat(); - List onlineCar = markerCardResult.getOnlineCar(); - List exploreWay = markerCardResult.getExploreWay(); - List shareMusic = markerCardResult.getShareMusic(); + List carChatList = markerCardResult.getCarChat(); + List onlineCarList = markerCardResult.getOnlineCar(); + List exploreWayList = markerCardResult.getExploreWay(); + List shareMusicList = markerCardResult.getShareMusic(); + List noveltyInfoList = markerCardResult.getNoveltyInfo(); - if (carChat != null) { - for (MarkerCarChat markerCarChat : carChat) { + if (carChatList != null) { + for (MarkerCarChat markerCarChat : carChatList) { MarkerLocation markerLocation = markerCarChat.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); @@ -184,8 +288,8 @@ public class MarkerServiceHandler { } } - if (onlineCar != null) { - for (MarkerOnlineCar markerOnlineCar : onlineCar) { + if (onlineCarList != null) { + for (MarkerOnlineCar markerOnlineCar : onlineCarList) { MarkerLocation markerLocation = markerOnlineCar.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); @@ -197,10 +301,11 @@ public class MarkerServiceHandler { drawMapMarker(markerShowEntity); } + analyticData(3, onlineCarList.size()); } - if (exploreWay != null) { - for (MarkerExploreWay markerExploreWay : exploreWay) { + if (exploreWayList != null) { + for (MarkerExploreWay markerExploreWay : exploreWayList) { if (!markerExploreWay.getCanLive()) { MarkerLocation markerLocation = markerExploreWay.getLocation(); @@ -213,10 +318,11 @@ public class MarkerServiceHandler { drawMapMarker(markerShowEntity); } } + analyticData(1, exploreWayList.size()); } - if (shareMusic != null) { - for (MarkerShareMusic markerShareMusic : shareMusic) { + if (shareMusicList != null) { + for (MarkerShareMusic markerShareMusic : shareMusicList) { MarkerLocation markerLocation = markerShareMusic.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); @@ -228,53 +334,99 @@ public class MarkerServiceHandler { drawMapMarker(markerShowEntity); } + analyticData(4, shareMusicList.size()); } + if (noveltyInfoList != null) { + int num_gas_station = 0; + int num_traffic_check = 0; + int num_road_closed = 0; + int num_shop_discount = 0; + int num_fours_shop = 0; + + for (MarkerNoveltyInfo noveltyInfo : noveltyInfoList) { + MarkerLocation markerLocation = noveltyInfo.getLocation(); + + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setBindObj(noveltyInfo); + markerShowEntity.setMarkerLocation(markerLocation); + markerShowEntity.setMarkerType(noveltyInfo.getType()); + markerShowEntity.setTextContent(noveltyInfo.getLocation().getAddress()); + + drawMapMarker(markerShowEntity); + + switch (noveltyInfo.getPoiType()) { + case MarkerPoiTypeEnum.GAS_STATION: + num_gas_station++; + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + num_traffic_check++; + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + num_road_closed++; + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + num_shop_discount++; + break; + case MarkerPoiTypeEnum.FOURS_SHOP: + num_fours_shop++; + break; + } + } + analyticData(2, num_gas_station); + analyticData(6, num_road_closed); + analyticData(5, num_traffic_check); + analyticData(7, num_shop_discount); + analyticData(8, num_fours_shop); + } } - getMapUIController().changeZoom(10); + getMapUIController().changeZoom(12); } /** - * 绘制Marker + * 统计地图内数据获取 + * + * @param type 类型 + * @param num marker数量 + */ + private static void analyticData(int type, int num) { + try { + final Map properties = new HashMap<>(); + properties.put("type", type); + properties.put("num", num); + getMogoAnalytics().track("Launcher_Data_Get", properties); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 绘制Marker,这里绘制的会使用markerShowEntities队列进行维护 */ public static IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { - Logger.e(TAG, "绘制Marker====markerTag:" + markerShowEntity); + Logger.e(TAG, "绘制Marker====drawMapMarker:" + markerShowEntity); + try { + if (markerShowEntity.getMarkerLocation() != null) { + View markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity); - if (markerShowEntity.getMarkerLocation() != null) { - View markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity); + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(markerShowEntity.getMarkerType()) + .latitude(markerShowEntity.getMarkerLocation().getLat()) + .longitude(markerShowEntity.getMarkerLocation().getLon()); + options.icon(markerView); - MogoMarkerOptions options = new MogoMarkerOptions() - .owner(markerShowEntity.getMarkerType()) - .latitude(markerShowEntity.getMarkerLocation().getLat()) - .longitude(markerShowEntity.getMarkerLocation().getLon()); - options.icon(markerView); - - IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); - marker.setOnMarkerClickListener(mogoMarkerClickListener); - marker.setObject(markerShowEntity); - return marker; - } else { - Logger.e(TAG, "Location 必须进行初始化!!!!!"); + IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); + marker.setOnMarkerClickListener(mogoMarkerClickListener); + marker.setObject(markerShowEntity); + marker.setAlpha(0.7f); + return marker; + } else { + Logger.e(TAG, "Location 必须进行初始化!!!!!"); + } + } catch (Exception e) { + e.printStackTrace(); } return null; } - - //TODO 这里是用来测试的 - public static void drawMapMarker() { -// Logger.e(TAG, "=====绘制Marker===="); -// -// MapMarkerView mapMarkerView = new MapMarkerView(mContext); -// -// MogoMarkerOptions options = new MogoMarkerOptions() -// .icon(mapMarkerView) -// .owner("CARD_TYPE_USER_DATA") -// .latitude(39.574525d + new Random().nextDouble()) -// .longitude(116.21733d + new Random().nextDouble()); -// IMogoMarker marker = getMarkerManager().addMarker("CARD_TYPE_USER_DATA", options); -// marker.setOnMarkerClickListener(mogoMarkerClickListener); -// marker.setObject("我是Marker上面绑定的数据"); -// -// getMapUIController().changeZoom(8); - } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index cb76e39465..89feb55cb7 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -472,12 +472,10 @@ public class MogoServiceProvider implements IMogoModuleProvider, @Override public void onStartNavi() { - } @Override public void onStopNavi() { - } @Override @@ -527,4 +525,14 @@ public class MogoServiceProvider implements IMogoModuleProvider, mStatusManager.setADASUIShow( getModuleName(), status == 1 ); } } + + @Override + public String getAppPackage() { + return null; + } + + @Override + public String getAppName() { + return null; + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java index dc6877a773..596b6507b5 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java @@ -47,4 +47,9 @@ public class ServiceConst { */ public static final String CARD_TYPE_USER_DATA = "CARD_TYPE_USER_DATA"; + /** + * 卡片 新鲜事 + */ + public static final String CARD_TYPE_NOVELTY = "CARD_TYPE_NOVELTY"; + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java index 04127ff0f4..44a2edbc7b 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java @@ -11,6 +11,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.R; import com.mogo.service.imageloader.IMogoImageLoaderListener; import com.mogo.service.imageloader.MogoImageView; import com.mogo.utils.WindowUtils; @@ -29,7 +30,7 @@ public abstract class MapMarkerBaseView extends ConstraintLayout { protected Context mContext; protected MogoImageView ivUserHead; - protected ImageView ivIconForeground; + protected ImageView ivIcon; protected ImageView ivCar; public MapMarkerBaseView(Context context) { @@ -55,6 +56,7 @@ public abstract class MapMarkerBaseView extends ConstraintLayout { public abstract void updateView(MarkerShowEntity markerShowEntity); protected void loadImageWithMarker(MarkerShowEntity markerShowEntity) { + if (!TextUtils.isEmpty(markerShowEntity.getIconUrl())) { MarkerServiceHandler .getImageloader() @@ -69,15 +71,17 @@ public abstract class MapMarkerBaseView extends ConstraintLayout { @Override public void onCompleted(Bitmap bitmap) { - // 刷新图标 - Logger.d(TAG, "loaded."); + Logger.d(TAG, "loadImageWithMarker loaded."); } @Override public void onFailure(Exception e) { - + Logger.e(TAG, "loadImageWithMarker onFailure."); } }); + } else { + ivUserHead.setBackgroundResource(R.drawable.icon_default_user_head); } + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java index 59a065fc77..9d7bc1fd75 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java @@ -11,7 +11,9 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; +import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; +import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.R; @@ -28,7 +30,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { private String TAG = "MapMarkerInfoView"; private TextView tvMarkerContent; - private ConstraintLayout llMarkerContent; + private ConstraintLayout clMarkerContent; private ImageView ivReverseTriangle; public MapMarkerInfoView(Context context) { @@ -51,8 +53,8 @@ public class MapMarkerInfoView extends MapMarkerBaseView { protected void initView(Context context) { LayoutInflater.from(context).inflate(R.layout.view_map_marker_info, this); ivUserHead = findViewById(R.id.ivUserHead); - ivIconForeground = findViewById(R.id.ivIconForeground); - llMarkerContent = findViewById(R.id.llMarkerContent); + ivIcon = findViewById(R.id.ivIcon); + clMarkerContent = findViewById(R.id.clMarkerContent); ivReverseTriangle = findViewById(R.id.ivReverseTriangle); ivCar = findViewById(R.id.ivCar); tvMarkerContent = findViewById(R.id.tvMarkerContent); @@ -64,53 +66,103 @@ public class MapMarkerInfoView extends MapMarkerBaseView { Object bindObj = markerShowEntity.getBindObj(); switch (markerShowEntity.getMarkerType()) { - case ServiceConst - .CARD_TYPE_CARS_CHATTING: - ivIconForeground.setVisibility(View.GONE); - case ServiceConst - .CARD_TYPE_USER_DATA: - ivIconForeground.setVisibility(View.GONE); + case ServiceConst.CARD_TYPE_CARS_CHATTING: + case ServiceConst.CARD_TYPE_USER_DATA: + ivUserHead.setVisibility(View.VISIBLE); + ivIcon.setVisibility(View.INVISIBLE); + loadImageWithMarker(markerShowEntity); + ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); + ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { - llMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); } else { - llMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); } } - loadImageWithMarker(markerShowEntity); + break; - case ServiceConst - .CARD_TYPE_ROAD_CONDITION: + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + + ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; - case ServiceConst - .CARD_TYPE_SHARE_MUSIC: + case ServiceConst.CARD_TYPE_NOVELTY: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + + if (bindObj instanceof MarkerNoveltyInfo) { + switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + case MarkerPoiTypeEnum.GAS_STATION: + ivIcon.setImageResource(R.drawable.icon_map_marker_refuel); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_orange_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_orange); + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_green_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_green); + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_off); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + + break; + case MarkerPoiTypeEnum.FOURS_SHOP: + + break; + default: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_green_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_green); + break; + } + } + break; + case ServiceConst.CARD_TYPE_SHARE_MUSIC: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + + clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); + ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + if (bindObj instanceof MarkerShareMusic) { // 2 为书籍听书,3 为新闻,1 为qq音乐,int switch (((MarkerShareMusic) bindObj).getShareType()) { case 1: - ivUserHead.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource(R.drawable.icon_map_marker_misic); break; case 2: - ivUserHead.setImageResource(R.drawable.icon_map_marker_book); + ivIcon.setImageResource(R.drawable.icon_map_marker_book); break; case 3: - ivUserHead.setImageResource(R.drawable.icon_map_marker_news); + ivIcon.setImageResource(R.drawable.icon_map_marker_news); break; } } -// ivIconForeground.setVisibility(View.VISIBLE); - llMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); break; } - - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); if (!TextUtils.isEmpty(markerShowEntity.getTextContent())) { - tvMarkerContent.setText(markerShowEntity.getTextContent()); + String content; + if (markerShowEntity.getTextContent().length() > 8) { + content = markerShowEntity.getTextContent().substring(0, 7) + "..."; + } else { + content = markerShowEntity.getTextContent(); + } + tvMarkerContent.setText(content); } } catch (Exception e) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java index e3c2114314..65e52f9ed9 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java @@ -8,7 +8,9 @@ import android.widget.ImageView; import androidx.annotation.Nullable; +import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; +import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.R; @@ -44,11 +46,9 @@ public class MapMarkerView extends MapMarkerBaseView { } protected void initView(Context context) { - setBackground(null); - LayoutInflater.from(context).inflate(R.layout.view_map_marker, this); ivUserHead = findViewById(R.id.ivUserHead); - ivIconForeground = findViewById(R.id.ivIconForeground); + ivIcon = findViewById(R.id.ivIcon); ivCar = findViewById(R.id.ivCar); ivBg = findViewById(R.id.ivBg); } @@ -56,14 +56,14 @@ public class MapMarkerView extends MapMarkerBaseView { public void updateView(MarkerShowEntity markerShowEntity) { try { Object bindObj = markerShowEntity.getBindObj(); - switch (markerShowEntity.getMarkerType()) { - case ServiceConst - .CARD_TYPE_CARS_CHATTING: - ivIconForeground.setVisibility(View.GONE); - case ServiceConst - .CARD_TYPE_USER_DATA: - ivIconForeground.setVisibility(View.GONE); + case ServiceConst.CARD_TYPE_CARS_CHATTING: + case ServiceConst.CARD_TYPE_USER_DATA: + ivUserHead.setVisibility(View.VISIBLE); + ivIcon.setVisibility(View.INVISIBLE); + loadImageWithMarker(markerShowEntity); + ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); + ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { @@ -72,33 +72,71 @@ public class MapMarkerView extends MapMarkerBaseView { ivBg.setImageResource(R.drawable.bg_map_marker_purple); } } - loadImageWithMarker(markerShowEntity); break; - case ServiceConst - .CARD_TYPE_ROAD_CONDITION: + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + + ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); + ivBg.setImageResource(R.drawable.bg_map_marker_blue); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; - case ServiceConst - .CARD_TYPE_SHARE_MUSIC: + case ServiceConst.CARD_TYPE_NOVELTY: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + + ivBg.setImageResource(R.drawable.bg_map_marker_green); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + + if (bindObj instanceof MarkerNoveltyInfo) { + switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + case MarkerPoiTypeEnum.GAS_STATION: + ivIcon.setImageResource(R.drawable.icon_map_marker_refuel); + ivBg.setImageResource(R.drawable.bg_map_marker_oragne); + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); + ivBg.setImageResource(R.drawable.bg_map_marker_green); + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_off); + ivBg.setImageResource(R.drawable.bg_map_marker_dark_blue); + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + + break; + case MarkerPoiTypeEnum.FOURS_SHOP: + + break; + default: + ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); + ivBg.setImageResource(R.drawable.bg_map_marker_green); + break; + } + } + break; + case ServiceConst.CARD_TYPE_SHARE_MUSIC: + ivUserHead.setVisibility(View.INVISIBLE); + ivIcon.setVisibility(View.VISIBLE); + ivBg.setImageResource(R.drawable.bg_map_marker_purple); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + if (bindObj instanceof MarkerShareMusic) { // 2 为书籍听书,3 为新闻,1 为qq音乐,int switch (((MarkerShareMusic) bindObj).getShareType()) { case 1: - ivUserHead.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource(R.drawable.icon_map_marker_misic); break; case 2: - ivUserHead.setImageResource(R.drawable.icon_map_marker_book); + ivIcon.setImageResource(R.drawable.icon_map_marker_book); break; case 3: - ivUserHead.setImageResource(R.drawable.icon_map_marker_news); + ivIcon.setImageResource(R.drawable.icon_map_marker_news); break; } } - -// ivIconForeground.setVisibility(View.VISIBLE); - ivBg.setImageResource(R.drawable.bg_map_marker_purple); break; } - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); } catch (Exception e) { e.printStackTrace(); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java index f2f2200a00..a30ca0e83b 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java @@ -57,7 +57,7 @@ public class RefreshModel { if ( mRefreshApiService != null ) { final Map< String, Object > query = new ParamsProvider.Builder( mContext ).build(); final RefreshBody refreshBody = new RefreshBody(); - refreshBody.limit = 20; + refreshBody.limit = 5; refreshBody.location = new RefreshBody.LatLon( latLng.lat, latLng.lng ); refreshBody.radius = radius; query.put( "data", GsonUtil.jsonFromObject( refreshBody ) ); diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_blue.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_blue.png index d1e30fb103..29a7b70972 100644 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_blue.png and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_blue.png differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark_blue.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark_blue.png new file mode 100644 index 0000000000..50e6c63713 Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark_blue.png differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_green.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_green.png index 3e9e8a7ea3..41b6835055 100644 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_green.png and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_green.png differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_oragne.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_oragne.png new file mode 100644 index 0000000000..40ff4b36b2 Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_oragne.png differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_purple.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_purple.png index fdcb1b68bd..db52b50a30 100644 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_purple.png and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_purple.png differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_default.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_default.png deleted file mode 100644 index d24606ab1d..0000000000 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_default.png and /dev/null differ diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location.png deleted file mode 100644 index 0807021a55..0000000000 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location.png and /dev/null differ diff --git a/modules/mogo-module-service/src/main/res/drawable/bg_shape_reverse_orange_green.xml b/modules/mogo-module-service/src/main/res/drawable/bg_shape_reverse_triangle_orange.xml similarity index 100% rename from modules/mogo-module-service/src/main/res/drawable/bg_shape_reverse_orange_green.xml rename to modules/mogo-module-service/src/main/res/drawable/bg_shape_reverse_triangle_orange.xml diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index d58f79028f..0613e51004 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml @@ -12,7 +12,7 @@ android:layout_width="@dimen/dp_34" android:layout_height="@dimen/dp_64" android:src="@drawable/icon_map_marker_car_gray" - android:translationY="-5dp" + android:translationY="-10dp" app:layout_constraintEnd_toEndOf="@+id/ivBg" app:layout_constraintStart_toStartOf="@+id/ivBg" app:layout_constraintTop_toBottomOf="@+id/ivBg" /> @@ -22,7 +22,7 @@ android:layout_width="@dimen/dp_68" android:layout_height="@dimen/dp_85" android:layout_gravity="center" - android:src="@drawable/bg_map_marker_green" + android:src="@drawable/bg_map_marker_blue" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -36,22 +36,22 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:miv_failureHolder="@drawable/icon_default" - app:miv_overlayImageId="@drawable/icon_default" - app:miv_placeHolder="@drawable/icon_default" + app:miv_failureHolder="@drawable/icon_default_user_head" + app:miv_overlayImageId="@drawable/icon_default_user_head" + app:miv_placeHolder="@drawable/icon_default_user_head" app:miv_shape="circle" /> \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml index 0351e95296..19b71da718 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml @@ -13,16 +13,16 @@ android:layout_width="@dimen/dp_34" android:layout_height="@dimen/dp_64" android:src="@drawable/icon_map_marker_car_gray" - android:translationY="-5dp" + android:translationY="-10dp" app:layout_constraintEnd_toEndOf="@+id/ivReverseTriangle" app:layout_constraintStart_toStartOf="@+id/ivReverseTriangle" app:layout_constraintTop_toBottomOf="@+id/ivReverseTriangle" /> @@ -33,29 +33,32 @@ android:layout_height="@dimen/dp_60" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:miv_failureHolder="@drawable/icon_default" - app:miv_overlayImageId="@drawable/icon_default" - app:miv_placeHolder="@drawable/icon_default" + app:miv_failureHolder="@drawable/icon_default_user_head" + app:miv_overlayImageId="@drawable/icon_default_user_head" + app:miv_placeHolder="@drawable/icon_default_user_head" app:miv_shape="circle" /> - + android:src="@drawable/bg_shape_reverse_triangle_blue" + app:layout_constraintEnd_toEndOf="@+id/clMarkerContent" + app:layout_constraintStart_toStartOf="@+id/clMarkerContent" + app:layout_constraintTop_toBottomOf="@+id/clMarkerContent" /> + \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index ca2db2c2b0..2f208f5efd 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -66,15 +66,14 @@ public class LaucherShareDialog extends Dialog implements View.OnClickListener { @Override public void onClick(View view) { int id = view.getId(); - if (id == R.id.btn_block_layout) { + if (id == R.id.btn_block_layout) { //拥堵 sendShareReceiver("1"); } else if (id == R.id.oil_price_layout) { //TODO - - } else if (id == R.id.traffic_check_layout) { - sendShareReceiver("2"); - } else if (id == R.id.road_closure_layout) { + } else if (id == R.id.traffic_check_layout) { //交通检查 sendShareReceiver("2"); + } else if (id == R.id.road_closure_layout) { //封路 + sendShareReceiver("3"); } dismiss(); diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/constant/TanluConstants.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/constant/TanluConstants.java index 97cc3f9be1..c40193a41a 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/constant/TanluConstants.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/constant/TanluConstants.java @@ -11,4 +11,8 @@ public class TanluConstants { public static final String TAG = "/tanlu/ui"; public static final String NAVI_INFO = "navi_info"; public static final String MODEL_NAME = "CARD_TYPE_ROAD_CONDITION"; + + + public static final String UPLOAD_ROAD_CONDITION = "upload_road_condition"; + } diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java index 818fe19ed8..f62392ca7d 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java @@ -6,6 +6,7 @@ import android.graphics.BitmapFactory; import android.os.Bundle; import android.text.Html; import android.text.TextUtils; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; @@ -15,10 +16,21 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.core.PoiItem; +import com.amap.api.services.geocoder.GeocodeAddress; +import com.amap.api.services.geocoder.GeocodeQuery; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.amap.api.services.poisearch.PoiResult; +import com.amap.api.services.poisearch.PoiSearch; +import com.google.gson.JsonObject; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; +import com.mogo.commons.voice.IMogoVoiceCmdCallBack; import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationClient; @@ -35,9 +47,11 @@ import com.mogo.map.search.geo.MogoPoiItem; import com.mogo.map.search.poisearch.IMogoPoiSearchListener; import com.mogo.map.search.poisearch.MogoPoiResult; import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.entity.MarkerExploreWay; -import com.mogo.module.common.entity.MarkerResponse; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.service.receiver.MogoReceiver; +import com.mogo.module.tanlu.R; import com.mogo.module.tanlu.callback.AlongTheWayCallback; import com.mogo.module.tanlu.callback.RoadLineCallback; import com.mogo.module.tanlu.callback.VoiceSearchCallback; @@ -48,21 +62,22 @@ import com.mogo.module.tanlu.model.InformationAndLiveCarResult; import com.mogo.module.tanlu.model.PathLineResult; import com.mogo.module.tanlu.model.TanluModelData; import com.mogo.module.tanlu.model.VoiceSearchResult; -import com.mogo.module.tanlu.util.Utils; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.cardmanager.IMogoCardManager; -import com.mogo.service.connection.IMogoOnMessageListener; -import com.mogo.service.connection.IMogoSocketManager; -import com.mogo.service.imageloader.IMogoImageLoaderListener; -import com.mogo.service.imageloader.IMogoImageloader; -import com.mogo.service.map.IMogoMapService; -import com.mogo.service.module.IMogoModuleLifecycle; -import com.mogo.module.tanlu.R; import com.mogo.module.tanlu.model.event.MarkerInfo; +import com.mogo.module.tanlu.util.Utils; import com.mogo.module.tanlu.video.FullMediaActivity; import com.mogo.module.tanlu.video.SimpleCoverVideoPlayer; import com.mogo.module.tanlu.view.AutoZoomInImageView; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.cardmanager.IMogoCardManager; +import com.mogo.service.connection.IMogoSocketManager; +import com.mogo.service.imageloader.IMogoImageLoaderListener; +import com.mogo.service.imageloader.IMogoImageloader; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; +import com.mogo.service.map.IMogoMapService; +import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoRegisterCenter; +import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; @@ -84,7 +99,7 @@ import static com.mogo.module.tanlu.video.VideoInitKt.initVideo; * @description 探路卡片 * @since 2020-01-02 */ -public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView > > +public class TanluCardViewFragment extends MvpFragment> implements IView, IMogoMarkerClickListener, IMogoModuleLifecycle, @@ -103,6 +118,10 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView private IMogoSocketManager mMogoSocketManager; private IMogoLocationClient mLocationClient; private IMogoCardManager iMogoCardManager; + private IMogoStatusManager mMogoStatusManager; + private IMogoIntentManager mogoIntentManager; //免唤醒 + private IMogoMapUIController mMApUIController; + private GeocodeSearch mGeocodeSearch; //声音控制文字 private String voiceGetInfoMationTts; @@ -125,12 +144,14 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView private TextView mDistanceTv; private TextView mTimeTv; - private List< MarkerExploreWay > markerExploreWayList = new ArrayList<>(); + private List markerExploreWayList = new ArrayList<>(); private int currentPosition = 0; //卡片媒体当前位置 private Bitmap mMarkerIcon; + private Bitmap multiMarkerIcon; private TanluModelData mTanluModelData; - private List< MogoLatLng > passedByPoints; + private List passedByPoints; private IMogoRegisterCenter mMogoRegisterCenter; + private String mKeywords; @Override @@ -141,70 +162,152 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView @Override protected void initViews() { initVideo(); - simpleCoverVideoPlayer = findViewById( R.id.video_player_main ); - autoZoomInImageView = findViewById( R.id.tanlu_photo_imageView ); - mPreviousTv = findViewById( R.id.tv_previous_res ); - mNextTv = findViewById( R.id.tv_next_res ); - mRootLayout = findViewById( R.id.layout_data_show ); - mEmptyLayout = findViewById( R.id.layout_empty_data_show ); - mEmptyTv = findViewById( R.id.tv_main_empty ); - mAddressTv = findViewById( R.id.tv_information_media_content ); - mDistanceTv = findViewById( R.id.tv_distance_video ); - mTimeTv = findViewById( R.id.tv_information_media_time ); + simpleCoverVideoPlayer = findViewById(R.id.video_player_main); + autoZoomInImageView = findViewById(R.id.tanlu_photo_imageView); + mPreviousTv = findViewById(R.id.tv_previous_res); + mNextTv = findViewById(R.id.tv_next_res); + mRootLayout = findViewById(R.id.layout_data_show); + mEmptyLayout = findViewById(R.id.layout_empty_data_show); + mEmptyTv = findViewById(R.id.tv_main_empty); + mAddressTv = findViewById(R.id.tv_information_media_content); + mDistanceTv = findViewById(R.id.tv_distance_video); + mTimeTv = findViewById(R.id.tv_information_media_time); - mPreviousTv.setOnClickListener( this ); - mNextTv.setOnClickListener( this ); - mEmptyTv.setOnClickListener( this ); + mPreviousTv.setOnClickListener(this); + mNextTv.setOnClickListener(this); + mEmptyTv.setOnClickListener(this); - simpleCoverVideoPlayer.setVisibility( View.VISIBLE ); - autoZoomInImageView.setVisibility( View.GONE ); + simpleCoverVideoPlayer.setVisibility(View.VISIBLE); + autoZoomInImageView.setVisibility(View.GONE); //视频配置 TODO 需要去掉 // gsyVideoOptionBuilder.setUrl(mVideoUrl).setCacheWithPlay(false).setPlayTag(TAG) // .build(simpleCoverVideoPlayer); - simpleCoverVideoPlayer.getStartButton().setOnClickListener( new View.OnClickListener() { + simpleCoverVideoPlayer.getStartButton().setOnClickListener(new View.OnClickListener() { @Override - public void onClick( View view ) { - Logger.d( TAG, "simpleCoverVideoPlayer onClick -------> " ); - FullMediaActivity.Companion.launch( getActivity(), mVideoUrl, mImageUrl, mTitle, mGenerateTime ); + public void onClick(View view) { + Logger.d(TAG, "simpleCoverVideoPlayer onClick -------> "); + FullMediaActivity.Companion.launch(getActivity(), mVideoUrl, mImageUrl, mTitle, mGenerateTime); } - } ); + }); } private void initInterface() { //图片配置 - mogoImageloader = ( IMogoImageloader ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_IMAGE_LOADER ).navigation(); + mogoImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(); //地图marker - mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation( getActivity() ); + mMogoMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(getActivity()); + mMarkerManager = mMogoMapService.getMarkerManager(getContext()); + //切换卡片操作 - iMogoCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( getActivity() ); + iMogoCardManager = (IMogoCardManager) ARouter.getInstance().build(MogoServicePaths.PATH_CARD_MANAGER).navigation(getActivity()); - mMogoRegisterCenter = ( IMogoRegisterCenter ) ARouter.getInstance().build( MogoServicePaths.PATH_REGISTER_CENTER ).navigation( getContext() ); + mMogoRegisterCenter = (IMogoRegisterCenter) ARouter.getInstance().build(MogoServicePaths.PATH_REGISTER_CENTER).navigation(getContext()); + mMogoRegisterCenter.registerMogoModuleLifecycle(TanluConstants.MODEL_NAME, this); + //语音操作 + //唤醒 + mogoIntentManager = (IMogoIntentManager) ARouter.getInstance().build(MogoServicePaths.PATH_INTENT_MANAGER).navigation(getContext()); + //地图操作 + mMogoMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(getContext()); + mMApUIController = mMogoMapService.getMapUIController(); + mGeocodeSearch = new GeocodeSearch(getContext()); - mMogoRegisterCenter.registerMogoModuleLifecycle( TanluConstants.MODEL_NAME, this ); + mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(getContext()); + + //poi查询 + mGeocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { + Logger.d(TAG, "onRegeocodeSearched -----> "); + } + + @Override + public void onGeocodeSearched(GeocodeResult p0, int p1) { + Logger.d(TAG, "onGeocodeSearched ------mKeywords =" + mKeywords + ">>p1 =" + p1); + if (p1 == 1000) { + if (p0.getGeocodeAddressList() != null && p0.getGeocodeAddressList().size() != 0) { + GeocodeAddress geocodeAddress = p0.getGeocodeAddressList().get(0); + LatLonPoint latLon = geocodeAddress.getLatLonPoint(); + Double longit; //经度 + Double lat; //维度 + if (mKeywords.equals("附近")) { + longit = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude(); + lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude(); + } else { + longit = latLon.getLongitude(); + lat = latLon.getLatitude(); + } + Log.d(TAG, "geoSearch keywords = $keywords --cityCode = $cityCode " + + "--longitude= longit --latitude = $lat"); + getVoiceControlRoadData(mKeywords, lat, longit); + } else { + String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode(); + PoiSearch.Query query = new PoiSearch.Query(mKeywords, "", cityCode); + PoiSearch poiSearch = new PoiSearch(getContext(), query); + poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() { + @Override + public void onPoiSearched(PoiResult p0, int p1) { + Logger.d(TAG, "setOnPoiSearchListener ------mKeywords =" + mKeywords + ">>p1 =" + p1); + if (p1 == 1000) { + if (p0.getPois() != null && p0.getPois().size() != 0) { + PoiItem poi = p0.getPois().get(0); + LatLonPoint latLon = poi.getLatLonPoint(); + + Double longit; //经度 + Double lat; //维度 + if (mKeywords.equals("附近")) { + longit = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude(); + lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude(); + } else { + longit = latLon.getLongitude(); + lat = latLon.getLatitude(); + } + getVoiceControlRoadData(mKeywords, lat, longit); + Logger.d(TAG, "poi search keywords = $keywords --cityCode = $cityCode " + + "--longitude= $long --latitude = $lat"); + } else { + Logger.e(TAG, "poi == null"); + } + } else { + Logger.e(TAG, "poi search result code = $p1"); + } + } + + @Override + public void onPoiItemSearched(PoiItem poiItem, int i) { + + } + }); + poiSearch.searchPOIAsyn(); + } + } else { + speakFailVoice(searchfaileVoiceStrings[2]); + } + } + }); } - @Override - public void onActivityCreated( @Nullable Bundle savedInstanceState ) { - super.onActivityCreated( savedInstanceState ); - getViewLifecycleOwner().getLifecycle().addObserver( mPresenter ); - EventBus.getDefault().register( this ); + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + getViewLifecycleOwner().getLifecycle().addObserver(mPresenter); + EventBus.getDefault().register(this); initInterface(); initModelData(); handleRoadLineMessage(); initMap(); initStrings(); + initListener(); //TODO切换探路卡片 // iMogoCardManager.switch2(TanluConstants.MODEL_NAME); } private void initModelData() { - if ( mTanluModelData == null ) { - mTanluModelData = new TanluModelData( getContext() ); + if (mTanluModelData == null) { + mTanluModelData = new TanluModelData(getContext()); } } @@ -212,7 +315,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView * 初始化导航 TODO */ private void initMap() { - mMogoRegisterCenter.registerMogoNaviListener( TanluConstants.MODEL_NAME, new IMogoNaviListener() { + mMogoRegisterCenter.registerMogoNaviListener(TanluConstants.MODEL_NAME, new IMogoNaviListener() { @Override public void onInitNaviFailure() { @@ -224,14 +327,14 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView } @Override - public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { + public void onNaviInfoUpdate(MogoNaviInfo naviinfo) { } @Override - public void onStartNavi() { -// initModelData(); -// getNavigationLineData(); + public void onStartNavi() { //开始导航 + initModelData(); + getNavigationLineData(); } @Override @@ -248,47 +351,125 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView public void onoCalculateFailed() { } - } ); + }); //监听marker点击 - mMogoRegisterCenter.registerMogoMarkerClickListener( TanluConstants.MODEL_NAME, new IMogoMarkerClickListener() { + mMogoRegisterCenter.registerMogoMarkerClickListener(TanluConstants.MODEL_NAME, new IMogoMarkerClickListener() { @Override - public boolean onMarkerClicked( IMogoMarker marker ) { + public boolean onMarkerClicked(IMogoMarker marker) { //点击marker以后,确认他的位置?然后点击下一个操作 TODO MarkerExploreWay exploreWay = extractFromMarker(marker); - if ( exploreWay == null ) { + if (exploreWay == null) { return false; } - if ( exploreWay.getFileType() == 0 ) { //图片 - refreshPhotoData( exploreWay ); - } else if ( exploreWay.getFileType() == 1 ) { //视频 - handleData( exploreWay ); + if (exploreWay.getFileType() == 0) { //图片 + refreshPhotoData(exploreWay); + } else if (exploreWay.getFileType() == 1) { //视频 + handleData(exploreWay); } //更新位置currentPosition - for ( int i = 0; i < markerExploreWayList.size(); i++ ) { - if ( markerExploreWayList.get( i ) == exploreWay ) { + for (int i = 0; i < markerExploreWayList.size(); i++) { + if (markerExploreWayList.get(i) == exploreWay) { currentPosition = i; break; } - Logger.d( TAG, "onMarkerClicked currentPosition = " + currentPosition ); + Logger.d(TAG, "onMarkerClicked currentPosition = " + currentPosition); } return false; } - } ); - + }); } - private MarkerExploreWay extractFromMarker( IMogoMarker marker ) { - if ( marker == null ) { + + /** + * 处理关键词搜索 + * + * @return + */ + private void handleActionFoo(String keywords) { + Logger.d(TAG, "handleActionFoo keywords = " + keywords); + speakSearchingVoice(); + GeocodeQuery geocodeQuery; + String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode(); + + geocodeQuery = new GeocodeQuery(keywords, cityCode); + geocodeQuery.setLocationName(keywords); + mGeocodeSearch.getFromLocationNameAsyn(geocodeQuery); + } + + /** + * 注册listener监听 + */ + private void initListener() { + //某某路堵不堵,某某地点堵不堵,附近堵不堵,播放路况 TODO + //唤醒 + mogoIntentManager.registerIntentListener(MogoReceiver.ADAS_ACTION, mogoIntentListener); + //免唤醒 + AIAssist.getInstance(getActivity()).registerUnWakeupCommandCallback(TanluConstants.UPLOAD_ROAD_CONDITION, mogoVoiceListener); + } + + /** + * 唤醒语音 + */ + private IMogoIntentListener mogoIntentListener = new IMogoIntentListener() { + @Override + public void onIntentReceived(String intentStr, Intent intent) { + String data = intent.getStringExtra("data"); + Logger.e(TAG, "唤醒 mogoIntentListener intentStr =" + intentStr + ">>data =" + data); + + JsonObject jsonObject = new JsonObject(); + mKeywords = jsonObject.get("location").toString(); + handleActionFoo(mKeywords); + } + }; + + + /** + * 免唤醒语音监听 + */ + private IMogoVoiceCmdCallBack mogoVoiceListener = new IMogoVoiceCmdCallBack() { + @Override + public void onCmdSelected(String cmd) { + Logger.e(TAG, "免唤醒 onCmdSelected mogoVoiceListener cmd =" + cmd); + if (cmd.equals(TanluConstants.UPLOAD_ROAD_CONDITION)) { + // + Logger.d(TAG, ""); + } + } + + @Override + public void onCmdAction(String speakText) { + + } + + @Override + public void onCmdCancel(String speakText) { + + } + + @Override + public void onSpeakEnd(String speakText) { + + } + + @Override + public void onSpeakSelectTimeOut(String speakText) { + + } + }; + + + private MarkerExploreWay extractFromMarker(IMogoMarker marker) { + if (marker == null) { return null; } - if ( marker.getObject() instanceof MarkerShowEntity ) { - MarkerShowEntity showEntity = ( ( MarkerShowEntity ) marker.getObject() ); - if ( showEntity.getBindObj() instanceof MarkerExploreWay ) { - return ( ( MarkerExploreWay ) showEntity.getBindObj() ); + if (marker.getObject() instanceof MarkerShowEntity) { + MarkerShowEntity showEntity = ((MarkerShowEntity) marker.getObject()); + if (showEntity.getBindObj() instanceof MarkerExploreWay) { + return ((MarkerExploreWay) showEntity.getBindObj()); } } return null; @@ -313,7 +494,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView // }); - //TODO 更加广播类型判断 + //TODO 广播类型判断 // getNavigationLineData(); // getRoadLineData(); @@ -323,10 +504,10 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView * @param view */ @Override - public void onClick( View view ) { + public void onClick(View view) { int id = view.getId(); - if ( id == R.id.tv_previous_res ) { //上一个 -// 判断是图片还是视频,第一个时,上一个不可点击 + if (id == R.id.tv_previous_res) { //上一个 + //判断是图片还是视频,第一个时,上一个不可点击 Logger.d(TAG, " tv_previous_res --1-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size()); if (currentPosition < 0) { return; @@ -337,52 +518,47 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView handleData(markerExploreWayList.get(currentPosition)); } -// getRoadLineData(); -// getVoiceControlRoadData("中关村"); -// getNavigationLineData(); -// getNaviRoadLineInfo(); - - } else if ( id == R.id.tv_next_res ) { //下一个 + } else if (id == R.id.tv_next_res) { //下一个 //判断是图片还是视频,最后一个时,下一个不可点击 - Logger.d( TAG, " tv_next_res --1-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size() ); - if ( currentPosition > markerExploreWayList.size() ) { + Logger.d(TAG, " tv_next_res --1-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size()); + if (currentPosition > markerExploreWayList.size()) { return; } currentPosition++; - Logger.d( TAG, " tv_next_res --2-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size() ); - if ( markerExploreWayList.size() > currentPosition ) { - handleData( markerExploreWayList.get( currentPosition ) ); + Logger.d(TAG, " tv_next_res --2-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size()); + if (markerExploreWayList.size() > currentPosition) { + handleData(markerExploreWayList.get(currentPosition)); } - } else if ( id == R.id.tv_main_empty ) { //TODO上报路况,逻辑 - Logger.d( TAG, "tv_main_empty click -----> " ); - sendShareReceiver( "1" ); + } else if (id == R.id.tv_main_empty) { //TODO上报路况,逻辑 + Logger.d(TAG, "tv_main_empty click -----> "); + sendShareReceiver("1"); } } /** * 发送广播 */ - private void sendShareReceiver( String type ) { - Logger.d( "liyz", "LaucherShareDialog sendShareReceiver ---->" ); + private void sendShareReceiver(String type) { + Logger.d("liyz", "LaucherShareDialog sendShareReceiver ---->"); Intent intent = new Intent(); - intent.setAction( "com.zhidao.roadcondition.share" ); - intent.putExtra( "type", type ); - getContext().sendBroadcast( intent ); + intent.setAction("com.zhidao.roadcondition.share"); + intent.putExtra("type", type); + getContext().sendBroadcast(intent); } /** * 执行图片动画 */ private void handleImageAnimation() { - autoZoomInImageView.post( new Runnable() { + autoZoomInImageView.post(new Runnable() { @Override public void run() { //放大增量是0.3,放大时间是1000毫秒,放大开始时间是600毫秒以后 autoZoomInImageView.init() - .startZoomInByScaleDeltaAndDuration( 0.2f, 1000, 500 ); + .startZoomInByScaleDeltaAndDuration(0.2f, 1000, 500); } - } ); + }); } /** @@ -392,7 +568,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView * @return */ @Override - public boolean onMarkerClicked( IMogoMarker marker ) { + public boolean onMarkerClicked(IMogoMarker marker) { return true; } @@ -401,44 +577,44 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView * * @param exploreWay */ - private void handleData( MarkerExploreWay exploreWay ) { - if ( exploreWay != null ) { - if ( exploreWay.getFileType() == 0 ) { //图片 - refreshPhotoData( exploreWay ); - } else if ( exploreWay.getFileType() == 1 ) { //视频 - refreshVideoData( exploreWay ); + private void handleData(MarkerExploreWay exploreWay) { + if (exploreWay != null) { + if (exploreWay.getFileType() == 0) { //图片 + refreshPhotoData(exploreWay); + } else if (exploreWay.getFileType() == 1) { //视频 + refreshVideoData(exploreWay); } } else { - Logger.e( TAG, "handleData exploreWay == null " ); + Logger.e(TAG, "handleData exploreWay == null "); } } /** * 刷新单个视频数据,更新位置positon */ - private void refreshVideoData( MarkerExploreWay markerExploreWay ) { - if ( markerExploreWay.getItems() == null ) { + private void refreshVideoData(MarkerExploreWay markerExploreWay) { + if (markerExploreWay.getItems() == null) { return; } - if ( markerExploreWay.getItems().size() == 0 ) { + if (markerExploreWay.getItems().size() == 0) { return; } - String videoUrl = markerExploreWay.getItems().get( 0 ).getUrl(); - mImageUrl = markerExploreWay.getItems().get( 0 ).getThumbnail(); + String videoUrl = markerExploreWay.getItems().get(0).getUrl(); + mImageUrl = markerExploreWay.getItems().get(0).getThumbnail(); mGenerateTime = markerExploreWay.getGenerateTime(); mTitle = markerExploreWay.getAddr(); - mAddressTv.setText( markerExploreWay.getAddr() ); - mDistanceTv.setText( handleDistance( markerExploreWay.getDistance() ) ); - mTimeTv.setText( formatDate( markerExploreWay.getGenerateTime() ) ); + mAddressTv.setText(markerExploreWay.getAddr()); + mDistanceTv.setText(handleDistance(markerExploreWay.getDistance())); + mTimeTv.setText(formatDate(markerExploreWay.getGenerateTime())); //判断是图片还是视频,第一个时,上一个不可点击 - simpleCoverVideoPlayer.setVisibility( View.VISIBLE ); + simpleCoverVideoPlayer.setVisibility(View.VISIBLE); //视频配置 mVideoUrl = videoUrl; - gsyVideoOptionBuilder.setUrl( videoUrl ).setCacheWithPlay( false ).setPlayTag( TAG ) - .build( simpleCoverVideoPlayer ); - if ( mImageUrl == null ) { + gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG) + .build(simpleCoverVideoPlayer); + if (mImageUrl == null) { return; } } @@ -446,45 +622,45 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView /** * 刷新单个图片数据 */ - private void refreshPhotoData( MarkerExploreWay markerExploreWay ) { - if ( markerExploreWay.getItems() == null ) { + private void refreshPhotoData(MarkerExploreWay markerExploreWay) { + if (markerExploreWay.getItems() == null) { return; } - if ( markerExploreWay.getItems().size() == 0 ) { + if (markerExploreWay.getItems().size() == 0) { return; } - mAddressTv.setText( markerExploreWay.getAddr() ); - mDistanceTv.setText( handleDistance( markerExploreWay.getDistance() ) ); - mTimeTv.setText( formatDate( markerExploreWay.getGenerateTime() ) ); - String thumbnailUrl = markerExploreWay.getItems().get( 0 ).getUrl(); - Logger.d( TAG, "refreshPhotoData thumbnailUrl ------>" + thumbnailUrl ); - autoZoomInImageView.setVisibility( View.VISIBLE ); - simpleCoverVideoPlayer.setVisibility( View.GONE ); - mogoImageloader.downloadImage( getActivity(), thumbnailUrl, new IMogoImageLoaderListener() { + mAddressTv.setText(markerExploreWay.getAddr()); + mDistanceTv.setText(handleDistance(markerExploreWay.getDistance())); + mTimeTv.setText(formatDate(markerExploreWay.getGenerateTime())); + String thumbnailUrl = markerExploreWay.getItems().get(0).getUrl(); + Logger.d(TAG, "refreshPhotoData thumbnailUrl ------>" + thumbnailUrl); + autoZoomInImageView.setVisibility(View.VISIBLE); + simpleCoverVideoPlayer.setVisibility(View.GONE); + mogoImageloader.downloadImage(getActivity(), thumbnailUrl, new IMogoImageLoaderListener() { @Override public void onStart() { } @Override - public void onCompleted( Bitmap bitmap ) { - autoZoomInImageView.setImageBitmap( bitmap ); + public void onCompleted(Bitmap bitmap) { + autoZoomInImageView.setImageBitmap(bitmap); //动画 -// handleImageAnimation(); + handleImageAnimation(); } @Override - public void onFailure( Exception e ) { - Logger.e( TAG, "onFailure ------>" + e ); + public void onFailure(Exception e) { + Logger.e(TAG, "onFailure ------>" + e); } - } ); + }); } @NonNull @Override protected Presenter createPresenter() { - return new Presenter( this ) { + return new Presenter(this) { }; } @@ -494,42 +670,42 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView */ @Override public void onPerform() { - Logger.d( TAG, "tanlu卡片 有效 ---->" ); - mMarkerManager = mMogoMapService.getMarkerManager( getActivity() ); - List< IMogoMarker > markers = mMarkerManager.getMarkers( TanluConstants.MODEL_NAME ); - if ( markers != null && markers.size() > 0 ) { - mEmptyLayout.setVisibility( View.GONE ); - mRootLayout.setVisibility( View.VISIBLE ); - Logger.d( TAG, "onPerform markers.size() =" + markers.size() ); - for ( int i = 0; i < markers.size(); i++ ) { - MarkerExploreWay exploreWay = extractFromMarker(markers.get( i )); - if ( exploreWay == null ) { + Logger.d(TAG, "tanlu卡片 onPerform 有效 ---->"); + mMarkerManager = mMogoMapService.getMarkerManager(getActivity()); + List markers = mMarkerManager.getMarkers(TanluConstants.MODEL_NAME); + if (markers != null && markers.size() > 0) { + mEmptyLayout.setVisibility(View.GONE); + mRootLayout.setVisibility(View.VISIBLE); + Logger.d(TAG, "onPerform markers.size() =" + markers.size()); + for (int i = 0; i < markers.size(); i++) { + MarkerExploreWay exploreWay = extractFromMarker(markers.get(i)); + if (exploreWay == null) { break; } - markerExploreWayList.add(exploreWay ); + markerExploreWayList.add(exploreWay); } - if ( markers.size() == 1 ) { - mPreviousTv.setVisibility( View.GONE ); - mNextTv.setVisibility( View.GONE ); + if (markers.size() == 1) { + mPreviousTv.setVisibility(View.GONE); + mNextTv.setVisibility(View.GONE); } else { - mPreviousTv.setVisibility( View.VISIBLE ); - mNextTv.setVisibility( View.VISIBLE ); + mPreviousTv.setVisibility(View.VISIBLE); + mNextTv.setVisibility(View.VISIBLE); } //展示第一个数据 - MarkerExploreWay markerExploreWay = markerExploreWayList.get( 0 ); - if ( markerExploreWay != null ) { - if ( markerExploreWay.getFileType() == 0 ) { //图片 - refreshPhotoData( markerExploreWay ); - } else if ( markerExploreWay.getFileType() == 1 ) { //视频 - refreshVideoData( markerExploreWay ); + MarkerExploreWay markerExploreWay = markerExploreWayList.get(0); + if (markerExploreWay != null) { + if (markerExploreWay.getFileType() == 0) { //图片 + refreshPhotoData(markerExploreWay); + } else if (markerExploreWay.getFileType() == 1) { //视频 + refreshVideoData(markerExploreWay); } } } else { - mEmptyLayout.setVisibility( View.VISIBLE ); - mRootLayout.setVisibility( View.GONE ); - mEmptyTv.setText( Html.fromHtml( getContext().getString( R.string.main_empty_content ) ) ); + mEmptyLayout.setVisibility(View.VISIBLE); + mRootLayout.setVisibility(View.GONE); + mEmptyTv.setText(Html.fromHtml(getContext().getString(R.string.main_empty_content))); } } @@ -538,7 +714,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView */ @Override public void onDisable() { - Logger.d( TAG, "tanlu卡片 无效 ----->" ); + Logger.d(TAG, "tanlu卡片 无效 ----->"); } @Override @@ -552,32 +728,32 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView } @Override - public void onTouch( MotionEvent motionEvent ) { + public void onTouch(MotionEvent motionEvent) { // Logger.d( TAG, "地图触摸事件" ); } @Override - public void onPOIClick( MogoPoi poi ) { - if ( poi != null ) { - TipToast.shortTip( poi.getName() ); + public void onPOIClick(MogoPoi poi) { + if (poi != null) { + TipToast.shortTip(poi.getName()); } - TanluServiceHandler.getPoiSearch().searchPOIIdAsyn( poi.getPoiId() ); + TanluServiceHandler.getPoiSearch().searchPOIIdAsyn(poi.getPoiId()); } @Override - public void onPoiSearched( MogoPoiResult result, int errorCode ) { + public void onPoiSearched(MogoPoiResult result, int errorCode) { } @Override - public void onPoiItemSearched( MogoPoiItem item, int errorCode ) { - if ( item == null ) { + public void onPoiItemSearched(MogoPoiItem item, int errorCode) { + if (item == null) { return; } } @Override - public void onLocationChanged( MogoLocation location ) { + public void onLocationChanged(MogoLocation location) { // if (location.getErrCode() == 0) { // Logger.d(TAG, "onLocationChanged 当前位置 -->" + location.getAddress()); // } else { @@ -586,32 +762,32 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView } @Override - public void onMapClick( MogoLatLng latLng ) { + public void onMapClick(MogoLatLng latLng) { } @Override - public void onLockMap( boolean isLock ) { + public void onLockMap(boolean isLock) { } @Override - public void onMapModeChanged( EnumMapUI ui ) { - Logger.d( TAG, ui.name() ); + public void onMapModeChanged(EnumMapUI ui) { + Logger.d(TAG, ui.name()); } @Override - public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) { + public void onMapChanged(MogoLatLng location, float zoom, float tilt, float bearing) { } @Override public void onDestroyView() { super.onDestroyView(); - EventBus.getDefault().unregister( this ); - getViewLifecycleOwner().getLifecycle().removeObserver( mPresenter ); - TanluServiceHandler.getLocationClient().removeLocationListener( this ); - mMogoRegisterCenter.unregisterMogoNaviListener( TanluConstants.MODEL_NAME ); + EventBus.getDefault().unregister(this); + getViewLifecycleOwner().getLifecycle().removeObserver(mPresenter); + TanluServiceHandler.getLocationClient().removeLocationListener(this); + mMogoRegisterCenter.unregisterMogoNaviListener(TanluConstants.MODEL_NAME); } /** @@ -619,35 +795,42 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView * * @param event */ - @Subscribe( threadMode = ThreadMode.MAIN ) - public void onMarkerInfo( final MarkerInfo event ) { - Logger.d( TAG, "onMarkerInfo ------>" ); - mMarkerIcon = BitmapFactory.decodeResource( getResources(), R.drawable.ic_search_poi_location ); - mogoImageloader.downloadImage( getActivity(), event.imageUrl, new IMogoImageLoaderListener() { + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMarkerInfo(final MarkerInfo event) { + Logger.d(TAG, "onMarkerInfo ------>"); + if (event.type.equals("1")) { //上报路况 + mMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.tanlu_block_up); + } else if (event.type.equals("2")) { //交通检查 + mMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.tanlu_traffic_check); + } else if (event.type.equals("3")) { //封路 + mMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.tanlu_road_closure); + } + + mogoImageloader.downloadImage(getActivity(), event.imageUrl, new IMogoImageLoaderListener() { @Override public void onStart() { - Logger.d( TAG, "onMarkerInfo onStart ------>" ); + Logger.d(TAG, "onMarkerInfo onStart ------>"); } @Override - public void onCompleted( Bitmap bitmap ) { - Logger.d( TAG, "onMarkerInfo onCompleted ------>" ); + public void onCompleted(Bitmap bitmap) { + Logger.d(TAG, "onMarkerInfo onCompleted ------>"); MogoMarkerOptions options = new MogoMarkerOptions() - .icon( mMarkerIcon ) - .latitude( event.lat ) - .owner( TanluConstants.MODEL_NAME ) - .longitude( event.lon ); + .icon(mMarkerIcon) + .latitude(event.lat) + .owner(TanluConstants.MODEL_NAME) + .longitude(event.lon); - mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation( getContext() ); - mMarkerManager = mMogoMapService.getMarkerManager( getContext() ); - IMogoMarker marker = mMarkerManager.addMarker( TanluConstants.MODEL_NAME, options ); + IMogoMarker marker = mMarkerManager.addMarker("share_tag", options); + + //TODO 请求分享接口 } @Override - public void onFailure( Exception e ) { - Logger.e( TAG, "onMarkerInfo onFailure -----e =" + e ); + public void onFailure(Exception e) { + Logger.e(TAG, "onMarkerInfo onFailure -----e =" + e); } - } ); + }); } /** @@ -656,182 +839,213 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView public void getNavigationLineData() { Double lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude(); Double lon = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude(); - Logger.e( TAG, "getNavigationLineData lon = " + lon + ">>>>> lat= " + lat ); - mTanluModelData.getNavigationLineData( lon, lat, new AlongTheWayCallback() { + Logger.e(TAG, "getNavigationLineData lon = " + lon + ">>>>> lat= " + lat); + mTanluModelData.getNavigationLineData(lon, lat, new AlongTheWayCallback() { @Override - public void onSuccess( InformationAndLiveCarResult data ) { - Logger.d( TAG, "getNavigationLineData onSuccess " ); + public void onSuccess(InformationAndLiveCarResult data) { + Logger.d(TAG, "getNavigationLineData onSuccess "); //不做任何处理,直接出发推送,重新请求接口,划线 } @Override - public void onFail( String message, int code ) { - Logger.e( TAG, "getNavigationLineData onFail message = " + message + ">>>code= " + code ); + public void onFail(String message, int code) { + Logger.e(TAG, "getNavigationLineData onFail message = " + message + ">>>code= " + code); } - } ); + }); } /** * 通勤族 事件,监听消息自己请求路线数据 */ public void getRoadLineData() { - mTanluModelData.getRoadLineData( new RoadLineCallback() { + mTanluModelData.getRoadLineData(new RoadLineCallback() { @Override - public void onSuccess( PathLineResult o ) { + public void onSuccess(PathLineResult o) { //绘制线路线 - if ( o != null && o.getPointList() != null && o.getPointList().size() > 0 ) { - drawMapLine( o.getPointList() ); + if (o != null && o.getPointList() != null && o.getPointList().size() > 0) { + drawMapLine(o.getPointList()); } else { - Logger.e( TAG, "getRoadLineData onSuccess o.getPointList() == null" ); + Logger.e(TAG, "getRoadLineData onSuccess o.getPointList() == null"); } } @Override - public void onFail( String message, int code ) { - Logger.d( TAG, "getRoadLineData onFail message =" + message + ">>>code =" + code ); + public void onFail(String message, int code) { + Logger.d(TAG, "getRoadLineData onFail message =" + message + ">>>code =" + code); } - } ); + }); } /** * 导航路线,监听消息自己请求路线数据 */ public void getNaviRoadLineInfo() { - mTanluModelData.getNaviRoadLineInfo( new RoadLineCallback() { + mTanluModelData.getNaviRoadLineInfo(new RoadLineCallback() { @Override - public void onSuccess( PathLineResult o ) { + public void onSuccess(PathLineResult o) { //绘制线路线 - if ( o != null && o.getPointList() != null && o.getPointList().size() > 0 ) { - drawMapLine( o.getPointList() ); + if (o != null && o.getPointList() != null && o.getPointList().size() > 0) { + drawMapLine(o.getPointList()); } else { - Logger.e( TAG, "getNaviRoadLineInfo onSuccess o.getPointList() == null" ); + Logger.e(TAG, "getNaviRoadLineInfo onSuccess o.getPointList() == null"); } } @Override - public void onFail( String message, int code ) { - Logger.d( TAG, "getNaviRoadLineInfo onFail message =" + message + ">>>code =" + code ); + public void onFail(String message, int code) { + Logger.d(TAG, "getNaviRoadLineInfo onFail message =" + message + ">>>code =" + code); } - } ); + }); } /** * 绘制线路 */ - private void drawMapLine( List< Center > pointList ) { - int intervalNum = Utils.getIntervalValue( pointList.size() ); - Logger.d( TAG, "drawMapLine intervalNum = $intervalNum -- pointList.size = ${pointList.size}" ); + private void drawMapLine(List

pointList) { + int intervalNum = Utils.getIntervalValue(pointList.size()); + Logger.d(TAG, "drawMapLine intervalNum = $intervalNum -- pointList.size = ${pointList.size}"); int listSize = pointList.size(); //沿途最多15个点 - for ( int i = 0; i < listSize; i += intervalNum ) { - passedByPoints.add( new MogoLatLng( pointList.get( i ).getLat(), ( pointList.get( i ).getLon() ) ) ); + for (int i = 0; i < listSize; i += intervalNum) { + passedByPoints.add(new MogoLatLng(pointList.get(i).getLat(), (pointList.get(i).getLon()))); } - Logger.d( TAG, "drawMapLine passedByPoints.size() ----> " + passedByPoints.size() ); - MogoLatLng startLatLng = new MogoLatLng( pointList.get( 0 ).getLat(), pointList.get( 0 ).getLon() ); - MogoLatLng endLatLng = new MogoLatLng( pointList.get( listSize - 1 ).getLat(), pointList.get( listSize - 1 ).getLon() ); - mMarkerManager.addRouteWay( getContext(), startLatLng, endLatLng, passedByPoints ); + Logger.d(TAG, "drawMapLine passedByPoints.size() ----> " + passedByPoints.size()); + MogoLatLng startLatLng = new MogoLatLng(pointList.get(0).getLat(), pointList.get(0).getLon()); + MogoLatLng endLatLng = new MogoLatLng(pointList.get(listSize - 1).getLat(), pointList.get(listSize - 1).getLon()); + mMarkerManager.addRouteWay(getContext(), startLatLng, endLatLng, passedByPoints); } /** * 声音控制道路数据 */ - public void getVoiceControlRoadData( String keywords ) { - Double lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude(); - Double lon = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude(); - String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode(); + public void getVoiceControlRoadData(String keywords, final double lat, final double lon) { String adCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getAdCode(); - Logger.d( TAG, "getVoiceControlRoadData lat =" + lat + ">>>lon =" + lon + ">>>cityCode=" + cityCode + ">>>adCode =" + adCode ); - mTanluModelData.getVoiceControlRoadData( keywords, cityCode, lon, lat, adCode, new VoiceSearchCallback() { + String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode(); + Logger.d(TAG, "getVoiceControlRoadData lat =" + lat + ">>>lon =" + lon + ">>>cityCode=" + cityCode + ">>>adCode =" + adCode); + mTanluModelData.getVoiceControlRoadData(keywords, cityCode, lon, lat, adCode, new VoiceSearchCallback() { @Override - public void onSuccess( VoiceSearchResult o ) { + public void onSuccess(VoiceSearchResult o) { String discription = o.getDescription(); - Logger.d( TAG, "getVoiceControlRoadData discription = " + discription ); - if ( o.getInformations() != null && o.getInformations().size() > 0 ) { - speakSuccessVoice( o.getInformations(), discription == null ? "" : discription ); + Logger.d(TAG, "getVoiceControlRoadData discription = " + discription); + if (o.getInformations() != null && o.getInformations().size() > 0) { + speakSuccessVoice(o.getInformations(), discription == null ? "" : discription); + + List informationList = o.getInformations(); + //移动 + MogoLatLng latLng = new MogoLatLng(lat, lon); + mMApUIController.moveToCenter(latLng); + + //清除探路之前的数据 + mMarkerManager.removeMarkers(TanluConstants.MODEL_NAME); + mMogoStatusManager.setUserInteractionStatus(TanluConstants.MODEL_NAME, true, false); + + //打点 TODO + ArrayList optionList = new ArrayList<>(); + for (int i = 0; i < informationList.size(); i++) { + //根据type确定添加的图片 + if (informationList.get(i).type == 0) { //图片 + multiMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_search_poi_location); + } else if (informationList.get(i).type == 1) { //视频 + + } + + MogoMarkerOptions options = new MogoMarkerOptions() + .icon(multiMarkerIcon) + .latitude(informationList.get(i).lat) + .owner(TanluConstants.MODEL_NAME) + .longitude(informationList.get(i).lon); + + optionList.add(options); + } + + mMarkerManager.addMarkers(TanluConstants.MODEL_NAME, optionList, true); + //直接使用当前数据list,作为切换的数据源 + + } else { - if ( !TextUtils.isEmpty( discription ) ) { - AIAssist.getInstance( getContext() ).speakTTSVoice( discription, null ); + if (!TextUtils.isEmpty(discription)) { + AIAssist.getInstance(getContext()).speakTTSVoice(discription, null); } else { - AIAssist.getInstance( getContext() ).speakTTSVoice( "未找到其他车主分享的路况信息", null ); + AIAssist.getInstance(getContext()).speakTTSVoice("未找到其他车主分享的路况信息", null); } } - //TODO 展示数据 - //清除探路之前的数据 - - //直接使用当前数据list,作为切换的数据源 - } @Override - public void onFail( String message, int code ) { - Logger.e( TAG, "getVoiceControlRoadData onFail message = " + message + ">>>code= " + code ); - speakFailVoice( searchfaileVoiceStrings[2] ); + public void onFail(String message, int code) { + Logger.e(TAG, "getVoiceControlRoadData onFail message = " + message + ">>>code= " + code); + speakFailVoice(searchfaileVoiceStrings[2]); } - } ); + }); } Random random = new Random(); - private void speakSuccessVoice( List< Information > informations, String trafficStatus ) { - switch ( informations.size() ) { + private void speakSuccessVoice(List informations, String + trafficStatus) { + switch (informations.size()) { case 0: - Logger.d( TAG, "speakSuccessVoice ----> " + random.nextInt( 3 ) ); - speakFailVoice( searchfaileVoiceStrings[random.nextInt( 3 )] ); + Logger.d(TAG, "speakSuccessVoice ----> " + random.nextInt(3)); + speakFailVoice(searchfaileVoiceStrings[random.nextInt(3)]); break; case 1: - trackVoiceSearch( 1 ); - AIAssist.getInstance( getContext() ).speakTTSVoice( ( - String.format( voiceGetInfoMationTts, "1" ) + trafficStatus ), null ); + trackVoiceSearch(1); + AIAssist.getInstance(getContext()).speakTTSVoice(( + String.format(voiceGetInfoMationTts, "1") + trafficStatus), null); case 2: - trackVoiceSearch( 1 ); - AIAssist.getInstance( getContext() ).speakTTSVoice( ( + trackVoiceSearch(1); + AIAssist.getInstance(getContext()).speakTTSVoice(( String.format( voiceGetInfoMationTts, "2" - ) + trafficStatus ), null ); + ) + trafficStatus), null); case 3: - trackVoiceSearch( 1 ); - AIAssist.getInstance( getContext() ).speakTTSVoice( ( + trackVoiceSearch(1); + AIAssist.getInstance(getContext()).speakTTSVoice(( String.format( voiceGetInfoMationTts, "3" - ) + trafficStatus ), null ); + ) + trafficStatus), null); default: - trackVoiceSearch( 1 ); - AIAssist.getInstance( getContext() ).speakTTSVoice( ( + trackVoiceSearch(1); + AIAssist.getInstance(getContext()).speakTTSVoice(( String.format( voiceGetInfoMationTts, "多" - ) + trafficStatus ), null ); + ) + trafficStatus), null); } } private void initStrings() { voiceGetInfoMationTts = - getContext().getResources().getString( R.string.voice_get_informations_tts ); + getContext().getResources().getString(R.string.voice_get_informations_tts); searchingVoiceStrings = - getContext().getResources().getStringArray( R.array.searching_voice_string_array ); + getContext().getResources().getStringArray(R.array.searching_voice_string_array); searchfaileVoiceStrings = - getContext().getResources().getStringArray( R.array.search_fail_voice_array ); + getContext().getResources().getStringArray(R.array.search_fail_voice_array); } - private void speakFailVoice( String string ) { - AIAssist.getInstance( getContext() ).speakTTSVoice( string, null ); + private void speakFailVoice(String string) { + AIAssist.getInstance(getContext()).speakTTSVoice(string, null); + } + + private void speakSearchingVoice() { + AIAssist.getInstance(getContext()).speakTTSVoice(searchingVoiceStrings[random.nextInt(3)], null); } //上报语音搜索 - private void trackVoiceSearch( int type ) { + private void trackVoiceSearch(int type) { } diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewProvider.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewProvider.java index 1d40495348..cdc123a787 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewProvider.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewProvider.java @@ -83,4 +83,14 @@ public class TanluCardViewProvider implements IMogoModuleProvider { public IMogoMarkerClickListener getMarkerClickListener() { return null; } + + @Override + public String getAppPackage() { + return ""; + } + + @Override + public String getAppName() { + return "探路"; + } } diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/Information.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/Information.java index 5e196a1cd8..3ddfc14bc3 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/Information.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/Information.java @@ -13,16 +13,16 @@ import java.util.ArrayList; * @since 2020-01-05 */ public class Information extends BaseData implements Parcelable { - private int type; - private Double lon; - private Double lat; - private String addr; - private Long generateTime; - private String cityName; - private ArrayList items; - private int distance; - private String nickName; - private String headImgUrl; + public int type; + public Double lon; + public Double lat; + public String addr; + public Long generateTime; + public String cityName; + public ArrayList items; + public int distance; + public String nickName; + public String headImgUrl; @Override diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/MarkerInfo.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/MarkerInfo.java index f5a6ba68a0..355929a04d 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/MarkerInfo.java +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/MarkerInfo.java @@ -8,12 +8,12 @@ import java.io.Serializable; * @since 2020-01-08 */ public class MarkerInfo implements Serializable { - public int type; //封路,还是上报 + public String type; //封路,还是上报 public String imageUrl; public Long lon; //经度 public Long lat; //纬度 - public MarkerInfo(int type, String imageUrl, Long lon, Long lat) { + public MarkerInfo(String type, /*String imageUrl,*/ Long lon, Long lat) { this.type = type; this.imageUrl = imageUrl; this.lon = lon; diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/MarkerInfoReceiver.kt b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/MarkerInfoReceiver.kt index bfcb102fb6..b203816a41 100644 --- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/MarkerInfoReceiver.kt +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/MarkerInfoReceiver.kt @@ -13,11 +13,11 @@ import org.greenrobot.eventbus.EventBus class MarkerInfoReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == "com.zhidao.roadcondition.marker.info"){ - var imageUrl = intent.getStringExtra("imageUrl") + var type = intent.getStringExtra("type") var lat = intent.getLongExtra("lat",0) var lon = intent.getLongExtra("lon",0) //经度 - Log.d("MarkerInfoReceiver", "imageUrl = $imageUrl ---->lat = $lat ---->lon = $lon") - EventBus.getDefault().post(MarkerInfo(1, imageUrl, lon, lat)) + Log.d("MarkerInfoReceiver", "type = $type ---->lat = $lat ---->lon = $lon") + EventBus.getDefault().post(MarkerInfo(type, lon, lat)) } } } diff --git a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_block_up.png b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_block_up.png new file mode 100644 index 0000000000..aa80dfe42f Binary files /dev/null and b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_block_up.png differ diff --git a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_oil_price.png b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_oil_price.png new file mode 100644 index 0000000000..2d3321bbdc Binary files /dev/null and b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_oil_price.png differ diff --git a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_road_closure.png b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_road_closure.png new file mode 100644 index 0000000000..7726fc04d4 Binary files /dev/null and b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_road_closure.png differ diff --git a/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_traffic_check.png b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_traffic_check.png new file mode 100644 index 0000000000..18e28e06f7 Binary files /dev/null and b/modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_traffic_check.png differ diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/analytics/IMogoAnalytics.java b/services/mogo-service-api/src/main/java/com/mogo/service/analytics/IMogoAnalytics.java index d3ef9f6bdb..e8fe14fe8b 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/analytics/IMogoAnalytics.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/analytics/IMogoAnalytics.java @@ -15,7 +15,6 @@ import java.util.Map; @Keep public interface IMogoAnalytics extends IProvider { - /** * 埋点 * diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardChangedListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardChangedListener.java new file mode 100644 index 0000000000..acc829f05d --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardChangedListener.java @@ -0,0 +1,12 @@ +package com.mogo.service.cardmanager; + +/** + * @author congtaowang + * @since 2020-01-14 + *

+ * 卡片切换监听 + */ +public interface IMogoCardChangedListener { + + void onSwitched( int position, String moduleName ); +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java index 2d68cfbe26..30c0ed5f17 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java @@ -16,4 +16,22 @@ public interface IMogoCardManager extends IProvider { * @param cardType */ void switch2( String cardType ); + + /** + * 注册卡片切换监听 + */ + void registerCardChangedListener( String tag, IMogoCardChangedListener listener ); + + /** + * 注销卡片监听 + */ + void unregisterCardChangedListener( String tag ); + + /** + * 回调 + * + * @param position 卡片位置 + * @param moduleName 卡片名称 + */ + void invoke( int position, String moduleName ); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStackTransactionListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/FragmentStackTransactionListener.java similarity index 51% rename from modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStackTransactionListener.java rename to services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/FragmentStackTransactionListener.java index 628a6ec496..67c1fa3642 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStackTransactionListener.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/FragmentStackTransactionListener.java @@ -1,4 +1,4 @@ -package com.mogo.module.main.fragmentmanager; +package com.mogo.service.fragmentmanager; /** * @author congtaowang @@ -8,5 +8,8 @@ package com.mogo.module.main.fragmentmanager; */ public interface FragmentStackTransactionListener { - void onTransaction(); + /** + * @param size 栈内的fragment数量 + */ + void onTransaction( int size ); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java index e0087416d4..1d209b6c31 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java @@ -1,5 +1,7 @@ package com.mogo.service.fragmentmanager; +import androidx.appcompat.app.AppCompatActivity; + import com.alibaba.android.arouter.facade.template.IProvider; /** @@ -33,4 +35,26 @@ public interface IMogoFragmentManager extends IProvider { * 退出栈中所有fragment */ void clearAll(); + + /** + * 主页注册栈变化监听 + * + * @param listener + */ + void registerMainFragmentStackTransactionListener( FragmentStackTransactionListener listener ); + + /** + * 其他注册栈变化监听 + * + * @param listener + */ + void addMainFragmentStackTransactionListener( FragmentStackTransactionListener listener ); + + /** + * 初始化 + * + * @param activity + * @param containerId + */ + void init( AppCompatActivity activity, int containerId ); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleProvider.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleProvider.java index a9391d094d..d53d29693b 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleProvider.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleProvider.java @@ -96,4 +96,18 @@ public interface IMogoModuleProvider extends IProvider { */ @Deprecated IMogoMarkerClickListener getMarkerClickListener(); + + /** + * 获取模块对应 app 的包名 + * + * @return + */ + String getAppPackage(); + + /** + * 获取对应模块 app 名称 + * + * @return + */ + String getAppName(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceListener.java index 1bb1ae30c8..af8ebc6e3e 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceListener.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceListener.java @@ -1,7 +1,5 @@ package com.mogo.service.voice; -import android.content.Intent; - import com.mogo.service.intent.IMogoIntentListener; /** diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceManager.java index 6fc50fc84e..4a7538d320 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoVoiceManager.java @@ -1,8 +1,5 @@ package com.mogo.service.voice; -import android.content.Intent; - -import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; /** diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStack.java b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java similarity index 70% rename from modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStack.java rename to services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java index 963bdb25c2..67e41628c2 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/FragmentStack.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java @@ -1,4 +1,4 @@ -package com.mogo.module.main.fragmentmanager; +package com.mogo.service.impl.fragmentmanager; import android.app.Activity; @@ -7,8 +7,11 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.mogo.service.fragmentmanager.FragmentDescriptor; +import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; import com.mogo.utils.logger.Logger; +import java.util.ArrayList; +import java.util.List; import java.util.Stack; /** @@ -31,6 +34,7 @@ public class FragmentStack { private FragmentDescriptor mCurrentFragment; private FragmentStackTransactionListener mFragmentStackTransactionListener; + private List< FragmentStackTransactionListener > mFragmentStackTransactionListeners = new ArrayList<>(); private FragmentStack() { } @@ -82,9 +86,12 @@ public class FragmentStack { mFragmentStack.push( descriptor ); mCurrentFragment = descriptor; - if ( descriptor.isNotifyMainModule() && getFragmentStackTransactionListener() != null ) { - getFragmentStackTransactionListener().onTransaction(); + if ( descriptor.isNotifyMainModule() ) { + if ( mFragmentStackTransactionListener != null ) { + mFragmentStackTransactionListener.onTransaction(getStackSize()); + } } + invokeCallback(); } public void pop() { @@ -100,9 +107,12 @@ public class FragmentStack { } if ( mFragmentStack.isEmpty() ) { mFragmentTransaction.commitAllowingStateLoss(); - if ( mCurrentFragment.isNotifyMainModule() && getFragmentStackTransactionListener() != null ) { - getFragmentStackTransactionListener().onTransaction(); + if ( mCurrentFragment.isNotifyMainModule() ) { + if ( mFragmentStackTransactionListener != null ) { + mFragmentStackTransactionListener.onTransaction(getStackSize()); + } } + invokeCallback(); mCurrentFragment = null; return; } @@ -112,12 +122,23 @@ public class FragmentStack { mFragmentTransaction.commitAllowingStateLoss(); } - if ( mCurrentFragment.isNotifyMainModule() && getFragmentStackTransactionListener() != null ) { - getFragmentStackTransactionListener().onTransaction(); + if ( mCurrentFragment.isNotifyMainModule() ) { + if ( mFragmentStackTransactionListener != null ) { + mFragmentStackTransactionListener.onTransaction(getStackSize()); + } } + invokeCallback(); mCurrentFragment = fragment; } + private void invokeCallback() { + if ( mFragmentStackTransactionListeners != null ) { + for ( FragmentStackTransactionListener fragmentStackTransactionListener : mFragmentStackTransactionListeners ) { + fragmentStackTransactionListener.onTransaction(getStackSize()); + } + } + } + public boolean isEmpty() { return mFragmentStack.isEmpty(); } @@ -126,8 +147,8 @@ public class FragmentStack { return mFragmentStack.size(); } - public FragmentStackTransactionListener getFragmentStackTransactionListener() { - return mFragmentStackTransactionListener; + public void addFragmentStackTransactionListener( FragmentStackTransactionListener fragmentStackTransactionListener ) { + this.mFragmentStackTransactionListeners.add( fragmentStackTransactionListener ); } public void setFragmentStackTransactionListener( FragmentStackTransactionListener fragmentStackTransactionListener ) { @@ -145,8 +166,9 @@ public class FragmentStack { mFragmentTransaction.commitAllowingStateLoss(); mFragmentStack.clear(); mCurrentFragment = null; - if ( getFragmentStackTransactionListener() != null ) { - getFragmentStackTransactionListener().onTransaction(); + if ( mFragmentStackTransactionListener != null ) { + mFragmentStackTransactionListener.onTransaction(getStackSize()); } + invokeCallback(); } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/MogoFragmentManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/MogoFragmentManager.java similarity index 55% rename from modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/MogoFragmentManager.java rename to services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/MogoFragmentManager.java index 4ab993e679..587aeadb50 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/fragmentmanager/MogoFragmentManager.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/MogoFragmentManager.java @@ -1,10 +1,13 @@ -package com.mogo.module.main.fragmentmanager; +package com.mogo.service.impl.fragmentmanager; import android.content.Context; +import androidx.appcompat.app.AppCompatActivity; + import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.service.MogoServicePaths; import com.mogo.service.fragmentmanager.FragmentDescriptor; +import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; import com.mogo.service.fragmentmanager.IMogoFragmentManager; /** @@ -36,6 +39,21 @@ public class MogoFragmentManager implements IMogoFragmentManager { FragmentStack.getInstance().clearAll(); } + @Override + public void registerMainFragmentStackTransactionListener( FragmentStackTransactionListener listener ) { + FragmentStack.getInstance().setFragmentStackTransactionListener( listener ); + } + + @Override + public void addMainFragmentStackTransactionListener( FragmentStackTransactionListener listener ) { + FragmentStack.getInstance().addFragmentStackTransactionListener( listener ); + } + + @Override + public void init( AppCompatActivity activity, int containerId ) { + FragmentStack.getInstance().init( activity, containerId ); + } + @Override public void init( Context context ) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/intent/MogoVoiceManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/intent/MogoVoiceManager.java index 1115692e91..3aa8e3643c 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/intent/MogoVoiceManager.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/intent/MogoVoiceManager.java @@ -20,21 +20,17 @@ public class MogoVoiceManager implements IMogoVoiceManager { @Override public void unregisterIntentListener( String command ) { - IntentManager.getInstance().unregisterIntentListener( command ); } @Override public void invoke( String command, Intent intent ) { - IntentManager.getInstance().invoke( command, intent ); } @Override public void registerIntentListener( String intent, IMogoIntentListener listener ) { - IntentManager.getInstance().registerIntentListener( intent, listener ); } @Override public void init( Context context ) { - IntentManager.getInstance().init( context ); } }