From b108ef45ccf5797c9f2685f31085e0cd08f08e63 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Apr 2020 18:44:37 +0800 Subject: [PATCH 1/4] changed background --- .../src/main/res/layout/module_authorize_fragment.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml b/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml index d9b7c29f63..8399d8ee30 100644 --- a/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml +++ b/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#000000"> + android:background="#CC000000"> Date: Wed, 1 Apr 2020 19:06:55 +0800 Subject: [PATCH 2/4] opt --- .../com/mogo/launcher/MogoApplication.java | 4 +- gradle.properties | 38 +++++++++--------- .../mogo/map/impl/amap/navi/NaviClient.java | 1 + .../impl/amap/navi/NaviListenerAdapter.java | 11 ++--- .../map/impl/amap/navi/NaviOverlayHelper.java | 10 ++--- .../com/mogo/module/apps/AppFilterImpl.java | 6 +-- .../com/mogo/module/apps/model/AppEnum.java | 5 ++- .../com/mogo/module/apps/model/AppsModel.java | 2 +- .../drawable-ldpi/module_apps_ic_bt_phone.png | Bin 0 -> 9558 bytes .../module_apps_ic_bt_phone.png | Bin 0 -> 27417 bytes .../biz/MogoAuthorizeManagerImpl.kt | 15 +++---- 11 files changed, 47 insertions(+), 45 deletions(-) create mode 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_bt_phone.png create mode 100644 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_bt_phone.png diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 54b2fe0c31..45ac48420c 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -40,6 +40,8 @@ public class MogoApplication extends AbsMogoApplication { @Override public void onCreate() { + DebugConfig.setNetMode(BuildConfig.NET_ENV); + DebugConfig.setDebug(BuildConfig.DEBUG); super.onCreate(); // Crash 日志收集 final long start = System.currentTimeMillis(); @@ -77,7 +79,5 @@ public class MogoApplication extends AbsMogoApplication { protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); - DebugConfig.setNetMode(BuildConfig.NET_ENV); - DebugConfig.setDebug(BuildConfig.DEBUG); } } diff --git a/gradle.properties b/gradle.properties index 10b4aa2f49..a8ffc9718d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,24 +27,24 @@ PASSWORD=xintai2018 RELEASE=false # 模块版本 ## 工程内模块 -MOGO_MODULE_SHARE_VERSION=1.0.3-SNAPSHOT -MOGO_COMMONS_VERSION=1.0.3-SNAPSHOT -MOGO_UTILS_VERSION=1.0.3-SNAPSHOT -MAP_AMAP_VERSION=1.0.3-SNAPSHOT -MOGO_MAP_VERSION=1.0.3-SNAPSHOT -MOGO_MAP_API_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_COMMON_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_MAIN_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_MAP_VERSION=1.0.3-SNAPSHOT -MOGO_SERVICE_VERSION=1.0.3-SNAPSHOT -MOGO_SERVICE_API_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_APPS_VERSION=1.0.3-SNAPSHOT -MOGO_CONNECTION_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_NAVI_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_SERVICE_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_EXTENSIONS_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_SEARCH_VERSION=1.0.3-SNAPSHOT -MOGO_MODULE_BACK_VERSION=1.0.3-SNAPSHOT +MOGO_MODULE_SHARE_VERSION=1.0.3.1-SNAPSHOT +MOGO_COMMONS_VERSION=1.0.3.1-SNAPSHOT +MOGO_UTILS_VERSION=1.0.3.1-SNAPSHOT +MAP_AMAP_VERSION=1.0.3.1-SNAPSHOT +MOGO_MAP_VERSION=1.0.3.1-SNAPSHOT +MOGO_MAP_API_VERSION=1.0.3.1.1-SNAPSHOT +MOGO_MODULE_COMMON_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_MAIN_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_MAP_VERSION=1.0.3.1-SNAPSHOT +MOGO_SERVICE_VERSION=1.0.3.1-SNAPSHOT +MOGO_SERVICE_API_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_APPS_VERSION=1.0.3.1-SNAPSHOT +MOGO_CONNECTION_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_NAVI_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_SERVICE_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_EXTENSIONS_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_SEARCH_VERSION=1.0.3.1-SNAPSHOT +MOGO_MODULE_BACK_VERSION=1.0.3.1-SNAPSHOT MOGO_MODULE_AUTHORIZE_VERSION=1.0.0-SNAPSHOT MOGO_MODULE_GUIDE_VERSION=1.0.0-SNAPSHOT @@ -60,7 +60,7 @@ MOGO_MODULE_GUIDESHOW_VERSION=1.0.2-SNAPSHOT # 视频引导接口 MOGO_MODULE_GUIDESHOW_PROVIDER_VERSION=1.0.2-SNAPSHOT # 在线车辆F -MOGO_MODULE_ONLINECAR_VERSION=1.0.3-SNAPSHOT +MOGO_MODULE_ONLINECAR_VERSION=1.0.3.1-SNAPSHOT # v2x MOGO_MODULE_V2X_VERSION=1.0.3-SNAPSHOT # 媒体卡片 diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java index 5385e50fbf..625b8bb4dd 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java @@ -41,6 +41,7 @@ public class NaviClient implements IMogoNavi { /** * 导航策略配置 */ + private MogoNaviConfig mMogoNaviConfig = new MogoNaviConfig(); private static volatile NaviClient sInstance; diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java index 6d694a51fa..1b6eef41bc 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java @@ -158,6 +158,7 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { @Override public void onStartNavi( int type ) { + Logger.d( TAG, "onStartNavi type = %s", type ); // 巡航 if ( type != NaviType.CRUISE ) { setStopped( false ); @@ -223,13 +224,9 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { super.onCalculateRouteSuccess( aMapCalcRouteResult ); Logger.i( TAG, "导航规划成功" ); setStopped( false ); - WorkThreadHandler.getInstance().post( ()->{ - mNaviOverlayHelper.showCalculatedPaths(()->{ - UiThreadHandler.post( ()->{ - MogoNaviListenerHandler.getInstance().onCalculateSuccess(); - AMapMessageManager.getInstance().postCalculateSuccess(); - } ); - }); + mNaviOverlayHelper.showCalculatedPaths( () -> { + AMapMessageManager.getInstance().postCalculateSuccess(); + MogoNaviListenerHandler.getInstance().onCalculateSuccess(); } ); } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java index ee13555bc3..d0472098d2 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java @@ -170,6 +170,7 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { } public void showBounds() { + Logger.d( TAG, "showBounds" ); showPathsBound( getBounds(), null ); } @@ -187,11 +188,9 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { mBoundRect.right, mBoundRect.top, mBoundRect.bottom )); - UiThreadHandler.postDelayed( ()->{ - if ( after != null ) { - after.run(); - } - }, 2000 ); + if ( after != null ) { + after.run(); + } } private void checkAMapInstance() { @@ -218,6 +217,7 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { //wrapper.setStartBitmap( R.drawable.ic_navi_start ) // .setEndBitmap( R.drawable.ic_navi_target ); mAMapNavi.selectRouteId( item.getId() ); + Logger.d( TAG, "renderPathOverlay set default path" ); } wrapper.addToMap(); wrapper.setTransparency( i == 0 ? AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED : AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java index 7f8776b806..f7695d5ff6 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java @@ -43,9 +43,9 @@ public class AppFilterImpl implements AppFilter { if ( !AppEnumHelper.isCustomizedApp( packageInfo.packageName ) ) { return true; } - if ( noLaunchIntent( packageInfo ) ) { - return true; - } +// if ( noLaunchIntent( packageInfo ) ) { +// return true; +// } return false; } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index 39cdd6fad7..2ac25cee1b 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -65,7 +65,7 @@ public enum AppEnum { AUX( "AUX", "com.nwd.auxin", R.drawable.module_apps_ic_aux ), //FM - FM( "FM", "com.nwd.radio", R.drawable.module_apps_ic_fm ), + FM( "FM收音机", "com.nwd.radio", R.drawable.module_apps_ic_fm ), // 新鲜事 FreshThings( "新鲜事", "com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ), @@ -78,6 +78,9 @@ public enum AppEnum { // 车辆信息 CanBus( "车辆信息", "com.zd.canbus", R.drawable.module_apps_ic_canbus ), + + // 蓝牙电话 + BT_PHONE( "蓝牙电话", "com.nwd.android.phone", R.drawable.module_apps_ic_bt_phone ), ; private String mName; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java index 1917fef3e4..1ec2093149 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java @@ -122,7 +122,7 @@ public class AppsModel { private String getApplicationName( PackageManager packageManager, PackageInfo packageInfo ) { String name = packageManager.getApplicationLabel( packageInfo.applicationInfo ).toString(); - if ( name.startsWith( "com." ) || name.split( "." ).length > 3 ) { + if ( AppEnumHelper.isCustomizedApp( packageInfo.packageName ) ) { return AppEnumHelper.getTargetName( packageInfo.packageName ); } return name; diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_bt_phone.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_bt_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..65b23ed5dde4677d6ea111994b4cfaf8d2963c9e GIT binary patch literal 9558 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 A!vFvP literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_bt_phone.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_bt_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..a40e2586d71df69fc6544c69164daa7bcf896038 GIT binary patch literal 27417 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 xorn Date: Thu, 2 Apr 2020 11:00:05 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/common/entity/MarkerCarInfo.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java index da1934a703..3ff892d263 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCarInfo.java @@ -86,11 +86,21 @@ public class MarkerCarInfo implements Serializable { @Override public String toString() { - return "CarLive{" + + return "CarLiveInfo{" + "videoUrl='" + videoUrl + '\'' + ", videoChannel='" + videoChannel + '\'' + ", videoSn='" + videoSn + '\'' + '}'; } } + + @Override + public String toString() { + return "MarkerCarInfo{" + + "carBrandLogoUrl='" + carBrandLogoUrl + '\'' + + ", carTypeName='" + carTypeName + '\'' + + ", vehicleType=" + vehicleType + + ", carLiveInfo=" + carLiveInfo + + '}'; + } } From 0626b8a1cbb9f66d70fcf35992bed0a9dd2c139d Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 2 Apr 2020 11:22:48 +0800 Subject: [PATCH 4/4] opt --- .../com/mogo/module/apps/AppFilterImpl.java | 6 +- .../com/mogo/module/apps/AppsPresenter.java | 82 +++++++++++++++---- .../apps/applaunch/GuideShowLauncher.java | 10 ++- .../com/mogo/module/apps/model/AppEnum.java | 2 +- .../mogo/module/apps/model/UnScannedApps.java | 24 ++++++ .../module/main/cards/MogoModulesManager.java | 4 +- 6 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/UnScannedApps.java diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java index f7695d5ff6..7f8776b806 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppFilterImpl.java @@ -43,9 +43,9 @@ public class AppFilterImpl implements AppFilter { if ( !AppEnumHelper.isCustomizedApp( packageInfo.packageName ) ) { return true; } -// if ( noLaunchIntent( packageInfo ) ) { -// return true; -// } + if ( noLaunchIntent( packageInfo ) ) { + return true; + } return false; } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java index f722a9418e..54f42368d3 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java @@ -1,5 +1,7 @@ package com.mogo.module.apps; +import android.text.TextUtils; + import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; @@ -11,6 +13,8 @@ import com.mogo.module.apps.applaunch.CardAppLauncher; import com.mogo.module.apps.applaunch.GuideShowLauncher; import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.model.AppsModel; +import com.mogo.module.apps.model.UnScannedApps; +import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; @@ -20,7 +24,6 @@ import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,14 +43,17 @@ public class AppsPresenter extends Presenter { private IMogoAnalytics mAnalytics; private AppLaunchFilter mLauncher; + private IMogoServiceApis mApis; + private IMogoCardManager mCardManager; private IMogoStatusManager mMogoStatusManager; public AppsPresenter(AppsView view) { super(view); - mCardManager = (IMogoCardManager) ARouter.getInstance().build(MogoServicePaths.PATH_CARD_MANAGER).navigation(getContext()); + mApis = (IMogoServiceApis)ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(getContext()); + mCardManager = mApis.getCardManagerApi(); CardAppLauncher cardAppLauncher = new CardAppLauncher(this, mCardManager); - GuideShowLauncher guideShowLauncher = new GuideShowLauncher(); + GuideShowLauncher guideShowLauncher = new GuideShowLauncher(mApis.getMapServiceApi().getNavi( getContext() )); cardAppLauncher.setNext(guideShowLauncher); guideShowLauncher.setNext(new AppLauncher()); mLauncher = cardAppLauncher; @@ -63,8 +69,8 @@ public class AppsPresenter extends Presenter { } }); - mAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation(getContext()); - mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(); + mAnalytics = mApis.getAnalyticsApi(); + mMogoStatusManager = mApis.getStatusManagerApi(); mMogoStatusManager.setAppListUIShow(TAG, true); } @@ -73,9 +79,10 @@ public class AppsPresenter extends Presenter { AppsModel.getInstance(getContext()).load(appInfoList -> { Logger.d(TAG, "apps: %s", appInfoList); + final Map> result = addOthersEntrances( appInfoList ); UiThreadHandler.post(() -> { if (mView != null) { - mView.renderApps(addGuideAppEntrance(appInfoList)); + mView.renderApps( result ); } }); }); @@ -83,7 +90,12 @@ public class AppsPresenter extends Presenter { }); } - private Map> addGuideAppEntrance(Map> appInfoMap) { + /** + * 新增入口 + * @param appInfoMap + * @return + */ + private Map> addOthersEntrances( Map> appInfoMap) { Map> result = new HashMap<>(); if ( appInfoMap != null && !appInfoMap.isEmpty() ) { @@ -99,18 +111,60 @@ public class AppsPresenter extends Presenter { } } - if (result.isEmpty()) { - result.put(0, new ArrayList<>()); - } else if (result.get(result.size() - 1) == null) { - result.put(result.size() - 1, new ArrayList<>()); - } else if (result.get(result.size() - 1).size() == AppsConst.TOTAL_SIZE_EACH_PAGE) { - result.put(result.size(), new ArrayList<>()); + // 手动添加无法识别到的app + List apps = UnScannedApps.getUnScannedApps(); + if ( apps != null && !apps.isEmpty() ) { + for ( AppInfo app : apps ) { + if ( app == null ) { + continue; + } + Set keys = result.keySet(); + boolean addFlag = true; + for ( Integer key : keys ) { + List val = result.get( key ); + // 无法扫描到蓝牙电话app,这里手动添加 + for ( AppInfo appInfo : val ) { + if ( appInfo == null ) { + continue; + } + if ( TextUtils.equals( appInfo.getPackageName(), app.getPackageName() ) ) { + addFlag = false; + break; + } + } + if ( !addFlag ) { + break; + } + } + if ( addFlag ) { + growthCapacity(result); + result.get(result.size() - 1).add(app); + } + } } - // 添加逻辑 + growthCapacity(result); + // 添加介绍入口 result.get(result.size() - 1).add(new AppInfo(GuideShowLauncher.APP_INFO_NAME_GUIDE_SHOW, getContext().getPackageName(), null, 0, null, R.drawable.module_apps_ic_guide_show)); return result; } + /** + * 扩容 + * @param target + */ + private void growthCapacity( Map> target ){ + if ( target == null ) { + return; + } + if (target.isEmpty()) { + target.put(0, new ArrayList<>()); + } else if (target.get(target.size() - 1) == null) { + target.put(target.size() - 1, new ArrayList<>()); + } else if (target.get(target.size() - 1).size() == AppsConst.TOTAL_SIZE_EACH_PAGE) { + target.put(target.size(), new ArrayList<>()); + } + } + public void launch(AppInfo appInfo) { if (appInfo == null) { return; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java index 115ee5b844..88e5068c61 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Context; import com.mogo.commons.voice.AIAssist; -import com.mogo.map.impl.amap.navi.NaviClient; +import com.mogo.map.navi.IMogoNavi; import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.R; import com.mogo.module.apps.model.AppInfo; @@ -17,10 +17,16 @@ public class GuideShowLauncher extends BaseAppLauncher { public static final String TAG = "GuideShowLauncher"; public static final String APP_INFO_NAME_GUIDE_SHOW = "新手引导"; + private IMogoNavi mNavi; + + public GuideShowLauncher( IMogoNavi navi ) { + this.mNavi = navi; + } + @Override public void launch(Context context, AppInfo appInfo) { if (appInfo != null && APP_INFO_NAME_GUIDE_SHOW.equals(appInfo.getName())) { - if (!NaviClient.getInstance(context).isNaviing()) { + if ( mNavi != null && !mNavi.isNaviing()) { AppServiceHandler.getMogoGuideShow().playGuideVideo((Activity) context, (s) -> { Logger.d(TAG, s); return Unit.INSTANCE; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index 2ac25cee1b..7837c2cd77 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -77,7 +77,7 @@ public enum AppEnum { LocalVideo( "本地视频", "com.zhidao.video", R.drawable.module_apps_ic_local_video ), // 车辆信息 - CanBus( "车辆信息", "com.zd.canbus", R.drawable.module_apps_ic_canbus ), + CanBus( "车辆信息", "com.nwd.can.setting", R.drawable.module_apps_ic_canbus ), // 蓝牙电话 BT_PHONE( "蓝牙电话", "com.nwd.android.phone", R.drawable.module_apps_ic_bt_phone ), diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/UnScannedApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/UnScannedApps.java new file mode 100644 index 0000000000..7028085838 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/UnScannedApps.java @@ -0,0 +1,24 @@ +package com.mogo.module.apps.model; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author congtaowang + * @since 2020-04-02 + *

