diff --git a/config.gradle b/config.gradle
index 0a88a322ce..1b9170ba35 100644
--- a/config.gradle
+++ b/config.gradle
@@ -141,7 +141,7 @@ ext {
// gps 模拟
gpssimulator : "com.mogo.module:module-gps-simulator:${MOGO_MODULE_GPS_SIMULATOR_VERSION}",
- gpssimulatordebug : "com.mogo.module:mogo-module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}",
- gpssimulatornoop : "com.mogo.module:mogo-module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}",
+ gpssimulatordebug : "com.mogo.module:module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}",
+ gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}",
]
}
\ No newline at end of file
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
index c9928fd2c5..e9a150116b 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
@@ -17,6 +17,7 @@ import com.mogo.map.impl.amap.AMapWrapper;
import com.mogo.map.impl.amap.message.AMapMessageManager;
import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.navi.IMogoCarLocationChangedListener;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.MogoCalculatePath;
import com.mogo.map.navi.MogoNaviConfig;
@@ -61,7 +62,7 @@ public class NaviClient implements IMogoNavi {
private boolean mIsRealNavi;
private Location mCarLocation;
- private IMogoCarLocationChangedListener mCarLocationChangedListener;
+ private IMogoCarLocationChangedListener2 mCarLocationChangedListener;
private LocationSource.OnLocationChangedListener mOnLocationChangedListener;
/**
* 巡航模式配置状态
@@ -260,7 +261,12 @@ public class NaviClient implements IMogoNavi {
}
@Override
- public void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener ) {
+ public Location getCarLocation2() {
+ return mCarLocation;
+ }
+
+ @Override
+ public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
mCarLocationChangedListener = listener;
}
@@ -269,7 +275,7 @@ public class NaviClient implements IMogoNavi {
public void syncCarLocation( Location location ) {
mCarLocation = location;
if ( mCarLocationChangedListener != null ) {
- mCarLocationChangedListener.onCarLocationChanged( getCarLocation() );
+ mCarLocationChangedListener.onCarLocationChanged2( mCarLocation );
}
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener2.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener2.java
new file mode 100644
index 0000000000..fe2bf33422
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener2.java
@@ -0,0 +1,14 @@
+package com.mogo.map.navi;
+
+import android.location.Location;
+
+/**
+ * @author congtaowang
+ * @since 2020-03-14
+ *
+ * 车辆位置变化
+ */
+public interface IMogoCarLocationChangedListener2 extends IMogoCarLocationChangedListener {
+
+ void onCarLocationChanged2( Location latLng );
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
index 40914d49b0..de314483b5 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
@@ -144,12 +144,19 @@ public interface IMogoNavi {
*/
MogoLatLng getCarLocation();
+ /**
+ * 获取车标经纬度
+ *
+ * @return
+ */
+ Location getCarLocation2();
+
/**
* 注册车辆位置变化监听,非业务使用
*
* @param listener
*/
- void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener );
+ void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener );
/**
* 打开巡航模式
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
index 2e9ff0a525..74e6615a7c 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
@@ -6,6 +6,7 @@ import android.location.Location;
import com.mogo.map.impl.amap.navi.NaviClient;
import com.mogo.map.navi.IMogoCarLocationChangedListener;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.MogoCalculatePath;
import com.mogo.map.navi.MogoNaviConfig;
@@ -176,7 +177,15 @@ public class MogoNavi implements IMogoNavi {
}
@Override
- public void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener ) {
+ public Location getCarLocation2() {
+ if ( mDelegate != null ) {
+ return mDelegate.getCarLocation2();
+ }
+ return null;
+ }
+
+ @Override
+ public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
if ( mDelegate != null ) {
mDelegate.registerCarLocationChangedListener( listener );
}
diff --git a/map-upload.sh b/map-upload.sh
index a53d5d66df..eeb258a13e 100755
--- a/map-upload.sh
+++ b/map-upload.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-./gradlew :libraries:mogo-map-api:clean :libraries:mogo-map-api:uploadArchives
-./gradlew :libraries:map-amap:clean :libraries:map-amap:uploadArchives
-./gradlew :libraries:mogo-map:clean :libraries:mogo-map:uploadArchives
\ No newline at end of file
+./gradlew :services:mogo-service-api:clean :services:mogo-service-api:uploadArchives
+./gradlew :services:mogo-service:clean :services:mogo-service:uploadArchives
+./gradlew :modules:mogo-module-extensions:clean :modules:mogo-module-extensions:uploadArchives
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
index 1ba191e0cf..ffe850df7a 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
@@ -39,6 +39,7 @@ import com.mogo.module.share.ShareControl;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
+import com.mogo.service.entrance.ButtonIndex;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.map.IMogoMapService;
@@ -221,6 +222,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
}
}
} );
+ MogoEntranceButtons.save( ButtonIndex.BUTTON1, findViewById( R.id.module_entrance_id_button1 ) );
+ MogoEntranceButtons.save( ButtonIndex.BUTTON2, findViewById( R.id.module_entrance_id_button2 ) );
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java
new file mode 100644
index 0000000000..2b4f032948
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java
@@ -0,0 +1,29 @@
+package com.mogo.module.extensions.entrance;
+
+import android.content.Context;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.entrance.ButtonIndex;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-16
+ *
+ * 描述
+ */
+@Route( path = MogoServicePaths.PATH_ENTRANCE_BUTTON_API )
+public class MogoEntranceButtonControllerImpl implements IMogoEntranceButtonController {
+
+ @Override
+ public TextView getButton( ButtonIndex index ) {
+ return MogoEntranceButtons.getButton( index );
+ }
+
+ @Override
+ public void init( Context context ) {
+
+ }
+}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtons.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtons.java
new file mode 100644
index 0000000000..686d01e72e
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtons.java
@@ -0,0 +1,31 @@
+package com.mogo.module.extensions.entrance;
+
+import android.widget.TextView;
+
+import com.mogo.service.entrance.ButtonIndex;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-16
+ *
+ * 描述
+ */
+public class MogoEntranceButtons {
+
+ private static Map< ButtonIndex, TextView > sButtons = new HashMap<>();
+
+ public static void save( ButtonIndex index, TextView btn ) {
+ sButtons.put( index, btn );
+ }
+
+ public static TextView getButton( ButtonIndex index ) {
+ return sButtons.get( index );
+ }
+
+ public static void clear() {
+ sButtons.clear();
+ }
+}
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
index 2fb0371afd..4dac1458fd 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
@@ -80,8 +80,8 @@
android:layout_marginRight="@dimen/module_ext_speed_limit_marginRight"
android:background="@drawable/module_ext_dw_speed_limit_bkg"
android:gravity="center"
- android:visibility="invisible"
android:orientation="vertical"
+ android:visibility="invisible"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -116,18 +116,18 @@
+ app:layout_constraintTop_toBottomOf="@+id/module_entrance_id_navi_info_panel" />
-
+ app:layout_constraintLeft_toLeftOf="parent">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml
index 1436b11965..57dca9bae6 100644
--- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml
@@ -46,11 +46,14 @@
20px
- 130px
- 58px
+ 64px
+ 64px
20px
32px
+ 20px
+ 30px
22px
+ 8px
64px
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
index faf483cc84..c4c5d9e9a2 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
@@ -44,11 +44,14 @@
32px
32px
- 200px
- 90px
+ 120px
+ 120px
32px
60px
+ 32px
+ 60px
32px
+ 20px
120px
diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
index 5e54d8ef68..027c19d25e 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -44,11 +44,14 @@
32px
32px
- 200px
- 90px
+ 120px
+ 120px
32px
60px
+ 32px
+ 60px
32px
+ 20px
120px
diff --git a/modules/mogo-module-gps-simulator-debug/build.gradle b/modules/mogo-module-gps-simulator-debug/build.gradle
index 2382df5823..12fbf4774d 100644
--- a/modules/mogo-module-gps-simulator-debug/build.gradle
+++ b/modules/mogo-module-gps-simulator-debug/build.gradle
@@ -51,3 +51,5 @@ dependencies {
implementation project(':services:mogo-service-api')
}
}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/modules/mogo-module-gps-simulator-noop/build.gradle b/modules/mogo-module-gps-simulator-noop/build.gradle
index 7427dc421a..4e4194af0d 100644
--- a/modules/mogo-module-gps-simulator-noop/build.gradle
+++ b/modules/mogo-module-gps-simulator-noop/build.gradle
@@ -46,3 +46,5 @@ dependencies {
implementation project(':modules:mogo-module-gps-simulator')
}
}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/modules/mogo-module-gps-simulator/build.gradle b/modules/mogo-module-gps-simulator/build.gradle
index b3a5b2a6a6..df36963bb0 100644
--- a/modules/mogo-module-gps-simulator/build.gradle
+++ b/modules/mogo-module-gps-simulator/build.gradle
@@ -37,3 +37,5 @@ dependencies {
implementation project(':modules:mogo-module-authorize')
}
}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
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 06f4296965..08c8f4417e 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
@@ -7,6 +7,7 @@ import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoCarLocationChangedListener;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.module.IMogoModuleProvider;
@@ -26,7 +27,7 @@ public interface MogoModulesHandler extends IMogoMapListener,
IMogoLocationListener,
IMogoMarkerClickListener,
IMogoAimlessModeListener,
- IMogoCarLocationChangedListener {
+ IMogoCarLocationChangedListener2 {
/**
* 地图加载完成回调
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 11476ac886..e2876f8737 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
@@ -2,6 +2,7 @@ package com.mogo.module.main.cards;
import android.content.Context;
import android.content.Intent;
+import android.location.Location;
import android.text.TextUtils;
import android.view.MotionEvent;
@@ -17,6 +18,7 @@ import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoCarLocationChangedListener;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.IMogoNaviListener2;
import com.mogo.map.navi.MogoCongestionInfo;
@@ -109,7 +111,7 @@ public class MogoModulesManager implements MogoModulesHandler,
final List< MogoModule > modules = MogoModulePaths.getModules();
if ( modules != null && !modules.isEmpty() ) {
for ( MogoModule module : modules ) {
- Logger.d(TAG,"module.getPath():" + module.getPath() + " name: " + module.getName());
+ Logger.d( TAG, "module.getPath():" + module.getPath() + " name: " + module.getName() );
IMogoModuleProvider provider = load( module.getPath() );
if ( provider != null ) {
mModuleProviders.put( module, provider );
@@ -655,15 +657,30 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onCarLocationChanged( MogoLatLng latLng ) {
+ // do nothing.
+ }
+
+ @Override
+ public void onCarLocationChanged2( Location latLng ) {
Iterator< IMogoCarLocationChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getCarLocationChangedListener();
if ( iterator == null ) {
return;
}
+ MogoLatLng target = null;
while ( iterator.hasNext() ) {
IMogoCarLocationChangedListener listener = iterator.next();
- if ( listener != null ) {
+ if ( listener instanceof IMogoCarLocationChangedListener2 ) {
try {
- listener.onCarLocationChanged( latLng );
+ ( ( IMogoCarLocationChangedListener2 ) listener ).onCarLocationChanged2( latLng );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ } else {
+ try {
+ if ( target == null ) {
+ target = new MogoLatLng( latLng.getLatitude(), latLng.getLongitude() );
+ }
+ listener.onCarLocationChanged( target );
} catch ( Exception e ) {
e.printStackTrace();
}
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt
index 40affa22cf..3fbb093871 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt
@@ -40,255 +40,225 @@ import kotlinx.android.synthetic.main.fragment_search_category.tv_navi_navi
* @author zyz
* 2020-01-09.
*/
-class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack {
+class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack, IMogoMarkerClickListener {
// override fun onMarkerClicked(marker: IMogoMarker?): Boolean {
//
// return true
// }
- override fun onCmdSelected(cmd: String?) {
- if (cmd?.startsWith("position") == true) {
- var index = cmd.substring(8)
- mAdapter.setCurrent(index.toInt())
- updateMarker()
- goPath()
+ override fun onCmdSelected(cmd: String?) {
+ if (cmd?.startsWith("position") == true) {
+ var index = cmd.substring(8)
+ mAdapter.current = index.toInt()
+ updateMarker(false)
+ goPath()
+ }
}
- }
- override fun onCmdAction(speakText: String?) {
- }
+ override fun onCmdAction(speakText: String?) {
+ }
- override fun onCmdCancel(speakText: String?) {
- }
+ override fun onCmdCancel(speakText: String?) {
+ }
- override fun onSpeakEnd(speakText: String?) {
- }
+ override fun onSpeakEnd(speakText: String?) {
+ }
- override fun onSpeakSelectTimeOut(speakText: String?) {
- }
+ override fun onSpeakSelectTimeOut(speakText: String?) {
+ }
- private val TAG: String = "CategorySearchFragment"
- private var addMarkers: ArrayList = ArrayList()
- var arrayList = ArrayList()
- var locationList = ArrayList()
+ private val TAG: String = "CategorySearchFragment"
+ private var addMarkers: ArrayList = ArrayList()
+ var arrayList = ArrayList()
+ var locationList = ArrayList()
- private lateinit var cmds: ArrayList
- override fun renderSearchPoiResult(datums: List?) {
- mAdapter.setDatas(datums)
- cv_search_result.visibility = View.VISIBLE
- pb_path.visibility = View.GONE
- AIAssist.getInstance(context)
- .speakTTSVoice(String.format("搜索到%d个位置,请选择", datums?.size))
+ private lateinit var cmds: ArrayList
+ override fun renderSearchPoiResult(datums: List?) {
+ mAdapter.setDatas(datums)
+ cv_search_result.visibility = View.VISIBLE
+ pb_path.visibility = View.GONE
+ AIAssist.getInstance(context).speakTTSVoice(String.format("搜索到%d个位置,请选择", datums?.size))
- arrayList.clear()
- locationList.clear()
+ arrayList.clear()
+ locationList.clear()
- for (index in 0 until datums!!.size) {
- var decodeResource =
- BitmapFactory.decodeResource(
- resources,
- if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
- )
+ for (index in 0 until datums!!.size) {
+ var decodeResource = BitmapFactory.decodeResource(
+ resources,
+ if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
+ )
- var createWaterMask =
- BitmapUtils.createWaterMask(
- context, decodeResource, (index + 1).toString(), R.color.white, 18
- )
- val options = MogoMarkerOptions()
- .icon(createWaterMask)
- .latitude(datums[index].point?.lat ?: 0.0)
- .owner("CategorySearchFragment")
- .`object`(index)
+ var createWaterMask = BitmapUtils.createWaterMask(
+ context, decodeResource, (index + 1).toString(), R.color.white, 18
+ )
+ val options = MogoMarkerOptions()
+ .icon(createWaterMask)
+ .latitude(datums[index].point?.lat ?: 0.0)
+ .owner("CategorySearchFragment")
+ .`object`(index)
// .anchor(0.5f, 1f)
- .longitude(datums[index].point?.lng ?: 0.0)
- arrayList.add(options)
- locationList.add(datums[index].point)
+ .longitude(datums[index].point?.lng ?: 0.0)
+ arrayList.add(options)
+ locationList.add(datums[index].point)
- var int2String = StringUtils.int2String(index + 1)
- AIAssist.getInstance(context)
- .registerUnWakeupCommand(
- "position" + index, arrayOf("第" + int2String + "个", "第" + int2String + "条"), this
- )
- cmds.add("position" + index)
+ var int2String = StringUtils.int2String(index + 1)
+ AIAssist.getInstance(context).registerUnWakeupCommand("position${index}", arrayOf("第${int2String}个", "第${int2String}条"), this)
+ cmds.add("position" + index)
+ }
+ addMarkers()
}
- addMarkers()
- }
- private fun addMarkers() {
- addMarkers.clear()
- var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2
- SearchServiceHolder.getMapUIController()
- .showBounds(
- TAG, null, locationList, Rect(
- cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder
- ), false
+ private fun addMarkers() {
+ addMarkers.clear()
+ var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2
+ SearchServiceHolder.getMapUIController().showBounds(TAG,
+ null,
+ locationList,
+ Rect(cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder),
+ false
)
- for (options in arrayList) {
- var addMarker = SearchServiceHolder.getMarkerManger()
- .addMarker(TAG, options)
- addMarkers.add(addMarker)
- }
- addClick()
- }
-
- private fun registerVoice() {
-
- for (index in 0 until cmds.size) {
- var int2String = StringUtils.int2String(index + 1)
- AIAssist.getInstance(context)
- .registerUnWakeupCommand(
- "position" + index, arrayOf("第" + int2String + "个", "第" + int2String + "条"), this
- )
+ for (options in arrayList) {
+ var addMarker = SearchServiceHolder.getMarkerManger().addMarker(TAG, options)
+ addMarker.onMarkerClickListener = this
+ addMarkers.add(addMarker)
+ }
}
- }
-
- override fun onHiddenChanged(hidden: Boolean) {
- super.onHiddenChanged(hidden)
- if (!hidden) {
- registerVoice()
- addMarkers()
- } else {
- unRegisterVoice()
+ private fun registerVoice() {
+ for (index in 0 until cmds.size) {
+ var int2String = StringUtils.int2String(index + 1)
+ AIAssist.getInstance(context).registerUnWakeupCommand("position${index}", arrayOf("第${int2String}个", "第${int2String}条"), this)
+ }
}
- }
- private fun addClick() {
- if (addMarkers != null) {
- for (item in addMarkers!!) {
- item.setOnMarkerClickListener {
+ override fun onHiddenChanged(hidden: Boolean) {
+ super.onHiddenChanged(hidden)
+ if (!hidden) {
+ registerVoice()
+ addMarkers()
+ } else {
+ unRegisterVoice()
+ }
+ }
- var index = it.mogoMarkerOptions.`object` as Int
- mAdapter.current = index
- rv_search_result.smoothScrollToPosition(index)
- updateMarker()
- true
+ override fun onMarkerClicked(marker: IMogoMarker?): Boolean {
+ var index = marker?.mogoMarkerOptions?.`object` as Int
+ mAdapter.current = index
+ rv_search_result.smoothScrollToPosition(index)
+ updateMarker()
+ return true
+ }
+
+ private lateinit var mAdapter: SearchCategoryAdapter
+
+ private lateinit var mSearchPresenter: CategoryPresenter
+ private var category: String? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ category = arguments?.getString("category")
+ mSearchPresenter = CategoryPresenter(this)
+ lifecycle.addObserver(mSearchPresenter)
+ cmds = ArrayList()
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.fragment_search_category
+ }
+
+ override fun onViewCreated(
+ view: View,
+ savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ mAdapter = SearchCategoryAdapter(activity, ArrayList())
+
+ rv_search_result.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
+ rv_search_result.adapter = mAdapter
+ et_navi_search.setText(category)
+
+
+ iv_navi_back.setOnClickListener {
+ SearchServiceHolder.fragmentManager.pop()
}
- }
+ tv_navi_navi.setOnClickListener {
+ goPath()
+ }
+ mAdapter.setOnClickListener {
+ var position = it.getTag(R.id.tag_position) as Int
+ mAdapter.current = position
+ updateMarker()
+ }
+
+ AIAssist.getInstance(context).registerUnWakeupCommand("back", arrayOf("关闭", "返回"), this)
}
- }
-
- private lateinit var mAdapter: SearchCategoryAdapter
-
- private lateinit var mSearchPresenter: CategoryPresenter
- private var category: String? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- category = arguments?.getString("category")
- mSearchPresenter = CategoryPresenter(this)
- lifecycle.addObserver(mSearchPresenter)
- cmds = ArrayList()
- }
-
- override fun getLayoutId(): Int {
- return R.layout.fragment_search_category
- }
-
- override fun onViewCreated(
- view: View,
- savedInstanceState: Bundle?
- ) {
- super.onViewCreated(view, savedInstanceState)
- mAdapter = SearchCategoryAdapter(activity, ArrayList())
-
- rv_search_result.layoutManager =
- LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
-
- rv_search_result.adapter = mAdapter
-
- et_navi_search.setText(category)
-
-
- iv_navi_back.setOnClickListener {
- SearchServiceHolder.fragmentManager.pop()
+ private fun goPath() {
+ mAdapter.currentItem?.let {
+ AddressManager.calculatePath(mAdapter.currentItem.point)
+ }
}
- tv_navi_navi.setOnClickListener {
+ private fun updateMarker(moveToCenter:Boolean = true) {
- goPath()
- }
- mAdapter.setOnClickListener {
- var position = it.getTag(R.id.tag_position) as Int
- mAdapter.setCurrent(position)
- updateMarker()
+ addMarkers?.get(mAdapter.lastPosition)?.setIcon(getMarkerIcon(mAdapter.lastPosition))
+ var current = addMarkers?.get(mAdapter.current)
+ current?.setIcon(getMarkerIcon(mAdapter.current))
+ current?.setToTop()
+ arrayList.get(mAdapter.lastPosition).icon(getMarkerIcon(mAdapter.lastPosition))
+ arrayList.get(mAdapter.current).icon(getMarkerIcon(mAdapter.current))
+ if (moveToCenter) {
+ SearchServiceHolder.statusManager.setUserInteractionStatus(TAG, true, false)
+ SearchServiceHolder.getMapUIController().moveToCenter(current.position)
+ }
}
- AIAssist.getInstance(context)
- .registerUnWakeupCommand("back", arrayOf("关闭", "返回"), this)
+ private fun getMarkerIcon(index: Int): Bitmap {
+ var decodeResource = BitmapFactory.decodeResource(
+ resources,
+ if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
+ )
- }
-
- private fun goPath() {
- mAdapter.currentItem?.let {
- AddressManager.calculatePath(mAdapter.currentItem.point)
+ var createWaterMask = BitmapUtils.createWaterMask(
+ context, decodeResource, (index + 1).toString(), R.color.white, 18
+ )
+ return createWaterMask
}
- }
- private fun updateMarker() {
-
- addMarkers?.get(mAdapter.lastPosition)
- ?.setIcon(getMarkerIcon(mAdapter.lastPosition))
- var current = addMarkers?.get(mAdapter.current)
- current?.setIcon(getMarkerIcon(mAdapter.current))
- current?.setToTop()
- arrayList.get(mAdapter.lastPosition)
- .icon(getMarkerIcon(mAdapter.lastPosition))
- arrayList.get(mAdapter.current)
- .icon(getMarkerIcon(mAdapter.current))
- }
-
- private fun getMarkerIcon(index: Int): Bitmap {
- var decodeResource =
- BitmapFactory.decodeResource(
- resources,
- if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
- )
-
- var createWaterMask =
- BitmapUtils.createWaterMask(
- context, decodeResource, (index + 1).toString(), R.color.white, 18
- )
- return createWaterMask
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- mSearchPresenter.startSearchLocalPoiByInput(category)
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- mSearchPresenter.onDestroy(viewLifecycleOwner)
- lifecycle.removeObserver(mSearchPresenter)
- SearchServiceHolder.getMarkerManger()
- .removeMarkers(TAG)
-
- unRegisterVoice()
- }
-
- private fun unRegisterVoice() {
- cmds.forEach {
- AIAssist.getInstance(context)
- .unregisterUnWakeupCommand(it)
+ override fun onActivityCreated(savedInstanceState: Bundle?) {
+ super.onActivityCreated(savedInstanceState)
+ mSearchPresenter.startSearchLocalPoiByInput(category)
}
- }
- override fun onDestroy() {
- super.onDestroy()
- }
+ override fun onDestroyView() {
+ super.onDestroyView()
+ mSearchPresenter.onDestroy(viewLifecycleOwner)
+ lifecycle.removeObserver(mSearchPresenter)
+ SearchServiceHolder.getMarkerManger().removeMarkers(TAG)
- companion object {
- fun newInstance(category: String): Fragment {
- MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH)
- var bundle = Bundle()
- bundle.putString("category", category)
- var categorySerachFragment = CategorySearchFragment()
- categorySerachFragment.arguments = bundle
- return categorySerachFragment
+ unRegisterVoice()
+ }
+
+ private fun unRegisterVoice() {
+ cmds.forEach {
+ AIAssist.getInstance(context).unregisterUnWakeupCommand(it)
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
+
+ companion object {
+ fun newInstance(category: String): Fragment {
+ MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH)
+ var bundle = Bundle()
+ bundle.putString("category", category)
+ var categorySerachFragment = CategorySearchFragment()
+ categorySerachFragment.arguments = bundle
+ return categorySerachFragment
+ }
}
- }
}
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 7d843891ca..089851d54e 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
@@ -82,6 +82,10 @@ public class MarkerServiceHandler {
mMapMarkerManager.init( context );
}
+ public static IMogoServiceApis getApis(){
+ return mApis;
+ }
+
public static IMogoMapService getMapService() {
return mMapService;
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
index a3ae5c5cc4..8b4bced18e 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
@@ -8,7 +8,6 @@ import android.location.LocationManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.os.Trace;
import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
@@ -30,7 +29,6 @@ import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
-import com.mogo.map.uicontroller.CarCursorOption;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModule;
@@ -38,6 +36,7 @@ import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
import com.mogo.module.service.carinfo.CarStateInfo;
+import com.mogo.module.service.intent.IntentHandlerFactory;
import com.mogo.module.service.marker.MapMarkerManager;
import com.mogo.module.service.network.RefreshCallback;
import com.mogo.module.service.network.RefreshModel;
@@ -60,14 +59,11 @@ import com.mogo.service.module.MogoAction;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.statusmanager.StatusDescriptor;
-import com.mogo.utils.AppUtils;
-import com.mogo.utils.TipToast;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.utils.GsonUtil;
-import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
@@ -796,24 +792,7 @@ public class MogoServices implements IMogoMapListener,
mActionManager.invoke( MapMarkerManager.getInstance().getCurrentModuleName(), MogoAction.Prev );
}
} else if ( ServiceConst.COMMAND_SWITCH_CARD.equals( command ) ) {
- String data = intent.getStringExtra( "data" );
- try {
- JSONObject jsonObject = new JSONObject( data );
- String card = jsonObject.getString( "card" );
- if ( TextUtils.equals( "多媒体卡片", card )
- || TextUtils.equals( "媒体中心卡片", card )
- || TextUtils.equals( "音乐卡片", card ) ) {
- switchCard2( ServiceConst.CARD_TYPE_SHARE_MUSIC );
- } else if ( TextUtils.equals( "探路卡片", card ) ) {
- switchCard2( ServiceConst.CARD_TYPE_ROAD_CONDITION );
- } else if ( TextUtils.equals( "在线车辆卡片", card ) ) {
- switchCard2( ServiceConst.CARD_TYPE_USER_DATA );
- } else if ( TextUtils.equals( "新鲜事卡片", card ) ) {
- switchCard2( ServiceConst.CARD_TYPE_NOVELTY );
- }
- } catch ( JSONException e ) {
- e.printStackTrace();
- }
+ IntentHandlerFactory.getInstance().handle( mContext, command, intent );
} else if ( MogoReceiver.ACTION_ADAS_STATUS.equals( command ) ) {
String msg = intent.getStringExtra( "adasMsg" );
if ( TextUtils.isEmpty( msg ) ) {
@@ -825,82 +804,14 @@ public class MogoServices implements IMogoMapListener,
// changeMyLocation( stateInfo.getValues() );
}
} else if ( ServiceConst.COMMAND_OPERATION.equals( command ) ) {
- try {
- JSONObject object = new JSONObject( intent.getStringExtra( "data" ) );
- String app = object.optString( "object" );
- String operation = object.optString( "operation" );
- if ( TextUtils.equals( app, "车聊聊" ) ) {
- if ( TextUtils.equals( "打开", operation ) ) {
- switchCard2( ServiceConst.CARD_TYPE_CARS_CHATTING );
- }
- } else {
- if ( TextUtils.equals( app, "探路" ) ) {
- if ( TextUtils.equals( "打开", operation ) ) {
- switchCard2( ServiceConst.CARD_TYPE_ROAD_CONDITION );
- }
- }
- }
- } catch ( JSONException e ) {
- e.printStackTrace();
- }
+ IntentHandlerFactory.getInstance().handle( mContext, command, intent );
} else if ( MogoReceiver.ACTION_VOICE_READY.equals( command ) ) {
AIAssist.getInstance( mContext ).flush();
mStatusManager.setAIAssistReady( TAG, true );
} else if ( ServiceConst.COMMAND_MY_LOCATION.equals( command ) ) {
- if ( mStatusManager.isSearchUIShow() ) {
- return;
- }
- if ( mStatusManager.isMainPageOnResume() ) {
- mUiController.recoverLockMode();
- } else {
- mLauncher.backToLauncher( mContext );
- UiThreadHandler.postDelayed( () -> {
- mUiController.recoverLockMode();
- }, 2_000L );
- }
+ IntentHandlerFactory.getInstance().handle( mContext, command, intent );
} else if ( MogoReceiver.ACTION_MOCK.equals( command ) ) {
-
- if ( !DebugConfig.isDebug() ) {
- return;
- }
-
- final int oper = intent.getIntExtra( "oper", -1 );
- switch ( oper ) {
- case 1:
- mUiController.showMyLocation( true );
- break;
- case 2:
- boolean status = intent.getBooleanExtra( "status", false );
- mStatusManager.setSeekHelping( TAG, status );
- break;
- case 3:
- String msg = intent.getStringExtra( "msg" );
- if ( !TextUtils.isEmpty( msg ) ) {
- TipToast.shortTip( msg );
- }
- break;
- }
- }
- }
-
- /**
- * 切换卡片
- */
- private void switchCard2( String card ) {
- if ( AppUtils.isApplicationBroughtToBackground( mContext ) ) {
- mLauncher.backToLauncher( mContext );
- UiThreadHandler.postDelayed( () -> {
- if ( mStatusManager.isADASShow() ) {
- mADASController.closeADAS();
- }
- mCardManager.switch2( card, true );
- }, 2000L );
- } else {
- mFragmentManager.clearAll();
- if ( mStatusManager.isADASShow() ) {
- mADASController.closeADAS();
- }
- mCardManager.switch2( card, true );
+ IntentHandlerFactory.getInstance().handle( mContext, command, intent );
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java
new file mode 100644
index 0000000000..66ca68b304
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java
@@ -0,0 +1,41 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+import android.text.TextUtils;
+
+import com.mogo.module.service.ServiceConst;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public class AppOperationIntentHandler implements IntentHandler {
+
+ @Override
+ public void handle( Context context, Intent intent ) {
+ try {
+ JSONObject object = new JSONObject( intent.getStringExtra( "data" ) );
+ String app = object.optString( "object" );
+ String operation = object.optString( "operation" );
+ if ( TextUtils.equals( app, "车聊聊" ) ) {
+ if ( TextUtils.equals( "打开", operation ) ) {
+ SwitchCardIntentHandler.switchCard2( context, ServiceConst.CARD_TYPE_CARS_CHATTING );
+ }
+ } else {
+ if ( TextUtils.equals( app, "探路" ) ) {
+ if ( TextUtils.equals( "打开", operation ) ) {
+ SwitchCardIntentHandler.switchCard2( context, ServiceConst.CARD_TYPE_ROAD_CONDITION );
+ }
+ }
+ }
+ } catch ( JSONException e ) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/EmptyIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/EmptyIntentHandler.java
new file mode 100644
index 0000000000..64d6edd24a
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/EmptyIntentHandler.java
@@ -0,0 +1,22 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.mogo.utils.logger.Logger;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public class EmptyIntentHandler implements IntentHandler {
+
+ private static final String TAG = "EmptyIntentHandler";
+
+ @Override
+ public void handle( Context context, Intent intent ) {
+ Logger.w( TAG, "空实现." );
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandler.java
new file mode 100644
index 0000000000..cf040875d5
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandler.java
@@ -0,0 +1,15 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public interface IntentHandler {
+
+ void handle( Context context, Intent intent );
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java
new file mode 100644
index 0000000000..fbba17c7b6
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java
@@ -0,0 +1,59 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.mogo.module.service.ServiceConst;
+import com.mogo.module.service.receiver.MogoReceiver;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public class IntentHandlerFactory {
+
+ private IntentHandlerFactory() {
+ // private constructor
+ mHandlers.put( MogoReceiver.ACTION_MOCK, new MockIntentHandler() );
+ mHandlers.put( ServiceConst.COMMAND_SWITCH_CARD, new SwitchCardIntentHandler() );
+ mHandlers.put( ServiceConst.COMMAND_OPERATION, new AppOperationIntentHandler() );
+ mHandlers.put( ServiceConst.COMMAND_MY_LOCATION, new MyLocationHandler() );
+ }
+
+ private static final class InstanceHolder {
+ private static final IntentHandlerFactory INSTANCE = new IntentHandlerFactory();
+ }
+
+ public static IntentHandlerFactory getInstance() {
+ return InstanceHolder.INSTANCE;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return InstanceHolder.INSTANCE;
+ }
+
+ private Map< String, IntentHandler > mHandlers = new HashMap<>();
+
+ private IntentHandler DEFAULT = new EmptyIntentHandler();
+
+ private IntentHandler getIntentHandler( String intent ) {
+ if ( mHandlers.containsKey( intent ) && mHandlers.get( intent ) != null ) {
+ return mHandlers.get( intent );
+ }
+ return DEFAULT;
+ }
+
+ public void handle( Context context, String intent, Intent obj ) {
+ IntentHandler handler = getIntentHandler( intent );
+ if ( handler != null ) {
+ handler.handle( context, obj );
+ }
+ }
+
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
new file mode 100644
index 0000000000..cc1ccbd4fa
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
@@ -0,0 +1,65 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.service.entrance.ButtonIndex;
+import com.mogo.utils.TipToast;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public class MockIntentHandler implements IntentHandler {
+
+ private static final String TAG = "MockIntentHandler";
+
+ @Override
+ public void handle( Context context, Intent intent ) {
+ if ( !DebugConfig.isDebug() ) {
+ return;
+ }
+
+ final int oper = intent.getIntExtra( "oper", -1 );
+ switch ( oper ) {
+ case 1:
+ MarkerServiceHandler.getMapUIController().showMyLocation( true );
+ break;
+ case 2:
+ boolean status = intent.getBooleanExtra( "status", false );
+ MarkerServiceHandler.getMogoStatusManager().setSeekHelping( TAG, status );
+ break;
+ case 3:
+ String msg = intent.getStringExtra( "msg" );
+ if ( !TextUtils.isEmpty( msg ) ) {
+ TipToast.shortTip( msg );
+ }
+ break;
+ case 4:
+ TextView button1 = MarkerServiceHandler.getApis().getEntranceButtonController().getButton( ButtonIndex.BUTTON1 );
+ if ( button1 != null ) {
+ button1.setVisibility( View.VISIBLE );
+ button1.setBackgroundColor( Color.RED );
+ button1.setOnClickListener( view -> {
+ TipToast.shortTip( "测试" );
+ } );
+ }
+ break;
+ case 5:
+ TextView button2 = MarkerServiceHandler.getApis().getEntranceButtonController().getButton( ButtonIndex.BUTTON1 );
+ if ( button2 != null ) {
+ button2.setOnClickListener( null );
+ button2.setVisibility( View.GONE );
+ }
+ break;
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java
new file mode 100644
index 0000000000..4504dd7e01
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MyLocationHandler.java
@@ -0,0 +1,31 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+
+import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.utils.UiThreadHandler;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 语音指令:定位我的位置等处理
+ */
+public class MyLocationHandler implements IntentHandler {
+
+ @Override
+ public void handle( Context context, Intent intent ) {
+ if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) {
+ return;
+ }
+ if ( MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume() ) {
+ MarkerServiceHandler.getMapUIController().recoverLockMode();
+ } else {
+ MarkerServiceHandler.getLauncher().backToLauncher( context );
+ UiThreadHandler.postDelayed( () -> {
+ MarkerServiceHandler.getMapUIController().recoverLockMode();
+ }, 2_000L );
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/SwitchCardIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/SwitchCardIntentHandler.java
new file mode 100644
index 0000000000..1c3e56567a
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/SwitchCardIntentHandler.java
@@ -0,0 +1,65 @@
+package com.mogo.module.service.intent;
+
+import android.content.Context;
+import android.content.Intent;
+import android.text.TextUtils;
+
+import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.module.service.ServiceConst;
+import com.mogo.utils.AppUtils;
+import com.mogo.utils.UiThreadHandler;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-17
+ *
+ * 描述
+ */
+public class SwitchCardIntentHandler implements IntentHandler {
+
+ @Override
+ public void handle( Context context, Intent intent ) {
+ String data = intent.getStringExtra( "data" );
+ try {
+ JSONObject jsonObject = new JSONObject( data );
+ String card = jsonObject.getString( "card" );
+ if ( TextUtils.equals( "多媒体卡片", card )
+ || TextUtils.equals( "媒体中心卡片", card )
+ || TextUtils.equals( "音乐卡片", card ) ) {
+ switchCard2( context, ServiceConst.CARD_TYPE_SHARE_MUSIC );
+ } else if ( TextUtils.equals( "探路卡片", card ) ) {
+ switchCard2( context, ServiceConst.CARD_TYPE_ROAD_CONDITION );
+ } else if ( TextUtils.equals( "在线车辆卡片", card ) ) {
+ switchCard2( context, ServiceConst.CARD_TYPE_USER_DATA );
+ } else if ( TextUtils.equals( "新鲜事卡片", card ) ) {
+ switchCard2( context, ServiceConst.CARD_TYPE_NOVELTY );
+ }
+ } catch ( JSONException e ) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 切换卡片
+ */
+ public static void switchCard2( Context context, String card ) {
+ if ( AppUtils.isApplicationBroughtToBackground( context ) ) {
+ MarkerServiceHandler.getLauncher().backToLauncher( context );
+ UiThreadHandler.postDelayed( () -> {
+ if ( MarkerServiceHandler.getMogoStatusManager().isADASShow() ) {
+ MarkerServiceHandler.getADASController().closeADAS();
+ }
+ MarkerServiceHandler.getMogoCardManager().switch2( card, true );
+ }, 2000L );
+ } else {
+ MarkerServiceHandler.getFragmentManager().clearAll();
+ if ( MarkerServiceHandler.getMogoStatusManager().isADASShow() ) {
+ MarkerServiceHandler.getADASController().closeADAS();
+ }
+ MarkerServiceHandler.getMogoCardManager().switch2( card, true );
+ }
+ }
+}
diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt
index 777a3569dc..5a0d662a84 100644
--- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt
+++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt
@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.mogo.module.share.constant.ShareConstants
+import com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_TROUBLE_HELP
import com.mogo.utils.logger.Logger
/**
@@ -11,11 +12,11 @@ import com.mogo.utils.logger.Logger
*/
class ShareVoiceCmdReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
- // todo 接收唤醒词指令
+ // 接收唤醒词指令
val command = intent.getStringExtra("command")
Logger.d("ShareCmdReceiver", "收到唤醒词指令: $command")
- if (command == "zhunbeishangbao") {
- //todo 开启服务,准备上报求助
+ if (command == VOICE_CMD_PUB_TROUBLE_HELP) {
+ // 开启服务,准备上报求助
val seekHelp = Intent(context, VoiceCmdService::class.java)
seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP)
context.startService(seekHelp)
diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt
index c7cd4e464b..ae1c6924c9 100644
--- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt
+++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/VoiceCmdService.kt
@@ -42,7 +42,7 @@ class VoiceCmdService:Service() {
if (intent.getIntExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY,0) == ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) {
// 收到语音指令,准备上报求助
Logger.i(TAG, "收到语音指令,准备上报求助")
- SeekHelpManager.seekHelp(this,seekListener,false)
+ SeekHelpManager.seekHelp(this,seekListener)
}
}
return super.onStartCommand(intent, flags, startId)
diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java
index 139081e11f..a0134b5feb 100644
--- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java
+++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java
@@ -18,4 +18,6 @@ public class ShareConstants {
public static final String VOICE_CMD_SERVICE_EVENT_KEY = "type";
public static final int VOICE_CMD_SERVICE_SEEK_HELP = 1;
+
+ public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving.pubTroubleHelp";
}
diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt
index d284b2807c..bcc2b3cd73 100644
--- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt
+++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt
@@ -37,12 +37,13 @@ object SeekHelpManager {
private const val SEEK_RECORD_LIMIT_AMOUNT = 2
const val VOICE_WILL_SEEK_HELP = "将发布故障求助"
- private var context:Context? = null
- private var aiAssist:AIAssist? = null
+ private var context: Context? = null
+ private var aiAssist: AIAssist? = null
private val seekRecordList = mutableListOf()
private val seekListenerList = mutableListOf()
private var isSeekHelp = false
+ private var isSeeking = false
private val voiceCallback = object : IMogoVoiceCmdCallBack {
override fun onCmdSelected(cmd: String?) {
@@ -77,34 +78,36 @@ object SeekHelpManager {
*
* @param useLocalVoiceNotice 使用自己的语音播报,如果是从语音助手过来的请求,语音助手可能会走自己的播报,默认是使用自己的播报
*/
- fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener,useLocalVoiceNotice:Boolean = true) {
- // context初始化
- if (this.context == null) {
- this.context = context
- aiAssist = AIAssist.getInstance(context)
- }
- isSeekHelp = ShareControl.getInstance(SeekHelpManager.context).mogoServiceApis.statusManagerApi.isSeekHelping
- Logger.d(TAG, "开始故障求助上报---${isSeekHelp}")
- seekListenerList.add(seekHelpListener)
- when {
- isSeekHelp -> {
- // 正在求助中,进行异常提示
- toast("已发布故障求助,请耐心等待")
- aiAssist?.speakTTSVoice("已发布故障求助,请耐心等待")
+ fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener, useLocalVoiceNotice: Boolean = true) {
+ if(!isSeeking) {
+ isSeeking = true
+ if (this.context == null) {
+ this.context = context
+ aiAssist = AIAssist.getInstance(context)
}
- getSeekAmountByLimitTime() >= SEEK_RECORD_LIMIT_AMOUNT -> {
- // 超过限制时间内的限制次数,进行异常提示
- toast("已在求助状态,请勿连续发布哦")
- aiAssist?.speakTTSVoice("已在求助状态,请勿连续发布哦")
- }
- else -> {
- // 没有异常情况,开始故障求助
- if(useLocalVoiceNotice) {
- // 语音说完再请求,要不然可能请求的太快
- aiAssist?.speakTTSVoice(VOICE_WILL_SEEK_HELP, voiceCallback)
- }else{
- Logger.d(TAG,"不使用本地语音播报,直接开始发起求助")
- realSeekHelp()
+ isSeekHelp = ShareControl.getInstance(SeekHelpManager.context).mogoServiceApis.statusManagerApi.isSeekHelping
+ Logger.d(TAG, "开始故障求助上报---${isSeekHelp}")
+ seekListenerList.add(seekHelpListener)
+ when {
+ isSeekHelp -> {
+ // 正在求助中,进行异常提示
+ toast("已发布故障求助,请耐心等待")
+ aiAssist?.speakTTSVoice("已发布故障求助,请耐心等待")
+ }
+ getSeekAmountByLimitTime() >= SEEK_RECORD_LIMIT_AMOUNT -> {
+ // 超过限制时间内的限制次数,进行异常提示
+ toast("已在求助状态,请勿连续发布哦")
+ aiAssist?.speakTTSVoice("已在求助状态,请勿连续发布哦")
+ }
+ else -> {
+ // 没有异常情况,开始故障求助
+ if (useLocalVoiceNotice) {
+ // 语音说完再请求,要不然可能请求的太快
+ aiAssist?.speakTTSVoice(VOICE_WILL_SEEK_HELP, voiceCallback)
+ } else {
+ Logger.d(TAG, "不使用本地语音播报,直接开始发起求助")
+ realSeekHelp()
+ }
}
}
}
@@ -144,12 +147,12 @@ object SeekHelpManager {
// 请求故障求助接口
val seekRequest = SeekRequest(DeviceUtil.getSn())
val param = mutableMapOf("data" to seekRequest.getJson())
-
+
ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) {
override fun onSuccess(o: BaseData?) {
super.onSuccess(o)
// 接口请求成功,内部同步v2x状态,通知adas,改变自车图标
- ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog",true)
+ ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", true)
isSeekHelp = true
aiAssist?.speakTTSVoice("已发布求助信息,将为你通知其他车主")
toast("已发布求助信息,将为你通知其他车主")
@@ -157,6 +160,7 @@ object SeekHelpManager {
seekListenerList.forEach {
it.onSeekHelpSuccess()
}
+ isSeeking = false
}
override fun onError(e: Throwable) {
@@ -165,6 +169,7 @@ object SeekHelpManager {
Logger.e(TAG, "上报求助失败,网络异常")
e.printStackTrace()
seekHelpFail()
+ isSeeking = false
}
override fun onError(message: String?, code: Int) {
@@ -172,6 +177,7 @@ object SeekHelpManager {
// 接口请求失败
Logger.e(TAG, "上报求助失败")
seekHelpFail()
+ isSeeking = false
}
})
}
@@ -185,4 +191,30 @@ object SeekHelpManager {
aiAssist?.speakTTSVoice("求助上报失败,请稍后重试")
}
+ fun debugCancelSeek() {
+ val seekRequest = SeekRequest(DeviceUtil.getSn(), 0)
+ val param = mutableMapOf("data" to seekRequest.getJson())
+ ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) {
+ override fun onSuccess(o: BaseData?) {
+ super.onSuccess(o)
+ // 接口请求成功,内部同步v2x状态,通知adas,改变自车图标
+ ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", false)
+ isSeekHelp = false
+ }
+
+ override fun onError(e: Throwable) {
+ super.onError(e)
+ // 接口请求失败
+ Logger.e(TAG, "上报求助失败,网络异常")
+ e.printStackTrace()
+ }
+
+ override fun onError(message: String?, code: Int) {
+ super.onError(message, code)
+ // 接口请求失败
+ Logger.e(TAG, "上报求助失败")
+ }
+ })
+ }
+
}
\ No newline at end of file
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
index 829f3c866b..b2c827db12 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
@@ -8,6 +8,7 @@ import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.intent.IMogoIntentManager;
@@ -170,4 +171,11 @@ public interface IMogoServiceApis extends IProvider {
* @return
*/
IMogoLauncher getLauncherApi();
+
+ /**
+ * 获取入口按钮控制器
+ *
+ * @return
+ */
+ IMogoEntranceButtonController getEntranceButtonController();
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
index c422f05b1a..ca78173ea3 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
@@ -160,4 +160,10 @@ public class MogoServicePaths {
*/
@Deprecated
public static final String PATH_LAUNCHER_API = "/launcher/api";
+
+ /**
+ * 入口按钮
+ */
+ @Deprecated
+ public static final String PATH_ENTRANCE_BUTTON_API = "/entrancebutton/api";
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/ButtonIndex.java b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/ButtonIndex.java
new file mode 100644
index 0000000000..1c4e955019
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/ButtonIndex.java
@@ -0,0 +1,20 @@
+package com.mogo.service.entrance;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-16
+ *
+ * 入口按钮顺序:从上到下
+ */
+public enum ButtonIndex {
+
+ /**
+ * 第一个
+ */
+ BUTTON1,
+
+ /**
+ * 第二个
+ */
+ BUTTON2;
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java
new file mode 100644
index 0000000000..254109c16b
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java
@@ -0,0 +1,22 @@
+package com.mogo.service.entrance;
+
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.template.IProvider;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-16
+ *
+ * 入口按钮
+ */
+public interface IMogoEntranceButtonController extends IProvider {
+
+ /**
+ * 获取入口按钮实例
+ *
+ * @param index
+ * @return
+ */
+ TextView getButton( ButtonIndex index );
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
index b23dddd85a..462e799b7a 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
@@ -13,6 +13,7 @@ import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.impl.analytics.impl.MogoAnalyticsImpl;
@@ -153,6 +154,11 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoLauncher.class, MogoServicePaths.PATH_LAUNCHER_API );
}
+ @Override
+ public IMogoEntranceButtonController getEntranceButtonController() {
+ return getApiInstance( IMogoEntranceButtonController.class, MogoServicePaths.PATH_ENTRANCE_BUTTON_API );
+ }
+
private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
diff --git a/upload.sh b/upload.sh
index 317bc3cf79..69ea42b918 100755
--- a/upload.sh
+++ b/upload.sh
@@ -15,11 +15,11 @@
./gradlew :modules:mogo-module-share:clean :modules:mogo-module-share:uploadArchives
./gradlew :modules:mogo-module-authorize:clean :modules:mogo-module-authorize:uploadArchives
./gradlew :modules:mogo-module-extensions:clean :modules:mogo-module-extensions:uploadArchives
+./gradlew :modules:mogo-module-gps-simulator:clean :modules:mogo-module-gps-simulator:uploadArchives
./gradlew :modules:mogo-module-search:clean :modules:mogo-module-search:uploadArchives
./gradlew :modules:mogo-module-main:clean :modules:mogo-module-main:uploadArchives
./gradlew :modules:mogo-module-back:clean :modules:mogo-module-back:uploadArchives
./gradlew :modules:mogo-module-guide:clean :modules:mogo-module-guide:uploadArchives
-./gradlew :modules:mogo-module-gps-simulator:clean :modules:mogo-module-gps-simulator:uploadArchives
./gradlew :modules:mogo-module-gps-simulator-debug:clean :modules:mogo-module-gps-simulator-debug:uploadArchives
./gradlew :modules:mogo-module-gps-simulator-noop:clean :modules:mogo-module-gps-simulator-noop:uploadArchives