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 c4d29fa385..5fbb7aa16b 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,23 +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.voice.IMogoVoiceListener; -import com.mogo.service.voice.IMogoVoiceManager; +import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; @@ -105,7 +118,10 @@ public class TanluCardViewFragment extends MvpFragment> 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