From 63629e47ba4b44d6189190ce29c92648a15f5d90 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 26 May 2020 14:05:51 +0800 Subject: [PATCH] opt --- app/build.gradle | 12 +- app/src/catholic/AndroidManifest.xml | 52 +++ app/src/d80x/AndroidManifest.xml | 38 +++ app/src/main/AndroidManifest.xml | 36 ++ app/src/nwd/AndroidManifest.xml | 36 ++ app/src/zhidao/AndroidManifest.xml | 59 ++++ config.gradle | 3 + .../src/main/AndroidManifest.xml | 32 +- .../src/main/AndroidManifest.xml | 6 +- .../module/navi/bean/EntityConvertUtils.java | 52 ++- .../com/mogo/module/navi/bean/SearchPoi.java | 18 + .../java/com/mogo/module/navi/bean/ZDPoi.java | 58 ++++ .../navi/constants/SearchApisHolder.java | 18 +- .../navi/cp/AddressContentProvider.java | 45 ++- .../mogo/module/navi/cp/AddressHelper.java | 18 +- .../module/navi/cp/PersonalInfoManager.java | 158 +++++++++ .../navi/cp/PersonalInfoManagerImpl.java | 308 ++++++++++++++++++ .../module/navi/manager/AddressManager.kt | 164 +++------- .../navi/manager/MogoSearchManager.java | 12 +- .../navi/manager/MogoSearchManagerImpl.kt | 111 +++++++ .../navi/ui/search/CategorySearchFragment.kt | 2 +- .../module/navi/ui/search/SearchFragment.java | 28 +- .../navi/ui/setting/SettingAddressFragment.kt | 28 +- .../service/marker/MapMarkerBaseView.java | 1 - .../module/service/marker/MapMarkerView.java | 52 --- .../res/drawable-ldpi/bg_map_marker_dark.png | Bin 0 -> 4061 bytes .../res/drawable-xhdpi/bg_map_marker_dark.png | Bin 7086 -> 9325 bytes .../src/main/res/layout/view_map_marker.xml | 61 +--- .../main/res/layout/view_map_marker_info.xml | 8 +- .../src/main/res/values-ldpi/dimens.xml | 10 + .../src/main/res/values-xhdpi/dimens.xml | 10 + .../src/main/res/values/dimens.xml | 10 + 32 files changed, 1080 insertions(+), 366 deletions(-) create mode 100644 app/src/catholic/AndroidManifest.xml create mode 100644 app/src/zhidao/AndroidManifest.xml create mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/ZDPoi.java create mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManager.java create mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManagerImpl.java create mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManagerImpl.kt create mode 100644 modules/mogo-module-service/src/main/res/drawable-ldpi/bg_map_marker_dark.png mode change 100755 => 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark.png create mode 100644 modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml create mode 100644 modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml create mode 100644 modules/mogo-module-service/src/main/res/values/dimens.xml diff --git a/app/build.gradle b/app/build.gradle index 220945510b..99c5b45516 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,7 +79,17 @@ android { dimension "product" sourceSets { main { - manifest.srcFile 'src/main/AndroidManifest.xml' + manifest.srcFile 'src/zhidao/AndroidManifest.xml' + } + } + applicationId rootProject.ext.android.applicationId + } + // 通用 APP + catholic { + dimension "product" + sourceSets { + main { + manifest.srcFile 'src/catholic/AndroidManifest.xml' } } applicationId rootProject.ext.android.applicationId diff --git a/app/src/catholic/AndroidManifest.xml b/app/src/catholic/AndroidManifest.xml new file mode 100644 index 0000000000..7440c2cfe2 --- /dev/null +++ b/app/src/catholic/AndroidManifest.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/d80x/AndroidManifest.xml b/app/src/d80x/AndroidManifest.xml index 53ab924776..1096abd079 100644 --- a/app/src/d80x/AndroidManifest.xml +++ b/app/src/d80x/AndroidManifest.xml @@ -18,6 +18,44 @@ tools:replace="android:value" android:name="com.amap.api.v2.apikey" android:value="40e2e7e773c7562b1f2b13699a93992c" /> + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 087e4769a3..31f31689d3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,42 @@ android:supportsRtl="true" android:theme="@style/AppTheme.App" tools:replace="android:label"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config.gradle b/config.gradle index 291ffe3d5b..d9f8af0fd0 100644 --- a/config.gradle +++ b/config.gradle @@ -143,5 +143,8 @@ ext { gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}", adasapi : "com.zhidao.autopilot.support:adas:1.0.0-SNAPSHOT", + + // 个人中心的SDK + personalsdk : "com.zhidaoauto.person.info:data:1.0.1", ] } \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/AndroidManifest.xml b/modules/mogo-module-main/src/main/AndroidManifest.xml index d7dee65541..e490d96a29 100644 --- a/modules/mogo-module-main/src/main/AndroidManifest.xml +++ b/modules/mogo-module-main/src/main/AndroidManifest.xml @@ -2,36 +2,6 @@ package="com.mogo.module.main"> - - - - - - - - - - - - - - - - + diff --git a/modules/mogo-module-search/src/main/AndroidManifest.xml b/modules/mogo-module-search/src/main/AndroidManifest.xml index 99b0239918..46c4accfc6 100644 --- a/modules/mogo-module-search/src/main/AndroidManifest.xml +++ b/modules/mogo-module-search/src/main/AndroidManifest.xml @@ -6,11 +6,7 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/EntityConvertUtils.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/EntityConvertUtils.java index 2c5cfff544..90797bbebb 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/EntityConvertUtils.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/EntityConvertUtils.java @@ -4,6 +4,8 @@ import com.amap.api.maps.model.CameraPosition; import com.amap.api.services.geocoder.RegeocodeAddress; import com.mogo.map.MogoLatLng; import com.mogo.map.search.inputtips.MogoTip; +import com.mogo.module.navi.constants.DataConstants; + import java.util.ArrayList; import java.util.List; @@ -15,7 +17,34 @@ import java.util.List; */ public class EntityConvertUtils { - public static List pois2MogoTips( List< SearchPoi > datums ) { + public static ZDPoi mogo2ZD( SearchPoi poi ) { + if ( poi == null ) { + return null; + } + ZDPoi zdPoi = new ZDPoi(); + zdPoi.setAddress( poi.getAddress() ); + zdPoi.setName( poi.getName() ); + zdPoi.setLat( poi.getLat() ); + zdPoi.setLng( poi.getLng() ); + return zdPoi; + } + + public static SearchPoi zd2Mogo( ZDPoi poi, int type ) { + if ( poi == null ) { + return null; + } + + String poiId = type == DataConstants.TYPE_COMPANY_ADDRESS ? DataConstants.POI_ID_COMPANY : DataConstants.POI_ID_HOME; + SearchPoi searchPoi = new SearchPoi( poiId, + poi.getName(), + poi.getAddress(), + poi.getLat(), + poi.getLng(), "", "", "" ); + searchPoi.setType( type ); + return searchPoi; + } + + public static List< MogoTip > pois2MogoTips( List< SearchPoi > datums ) { final List< MogoTip > output = new ArrayList<>(); if ( datums == null || datums.isEmpty() ) { return output; @@ -65,7 +94,6 @@ public class EntityConvertUtils { } - //public static SearchPoi aMapLocation2Poi( AMapLocation location ) { // if ( location == null || location.getErrorCode() != AMapLocation.LOCATION_SUCCESS ) { // return null; @@ -95,16 +123,16 @@ public class EntityConvertUtils { } - public static SearchPoi geoToPoi(double latitude,double longitude,int type) { - SearchPoi searchPoi = new SearchPoi(System.currentTimeMillis() + "", - null, - null, - latitude, - longitude, - null, - null, - ""); - searchPoi.setType(type); + public static SearchPoi geoToPoi( double latitude, double longitude, int type ) { + SearchPoi searchPoi = new SearchPoi( System.currentTimeMillis() + "", + null, + null, + latitude, + longitude, + null, + null, + "" ); + searchPoi.setType( type ); return searchPoi; } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/SearchPoi.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/SearchPoi.java index 7226cbcc11..7ea011c9e3 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/SearchPoi.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/SearchPoi.java @@ -233,4 +233,22 @@ public class SearchPoi implements Parcelable { return new SearchPoi[size]; } }; + + @Override + public String toString() { + return "SearchPoi{" + + "pId='" + pId + '\'' + + ", name='" + name + '\'' + + ", address='" + address + '\'' + + ", lat=" + lat + + ", lng=" + lng + + ", district='" + district + '\'' + + ", adCode='" + adCode + '\'' + + ", typeCode='" + typeCode + '\'' + + ", province='" + province + '\'' + + ", city='" + city + '\'' + + ", type=" + type + + ", time=" + time + + '}'; + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/ZDPoi.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/ZDPoi.java new file mode 100644 index 0000000000..ee1a2f62c9 --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/bean/ZDPoi.java @@ -0,0 +1,58 @@ +package com.mogo.module.navi.bean; + +public class ZDPoi { + String name; + String address; + double lng; + double lat; + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public void setName(String name) { + this.name = name; + } + + public double getLng() { + return lng; + } + + public double getLat() { + return lat; + } + + public String getName() { + return name; + } + + public ZDPoi() { + + } + + /** + * + * @param name + * @param lat + * @param lng + */ + public ZDPoi(String name,String address, double lat, double lng) { + this.name = name; + this.address = address; + this.lat = lat; + this.lng = lng; + } + +} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchApisHolder.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchApisHolder.java index 7d280506c8..26fabf1bac 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchApisHolder.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchApisHolder.java @@ -5,10 +5,10 @@ import com.mogo.commons.AbsMogoApplication; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoNavi; -import com.mogo.map.search.geo.IMogoGeoSearch; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.gps.simulator.IMogoGpsSimulatorManager; import com.mogo.module.guideshow.provider.IGuideShowProvider; +import com.mogo.module.navi.cp.PersonalInfoManagerImpl; import com.mogo.service.IMogoServiceApis; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.fragmentmanager.IMogoFragmentManager; @@ -18,6 +18,7 @@ import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.module.IMogoSettingManager; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.utils.logger.Logger; /** * @author congtaowang @@ -27,6 +28,8 @@ import com.mogo.service.statusmanager.IMogoStatusManager; */ public class SearchApisHolder { + private static final String TAG = "SearchApisHolder"; + private static IMogoServiceApis sApis; private static IMogoMapService sMapServiceApis; private static IMogoMapUIController sUiControllerApis; @@ -43,7 +46,10 @@ public class SearchApisHolder { private static IMogoGpsSimulatorManager sGpsSimulatorManager; private static IMogoSearchManager sSearchManager; + private static PersonalInfoManagerImpl mPersonalInfoManager; + static { + Logger.d( TAG, "static block init." ); sApis = ARouter.getInstance().navigation( IMogoServiceApis.class ); sMapServiceApis = sApis.getMapServiceApi(); sUiControllerApis = sMapServiceApis.getMapUIController(); @@ -57,7 +63,7 @@ public class SearchApisHolder { sIntentManager = sApis.getIntentManagerApi(); sSettingManager = sApis.getSettingManagerApi(); sSearchManager = sApis.getSearchManagerApi(); - sGpsSimulatorManager = ARouter.getInstance().navigation( IMogoGpsSimulatorManager.class); + sGpsSimulatorManager = ARouter.getInstance().navigation( IMogoGpsSimulatorManager.class ); sGuideShowApis = ARouter.getInstance().navigation( IGuideShowProvider.class ); } @@ -120,4 +126,12 @@ public class SearchApisHolder { public static IMogoSearchManager getSearchManager() { return sSearchManager; } + + public static PersonalInfoManagerImpl getPersonalInfoManager() { + Logger.d( TAG, "getPersonalInfoManager invoked." ); + if ( mPersonalInfoManager == null ) { + mPersonalInfoManager = new PersonalInfoManagerImpl( AbsMogoApplication.getApp() ); + } + return mPersonalInfoManager; + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressContentProvider.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressContentProvider.java index 4f49273f2c..1d467d9f91 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressContentProvider.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressContentProvider.java @@ -6,13 +6,15 @@ import android.content.UriMatcher; import android.database.Cursor; import android.database.MatrixCursor; import android.net.Uri; -import android.util.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import com.mogo.module.navi.bean.SearchPoi; import com.mogo.module.navi.constants.DataConstants; import com.mogo.module.navi.database.AppDataBase; -import com.mogo.module.navi.manager.AddressManager; +import com.mogo.utils.logger.Logger; + import java.util.List; /** @@ -41,23 +43,18 @@ public class AddressContentProvider extends ContentProvider { @Nullable @Override public Cursor query( @NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable - String sortOrder ) { + String sortOrder ) { final int code = mMatcher.match( uri ); - Log.d( TAG, "query code: " + code ); final SearchPoi poi = getPoi( code ); - MatrixCursor - cursor = new MatrixCursor( new String[]{DataConstants.HOME_ADDRESS_NAME,DataConstants.HOME_ADDRESS, DataConstants.HOME_ADDRESS_LATITUDE, DataConstants.HOME_ADDRESS_LONGITUDE} ); + Logger.d( TAG, "query : %s", poi ); + MatrixCursor cursor = new MatrixCursor( new String[]{DataConstants.HOME_ADDRESS_NAME, DataConstants.HOME_ADDRESS, DataConstants.HOME_ADDRESS_LATITUDE, DataConstants.HOME_ADDRESS_LONGITUDE} ); if ( code == DataConstants.HOME_ADDRESS_CODE ) { - cursor = new MatrixCursor( new String[]{DataConstants.HOME_ADDRESS_NAME,DataConstants.HOME_ADDRESS, DataConstants.HOME_ADDRESS_LATITUDE, DataConstants.HOME_ADDRESS_LONGITUDE} ); + cursor = new MatrixCursor( new String[]{DataConstants.HOME_ADDRESS_NAME, DataConstants.HOME_ADDRESS, DataConstants.HOME_ADDRESS_LATITUDE, DataConstants.HOME_ADDRESS_LONGITUDE} ); } else if ( code == DataConstants.COMPANY_ADDRESS_CODE ) { - cursor = new MatrixCursor( new String[]{DataConstants.COMPANY_ADDRESS_NAME,DataConstants.COMPANY_ADDRESS, DataConstants.COMPANY_ADDRESS_LATITUDE, DataConstants.COMPANY_ADDRESS_LONGITUDE} ); + cursor = new MatrixCursor( new String[]{DataConstants.COMPANY_ADDRESS_NAME, DataConstants.COMPANY_ADDRESS, DataConstants.COMPANY_ADDRESS_LATITUDE, DataConstants.COMPANY_ADDRESS_LONGITUDE} ); } - if ( cursor != null ) { - if ( poi == null ) { - cursor.addRow( new Object[]{"","", 0, 0} ); - } else { - cursor.addRow( new Object[]{poi.getName(),poi.getAddress(), poi.getLat(), poi.getLng()} ); - } + if ( cursor != null && poi != null ) { + cursor.addRow( new Object[]{poi.getName(), poi.getAddress(), poi.getLat(), poi.getLng()} ); } return cursor; } @@ -69,7 +66,7 @@ public class AddressContentProvider extends ContentProvider { return homeAddressPoi.get( 0 ); } } else if ( type == DataConstants.COMPANY_ADDRESS_CODE ) { - List< SearchPoi > homeAddressPoi = AppDataBase.getDatabase( getContext()).poiDao().getCompanyAddress().blockingGet(); + List< SearchPoi > homeAddressPoi = AppDataBase.getDatabase( getContext() ).poiDao().getCompanyAddress().blockingGet(); if ( homeAddressPoi != null && homeAddressPoi.size() > 0 ) { return homeAddressPoi.get( 0 ); } @@ -87,7 +84,7 @@ public class AddressContentProvider extends ContentProvider { @Override public Uri insert( @NonNull Uri uri, @Nullable ContentValues values ) { final int code = mMatcher.match( uri ); - Log.d( TAG, "insert code: " + code ); + Logger.d( TAG, "insert code: " + code ); if ( values.size() == 0 ) { return uri; } @@ -109,6 +106,7 @@ public class AddressContentProvider extends ContentProvider { } if ( validateLocation( lat, lng ) ) { sp = new SearchPoi( DataConstants.POI_ID_HOME, poiName, poiAddress, lat, lng, "", "", "" ); + sp.setType( code ); } } else if ( code == DataConstants.COMPANY_ADDRESS_CODE ) { poiName = values.getAsString( DataConstants.COMPANY_ADDRESS_NAME ); @@ -123,7 +121,7 @@ public class AddressContentProvider extends ContentProvider { } if ( validateLocation( lat, lng ) ) { sp = new SearchPoi( DataConstants.POI_ID_COMPANY, poiName, poiAddress, lat, lng, "", "", "" ); - sp.setType(code); + sp.setType( code ); } } try { @@ -136,7 +134,7 @@ public class AddressContentProvider extends ContentProvider { private boolean validateLocation( double lat, double lng ) { if ( ( lat ) == 0D || ( lng ) == 0D ) { - Log.e( TAG, "error location" ); + Logger.e( TAG, "error location" ); return false; } return true; @@ -146,14 +144,9 @@ public class AddressContentProvider extends ContentProvider { if ( poi == null ) { return; } - List result = AppDataBase.getDatabase( getContext() ).poiDao().insert( poi ); - if ( result.get( 0 ).intValue() == -1 ) { - Log.e( TAG, "insert error. " ); - }else { - Log.e( TAG, "insert success. " ); - - } - AddressManager.INSTANCE.insert(poi); + Logger.d( TAG, "insert entity: %s", poi ); + AppDataBase.getDatabase( getContext() ).poiDao().insert( poi ); + AddressHelper.notifyAddressChanged( poi.getType() ); } @Override diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressHelper.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressHelper.java index 6ebef4cce2..02c159ef2f 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressHelper.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/AddressHelper.java @@ -1,12 +1,7 @@ package com.mogo.module.navi.cp; -import android.content.Context; import com.mogo.commons.AbsMogoApplication; -import com.mogo.module.navi.bean.SearchPoi; import com.mogo.module.navi.constants.DataConstants; -import com.mogo.utils.logger.Logger; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author congtaowang @@ -17,20 +12,19 @@ import org.jetbrains.annotations.Nullable; public class AddressHelper { private static final String TAG = "AddressHelper"; - public static void notifyHomeAddressChanged( ) { + + public static void notifyHomeAddressChanged() { AbsMogoApplication.getApp().getContentResolver().notifyChange( DataConstants.CONTENT_HOME_ADDRESS_URI, null ); } - public static void notifyCompanyAddressChanged( ) { - + public static void notifyCompanyAddressChanged() { AbsMogoApplication.getApp().getContentResolver().notifyChange( DataConstants.CONTENT_COMPANY_ADDRESS_URI, null ); } - public static void notifyAddressChanged( - int type) { - if (type== DataConstants.TYPE_HOME_ADDRESS) { + public static void notifyAddressChanged( int type ) { + if ( type == DataConstants.TYPE_HOME_ADDRESS ) { notifyHomeAddressChanged(); - }else { + } else if ( type == DataConstants.TYPE_COMPANY_ADDRESS ) { notifyCompanyAddressChanged(); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManager.java new file mode 100644 index 0000000000..fa8c1d600e --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManager.java @@ -0,0 +1,158 @@ +package com.mogo.module.navi.cp; + +import android.content.ContentResolver; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; + +import com.mogo.module.navi.bean.ZDPoi; + + +/** + * 个人信息相关封装 + * Created by zhangxuri on 2018/10/17. + */ + +public abstract class PersonalInfoManager { + + protected final static Object lock = new Object(); + + private static final Uri uri = Uri.parse("content://com.zhidao.guide.lock.product.bindstatus/status"); + + protected static PersonalInfoManager INSTANCE; + + /** + * 实例化对象 + * @param context 上下文 + * @return + */ + public static PersonalInfoManager getInstance(Context context) { + PersonalInfoManager client = INSTANCE; + if(client == null) { + synchronized (lock) { + client = INSTANCE; + if(client == null) { + client = new PersonalInfoManagerImpl(context); + INSTANCE = client; + } + } + } + return client; + } + + public PersonalInfoManager() { + } + + /** + * 请求获取用户信息 + * @return + *//* + public UserInfo getUserInfo() { + ContentResolver resolver = mContext.getContentResolver(); + if (resolver != null){ + UserInfo userInfo = new UserInfo(); + Cursor cursor = resolver.query(personlUri, null, null, null, null); + if((cursor != null) && cursor.moveToFirst()) { + userInfo.setUserId(cursor.getString(cursor.getColumnIndex(USER_ID))); + userInfo.setPhone(cursor.getString(cursor.getColumnIndex(PHONE))); + userInfo.setDisplayName(cursor.getString(cursor.getColumnIndex(DISPLAY_NAME))); + String score = cursor.getString(cursor.getColumnIndex(SCORE)); + try { + userInfo.setScore(Integer.parseInt(score)); + } catch (NumberFormatException ex) { + Log.e("PersonalInfoClient", "getUserInfo: NumberFormatException"); + } + } + if(cursor != null){ + cursor.close(); + } + return userInfo; + } else { + Log.e("PersonalInfoClient", "resolver == null"); + } + + return null; + } +*/ + /** + * 获取当前车机绑定状态 + * @return + */ + public static boolean isRegister(Context context) { + Cursor cursor = null; + try { + ContentResolver resolver = context.getContentResolver(); + if (resolver != null) { + cursor = resolver.query(uri, null, null, null, null); + if ((cursor != null) && cursor.moveToFirst()) { + int status = cursor.getInt(cursor.getColumnIndex("lock_status")); + return (status == 1); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return false; + } + + /** + * 释放资源 + */ + public abstract void release(); + + /** + * 设置家的地址 + */ + public abstract void setHome( ZDPoi homePoi); + + /** + * 设置公司地址 + */ + public abstract void setCompany(ZDPoi companyPoi); + + /** + * 获取家的地址 + * + * @return + */ + public abstract ZDPoi getHome(); + + public abstract ZDPoi getCompany(); + + /** + * 添加信息变化监听 + * + * @param listener 监听器 + */ + public abstract void addListener(InfoListener listener); + + /** + * 删除信息变化监听 + * + * @param listener 监听器 + */ + public abstract void removeListener(InfoListener listener); + + /** + * 常用地址变化监听器 + */ + public interface InfoListener { + + /** + * 家地址变化 + * @param home + */ + void onHomeChanged( ZDPoi home ); + + /** + * 公司地址变化 + * @param company + */ + void onCompanyChanged( ZDPoi company ); + } + +} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManagerImpl.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManagerImpl.java new file mode 100644 index 0000000000..a770c75f1f --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/cp/PersonalInfoManagerImpl.java @@ -0,0 +1,308 @@ +package com.mogo.module.navi.cp; + + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; + +import com.mogo.module.navi.bean.ZDPoi; +import com.mogo.utils.ThreadPoolService; + +import java.util.ArrayList; +import java.util.List; + +/** + * 个人信息管理 + */ +public class PersonalInfoManagerImpl extends PersonalInfoManager { + + private final String TAG = "PersonalInfoManager"; + + private static final Uri personlUri = Uri.parse( "content://com.zhidao.auto.personal.provider/info" ); + + private static final Uri COMPANY_ADDRESS_URI = Uri.parse( "content://com.zhidao.auto.personal.provider/companyAddress" );//旧的公司地址 + + private static final Uri CONTENT_COMPANY_ADDRESS_URI = Uri.parse( "content://com.zhidao.launcher.provider.personal.info/companyAddress" );//新的公司地址 + + private static final Uri HOME_ADDRESS_URI = Uri.parse( "content://com.zhidao.auto.personal.provider/homeAddress" );//旧的家地址 + + private static final Uri CONTENT_HOME_ADDRESS_URI = Uri.parse( "content://com.zhidao.launcher.provider.personal.info/homeAddress" );//新的家地址 + + //公司地址 + private static final String COMPANY_ADDRESS = "companyAddress"; + private static final String COMPANY_ADDRESS_NAME = "companyAddressName"; + private static final String COMPANY_ADDRESS_LATITUDE = "companyAddressLatitude"; + private static final String COMPANY_ADDRESS_LONGITUDE = "companyAddressLongitude"; + + //家庭地址 + private static final String HOME_ADDRESS = "homeAddress"; + private static final String HOME_ADDRESS_NAME = "homeAddressName"; + private static final String HOME_ADDRESS_LATITUDE = "homeAddressLatitude"; + private static final String HOME_ADDRESS_LONGITUDE = "homeAddressLongitude"; + + private List< InfoListener > mListenerList = new ArrayList<>(); + private boolean mIsRegister = false; + private Handler mHandler = new Handler( Looper.getMainLooper() ); + private Context mContext; + + public PersonalInfoManagerImpl( Context context ) { + this.mContext = context.getApplicationContext(); + } + + @Override + public void addListener( InfoListener listener ) { + synchronized ( mListenerList ) { + if ( listener != null ) { + mListenerList.add( listener ); + } + if ( !mIsRegister ) { + registerObserver(); + } + } + } + + @Override + public void removeListener( InfoListener listener ) { + synchronized ( mListenerList ) { + if ( listener != null ) { + mListenerList.remove( listener ); + } + if ( mListenerList.isEmpty() && mIsRegister ) { + unregisterObserver(); + } + } + } + + private void unregisterObserver() { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver == null ) return; + if ( mIsRegister ) { + resolver.unregisterContentObserver( mContentObserver ); + mIsRegister = false; + } + } + + private void registerObserver() { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver != null ) { + resolver.registerContentObserver( COMPANY_ADDRESS_URI, true, mContentObserver ); + resolver.registerContentObserver( CONTENT_COMPANY_ADDRESS_URI, true, mContentObserver ); + resolver.registerContentObserver( HOME_ADDRESS_URI, true, mContentObserver ); + resolver.registerContentObserver( CONTENT_HOME_ADDRESS_URI, true, mContentObserver ); + mIsRegister = true; + } + } + + @Override + public void setCompany( ZDPoi companyPoi ) { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver == null ) { + return; + } + ContentValues values = new ContentValues(); + values.put( COMPANY_ADDRESS, companyPoi.getAddress() ); + values.put( COMPANY_ADDRESS_NAME, companyPoi.getName() ); + values.put( COMPANY_ADDRESS_LATITUDE, companyPoi.getLat() ); + values.put( COMPANY_ADDRESS_LONGITUDE, companyPoi.getLng() ); + try { + resolver.insert( CONTENT_COMPANY_ADDRESS_URI, values ); + } catch ( IllegalArgumentException ex ) { + Log.e( TAG, "setCompany: new url not exits" ); + try { + resolver.insert( COMPANY_ADDRESS_URI, values ); + } catch ( IllegalArgumentException exception ) { + Log.e( TAG, "setCompany: ERROR" ); + } + ex.printStackTrace(); + } + } + + @Override + public void setHome( ZDPoi homePoi ) { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver == null ) { + return; + } + ContentValues values = new ContentValues(); + values.put( HOME_ADDRESS, homePoi.getAddress() ); + values.put( HOME_ADDRESS_NAME, homePoi.getName() ); + values.put( HOME_ADDRESS_LATITUDE, homePoi.getLat() ); + values.put( HOME_ADDRESS_LONGITUDE, homePoi.getLng() ); + try { + resolver.insert( CONTENT_HOME_ADDRESS_URI, values ); + } catch ( IllegalArgumentException ex ) { + try { + resolver.insert( HOME_ADDRESS_URI, values ); + } catch ( IllegalArgumentException exception ) { + Log.e( TAG, "setHome: ERROR" ); + } + ex.printStackTrace(); + } + } + + @Override + public ZDPoi getCompany() { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver == null ) { + return null; + } + Cursor cursor = null; + try { + cursor = resolver.query( CONTENT_COMPANY_ADDRESS_URI, null, null, null, null ); + if ( cursor == null ) { //桌面url不存在 + cursor = resolver.query( COMPANY_ADDRESS_URI, null, null, null, null ); + } + + if ( cursor == null ) { + return null; + } + ZDPoi poi = new ZDPoi(); + if ( cursor.moveToFirst() ) { + String companyAddress = cursor.getString( cursor.getColumnIndex( COMPANY_ADDRESS ) ); + String companyAddressName = cursor.getString( cursor.getColumnIndex( COMPANY_ADDRESS_NAME ) ); + double companyLat = cursor.getDouble( cursor.getColumnIndex( COMPANY_ADDRESS_LATITUDE ) ); + double companyLng = cursor.getDouble( cursor.getColumnIndex( COMPANY_ADDRESS_LONGITUDE ) ); + poi.setAddress( companyAddress ); + poi.setName( companyAddressName ); + poi.setLat( companyLat ); + poi.setLng( companyLng ); + return poi; + } + } catch ( Exception ex ) { + ex.printStackTrace(); + } finally { + if ( cursor != null ) { + cursor.close(); + } + } + return null; + } + + @Override + public ZDPoi getHome() { + ContentResolver resolver = mContext.getContentResolver(); + if ( resolver == null ) { + return null; + } + Cursor cursor = null; + try { + cursor = resolver.query( CONTENT_HOME_ADDRESS_URI, null, null, null, null ); + if ( cursor == null ) { //桌面url不存在 + cursor = resolver.query( HOME_ADDRESS_URI, null, null, null, null ); + } + + if ( cursor == null ) { + return null; + } + ZDPoi poi = new ZDPoi(); + if ( cursor.moveToFirst() ) { + String homeAddress = cursor.getString( cursor.getColumnIndex( HOME_ADDRESS ) ); + String homeAddressName = cursor.getString( cursor.getColumnIndex( HOME_ADDRESS_NAME ) ); + double homeAddressLat = cursor.getDouble( cursor.getColumnIndex( HOME_ADDRESS_LATITUDE ) ); + double homeAddressLng = cursor.getDouble( cursor.getColumnIndex( HOME_ADDRESS_LONGITUDE ) ); + poi.setAddress( homeAddress ); + poi.setName( homeAddressName ); + poi.setLat( homeAddressLat ); + poi.setLng( homeAddressLng ); + return poi; + } + } catch ( Exception ex ) { + ex.printStackTrace(); + } finally { + if ( cursor != null ) { + cursor.close(); + } + } + return null; + } + + private void dispatchPoiEvent( int state, ZDPoi poi ) { + synchronized ( mListenerList ) { + for ( InfoListener listener : mListenerList ) { + if ( state == 0 ) { + listener.onHomeChanged( poi ); + } else { + listener.onCompanyChanged( poi ); + } + } + } + } + + private ContentObserver mContentObserver = new ContentObserver( mHandler ) { + @Override + public void onChange( boolean selfChange, Uri uri ) { + super.onChange( selfChange, uri ); + int state; + if ( uri.equals( HOME_ADDRESS_URI ) || uri.equals( CONTENT_HOME_ADDRESS_URI ) ) { + state = 0; + } else { + state = 1; + } + ThreadPoolService.execute( () -> { + final ZDPoi poi = queryFromDataSource( uri ); + mHandler.post( () -> { + if ( poi != null ) { + dispatchPoiEvent( state, poi ); + } + } ); + } ); + + } + }; + + private ZDPoi queryFromDataSource( Uri uri ) { + Log.i( TAG, "onChange: uri = " + uri.toString() ); + Cursor cursor = null; + String address; + String addressName; + double lat; + double lng; + ZDPoi poi = null; + try { + cursor = mContext.getContentResolver().query( uri, null, null, null, null ); + if ( cursor != null && cursor.moveToNext() ) { + if ( uri.equals( HOME_ADDRESS_URI ) || uri.equals( CONTENT_HOME_ADDRESS_URI ) ) { + address = cursor.getString( cursor.getColumnIndex( HOME_ADDRESS ) ); + addressName = cursor.getString( cursor.getColumnIndex( HOME_ADDRESS_NAME ) ); + lat = cursor.getDouble( cursor.getColumnIndex( HOME_ADDRESS_LATITUDE ) ); + lng = cursor.getDouble( cursor.getColumnIndex( HOME_ADDRESS_LONGITUDE ) ); + } else { + address = cursor.getString( cursor.getColumnIndex( COMPANY_ADDRESS ) ); + addressName = cursor.getString( cursor.getColumnIndex( COMPANY_ADDRESS_NAME ) ); + lat = cursor.getDouble( cursor.getColumnIndex( COMPANY_ADDRESS_LATITUDE ) ); + lng = cursor.getDouble( cursor.getColumnIndex( COMPANY_ADDRESS_LONGITUDE ) ); + } + Log.i( TAG, "onChange: address = " + address + "addressName = " + addressName ); + Log.i( TAG, "onChange: lat = " + lat + "lng = " + lng ); + poi = new ZDPoi(); + poi.setAddress( address ); + poi.setName( addressName ); + poi.setLat( lat ); + poi.setLng( lng ); + } + } catch ( Exception e ) { + Log.e( TAG, "onChange: Exception = " + e.getMessage() ); + } finally { + if ( cursor != null ) { + cursor.close(); + } + } + return poi; + } + + + @Override + public void release() { + synchronized ( lock ) { + this.mListenerList.clear(); + unregisterObserver(); + INSTANCE = null; + } + } +} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt index 85ec044c4a..3713ed1c1d 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt @@ -2,27 +2,20 @@ package com.mogo.module.navi.manager import android.annotation.SuppressLint import android.content.Context -import androidx.fragment.app.Fragment -import com.mogo.map.MogoLatLng -import com.mogo.module.common.map.MapCenterPointStrategy -import com.mogo.module.common.map.Scene +import android.util.Log import com.mogo.module.navi.bean.EntityConvertUtils import com.mogo.module.navi.bean.SearchPoi -import com.mogo.module.navi.constants.AMapConstants +import com.mogo.module.navi.bean.ZDPoi import com.mogo.module.navi.constants.DataConstants import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.cp.AddressHelper +import com.mogo.module.navi.cp.PersonalInfoManager import com.mogo.module.navi.dao.SearchPoiDao import com.mogo.module.navi.database.AppDataBase -import com.mogo.module.navi.ui.search.CategorySearchFragment -import com.mogo.module.navi.ui.search.ChoosePathFragment -import com.mogo.module.navi.ui.search.SearchFragment -import com.mogo.module.navi.ui.setting.NaviSettingFragment -import com.mogo.module.navi.ui.setting.SettingAddressFragment -import com.mogo.service.fragmentmanager.FragmentDescriptor +import com.mogo.utils.WorkThreadHandler +import com.mogo.utils.logger.Logger import io.reactivex.Observable import io.reactivex.ObservableOnSubscribe -import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import org.greenrobot.eventbus.EventBus @@ -47,39 +40,47 @@ object AddressManager { return companyAddress != null } - private lateinit var context: Context @SuppressLint("CheckResult") fun init(context: Context) { - this.context = context poiDao = AppDataBase.getDatabase(context).poiDao() - poiDao.companyAddress - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { t1, _ -> - if (t1.size > 0) { - companyAddress = t1[0] - } - } + WorkThreadHandler.getInstance().post { + try { + var zdCompany = SearchApisHolder.getPersonalInfoManager().company + companyAddress = EntityConvertUtils.zd2Mogo(zdCompany, DataConstants.TYPE_COMPANY_ADDRESS) + var zdHome = SearchApisHolder.getPersonalInfoManager().home + homeAddress = EntityConvertUtils.zd2Mogo(zdHome, DataConstants.TYPE_HOME_ADDRESS) + } catch (e: Exception) { + Logger.d(TAG, Log.getStackTraceString(e)) + } + } - poiDao.homeAddress - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { t1, _ -> - if (t1.size > 0) { - homeAddress = t1[0] - } - } + SearchApisHolder.getPersonalInfoManager().addListener(object : PersonalInfoManager.InfoListener { + override fun onCompanyChanged(company: ZDPoi?) { + Logger.d(TAG, "company data changed.") + companyAddress = EntityConvertUtils.zd2Mogo(company, DataConstants.TYPE_COMPANY_ADDRESS) + EventBus.getDefault().post(companyAddress) + } + + override fun onHomeChanged(home: ZDPoi?) { + Logger.d(TAG, "home data changed.") + homeAddress = EntityConvertUtils.zd2Mogo(home, DataConstants.TYPE_HOME_ADDRESS) + EventBus.getDefault().post(homeAddress) + } + }) } fun insert(searchPoi: SearchPoi) { - - EventBus.getDefault().post(searchPoi) - if (searchPoi.type == DataConstants.TYPE_COMPANY_ADDRESS) { - companyAddress = searchPoi - } else { - homeAddress = searchPoi - } + Observable.create( + ObservableOnSubscribe { + if (searchPoi.type == DataConstants.TYPE_COMPANY_ADDRESS) { + SearchApisHolder.getPersonalInfoManager().company = EntityConvertUtils.mogo2ZD(searchPoi) + } else { + SearchApisHolder.getPersonalInfoManager().home = EntityConvertUtils.mogo2ZD(searchPoi) + } + }) + .subscribeOn(Schedulers.io()) + .subscribe() } fun deleteHome() { @@ -88,109 +89,20 @@ object AddressManager { poiDao.delete(homeAddress) homeAddress?.name = "" AddressHelper.notifyAddressChanged(1) - homeAddress = null }) .subscribeOn(Schedulers.io()) .subscribe() - - } fun deleteCompany() { Observable.create( ObservableOnSubscribe { poiDao.delete(companyAddress) - companyAddress?.name = "" AddressHelper.notifyAddressChanged(0) - companyAddress = null }) .subscribeOn(Schedulers.io()) .subscribe() } - - /** - * 回家 - */ - fun goHome() { - if (homeAddress == null) { - choosePoint(DataConstants.TYPE_HOME_ADDRESS) - } else { - calculatePath(EntityConvertUtils.poi2MogoTip(homeAddress).point) - } - } - - private fun choosePoint(type: Int) { - beforePushFragment() - MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CHOOSE_POINT) - pushFragment(SettingAddressFragment.newInstance(type), AMapConstants.PATH_FRAGMENT_SETTING_HOME, true) - } - - /** - * 去公司 - */ - fun goCompany() { - if (companyAddress == null) { - choosePoint(DataConstants.TYPE_COMPANY_ADDRESS) - } else { - calculatePath(EntityConvertUtils.poi2MogoTip(companyAddress).point) - } - } - - /** - * 搜索 - */ - fun goSearch() { - beforePushFragment() - pushFragment(SearchFragment(), AMapConstants.PATH_FRAGMENT_SEARCH, true) - } - - /** - * 路径规划 - */ - fun calculatePath(destination: MogoLatLng?) { - destination?.let { - beforePushFragment() - MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CALCULATE_PATH) - pushFragment(ChoosePathFragment.newInstance(destination), AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, true) - } - } - - fun categorySearch(category: String) { - beforePushFragment() - pushFragment(CategorySearchFragment.newInstance(category), AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY, true) - } - - fun goSettings() { - beforePushFragment() - pushFragment(NaviSettingFragment(), AMapConstants.PATH_FRAGMENT_NAVI_SETTING, true) - } - - private fun beforePushFragment() { - closeADAS() - if (!SearchApisHolder.getStatusManager().isSearchUIShow) { - SearchApisHolder.getStatusManager().setSearchUIShow(TAG, true) - } - } - - private fun pushFragment(fragment: Fragment, tag: String, notifyMain: Boolean) { - SearchApisHolder.getFragmentManager().push( - FragmentDescriptor.Builder() - .fragment(fragment) - .tag(tag) - .notifyMainModule(notifyMain) - .build() - ) - } - - - private fun closeADAS() { - try { - SearchApisHolder.getApis().adasControllerApi.closeADAS() - } catch (e: Exception) { - e.printStackTrace() - } - - } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java index db988b10af..35713da421 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java @@ -16,12 +16,12 @@ import com.mogo.service.module.IMogoSearchManager; public class MogoSearchManager implements IMogoSearchManager { @Override public void goHome() { - AddressManager.INSTANCE.goHome(); + MogoSearchManagerImpl.INSTANCE.goHome(); } @Override public void goCompany() { - AddressManager.INSTANCE.goCompany(); + MogoSearchManagerImpl.INSTANCE.goCompany(); } @Override @@ -29,22 +29,22 @@ public class MogoSearchManager implements IMogoSearchManager { if ( SearchApisHolder.getNaviApis().isNaviing() ) { return; } - AddressManager.INSTANCE.goSearch(); + MogoSearchManagerImpl.INSTANCE.goSearch(); } @Override public void categorySearch( String keyword ) { - AddressManager.INSTANCE.categorySearch( keyword ); + MogoSearchManagerImpl.INSTANCE.categorySearch( keyword ); } @Override public void calculatePath( MogoLatLng destination ) { - AddressManager.INSTANCE.calculatePath( destination ); + MogoSearchManagerImpl.INSTANCE.calculatePath( destination ); } @Override public void goSettings() { - AddressManager.INSTANCE.goSettings(); + MogoSearchManagerImpl.INSTANCE.goSettings(); } @Override diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManagerImpl.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManagerImpl.kt new file mode 100644 index 0000000000..91c9c01bc1 --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManagerImpl.kt @@ -0,0 +1,111 @@ +package com.mogo.module.navi.manager + +import androidx.fragment.app.Fragment +import com.mogo.map.MogoLatLng +import com.mogo.module.common.map.MapCenterPointStrategy +import com.mogo.module.common.map.Scene +import com.mogo.module.navi.bean.EntityConvertUtils +import com.mogo.module.navi.constants.AMapConstants +import com.mogo.module.navi.constants.DataConstants +import com.mogo.module.navi.constants.SearchApisHolder +import com.mogo.module.navi.ui.search.CategorySearchFragment +import com.mogo.module.navi.ui.search.ChoosePathFragment +import com.mogo.module.navi.ui.search.SearchFragment +import com.mogo.module.navi.ui.setting.NaviSettingFragment +import com.mogo.module.navi.ui.setting.SettingAddressFragment +import com.mogo.service.fragmentmanager.FragmentDescriptor + +/** + * @author congtaowang + * @since 2020-05-25 + * + * 描述 + */ +object MogoSearchManagerImpl { + + val TAG: String = "MogoSearchManagerImpl.kt" + + /** + * 回家 + */ + fun goHome() { + if (!AddressManager.hasHome()) { + choosePoint(DataConstants.TYPE_HOME_ADDRESS) + } else { + calculatePath(EntityConvertUtils.poi2MogoTip(AddressManager.homeAddress).point) + } + } + + private fun choosePoint(type: Int) { + beforePushFragment() + MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CHOOSE_POINT) + pushFragment(SettingAddressFragment.newInstance(type), AMapConstants.PATH_FRAGMENT_SETTING_HOME, true) + } + + /** + * 去公司 + */ + fun goCompany() { + if (!AddressManager.hasCompany()) { + choosePoint(DataConstants.TYPE_COMPANY_ADDRESS) + } else { + calculatePath(EntityConvertUtils.poi2MogoTip(AddressManager.companyAddress).point) + } + } + + /** + * 搜索 + */ + fun goSearch() { + beforePushFragment() + pushFragment(SearchFragment(), AMapConstants.PATH_FRAGMENT_SEARCH, true) + } + + /** + * 路径规划 + */ + fun calculatePath(destination: MogoLatLng?) { + destination?.let { + beforePushFragment() + MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CALCULATE_PATH) + pushFragment(ChoosePathFragment.newInstance(destination), AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, true) + } + } + + fun categorySearch(category: String) { + beforePushFragment() + pushFragment(CategorySearchFragment.newInstance(category), AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY, true) + } + + fun goSettings() { + beforePushFragment() + pushFragment(NaviSettingFragment(), AMapConstants.PATH_FRAGMENT_NAVI_SETTING, true) + } + + private fun beforePushFragment() { + closeADAS() + if (!SearchApisHolder.getStatusManager().isSearchUIShow) { + SearchApisHolder.getStatusManager().setSearchUIShow(TAG, true) + } + } + + private fun pushFragment(fragment: Fragment, tag: String, notifyMain: Boolean) { + SearchApisHolder.getFragmentManager().push( + FragmentDescriptor.Builder() + .fragment(fragment) + .tag(tag) + .notifyMainModule(notifyMain) + .build() + ) + } + + + private fun closeADAS() { + try { + SearchApisHolder.getApis().adasControllerApi.closeADAS() + } catch (e: Exception) { + e.printStackTrace() + } + + } +} \ No newline at end of file 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 b109fef994..c25914c4aa 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 @@ -178,7 +178,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa private fun goPath() { mAdapter.currentItem?.let { - AddressManager.calculatePath(mAdapter.currentItem.point) + SearchApisHolder.getSearchManager().calculatePath(mAdapter.currentItem.point) } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java index 6e2d965b2f..3fdf6f4bbf 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java @@ -150,14 +150,14 @@ public class SearchFragment extends BaseSearchFragment findViewById( R.id.tv_navi_company ).setOnClickListener( new View.OnClickListener() { @Override public void onClick( View v ) { - AddressManager.INSTANCE.goCompany(); + SearchApisHolder.getSearchManager().goCompany(); } } ); findViewById( R.id.tv_navi_home ).setOnClickListener( new View.OnClickListener() { @Override public void onClick( View v ) { - AddressManager.INSTANCE.goHome(); + SearchApisHolder.getSearchManager().goHome(); } } ); @@ -184,18 +184,18 @@ public class SearchFragment extends BaseSearchFragment goCategory( tag.getName() ); } else { mSearchPresenter.insert( searchPoi ); - AddressManager.INSTANCE.calculatePath( tag.getPoint() ); + SearchApisHolder.getSearchManager().calculatePath( tag.getPoint() ); } } private void goSetting() { SearchApisHolder.getAnalyticsApis().track( "Navigation_button_setting", new HashMap< String, Object >() ); - AddressManager.INSTANCE.goSettings(); + SearchApisHolder.getSearchManager().goSettings(); } private void goHistory( SearchPoi item ) { MogoTip mogoTip = EntityConvertUtils.poi2MogoTip( item ); - AddressManager.INSTANCE.calculatePath( mogoTip.getPoint() ); + SearchApisHolder.getSearchManager().calculatePath( mogoTip.getPoint() ); } private static final String GO_HOME_CMD = "goHome"; @@ -341,7 +341,7 @@ public class SearchFragment extends BaseSearchFragment } private void goCategory( String text ) { - AddressManager.INSTANCE.categorySearch( text ); + SearchApisHolder.getSearchManager().categorySearch( text ); } @Override @@ -414,42 +414,30 @@ public class SearchFragment extends BaseSearchFragment .speakQAndACmd( getString( R.string.notice_clean_history ), new String[]{"确定", "立即清空"}, new String[]{"取消"}, this ); break; - - case GAS_CMD: - goCategory( getString( R.string.navi_gas ) ); - break; case GO_COMPANY_CMD: - AddressManager.INSTANCE.goCompany(); - + SearchApisHolder.getSearchManager().goCompany(); break; case GO_HOME_CMD: - AddressManager.INSTANCE.goHome(); + SearchApisHolder.getSearchManager().goHome(); break; case NAVI_SETTING_CMD: goSetting(); break; - case PARK_CMD: goCategory( getString( R.string.navi_park ) ); - break; case RESTAURANT_CMD: goCategory( getString( R.string.navi_restrant ) ); - break; - case TOILET_CMD: goCategory( getString( R.string.navi_toilet ) ); break; - case WASH_CMD: goCategory( getString( R.string.navi_wash ) ); - break; - default: break; } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt index b6eb204bd9..d94525451e 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt @@ -22,15 +22,10 @@ import com.mogo.module.navi.bean.SearchPoi import com.mogo.module.navi.constants.AMapConstants import com.mogo.module.navi.constants.DataConstants import com.mogo.module.navi.constants.SearchApisHolder -import com.mogo.module.navi.cp.AddressHelper -import com.mogo.module.navi.database.AppDataBase import com.mogo.module.navi.manager.AddressManager import com.mogo.module.navi.ui.base.BaseFragment import com.mogo.utils.TipToast import com.mogo.utils.UiThreadHandler -import io.reactivex.Observable -import io.reactivex.ObservableOnSubscribe -import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.fragment_setting_address.* /** @@ -58,7 +53,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { } private val TAG: String = "SettingAddressFragment" - private var style: Int = DataConstants.TYPE_HOME_ADDRESS + private var type: Int = DataConstants.TYPE_HOME_ADDRESS var addMarker: IMogoMarker? = null private lateinit var mGeoSearch: IMogoGeoSearch @@ -71,7 +66,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { tilt: Float, bearing: Float) { super.onMapChanged(latLng, zoom, tilt, bearing) - selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, style) + selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, type) var mogoRegeocodeQuery = MogoRegeocodeQuery() mogoRegeocodeQuery.point = latLng mGeoSearch.getFromLocationAsyn(mogoRegeocodeQuery) @@ -91,7 +86,8 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS + type = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) + ?: DataConstants.TYPE_HOME_ADDRESS SearchApisHolder.getRegisterCenterApis().registerMogoMapListener(AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener) SearchApisHolder.getUiControllerApis().showMyLocation(false) SearchApisHolder.getMarkerManager().removeMarkers() @@ -105,11 +101,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { } fun isHome(): Boolean { - return style == DataConstants.TYPE_HOME_ADDRESS - } - - fun isCompony(): Boolean { - return style == DataConstants.TYPE_COMPANY_ADDRESS + return type == DataConstants.TYPE_HOME_ADDRESS } override fun onViewCreated( @@ -159,17 +151,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { } fun insert(searchPoi: SearchPoi) { - AddressManager.insert(searchPoi) - Observable.create( - ObservableOnSubscribe { - AppDataBase.getDatabase(activity) - .poiDao() - .insert(searchPoi) - AddressHelper.notifyAddressChanged(searchPoi.type) - }) - .subscribeOn(Schedulers.io()) - .subscribe() } override fun onDestroyView() { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java index e46baeee29..c790f05e65 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java @@ -41,7 +41,6 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV protected MogoImageView ivUserHead; protected ImageView ivIcon; protected ImageView ivCar; - protected ConstraintLayout clMarkerTopView; protected IMogoMarker mMarker; public MapMarkerBaseView(Context context) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java index 6479b123ab..95e95c4a07 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java @@ -3,23 +3,17 @@ package com.mogo.module.service.marker; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; -import android.view.View; import android.widget.ImageView; import androidx.annotation.Nullable; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.entity.MarkerExploreWay; -import com.mogo.module.common.entity.MarkerNoveltyInfo; -import com.mogo.module.common.entity.MarkerOnlineCar; import com.mogo.module.common.entity.MarkerPoiTypeEnum; -import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.R; import com.mogo.module.service.ServiceConst; -import java.util.Random; - /** * author : donghongyu * e-mail : 1358506549@qq.com @@ -52,40 +46,17 @@ public class MapMarkerView extends MapMarkerBaseView { protected void initView( Context context ) { LayoutInflater.from( context ).inflate( R.layout.view_map_marker, this ); - ivUserHead = findViewById( R.id.ivUserHead ); ivIcon = findViewById( R.id.ivIcon ); ivCar = findViewById( R.id.ivCar ); ivBg = findViewById( R.id.ivBg ); - clMarkerTopView = findViewById( R.id.clMarkerTopView ); } public void updateView( MarkerShowEntity markerShowEntity ) { try { Object bindObj = markerShowEntity.getBindObj(); - ivBg.setImageResource( R.drawable.bg_map_marker_dark ); switch ( markerShowEntity.getMarkerType() ) { - case ServiceConst.CARD_TYPE_CARS_CHATTING: - case ServiceConst.CARD_TYPE_USER_DATA: - ivUserHead.setVisibility( View.VISIBLE ); - ivIcon.setVisibility( View.INVISIBLE ); - loadImageWithMarker( markerShowEntity ); - ivCar.setImageResource( R.drawable.icon_map_marker_car_gray ); - ivCar.setRotation( ( float ) markerShowEntity.getMarkerLocation().getAngle() ); -// ivCar.setRotation(new Random().nextInt(360)); - clMarkerTopView.setVisibility( View.GONE ); - if ( bindObj instanceof MarkerOnlineCar ) { - if ( ( ( MarkerOnlineCar ) bindObj ).getUserInfo().getGenderValue() == 0 ) { - } else { - } - } - break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: case ServiceConst.CARD_TYPE_NOVELTY: - ivUserHead.setVisibility( View.INVISIBLE ); - ivIcon.setVisibility( View.VISIBLE ); - - ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow ); - if ( bindObj instanceof MarkerExploreWay ) { switch ( ( ( MarkerExploreWay ) bindObj ).getPoiType() ) { case MarkerPoiTypeEnum.GAS_STATION: @@ -137,29 +108,6 @@ public class MapMarkerView extends MapMarkerBaseView { } } break; - case ServiceConst.CARD_TYPE_SHARE_MUSIC: - ivUserHead.setVisibility( View.INVISIBLE ); - ivIcon.setVisibility( View.VISIBLE ); - ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow ); - - if ( bindObj instanceof MarkerShareMusic ) { - // 2 为书籍听书,3 为新闻,1 为qq音乐,int - switch ( ( ( MarkerShareMusic ) bindObj ).getShareType() ) { - case 1: - ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); - break; - case 2: - ivIcon.setImageResource( R.drawable.icon_map_marker_book ); - break; - case 3: - ivIcon.setImageResource( R.drawable.icon_map_marker_news ); - break; - default: - ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); - break; - } - } - break; } } catch ( Exception e ) { diff --git a/modules/mogo-module-service/src/main/res/drawable-ldpi/bg_map_marker_dark.png b/modules/mogo-module-service/src/main/res/drawable-ldpi/bg_map_marker_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f12819ecfc97f22ade5de6e7b2ac4b3da14defb5 GIT binary patch literal 4061 zcmV<342a00001b5ch_0Itp) z=>Px^mq|oHRA>dgTWgRM)fMjUnSF>*{D7b$8mL4=saUa$CNZHbON{bf3=0J1B;%dz2EKI zJ+tnvK<+Yg&OMLsoO55@(=!Bt*Df0|{rO8r%veED2xi2XIUmMx+$WS?u^0rQFcm?? zfIO68nCp|v=K{5qJ`CcpxII5+{LRm64_4BOqJbw`RFSKAJIdvQT&_Z2`Fv%-zM71m zbVtz!OFRWyW9BL=`v--1hhpJP6l)vjG6f@^boH{Lyk2oeonmTh*XM?gnsLxKR@~t= zv!w!40w~(Xrk&p9l?9Ihyh~SKsg>e&8rRrxCnvYJI*l4P?6K{j1 zRlpnntRtMHv9AHOui_w>F!?SmCaXYn<7N!eTh}xnm89Dh)0T)%@I_-L)ub)`-H)xB zeL~v0OmEJdrsJnvd#`3uMlH}~+OQEbXT?#xFerxmL_O|z&nz$58Y#!2BWLO$mBEti z!>ya1T6QLN&XKzW3RAg^s$02+hw-zrbJPZJa=z$*fKNA;=4q?7u7|NExGYCHHMKoi_$tM5M)*dz+9NS%`Yi1 z#~DR#>{+BOK74QO>Knffp&L@1d6I5DqBBk9kzOtrG>dTJ`Up5UNdDy6#3*ut&4qrwmE-W*HVM92YSI zn`CTiVV`Es&!&&Pj7B-_qg+&zA5(kNEDi~Wj6-9$5pl~@&IHP?b~y{Is|`?$gBH1q zixx&jn~|Mun<(c#37Gb`btLK0kQGwn7nGO7<6Vi@3&tU5*?MLjSt1i+MmYSmafpax zOLVxR&sSFECbbq>cZweYVRyd_8U=TOv3Qi zHLGSfP(oTZAeE$3u3mm|Tr4!oNS;iYp>}L#NaXDLbv>#yfU*HBArC>{Qb2BX&YF?Ydw6W?J2SdpcoSV$$jCE*m-HJXw6#${=1Mi>|M% zynS;1Z7QE$D@lgBlEa$DA4j6_Y>=Xs8+6M5afd zl!4043xQFWd8KfIaNsx28vOD*TmSMd0_rmnxu3Zjqo_WRcGv*ig%%g(qrGOsd++dJ zKP#s0%M8yUPO62xY-JfaKI9?AXw3MVMibaMVjl75<|sQ$<)3~Tg5sk=3>mNXzB)1X|= zOtoa60Wj~T84X9&8{so_TO@|YJOMP0iQa~=gz%h1_8BNUm$_V2oyP}TZ#CEqjVl2X zKqpC6LOpR56Bdk&7^b@=kL-CrnpC2CdCLUIbg6e!l38q7T&Z}oT{Ib_%wn-4n1r|H zl*_JUhDzI$S5$^eWV)hNSR8m^?(lLOSa=K<4{IGdD+5ozQhS5r>@}eZPD1# zr`I_Lt4M$hs1+vxM4*2*D1oh1k~CKf_OW>6@MuN((YSHr3L^MegUIA!!Wq!ak+=zf z|H=lSy`xNsc+&6L?JIispv$Lkuj+m-8&MLFLrEYekjPCUoIp)Bm9Wu>{M{8RuKOH4 zy&k^w(sPFgo%4e#=?_LQGmlANmy8=iu@rTZ7)HTamB`mMEzp}V@!;ht2%c!1w@{qk zf+K-kWu6SWWOz*=+LLnepw3x{ ztM$50W$@vjX*8w*;3)$q2fqBd53ZJntaFW61V z!eoN^UGk(vwA7@JLW}|4DN_^q=#5F^M|<*0Erw6BOVG@iSxK-no|$9AV%S#>nc_}aDg!8G^5~N%1*|-a zvGAg|$#Oy@qWNyz&WIUd87w=(z|n++D!#SzN1d^tr!5PT$xs<6^^~EX#g}|O!0$cZ zkOZ_qgw>p3EiJnON>&IU#R+q+O^LkOt}>Jv3$b@f<0}Cv%EnV$)mtC(NKzUe0Ko?o zjXWrt%-|OJ#a6VbScpd&353vS&j3jJ4nV|Oq*05R7z=nZr-`qcV4#6#2Hfz#wh6$7 z#ewGm1&U^tFp97aHZSG}sv;{VZ@YpJ{$BaoD{pI+p!!@uk@*H-WZ(i=o>^t}^dqIO zwbz7&XTrK?1;fp11`lN+L5@d9_K7tHJ>0Q=?VL?)W6{d5*2I8`i-DgYoV6(x5RbB8l|e2q$`U*)Lvl6_sc%bPVu7k&ym-w;9?Z=R zx-B{vh11tHEoy{~`}+0G*Z=hL+2;(w6kN!J1Xh6^MIg#FD9lYDCg6h7j@0*sO#ZYG zOO+QJQiCT}kiiBXx;G8g9IXsk_=B&kh+Eb*Ep(4c;hAbzOuhR%g*bRYR(`H@&zS9~ zG2xZnBq=260G&3fOAES+PpD*1`uT(fnYr&jzIxtEei|hOLfO!;zVe;z|9nxl|G9d= z*ov|V`9R>)=_j?hgv5qPsxNSPus}c_6kT}{6Mf7Yb3mWGTqj={IN;kCG&Edfe%%hG zZDk9j@~W%u?t7pRJumlkUxTdO05&1|b(VIF$MTqFx@1|h+oFn!3)ifu-_>4BdbX!m z`P84>e`4E#{cD4`c#%J(>2NU3O1?P3WPVH<9a%g4FnA$fm79?LvZY)Rohs0GoP5=? zA#qT6R3@#TFYgrJQTzdna7^OHZW9H%D?4|UfjE9_|URt=JA6cyR-Ze6<98aZ2WNQHOmLbK~a8b zRqV#3VM`tq%@rJl_sf3+df?HArf)TxqxXK)3uJ2R*RRiQcy8A#azLG9_8K(anvkOB06a6L5 P00000NkvXXu0mjf0$0LD literal 0 HcmV?d00001 diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/bg_map_marker_dark.png old mode 100755 new mode 100644 index c1ef274cbe39e9640552f72a30ee4ea702108d49..acdb4d70634f3face2d0addd87485a2007668275 GIT binary patch literal 9325 zcmV-zB$C^SP)PyECrLy>RCodHeG9Z))p_1IGb0IsAqH$>Fs`iv`~uC3K-WqIyJ8OM+BxI>wGnKtVx z;hQ4+Ok4^}8vw|E?9tl{uJ4R%ycbiGE8v7n1M+43SNWVdHykmL5ByAXQ9beKlLD4l zI{+9W>BdmK`E1^-WtsffSXBU;nig6tuhnYx_4Rr^lRnGwlh?Dl(lw>?S}jZE3O?tY z&msCK3{3{nSksCGc>~;9T{>5)7G$W8j9o^eU}NZhdGpF#G7)0awK+mVh#ID_N!KKF z5o+k*p$SB2=PX#IlcQx;Hhe)ziXr`$2bZgU!3YZT7T)olRx|ssz{|)2eCUCtB|Yet z+WbX#w&pFo(_EFLZ5RtKy1O@n(>{I0qo+-~{2!|D3UN;9TO!ES;M^8!aQYe7{8lzJ z@O+HO)g1G%CDb6@4p7objkEz!%WFT*`)12FKonxC^>-`5j9h?`yit?I2xV9SHBVB| z5F&ZQmVkp$SX^`gL}3Ma1IrsIh(y;S^rh*-lb))SI}aL_DryLzoCe2*{xkDFFGX;t z3l!0;fZmXD+b3B0fWVK_*CK!sL2uo74PmnEobzsLg=G#G#nyJI&%NLd^) z9=ehMtGzY2Pgc7VX#rqBRR?Z`aY%8-dG^H4)l^n_Vesjh%P_5Osv+W1gszR%3KEB_ zt1zK$j`QrR+gB;RUS^$p!?6Qz?vb+SjBx?la&c(fiVT8_O!57tZ2#C-ZZ)6NXRlx^ zh|z+LLj;Fo_NJ9wqiiF+#;h~1e-tYl(3)0U7GXG-CNl+9H2nZNoW1Pw`bRT4%=HWr zM>Z*L=R3#5CXn{58*&l4qy6l&|10b?LaD0e#Xh9sToK#>YYoi0t-T%&dYg7mfT3rV zVCv}z>^Kz&MMrP8PDC1dseP@UUrO@~#}=YjKtu)!z+5Vn>8cVT_`2d$M|3fUk+VZD zH-foa`mf#$R-v7J-mP$<26PaQeHjZ@Hi%_g`>*!co=9!v#Cutyezzu4rNwL`LphQ! zeCYmV>m!zuRpzOVj^`~}GawFi4#7a#`c6Bxapsw44pkaN%&wil=EBe3^TB=lhMvJ( z^xt=RPqvZI@gcj8=Co;x7s#4gDvRL+snq|Tkkyub^{aROWjA3B>qMR;?2+0}hLSEh zj~LIoEZth|?%g}@yxfZuqSDEf=}Vpz)KBTos?mG2 zjqR%>)m#S3k9mX@UY8#Y(!%adbA!dej`S?-yWrMC^+|yu$H2j` z7(gyhC}3(m=+r)I)^@-FnmTFy;%C32fmarXj2yjz0xaS?M+Rj&v3=heSMP(&j(R)} zbWKSqTus2@0}^7&%#r3MN4_ZItapt%YTs&21Unz^`}^d^r1v(Ep3Wmyrx1Fd07IVb z>8ep7L@rwGp&X)DvW@-Tp@AQX695xK>a8PTpgG_OPT6*Q0#}hc+FK^FxqxT!VSbEq z?qvj6G|LW8X)P1u;$#@k-reKv(TN=+$cFiV0vz38Ae?x|!-0EVLq7G*QdXB&(BJ@I zL25pZcJV?(*F5rKgCiCC7TMS|Wn0=W#37v@qULLg{u?1lZTJV&g5 z&(=MBBSPr`D!u-=Qm77TY(naQ=jbZ?ZCn57gxa=;uKPCzC_bUAj-nns1(!YsGff{D zWL5S^(oZ}FD1)1ZXrDkJ04kBry;`E6m~>&8yuvXL?I)qyokO-Ex968*!QR)Det5=1?({dXW~NzhBgD5E?I)JOqhG=^C6rh_xemm55c zFKj<^_v2R?L6-)uN9wc3P_1Ds9M;Q;-)=dJpt9I7Wn zfbu8^Xb647NHw%41@WYO(oq{WT>ewgY$YcU2zV|JQ=7iN)Mif~9J_w=hGms_l}y@R zbkUdIwP*14p9W{L{;;CdDwuY90W4?|xlKQB;Tm5tTV+|csmoW_u+6(_vVykg%8@j% zn!0rW@UER~Tz|#6m~1$ZW&3AcMK)5U^DbQL%QjMsak1-q;)nA-W!e=tHCrutwKvgX z&R$>)Y(F-c=VvD7+4Nnz?$QT>`Kj5?Pk`jNBzu zl1H|Vyi;DMT~cPZ=X8~b?E48neCcoZv#?2Aat0I~P>;tQ#pE*)JN-}yvnLLNf}P0L zJh5}l(xQj*h&E-3a894T{6Dm^A;0Uqa^jfAl!w5L69T7Zu}>2zO8w|p@^avB_)$X8 zcY%!=_|ePH?hj0=S%_RptYCVl3G(jrIWs9vwg3FvkMFqs-vyabjL`F^&AjT#R@VGf z8?o0j!q-0GcN%uG>m<+o>!x225~3F$3Z_b(YGz8wV}JeoLVj4kk6WP{Q`O7wgE6 z@)@`rbI6(E(kbB)$KiI=@7{ky-XpQHS!@1@n)o;w8G+cR{B-Q}d;)GvH5a(wW88ct zeHzd&`;;HXO4&O*xMFF8LC-jWZ5X zX94TePQR0XyakCmo*-kvf}7vJcPRS@9hamj!-dL-c?xk&Fj7CJ7uTnDK0_x@-4QR( ze)(|!HSdhkN~#pfuVSB*eRCYfT%$go)QSQ4L>x*RemJ$99_^@4b1!xdCGp0=wcp(I z#pN$Mk?+!wynw{H=iT;--2IQ#v9F*>>6dZPrj&5Eb`HSf5>TRS)axJFc>k5(B`fVa zCPIUG3s;@hZ01`r_7!CY&a;n~e3y|A%<*YY>@ed*Fo}#_mA4QbLA~Mnt`mtt7F>MS zZx0R*KAkn~rEs2JJVyQ42X5AM7Q!`(iCBX9mdzWklvnC{YsBu&szQ6wqP55FYYl!$ zsy~$z5@x~~xC~tPro3J9vk$GmVnYR7&#W;^gr4Pvi-X@B+Vcj+=?qavUJt#afBoWR z9FIjm=7}(<`HSvyg$IXZo=rUD;P%yN;)pO9TNfxM=P7WqJKe27AE04TOPp z)1QCwy|WiweD9CD(H)J>n9s;*pI-d&THflD7qw58O>&F`cZ{53uZg1<^H%LSIiYqP za!|f&+qN}7A5Gw??Whwut?!Bx1azm|T+mzdTY~V$;3-BmoNn^$@$nA_HbJd@dm-dVy-==XK_xf^B%$PQN+4SaM_Aw;DsSm&O=i)I7OA0iTb!$2p z#?W4m;;^L5KIL;9`+xDLe}`WQ(xJyM%}8q~+Yu^c74zC^ZwZ={YPtEL%x2LrMWP{? zjDFbDPZ$%!ON7X?X)~8UNe+93<)ClY)i289qNBNH$p>)U+R4ce>Sh=C)#Df&H1)}^ z@?SeVKWx_n;il=A){M_wcihmx{-a@>8WNCwJ9+rcR`n9(Qfg=43BMr!W%jC!ef)lD zH3tWt=8}LTbA}3rrJ?I0l$*G!Yc?nX*omFflwV=U<`)^1RMGT2P{}UA@phQCtUl}9 ztB$3uW;ApDiX#VKZ%(uzAOZkL7U)<+PVMRulhfi#G^JN_FrrZ(q~j zLPOU|m1n=})*m70h3_6N{a$-;vkL7LB zH-TR}>#Q4&F}J{TZ!k>)ZR?172qFq3c0}js$!Aa5X#5MtwZLiYYYyB9U^K2(aj9d* z#+9AwQLf6cr=4TSrw|Q?W4}ZlBk4xtKc6vYCH*6kLMyFdi%XXU6fyPPH3GNMC!1;x zv|IlZvI$4JH?Xr*9zhAt00ZVG*SEKd1|6{g)c5hY67&8-d*?-$8fcG`Bt*PU{)bva zeeQ;02*e5N-G`*U2^_f2&Kp{Ye#j+jY=NylhW%1@dcFFWh0&)o5^auRBs@NSWJR&J z<7VN+I(@EriaB#3-bB$09MPqJQ9E8{Bt%JvtT<;NY#!<|VyiHh2JHi;>Cq}w+H)AX z_O$QWf8IK#fjqbdiR#^uC{@M@m=BBL^$iJc-?!!z8DZjRwEpF$aacpA+m*t{!8PFm zOe^K%pg}QQUw9uk2?7y-en#s*&wpZjgbw^E!wA`1B%yMQ%tgdN(!i223_K|>oM(6_91sK?rF+1`#NYN|l`-db7<8f>h=~ufiO;dbs>FA*M#%@ ziWAkLyM*u<06BgvIEoJ!iXE^R1 zpmhvgX$;av7~3;YKZXtl4wrIY2&d?A6aQb{wDMx75l2uLDtF@`R=j&TM(<|?1KBupwHjimPPFQd2G9M2ZrnUSb?Eec z{PLO>ZjStir>5cQDQ3t0>%#xTo36byj-ili zPd*dyeo3_PKe?WNfGX?@iGV3zV|2I%&FX0HI4&12cS#Y90eSxvpa?OZpBY0cE#*{S ztwmR0WQpGM;Dak(@X(GZB?A8B`oTx3+*g{Rxq#9HIQII6?l-TKbBUGqil_s*)I1*j z*PfSEqrVbQbt~0f?mJA}50 zz+mqAYd+F!4Lqe41jA{k56dCahLWQZH5s?HGpq0tfEx##{1r*!-DFqwbXg@+-udUR zefPfBK7BJJmHBX-N3!R)MM*MBD$~|pGMCx-v(5d>PiYJ71jOj1mz{gT?LU{dY{)?% z1;^S&b0zj+lJ5cyGhq6@0A^jnacrMvBdedg@xi5A$RDonIuU@(U3mK<`NFCDyr*uh zeWt^O63O!XmCX-aIqXu3w3X~Ol!D#dg{wEoM>Xbh^QW7XGv;T+Su-EIy@#3gGnHq9 zjmE?i``2Aw_}0OK^EQJKB|@zE3s+wu@5{QgJVOS{0R4*dyO#*;Ti>lsp7eVg@4fVA z{hR zT*jk4_0(6JAO4-Gc)ypNPPJD5eV3j(9)5^9ZZiT058ij#AL2R5;fEa3)n`B$)B)Kq zUc903S*Y;}a@;oiNCTFyD>-I=w(nFq5>Ayz0{=;liud!80`5$98row7>^&SL=+U4D zGUzMYUsNm4Uy%MA@|%%AotRDfQ+a>!i(cUXAS{z#Lm)F}t~he<(B89K&7pZxMf=Qi zQt))>tL-MBGy|Ls%1e0_Cp1hh%OKx1pXZwnsvop<`}Uhh{P?xxwg(0y>A_@Vs#9hx zKQ3<#UDIkc=L>><{~=d5ZmE`hZ4iB&S^i&_) zMR>4@Td(#d{aXH_{1*7iukBj%aEv>a^q5b`)S1hsXG239q)_f<*SJEY(W7-*^QOfs z3Lj4ZY4p{tH~eahz>WP2{c5XTJO7F8x9AXLi*0W_BRLjytz{rxV#HJw6q*) z{YBp&GqCFY$ic2LJN1frp;HBv3wf$gywDasTI#=BxtM;taq#5nyS9FQ)E})J)r3r) zvHU}FU)U`x)O|36)gUaZ;WGBsGI=NMP|a%l&T_4DbQwOLNU;r>+85R2H)t=l^4gRq zcC7mAqNMu~E7!e+XwI0k{6hl+&2P#Xdl+wwJpnjn+M-7*o!Q{Y4}&C)9<7tTX@zU2 z1<(nvlRS9JewF3*Q${i|%r(MlPvU4A+B@*Srd9OQ&Sncu6OSq;x4(XFu6)$** zn+Tosi}@Af%U_*ToA}{JAHC@xiB{EnS5?BknODp6i00NR8F&aZ4wy9hZrW(=Qy=Ms z7YmYVkA6Io_~jjtXYbm6Yuo2BZI3MZBVcRN$>@2@x}_Dixb2cq3a$tAFws_Z|- zi?xHSo&V9}6^}sk&OEC9%eO9WMQw|bhEcE%ylmR+Yvi}itwnzM`y~(cu*CyCR$F3} z_)!kkWC#3?OTL4BwbQ_j@$-EBV}E>$eivI%sQ5*Kd~R&5OvE3;wXQ7o(P|F>&_Yvf z7#NK{rk&g%u&SH|-pK_EeMgt$EA7lhN*h?%inczc9a={@A~jt{8MxXNa&=k-UZiW* zxFUKq%|g1Uk7*}22$yG;edNS{b@GwVJpDflzq2Ev!p@j;&85v|cDD}n!rj0f0Cn=9 zK)PGGf<~9o;-&Txw340TOZC%nC;MLIDLy{qn_aeJ+b#D{;wPkU&UGhbt--(bH5Lt- zOBqHl-qFhS9dDXxz0&v-Jgi7!LPQ#URqIt>7b;^=2XbMI7?XBYdCT&zHBQ{M?MD5c zeD`TR#L|=($s`gN4B|sWQ0*EDg2uj5FEYo+WiX6CHWSyUgyrz`9P?)}(W;@Fp}`@)-7;Q<#S#G$b`8a!#SPo)`0xB3x=0wxg{zU3DC zGTjRQ30~X$TiFSi1K`-h-d6KQU8xc{`znWY%pNymG`^YFY-@@^9QME?jXtI!Q-4v9 zf-Ao3l@=rR4uC)qAd=7vt&`{am{vXEBL>iI+t zXU@6)C8{z#Jqs#v8_@i^>NoPdn|I2c*i<_`5L=V zG-QwT$+vcD(^V`tP_Bx!z#RjSfb|B9zztEZVFr_YN;mD2f3c>G!r|tQ73*&Do%GdK zF6gz9aD6F1!6py-q%|iQk9Yo<3w*rz6mC5f&uCks`Z;Gz5I^rs+7(2LgUH>sMxMNJ zfo+XdD33bf(~`XeA|RL)J1R@@y2;{#!o(@<;^oq?><~7N7v_xkNdLO>&rXpYk{|6? zoU8#0+Dd>tY!$j<>IyQRa#XH)I0cazfQ?C`uW0ZhCGablGH=SMectsGy)=`s!>fl;v_Jx}GX`g~s{P;`+(C`}87 zlDi7XHGH9h7A4|QhMqE7r1~Z|J=%rx5+U@eFQ^`mKAbTm zmJc1b4;?eoUOhNo zJA2iKAO4i|>DM$&-~7b3jK@WQ%=Djzqv%1yD2Io*p$WfAhn&?m;#J9!vo`edBiHZA zUd_Mm0hN!7`cWmLRbWnG$R7rS9*PQTy>sAr1{w2WU9&FR`(Q0>F>yzW^h#?SNWuAp z9%$F%A}Fo;QGCvh`B(~&0|!5((Ocf^)kc(jZ^qy_JEhFd!Kp1`quOcY052v z;LpOcm_S=j)>q{h^I{sf`lC>CaYMydo>Ce$sCMzhn4r`Av&rxHWm&eUdO_Uw_a({WnX1)F#=jrcDU>TPuj~h3|!O= zXVH3@QPp?7*%FuWg?_yAm#;nO*SSCc~)Q6icyiafm2h zM7NWhb478a(Z0Y68OhxfRy@JvlUMc%;POFcnjPX0x-Fj5N7VTDR_5QB)c71?){h=N z{k?De;-r6lYF%PDMT57vWwi<+|Iup_NXHcxDwdq*r{Z(pGa~{;qYl`l(W7;et5S67q@T()59Ro6Y7Ss*nVjIzYg>@)$5y9iF7= z>Jx`43LaYX9P)hgLinyRWS6S@K8evZ2ckE z!nIetU}@A?`yU~`6n!A8=O28y;%k8_Cj@>LELihS`3xX_@qW}u&-^srbjx=-B2xR& zj!XV!3y}wG(&*9JocXF(C0Conw|rs6t5vFPCxpsp&A&zdLP6_OI!^X{ z=YYep1$#IngyN+P3f%@vhCOdM@66*R6CgW|i$dcmIZOghoWPQ(tW^ z9VY~K=PbB&mfYyS(rE>?@zIuD!jmHf4-&#nRl?&jqbS9Sl@8Q+4F=DeBSx1J~q^9 zeND#ijZI~`FezMnidp`|lF*}-!1ecK56zdiw4N?<|3|dTy2TZ& zC%9kLW$kpum-PiNuRW8uTH9;&?4i-#kgFo-m3Kf)NLA2}Jn~5WvH$U-Z^<#|zxlJ% zjwtPb!~pk%dR|-FfB)jPAG)lH<*no$uoJ=}%w4qlHu?R?a*hjqPa7s5YSbGa-LUS` z?-Vc&u)zU8A*k293-A7etT`l4Lem*2Rh#Bi|^UB;G(8bsMmdzA?)LAn8~>eLhKr+q7zCfOm20oHrS~s<0SrbkAFtTuO}|HW=-6SP)@Dm zCHZwWKi@H5Q1E8|&DNXY{m)1%;*;NAXSJxp%hU0RiCE?0F9&U<2@iH`nf=N2g{M8t zzjMqkOy24Wcav^EO-~J4VwPRKMzJTIUaLqi;-kGg51dw1@oa|&UcGgOB#atGy02V>y1~-ab}M##TS7nXl9C?6Be3@(uL`F@OMSL7SH7AAZqm22Z24N(}T^B zq55Eub_&!5AzqzkJJkMruPsRxPn>$*qpd_5RU4V*T`lbh=@{z)0W)HO{q!&2r@nL1 zVKhzZG{YOzW!e#Y*;0w$zT3a*WDrIkCv4r+vh<;er}J|&osnj^UZ(Hpe&{VcX3#1t=u z(dX1OW0zMR9&C9wMvAly*BrvBr3~r@C7UFlx*4_O1&5|zd^YQhEmi34p&hm6J|Hew z;fwii&+{VaHwtXG`;|1!GICW0V&3cQbzng?2CQZ&Hzn_<7n^+E!eEVm%;NVdya#Sb z6mPX$M-`^69rjRe<47>OdhHhJsG4uldXG;&aX#gzqE>Q@u(xx#cpcAd%N@n>d+d)mAk@Na%yY3yGEw3wilydq+l6y{NcnHfgE>UH$k)T>^OIG)+SLnhkvxqL`y zCL`D4A}r|Y0!z3VT(eu_D_9uDv;oI6o5_Ajeq!muca>H-rI#6ggio%2F`JIL$DekR zl@yqNV`zqRlf$paDJ7`8w68X>FUvRS2?#49&(Nosbk+4I4(n^YEZprW+Sd7wHG#Rd zohs^2>r{-6e)j3WtfKyN#fy&LcgOqE2&>(&)dF=Nj(YM|ntE8PA}>`Uh!qz)c4$H3@%HZ z{SCv1@42wkv+=y+t4j(qU&+3uNzL(&{qQixp4j7Ax-#3nZvh|o?$7h!Lk@=*BsTKE zhzEVCF-}!ROpy=3HPu_!8}o@+(Qp0W`Z<1l$jLC|8x@8_x&-s?r+9Yb266RmS-Oqk zBmN%Cj&)8|{7PfC8!ML~?XWI;%QI5q;PL?L>Bw8u5Jj}_{HWp&T((=bUoO;;Qe!I# z>H51Zy9b~NL-yt0Uzjx_!N^D(cn7Z7P1rlw^IfxCNSgj1_X}jX5Yz{(;o|Zd(mCATKmRf9 zXLlmkEIJkS_Ch1Q|E%s9Nl$MB*ZH)32Ia2*)9g0^76{GX2Bf2YUX;guw(*ofmr~F@ z^=@iv8c!;ZMM?au^k9&ndG6ZbY|Wy@X78SSHQL?B>Br#roeTDNIXfuB{(OI%#t*#y zN7}Pzr0}Zh%r43NR~;NTA8qHc+ssx>?35kNlNweey)LkUB}S~T2!unkStCBGJLwL} z>eG6}vAp^SI1OAW%mb0lt%H7E!2ppG{S;vTs%&_9A7>MmI0(x$9H<%D~{ zb$#4zoY?Cn?gJLODzM`ay-MI9uZ#xwg&JVgf^SKAU5T4!I9Kw8aPK;ZB##jRmzdYH zrqNdB25VG?l*WFb)A#BY7q#Qx^>o_Hl7DkGx)dV2acHkVdGkc*7V1TW4 z*N0%sRtrvJcUK$E4JLaK(cKP6MJx(}+eC=Tn3E(|lEXo)3Ttyv35Q@N)#KVg{Qc~2 zQ7NYV_k8y5g=O%?Te704svMFlH!YK2V(9W72NvgGZd}g zQvki*DS{Ri_R+w&nr5C|;3B;nj0!^a4etRY!if|n-pt~#dr4^s+;mkjW_aZt)TRgc zk}tN|_+j?QZbjN;N>{kD9;qsBy>^ZhJF+*_=>)WubLM;S&mt%3B>Db9h0k)yUaI1S z>}lL*wGVcgm(SqlJb5)F-%hG0OlV8Z$u%+HS68D}(fHtTe-5Z5Xi#EaF|Y2PDZQX` z-?Nqq?*C*Rm9~NlqBLB|{P%;{{oeE{?+pcoRiqPXxWa5E5{T1g|I(2pem6kdH!BKI zjFgRzCs`SOK~Vo^WwY-GBp)WFBywve$9S4_JHk-MCi}^4pNZ{nFYtwqypLohbz~$& zoPY~*vGJ`}pw`&hM{Xt+>IeFkD-9`Sw9K&VKgim(B0AM#N8RzIqW$h>o`lx1evqapagPKc z(Q#t?$>pF69{E5e=g! z-+wM2g$~P$QsPd`79IV-uH~O3r_u{e)%o6bl4Bqwb$p)!jIqZSzF5XD*8POn{J#$) ziUsW9#KI%<<6tDM$S@rtON!S^G-ZBohs$KEpAsTfIMm-%Pf{VdBk$2&KiQz#lCaND z@G~0!+ob}^vw5Meew0+TNQ=b6E`WrnLN{qQ^M`q-FXq5OtNw63!U++73PJ0{hS5z* z^y-=O1Z1v%)6P%C7+p-JyQD|&JvTKj*-Ihp+@^K6CJC0>>v^S$wd+b?TGyojVeHLa z7OBck-s1Icg2~{#rhR5B|G&Uasfdn$K94wik>*O4yWp82f_e2f`0@t$Kco*2&8oW@ z_Q?XF>d`-`W~o5`UOg_irr9I1mvwHz}WkOUPd$gCyJZ$OcD*+yOO@%$4DE`e2u}bjCLV!ErB5Oq| zFrzMV%O8h7U{Jqh$%Mku^)s^k)?w&$#Oz-6H37fHa~_5fb@G%T*ZHBjXf@U*;s3eW zb(CBd`%oA7buQNi|-r_Cf*#Bq;l0aEhwuj776-Q3#x1kmFx@!cGFu_#2pDS1-uY;C%oUK+YOr)2zLP$zwJnnH-pXo|fS~{70WN}<0f~k+ zzAemucqe_o^;_i3OM)>AyuIi8V;%Ukx>QSUs*JAt`=I&3&n-A@B?2ayiV{5_5D9@-2! zUfh=K)!6I)51q=Y(>=7n41hh5ddzaoO7iMEBC0&3`(>LL2=UjYG1!8ChJT!z zZjG6;nFadK-ZY$G*#jGz9imc@CZFQJI}XH?k~h-@UzAl-R~|4<6s}W+@H_b^+_Q_E ziB{%*^sOqpBWkLjk*?U`wouOOqCSwHM00e!1~+>3x`N{`KoC{Dtw|v#NGG&^9pSLQ z4YH?5L##JHY~8zz)Y0&>xTIng!-VHwM09ZDWB=gy=6+{Bp_GOIZOzn{*ZzI}2#N{J z{}wUE{8HKH}X)eip9x6ocr-gp4d*!xc8I;jlE<-h_%|)|2l;#~&F} zW*g8VXuOikWxX5l_ua87awy8`((dj=A?lMd8#=q5uKoL#1m%m`#JGuq5)c%nf8BA` zWrZV;9%B@#y~{)r^HdG4Te(nkgaxwlvXaRZPP7C^2uaB#wN*F=4}$EQso`2FJqfj( zh7Y~Vhtp9i7fzIR$r8(T9i6#Es-qH=vMu(bFVzlLCiGjQcb~9`PjM55^?r*gyX?@Y zDV68Jyd?47OfGw^4!R#gm%M%u&sk-Dvu>DMd9RNnGlESFm}GJfj?Y zhsvY*6G=X$(*yL=)Q4@#9iO$J&LVC@0;+}~z1#Ol;;WD#f6)xB^PLmB4VWqE_$(;l z<(2%|up7-#!^gyJ8}j&Ox73CWQH%C{SAhb2Nf;55ozM~f1st^h+bwGAzRk&#ox85h|XGp)4PsoCR3SYGw&O*K5 zQuwlkR_2gV@n(kjE8;rx?BpR|5wu$NV}sP>y4V5jrM^SM+spBd1%B-+LAYaxv04n5OB}O< z3cRrJ%?SCFUi^jXNwQPHuomn%aFv!8rZB@X`(uL$q6f@zA&IYr_J*z=KK^cnh8Mmo zFf}vN?~IVF#_PoJdK*S3fD0@IBKptb`XTe`U!`yx09f`NFDm<1kA! zmLQ%=Q6NQ!0+e4+|EI&8(e!almM&;^&3?)nCoSc{o;N>s!lWwg3P^3UJ|lru7<<~Y z@U8nhU{rl!t#l~S0`@!A`8=F`K9vASAG#H(=B^TT_SI(AKhWoz{lG9Sgy)s~700qu zP3Q5yB@?PR6M{gd^e9L59pv<|iQziya1-}4n(kJfP24|J{cBRwaW^>8M}dfjlz~q1 z?)w-nrJq55Ga4&_+#E68uH{p_{RQCqzdKs$s0%yy6-r&&_suokz3w#6I_=6RXf`((}&KF7NSE0L?En zh&auF48h?s8`49)`mTovxBY^(N{_$ZSR5Z0TN`xY$17x=Yhj!7QBtqz553 zW?z&xw5!sGUnqaZ@t5LOPnr|>qz{6I0;=iTYU(>=jh;42gCpxFYVD*m0IP$i@j{3u zWV+`2rY1?1)h@&Ix{_7i54%3oGMw6{%xXhrKAOKCLa^94UT8#=ea%>kx02>Yz$tSm ztz~w~JwaLtSl&YC$p!9kudB8V5bHjb^1?1j!#e}e23t<~ZSL#CH5#~dr27b(&%yt5 zA0;K`<-sNG-tU89fU}a&^9cygQwVD@?=QssRX>*m#94orB@nivhC3o!l}%u_Z;>Y= zhWPGy_ueg*QxKsnKp4|i79}&X(Q}nTpzra2dF>{yL_7%ZabGfm?t?JY1~RMRsWpo# z-6xdLoW39Yu;MRfl2KG~g3wbUOkUCW=fFMLIg-&?hqSuty@qXx5qCv7iDRDM6Uu|u z4}>7ifFmB5OcjPs;QX}};w!#E%b5e-xduW%V$-D=cn0d9Nc&jpjR2OcO=Mbe8G^MM z{G7yKTX7b*HESOqx>;Bmk;Tp+RU{z+|3eHt@QF8z-eB3n!pe#7C{|@^yMXaPS^)ys z7~>Pu{sL6z>Fp(nfu@2;tXP5MmjQxDZ5T_iDr+`tc=pHrg$e)_JCbMQ2F+GIE+2*r zAyb(IySJI-?}B6(9C1(M41Qx-mEzWH4dJXz^s+@6)?4PN!_i#OCWa*T#Y;AtYg*iX zr>;PLl#P=n6QeX1P)UjiBhixXbdZD{;wk!V9?#au+vWCrF_eq~6W~px!T1_1lLQ31 zk(8b-f8#(GhiLwCBIpb`JuD#WSxuw_3U~D)Wk7KfG?L?g^dXN?xtQ`5wBLpT(FI>s zmt5&f8=-P)e+W@1XQexzxZ>;}i_Oy(Qta&o4J4=hHubFp4>D%jerBiDgZ;IM9#8LP z`|JO7H;(e0nHN>2$;@&}Lm-+`w5pUqfVCi@MVXyrYo5~J`ySFU8Tc>xo`(r_$h$F+ z)%KFHLY~1pW9&2ax#~%@WLiQgImwdI@b_Gme-0#?d1l}wygBWYG#+tJbQ&;wbhq@6T zBnG>#S&I&_uD{KVDq~bA=$KN*$)GSl4;X|YJIn{KB#hoT($mSb4}=xbO2 zUj+*U*i?cXIi6`>6;Ys{vg9gk49vaH%aTPaNwTzKW0#g&o#|7cN~@*0=fI3H+pWm= zfF3VhxH!pwUm6eMRRk7@-Yzaz5XC_2NneVZQpg7`j#WdD$n`Ic#a~MJJ{gQNy~0?C zM^O+cPpFg4G;LCWzPhHS>JJd?Aj+KBcRg@)-8xQPz!+WJ=o&;#Aiq-dKy8tCWBv+y`~r8nq@>Z+VJP_lFN3OcTu(Tm=rO@OIO8+=vTkH&F7G;;zME5mF|F+_MarUzRp2cOr1f_mh%y?)M30=ZZ%&L!2ZQha=r*b0IB07A z+w2VP^B_bPCk~BxG4RP%VqS^cx7dt%si7fsE%oum>IXwz@ez2j>!UIvDzTLmqJgS} zz!vOiS=#7*jrYETUGg$>Qvmgpm6T6`TMSo0M|UYOGzN}tI<8X1-V9XTKPzpw@xZU6 XWn_o@$Mn#zTm diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index 689fcee3f6..319576c88d 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml @@ -6,60 +6,35 @@ android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" - android:paddingStart="@dimen/dp_5" - android:paddingEnd="@dimen/dp_5" - tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout" > + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> - + - - + android:scaleType="fitXY" + android:src="@drawable/bg_map_marker_dark" /> + android:layout_width="@dimen/module_service_marker_bubble_icon_width" + android:layout_height="@dimen/module_service_marker_bubble_icon_height" + android:layout_marginTop="@dimen/module_service_marker_bubble_icon_marginTop" + android:layout_gravity="center_horizontal" + tools:src="@drawable/icon_map_marker_road_block_up"/> - + - \ No newline at end of file + android:layout_marginTop="@dimen/module_service_marker_dot_marginTop" + android:src="@drawable/icon_map_marker_location_yellow" /> + \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml index 2b962ef22e..6e19f7c8e2 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml @@ -64,7 +64,6 @@ + android:src="@drawable/icon_map_marker_location_yellow" /> \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml new file mode 100644 index 0000000000..dd048922b7 --- /dev/null +++ b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml @@ -0,0 +1,10 @@ + + + 16dp + 8dp + 56px + 65px + 27px + 27px + 14px + \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml new file mode 100644 index 0000000000..b58958d247 --- /dev/null +++ b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml @@ -0,0 +1,10 @@ + + + 30dp + 15dp + 100px + 117px + 50px + 50px + 24px + \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values/dimens.xml b/modules/mogo-module-service/src/main/res/values/dimens.xml new file mode 100644 index 0000000000..b58958d247 --- /dev/null +++ b/modules/mogo-module-service/src/main/res/values/dimens.xml @@ -0,0 +1,10 @@ + + + 30dp + 15dp + 100px + 117px + 50px + 50px + 24px + \ No newline at end of file