+ * 扫描不到的app + */ +public class UnScannedApps { + + private static List< AppInfo > sUnScannedApps = new ArrayList<>(); + + static { + sUnScannedApps.add( new AppInfo( AppEnum.BT_PHONE.getName(), AppEnum.BT_PHONE.getPkg(), null, 0, null, AppEnum.BT_PHONE.getIconResId() ) ); + sUnScannedApps.add( new AppInfo( AppEnum.CanBus.getName(), AppEnum.CanBus.getPkg(), null, 0, null, AppEnum.CanBus.getIconResId() ) ); + } + + public static List< AppInfo > getUnScannedApps() { + return sUnScannedApps; + } +} diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index 0f3a593dc2..e23b2ec31e 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -280,7 +280,7 @@ public class MogoModulesManager implements MogoModulesHandler, mSortedCards.remove( mEnableModuleName ); mSortedCards.add( 0, mEnableModuleName ); SharedPrefsMgr.getInstance( getContext() ).putString( KEY_SORTED_CARD_MODULES, GsonUtil.jsonFromObject( mSortedCards ) ); - Log.i( TAG, "enable & disable card cost " + ( System.currentTimeMillis() - start1 ) + "ms" ); + Logger.i( TAG, "enable & disable card cost " + ( System.currentTimeMillis() - start1 ) + "ms" ); CardIntroduceConfigs.broadcastCardIntroduce( mActivity, mEnableModuleName ); } @@ -401,7 +401,7 @@ public class MogoModulesManager implements MogoModulesHandler, } } } - Log.i( TAG, "onMapChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" ); + Logger.i( TAG, "onMapChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" ); } @Override