diff --git a/.idea/misc.xml b/.idea/misc.xml index cd77a1f062..21e99e2dc0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java b/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java deleted file mode 100644 index 3588462fba..0000000000 --- a/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.base.services.apk; - -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.base.services.apk.test", appContext.getPackageName() ); - } -} \ No newline at end of file diff --git a/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java b/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java deleted file mode 100644 index 7b81601a73..0000000000 --- a/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.base.services.apk; - -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/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java index a551c302bc..89dfeac7f4 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java @@ -26,6 +26,7 @@ import java.util.Set; public class ALocationClient implements IMogoLocationClient { private static final String TAG = "LocationClient"; + private final Context mContext; private Set< IMogoLocationListener > sListeners = new HashSet<>( 10 ); private MogoLocation mLastLocation; @@ -34,12 +35,7 @@ public class ALocationClient implements IMogoLocationClient { private boolean mIsDestroyed = false; public ALocationClient( Context context ) { - mClient = new AMapLocationClient( context ); - mClient.setLocationListener( mListener ); - mLastLocation = ObjectUtils.fromAMap( mClient.getLastKnownLocation() ); - if ( mLastLocation == null ) { - mLastLocation = new MogoLocation(); - } + mContext = context; } private AMapLocationClient mClient; @@ -51,11 +47,12 @@ public class ALocationClient implements IMogoLocationClient { @Override public void start( long interval ) { - if ( mIsDestroyed ) { - destroyWarming(); - return; + if ( mClient == null ) { + mClient = new AMapLocationClient( mContext ); + mClient.setLocationListener( mListener ); + mLastLocation = ObjectUtils.fromAMap( mClient.getLastKnownLocation() ); } - if ( mClient != null ) { + if ( !mClient.isStarted() ) { AMapLocationClientOption option = new AMapLocationClientOption(); option.setLocationMode( AMapLocationClientOption.AMapLocationMode.Hight_Accuracy ); option.setNeedAddress( true ); @@ -109,6 +106,9 @@ public class ALocationClient implements IMogoLocationClient { destroyWarming(); return null; } + if ( mLastLocation == null ) { + mLastLocation = new MogoLocation(); + } return mLastLocation; } @@ -140,7 +140,7 @@ public class ALocationClient implements IMogoLocationClient { aMapLocation.getLongitude() == 0.0D ) { return; } - Trace.beginSection("timer.onLocationChanged"); + Trace.beginSection( "timer.onLocationChanged" ); mLastLocation = ObjectUtils.fromAMap( aMapLocation ); synchronized ( sListeners ) { Iterator< IMogoLocationListener > listenerIterator = sListeners.iterator(); diff --git a/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt b/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt deleted file mode 100644 index d5b381bd09..0000000000 --- a/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.module.authorize - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.mogo.module.authorize.test", appContext.packageName) - } -} diff --git a/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt b/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt deleted file mode 100644 index f2b7332da6..0000000000 --- a/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.module.authorize - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/modules/mogo-module-event-panel-noop/src/androidTest/java/com/zhidao/mogo/module/event/panel/ExampleInstrumentedTest.kt b/modules/mogo-module-event-panel-noop/src/androidTest/java/com/zhidao/mogo/module/event/panel/ExampleInstrumentedTest.kt deleted file mode 100644 index 6a8c2bfcea..0000000000 --- a/modules/mogo-module-event-panel-noop/src/androidTest/java/com/zhidao/mogo/module/event/panel/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.mogo.module.event.panel - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.zhidao.mogo.module.event.panel.test", appContext.packageName) - } -} \ No newline at end of file diff --git a/modules/mogo-module-event-panel-noop/src/test/java/com/zhidao/mogo/module/event/panel/ExampleUnitTest.kt b/modules/mogo-module-event-panel-noop/src/test/java/com/zhidao/mogo/module/event/panel/ExampleUnitTest.kt deleted file mode 100644 index f41429e9e1..0000000000 --- a/modules/mogo-module-event-panel-noop/src/test/java/com/zhidao/mogo/module/event/panel/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.zhidao.mogo.module.event.panel - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ 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 ab39bd41b2..d177f3106a 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 @@ -368,6 +368,7 @@ public class EntranceFragment extends MvpFragment implements } else if ( type == 1 ) { zoomMap( opera_type == 0 ); } else if ( type == 2 ) { -// mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent ); onChangeCameraMode( opera_type ); } } else if ( key_type == 10048 ) { @@ -157,6 +156,7 @@ public class MapPresenter extends Presenter< MapView > implements mLauncher.backToLauncher( getContext() ); } }, 500L ); + mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent ); return; } onStopNaviInternal(); @@ -183,6 +183,7 @@ public class MapPresenter extends Presenter< MapView > implements mMogoMapService.getNavi( getContext() ).reCalculateRoute( config ); } + mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent ); } }; diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index 79950ef3c4..2c026c357f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -2,57 +2,22 @@ package com.mogo.module.service; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.text.TextUtils; -import android.view.MotionEvent; import android.view.View; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.facade.annotation.Route; -import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.AbsMogoApplication; -import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; -import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarkerClickListener; -import com.mogo.map.marker.IMogoMarkerManager; -import com.mogo.map.model.MogoPoi; import com.mogo.map.navi.IMogoNaviListener; -import com.mogo.map.navi.MogoNaviInfo; -import com.mogo.map.navi.MogoTraffic; -import com.mogo.map.uicontroller.EnumMapUI; -import com.mogo.map.uicontroller.IMogoMapUIController; -import com.mogo.module.common.MogoModule; -import com.mogo.module.common.MogoModulePaths; -import com.mogo.module.service.network.RefreshCallback; -import com.mogo.module.service.network.RefreshModel; -import com.mogo.module.service.receiver.MogoReceiver; -import com.mogo.module.service.refresh.AutoRefreshStrategy; -import com.mogo.module.service.refresh.CustomRefreshStrategy; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.intent.IMogoIntentListener; -import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; -import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.ModuleType; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.IMogoStatusManager; -import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.logger.Logger; - -import java.util.Iterator; -import java.util.List; /** * @author congtaowang @@ -128,6 +93,7 @@ public class MogoServiceProvider implements IMogoModuleProvider { @Override public void init( Context context ) { + MarkerServiceHandler.init( context ); UiThreadHandler.postDelayed( () -> { MogoServices.getInstance().init( AbsMogoApplication.getApp() ); }, 5_000L ); 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 0acfe90eae..a019a6189e 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 @@ -56,6 +56,7 @@ import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.TipToast; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; @@ -273,12 +274,13 @@ public class MogoServices implements IMogoMapListener, private boolean mIsMainPageFirstResume = true; + private boolean mIsFirstAccOn = true; + public void init( Context context ) { mContext = context; initWorkThread(); - MarkerServiceHandler.init( mContext ); mRefreshModel = new RefreshModel( context ); mMogoMapService = MarkerServiceHandler.getMapService(); mUiController = mMogoMapService.getMapUIController(); @@ -366,6 +368,7 @@ public class MogoServices implements IMogoMapListener, if ( msg.obj instanceof RefreshObject ) { RefreshObject ro = ( ( RefreshObject ) msg.obj ); if ( ro.mLonLat == null ) { + Logger.w( TAG, "lonLat is null." ); return; } mRefreshModel.refreshData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback ); @@ -619,9 +622,7 @@ public class MogoServices implements IMogoMapListener, // 自动刷新触发 final MogoLatLng point = new MogoLatLng( location.getLatitude(), location.getLongitude() ); if ( mLastAutoRefreshLocation == null ) { - mLastAutoRefreshLocation = point; - mLoopRequest = true; - notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); + startFirstLocationRequest( point ); return; } float distance = Utils.calculateLineDistance( mLastAutoRefreshLocation, point ); @@ -635,8 +636,27 @@ public class MogoServices implements IMogoMapListener, } } + /** + * 首次定位成功后,执行道路事件的刷新 + * + * @param point + */ + private void startFirstLocationRequest( MogoLatLng point ) { + mLastAutoRefreshLocation = point; + mLoopRequest = true; + notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); + } + @Override public void onCarLocationChanged2( Location latLng ) { + if ( latLng == null ) { + return; + } + // poi 定位无法获取时,使用该定位 + if ( mLastAutoRefreshLocation == null ) { + MogoLatLng point = new MogoLatLng( latLng.getLatitude(), latLng.getLongitude() ); + startFirstLocationRequest( point ); + } } @Override @@ -717,18 +737,20 @@ public class MogoServices implements IMogoMapListener, break; case ACC_STATUS: if ( isTrue ) { + if ( mIsFirstAccOn ) { + mIsFirstAccOn = false; + return; + } initLocationServiceProcess( mContext ); mADASController.showADAS(); - refreshStrategy(); - MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).stop(); + MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).start(); + MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers(); + UiThreadHandler.postDelayed( () -> { + refreshStrategy(); + }, 3_000L ); } else { - try { - MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers(); - MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).start(); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - refreshStrategy(); + MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).stop(); + MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers(); } break; } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java index 5a9def8162..38a6de48b4 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java @@ -3,10 +3,11 @@ package com.mogo.module.service.intent; import android.content.Context; import android.content.Intent; +import com.mogo.module.common.utils.CarSeries; import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.ServiceConst; import com.mogo.module.service.receiver.AccStatusReceiver; -import com.mogo.module.service.receiver.MogoReceiver; +import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; public @@ -18,16 +19,21 @@ public */ class AccStatusIntentHandler implements IntentHandler { + public static final byte ACC_ON = 1; + public static final byte ACC_OFF = 0; + public static final byte ACC_OFF_DELAY = 3; + private static final String TAG = "AccStatusIntentHandler"; private static volatile AccStatusIntentHandler sInstance; - private AccStatusIntentHandler(){} + private AccStatusIntentHandler() { + } - public static AccStatusIntentHandler getInstance(){ - if( sInstance == null ){ - synchronized( AccStatusIntentHandler.class ) { - if( sInstance == null ){ + public static AccStatusIntentHandler getInstance() { + if ( sInstance == null ) { + synchronized ( AccStatusIntentHandler.class ) { + if ( sInstance == null ) { sInstance = new AccStatusIntentHandler(); } } @@ -35,7 +41,7 @@ class AccStatusIntentHandler implements IntentHandler { return sInstance; } - public synchronized void release(){ + public synchronized void release() { sInstance = null; } @@ -43,15 +49,26 @@ class AccStatusIntentHandler implements IntentHandler { public void handle( Context context, Intent intent ) { String action = intent.getAction(); if ( Intent.ACTION_POWER_CONNECTED.equals( action ) ) { - MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, true ); - Logger.d( TAG, "acc status: %s", true ); + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, true ); + Logger.d( TAG, "acc status: %s", true ); + } } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( action ) ) { - MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, false ); - Logger.d( TAG, "acc status: %s", false ); + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, false ); + Logger.d( TAG, "acc status: %s", false ); + } } else if ( AccStatusReceiver.ACTION_NWD_ACC.equals( action ) ) { - int state = intent.getByteExtra( AccStatusReceiver.PARAM_ACC_STATUS, ( byte ) 0 ); - Logger.d( TAG, "acc status: %s", state == 1 ); - MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, state == 1 ); + int state = intent.getByteExtra( AccStatusReceiver.PARAM_ACC_STATUS, ACC_OFF ); + if ( state != ACC_OFF && state != ACC_ON && state != ACC_OFF_DELAY ) { + return; + } + boolean accOn = state == ACC_ON; + if ( MarkerServiceHandler.getMogoStatusManager().isAccOn() == accOn ) { + return; + } + Logger.d( TAG, "acc status: %s", state ); + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, accOn ); } } } 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 6c2493af4a..062a24a173 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 @@ -77,7 +77,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, private Rect mMarkerDisplayBounds; private MapMarkerManager() { - mContext = AbsMogoApplication.getApp(); } public static synchronized MapMarkerManager getInstance() { @@ -96,6 +95,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param context */ public void init( Context context ) { + + if ( mContext != null ) { + return; + } + + mContext = context.getApplicationContext(); mRefreshModel = new RefreshModel( mContext ); // 长连接 diff --git a/modules/mogo-module-splash-noop/src/androidTest/java/com/zhidao/mogo/module/splash/ExampleInstrumentedTest.kt b/modules/mogo-module-splash-noop/src/androidTest/java/com/zhidao/mogo/module/splash/ExampleInstrumentedTest.kt deleted file mode 100644 index b0d35cfd07..0000000000 --- a/modules/mogo-module-splash-noop/src/androidTest/java/com/zhidao/mogo/module/splash/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.mogo.module.splash - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.zhidao.mogo.module.byd.test", appContext.packageName) - } -} \ No newline at end of file diff --git a/modules/mogo-module-splash-noop/src/test/java/com/zhidao/mogo/module/splash/ExampleUnitTest.kt b/modules/mogo-module-splash-noop/src/test/java/com/zhidao/mogo/module/splash/ExampleUnitTest.kt deleted file mode 100644 index 35aae2dff8..0000000000 --- a/modules/mogo-module-splash-noop/src/test/java/com/zhidao/mogo/module/splash/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.zhidao.mogo.module.splash - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file