diff --git a/.idea/misc.xml b/.idea/misc.xml index 703e5d4b89..8a8f75bfe2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 4f152b1faa..4d3fc0e9b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,12 +16,14 @@ android { arguments = [AROUTER_MODULE_NAME: project.getName()] } } - externalNativeBuild { - ndk { - // 设置支持的SO库架构 - abiFilters 'armeabi' - } - } + + multiDexEnabled true +// externalNativeBuild { +// ndk { +// // 设置支持的SO库架构 +// abiFilters 'armeabi' +// } +// } } signingConfigs { release { @@ -51,6 +53,7 @@ dependencies { debugImplementation rootProject.ext.dependencies.leakcanary testImplementation rootProject.ext.dependencies.leakcanary releaseImplementation rootProject.ext.dependencies.leakcanarynoop + releaseImplementation rootProject.ext.dependencies.androidxmultidex implementation project(':modules:mogo-module-main') implementation project(':foudations:mogo-commons') } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e55f301423..91d2aa2d11 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,10 +13,6 @@ android:supportsRtl="true" android:theme="@style/AppTheme.App"> - - \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index b079298cf4..906b5259e6 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,6 +1,9 @@ package com.mogo.launcher; import android.app.Application; +import android.content.Context; + +import androidx.multidex.MultiDex; import com.mogo.commons.AbsMogoApplication; @@ -16,4 +19,10 @@ public class MogoApplication extends AbsMogoApplication { public void onCreate() { super.onCreate(); } + + @Override + protected void attachBaseContext( Context base ) { + super.attachBaseContext( base ); + MultiDex.install( base ); + } } diff --git a/build.gradle b/build.gradle index 9d1ce53a72..f672c71300 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,12 @@ allprojects { } google() jcenter() +// flatDir { + // 由于Library module中引用了 youkuplayer 库的 aar,在多 module 的情况下, + // 其他的module编译会报错,所以需要在所有工程的repositories + // 下把Library module中的libs目录添加到依赖关系中 +// dirs project(':libraries:map-baidu').file('libs') +// } } } diff --git a/config.gradle b/config.gradle index 0fffb1fc4e..a1ee099928 100644 --- a/config.gradle +++ b/config.gradle @@ -13,6 +13,7 @@ ext { // androidx androidxappcompat : "androidx.appcompat:appcompat:1.0.2", androidxconstraintlayout: "androidx.constraintlayout:constraintlayout:1.1.3", + androidxmultidex : "androidx.multidex:multidex:2.0.1", // 测试 junit : "junit:junit:4.12", androidxjunit : "androidx.test.ext:junit:1.1.0", diff --git a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewFragment.java b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewFragment.java index 8773062cc5..fded5a6ebb 100644 --- a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewFragment.java +++ b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewFragment.java @@ -5,6 +5,7 @@ import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; @@ -17,28 +18,31 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; +import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.location.ILocationListener; +import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; +import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.model.MogoPoi; +import com.mogo.map.navi.IMogoNavi; import com.mogo.map.search.geo.MogoPoiItem; import com.mogo.map.search.poisearch.IMogoPoiSearch; import com.mogo.map.search.poisearch.IMogoPoiSearchListener; import com.mogo.map.search.poisearch.MogoPoiResult; import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; -import com.mogo.module.common.MogoModulePaths; +import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.service.MogoServicePaths; -import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.map.IMogoMapService; +import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Random; @@ -55,7 +59,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > IMogoModuleLifecycle, IMogoMapListener, IMogoPoiSearchListener, - ILocationListener { + IMogoLocationListener { private static final String TAG = "demo.DemoCardViewProvider"; @@ -66,12 +70,16 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > private Bitmap mClickedMarkerIcon; private TextView mLocInfo; private TextView mLoc; + private Button m2D3D; private IMogoMarker mLastClickedMarker; private IMogoMapService mMapService; private IMogoPoiSearch mPoiSearch; private IMogoLocationClient mLocationClient; + private IMogoMarkerManager mMarkerManager; + private IMogoNavi mNavi; + private IMogoMapUIController mMapUIController; private DemoInfoWindowAdapter mDemoInfoWindowAdapter; @@ -88,6 +96,11 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > mPoiSearch.setPoiSearchListener( this ); mLocationClient = mMapService.getSingletonLocationClient( getContext() ); mLocationClient.addLocationListener( this ); + mMarkerManager = mMapService.getMarkerManager( getContext() ); + mNavi = mMapService.getNavi( getContext() ); + mMapUIController = mMapService.getMapUIController(); + + m2D3D = findViewById( R.id.demo_module_id_2d3d ); mLocInfo = findViewById( R.id.demo_module_id_loc_info ); mLoc = findViewById( R.id.demo_module_id_loc ); @@ -100,10 +113,10 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > } ); - mDemoInfoWindowAdapter = new DemoInfoWindowAdapter( getContext() ); + mDemoInfoWindowAdapter = new DemoInfoWindowAdapter( getContext(), mNavi ); - mMarkerIcon = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher ); - mClickedMarkerIcon = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher_round ); + mMarkerIcon = BitmapFactory.decodeResource( getResources(), R.drawable.ic_search_poi_location ); + mClickedMarkerIcon = BitmapFactory.decodeResource( getResources(), R.drawable.ic_search_choice_point ); mAddMarker = findViewById( R.id.demo_module_id_add_marker ); mAddMarker.setOnClickListener( new View.OnClickListener() { @Override @@ -112,7 +125,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > .icon( mMarkerIcon ) .latitude( 39.974525d ) .longitude( 116.41733d ); - IMogoMarker marker = mMapService.addMarker( DemoConstants.TAG, options ); + IMogoMarker marker = mMarkerManager.addMarker( DemoConstants.TAG, options ); marker.setInfoWindowAdapter( mDemoInfoWindowAdapter ); marker.setOnMarkerClickListener( DemoCardViewFragment.this ); } @@ -130,7 +143,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > .longitude( 116.41733d + new Random().nextDouble() ); optionsList.add( options ); } - List< IMogoMarker > iMogoMarkers = mMapService.addMarkers( DemoConstants.TAG, optionsList, true ); + List< IMogoMarker > iMogoMarkers = mMarkerManager.addMarkers( DemoConstants.TAG, optionsList, true ); for ( IMogoMarker iMogoMarker : iMogoMarkers ) { iMogoMarker.setInfoWindowAdapter( mDemoInfoWindowAdapter ); iMogoMarker.setOnMarkerClickListener( DemoCardViewFragment.this ); @@ -141,7 +154,81 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > findViewById( R.id.demo_module_id_clear ).setOnClickListener( new View.OnClickListener() { @Override public void onClick( View v ) { - mMapService.removeMarkers( DemoConstants.TAG ); + mMarkerManager.removeMarkers( DemoConstants.TAG ); + } + } ); + + m2D3D.setOnClickListener( new View.OnClickListener() { + + private EnumMapUI ui = EnumMapUI.NorthUP_2D; + + @Override + public void onClick( View v ) { + mMapUIController.changeMapMode( ui = ui.next() ); + m2D3D.setText( ui.toString() ); + } + } ); + + findViewById( R.id.demo_module_id_current ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + mMapUIController.moveToCurrentLocation(); + } + } ); + + findViewById( R.id.demo_module_id_start_navi ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + mNavi.startNavi(); + } + } ); + + findViewById( R.id.demo_module_id_stop_navi ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + mNavi.stopNavi(); + } + } ); + + findViewById( R.id.demo_module_id_traffic ).setOnClickListener( new View.OnClickListener() { + + private boolean enable = true; + + @Override + public void onClick( View v ) { + mMapUIController.setTrafficEnabled( enable = !enable ); + } + } ); + + findViewById( R.id.demo_module_id_zoom_in ).setOnClickListener( new View.OnClickListener() { + + @Override + public void onClick( View v ) { + mMapUIController.changeZoom( true ); + } + } ); + + findViewById( R.id.demo_module_id_zoom_out ).setOnClickListener( new View.OnClickListener() { + + @Override + public void onClick( View v ) { + mMapUIController.changeZoom( false ); + } + } ); + + findViewById( R.id.demo_module_id_day_light ).setOnClickListener( new View.OnClickListener() { + + @Override + public void onClick( View v ) { + mMapUIController.changeMapMode( EnumMapUI.Type_Light ); + } + } ); + + findViewById( R.id.demo_module_id_day_night ).setOnClickListener( new View.OnClickListener() { + + @Override + public void onClick( View v ) { + mMapUIController.changeMapMode( EnumMapUI.Type_Night ); } } ); } @@ -189,7 +276,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > @Override public void onTouch( MotionEvent motionEvent ) { - Logger.d( TAG, "地图触摸事件" ); +// Logger.d( TAG, "地图触摸事件" ); } @Override @@ -205,27 +292,25 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > } + private IMogoMarker mPoiMarker; + @Override public void onPoiItemSearched( MogoPoiItem item, int errorCode ) { if ( item == null ) { return; } - new AlertDialog.Builder( getContext() ) - .setTitle( item.getTitle() ) - .setMessage( - new StringBuilder() - .append( "adCode:" ).append( item.getAdCode() ).append( "\n" ) - .append( "cityCode:" ).append( item.getCityCode() ).append( "\n" ) - .append( "email:" ).append( item.getEmail() ).append( "\n" ) - .append( "tel:" ).append( item.getTel() ).append( "\n" ) - ) - .setNegativeButton( "知道了", new DialogInterface.OnClickListener() { - @Override - public void onClick( DialogInterface dialog, int which ) { - dialog.dismiss(); - } - } ) - .show(); + if ( mPoiMarker != null ) { + mPoiMarker.destroy(); + } + mPoiMarker = mMarkerManager.addMarker( DemoConstants.TAG, new MogoMarkerOptions() + .longitude( item.getPoint().lng ) + .latitude( item.getPoint().lat ) + .icon( mMarkerIcon ) ); + if ( mPoiMarker != null ) { + mPoiMarker.setInfoWindowAdapter( mDemoInfoWindowAdapter ); + mPoiMarker.setObject( item ); + mPoiMarker.showInfoWindow(); + } } @Override @@ -241,6 +326,21 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > } } + @Override + public void onMapClick( MogoLatLng latLng ) { + + } + + @Override + public void onLockMap( boolean isLock ) { + + } + + @Override + public void onMapModeChanged( EnumMapUI ui ) { + Logger.d( TAG, ui.name() ); + } + @Override public void onDestroyView() { super.onDestroyView(); @@ -250,6 +350,9 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView > mLastClickedMarker.destroy(); mLastClickedMarker = null; } + if ( mPoiSearch != null ) { + mPoiSearch.destroy(); + } mMapService = null; mPoiSearch = null; mLocationClient = null; diff --git a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewProvider.java b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewProvider.java index d99a8103eb..4c6f0c0c55 100644 --- a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewProvider.java +++ b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoCardViewProvider.java @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.listener.IMogoMapListener; +import com.mogo.map.navi.IMogoNaviListener; import com.mogo.module.common.MogoModulePaths; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; @@ -60,4 +61,9 @@ public class DemoCardViewProvider implements IMogoModuleProvider { public int getType() { return IMogoModuleProvider.TYPE_FRAGMENT; } + + @Override + public IMogoNaviListener getNaviListener() { + return null; + } } diff --git a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoInfoWindowAdapter.java b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoInfoWindowAdapter.java index 300d735910..0f861c7531 100644 --- a/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoInfoWindowAdapter.java +++ b/demo/demo-module-map/src/main/java/com/mogo/demo/module/map/DemoInfoWindowAdapter.java @@ -8,6 +8,9 @@ import android.widget.TextView; import com.mogo.map.marker.IMogoInfoWindowAdapter; import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.navi.IMogoNavi; +import com.mogo.map.navi.MogoNaviConfig; +import com.mogo.map.search.geo.MogoPoiItem; import java.text.SimpleDateFormat; import java.util.Date; @@ -21,16 +24,25 @@ import java.util.Date; public class DemoInfoWindowAdapter implements IMogoInfoWindowAdapter { private Context mContext; + private IMogoNavi mNavi; - public DemoInfoWindowAdapter( Context mContext ) { + public DemoInfoWindowAdapter( Context mContext, IMogoNavi mNavi ) { this.mContext = mContext; + this.mNavi = mNavi; } @Override public View getInfoWindow( IMogoMarker marker ) { - View view = LayoutInflater.from( mContext ).inflate( R.layout.demo_module_demo_info_window, null ); - renderView( view, marker ); - return view; + if ( marker.getObject() instanceof MogoPoiItem ) { + View view = LayoutInflater.from( mContext ).inflate( R.layout.demo_module_demo_poi_info_window, null ); + renderPoiVew( view, marker, ( ( MogoPoiItem ) marker.getObject() ) ); + return view; + } else { + View view = LayoutInflater.from( mContext ).inflate( R.layout.demo_module_demo_info_window, null ); + renderView( view, marker ); + return view; + } + } private void renderView( View view, final IMogoMarker marker ) { @@ -43,6 +55,40 @@ public class DemoInfoWindowAdapter implements IMogoInfoWindowAdapter { marker.showInfoWindow(); } } ); + Button navi2 = view.findViewById( R.id.demo_module_id_iw_navito ); + navi2.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + if ( mNavi != null ) { + mNavi.naviTo( marker.getPosition(), new MogoNaviConfig().realNavi( false ) ); + } + } + } ); + Button stopNavi = view.findViewById( R.id.demo_module_id_iw_navi_stop ); + stopNavi.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + if ( mNavi != null ) { + mNavi.stopNavi(); + } + } + } ); + } + + private void renderPoiVew( View view, final IMogoMarker marker, MogoPoiItem item ) { + final TextView time = view.findViewById( R.id.demo_module_id_iw_poi_title ); + time.setText( item.getTitle() ); + Button navi2 = view.findViewById( R.id.demo_module_id_iw_poi_navito ); + navi2.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + if ( mNavi != null ) { + mNavi.naviTo( marker.getPosition(), new MogoNaviConfig().realNavi( false ) ); + } + marker.hideInfoWindow(); + marker.remove(); + } + } ); } } diff --git a/demo/demo-module-map/src/main/res/layout/demo_module_card_view.xml b/demo/demo-module-map/src/main/res/layout/demo_module_card_view.xml index 218df1fe68..a5c817e22d 100644 --- a/demo/demo-module-map/src/main/res/layout/demo_module_card_view.xml +++ b/demo/demo-module-map/src/main/res/layout/demo_module_card_view.xml @@ -1,55 +1,136 @@ - - + android:orientation="vertical"> -