From 6acdfa3772beff8567e45a8a419bf6c5949d0ae7 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 14 Jan 2020 17:44:39 +0800 Subject: [PATCH 01/26] opt --- .idea/misc.xml | 6 ++++ gradle.properties | 2 +- .../com/mogo/module/main/MainActivity.java | 5 ++++ .../com/mogo/module/main/MainPresenter.java | 11 +++---- .../com/mogo/module/main/MogoCardManager.java | 30 +++++++++++++++++++ .../module/main/cards/MogoModulesHandler.java | 10 ++++++- .../module/main/cards/MogoModulesManager.java | 8 +++++ .../cardmanager/IMogoCardChangedListener.java | 12 ++++++++ .../service/cardmanager/IMogoCardManager.java | 18 +++++++++++ .../service/voice/IMogoVoiceListener.java | 2 -- .../mogo/service/voice/IMogoVoiceManager.java | 3 -- .../service/impl/intent/MogoVoiceManager.java | 4 --- 12 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 .idea/misc.xml create mode 100644 services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardChangedListener.java diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..2dc54c489f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ae283a0d23..0fc019f84b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=true +RELEASE=false # 模块版本 DEMO_MODULE_MAP_VERSION=1.0.0-SNAPSHOT DEMO_MODULE_MAP2_VERSION=1.0.0-SNAPSHOT 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..d3e97d01d1 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 @@ -30,6 +30,7 @@ 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.cardmanager.IMogoCardManager; import com.mogo.service.connection.IMogoSocketManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleProvider; @@ -52,6 +53,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private IMogoMapService mMogoMapService; private IMogoMapUIController mMogoMapUIController; private MogoModulesHandler mMogoModuleHandler; + private IMogoCardManager mMogoCardManager; private OrientedViewPager mCardsContainer; private CardModulesAdapter mCardModulesAdapter; @@ -171,6 +173,8 @@ 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 ); } private void loadModules() { @@ -212,6 +216,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme int position = mCardModulesAdapter.getProviderPosition( cardType ); if ( position != -1 ) { mCardsContainer.setCurrentItem( position, Math.abs( mCurrentPosition - position ) == 1 ); + mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); } else { Logger.e( TAG, "Can't find type of %s's position", cardType ); } 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..fe0d3db3d4 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,11 @@ 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..02d40b7a4c 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 ); } } @@ -374,4 +377,9 @@ public class MogoModulesManager implements MogoModulesHandler, listener.onMarkerClicked( marker ); } } + + @Override + public String getCurrentModuleName() { + return mEnableModuleName; + } } 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/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/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 ); } } From 58456245f733a19e6d7db8a8696001d5f87928d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 19:03:02 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=B0=8F?= =?UTF-8?q?=E6=B0=B4=E6=BB=B4=E7=9A=84Marker=E6=A0=B7=E5=BC=8F=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../utils/network/RequestLogInterceptor.java | 24 ++++++++- .../module/service/MarkerServiceHandler.java | 33 +++++++------ .../com/mogo/module/service/ServiceConst.java | 5 ++ .../service/marker/MapMarkerBaseView.java | 2 +- .../service/marker/MapMarkerInfoView.java | 7 ++- .../module/service/marker/MapMarkerView.java | 46 ++++++++++++------ .../icon_map_marker_location.png | Bin 905 -> 0 bytes .../src/main/res/layout/view_map_marker.xml | 12 ++--- .../main/res/layout/view_map_marker_info.xml | 36 ++++++++------ 10 files changed, 106 insertions(+), 61 deletions(-) delete mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location.png diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file 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/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..048c0b044f 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 @@ -231,7 +231,7 @@ public class MarkerServiceHandler { } } - getMapUIController().changeZoom(10); + getMapUIController().changeZoom(12); } /** @@ -239,22 +239,25 @@ public class MarkerServiceHandler { */ public static IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { Logger.e(TAG, "绘制Marker====markerTag:" + 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); + 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/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..c27e42f6ca 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 @@ -29,7 +29,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) { 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..fc1dfb5c17 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 @@ -51,7 +51,7 @@ 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); + ivIcon = findViewById(R.id.ivIcon); llMarkerContent = findViewById(R.id.llMarkerContent); ivReverseTriangle = findViewById(R.id.ivReverseTriangle); ivCar = findViewById(R.id.ivCar); @@ -66,10 +66,10 @@ public class MapMarkerInfoView extends MapMarkerBaseView { switch (markerShowEntity.getMarkerType()) { case ServiceConst .CARD_TYPE_CARS_CHATTING: - ivIconForeground.setVisibility(View.GONE); + ivIcon.setVisibility(View.GONE); case ServiceConst .CARD_TYPE_USER_DATA: - ivIconForeground.setVisibility(View.GONE); + ivIcon.setVisibility(View.GONE); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { @@ -102,7 +102,6 @@ public class MapMarkerInfoView extends MapMarkerBaseView { } } -// ivIconForeground.setVisibility(View.VISIBLE); llMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); break; 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..cafb83fb27 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 @@ -48,7 +48,7 @@ public class MapMarkerView extends MapMarkerBaseView { 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); } @@ -58,12 +58,10 @@ public class MapMarkerView 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.GONE); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { @@ -73,32 +71,48 @@ public class MapMarkerView extends MapMarkerBaseView { } } loadImageWithMarker(markerShowEntity); + ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); + ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); break; - case ServiceConst - .CARD_TYPE_ROAD_CONDITION: + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + ivUserHead.setVisibility(View.GONE); + ivIcon.setVisibility(View.VISIBLE); + + ivUserHead.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.GONE); + 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: + ivUserHead.setVisibility(View.GONE); + ivIcon.setVisibility(View.VISIBLE); + 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); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; } - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); } catch (Exception e) { e.printStackTrace(); 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 0807021a550ddaec7cdbe3e23767bdd129d4123b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tq0P)O5Es!bC?*pAKo9XJVs!=F- zU0pV%FD)E03R4KNuWL|NWt0hHI_Q)XItcJb8EhS`;>WXP)h*&eo4&pY}=D6$5l~Sb-SEOy&a&QWx#n8 zKwY?o8xvEwDd{C;J6m}C>M5S6&>kSdH32kuct$bA6IjrVM0+7aL%slQefW-p<~H{Q zGMB07mx&XgEivMA$uT*Qi)Nxs3ggcVV8%>*ZZBhE5KFQp7ae77L5sU79>9XCC?W>2 zBqeguEFmN%Zf!|kMCQe^Tr}$$36$rIBrhWKVUde=#Z?xtJM^;TMdp224w|46_*u=$^Mlq(3$XBAJ9#}Hxc&u7!M{2BoHaJqekInCxI4O?D=7&|1 f*lv7{?3dnOjKgg|`5`Y^00000NkvXXu0mjfNf4q9 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..5525d89864 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 @@ -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" /> @@ -42,12 +42,12 @@ app:miv_shape="circle" /> @@ -39,30 +39,34 @@ app:miv_shape="circle" /> + app:layout_constraintStart_toEndOf="@+id/ivIcon" + app:layout_constraintTop_toTopOf="@+id/ivIcon" + tools:text="诗一样的女子诗诗一样的女子诗诗一样的女子诗" /> @@ -70,7 +74,7 @@ android:id="@+id/ivReverseTriangle" android:layout_width="10dp" android:layout_height="10dp" - android:src="@drawable/bg_shape_reverse_triangle_green" + android:src="@drawable/bg_shape_reverse_triangle_blue" app:layout_constraintEnd_toEndOf="@+id/llMarkerContent" app:layout_constraintStart_toStartOf="@+id/llMarkerContent" app:layout_constraintTop_toBottomOf="@+id/llMarkerContent" /> From eef77eaf04e23fba8d534514d371cd62ac112edd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 19:09:51 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86Marker=20Info?= =?UTF-8?q?=E7=9A=84=E5=B1=95=E5=BC=80=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/marker/MapMarkerInfoView.java | 54 ++++++++++++------- .../main/res/layout/view_map_marker_info.xml | 8 +-- 2 files changed, 39 insertions(+), 23 deletions(-) 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 fc1dfb5c17..d3951cd95d 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 @@ -28,7 +28,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) { @@ -52,7 +52,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { LayoutInflater.from(context).inflate(R.layout.view_map_marker_info, this); ivUserHead = findViewById(R.id.ivUserHead); ivIcon = findViewById(R.id.ivIcon); - llMarkerContent = findViewById(R.id.llMarkerContent); + clMarkerContent = findViewById(R.id.clMarkerContent); ivReverseTriangle = findViewById(R.id.ivReverseTriangle); ivCar = findViewById(R.id.ivCar); tvMarkerContent = findViewById(R.id.tvMarkerContent); @@ -64,50 +64,66 @@ public class MapMarkerInfoView extends MapMarkerBaseView { Object bindObj = markerShowEntity.getBindObj(); switch (markerShowEntity.getMarkerType()) { - case ServiceConst - .CARD_TYPE_CARS_CHATTING: - ivIcon.setVisibility(View.GONE); - case ServiceConst - .CARD_TYPE_USER_DATA: + case ServiceConst.CARD_TYPE_CARS_CHATTING: + case ServiceConst.CARD_TYPE_USER_DATA: + ivUserHead.setVisibility(View.VISIBLE); ivIcon.setVisibility(View.GONE); 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); + ivCar.setImageResource(R.drawable.icon_map_marker_car_blue); + ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); break; - case ServiceConst - .CARD_TYPE_ROAD_CONDITION: + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + ivUserHead.setVisibility(View.GONE); + ivIcon.setVisibility(View.VISIBLE); + + ivUserHead.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.GONE); + 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: + ivUserHead.setVisibility(View.GONE); + ivIcon.setVisibility(View.VISIBLE); + 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; } } - 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); + ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; } - - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); if (!TextUtils.isEmpty(markerShowEntity.getTextContent())) { tvMarkerContent.setText(markerShowEntity.getTextContent()); } 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 98b0ee5561..2d988677b1 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 @@ -19,7 +19,7 @@ app:layout_constraintTop_toBottomOf="@+id/ivReverseTriangle" /> + app:layout_constraintEnd_toEndOf="@+id/clMarkerContent" + app:layout_constraintStart_toStartOf="@+id/clMarkerContent" + app:layout_constraintTop_toBottomOf="@+id/clMarkerContent" /> \ No newline at end of file From 26517c1054cd67889eb0a0ab7e1e275b708e40ee Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 14 Jan 2020 20:08:00 +0800 Subject: [PATCH 04/26] otp --- .../module/apps/AppsFragmentProvider.java | 10 +++ .../extensions/ExtensionsModuleProvider.java | 10 +++ .../extensions/entrance/EntranceProvider.java | 10 +++ .../com/mogo/module/main/MainActivity.java | 2 +- .../mogo/module/map/MapFragmentProvider.java | 10 +++ .../com/mogo/module/map/MapPresenter.java | 82 +++++++++---------- .../com/mogo/module/map/VoiceConstants.java | 29 ++++++- .../navi/ui/search/ChoosePathFragment.kt | 9 +- .../ui/search/SearchFragmentProvider.java | 10 +++ .../module/service/MogoServiceProvider.java | 12 ++- .../tanlu/fragment/TanluCardViewProvider.java | 10 +++ .../service/module/IMogoModuleProvider.java | 14 ++++ 12 files changed, 155 insertions(+), 53 deletions(-) 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-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/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 d3e97d01d1..bd64a408c0 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 @@ -88,7 +88,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme try { mCurrentPosition = position; mMogoModuleHandler.setEnable( mCardModulesAdapter.getProvider( position ).getModuleName() ); - mShadowFrame.setVisibility( View.VISIBLE ); + mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); } catch ( Exception e ) { e.printStackTrace(); } 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..a5294ac6d5 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 @@ -58,8 +58,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 +82,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 +114,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 77676a94c8..6529e59de1 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 = {"查询导航历史记录"}; - /** * 缩小地图 */ @@ -120,7 +121,6 @@ public class VoiceConstants { public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航/结束导航/取消导航/放弃导航/退出导航/关闭导航"}; - /** * 车头朝上 */ @@ -136,8 +136,10 @@ public class VoiceConstants { 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 ); @@ -155,5 +157,24 @@ public class VoiceConstants { sVoiceCmds.put( VoiceConstants.CMD_MAP_GO_COMPANY_UN_WAKEUP, VoiceConstants.CMD_MAP_ZOOM_IN_GO_COMPANY ); 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 ); + + // 唤醒 + 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..11b9584ea1 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,8 +126,9 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener { SearchServiceHolder.statusManager.setSearchUIShow( MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT, false ) - SearchServiceHolder.getNavi() - .clearCalculatePaths() + if (!isStartedNavi) { + SearchServiceHolder.getNavi().clearCalculatePaths() + } } companion object { 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/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-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/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(); } From c5a08d2f74292fc91b7c2d38a6269892cc1bcc03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 21:07:41 +0800 Subject: [PATCH 05/26] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86Marker?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B7=9F=E9=9A=8F=E5=8D=A1=E7=89=87=E7=9A=84?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=95=B4=E4=BD=93=E9=AB=98=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/MarkerShowEntity.java | 14 ++- .../com/mogo/module/main/MainActivity.java | 15 +++- .../module/service/MarkerServiceHandler.java | 87 +++++++++++++++++-- .../module/service/marker/MapMarkerView.java | 6 ++ .../module/service/network/RefreshModel.java | 2 +- .../src/main/res/layout/view_map_marker.xml | 1 + .../main/res/layout/view_map_marker_info.xml | 2 +- 7 files changed, 116 insertions(+), 11 deletions(-) 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..a1ade853ad 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 @@ -13,6 +13,8 @@ public class MarkerShowEntity { // false - 没选中,true - 选中 private boolean isChecked; + // false - 非高亮,true - 高亮 + private boolean isHighlighted; // icon 地址,例如:头像,唱片图片,探路缩略,可能为空展示默认图 private String iconUrl; // 要展示的文本 @@ -32,6 +34,14 @@ public class MarkerShowEntity { isChecked = checked; } + public boolean isHighlighted() { + return isHighlighted; + } + + public void setHighlighted(boolean highlighted) { + isHighlighted = highlighted; + } + public String getIconUrl() { return iconUrl; } @@ -78,6 +88,7 @@ public class MarkerShowEntity { if (o == null || getClass() != o.getClass()) return false; MarkerShowEntity that = (MarkerShowEntity) o; return isChecked == that.isChecked && + isHighlighted == that.isHighlighted && Objects.equals(iconUrl, that.iconUrl) && Objects.equals(textContent, that.textContent) && Objects.equals(markerType, that.markerType) && @@ -87,13 +98,14 @@ public class MarkerShowEntity { @Override public int hashCode() { - return Objects.hash(isChecked, iconUrl, textContent, markerType, bindObj, markerLocation); + return Objects.hash(isChecked, isHighlighted, 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-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 bd64a408c0..0b09f14374 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 @@ -72,6 +72,9 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private int mCurrentPosition = 0; + // 是否是点击Marker进行的页面切换,false-不是,true-是 + private boolean isClickMarker; + @Override protected int getLayoutId() { return R.layout.module_main_activity_main; @@ -87,8 +90,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme public void onPageSelected( int position ) { try { mCurrentPosition = position; - mMogoModuleHandler.setEnable( mCardModulesAdapter.getProvider( position ).getModuleName() ); - mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); + mMogoModuleHandler.setEnable(mCardModulesAdapter.getProvider(position).getModuleName()); + if (!isClickMarker) { + mMogoCardManager.invoke(position, mMogoModuleHandler.getCurrentModuleName()); + } } catch ( Exception e ) { e.printStackTrace(); } @@ -203,10 +208,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; } @@ -216,7 +223,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 ); - mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); + if (!isClickMarker) { + mMogoCardManager.invoke(position, mMogoModuleHandler.getCurrentModuleName()); + } } else { Logger.e( TAG, "Can't find type of %s's position", cardType ); } 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 048c0b044f..7e5865a6fc 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 @@ -20,6 +20,8 @@ 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.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,6 +29,7 @@ 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; /** @@ -49,6 +52,7 @@ public class MarkerServiceHandler { private static IMogoStatusManager mMogoStatusManager; private static IMogoImageloader mImageloader; private static IMogoSocketManager mMogoSocketManager; + private static IMogoCardManager mMogoCardManager; private static Context mContext; @@ -57,14 +61,16 @@ 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(); + 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 +86,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 +125,9 @@ public class MarkerServiceHandler { return mMogoStatusManager; } + public static IMogoCardManager getMogoCardManager() { + return mMogoCardManager; + } private static IMogoMarker lastMarker; @@ -134,7 +152,7 @@ public class MarkerServiceHandler { Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker lastMarkerShowEntity:" + lastMarkerShowEntity); lastMarkerShowEntity.setChecked(false); - drawMapMarker(lastMarkerShowEntity); + drawMapMarkerItem(lastMarkerShowEntity); lastMarker.remove(); } @@ -145,13 +163,38 @@ public class MarkerServiceHandler { markerShowEntity.setChecked(true); - lastMarker = drawMapMarker(markerShowEntity); + lastMarker = drawMapMarkerItem(markerShowEntity); 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); + drawMapMarkerItem(lastMarkerShowEntity); + } + lastMarker = null; + getMarkerManager().removeMarkers(); + + for (MarkerShowEntity markerShowEntity : markerShowEntities) { + if (markerShowEntity.getMarkerType().equals(typeTag)) { + markerShowEntity.setHighlighted(true); + } else { + markerShowEntity.setHighlighted(false); + } + drawMapMarkerItem(markerShowEntity); + } + } + } /** * 绘制Marker @@ -238,7 +281,7 @@ public class MarkerServiceHandler { * 绘制Marker */ 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); @@ -252,6 +295,40 @@ public class MarkerServiceHandler { IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); marker.setOnMarkerClickListener(mogoMarkerClickListener); marker.setObject(markerShowEntity); + + if (markerShowEntities == null) { + markerShowEntities = new ArrayList<>(); + } + markerShowEntities.add(markerShowEntity); + return marker; + } else { + Logger.e(TAG, "Location 必须进行初始化!!!!!"); + } + } catch (Exception e) { + e.printStackTrace(); + } + 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); + + IMogoMarker marker = getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); + marker.setOnMarkerClickListener(mogoMarkerClickListener); + marker.setObject(markerShowEntity); + return marker; } else { Logger.e(TAG, "Location 必须进行初始化!!!!!"); 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 cafb83fb27..1f4f1ea9d5 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 @@ -57,6 +57,12 @@ public class MapMarkerView extends MapMarkerBaseView { try { Object bindObj = markerShowEntity.getBindObj(); + if (markerShowEntity.isHighlighted()) { + ivBg.setAlpha(1f); + } else { + ivBg.setAlpha(0.7f); + } + switch (markerShowEntity.getMarkerType()) { case ServiceConst.CARD_TYPE_CARS_CHATTING: case ServiceConst.CARD_TYPE_USER_DATA: 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/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index 5525d89864..2030327f02 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 @@ -23,6 +23,7 @@ android:layout_height="@dimen/dp_85" android:layout_gravity="center" android:src="@drawable/bg_map_marker_blue" + android:alpha="0.8" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> 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 2d988677b1..1a9c5b9080 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 @@ -69,7 +69,6 @@ tools:text="诗一样的女子诗诗一样的女子诗诗一样的女子诗" /> - + \ No newline at end of file From ea71db507587fdb73fb5fef5b862fb3926ad25a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 21:20:49 +0800 Subject: [PATCH 06/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E9=B2=9C=E4=BA=8B=E5=84=BF=E7=9A=84Marker=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/MarkerCardResult.java | 10 ++ .../common/entity/MarkerNoveltyInfo.java | 110 ++++++++++++++++++ .../module/service/MarkerServiceHandler.java | 40 +++++-- .../service/marker/MapMarkerInfoView.java | 6 +- .../module/service/marker/MapMarkerView.java | 4 +- 5 files changed, 153 insertions(+), 17 deletions(-) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java 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/MarkerNoveltyInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java new file mode 100644 index 0000000000..ccf609d422 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerNoveltyInfo.java @@ -0,0 +1,110 @@ + +package com.mogo.module.common.entity; + +public class MarkerNoveltyInfo { + + private ContentData contentData; + private MarkerLocation location; + private String poiType; + private String type; + private MarkerUserInfo userInfo; + + 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-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 7e5865a6fc..ad9f7d9c6c 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,6 +14,7 @@ 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.MarkerResponse; import com.mogo.module.common.entity.MarkerShareMusic; @@ -207,13 +208,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(); @@ -227,8 +229,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(); @@ -242,8 +244,8 @@ public class MarkerServiceHandler { } } - if (exploreWay != null) { - for (MarkerExploreWay markerExploreWay : exploreWay) { + if (exploreWayList != null) { + for (MarkerExploreWay markerExploreWay : exploreWayList) { if (!markerExploreWay.getCanLive()) { MarkerLocation markerLocation = markerExploreWay.getLocation(); @@ -258,8 +260,8 @@ public class MarkerServiceHandler { } } - if (shareMusic != null) { - for (MarkerShareMusic markerShareMusic : shareMusic) { + if (shareMusicList != null) { + for (MarkerShareMusic markerShareMusic : shareMusicList) { MarkerLocation markerLocation = markerShareMusic.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); @@ -273,6 +275,20 @@ public class MarkerServiceHandler { } } + if (noveltyInfoList != null) { + 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); + } + } + } getMapUIController().changeZoom(12); } 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 d3951cd95d..f5ceb0b08a 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 @@ -95,9 +95,9 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivUserHead.setVisibility(View.GONE); 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); + 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); break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: 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 1f4f1ea9d5..d835e32a80 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 @@ -92,8 +92,8 @@ public class MapMarkerView extends MapMarkerBaseView { ivUserHead.setVisibility(View.GONE); ivIcon.setVisibility(View.VISIBLE); - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + 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); break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: From b4447c94a6816179ca18510889813ab0a5ede209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 21:21:21 +0800 Subject: [PATCH 07/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E9=B2=9C=E4=BA=8B=E5=84=BF=E7=9A=84Marker=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/layout/view_map_marker_info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1a9c5b9080..09a07d3575 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 @@ -55,7 +55,7 @@ android:id="@+id/tvMarkerContent" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/dp_20" + android:layout_marginLeft="@dimen/dp_10" android:ellipsize="end" android:gravity="center" android:maxLength="8" From 317465b5df59cfeb255eda92cd5ca2d989ec83be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 14 Jan 2020 21:29:45 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E9=B2=9C=E4=BA=8B=E5=84=BF=E7=9A=84Marker=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/layout/view_map_marker_info.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 09a07d3575..0f99b3afb7 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 @@ -20,7 +20,8 @@ Date: Tue, 14 Jan 2020 21:32:32 +0800 Subject: [PATCH 09/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E9=B2=9C=E4=BA=8B=E5=84=BF=E7=9A=84Marker=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo-module-service/src/main/res/layout/view_map_marker.xml | 2 +- .../src/main/res/layout/view_map_marker_info.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 2030327f02..83fe9aa7a3 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" /> 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 0f99b3afb7..069ca579a5 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,7 +13,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/ivReverseTriangle" app:layout_constraintStart_toStartOf="@+id/ivReverseTriangle" app:layout_constraintTop_toBottomOf="@+id/ivReverseTriangle" /> From 7020979f4b43fc4aba0daaf1aca9522aeb3d9be1 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 14 Jan 2020 21:58:58 +0800 Subject: [PATCH 10/26] opt --- .../java/com/mogo/commons/voice/AIAssist.java | 10 +++++ .../module/extensions/ExtensionsFragment.java | 20 ++++++++- .../module/extensions/anim/JSurfaceView.java | 4 +- .../com/mogo/module/main/MainActivity.java | 24 +++++----- .../com/mogo/module/map/MapPresenter.java | 5 ++- .../navi/ui/search/ChoosePathFragment.kt | 1 + .../FragmentStackTransactionListener.java | 7 ++- .../fragmentmanager/IMogoFragmentManager.java | 24 ++++++++++ .../impl}/fragmentmanager/FragmentStack.java | 44 ++++++++++++++----- .../fragmentmanager/MogoFragmentManager.java | 20 ++++++++- 10 files changed, 126 insertions(+), 33 deletions(-) rename {modules/mogo-module-main/src/main/java/com/mogo/module/main => services/mogo-service-api/src/main/java/com/mogo/service}/fragmentmanager/FragmentStackTransactionListener.java (51%) rename {modules/mogo-module-main/src/main/java/com/mogo/module/main => services/mogo-service/src/main/java/com/mogo/service/impl}/fragmentmanager/FragmentStack.java (70%) rename {modules/mogo-module-main/src/main/java/com/mogo/module/main => services/mogo-service/src/main/java/com/mogo/service/impl}/fragmentmanager/MogoFragmentManager.java (55%) 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/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..63442e36c2 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,12 @@ 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.fragmentmanager.IMogoFragmentManager; +import com.mogo.utils.UiThreadHandler; /** * @author congtaowang @@ -36,6 +40,8 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private View mMsgContainer; private TextView mMsgCounter; + private IMogoFragmentManager mMogoFragmentManager; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_extensions; @@ -47,8 +53,11 @@ 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() ); } ); - mVoiceMsg.setOnClickListener( view -> {} ); mTime = findViewById( R.id.module_ext_id_time ); mDate = findViewById( R.id.module_ext_id_date ); @@ -65,6 +74,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 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-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 bd64a408c0..987a75a206 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 @@ -24,14 +24,12 @@ 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.cardmanager.IMogoCardManager; -import com.mogo.service.connection.IMogoSocketManager; +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; @@ -54,6 +52,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private IMogoMapUIController mMogoMapUIController; private MogoModulesHandler mMogoModuleHandler; private IMogoCardManager mMogoCardManager; + private IMogoFragmentManager mMogoFragmentManager; private OrientedViewPager mCardsContainer; private CardModulesAdapter mCardModulesAdapter; @@ -95,15 +94,13 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } } ); - 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 ); @@ -226,7 +223,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-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 a5294ac6d5..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"; 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 11b9584ea1..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 @@ -131,6 +131,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener { } } + companion object { fun newInstance(searchPoi: MogoLatLng): Fragment { var bundle = Bundle() 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/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 ) { From d2e94747c283b72f37e98ffa0ca8a33301eeb7a1 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 15 Jan 2020 09:57:47 +0800 Subject: [PATCH 11/26] fix conflict --- .../tanlu/fragment/TanluCardViewFragment.java | 502 +++++++++--------- 1 file changed, 261 insertions(+), 241 deletions(-) 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..c4d29fa385 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 @@ -63,6 +63,8 @@ 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.module.IMogoRegisterCenter; +import com.mogo.service.voice.IMogoVoiceListener; +import com.mogo.service.voice.IMogoVoiceManager; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; @@ -84,7 +86,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 +105,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView private IMogoSocketManager mMogoSocketManager; private IMogoLocationClient mLocationClient; private IMogoCardManager iMogoCardManager; + private IMogoVoiceManager mMogoVoiceManager; //声音控制文字 private String voiceGetInfoMationTts; @@ -125,11 +128,11 @@ 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 TanluModelData mTanluModelData; - private List< MogoLatLng > passedByPoints; + private List passedByPoints; private IMogoRegisterCenter mMogoRegisterCenter; @@ -141,70 +144,74 @@ 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()); //切换卡片操作 - 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 ); + 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()); } @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 +219,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,7 +231,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView } @Override - public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { + public void onNaviInfoUpdate(MogoNaviInfo naviinfo) { } @@ -248,47 +255,60 @@ 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 ) { + /** + * 注册listener监听 + */ + private void initListener() { + //某某路堵不堵,某某地点堵不堵,附近堵不堵,播放路况 + //上报路况,上报拥堵 + mMogoVoiceManager.registerIntentListener("", new IMogoVoiceListener() { + @Override + public void onIntentReceived(String command, Intent intent) { + + } + }); + } + + 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; @@ -323,9 +343,9 @@ 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) { @@ -342,47 +362,47 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView // 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 +412,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 +421,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 +466,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(); } @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 +514,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卡片 有效 ---->"); + 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 +558,7 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView */ @Override public void onDisable() { - Logger.d( TAG, "tanlu卡片 无效 ----->" ); + Logger.d(TAG, "tanlu卡片 无效 ----->"); } @Override @@ -552,32 +572,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 +606,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 +639,35 @@ 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 ------>"); + mMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_search_poi_location); + 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 ); + mMogoMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(getContext()); + mMarkerManager = mMogoMapService.getMarkerManager(getContext()); + IMogoMarker marker = mMarkerManager.addMarker(TanluConstants.MODEL_NAME, options); } @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,107 +676,107 @@ 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 ) { + public void getVoiceControlRoadData(String keywords) { Double lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude(); Double lon = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude(); String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode(); 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() { + 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); } 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); } } @@ -768,70 +788,70 @@ public class TanluCardViewFragment extends MvpFragment< IView, Presenter< IView } @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 trackVoiceSearch( int type ) { + private void trackVoiceSearch(int type) { } From 99a3e39cb6614a847ccb7a2d7bf4684e62560e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 10:23:43 +0800 Subject: [PATCH 12/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E8=BD=A6=E8=BE=86=E7=9A=84=E6=B0=94=E6=B3=A1=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 39 ++++++++----------- .../service/marker/MapMarkerInfoView.java | 8 ++-- .../module/service/marker/MapMarkerView.java | 15 ++----- .../src/main/res/layout/view_map_marker.xml | 1 - .../main/res/layout/view_map_marker_info.xml | 7 ++-- 5 files changed, 28 insertions(+), 42 deletions(-) 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 ad9f7d9c6c..de0f503015 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 @@ -153,6 +153,8 @@ public class MarkerServiceHandler { Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker lastMarkerShowEntity:" + lastMarkerShowEntity); lastMarkerShowEntity.setChecked(false); + lastMarkerShowEntity.setHighlighted(false); + drawMapMarkerItem(lastMarkerShowEntity); lastMarker.remove(); @@ -163,6 +165,7 @@ public class MarkerServiceHandler { Logger.e(TAG, "onMarkerClicked 点击了大而全中的Marker markerShowEntity:" + markerShowEntity); markerShowEntity.setChecked(true); + markerShowEntity.setHighlighted(true); lastMarker = drawMapMarkerItem(markerShowEntity); @@ -181,6 +184,7 @@ public class MarkerServiceHandler { // 将上次选中 Marker 设置为未选中状态 MarkerShowEntity lastMarkerShowEntity = (MarkerShowEntity) lastMarker.getObject(); lastMarkerShowEntity.setChecked(false); + lastMarkerShowEntity.setHighlighted(false); drawMapMarkerItem(lastMarkerShowEntity); } lastMarker = null; @@ -203,6 +207,11 @@ 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) { @@ -307,15 +316,15 @@ 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 = new ArrayList<>(); + if (markerShowEntities != null) { + markerShowEntities.add(markerShowEntity); } - markerShowEntities.add(markerShowEntity); return marker; } else { Logger.e(TAG, "Location 必须进行初始化!!!!!"); @@ -340,6 +349,11 @@ public class MarkerServiceHandler { .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); @@ -354,23 +368,4 @@ public class MarkerServiceHandler { } 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/marker/MapMarkerInfoView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java index f5ceb0b08a..7c9fceb9f9 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 @@ -67,7 +67,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { case ServiceConst.CARD_TYPE_CARS_CHATTING: case ServiceConst.CARD_TYPE_USER_DATA: ivUserHead.setVisibility(View.VISIBLE); - ivIcon.setVisibility(View.GONE); + ivIcon.setVisibility(View.INVISIBLE); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { @@ -83,7 +83,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); ivUserHead.setImageResource(R.drawable.icon_map_marker_road_block_up); @@ -92,7 +92,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; case ServiceConst.CARD_TYPE_NOVELTY: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); @@ -101,7 +101,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); if (bindObj instanceof MarkerShareMusic) { 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 d835e32a80..7030794fac 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 @@ -56,18 +56,11 @@ public class MapMarkerView extends MapMarkerBaseView { public void updateView(MarkerShowEntity markerShowEntity) { try { Object bindObj = markerShowEntity.getBindObj(); - - if (markerShowEntity.isHighlighted()) { - ivBg.setAlpha(1f); - } else { - ivBg.setAlpha(0.7f); - } - switch (markerShowEntity.getMarkerType()) { case ServiceConst.CARD_TYPE_CARS_CHATTING: case ServiceConst.CARD_TYPE_USER_DATA: ivUserHead.setVisibility(View.VISIBLE); - ivIcon.setVisibility(View.GONE); + ivIcon.setVisibility(View.INVISIBLE); if (bindObj instanceof MarkerOnlineCar) { if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { @@ -81,7 +74,7 @@ public class MapMarkerView extends MapMarkerBaseView { ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); ivUserHead.setImageResource(R.drawable.icon_map_marker_road_block_up); @@ -89,7 +82,7 @@ public class MapMarkerView extends MapMarkerBaseView { ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; case ServiceConst.CARD_TYPE_NOVELTY: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); @@ -97,7 +90,7 @@ public class MapMarkerView extends MapMarkerBaseView { ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - ivUserHead.setVisibility(View.GONE); + ivUserHead.setVisibility(View.INVISIBLE); ivIcon.setVisibility(View.VISIBLE); if (bindObj instanceof MarkerShareMusic) { 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 83fe9aa7a3..a8c58a240d 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 @@ -23,7 +23,6 @@ android:layout_height="@dimen/dp_85" android:layout_gravity="center" android:src="@drawable/bg_map_marker_blue" - android:alpha="0.8" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> 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 069ca579a5..7a7c5017d4 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 @@ -21,7 +21,6 @@ From 9d7c31557b07435dcf256bcd3fe2d56d23e59d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 10:50:42 +0800 Subject: [PATCH 13/26] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86String?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E4=B8=BAnull=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E5=AF=B9=E5=A4=96=E7=9A=84=E6=95=B0=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E8=BF=94=E5=9B=9E""=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/connection/socket/SocketManager.java | 1 + .../com/mogo/module/common/entity/MarkerCarInfo.java | 8 ++++++++ .../com/mogo/module/common/entity/MarkerDynamicData.java | 5 +++++ .../com/mogo/module/common/entity/MarkerExploreWay.java | 5 +++++ .../mogo/module/common/entity/MarkerExploreWayItem.java | 8 ++++++++ .../com/mogo/module/common/entity/MarkerHobbyDatum.java | 5 +++++ .../com/mogo/module/common/entity/MarkerLocation.java | 5 +++++ .../com/mogo/module/common/entity/MarkerShareMusic.java | 8 ++++++++ .../com/mogo/module/common/entity/MarkerShowEntity.java | 5 +++++ .../com/mogo/module/common/entity/MarkerUserInfo.java | 9 +++++++++ .../com/mogo/module/main/cards/MogoModulesManager.java | 1 + 11 files changed, 60 insertions(+) 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/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/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/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 a1ade853ad..60b7a9437c 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; /** @@ -51,6 +53,9 @@ public class MarkerShowEntity { } public String getTextContent() { + if (TextUtils.isEmpty(textContent)) { + return "未知"; + } return textContent; } 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-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 02d40b7a4c..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 @@ -358,6 +358,7 @@ public class MogoModulesManager implements MogoModulesHandler, try { getApplicationContext().unregisterReceiver( mReceiver ); } catch ( Exception e ) { + e.printStackTrace(); } } mReceiver = null; From 81816129986cf533ad6fcc9cab388ca8a7317c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 10:51:31 +0800 Subject: [PATCH 14/26] =?UTF-8?q?=E5=85=B3=E9=97=AD=E4=BA=86=E7=BC=A9?= =?UTF-8?q?=E6=94=BE=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/module/service/MarkerServiceHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 de0f503015..3289042e0e 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 @@ -299,11 +299,11 @@ public class MarkerServiceHandler { } } - getMapUIController().changeZoom(12); +// getMapUIController().changeZoom(12); } /** - * 绘制Marker + * 绘制Marker,这里绘制的会使用markerShowEntities队列进行维护 */ public static IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { Logger.e(TAG, "绘制Marker====drawMapMarker:" + markerShowEntity); @@ -336,7 +336,7 @@ public class MarkerServiceHandler { } /** - * 绘制Marker + * 绘制Marker,这里绘制的不会添加到队列中 */ public static IMogoMarker drawMapMarkerItem(MarkerShowEntity markerShowEntity) { Logger.e(TAG, "绘制Marker====drawMapMarkerItem:" + markerShowEntity); From 5011874238e120359e1cea93b7ffae8a004b68fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 11:08:10 +0800 Subject: [PATCH 15/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E8=BD=A6=E8=BE=86=E5=9B=A0=E4=B8=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=8D=E5=85=A8=E5=AF=BC=E8=87=B4=E7=9A=84Marker=E7=BB=98?= =?UTF-8?q?=E5=88=B6bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/marker/MapMarkerBaseView.java | 10 +++++++--- .../module/service/marker/MapMarkerView.java | 4 +--- .../main/res/drawable-xhdpi/icon_default.png | Bin 13510 -> 0 bytes .../src/main/res/layout/view_map_marker.xml | 6 +++--- .../main/res/layout/view_map_marker_info.xml | 6 +++--- 5 files changed, 14 insertions(+), 12 deletions(-) delete mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_default.png 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 c27e42f6ca..c994b045aa 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; @@ -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.default_image); } + } } 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 7030794fac..a800faabe7 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 @@ -44,8 +44,6 @@ 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); ivIcon = findViewById(R.id.ivIcon); @@ -77,7 +75,7 @@ public class MapMarkerView extends MapMarkerBaseView { 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); ivBg.setImageResource(R.drawable.bg_map_marker_blue); ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); break; 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 d24606ab1d4539e00e62b678bbf28792fa9506ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13510 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 As{jB1 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 a8c58a240d..1b69bcecef 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 @@ -36,9 +36,9 @@ 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/default_image" + app:miv_overlayImageId="@drawable/default_image" + app:miv_placeHolder="@drawable/default_image" app:miv_shape="circle" /> Date: Wed, 15 Jan 2020 11:25:10 +0800 Subject: [PATCH 16/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9A=84=E9=BB=98=E8=AE=A4=E5=A4=B4=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drawable-xhdpi/icon_default_user_head.png | Bin 0 -> 8569 bytes .../module/service/MarkerServiceHandler.java | 2 +- .../module/service/marker/MapMarkerBaseView.java | 2 +- .../src/main/res/layout/view_map_marker.xml | 6 +++--- .../src/main/res/layout/view_map_marker_info.xml | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_default_user_head.png 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 0000000000000000000000000000000000000000..d5df99fa78a965e590311bc352567c4f5d3e6ced GIT binary patch literal 8569 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 literal 0 HcmV?d00001 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 3289042e0e..77df271b52 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 @@ -299,7 +299,7 @@ public class MarkerServiceHandler { } } -// getMapUIController().changeZoom(12); + getMapUIController().changeZoom(8); } /** 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 c994b045aa..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 @@ -80,7 +80,7 @@ public abstract class MapMarkerBaseView extends ConstraintLayout { } }); } else { - ivUserHead.setBackgroundResource(R.drawable.default_image); + ivUserHead.setBackgroundResource(R.drawable.icon_default_user_head); } } 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 1b69bcecef..d883a5d2af 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 @@ -36,9 +36,9 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:miv_failureHolder="@drawable/default_image" - app:miv_overlayImageId="@drawable/default_image" - app:miv_placeHolder="@drawable/default_image" + 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" /> Date: Wed, 15 Jan 2020 11:27:21 +0800 Subject: [PATCH 17/26] =?UTF-8?q?=E5=85=B3=E9=97=AD=E4=BA=86Marker?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mogo/module/service/MarkerServiceHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 77df271b52..f30aaf5686 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 @@ -299,7 +299,7 @@ public class MarkerServiceHandler { } } - getMapUIController().changeZoom(8); +// getMapUIController().changeZoom(8); } /** From ea1c66844bc104683c212de4f94583a4ddf5c8ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 11:34:16 +0800 Subject: [PATCH 18/26] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=BA=86=E6=B0=94?= =?UTF-8?q?=E6=B3=A1=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable-xhdpi/bg_map_marker_blue.png | Bin 2014 -> 4488 bytes .../bg_map_marker_dark_blue.png | Bin 0 -> 4242 bytes .../drawable-xhdpi/bg_map_marker_green.png | Bin 2365 -> 6766 bytes .../drawable-xhdpi/bg_map_marker_oragne.png | Bin 0 -> 6664 bytes .../drawable-xhdpi/bg_map_marker_purple.png | Bin 2064 -> 4515 bytes .../icon_map_marker_ gasoline.png | Bin 0 -> 1156 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark_blue.png create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_oragne.png create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_ gasoline.png 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 d1e30fb103a2490471d2a6ca36a816352429eb21..29a7b70972cc6b9f856b2f47f2de3d0b7b949fea 100644 GIT binary patch literal 4488 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 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 0000000000000000000000000000000000000000..50e6c6371385fab8efc7f494962c0124e56efb5e GIT binary patch literal 4242 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 QLjV8(07*qoM6N<$f~Wc|N&o-= literal 2365 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 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 0000000000000000000000000000000000000000..40ff4b36b2994a855d0121fbdd5ac2b7ed357de3 GIT binary patch literal 6664 zcmV+j8u#UiP)!00001b5ch_0Itp) z=>Py3!bwCyRCodHU3;u%Rdqk-d{>0>7&2(n2Gbf~z+ysQsr*qPt)U@9ZInu(nAS+5 zZ7ML5_^7rurAbq4L_)FBG&RxiN1=dB8!b~4QdDf3*7RkfRX~c3Sd9=xuypX=@AUUu zYyI}wXP@)E?)~P@ZPGn_XRW>0`?uHG=iJ8(b+t!E+qQM}z;C{+s+#kwX?p-^om18I z0q`%Xn(CCQ#iy$A;b@<&>gw5QiceENS+(sWSbP*b==2NKC4czEx~^MOJl*PzpXF%gU|J(yEsuP zyB4y2;N9m|TU%EH7kt|D3`_wy6R&Ni*TQjaC4Q-@+dHet3+}8hx#{6;dfS%St^nM& zcTcKM{L|}j`@RjJzG7KC)tk%e4-hCfjE+&*~Y ziPiJpy$0v#+i)wNo$ltDh>anlwZ)aIVM#e;nTqT!)L*XJ`u){OCx5v9*&F}IE!KZc zvDfXoJ@O750bB1wnP;|!EDNr|wMIQ2kxV*iCX3=q3*pQ!4|JL-e) zyK^94!@}ADZjZeEf@(Vb05ZQg3h+XZEZ!8b1dyY}yuKuchQN-r1}$lTbOr-CgM=H4 z=c*Ad#byq}QGXf=*VhMcUh4yKEYdLc5-T_kHmc{I{(Thqc68~4CS}K}duMg@LOGCH zX@iQqOaFzK+q;DTH&-X^`yCt`o27g^^R)on9=YMAcqhFJ30$Zy9ZN>C)WIl8MVmge z$vQCcIx|YAh5o>Q+%2hN!0lhZ^y(u{DMzWlAf2??-3IvsSR1M%2cB=MUVYmQSdXpr zc*|T@2DttFjVDx(J#`11Up10pzeS6Rb>5PW4S}r!OC1$V%2Dbsl9%}w>6PJnbHw_K z>Z~)~P`~`f=X-($lV*XuCq@A^!ELA0tMEa-fJ&5n8*4_%_dj&TH4W`9sdXDdQ~wVHlX^a+i(e)I#fH*Wp-bui~xF zQFZ`tAY0>wgKARZ9K}RcoI%9m{7r&$=Lw|zLykS|cf6d_f+L&Lzb$2Jxtu)w^=xvv z%IX8Z?!l}T)dJc6x+Xi%ezqbO}684=!qw_F*p>lt~FP{mAW2Q zqHyQkgvql0hDSsZF2$OWpXJnD1ie5h>r3$_c<}wg?MprQD4z0CsC8$EAb2;{y(=^oD#Z>GBTfqPs?^pOWhwbS8+j$X}iey7`yt*WSMH6;7dY z+a7OUL>xW(uUOnyLQvdMJv*C}6$;H62&N8+mL3#b+L!*z3>N7xko%G4$C$hB89ZIJ zC;nJ{`K^zaVe|Rihn#)+d-S=x@W9#U4=j{y4=z#$1LQg$d}deQ2%ev&VU#@aNHp|) zhpFhkMH$D=^q{$~F92zHf}r*XdWnXu72#e?*ZqZ^`Gp1T zM)djiz@fJYaK@AJqs=271(13KE&fo4{49NlP2VWl>DGnS)4*uXu()IL_OE{90{rCR zpAit>xRDwY_cYu_yvzGDCfnB@uJkSXv!V7_p8d69#J+sh2#fUX5ZS6G8$VIM=1)ey z3pcxiH^27*0~b5&rH*xkzngm3dUujnM~Ii4>5?aPK72Ap+ZW>qefft5-?X<) z%q{K5JWqY~QFP&%`T8hNYi_W-h$mfU?9{%9F?b8XU7@u?bv@H8e;gK1RQq3YPWj`f z;SurFSFh>76;h-lpJ}X-=6up+9n^_o#|`*65(boN(lHa+Mx5k#eC`iIWRKf#?4j7@ zGH!1n^L!IOLqDq-585*;VCO!%YY$-i>2I}#pZvy|XF!lg02MAuAL?9E+fC?+_H1XJ zp>#suPCPF8CF3g>ixoNUh*zyk#xLs!c8($I^3emh`sm-h4*8ue;efJmj%5KDbbuL~ z3%?Lqj)ZW*OGb)O0&1I++nSQ8y1M7vb+mVP7q73M3}-P5>No6wVQ$_BxaIFHFey)Z zaLZxY)}kiysQ}penmT~4$cIY5X(N14)XtE0oRZ#KP88OfJVMldc<{jrY{w1b&l7Wl} z1}VP&6^*ZpA?V^zSALA=b||Ne=bF|~_yF&z)=bVcq0+TtBh&kpWy??a47l zB%IL{I7`65K{BK{uLRkjj;XWCAhX05!e>UYs7}8DW z&g!-$#4s!}x>EgZd$ng6xU~1a;evK^`fpkkWo!bc9Ln!5Aq~h`o@+?g!FD^X$!AVw zt0Q7ne~aw%Smc$9@+;-#d?)qS8_kc_SKRSA@8He$RdilC&h!uo}=f?xXi!HOFqJ7kF2%+ zz|;UnQWtw-o@`18HCsZCg(pKk25mS<$39rJbyDX$>cwPcv&pwCOgm5 z!R+GAKXcvRy!bn+|6*d(pg{hR<|0ql6ZE1LSab+tSsN_BY>nk58+LZI@Z?! z0Dtr(XLj}q%QaQV>^Oo7>;zz8Z?A1c!Cu)wi8pz!aU{P!E$5|wHxR7l%Dv z*X@A~{GPx$_7Fh?D;(!j0$>oZU!jA`2azMt;#VxS#)Q4#+@JIIaG?SQ3)Cn98g?)d zC*V2a9e~{Dva*pAX&B;e5XdIU0dgBK_X zDTjANZf~m!ANd3Dz^Bxg4^j?4lALlreh1N?J7gBhiTWwhi_l1jxpr)jEt8ix_9lq(BeadHIhKM4308@UN<-9aQ3NRm^|a#Ll^VLB7dq?6u)}= zERKljv*?5XSmkyA^#iin?hNb8mY4~tpq@zA;e^`3?I2HG3iss~GL|iTrEClTmXX$c zLNEA)g%Mmj2YtEO zso!m=z*mPeH@kzPW33E@fTh=!FZBJTx{p=;ZN(0*`0p)PI{u|9l1N{wl8>S--_VnO zzGfamu7rDQrfe&zuu*j_j_8;Elp84rfwnIk2&Bd$f6@b$?Yio(>nHJ*T>B^hzBq-+ z!Apx`m@Jczq>HJvX3m>j`^YqXcc#d~ zb`)!|qh4=!=Gp0yHF#l-X&*73uv~NM+QPOd&DX#=qt7ESv>SI?^Ys9Q0WLyrPm{LB&G z^ZD?rzX^JVlu0=T9meV?iYf>CMZiV!=CBB7W(=^A-Ww7`6jm z&>&xAqZrJ`>h8iPa1&lxd^Fut^)(-VaRY|i%zr@0aSLi#22Tg(B%@>c`C87?m-)k) zChA|F!>^t1%sS!+r5=Z<&jJ`jZbU!wWo&-(oCSiY`J*03=vyrCr2J44g z{vl#(e-RO>do^1vxM;Wj5QTi|S zOL=Ku#xDb^e%L)cdGjaEqka0_G^Bc`|CS9BMTgl33WR^gZ@S`lP?vgP1uyYeEsqq=5UmK#BtgC)_N`F@)0o=5W z{iPQJ%tPY=jU(l~i6I&jBUT)XRjm! z-9qZDo)8nhPfMqian5E_4xEc8<&drXuj&^~d_9MgiiWP`CsSRV`GA)Q_R17zE$~ndC+7OdSg<=CJDCgxc{m$IN zYK^+i`yIgfz@HTWt;p9lfOk&pkmuqxyT8@zZ=32C+G?aDf(w(=_uYe7|6vIr3G0NQ zo~*ACaDgsLd-0O<729~yoDcilXU@x>d6-WE!ViaN&L_F_sGIRgUfA3Anxj$uRqJnn z-Q@KBy?>RU2XKAmJzL1-=9vXr-b~!{@glkeEg=X=?St+}H0MK}cbxI;Cc36BKJ+hY zJkCtf{QRU%?o08x8RSXr!^Fu)0Vd1xW!+rce*M4>7$QI#J%G8|?BD-k#Q9ntyh~_) zflQu-S`p;EYNI(X`GB(U41mOQE%V(0T0EqnV-G3m7xB#w7ulE8!DXn}m;f9rEXsWc zEjPHS>aQ7gtUntAfUyJ5;ky&>qz)6{C=<~<52C_E35ab{(442tO<*U+M0Zc&X-)bX(DvvulZ^buUG9BNLkvK)W$1#gLHH?Q(kpqc;PW!#379moBM~ zBA}LoDmE#{PUtEj#qwtkRYE%QVewo~9m986 zo0GB|DRvqYBUp4hb}aR0beNydP?>RN3pP^cJIX-tZ1G6>$G6(4>J~M{@`Bum5&pf0 z>r0X5GXbuD?UVdxWNr~iD!NCRAi*GIf_PI9HQo{k9n+(jIx)nP;*;CBFLv>4ea6b; z18F$s8aKu_Q&e?`nq9;dFBxghOFp1hcXdmBtzo6AdUPhh)M_T@{Wi#FEolO1rcR9~ zC|rv~^Q3ZKa_N%hyyVuAEKVI6yyTV#V_9JtxDlVJn65E42`+488~S+;IX^3&=>!hW zsH0loXN|Lcv6lkCO6n`?9RtL zZodCj@`b1GG?V(r>$iO7v3U{ab}$X;0N?(7vv&r7Qx~XWNQs1hBP8 zQRi{o;UXKKdgy9x+8Bz<>QC#9~{l$Sv`H#0=zF4a8&-xJ+ju zz*O3}?(godtL8oQZ-dl6OoV(SM4=Ty21DSH8lTZDSucc+GMk)F_Jy1}+0X;C+W>}D zj-eP~GPC8`u&vwXJ;Y=gL*L+KG@-L~+fV;7en5IHo;>3g1VZm-)DSQIRpn)rMgFW` zi9+N@l1*(R<->fJ3S~eUlVZRY79X4(`uppAVexgT4wjqd`ky<5Aor$@Q)h`%k-UcZ z?aJjxbdf(plgiA24@-1!(6KKhT(8rYT}LG&wQ+BA{iTOAS%$6za9!Uxom8j)3LM{W ziCe+`N;CG>FxUtd9yZ&t&tv5LAWm$k^)Yx-;}KufKvXWF-&^CxgxqO$KWirj%K$4K zkEhv^w7u=%3%A;D-G>&r%u`p_(j9rZ74LH9o8O`0Nyo>0e*>F-xGq=Oj4#yn z{gZnCFV=^S935Afy*jhB*(NSAkf%@GhusCpJ{G}I$`jfGpxA*Dj?#W0haYyEzQ1do zP2bju-PY5NLtl2!(zpC@w@#Wfwgs-mut?jy2xRYMxl`H8IF)WH8Ae*8z4-0Q`#A{w zxa9``59AHOeet%zWpp;hj)sA}`OW)qVqK<}etXu!E7lNT_7?(W2Mr1g+gbh=*_VYW z7x^pY#r*!s#?HW{za0ZiCjuEL^YKyF;}$=4-Gal70k2{rjNgW@7twxLHRC;Y(W z+j(0kT&JljPYXL`4CLp(ei-NPL6xc?eR#RMem?6=TzF<9Ir(6o;z>Emc;!mzzpr1f z9bDyP$*uE}KyIf8^&lGaFB$3BSk$qle9T9_R(7m992)^}e{ijxtGMHpNxB1SARm3= zFp@tw>y|D%YEigF9bd{ze`P$obLtl0o_S2bW&C3XFr9ZG`F)928QSkiPruXeY>SR=nqBW)*2!^P0A}DEWF;Y}93Cox z6UsCaPs*`S4wD8CwC{WAt{w}XoL^O2zP4+;f&AUadfy}DTmM} z?S_MU_Hpf8Wur_rKW?*fP734z6oF&`zBK+(%db0cGia9rHZ{ zFpF`JTYwzz$%6{Zj_r4}ow=u0dj?#lzo!6ZLI(182y%6B@ZB#UsCQ@T<|l-Kds@Ax zz-5Yi4q(HL$Ay7hz9&;U9QX?E$Yc+K%S`tqz)Z|K`PZ#5m}wX#2eo%KYe4*g3FZmYzG^jgp z*yG^-p8%Liws*h$gv~EL^LzNc+&8j=@&8Tu$i~Y~{@wb@&#(0VnWwMa9{&sXtQ!(2 SH~V=20000!00001b5ch_0Itp) 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 B-Ua{w literal 2064 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 WKJJxMg4oOe0000mMg literal 0 HcmV?d00001 From 6b840de0a858e963b31cad9832237372e3a29428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 11:36:00 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=BA=86=E6=B0=94?= =?UTF-8?q?=E6=B3=A1=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...r_ gasoline.png => icon_map_marker_gasoline.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/mogo-module-service/src/main/res/drawable-xhdpi/{icon_map_marker_ gasoline.png => icon_map_marker_gasoline.png} (100%) 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 similarity index 100% rename from modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_ gasoline.png rename to modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_gasoline.png From bbf538d84509a9ecde5929b49074e32e3689ad22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 14:00:33 +0800 Subject: [PATCH 20/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86Marker?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E4=BA=AE=E5=B1=95=E7=A4=BA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=95=88=E7=8E=87=E6=9B=B4=E9=AB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/map/marker/IMogoMarkerManager.java | 7 ++ .../mogo/map/marker/MogoMarkersHandler.java | 5 ++ .../java/com/mogo/map/MogoMarkerManager.java | 6 ++ .../common/entity/MarkerShowEntity.java | 6 +- .../module/service/MarkerServiceHandler.java | 88 +++++-------------- 5 files changed, 43 insertions(+), 69 deletions(-) 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/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..cbd935c58b 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; - } } From 48033f48ce89b6680de0f01671d2fa322848338d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 15 Jan 2020 14:26:25 +0800 Subject: [PATCH 21/26] add voice control --- .../module/tanlu/constant/TanluConstants.java | 4 + .../tanlu/fragment/TanluCardViewFragment.java | 283 +++++++++++++++--- .../mogo/module/tanlu/model/Information.java | 20 +- .../res/drawable-xhdpi/tanlu_block_up.png | Bin 0 -> 16100 bytes .../res/drawable-xhdpi/tanlu_oil_price.png | Bin 0 -> 15555 bytes .../res/drawable-xhdpi/tanlu_road_closure.png | Bin 0 -> 12678 bytes .../drawable-xhdpi/tanlu_traffic_check.png | Bin 0 -> 17661 bytes 7 files changed, 253 insertions(+), 54 deletions(-) create mode 100644 modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_block_up.png create mode 100644 modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_oil_price.png create mode 100644 modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_road_closure.png create mode 100644 modules/mogo-module-tanlu/src/main/res/drawable-xhdpi/tanlu_traffic_check.png 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 0000000000000000000000000000000000000000..aa80dfe42f220658ce216195524047f0ac30c764 GIT binary patch literal 16100 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 R6bb+U002ovPDHLkV1gq;`ZfRn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7726fc04d4240828efa26766d93edde2aae15fbd GIT binary patch literal 12678 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 ANB{r; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..18e28e06f7ce28a5581c2fcde37954baa840e6c2 GIT binary patch literal 17661 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 literal 0 HcmV?d00001 From 2a297ae83f7be78e31e5426051b2d1476ca06e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 14:44:56 +0800 Subject: [PATCH 22/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86Marker?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=86=85=E5=AE=B9=E8=BF=87=E5=A4=9A=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/service/marker/MapMarkerInfoView.java | 8 +++++++- .../src/main/res/layout/view_map_marker_info.xml | 3 +-- 2 files changed, 8 insertions(+), 3 deletions(-) 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..36dc7d3939 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 @@ -125,7 +125,13 @@ public class MapMarkerInfoView extends MapMarkerBaseView { 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/res/layout/view_map_marker_info.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml index 5a0ed1a03f..8a33092f5c 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 @@ -58,7 +58,6 @@ android:layout_marginLeft="@dimen/dp_10" android:ellipsize="end" android:gravity="center" - android:maxLength="8" android:singleLine="true" android:textColor="#ffffff" android:textSize="@dimen/sp_32" @@ -66,7 +65,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/ivUserHead" app:layout_constraintTop_toTopOf="@+id/ivUserHead" - tools:text="诗一样的女子诗诗一样的女子诗诗一样的女子诗" /> + tools:text="诗一样的女子" /> Date: Wed, 15 Jan 2020 15:19:19 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E9=B2=9C=E4=BA=8B=E5=84=BF=E7=9A=84Marker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/MarkerNoveltyInfo.java | 15 +++-- .../common/entity/MarkerPoiTypeEnum.java | 21 +++++++ .../module/service/MarkerServiceHandler.java | 2 +- .../service/marker/MapMarkerInfoView.java | 53 ++++++++++++++---- .../module/service/marker/MapMarkerView.java | 41 +++++++++++--- .../icon_map_marker_gasoline.png | Bin 1156 -> 0 bytes ...l => bg_shape_reverse_triangle_orange.xml} | 0 .../src/main/res/layout/view_map_marker.xml | 2 +- .../main/res/layout/view_map_marker_info.xml | 2 +- 9 files changed, 110 insertions(+), 26 deletions(-) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java delete mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_gasoline.png rename modules/mogo-module-service/src/main/res/drawable/{bg_shape_reverse_orange_green.xml => bg_shape_reverse_triangle_orange.xml} (100%) 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-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 cbd935c58b..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 @@ -294,7 +294,7 @@ public class MarkerServiceHandler { } } -// getMapUIController().changeZoom(12); + getMapUIController().changeZoom(12); } /** 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 36dc7d3939..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,9 +153,6 @@ 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())) { 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 bac7ee2e40f8e79158245f5d12ef81c677bc4184..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmV-~1bh35P)Px(K1oDDRA>e5T0L(RF%b1`f*=t{L<$lO0tpF;hK7cYJt;VQw z*3}7+uEBPut9=K%-&vN;cCc%hYz1)H@YKTqfIG*l;pNKg6*?US=<*d~-aj`chr20s zq5HhC%1Jpl1zk|;t4(cZ=jKirbLL`{5Y$vku3RDP6w%(B#C{MX| zjmlX2Z*OZ!EG7tdfj>#eRy> zY_ueP;Nsp(h*pquT4~XPvDo8c^C04l%Uxvw`T_VGILE%KEQCg?FqV?aI!h8r4MtE@ zW6M@^K&8Nh@ctYNg5Rl&Jng-*snsfc^n?*$xkZp0fN%5(zM(*5GRZ z489(Cflwb^wzZuSRV!!q+&RzM4nH~KqYnRHHWFZ484_Wg!2RW|YW*2*%wtl3s(oWJ z${@~d>FgzAKG-KMK0(zT?lX+#NlN9AabD#aa$Y}af#=hf*n=KE9tEW91YRSw#aj`a z^y4DZmhLCm7^@_}F|xRueWVKS=IX?VZE`DI3~Ae7WfC|eC2ml-Qur|3BE(W;(md|hz zjCi5|mmgoQ$cqMFJBNQx%Yj9}(=)Hb>I>CS#a*FS49?4ERt_o@HRmZk{VT#1rsGxg=hrIE(H2wO9R2l-7d!@|?j~Gq`A2pSi7}xHAxvfIm*cA?SJicB( zfEkx9u7o(M!mPd~No{qrh=cBz?tq7^u%hrH^oDZK=r)&FJq2$lTb;6P*z(;0%SmZ7 zZ4Z^|8%N4K1R6Xk+bI3Iyf&eYWK}M@UbhCgbyeMuEjysqu5Cj7watgi#|Dg_HTJ{( zlKJ(;S;ecUUm?HZj%CFvptb~6^H}>D^q=6DhgX|iY?lCw-b3HX_8p7Qb;Z}^8;|*} zi$${IKY2R;n`i7Tjm55`b4&3@tiBu1?Z?>C!OzZp2bk7N8AusO8AusO8Ausu&%j?C WKJJxMg4oOe0000mMg 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 8a33092f5c..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" /> Date: Wed, 15 Jan 2020 15:23:47 +0800 Subject: [PATCH 24/26] add track --- .../module/apps/AppNavigatorFragment.java | 27 +++++- .../com/mogo/module/apps/AppsPresenter.java | 25 ++++++ .../module/extensions/ExtensionsFragment.java | 4 + .../com/mogo/module/main/MainActivity.java | 88 ++++++++++++++++--- .../com/mogo/module/main/MainPresenter.java | 2 + .../com/mogo/module/map/VoiceConstants.java | 6 +- .../service/analytics/IMogoAnalytics.java | 1 - 7 files changed, 133 insertions(+), 20 deletions(-) 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/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-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 63442e36c2..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 @@ -15,6 +15,7 @@ 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; @@ -41,6 +42,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private TextView mMsgCounter; private IMogoFragmentManager mMogoFragmentManager; + private IMogoAnalytics mAnalytics; @Override protected int getLayoutId() { @@ -57,6 +59,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP } ); mVoiceMsg.setOnClickListener( view -> { AIAssist.startAssistant( getContext() ); + mAnalytics.track( "Launcher_xiaozhi_Click", null ); } ); mTime = findViewById( R.id.module_ext_id_time ); @@ -94,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-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 43a74ae16f..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; @@ -27,6 +29,7 @@ import com.mogo.module.main.cards.VerticalStackTransformer; import com.mogo.module.main.windowview.WindowViewHandler; import com.mogo.module.service.ServiceConst; import com.mogo.service.MogoServicePaths; +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; @@ -34,7 +37,9 @@ 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 @@ -74,6 +79,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme // 是否是点击Marker进行的页面切换,false-不是,true-是 private boolean isClickMarker; + private long mCardStartShowTime = 0; + + private IMogoAnalytics mAnalytics; + @Override protected int getLayoutId() { return R.layout.module_main_activity_main; @@ -85,18 +94,71 @@ 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()); - if (!isClickMarker) { - mMogoCardManager.invoke(position, mMogoModuleHandler.getCurrentModuleName()); + 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 ); + } } ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this ); @@ -157,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 ); @@ -177,6 +236,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme 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() { @@ -187,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(); } @@ -220,8 +282,8 @@ 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()); + if ( !isClickMarker ) { + mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); } } else { Logger.e( TAG, "Can't find type of %s's position", cardType ); 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 fe0d3db3d4..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 @@ -31,4 +31,6 @@ public class MainPresenter extends Presenter< MainView > { mView.switch2( to ); } ); } + + } 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 6529e59de1..577b2bc2c4 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 @@ -118,20 +118,20 @@ public class VoiceConstants { */ public static final String CMD_MAP_STOP_NAVI_MODE = "com.ileja.navi.route.stop"; public static final String CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP = "CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP"; - public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航/结束导航/取消导航/放弃导航/退出导航/关闭导航"}; + public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航", "结束导航", "取消导航", "放弃导航", "退出导航", "关闭导航"}; /** * 车头朝上 */ - 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 = {"北朝上"}; 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 { - /** * 埋点 * From 90e4ff805ba4bde27cf62290dc8cb2aa13799f18 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 15 Jan 2020 15:41:52 +0800 Subject: [PATCH 25/26] opt --- .../share/dialog/LaucherShareDialog.java | 9 ++++---- .../tanlu/fragment/TanluCardViewFragment.java | 23 +++++++++---------- .../module/tanlu/model/event/MarkerInfo.java | 4 ++-- .../tanlu/receiver/MarkerInfoReceiver.kt | 6 ++--- 4 files changed, 20 insertions(+), 22 deletions(-) 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/fragment/TanluCardViewFragment.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java index 5fbb7aa16b..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 @@ -507,7 +507,7 @@ public class TanluCardViewFragment extends MvpFragment> public void onClick(View view) { int id = view.getId(); if (id == R.id.tv_previous_res) { //上一个 -// 判断是图片还是视频,第一个时,上一个不可点击 + //判断是图片还是视频,第一个时,上一个不可点击 Logger.d(TAG, " tv_previous_res --1-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size()); if (currentPosition < 0) { return; @@ -518,11 +518,6 @@ public class TanluCardViewFragment extends MvpFragment> handleData(markerExploreWayList.get(currentPosition)); } -// getRoadLineData(); -// getVoiceControlRoadData("中关村"); -// getNavigationLineData(); -// getNaviRoadLineInfo(); - } else if (id == R.id.tv_next_res) { //下一个 //判断是图片还是视频,最后一个时,下一个不可点击 Logger.d(TAG, " tv_next_res --1-> currentPosition =" + currentPosition + ">> size= " + markerExploreWayList.size()); @@ -652,7 +647,7 @@ public class TanluCardViewFragment extends MvpFragment> public void onCompleted(Bitmap bitmap) { autoZoomInImageView.setImageBitmap(bitmap); //动画 -// handleImageAnimation(); + handleImageAnimation(); } @Override @@ -803,7 +798,14 @@ public class TanluCardViewFragment extends MvpFragment> @Subscribe(threadMode = ThreadMode.MAIN) public void onMarkerInfo(final MarkerInfo event) { Logger.d(TAG, "onMarkerInfo ------>"); - mMarkerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_search_poi_location); + 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() { @@ -819,10 +821,9 @@ public class TanluCardViewFragment extends MvpFragment> .owner(TanluConstants.MODEL_NAME) .longitude(event.lon); - IMogoMarker marker = mMarkerManager.addMarker(TanluConstants.MODEL_NAME, options); + IMogoMarker marker = mMarkerManager.addMarker("share_tag", options); //TODO 请求分享接口 - } @Override @@ -934,7 +935,6 @@ public class TanluCardViewFragment extends MvpFragment> speakSuccessVoice(o.getInformations(), discription == null ? "" : discription); List informationList = o.getInformations(); - //移动 MogoLatLng latLng = new MogoLatLng(lat, lon); mMApUIController.moveToCenter(latLng); @@ -962,7 +962,6 @@ public class TanluCardViewFragment extends MvpFragment> optionList.add(options); } - mMarkerManager.addMarkers(TanluConstants.MODEL_NAME, optionList, true); //直接使用当前数据list,作为切换的数据源 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)) } } } From f47704e76e22dd3ce3bbea3763d78986f938df38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 15 Jan 2020 15:54:15 +0800 Subject: [PATCH 26/26] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=82=B9?= =?UTF-8?q?=E5=87=BBMarker=E7=9A=84=E7=82=B9=E5=87=BB=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=EF=BC=8CMarker=E6=95=B0=E6=8D=AE=E7=9A=84=E7=BB=98=E5=88=B6?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E6=95=B0=E6=8D=AE=E5=9F=8B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 159 +++++++++++++++--- 1 file changed, 131 insertions(+), 28 deletions(-) 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 bb87bc0523..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 @@ -16,11 +16,13 @@ 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; @@ -30,6 +32,7 @@ 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; @@ -54,6 +57,7 @@ public class MarkerServiceHandler { private static IMogoImageloader mImageloader; private static IMogoSocketManager mMogoSocketManager; private static IMogoCardManager mMogoCardManager; + private static IMogoAnalytics mMogoAnalytics; private static Context mContext; @@ -65,6 +69,7 @@ public class MarkerServiceHandler { 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); @@ -130,6 +135,10 @@ public class MarkerServiceHandler { return mMogoCardManager; } + public static IMogoAnalytics getMogoAnalytics() { + return mMogoAnalytics; + } + private static IMogoMarker lastMarker; /** @@ -140,39 +149,85 @@ 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); - lastMarkerShowEntity.setHighlighted(false); + lastMarker = drawMapMarker(markerShowEntity); + if (lastMarker != null) { + lastMarker.setAlpha(1f); + } - drawMapMarker(lastMarkerShowEntity); + marker.remove(); - lastMarker.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); - markerShowEntity.setHighlighted(true); - - lastMarker = drawMapMarker(markerShowEntity); - if (lastMarker != null) { - lastMarker.setAlpha(1f); - } - - marker.remove(); return false; } } @@ -246,6 +301,7 @@ public class MarkerServiceHandler { drawMapMarker(markerShowEntity); } + analyticData(3, onlineCarList.size()); } if (exploreWayList != null) { @@ -262,6 +318,7 @@ public class MarkerServiceHandler { drawMapMarker(markerShowEntity); } } + analyticData(1, exploreWayList.size()); } if (shareMusicList != null) { @@ -277,9 +334,16 @@ 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(); @@ -290,13 +354,52 @@ public class MarkerServiceHandler { 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(12); } + /** + * 统计地图内数据获取 + * + * @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队列进行维护 */