This commit is contained in:
wangcongtao
2020-10-27 11:57:34 +08:00
parent 19c4859a71
commit 83a004f62b
31 changed files with 705 additions and 32 deletions

View File

@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@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() );
}
}

View File

@@ -0,0 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mogo.module.machine.vision">
<application>
<service
android:name=".MachineVisionMapService"
android:exported="false"
android:process=":machinevision" />
</application>
</manifest>

View File

@@ -0,0 +1,15 @@
package com.mogo.module.machine.vision;
import com.mogo.service.module.IMogoModuleProvider;
public
/**
* @author congtaowang
* @since 2020/10/27
* <p>
* 描述
*/
interface IMogoMachineVisionProvider extends IMogoModuleProvider {
String path = "/machinevision/api";
}

View File

@@ -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();
}
}
}

View File

@@ -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." );
}
}
}

View File

@@ -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 ) {
}
}

View File

@@ -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 );
}
}
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mogo.module.machine.vision.MachineVisionMapView
android:id="@+id/module_mvision_map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="module_mvision_view_width">600px</dimen>
<dimen name="module_mvision_view_height">480px</dimen>
<dimen name="module_mvision_view_x">300px</dimen>
<dimen name="module_mvision_view_y">100px</dimen>
</resources>

View File

@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals( 4, 2 + 2 );
}
}