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-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 index ccf609d422..1b013807f9 100644 --- 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 @@ -1,13 +1,19 @@ package com.mogo.module.common.entity; +/** + * 新鲜事儿Marker数据 + */ public class MarkerNoveltyInfo { - - private ContentData contentData; - private MarkerLocation location; - private String poiType; private String type; + private MarkerLocation location; private MarkerUserInfo userInfo; + /** + * @see MarkerPoiTypeEnum + */ + private String poiType; + private ContentData contentData; + public ContentData getContentData() { return contentData; @@ -50,7 +56,6 @@ public class MarkerNoveltyInfo { } public class ContentData { - private String content; private String iconUrl; private String imgUrl; 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/MarkerShowEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerShowEntity.java index 60b7a9437c..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 @@ -92,9 +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 && - isHighlighted == that.isHighlighted && - 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) && @@ -103,7 +101,7 @@ public class MarkerShowEntity { @Override public int hashCode() { - return Objects.hash(isChecked, isHighlighted, iconUrl, textContent, markerType, bindObj, markerLocation); + return Objects.hash(iconUrl, textContent, markerType, bindObj, markerLocation); } @Override 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 f30aaf5686..bb87bc0523 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 @@ -30,8 +30,8 @@ import com.mogo.service.map.IMogoMapService; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.logger.Logger; -import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * author : donghongyu @@ -155,7 +155,7 @@ public class MarkerServiceHandler { lastMarkerShowEntity.setChecked(false); lastMarkerShowEntity.setHighlighted(false); - drawMapMarkerItem(lastMarkerShowEntity); + drawMapMarker(lastMarkerShowEntity); lastMarker.remove(); } @@ -167,38 +167,38 @@ public class MarkerServiceHandler { markerShowEntity.setChecked(true); markerShowEntity.setHighlighted(true); - lastMarker = drawMapMarkerItem(markerShowEntity); + lastMarker = drawMapMarker(markerShowEntity); + if (lastMarker != null) { + lastMarker.setAlpha(1f); + } marker.remove(); return false; } } - // 记录所有的Marker - private static List markerShowEntities; - // 对指定类型高亮处理 public static void highlightedMarker(String typeTag) { - if (markerShowEntities != null) { - if (lastMarker != null) { - // 将上次选中 Marker 设置为未选中状态 - MarkerShowEntity lastMarkerShowEntity = (MarkerShowEntity) lastMarker.getObject(); - lastMarkerShowEntity.setChecked(false); - lastMarkerShowEntity.setHighlighted(false); - drawMapMarkerItem(lastMarkerShowEntity); - } - lastMarker = null; - getMarkerManager().removeMarkers(); + try { + Map> allMarker = getMarkerManager().getAllMarkers(); + for (Map.Entry> entry : allMarker.entrySet()) { + String keyStr = entry.getKey(); + List markerList = entry.getValue(); - for (MarkerShowEntity markerShowEntity : markerShowEntities) { - if (markerShowEntity.getMarkerType().equals(typeTag)) { - markerShowEntity.setHighlighted(true); + if (keyStr.equals(typeTag)) { + for (IMogoMarker marker : markerList) { + marker.setAlpha(1f); + } } else { - markerShowEntity.setHighlighted(false); + for (IMogoMarker marker : markerList) { + marker.setAlpha(0.7f); + } } - drawMapMarkerItem(markerShowEntity); } + } catch (Exception e) { + e.printStackTrace(); } + } /** @@ -207,11 +207,6 @@ public class MarkerServiceHandler { public static void drawMapMarker(MarkerResponse response) { lastMarker = null; getMarkerManager().removeMarkers(); - if (markerShowEntities == null) { - markerShowEntities = new ArrayList<>(); - } else { - markerShowEntities.clear(); - } // 解析不同的Marker类型,然后对应的进行绘制 if (response != null && response.getResult() != null) { @@ -299,7 +294,7 @@ public class MarkerServiceHandler { } } -// getMapUIController().changeZoom(8); + getMapUIController().changeZoom(12); } /** @@ -316,15 +311,11 @@ public class MarkerServiceHandler { .latitude(markerShowEntity.getMarkerLocation().getLat()) .longitude(markerShowEntity.getMarkerLocation().getLon()); options.icon(markerView); - options.alpha(0.8f); IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); marker.setOnMarkerClickListener(mogoMarkerClickListener); marker.setObject(markerShowEntity); - - if (markerShowEntities != null) { - markerShowEntities.add(markerShowEntity); - } + marker.setAlpha(0.7f); return marker; } else { Logger.e(TAG, "Location 必须进行初始化!!!!!"); @@ -335,37 +326,4 @@ public class MarkerServiceHandler { return null; } - /** - * 绘制Marker,这里绘制的不会添加到队列中 - */ - public static IMogoMarker drawMapMarkerItem(MarkerShowEntity markerShowEntity) { - Logger.e(TAG, "绘制Marker====drawMapMarkerItem:" + markerShowEntity); - try { - 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); - if (markerShowEntity.isHighlighted()) { - options.alpha(1f); - } else { - options.alpha(0.8f); - } - - IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); - marker.setOnMarkerClickListener(mogoMarkerClickListener); - marker.setObject(markerShowEntity); - - return marker; - } else { - Logger.e(TAG, "Location 必须进行初始化!!!!!"); - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } } 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 7c9fceb9f9..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; @@ -68,6 +70,9 @@ public class MapMarkerInfoView extends MapMarkerBaseView { 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) { @@ -78,15 +83,13 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); } } - loadImageWithMarker(markerShowEntity); - ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); + break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); - ivUserHead.setImageResource(R.drawable.icon_map_marker_road_block_up); + 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); @@ -94,16 +97,47 @@ public class MapMarkerInfoView extends MapMarkerBaseView { case ServiceConst.CARD_TYPE_NOVELTY: ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); - - 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); 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()) { @@ -119,13 +153,16 @@ public class MapMarkerInfoView extends MapMarkerBaseView { } } - 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); break; } 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 a800faabe7..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; @@ -59,6 +61,9 @@ public class MapMarkerView extends MapMarkerBaseView { 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) { @@ -67,9 +72,6 @@ public class MapMarkerView extends MapMarkerBaseView { ivBg.setImageResource(R.drawable.bg_map_marker_purple); } } - loadImageWithMarker(markerShowEntity); - ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: ivUserHead.setVisibility(View.INVISIBLE); @@ -83,13 +85,41 @@ public class MapMarkerView extends MapMarkerBaseView { ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); - ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); 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 @@ -105,9 +135,6 @@ public class MapMarkerView extends MapMarkerBaseView { break; } } - - ivBg.setImageResource(R.drawable.bg_map_marker_purple); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; } diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_gasoline.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_gasoline.png deleted file mode 100644 index bac7ee2e40..0000000000 Binary files a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_gasoline.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 d883a5d2af..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 @@ -47,11 +47,11 @@ android:layout_height="@dimen/dp_45" android:layout_gravity="center" android:layout_marginTop="@dimen/dp_14" - android:src="@drawable/icon_map_marker_road_block_up" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" + tools:src="@drawable/icon_map_marker_road_block_up" tools:visibility="visible" /> \ 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 5a0ed1a03f..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 @@ -44,11 +44,11 @@ android:layout_height="@dimen/dp_45" android:layout_gravity="center" android:layout_marginLeft="@dimen/dp_14" - android:src="@drawable/icon_map_marker_road_block_up" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" + tools:src="@drawable/icon_map_marker_road_block_up" tools:visibility="visible" /> + tools:text="诗一样的女子" /> > private IMogoSocketManager mMogoSocketManager; private IMogoLocationClient mLocationClient; private IMogoCardManager iMogoCardManager; - private IMogoVoiceManager mMogoVoiceManager; + private IMogoStatusManager mMogoStatusManager; + private IMogoIntentManager mogoIntentManager; //免唤醒 + private IMogoMapUIController mMApUIController; + private GeocodeSearch mGeocodeSearch; //声音控制文字 private String voiceGetInfoMationTts; @@ -131,9 +147,11 @@ public class TanluCardViewFragment extends MvpFragment> private List markerExploreWayList = new ArrayList<>(); private int currentPosition = 0; //卡片媒体当前位置 private Bitmap mMarkerIcon; + private Bitmap multiMarkerIcon; private TanluModelData mTanluModelData; private List passedByPoints; private IMogoRegisterCenter mMogoRegisterCenter; + private String mKeywords; @Override @@ -180,18 +198,96 @@ public class TanluCardViewFragment extends MvpFragment> mogoImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(); //地图marker 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()); mMogoRegisterCenter = (IMogoRegisterCenter) ARouter.getInstance().build(MogoServicePaths.PATH_REGISTER_CENTER).navigation(getContext()); - - mMogoRegisterCenter.registerMogoModuleLifecycle(TanluConstants.MODEL_NAME, this); - mMogoRegisterCenter = (IMogoRegisterCenter) ARouter.getInstance().build(MogoServicePaths.PATH_REGISTER_CENTER).navigation(getContext()); //语音操作 - mMogoVoiceManager = (IMogoVoiceManager) ARouter.getInstance().build(MogoServicePaths.PATH_VOICE_MANAGER).navigation(getContext()); - } + //唤醒 + 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()); + + 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) { @@ -236,9 +332,9 @@ public class TanluCardViewFragment extends MvpFragment> } @Override - public void onStartNavi() { -// initModelData(); -// getNavigationLineData(); + public void onStartNavi() { //开始导航 + initModelData(); + getNavigationLineData(); } @Override @@ -287,20 +383,85 @@ public class TanluCardViewFragment extends MvpFragment> }); } + + /** + * 处理关键词搜索 + * + * @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() { - //某某路堵不堵,某某地点堵不堵,附近堵不堵,播放路况 - //上报路况,上报拥堵 - mMogoVoiceManager.registerIntentListener("", new IMogoVoiceListener() { - @Override - public void onIntentReceived(String command, Intent intent) { - - } - }); + //某某路堵不堵,某某地点堵不堵,附近堵不堵,播放路况 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; @@ -333,7 +494,7 @@ public class TanluCardViewFragment extends MvpFragment> // }); - //TODO 更加广播类型判断 + //TODO 广播类型判断 // getNavigationLineData(); // getRoadLineData(); @@ -514,7 +675,7 @@ public class TanluCardViewFragment extends MvpFragment> */ @Override public void onPerform() { - Logger.d(TAG, "tanlu卡片 有效 ---->"); + Logger.d(TAG, "tanlu卡片 onPerform 有效 ---->"); mMarkerManager = mMogoMapService.getMarkerManager(getActivity()); List markers = mMarkerManager.getMarkers(TanluConstants.MODEL_NAME); if (markers != null && markers.size() > 0) { @@ -658,9 +819,10 @@ public class TanluCardViewFragment extends MvpFragment> .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); + + //TODO 请求分享接口 + } @Override @@ -759,11 +921,9 @@ public class TanluCardViewFragment extends MvpFragment> /** * 声音控制道路数据 */ - 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(); + 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 @@ -772,6 +932,41 @@ public class TanluCardViewFragment extends MvpFragment> 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); @@ -780,11 +975,6 @@ public class TanluCardViewFragment extends MvpFragment> } } - //TODO 展示数据 - //清除探路之前的数据 - - //直接使用当前数据list,作为切换的数据源 - } @Override @@ -797,7 +987,8 @@ public class TanluCardViewFragment extends MvpFragment> Random random = new Random(); - private void speakSuccessVoice(List informations, String trafficStatus) { + private void speakSuccessVoice(List informations, String + trafficStatus) { switch (informations.size()) { case 0: Logger.d(TAG, "speakSuccessVoice ----> " + random.nextInt(3)); @@ -850,6 +1041,10 @@ public class TanluCardViewFragment extends MvpFragment> AIAssist.getInstance(getContext()).speakTTSVoice(string, null); } + private void speakSearchingVoice() { + AIAssist.getInstance(getContext()).speakTTSVoice(searchingVoiceStrings[random.nextInt(3)], null); + } + //上报语音搜索 private void trackVoiceSearch(int type) { 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/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