();
locationResult.sn = com.mogo.commons.network.Utils.getSn();
- locationResult.mortonCode = MortonCode.wrapEncodeMorton( locationResult.lon, locationResult.lat );
+ locationResult.mortonCode = MortonCode.wrapEncodeMorton( locationResult.lastCoordinate.lon, locationResult.lastCoordinate.lat );
}
List< ADASRecognizedResult > recognizedResults = MarkerServiceHandler.getADASController().getLastADASRecognizedResult();
OnePerSecondSendContent content = new OnePerSecondSendContent();
content.self = locationResult;
content.adas = recognizedResults;
- //todo 通过 websocket 发送内容
+
Logger.d( TAG, GsonUtil.jsonFromObject( content ) );
+ MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext ).sendMsg( content, new IMogoOnWebSocketMessageListener() {
+ @Override
+ public WebSocketMsgType getDownLinkType() {
+ return null;
+ }
+
+ @Override
+ public WebSocketMsgType getUpLinkType() {
+ return WebSocketMsgType.MSG_TYPE_UPLINK_CAR_DATA;
+ }
+ } );
}
private void initWorkThread() {
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
index f78e32f048..4f3d9bbb77 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
@@ -13,7 +13,7 @@ public
abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
@Override
- public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
+ public final void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
switch ( descriptor ) {
case USER_INTERACTED:
onUserInteracted( isTrue );
@@ -30,6 +30,9 @@ abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
case ACC_STATUS:
onAccStatusChanged( isTrue );
break;
+ case VR_MODE:
+ onVrModeChanged( isTrue );
+ break;
}
}
@@ -42,4 +45,6 @@ abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
public abstract void onSeekHelpingStatusChanged( boolean isSeekingHelping );
public abstract void onAccStatusChanged( boolean accOn );
+
+ public abstract void onVrModeChanged( boolean isVrMode );
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
index 2f24d3757c..dc4f7a0a21 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
@@ -25,6 +25,7 @@ import com.mogo.module.common.entity.MarkerOnlineCar;
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.common.entity.MogoSnapshotSetData;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.R;
import com.mogo.module.service.ServiceConst;
@@ -32,8 +33,11 @@ import com.mogo.module.service.Utils;
import com.mogo.module.service.network.RefreshCallback;
import com.mogo.module.service.network.RefreshModel;
import com.mogo.module.service.utils.ViewUtils;
+import com.mogo.module.service.vrmode.VrModeController;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
import com.mogo.service.connection.IMogoOnMessageListener;
+import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
+import com.mogo.service.connection.WebSocketMsgType;
import com.mogo.service.module.IMogoBizActionDoneListener;
import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.ThreadPoolService;
@@ -128,6 +132,33 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
}
} );
+
+ MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext )
+ .registerOnWebSocketMessageListener( new IMogoOnWebSocketMessageListener< MogoSnapshotSetData >() {
+
+ @Override
+ public WebSocketMsgType getUpLinkType() {
+ return null;
+ }
+
+ @Override
+ public WebSocketMsgType getDownLinkType() {
+ return WebSocketMsgType.MSG_TYPE_DOWNLINK_CAR_DATA;
+ }
+
+ @Override
+ public void onMsgReceived( MogoSnapshotSetData data ) {
+ if ( data == null ) {
+ return;
+ }
+ VrModeController.getInstance().renderMogoSnapshotSetData( data );
+ }
+
+ @Override
+ public void onError( String errorMsg ) {
+
+ }
+ } );
}
/**
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java
new file mode 100644
index 0000000000..40c465e2b8
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java
@@ -0,0 +1,109 @@
+package com.mogo.module.service.vrmode;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.common.machinevision.IMachineVisionInterface;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+class VrModeController {
+
+ private static final String TAG = "VrModeController";
+
+ private static volatile VrModeController sInstance;
+ private volatile IMachineVisionInterface mMachineVisionInterface;
+ private ServiceConnection mServiceConnection;
+
+ private VrModeController() {
+ }
+
+ public static VrModeController getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( VrModeController.class ) {
+ if ( sInstance == null ) {
+ sInstance = new VrModeController();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ public void onVrModeChanged( boolean isVrMode ) {
+ if ( isVrMode ) {
+ bindVrModeService();
+ } else {
+ unbindVrModeService();
+ }
+ }
+
+ private void bindVrModeService() {
+ Intent intent = new Intent();
+ intent.setComponent( new ComponentName( "com.mogo.launcher.f", "com.mogo.module.machine.vision.MachineVisionMapService" ) );
+ AbsMogoApplication.getApp().bindService( intent, mServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected( ComponentName name, IBinder service ) {
+ mMachineVisionInterface = IMachineVisionInterface.Stub.asInterface( service );
+ }
+
+ @Override
+ public void onServiceDisconnected( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+
+ @Override
+ public void onBindingDied( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+
+ @Override
+ public void onNullBinding( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+ }, Context.BIND_AUTO_CREATE );
+ }
+
+ private void unbindVrModeService() {
+ if ( mServiceConnection != null ) {
+ try {
+ AbsMogoApplication.getApp().unbindService( mServiceConnection );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "unbindVrModeService" );
+ }
+ }
+ }
+
+ public void renderMogoSnapshotSetData( MogoSnapshotSetData data ) {
+ if ( data == null ) {
+ return;
+ }
+ if ( mMachineVisionInterface == null ) {
+ return;
+ }
+ try {
+ mMachineVisionInterface.postData( data );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "postData" );
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java
index 230e86329f..e31fb2398a 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java
@@ -1,5 +1,7 @@
package com.mogo.module.service.websocket;
+import java.util.List;
+
public
/**
* @author congtaowang
@@ -10,12 +12,18 @@ public
class LocationResult {
public String sn;
- public double lat;
- public double lon;
- public double heading;
- public long systemTime;
- public long satelliteTime;
- public double alt;
- public double speed;
public long mortonCode;
+
+ public LocationInfo lastCoordinate;
+ public List< LocationInfo > coordinates;
+
+ public static class LocationInfo {
+ public double lat;
+ public double lon;
+ public double heading;
+ public long systemTime;
+ public long satelliteTime;
+ public double alt;
+ public double speed;
+ }
}
diff --git a/modules/mogo-modules-mvision/.gitignore b/modules/mogo-modules-mvision/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/modules/mogo-modules-mvision/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build.gradle b/modules/mogo-modules-mvision/build.gradle
new file mode 100644
index 0000000000..ebff9c6729
--- /dev/null
+++ b/modules/mogo-modules-mvision/build.gradle
@@ -0,0 +1,60 @@
+apply plugin: 'com.android.library'
+apply plugin: 'com.alibaba.arouter'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName()]
+ }
+ }
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ targetCompatibility 1.8
+ sourceCompatibility 1.8
+ }
+
+}
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+ if (Boolean.valueOf(RELEASE)) {
+ api rootProject.ext.dependencies.mogomap
+ api rootProject.ext.dependencies.mogomapapi
+ api rootProject.ext.dependencies.mogoutils
+ api rootProject.ext.dependencies.mogocommons
+ api rootProject.ext.dependencies.mogoserviceapi
+ implementation rootProject.ext.dependencies.modulecommon
+ } else {
+ api project(":libraries:mogo-map")
+ api project(":libraries:mogo-map-api")
+ api project(":foudations:mogo-utils")
+ api project(":foudations:mogo-commons")
+ api project(':services:mogo-service-api')
+ implementation project(':modules:mogo-module-common')
+ }
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/modules/mogo-modules-mvision/consumer-rules.pro b/modules/mogo-modules-mvision/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-modules-mvision/gradle.properties b/modules/mogo-modules-mvision/gradle.properties
new file mode 100644
index 0000000000..d905dbfdd1
--- /dev/null
+++ b/modules/mogo-modules-mvision/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-machine-vision
+VERSION_CODE=1
diff --git a/modules/mogo-modules-mvision/proguard-rules.pro b/modules/mogo-modules-mvision/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/modules/mogo-modules-mvision/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java b/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java
new file mode 100644
index 0000000000..3b66fb5c01
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.mogo.module.machine.vision;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith( AndroidJUnit4.class )
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals( "com.mogo.module.machine.vision.test", appContext.getPackageName() );
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/main/AndroidManifest.xml b/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..4188fe3b46
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java
new file mode 100644
index 0000000000..f87f55e13a
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java
@@ -0,0 +1,15 @@
+package com.mogo.module.machine.vision;
+
+import com.mogo.service.module.IMogoModuleProvider;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+interface IMogoMachineVisionProvider extends IMogoModuleProvider {
+
+ String path = "/machinevision/api";
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java
new file mode 100644
index 0000000000..670be37437
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java
@@ -0,0 +1,110 @@
+package com.mogo.module.machine.vision;
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.view.Gravity;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.common.machinevision.IMachineVisionInterface;
+import com.mogo.module.common.wm.WindowManagerView;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/26
+ *
+ * 描述
+ */
+class MachineVisionMapService extends Service {
+
+ private static final String TAG = "MachineVisionMapService";
+
+ private IBinder mBinder;
+
+ private WindowManagerView mMachineVisionMapViewManager;
+
+ @Nullable
+ @Override
+ public IBinder onBind( Intent intent ) {
+ mBinder = new MachineVisionMapServiceBinder();
+ addMachineVisionMapView();
+ Logger.d( TAG, "onBind" );
+ return mBinder;
+ }
+
+ @Override
+ public boolean onUnbind( Intent intent ) {
+ if ( mMachineVisionMapViewManager != null && mMachineVisionMapViewManager.isShowing() ) {
+ mMachineVisionMapViewManager.dismiss();
+ }
+ mMachineVisionMapViewManager = null;
+ Logger.d( TAG, "onUnbind" );
+ return true;
+ }
+
+ @Override
+ public void onRebind( Intent intent ) {
+ super.onRebind( intent );
+ addMachineVisionMapView();
+ Logger.d( TAG, "onRebind" );
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ public class MachineVisionMapServiceBinder extends IMachineVisionInterface.Stub {
+
+ private static final String TAG = "MachineVisionMapServiceBinder";
+
+ @Override
+ public void postData( MogoSnapshotSetData data ) throws RemoteException {
+ Logger.d( TAG, "current Thread:%s", Thread.currentThread().getName() );
+ MachineVisionMapViewHandler.getInstance().renderSnapshotSetData( data );
+ }
+
+ @Override
+ public void linkToDeath( @NonNull DeathRecipient recipient, int flags ) {
+ super.linkToDeath( recipient, flags );
+ }
+
+ @Override
+ public boolean unlinkToDeath( @NonNull DeathRecipient recipient, int flags ) {
+ return super.unlinkToDeath( recipient, flags );
+ }
+ }
+
+ private void addMachineVisionMapView() {
+ mMachineVisionMapViewManager = new WindowManagerView.Builder( getApplicationContext() )
+ .contentView( R.layout.module_mvision_layout_view )
+ .size(
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_width ),
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_height )
+ )
+ .position(
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_x ),
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_y )
+ )
+ .gravity( Gravity.TOP | Gravity.LEFT )
+ .showInWindowManager();
+
+ MachineVisionMapViewHandler.getInstance().setMachineVisionMapView( mMachineVisionMapViewManager.findViewById( R.id.module_mvision_map_view ) );
+ mMachineVisionMapViewManager.show();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if ( mMachineVisionMapViewManager != null ) {
+ mMachineVisionMapViewManager.dismiss();
+ }
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java
new file mode 100644
index 0000000000..3bad7b9d22
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java
@@ -0,0 +1,53 @@
+package com.mogo.module.machine.vision;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import androidx.annotation.Nullable;
+
+import com.mogo.map.IMogoMapView;
+import com.mogo.map.impl.custom.CustomMapView;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/26
+ *
+ * 描述
+ */
+class MachineVisionMapView extends FrameLayout {
+
+ private static final String TAG = "MachineVisionMapView";
+
+ public MachineVisionMapView( Context context ) {
+ this( context, null );
+ }
+
+ public MachineVisionMapView( Context context, @Nullable AttributeSet attrs ) {
+ this( context, attrs, 0 );
+ }
+
+ public MachineVisionMapView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) {
+ super( context, attrs, defStyleAttr );
+ addMapView();
+ }
+
+ private void addMapView() {
+ IMogoMapView machineMapView = new CustomMapView().create( getContext() );
+ if ( machineMapView != null ) {
+ final View mapView = machineMapView.getMapView();
+ if ( mapView != null ) {
+ addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) );
+ } else {
+ Logger.e( TAG, "create MapView instance failed." );
+ }
+ } else {
+ Logger.e( TAG, "create IMogoMapView instance failed." );
+ }
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java
new file mode 100644
index 0000000000..a551e7f172
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java
@@ -0,0 +1,49 @@
+package com.mogo.module.machine.vision;
+
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+class MachineVisionMapViewHandler {
+
+ private static volatile MachineVisionMapViewHandler sInstance;
+
+ private MachineVisionMapViewHandler() {
+ }
+
+ public static MachineVisionMapViewHandler getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MachineVisionMapViewHandler.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MachineVisionMapViewHandler();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ mMachineVisionMapView = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private MachineVisionMapView mMachineVisionMapView;
+
+ public void setMachineVisionMapView( MachineVisionMapView mMachineVisionMapView ) {
+ this.mMachineVisionMapView = mMachineVisionMapView;
+ }
+
+ public void renderSnapshotSetData( MogoSnapshotSetData data ) {
+
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java
new file mode 100644
index 0000000000..a33c945ccc
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java
@@ -0,0 +1,61 @@
+package com.mogo.module.machine.vision;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.commons.AbsMogoApplication;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+@Route( path = IMogoMachineVisionProvider.path)
+class MogoMachineVisionProvider implements IMogoMachineVisionProvider {
+
+ private static final String TAG = "MogoMachineVisionProvider";
+
+ private Intent mMachineVisionServiceIntent;
+
+ @Override
+ public Fragment createFragment( Context context, Bundle data ) {
+ return null;
+ }
+
+ @Override
+ public View createView( Context context ) {
+ return null;
+ }
+
+ @NonNull
+ @Override
+ public String getModuleName() {
+ return null;
+ }
+
+ @Override
+ public int getType() {
+ return 0;
+ }
+
+ @Override
+ public void init( Context context ) {
+ mMachineVisionServiceIntent = new Intent( context, MachineVisionMapService.class );
+ context.startService( mMachineVisionServiceIntent );
+ }
+
+ @Override
+ public void onDestroy() {
+ if ( mMachineVisionServiceIntent != null ) {
+ AbsMogoApplication.getApp().stopService( mMachineVisionServiceIntent );
+ }
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml b/modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml
new file mode 100644
index 0000000000..b37adc5822
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml
new file mode 100644
index 0000000000..1182c32916
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml
@@ -0,0 +1,7 @@
+
+
+ 600px
+ 480px
+ 300px
+ 100px
+
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java b/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java
new file mode 100644
index 0000000000..fefd93d5cd
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.mogo.module.machine.vision;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals( 4, 2 + 2 );
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index a72b2bd046..9d2abf0197 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,4 @@
+include ':modules:mogo-modules-mvision'
include ':foudations:mogo-base-websocket-sdk'
include ':tts:tts-base'
include ':tts:tts-di'