diff --git a/app/build.gradle b/app/build.gradle index d6878216d1..d8ebdb280d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,7 +55,7 @@ android { sourceSets { main { - manifest.srcFile 'src/independent/AndroidManifest.xml' + manifest.srcFile 'src/main/AndroidManifest.xml' } launcher { manifest.srcFile 'src/launcher/AndroidManifest.xml' @@ -76,6 +76,8 @@ android { buildConfigField 'boolean', 'LAUNCH_LOCATION_SERVICE', 'false' // 是否使用自定义导航 buildConfigField 'boolean', 'USE_CUSTOM_NAVI', 'false' + // 是否作为 launcher 运行 + buildConfigField 'boolean', 'IS_LAUNCHER', 'false' } // launcher app launcher{ @@ -85,6 +87,8 @@ android { buildConfigField 'boolean', 'LAUNCH_LOCATION_SERVICE', 'true' // 是否使用自定义导航 buildConfigField 'boolean', 'USE_CUSTOM_NAVI', 'false' + // 是否作为 launcher 运行 + buildConfigField 'boolean', 'IS_LAUNCHER', 'true' } // f系列-分体机全系列,未细分 f8xx{ @@ -148,28 +152,6 @@ def generateVersionCode() { } } -configurations { - f8xxLauncherQaDebugImplementation - f8xxLauncherDemoDebugImplementation - f8xxLauncherOnlineDebugImplementation - e8xxLauncherQaDebugImplementation - e8xxLauncherDemoDebugImplementation - e8xxLauncherOnlineDebugImplementation - d8xxIndependentQaDebugImplementation - d8xxIndependentDemoDebugImplementation - d8xxIndependentOnlineDebugImplementation - - f8xxLauncherQaReleaseImplementation - f8xxLauncherDemoReleaseImplementation - f8xxLauncherOnlineReleaseImplementation - e8xxLauncherQaReleaseImplementation - e8xxLauncherDemoReleaseImplementation - e8xxLauncherOnlineReleaseImplementation - d8xxIndependentQaReleaseImplementation - d8xxIndependentDemoReleaseImplementation - d8xxIndependentOnlineReleaseImplementation -} - dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) @@ -182,8 +164,6 @@ dependencies { testImplementation rootProject.ext.dependencies.leakcanary releaseImplementation rootProject.ext.dependencies.leakcanarynoop -// implementation rootProject.ext.dependencies.moduledemo -// implementation rootProject.ext.dependencies.moduledemo2 implementation rootProject.ext.dependencies.carcallprovider implementation rootProject.ext.dependencies.carcall implementation rootProject.ext.dependencies.guideshowprovider @@ -194,7 +174,6 @@ dependencies { } implementation rootProject.ext.dependencies.moduleadcard - implementation rootProject.ext.dependencies.moduleonlinecar implementation rootProject.ext.dependencies.moduleV2x implementation rootProject.ext.dependencies.moduletanlu, { exclude group: 'com.mogo.module', module: 'module-share' @@ -206,7 +185,6 @@ dependencies { implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.modulecommon implementation rootProject.ext.dependencies.modulesearch - implementation rootProject.ext.dependencies.mogomoduleback implementation rootProject.ext.dependencies.mogomoduleguide implementation rootProject.ext.dependencies.mogomoduleauth debugImplementation rootProject.ext.dependencies.gpssimulatordebug @@ -219,7 +197,6 @@ dependencies { implementation project(':foudations:mogo-commons') implementation project(':modules:mogo-module-common') implementation project(':modules:mogo-module-search') - implementation project(':modules:mogo-module-back') implementation project(':modules:mogo-module-guide') implementation project(':modules:mogo-module-authorize') debugImplementation project(':modules:mogo-module-gps-simulator-debug') diff --git a/app/libs/t.txt b/app/libs/t.txt new file mode 100644 index 0000000000..39e7f60219 --- /dev/null +++ b/app/libs/t.txt @@ -0,0 +1,107 @@ +mogoLatLngs.add( new MogoLatLng(39.615986, 116.396716)); +mogoLatLngs.add( new MogoLatLng(39.616007, 116.396995)); +mogoLatLngs.add( new MogoLatLng(39.616012, 116.397169)); +mogoLatLngs.add( new MogoLatLng(39.616017, 116.397343)); +mogoLatLngs.add( new MogoLatLng(39.616022, 116.397517)); +mogoLatLngs.add( new MogoLatLng(39.616029, 116.397693)); +mogoLatLngs.add( new MogoLatLng(39.616039, 116.397896)); +mogoLatLngs.add( new MogoLatLng(39.616051, 116.3981)); +mogoLatLngs.add( new MogoLatLng(39.616058, 116.39827)); +mogoLatLngs.add( new MogoLatLng(39.616066, 116.398441)); +mogoLatLngs.add( new MogoLatLng(39.616074, 116.398612)); +mogoLatLngs.add( new MogoLatLng(39.616083, 116.398787)); +mogoLatLngs.add( new MogoLatLng(39.616093, 116.39899)); +mogoLatLngs.add( new MogoLatLng(39.616105, 116.399195)); +mogoLatLngs.add( new MogoLatLng(39.616112, 116.399334)); +mogoLatLngs.add( new MogoLatLng(39.61612, 116.399473)); +mogoLatLngs.add( new MogoLatLng(39.616128, 116.399612)); +mogoLatLngs.add( new MogoLatLng(39.616136, 116.399751)); +mogoLatLngs.add( new MogoLatLng(39.616148, 116.399893)); +mogoLatLngs.add( new MogoLatLng(39.616153, 116.40008)); +mogoLatLngs.add( new MogoLatLng(39.616159, 116.400301)); +mogoLatLngs.add( new MogoLatLng(39.616167, 116.400471)); +mogoLatLngs.add( new MogoLatLng(39.616175, 116.400642)); +mogoLatLngs.add( new MogoLatLng(39.616183, 116.400813)); +mogoLatLngs.add( new MogoLatLng(39.616192, 116.400988)); +mogoLatLngs.add( new MogoLatLng(39.616201, 116.401191)); +mogoLatLngs.add( new MogoLatLng(39.616213, 116.401396)); +mogoLatLngs.add( new MogoLatLng(39.616235, 116.401728)); +mogoLatLngs.add( new MogoLatLng(39.616246, 116.401986)); +mogoLatLngs.add( new MogoLatLng(39.61625, 116.402146)); +mogoLatLngs.add( new MogoLatLng(39.616255, 116.402307)); +mogoLatLngs.add( new MogoLatLng(39.61626, 116.402468)); +mogoLatLngs.add( new MogoLatLng(39.616267, 116.40263)); +mogoLatLngs.add( new MogoLatLng(39.616272, 116.402762)); +mogoLatLngs.add( new MogoLatLng(39.616277, 116.402894)); +mogoLatLngs.add( new MogoLatLng(39.616282, 116.403026)); +mogoLatLngs.add( new MogoLatLng(39.616287, 116.403158)); +mogoLatLngs.add( new MogoLatLng(39.616292, 116.40329)); +mogoLatLngs.add( new MogoLatLng(39.616297, 116.403422)); +mogoLatLngs.add( new MogoLatLng(39.616302, 116.403554)); +mogoLatLngs.add( new MogoLatLng(39.616307, 116.403686)); +mogoLatLngs.add( new MogoLatLng(39.616321, 116.403821)); +mogoLatLngs.add( new MogoLatLng(39.616331, 116.404045)); +mogoLatLngs.add( new MogoLatLng(39.616343, 116.404272)); +mogoLatLngs.add( new MogoLatLng(39.616353, 116.404551)); +mogoLatLngs.add( new MogoLatLng(39.616363, 116.404753)); +mogoLatLngs.add( new MogoLatLng(39.616375, 116.404958)); +mogoLatLngs.add( new MogoLatLng(39.616375, 116.405055)); +mogoLatLngs.add( new MogoLatLng(39.616379, 116.405184)); +mogoLatLngs.add( new MogoLatLng(39.616384, 116.405313)); +mogoLatLngs.add( new MogoLatLng(39.616389, 116.405442)); +mogoLatLngs.add( new MogoLatLng(39.616394, 116.405571)); +mogoLatLngs.add( new MogoLatLng(39.616399, 116.4057)); +mogoLatLngs.add( new MogoLatLng(39.616404, 116.405829)); +mogoLatLngs.add( new MogoLatLng(39.616409, 116.405958)); +mogoLatLngs.add( new MogoLatLng(39.616414, 116.406087)); +mogoLatLngs.add( new MogoLatLng(39.616419, 116.406216)); +mogoLatLngs.add( new MogoLatLng(39.616424, 116.406345)); +mogoLatLngs.add( new MogoLatLng(39.616429, 116.406474)); +mogoLatLngs.add( new MogoLatLng(39.61644, 116.406611)); +mogoLatLngs.add( new MogoLatLng(39.616461, 116.406879)); +mogoLatLngs.add( new MogoLatLng(39.616465, 116.407033)); +mogoLatLngs.add( new MogoLatLng(39.616469, 116.407187)); +mogoLatLngs.add( new MogoLatLng(39.616473, 116.407341)); +mogoLatLngs.add( new MogoLatLng(39.616477, 116.407495)); +mogoLatLngs.add( new MogoLatLng(39.616483, 116.407694)); +mogoLatLngs.add( new MogoLatLng(39.616493, 116.407876)); +mogoLatLngs.add( new MogoLatLng(39.616504, 116.408059)); +mogoLatLngs.add( new MogoLatLng(39.616515, 116.408327)); +mogoLatLngs.add( new MogoLatLng(39.616526, 116.408596)); +mogoLatLngs.add( new MogoLatLng(39.616536, 116.408757)); +mogoLatLngs.add( new MogoLatLng(39.616547, 116.409025)); +mogoLatLngs.add( new MogoLatLng(39.616556, 116.409227)); +mogoLatLngs.add( new MogoLatLng(39.616568, 116.409432)); +mogoLatLngs.add( new MogoLatLng(39.616579, 116.409711)); +mogoLatLngs.add( new MogoLatLng(39.61659, 116.409914)); +mogoLatLngs.add( new MogoLatLng(39.616601, 116.410119)); +mogoLatLngs.add( new MogoLatLng(39.616601, 116.410387)); +mogoLatLngs.add( new MogoLatLng(39.616601, 116.410602)); +mogoLatLngs.add( new MogoLatLng(39.616622, 116.410816)); +mogoLatLngs.add( new MogoLatLng(39.616633, 116.411084)); +mogoLatLngs.add( new MogoLatLng(39.616643, 116.411395)); +mogoLatLngs.add( new MogoLatLng(39.616654, 116.411492)); +mogoLatLngs.add( new MogoLatLng(39.616665, 116.411771)); +mogoLatLngs.add( new MogoLatLng(39.616674, 116.411974)); +mogoLatLngs.add( new MogoLatLng(39.616686, 116.412178)); +mogoLatLngs.add( new MogoLatLng(39.616697, 116.412447)); +mogoLatLngs.add( new MogoLatLng(39.616697, 116.412586)); +mogoLatLngs.add( new MogoLatLng(39.616718, 116.412876)); +mogoLatLngs.add( new MogoLatLng(39.616729, 116.413144)); +mogoLatLngs.add( new MogoLatLng(39.616738, 116.413347)); +mogoLatLngs.add( new MogoLatLng(39.61675, 116.413551)); +mogoLatLngs.add( new MogoLatLng(39.61675, 116.41383)); +mogoLatLngs.add( new MogoLatLng(39.616761, 116.414002)); +mogoLatLngs.add( new MogoLatLng(39.616761, 116.414098)); +mogoLatLngs.add( new MogoLatLng(39.616767, 116.414279)); +mogoLatLngs.add( new MogoLatLng(39.616774, 116.414461)); +mogoLatLngs.add( new MogoLatLng(39.616782, 116.414645)); +mogoLatLngs.add( new MogoLatLng(39.616792, 116.41483)); +mogoLatLngs.add( new MogoLatLng(39.616802, 116.415016)); +mogoLatLngs.add( new MogoLatLng(39.616814, 116.415203)); +mogoLatLngs.add( new MogoLatLng(39.616824, 116.415395)); +mogoLatLngs.add( new MogoLatLng(39.616836, 116.415589)); +mogoLatLngs.add( new MogoLatLng(39.616842, 116.415745)); +mogoLatLngs.add( new MogoLatLng(39.616849, 116.415902)); +mogoLatLngs.add( new MogoLatLng(39.616857, 116.416061)); +mogoLatLngs.add( new MogoLatLng(39.616868, 116.416307)); \ No newline at end of file diff --git a/app/src/launcher/AndroidManifest.xml b/app/src/launcher/AndroidManifest.xml index 51bd368bf2..759d90f0e5 100644 --- a/app/src/launcher/AndroidManifest.xml +++ b/app/src/launcher/AndroidManifest.xml @@ -20,9 +20,9 @@ + android:value="40e2e7e773c7562b1f2b13699a93992c" + tools:replace="android:value" /> diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 26d57160e8..5ea39f1189 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -11,16 +11,13 @@ import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; import com.mogo.module.adcard.AdCardConstants; import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; -import com.mogo.module.back.BackToLauncherConst; import com.mogo.module.carchatting.card.CallChatConstant; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.media.MediaConstants; -import com.mogo.module.onlinecar.OnLineCarConstants; import com.mogo.module.push.PushUIConstants; import com.mogo.module.tanlu.constant.TanluConstants; import com.mogo.module.v2x.V2XConst; -import com.mogo.service.MogoServicePaths; import com.mogo.service.connection.IMogoSocketManager; import com.mogo.utils.logger.LogLevel; import com.mogo.utils.logger.Logger; @@ -56,15 +53,15 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE)); MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); - MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); -// MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); - MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG)); - MogoModulePaths.addModule(new MogoModule(BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME)); + MogoModulePaths.addModule(new MogoModule( V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); + // 暂时去掉推送 +// MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG)); Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms"); DebugConfig.setLaunchLocationService( BuildConfig.LAUNCH_LOCATION_SERVICE ); - DebugConfig.setLaunchLocationService( BuildConfig.USE_CUSTOM_NAVI ); + DebugConfig.setUseCustomNavi( BuildConfig.USE_CUSTOM_NAVI ); + DebugConfig.setLauncher( BuildConfig.IS_LAUNCHER ); } @Override diff --git a/config.gradle b/config.gradle index c349af11af..d1845f3435 100644 --- a/config.gradle +++ b/config.gradle @@ -145,7 +145,7 @@ ext { gpssimulatordebug : "com.mogo.module:module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}", gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}", - adasapi : "com.zhidao.autopilot.support:adas:1.0.0", + adasapi : "com.zhidao.autopilot.support:adas:1.0.1-SNAPSHOT", // 个人中心的SDK personalsdk : "com.zhidaoauto.person.info:data:1.0.1", diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java index 1e404bf945..66e3a0d332 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java @@ -99,4 +99,17 @@ public class DebugConfig { public static void setUseCustomNavi( boolean sUseCustomNavi ) { DebugConfig.sUseCustomNavi = sUseCustomNavi; } + + /** + * 是否作为launcher运行 + */ + private static boolean sIsLauncher = false; + + public static boolean isLauncher() { + return sIsLauncher; + } + + public static void setLauncher( boolean isLauncher ) { + DebugConfig.sIsLauncher = isLauncher; + } } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java new file mode 100644 index 0000000000..dcd4ca90e3 --- /dev/null +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java @@ -0,0 +1,43 @@ +package com.mogo.commons.device; + +import android.content.ContentResolver; +import android.database.Cursor; +import android.net.Uri; + +import com.mogo.commons.AbsMogoApplication; + +public +/** + * @author congtaowang + * @since 2020/6/8 + * + * 描述 + */ +class Devices { + + public static final Uri CONTENT_URI_BIND = Uri.parse( "content://com.zhidao.guide.lock.product.bindstatus/status" ); + + /** + * 检测车机激活状态 + * + * @return + */ + public static boolean checkBindState() { + try { + ContentResolver resolver = AbsMogoApplication.getApp().getContentResolver(); + if ( resolver == null ) { + return false; + } + try ( Cursor cursor = resolver.query( CONTENT_URI_BIND, null, null, null, null ) ) { + if ( cursor == null || !cursor.moveToFirst() ) { + return false; + } + int status = cursor.getInt( cursor.getColumnIndex( "lock_status" ) ); + return ( status == 1 ); + } + } catch ( Exception e ) { + e.printStackTrace(); + } + return false; + } +} diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index 7feae5d0bc..b5ab14af70 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -123,9 +123,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack, OnTtsListener { Iterator< IMogoVoiceCmdCallBack > iterator = null; try { - List< IMogoVoiceCmdCallBack > cmdCallBacks = mCmdMap.get( cmd ); + List< IMogoVoiceCmdCallBack > cmdCallBacks = mCmdMap.get( cmd ); iterator = new ArrayList<>( cmdCallBacks ).iterator(); - } catch( Exception e ){ + } catch ( Exception e ) { } while ( iterator != null && iterator.hasNext() ) { @@ -348,10 +348,18 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack, OnTtsListener { } public static void startAssistant( Context context ) { + startAssistant( context, 1 ); + } + + /** + * @param context + * @param status window_start_cancel 0 - 结束, 1 - 显示, 2 - 未激活调试进入 + */ + public static void startAssistant( Context context, int status ) { final Intent intent = new Intent(); intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES ); intent.setAction( "pvetec.intent.action.txz.switch" ); - intent.putExtra( "window_start_cancel", 1 ); + intent.putExtra( "window_start_cancel", status ); intent.putExtra( "extra_switch_type", "window_start_cancel" ); context.sendBroadcast( intent ); } @@ -462,12 +470,12 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack, OnTtsListener { try { mSpeakVoiceMap.remove( text ); mogoVoiceManager.shutUp( ttsId ); - } catch( Exception e ){ + } catch ( Exception e ) { } } - public void clearTTSCallback(String text){ + public void clearTTSCallback( String text ) { try { mSpeakVoiceMap.remove( text ); } catch ( Exception e ) { diff --git a/gradle.properties b/gradle.properties index a50041fa2c..0d52c5b907 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,33 +27,33 @@ PASSWORD=xintai2018 RELEASE=false # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.1.0.15 -MOGO_UTILS_VERSION=1.1.0.15 -MAP_AMAP_VERSION=1.1.0.15 -MAP_AUTONAVI_VERSION=1.1.0.15 -MOGO_MAP_VERSION=1.1.0.15 -MOGO_MAP_API_VERSION=1.1.0.15 -MOGO_SERVICE_VERSION=1.1.0.15 -MOGO_SERVICE_API_VERSION=1.1.0.15 -MOGO_CONNECTION_VERSION=1.1.0.15 -MOGO_MODULE_APPS_VERSION=1.1.0.15 -MOGO_MODULE_NAVI_VERSION=1.1.0.15 -MOGO_MODULE_SHARE_VERSION=1.1.0.15 -MOGO_MODULE_COMMON_VERSION=1.1.0.15 -MOGO_MODULE_MAIN_VERSION=1.1.0.15 -MOGO_MODULE_MAP_VERSION=1.1.0.15 -MOGO_MODULE_SERVICE_VERSION=1.1.0.15 -MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.15 -MOGO_MODULE_SEARCH_VERSION=1.1.0.15 -MOGO_MODULE_BACK_VERSION=1.1.0.15 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.15 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.15 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.15 -MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.15 -MOGO_MODULE_GUIDE_VERSION=1.1.0.15 +MOGO_COMMONS_VERSION=1.2.0 +MOGO_UTILS_VERSION=1.2.0 +MAP_AMAP_VERSION=1.2.0 +MAP_AUTONAVI_VERSION=1.2.0 +MOGO_MAP_VERSION=1.2.0 +MOGO_MAP_API_VERSION=1.2.0 +MOGO_SERVICE_VERSION=1.2.0 +MOGO_SERVICE_API_VERSION=1.2.0 +MOGO_CONNECTION_VERSION=1.2.0 +MOGO_MODULE_APPS_VERSION=1.2.0 +MOGO_MODULE_NAVI_VERSION=1.2.0 +MOGO_MODULE_SHARE_VERSION=1.2.0 +MOGO_MODULE_COMMON_VERSION=1.2.0 +MOGO_MODULE_MAIN_VERSION=1.2.0 +MOGO_MODULE_MAP_VERSION=1.2.0 +MOGO_MODULE_SERVICE_VERSION=1.2.0 +MOGO_MODULE_EXTENSIONS_VERSION=1.2.0 +MOGO_MODULE_SEARCH_VERSION=1.2.0 +MOGO_MODULE_BACK_VERSION=1.2.0 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.2.0 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.2.0 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.2.0 +MOGO_MODULE_AUTHORIZE_VERSION=1.2.0 +MOGO_MODULE_GUIDE_VERSION=1.2.0 -MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.0 -MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.0 +MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.1 +MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.1 ## 工程外部模块 diff --git a/libraries/map-autonavi/build.gradle b/libraries/map-autonavi/build.gradle index 941f9b2ff5..fe07d63360 100644 --- a/libraries/map-autonavi/build.gradle +++ b/libraries/map-autonavi/build.gradle @@ -42,4 +42,6 @@ dependencies { implementation project(':libraries:map-amap') } -} \ No newline at end of file +} + +apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviReceiver.java b/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviReceiver.java index 2ea104b75d..eb51047a36 100644 --- a/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviReceiver.java +++ b/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviReceiver.java @@ -117,13 +117,18 @@ public class AutoNaviReceiver extends BroadcastReceiver { switch ( state ) { case MapStateValue.START_NAVI: case MapStateValue.START_EMULATOR_NAVI: + if ( MapState.getInstance().isNaving() ) { + return; + } MapState.getInstance().setNaving( true ); MogoNaviListenerHandler.getInstance().onStartNavi(); break; case MapStateValue.STOP_NAVI: case MapStateValue.STOP_EMULATOR_NAVI: - MapState.getInstance().setNaving( false ); - MogoNaviListenerHandler.getInstance().onStopNavi(); + if ( MapState.getInstance().isNaving() ) { + MapState.getInstance().setNaving( false ); + MogoNaviListenerHandler.getInstance().onStopNavi(); + } break; case MapStateValue.START_AIMLESS_NAVI: MapState.getInstance().setAimless( true ); diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/IMogoGeoSearchListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/IMogoGeoSearchListener.java index 29a0f6cb0a..5f895a7db9 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/IMogoGeoSearchListener.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/IMogoGeoSearchListener.java @@ -13,12 +13,12 @@ public interface IMogoGeoSearchListener { * * @param regeocodeResult */ - void onRegeocodeSearched( MogoRegeocodeResult regeocodeResult ); + default void onRegeocodeSearched( MogoRegeocodeResult regeocodeResult ){} /** * 根据名称和城市获取地理位置信息 * * @param geocodeResult */ - void onGeocodeSearched( MogoGeocodeResult geocodeResult ); + default void onGeocodeSearched( MogoGeocodeResult geocodeResult ){} } diff --git a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml index fcfddb2b4a..0d4d401316 100644 --- a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml +++ b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml @@ -29,6 +29,15 @@ + + + + + + \ No newline at end of file diff --git a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java index 52bf70be04..63c9099486 100644 --- a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java +++ b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java @@ -17,6 +17,8 @@ public class MainIndependentActivity extends MainActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // 独立app需要在onCreate里面增加处理scheme的情况 + mPresenter.handleSchemeIntent(getIntent()); } @Override diff --git a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java index d0bf8eb98e..4e50009a24 100644 --- a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java +++ b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java @@ -5,6 +5,10 @@ import android.view.View; import androidx.annotation.Nullable; +import com.mogo.module.back.BackToLauncherConst; +import com.mogo.module.common.MogoModule; +import com.mogo.module.common.MogoModulePaths; +import com.mogo.module.common.utils.CarSeries; import com.mogo.module.extensions.utils.ExtensionsConfig; import com.mogo.module.main.MainActivity; import com.mogo.utils.logger.Logger; @@ -18,7 +22,16 @@ public class MainLauncherActivity extends MainActivity { @Override protected void onCreate( @Nullable Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); - ExtensionsConfig.setNeedRequestUserInfo(true); + ExtensionsConfig.setNeedRequestUserInfo( true ); + } + + @Override + protected void addModule() { + super.addModule(); + // F 车机添加返回桌面浮窗 + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { + MogoModulePaths.addModule( new MogoModule( BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME ) ); + } } @Override diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index f3d240be7b..a275d6545e 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -56,6 +56,7 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mAppIndicatorAdapter = new AppIndicatorAdapter( getContext(), NavigatorApps.getApps() ); mAppIndicatorAdapter.setOnItemClickedListener( ( data, position ) -> { mLauncher.launch( getContext(), data ); + trackNavigatorClickEvent( data.getTrackType() ); } ); mNavigatorAppsList.setAdapter( mAppIndicatorAdapter ); @@ -64,7 +65,7 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mAnim.initAnim( mAIAssist ); mAIAssist.setOnClickListener( view -> { AIAssist.startAssistant( getContext() ); - AppServiceHandler.getApis().getAnalyticsApi().track( "Launcher_xiaozhi_Click", null ); + trackNavigatorClickEvent( 5 ); } ); mAIAssistContainer.setOnClickListener( view -> { mAIAssist.performClick(); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java index 24119d559c..c42230cbca 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; @@ -33,9 +34,6 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme private static final String TAG = "AppNavigatorPresenter"; - IMogoIntentManager mIntentManager; - IMogoStatusManager mMogoStatusManager; - public AppNavigatorPresenter( AppNavigatorView view ) { super( view ); } @@ -43,11 +41,11 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - mIntentManager = AppServiceHandler.getApis().getIntentManagerApi(); - mMogoStatusManager = AppServiceHandler.getApis().getStatusManagerApi(); AppServiceHandler.getApis().getRegisterCenterApi().registerMogoNaviListener( TAG, this ); - // 预加载应用列表,空间换时间 - AppsModel.getInstance( getContext() ).load( null ); + if ( DebugConfig.isLauncher() ) { + // 预加载应用列表,空间换时间 + AppsModel.getInstance( getContext() ).load( null ); + } } @Override @@ -55,13 +53,13 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme super.onResume( owner ); AIAssist.getInstance( getContext() ).registerUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_APP_LIST, AppsConst.CMD_UN_WAKE_WORDS_OPEN_APP_LIST, this ); AIAssist.getInstance( getContext() ).registerUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_CAR_SETTINGS, AppsConst.CMD_UN_WAKE_WORDS_OPEN_CAR_SETTINGS, this ); - mIntentManager.registerIntentListener( AppsConst.COMMAND_OPERATION, this ); + AppServiceHandler.getApis().getIntentManagerApi().registerIntentListener( AppsConst.COMMAND_OPERATION, this ); } @Override public void onPause( @NonNull LifecycleOwner owner ) { super.onPause( owner ); - mIntentManager.unregisterIntentListener( AppsConst.COMMAND_OPERATION, this ); + AppServiceHandler.getApis().getIntentManagerApi().unregisterIntentListener( AppsConst.COMMAND_OPERATION, this ); AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_APP_LIST ); AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_CAR_SETTINGS ); } @@ -76,10 +74,14 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme String app = object.optString( "object" ); String operation = object.optString( "operation" ); - if( !AppsConst.OBJECT_ADAS.equals( app ) ){ + if ( !AppsConst.OBJECT_ADAS.equals( app ) ) { AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); } + if ( !DebugConfig.isLauncher() ) { + return; + } + if ( AppsConst.OBJECT_ALL_APPS.equals( app ) ) { if ( AppsConst.OPERATION_OPEN.equals( operation ) ) { mView.openAppsPanel(); @@ -116,10 +118,8 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme @Override public void onDestroy( @NonNull LifecycleOwner owner ) { - if ( mIntentManager != null ) { - mIntentManager.unregisterIntentListener( AppsConst.COMMAND_OPERATION, this ); - } super.onDestroy( owner ); + AppServiceHandler.getApis().getIntentManagerApi().unregisterIntentListener( AppsConst.COMMAND_OPERATION, this ); } @Override diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java index 99ba75c675..d4a957ba1f 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java @@ -2,10 +2,12 @@ package com.mogo.module.apps.applaunch; import android.app.Activity; import android.content.Context; +import android.content.Intent; import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.AppsListActivity; import com.mogo.module.apps.model.AppInfo; +import com.mogo.module.common.map.CustomNaviInterrupter; /** * @author congtaowang @@ -25,7 +27,15 @@ public class InternalFunctionLauncher extends BaseAppLauncher { public void launch( Context context, AppInfo appInfo ) { switch ( appInfo.getPackageName() ) { case "com.mogo.launcher.navi.search": - AppServiceHandler.getApis().getSearchManagerApi().showSearch(); + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + Intent intent = new Intent(); + intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); + intent.putExtra( "KEY_TYPE", 10034 ); + intent.putExtra( "SOURCE_APP", "Third App" ); + context.sendBroadcast( intent ); + } else { + AppServiceHandler.getApis().getSearchManagerApi().showSearch(); + } break; case "com.mogo.launcher.applist": AppsListActivity.start( mActivity ); 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 ac70be137a..7eadd38ab6 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 @@ -14,7 +14,8 @@ import com.mogo.module.apps.R; * 基础类:均衡器、方控学习、蓝牙、FM、车载设置、AUX */ public enum AppEnum { - + // 爱趣听 + WeCarFlow("爱趣听","com.tencent.wecarflow", R.drawable.module_apps_ic_we_car_flow ), //"QQ音乐", QQMusic( "QQ音乐", "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ), diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java index 134cb0b33f..d9fddafb98 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppInfo.java @@ -16,14 +16,20 @@ public class AppInfo { private final int mVersionCode; private final Drawable mIcon; private final int mIconResId; + private final int mTrackType; // 埋点类型 - public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId ) { + public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId, int mTrackType ) { this.mName = mName; this.mPackageName = mPackageName; this.mVersionName = mVersionName; this.mVersionCode = mVersionCode; this.mIcon = mIcon; this.mIconResId = mIconResId; + this.mTrackType = mTrackType; + } + + public AppInfo( String mName, String mPackageName, String mVersionName, int mVersionCode, Drawable mIcon, int mIconResId ) { + this(mName, mPackageName, mVersionName, mVersionCode, mIcon, mIconResId, 0); } public int getIconResId() { @@ -50,6 +56,10 @@ public class AppInfo { return mIcon; } + public int getTrackType() { + return mTrackType; + } + @Override public String toString() { return "AppInfo{" + diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java index 1b64ff1bb8..820d46c5a4 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java @@ -13,26 +13,26 @@ import java.util.List; */ public class NavigatorApps { - private static AppInfo app = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi ); - private static AppInfo app_ = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi_disable ); - private static AppInfo app2 = new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_navigator_media ); - private static AppInfo app3 = new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_navigator_personcenter ); - private static AppInfo app4 = new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_navigator_applist ); + private static AppInfo app = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi, 1 ); + private static AppInfo app_ = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi_disable, 1 ); + private static AppInfo app2 = new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_navigator_media, 2 ); + private static AppInfo app3 = new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_navigator_personcenter, 3 ); + private static AppInfo app4 = new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_navigator_applist, 4 ); public static List< AppInfo > getApps() { List< AppInfo > sApps = new ArrayList<>(); sApps.add( app ); sApps.add( app2 ); - sApps.add( app3 ); +// sApps.add( app3 ); sApps.add( app4 ); return sApps; } public static List< AppInfo > getAppsWithoutNavigation() { List< AppInfo > sApps = new ArrayList<>(); - sApps.add( app_ ); + sApps.add( app ); sApps.add( app2 ); - sApps.add( app3 ); +// sApps.add( app3 ); sApps.add( app4 ); return sApps; } diff --git a/modules/mogo-module-apps/src/main/res/drawable/module_apps_ic_we_car_flow.png b/modules/mogo-module-apps/src/main/res/drawable/module_apps_ic_we_car_flow.png new file mode 100644 index 0000000000..95734bb594 Binary files /dev/null and b/modules/mogo-module-apps/src/main/res/drawable/module_apps_ic_we_car_flow.png differ diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java index 20818c844d..4ded331a36 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -34,7 +34,10 @@ public class BackToMainHomeManager { } public static void backToLauncher() { - + if (mStatusManager == null) { + Logger.e(TAG,"未初始化完成"); + return; + } if ( mStatusManager.isMainPageOnResume() ) { if ( mStatusManager.isSearchUIShow() ) { mFragmentManager.clearAll(); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/CustomNaviInterrupter.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/CustomNaviInterrupter.java index c77dc49167..701bfa73c2 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/CustomNaviInterrupter.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/CustomNaviInterrupter.java @@ -36,10 +36,14 @@ class CustomNaviInterrupter implements Interrupter { sInstance = null; } + /** + * 判断是否用自己的导航 + * @return true-用高德公版车机版地图 false-用Launcher自己的导航 + */ @Override public boolean interrupt() { if ( AppUtils.isAppInstalled( AbsMogoApplication.getApp(), "com.autonavi.amapauto" ) - || DebugConfig.isUseCustomNavi() ) { + || !DebugConfig.isUseCustomNavi() ) { Logger.d( TAG, "do not use custom map function." ); return true; } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index 41dffb39d1..e5254a81c6 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -11,8 +11,14 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; +import com.mogo.module.extensions.userinfo.UserInfo; +import com.mogo.module.extensions.utils.LaunchUtils; +import com.mogo.utils.glide.GlideApp; +import com.mogo.utils.logger.Logger; /** + * 天气,消息,个人头像 + * * @author congtaowang * @since 2020-01-05 *

@@ -31,6 +37,8 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private View mMsgContainer; private TextView mMsgCounter; + private ImageView mUserHeadImg; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_extensions; @@ -43,11 +51,20 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP mWeatherIcon = findViewById( R.id.module_ext_id_weather_icon ); mWeatherTemp = findViewById( R.id.module_ext_id_weather_temp ); + mUserHeadImg = findViewById(R.id.ivUserHeadImg); + mMsgContainer = findViewById( R.id.module_ext_id_msg ); mMsgContainer.setOnClickListener( view -> { ARouter.getInstance().build( "/push/ui/message" ).navigation( getContext() ); } ); mMsgCounter = findViewById( R.id.module_ext_id_msg_counter ); + mUserHeadImg.setOnClickListener(view ->{ + try { + LaunchUtils.launchByPkg(getContext(), "com.zhidao.auto.personal"); + } catch (Exception e) { + Logger.e(TAG, e, "打开个人中心Exception"); + } + }); } @NonNull @@ -92,4 +109,10 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP mMsgContainer.setVisibility( hasMsg ? View.VISIBLE : View.GONE ); mMsgCounter.setText( amount > MAX_DISPLAY_MSG_AMOUNT ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) ); } + + @Override + public void renderUserInfo(UserInfo userInfo) { + Logger.d(TAG, "renderUserInfo: " + userInfo); + GlideApp.with(getContext()).load(userInfo.getHeadImgurl()).circleCrop().into(mUserHeadImg); + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java index f779f76aec..85d0463965 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java @@ -1,17 +1,36 @@ package com.mogo.module.extensions; +import android.util.ArrayMap; + import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; +import com.mogo.module.extensions.net.UserInfoNetApiServices; +import com.mogo.module.extensions.userinfo.UserInfo; +import com.mogo.module.extensions.userinfo.UserInfoConstant; +import com.mogo.module.extensions.userinfo.UserInfoResponse; +import com.mogo.module.extensions.utils.ExtensionsConfig; import com.mogo.module.extensions.weather.Phenomena; import com.mogo.module.extensions.weather.WeatherCallback; import com.mogo.module.extensions.weather.WeatherInfo; import com.mogo.module.extensions.weather.WeatherModel; +import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; +import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoMsgCenterListener; +import com.mogo.utils.digest.DigestUtils; +import com.mogo.utils.logger.Logger; +import com.zhidao.auto.platform.util.DeviceUtil; + +import java.util.Map; + +import io.reactivex.SingleObserver; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; /** @@ -29,9 +48,13 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements private IMogoMsgCenter mMsgCenter; + private IMogoNetwork mNetWork; + public ExtensionsPresenter( ExtensionsView view ) { super( view ); mWeatherModel = new WeatherModel( getContext() ); + mNetWork = + ((IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(view.getContext())).getNetworkApi(); } @Override @@ -65,6 +88,10 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements @Override public void onResume( @NonNull LifecycleOwner owner ) { super.onResume( owner ); + if(ExtensionsConfig.needRequestUserInfo()){ + // 相当于每次onResume都会请求一下个人信息,目的是能够相对及时的同步手机端的个人信息修改 + requestUserInfo(); + } } @Override @@ -82,4 +109,49 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements mMsgCenter.unregisterMsgCenterListener( this ); } } + + private UserInfo userInfo; + public void requestUserInfo() { + Map params = new ArrayMap<>(); + params.put("sn", DeviceUtil.getSn()); + params.put("source", "2"); + String sign = createSign(params, "JGqZw9"); + params.put("sig", sign); + mNetWork.create(UserInfoNetApiServices.class, UserInfoConstant.getUserInfoBaseUrl()).requestUserInfo(params).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + } + + @Override + public void onSuccess(UserInfoResponse userInfoBaseResponse) { + userInfo = userInfoBaseResponse.getResult(); + Logger.d(TAG, "获取个人信息成功: " + userInfo); + mView.renderUserInfo(userInfo); + } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + Logger.e(TAG, e, "获取个人信息失败=="); + } + }); + } + + private String createSign(Map map, String salt) { + try { + StringBuilder queryString = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + queryString.append(entry.getKey()) + .append("=") + .append(entry.getValue()) + .append("&"); + } + queryString.append("key=").append(DigestUtils.shaHex(salt)); + return DigestUtils.shaHex(queryString.toString()).toUpperCase(); + } catch (Exception e) { + e.printStackTrace(); + Logger.e(TAG, e, "createSign()"); + return ""; + } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java index fa1ef5e128..873761780f 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java @@ -1,6 +1,7 @@ package com.mogo.module.extensions; import com.mogo.commons.mvp.IView; +import com.mogo.module.extensions.userinfo.UserInfo; import com.mogo.module.extensions.weather.WeatherInfo; /** @@ -27,4 +28,10 @@ public interface ExtensionsView extends IView { * @param amount 消息数量 */ void renderMsgInfo( boolean hasMsg, int amount ); + + /** + * 刷新个人信息 + * @param userInfo 个人信息 + */ + void renderUserInfo(UserInfo userInfo); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/dialog/NaviNoticeDialog.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/dialog/NaviNoticeDialog.java deleted file mode 100644 index e0705fa171..0000000000 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/dialog/NaviNoticeDialog.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.mogo.module.extensions.dialog; - -import android.app.Dialog; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.RelativeLayout; -import android.widget.TextView; -import androidx.annotation.NonNull; -import com.alibaba.android.arouter.launcher.ARouter; -import com.mogo.module.extensions.R; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.map.IMogoMapService; -import com.mogo.utils.logger.Logger; - -/** - * @author lixiaopeng - * @description 通用分享dialog - * @since 2020-01-10 - */ -public class NaviNoticeDialog extends Dialog implements View.OnClickListener { - private TextView txtOk; - private Context mContext; - private View tvCancel; - private IMogoMapService mMogoMapService; - - public NaviNoticeDialog(@NonNull Context context) { - super(context, R.style.Theme_AppCompat_Dialog); - this.mContext = context; - mMogoMapService = (IMogoMapService) ARouter.getInstance() - .build(MogoServicePaths.PATH_SERVICES_MAP) - .navigation(getContext()); - getWindow().setBackgroundDrawableResource(android.R.color.transparent); - } - - public NaviNoticeDialog(@NonNull Context context, int themeResId) { - super(context, R.style.Theme_AppCompat_Dialog); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - initView(); - initListener(); - } - - private void initView() { - setContentView(R.layout.dialog_navi_notice); - txtOk = findViewById(R.id.tv_dialog_ok); - tvCancel = findViewById(R.id.tv_dialog_cancel); - } - - - private void initListener() { - txtOk.setOnClickListener(this); - tvCancel.setOnClickListener(this); - } - - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.tv_dialog_ok) { - mMogoMapService.getNavi(getContext()).stopNavi(); - } else if (id == R.id.tv_dialog_cancel) { - - } - dismiss(); - } - - -} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 9520ef3000..341cda917f 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -34,6 +34,7 @@ import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; import com.mogo.module.common.dialog.WMDialog; +import com.mogo.module.common.map.CustomNaviInterrupter; import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.ExtensionsModuleConst; @@ -222,13 +223,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // } // }); // 原始逻辑 - isClickShare = true; - if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { - mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); - } else { - ShareControl.getInstance( getActivity() ).showDialog(); - traceData( "1" ); - } + showShareDialog(); } ); mDisplayOverview = findViewById( R.id.module_ext_id_display_overview ); @@ -348,6 +343,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mNaviInfo.inflate( rootView ); } + public void showShareDialog() { + isClickShare = true; + if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { + mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); + } else { + mApis.getShareManager().showShareDialog(); + traceData( "1" ); + } + } + private static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"; @NonNull @@ -395,7 +400,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent public void authorizeSuccess() { Log.d( TAG, "authorizeSuccess --------> isClickShare = " + isClickShare ); if ( isClickShare ) { - ShareControl.getInstance( getActivity() ).showDialog(); + mApis.getShareManager().showShareDialog(); traceData( "1" ); } else { mEntrancePresenter.handleNeedAuthorizeCmd(); @@ -428,13 +433,19 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStartNavi() { TopViewAnimHelper.getInstance().showNaviView(); - mExitNavi.setVisibility( View.VISIBLE ); mMApUIController.changeMapMode( mCameraMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D ); MapCenterPointStrategy.setMapCenterPointBySceneAndDelay( mMApUIController, Scene.NAVI, 500, () -> { return !mMogoNavi.isNaviing(); } ); - mDisplayOverview.setVisibility( View.VISIBLE ); - mCameraMode.setVisibility( View.VISIBLE ); + if(CustomNaviInterrupter.getInstance().interrupt()){ + mDisplayOverview.setVisibility(View.GONE); + mCameraMode.setVisibility(View.GONE); + mExitNavi.setVisibility( View.GONE ); + }else { + mExitNavi.setVisibility( View.VISIBLE ); + mDisplayOverview.setVisibility(View.VISIBLE); + mCameraMode.setVisibility( View.VISIBLE ); + } mApis.getAnalyticsApi().track( "Navigation_begin", new HashMap<>() ); } @@ -507,7 +518,11 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } else { mDisplayOverviewText.setText( "全览" ); mDisplayOverviewText.setTextSize( TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize( R.dimen.module_ext_display_overview_textSize_large ) ); - mCameraMode.setVisibility( View.VISIBLE ); + if(CustomNaviInterrupter.getInstance().interrupt()){ + mCameraMode.setVisibility(View.GONE); + }else { + mCameraMode.setVisibility(View.VISIBLE); + } } } } @@ -549,9 +564,4 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // 30s 后无论成功与否,停止动画 mUploadFrameAnimHandler.sendEmptyMessageDelayed( MSG_STOP_ANIM, 30_000 ); } - - @Override - public void refreshUserInfo( UserInfo userInfo ) { - Logger.d( TAG, "刷新用户信息: " + userInfo ); - } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index 5a921c613f..80e64a0dd2 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -14,7 +14,6 @@ import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; -import com.mogo.module.authorize.model.BaseResponse; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.net.UserInfoNetApiServices; import com.mogo.module.extensions.userinfo.UserInfo; @@ -22,6 +21,8 @@ import com.mogo.module.extensions.userinfo.UserInfoConstant; import com.mogo.module.extensions.userinfo.UserInfoResponse; import com.mogo.module.extensions.utils.ExtensionsConfig; import com.mogo.module.share.ShareControl; +import com.mogo.module.share.manager.ServiceApisManager; +import com.mogo.module.share.manager.UploadHelper; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; @@ -65,9 +66,6 @@ public class EntrancePresenter extends Presenter { private String mVoiceCmdType; //一级命令 private String mVoiceCmdShareType; //对某些一级命令里面细分的类型做处理 private IMogoStatusManager mStatusManager; - private IMogoNetwork mNetWork; - - private UserInfo userInfo = null; public EntrancePresenter(Context context, EntranceView view, IMogoAuthorizeModuleManager authorizeModuleManager) { @@ -79,8 +77,6 @@ public class EntrancePresenter extends Presenter { mogoIntentManager = apis.getIntentManagerApi(); mIMogoAuthorizeModuleManager = authorizeModuleManager; mStatusManager = apis.getStatusManagerApi(); - mNetWork = apis.getNetworkApi(); - registerUnWake(); registerAwakeVoice(); @@ -100,9 +96,6 @@ public class EntrancePresenter extends Presenter { @Override public void onResume(@NonNull LifecycleOwner owner) { super.onResume(owner); - if (ExtensionsConfig.needRequestUserInfo() && userInfo == null) { - requestUserInfo(); - } } /** @@ -119,7 +112,7 @@ public class EntrancePresenter extends Presenter { if (mIMogoAuthorizeModuleManager.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_SHARE)) { mIMogoAuthorizeModuleManager.invokeAuthorization(AUTHORIZE_TYPE_LAUNCHER_SHARE); } else { - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } } else if (cmd.equals(ExtensionsModuleConst.UPLOAD_ROAD_BLOCK)) { //上报拥堵 if (mIMogoAuthorizeModuleManager.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_SHARE)) { @@ -227,7 +220,7 @@ public class EntrancePresenter extends Presenter { if (mIMogoAuthorizeModuleManager.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_SHARE)) { mIMogoAuthorizeModuleManager.invokeAuthorization(AUTHORIZE_TYPE_LAUNCHER_SHARE); } else { - ShareControl.getInstance(mContext).showDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); Log.d(TAG, "mogoIntentListener 我要分享 ----> "); traceData("2"); } @@ -258,7 +251,7 @@ public class EntrancePresenter extends Presenter { if (mIMogoAuthorizeModuleManager.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_SHARE)) { mIMogoAuthorizeModuleManager.invokeAuthorization(AUTHORIZE_TYPE_LAUNCHER_SHARE); } else { - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); Log.d(TAG, "mogoIntentListener 关闭分享框 唤醒 ----> "); } } else if (intentStr.equals(ExtensionsModuleConst.NO_REPLY_SHARE_DIALOG_CLOSE)) { @@ -266,7 +259,7 @@ public class EntrancePresenter extends Presenter { if (mIMogoAuthorizeModuleManager.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_SHARE)) { mIMogoAuthorizeModuleManager.invokeAuthorization(AUTHORIZE_TYPE_LAUNCHER_SHARE); } else { - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); Logger.d(TAG, "mogoIntentListener 两次未回复关闭对话框"); } } else if (intentStr.equals(ExtensionsModuleConst.UPLOAD_ROAD_CONDITION)) { //上报路况 @@ -290,7 +283,7 @@ public class EntrancePresenter extends Presenter { if (!TextUtils.isEmpty(mVoiceCmdType)) { if (mVoiceCmdType.equals(ExtensionsModuleConst.CANCLE_SHARE) || mVoiceCmdType.equals(ExtensionsModuleConst.CLOSE) || mVoiceCmdType.equals(ExtensionsModuleConst.SHARE_DIALOG_CLOSE) || mVoiceCmdType.equals(ExtensionsModuleConst.NO_REPLY_SHARE_DIALOG_CLOSE)) { //关闭分享弹框 - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } else if (mVoiceCmdType.equals(ExtensionsModuleConst.GO_TO_SHARE)) { //打开分享弹框 if (!TextUtils.isEmpty(mVoiceCmdShareType)) { if (mVoiceCmdShareType.equals("封路")) { @@ -304,7 +297,7 @@ public class EntrancePresenter extends Presenter { uploadTrfficCheck(); } } else { - ShareControl.getInstance(mContext).showDialog(); + ServiceApisManager.serviceApis.getShareManager().showShareDialog(); Log.d(TAG, "handleNeedAuthorizeCmd 我要分享 ----> "); traceData("2"); } @@ -333,7 +326,7 @@ public class EntrancePresenter extends Presenter { sendShareReceiver(REPORT_TANLU_BLOCK); Logger.d("EntrancePresenter", "mogoIntentListener 上报路况 ----> "); traceTypeData("1"); - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } private void uploadTrfficCheck() { @@ -341,7 +334,7 @@ public class EntrancePresenter extends Presenter { sendShareReceiver(REPORT_TANLU_TRAFFIC_CHECK); Logger.d("EntrancePresenter", "mogoIntentListener 分享交通检查 ----> "); traceTypeData("3"); - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } private void uploadRoadClosed() { @@ -349,7 +342,7 @@ public class EntrancePresenter extends Presenter { sendShareReceiver(REPORT_TANLU_CLOSURE); Logger.d("EntrancePresenter", "mogoIntentListener 分享封路 ----> "); traceTypeData("4"); - ShareControl.getInstance(mContext).dismissDialog(); + ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } /** @@ -368,7 +361,7 @@ public class EntrancePresenter extends Presenter { // intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); // getContext().startActivity(intent); // traceTypeData("2"); -// ShareControl.getInstance(mContext).dismissDialog(); +// ServiceApisManager.serviceApis.getShareManager().dismissShareDialog(); } /** @@ -376,12 +369,7 @@ public class EntrancePresenter extends Presenter { */ private void sendShareReceiver(String type) { Logger.d("EntrancePresenter", "TanluCardViewFragment sendShareReceiver ---->"); - Intent intent = new Intent(); - intent.setAction("com.zhidao.roadcondition.share"); - intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); - intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); - intent.putExtra("type", type); - getContext().sendBroadcast(intent); + UploadHelper.INSTANCE.upload(getContext(),type); } /** @@ -415,48 +403,4 @@ public class EntrancePresenter extends Presenter { AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ExtensionsModuleConst.UPLOAD_TRAFFIC_CHECK); AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ExtensionsModuleConst.UPLOAD_ROAD_CLOSURE); } - - public void requestUserInfo() { - Map params = new ArrayMap<>(); - params.put("sn", DeviceUtil.getSn()); - params.put("source", "2"); - String sign = createSign(params, "JGqZw9"); - params.put("sig", sign); - mNetWork.create(UserInfoNetApiServices.class, UserInfoConstant.getUserInfoBaseUrl()).requestUserInfo(params).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - } - - @Override - public void onSuccess(UserInfoResponse userInfoBaseResponse) { - userInfo = userInfoBaseResponse.getResult(); - Logger.d(TAG, "获取个人信息成功: " + userInfo); - mView.refreshUserInfo(userInfo); - } - - @Override - public void onError(Throwable e) { - e.printStackTrace(); - Logger.e(TAG, e, "获取个人信息失败=="); - } - }); - } - - private String createSign(Map map, String salt) { - try { - StringBuilder queryString = new StringBuilder(); - for (Map.Entry entry : map.entrySet()) { - queryString.append(entry.getKey()) - .append("=") - .append(entry.getValue()) - .append("&"); - } - queryString.append("key=").append(DigestUtils.shaHex(salt)); - return DigestUtils.shaHex(queryString.toString()).toUpperCase(); - } catch (Exception e) { - e.printStackTrace(); - Logger.e(TAG, e, "createSign()"); - return ""; - } - } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java index 51fe0b568f..5f37f0256d 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java @@ -10,7 +10,4 @@ import com.mogo.module.extensions.userinfo.UserInfo; * 描述 */ public interface EntranceView extends IView { - - void refreshUserInfo(UserInfo userInfo); - } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/userinfo/UserInfo.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/userinfo/UserInfo.java index 9526e292a9..4a0fffd814 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/userinfo/UserInfo.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/userinfo/UserInfo.java @@ -95,4 +95,19 @@ public class UserInfo { public void setActiveTime(String activeTime) { this.activeTime = activeTime; } + + @Override + public String toString() { + return "UserInfo{" + + "userId='" + userId + '\'' + + ", phone='" + phone + '\'' + + ", displayName='" + displayName + '\'' + + ", additionalOne=" + additionalOne + + ", headImgurl='" + headImgurl + '\'' + + ", ownerAuthState=" + ownerAuthState + + ", score=" + score + + ", memberLevel='" + memberLevel + '\'' + + ", activeTime='" + activeTime + '\'' + + '}'; + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java new file mode 100644 index 0000000000..14ff5c58d8 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java @@ -0,0 +1,29 @@ +package com.mogo.module.extensions.utils; + +import android.content.Context; +import android.content.Intent; + +/** + * @author congtaowang + * @since 2020-02-03 + *

+ * 描述 + */ +public class LaunchUtils { + + /** + * 通过包名启动app + * + * @param context + * @param pkg 包名 + */ + public static void launchByPkg( Context context, String pkg ) throws Exception { + Intent intent = getLaunchIntentForPackage( context, pkg ); + intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); + context.startActivity( intent ); + } + + public static Intent getLaunchIntentForPackage( Context context, String pkg ) { + return context.getPackageManager().getLaunchIntentForPackage( pkg ); + } +} diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/model_ext_default_user_head.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/model_ext_default_user_head.png new file mode 100644 index 0000000000..baa717be4d Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/model_ext_default_user_head.png differ diff --git a/modules/mogo-module-extensions/src/main/res/drawable/model_ext_default_user_head.png b/modules/mogo-module-extensions/src/main/res/drawable/model_ext_default_user_head.png new file mode 100644 index 0000000000..726124020a Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable/model_ext_default_user_head.png differ diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml index 87b42bda50..3110dc5404 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml @@ -41,8 +41,9 @@ android:layout_marginRight="@dimen/module_ext_msg_marginRight" android:background="@drawable/module_ext_drawable_msg_container_bkg" android:visibility="gone" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="@+id/ivUserHeadImg" + app:layout_constraintRight_toLeftOf="@+id/ivUserHeadImg" + app:layout_constraintTop_toTopOf="@+id/ivUserHeadImg" tools:visibility="visible"> + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index c9ef02f98b..631cd4f0d8 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -73,6 +73,9 @@ 30px 20px + 103px + 103px + 1058px 210px diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 05bb2387f9..161772cb13 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -76,6 +76,9 @@ 15px 11.73px + 56px + 56px + 544px 117px diff --git a/modules/mogo-module-main/build.gradle b/modules/mogo-module-main/build.gradle index 0bfcb0b4bd..69449eb0f9 100644 --- a/modules/mogo-module-main/build.gradle +++ b/modules/mogo-module-main/build.gradle @@ -51,6 +51,7 @@ dependencies { api rootProject.ext.dependencies.moduleapps api rootProject.ext.dependencies.mogoconnection api rootProject.ext.dependencies.moduleextensions + api rootProject.ext.dependencies.mogomoduleback } else { api project(":foudations:mogo-utils") api project(":foudations:mogo-commons") @@ -62,6 +63,7 @@ dependencies { api project(':modules:mogo-module-apps') api project(':foudations:mogo-connection') api project(':modules:mogo-module-extensions') + api project(':modules:mogo-module-back') } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index d2b9567690..8ebdda3bdb 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -123,8 +123,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme public void loadModules() { final long start = System.currentTimeMillis(); - MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) ); - mMogoModuleHandler = new MogoModulesManager( this, getApis() ); mMogoMapService = mServiceApis.getMapServiceApi(); if ( mMogoMapService != null ) { @@ -138,6 +136,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme EventDispatchCenter.getInstance().setMapLoadedCallback( () -> { Logger.d( TAG, "map loaded." + Thread.currentThread().getName() ); // 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。 + addModule(); loadContainerModules(); mMogoModuleHandler.loadModules(); mPresenter.delayOperations(); @@ -166,6 +165,13 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" ); } + /** + * 添加模块 + */ + protected void addModule(){ + MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) ); + } + private void startLocation() { mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() ); mLocationClient.addLocationListener( this ); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java index 14ec2be9ab..b477536dcf 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java @@ -80,6 +80,12 @@ public class SchemeIntent implements IMogoStatusChangedListener { case "/main/switch2": handleSwitch2Action( target ); break; + case "/main/share": + Logger.d(TAG,"收到打开分享框的scheme,准备打开分享框"); + mApis.getShareManager().showShareDialog(); + break; + default: + break; } diff --git a/modules/mogo-module-media/build.gradle b/modules/mogo-module-media/build.gradle index eccfa5b7fd..d028e927fd 100644 --- a/modules/mogo-module-media/build.gradle +++ b/modules/mogo-module-media/build.gradle @@ -35,7 +35,7 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.aar']) annotationProcessor rootProject.ext.dependencies.aroutercompiler implementation rootProject.ext.dependencies.arouter diff --git a/modules/mogo-module-media/libs/OPENSDK_Flow_cdb1c1a_1.0.1.30_release.aar b/modules/mogo-module-media/libs/OPENSDK_Flow_cdb1c1a_1.0.1.30_release.aar new file mode 100644 index 0000000000..72f411cce2 Binary files /dev/null and b/modules/mogo-module-media/libs/OPENSDK_Flow_cdb1c1a_1.0.1.30_release.aar differ diff --git a/modules/mogo-module-media/src/main/AndroidManifest.xml b/modules/mogo-module-media/src/main/AndroidManifest.xml index 2b857c6071..4292dc7f05 100644 --- a/modules/mogo-module-media/src/main/AndroidManifest.xml +++ b/modules/mogo-module-media/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java index 8741bc36e9..c2e341752b 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java @@ -14,15 +14,12 @@ import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.ModuleType; -import com.mogo.utils.logger.Logger; @Route( path = MediaConstants.TAG ) public class MediaCardViewProvider implements IMogoModuleProvider { private static final String TAG = "MediaCardViewProvider"; - private MediaWindow mMediaWindow; - @Override public Fragment createFragment( Context context, Bundle data ) { @@ -35,10 +32,8 @@ public class MediaCardViewProvider implements IMogoModuleProvider { @Override public void init( Context context ) { ServiceMediaHandler.init( context ); - - mMediaWindow = new MediaWindow(); - mMediaWindow.initMedia(context); - + MediaWindow2 mediaWindow2 = new MediaWindow2(); + mediaWindow2.initMedia(context); } @Override diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java index 107206a46a..f13b506d43 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java @@ -181,8 +181,12 @@ public class MediaWindow implements MediaView{ } if (first || mMediaInfoData.getPlayState() == 1 || mMediaInfoData.getPlayState() == 2) { - if (mWindowMaxTime != null) mWindowMaxTime.setText(Utils.calculateTime((int) mMediaInfoData.getMaxTime())); - if (mWindowCurrTime != null) mWindowCurrTime.setText(Utils.calculateTime((int) mMediaInfoData.getCurTime())); + if (mWindowMaxTime != null){ + mWindowMaxTime.setText(Utils.calculateTime((int) mMediaInfoData.getMaxTime())); + } + if (mWindowCurrTime != null){ + mWindowCurrTime.setText(Utils.calculateTime((int) mMediaInfoData.getCurTime())); + } } if (mCircleImg != null){ @@ -286,7 +290,9 @@ public class MediaWindow implements MediaView{ } - if (mCircleImg != null) mCircleImg.stopAnim(); + if (mCircleImg != null){ + mCircleImg.stopAnim(); + } if (type == 1 || type == 2 || type ==3){ UiThreadHandler.removeCallbacks(mRunnable); @@ -417,10 +423,18 @@ public class MediaWindow implements MediaView{ bookid = leTingNewsData.getSid(); } - if (mediaName == null) mediaName = ""; - if (artist == null) artist = ""; - if (cover == null) cover = ""; - if (bookid == null) bookid = ""; + if (mediaName == null){ + mediaName = ""; + } + if (artist == null){ + artist = ""; + } + if (cover == null){ + cover = ""; + } + if (bookid == null){ + bookid = ""; + } } } catch (Exception e) { e.printStackTrace(); diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java new file mode 100644 index 0000000000..69c9f8068a --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java @@ -0,0 +1,258 @@ +package com.mogo.module.media; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.voice.AIAssist; +import com.mogo.commons.voice.IMogoVoiceCmdCallBack; +import com.mogo.module.media.constants.MusicConstant; +import com.mogo.module.media.listener.NoDoubleClickListener; +import com.mogo.module.media.model.MediaInfoData; +import com.mogo.module.media.presenter.WeCarFlowPresenter; +import com.mogo.module.media.utils.LaunchUtils; +import com.mogo.module.media.utils.MusicControlBroadCast; +import com.mogo.module.media.utils.Utils; +import com.mogo.module.media.view.IMusicView; +import com.mogo.module.media.widget.AnimCircleImageView; +import com.mogo.module.media.widget.NoScrollSeekBar; +import com.mogo.module.media.widget.ScrollingTextView; +import com.mogo.utils.TipToast; +import com.mogo.utils.glide.GlideApp; +import com.mogo.utils.logger.Logger; +import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl; + +/** + * 适配爱趣听的window + * + * @author tongchenfei + */ +public class MediaWindow2 implements IMusicView { + + public static final String TAG = MediaWindow2.class.getName(); + private Context mContext; + private WeCarFlowPresenter mPresenter; + + private MediaInfoData mMediaInfoData = new MediaInfoData(); + + private View mWindowView; + private AnimCircleImageView mCircleImg; + private ScrollingTextView mScrollText; + private ImageView mWindowPlayPause; + private ImageView mWindowPlayNext; + private LinearLayout mWindowMediaCenter; + private TextView mWindowCurrTime; + private TextView mWindowMaxTime; + private NoScrollSeekBar mWindowProgress; + + private boolean mHasAddWindow = false; + private boolean mTwoChange = false; + private boolean isFirstPlay = false; + + public void initMedia(Context context) { + mContext = context; + mPresenter = new WeCarFlowPresenter(this); + mPresenter.init(context); + + if(DebugConfig.isLauncher()) { + AIAssist.getInstance(context).registerUnWakeupCommand("flow_we_car_stop", new String[]{"停止播放", "暂停播放"}, new IMogoVoiceCmdCallBack() { + @Override + public void onCmdSelected(String cmd) { + // 简单添加暂停播放全局免唤醒词 + if ("flow_we_car_stop".equals(cmd)) { + FlowPlayControl.getInstance().doPause(); + } + } + }); + } + + isFirstPlay = true; + } + + private void addWindowView() { + if (ServiceMediaHandler.getMogoWindowManager() == null) { + return; + } + + if (!mHasAddWindow) { + mHasAddWindow = true; + mWindowView = + LayoutInflater.from(mContext).inflate(R.layout.module_media_music_window_alert_layout, null); + mWindowView.setVisibility(View.VISIBLE); + mCircleImg = mWindowView.findViewById(R.id.window_circle_img); + mScrollText = mWindowView.findViewById(R.id.window_scroll_txt); + mWindowPlayPause = mWindowView.findViewById(R.id.window_play_pause); + mWindowPlayNext = mWindowView.findViewById(R.id.window_music_next); + mWindowMediaCenter = mWindowView.findViewById(R.id.window_media_center); + mWindowCurrTime = mWindowView.findViewById(R.id.window_current_time); + mWindowMaxTime = mWindowView.findViewById(R.id.window_max_time); + mWindowProgress = mWindowView.findViewById(R.id.window_progress_bar); + if (mWindowPlayPause != null) { + mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_pause); + } + int yPos = + getContext().getResources().getDimensionPixelOffset(R.dimen.module_media_music_state_location); + int xPos = + getContext().getResources().getDimensionPixelOffset(R.dimen.module_media_music_state_location_x); + ServiceMediaHandler.getMogoWindowManager().addView(mWindowView, xPos, yPos, false); + updateWindowUI(true); + mWindowMediaCenter.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onClicks(View view) { + openAqtApp(); + } + }); + + mWindowPlayPause.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onClicks(View view) { + if (mMediaInfoData != null) { + if (mMediaInfoData.getPlayState() == MusicConstant.PLAY_STATE_PAUSE_OR_STOP) { + mPresenter.play(mMediaInfoData); + } else { + // 没有做详细判断,不是暂停就是播放 + mPresenter.pause(mMediaInfoData); + } + } else { + openAqtApp(); + } + } + }); + + mWindowPlayNext.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onClicks(View view) { + if (mPresenter != null) { + mPresenter.next(); + } + } + }); + } + } + + private void updateWindowUI() { + updateWindowUI(false); + } + + private void updateWindowUI(boolean first) { + if (mWindowView == null) { + return; + } + if (mMediaInfoData != null) { + if (mMediaInfoData.getType() == MusicConstant.PLAY_STATE_ERROR||isFirstPlay) { + mWindowView.setVisibility(View.GONE); + } else { + mWindowView.setVisibility(View.VISIBLE); + } + } else { + mWindowView.setVisibility(View.GONE); + return; + } + + if (mScrollText != null) { + mScrollText.setText(mMediaInfoData.getMediaName()); + } + + if (first || mMediaInfoData.getPlayState() == MusicConstant.PLAY_STATE_PLAYING || mMediaInfoData.getPlayState() == MusicConstant.PLAY_STATE_BUFF) { + if (mWindowMaxTime != null) { + mWindowMaxTime.setText(Utils.calculateTime((int) mMediaInfoData.getMaxTime())); + } + if (mWindowCurrTime != null) { + mWindowCurrTime.setText(Utils.calculateTime((int) mMediaInfoData.getCurTime())); + } + } + + if (mCircleImg != null) { + com.bumptech.glide.request.RequestOptions options = + new com.bumptech.glide.request.RequestOptions() + .placeholder(R.drawable.module_media_share_default_icon); + GlideApp.with(mContext).applyDefaultRequestOptions(options).load(mMediaInfoData.getMediaImg()).into(mCircleImg); + } + + } + + @Override + public Context getContext() { + return mContext; + } + + @Override + public void onMusicPlaying() { + Logger.d(TAG, "onMusicPlaying===" + mMediaInfoData); + isFirstPlay = false; + updateWindowUI(false); + if (mWindowPlayPause != null) { + mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_play); + } + + if (mCircleImg != null) { + mCircleImg.startAnim(); + } + } + + @Override + public void onMusicPause() { + Logger.d(TAG, "onMusicPause: ===" + mMediaInfoData); + if (mWindowPlayPause != null) { + mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_pause); + } + + if (mCircleImg != null) { + mCircleImg.stopAnim(); + } + } + + @Override + public void onMusicStopped() { + Logger.d(TAG, "onMusicStopped===" + mMediaInfoData); + if (mWindowPlayPause != null) { + mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_pause); + } + + if (mCircleImg != null) { + mCircleImg.stopAnim(); + } + } + + @Override + public void onMediaInfoChanged(MediaInfoData mediaInfoData) { + Logger.d(TAG, "onMediaInfoChanged: " + mediaInfoData); + mMediaInfoData = mediaInfoData; + addWindowView(); + updateWindowUI(); + } + + @Override + public void onMusicProgress(long current, long total) { +// Logger.d(TAG, "onMusicProgress==current: " + current + " total: " + total); + if (mMediaInfoData != null) { + mMediaInfoData.setCurTime((int) current); + mMediaInfoData.setMaxTime((int) total); + } + if (mWindowCurrTime != null) { + mWindowCurrTime.setText(Utils.calculateTime((int) current)); + mWindowMaxTime.setText(Utils.calculateTime((int) total)); + } + try { + int progress = + (int) ((current * 1.0f * 100) / (total * 1.0f)); + if (mWindowProgress != null) { + mWindowProgress.setProgress(progress); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void openAqtApp() { + try { + LaunchUtils.launchByPkg(mContext, "com.tencent.wecarflow"); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/constants/MusicConstant.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/constants/MusicConstant.java new file mode 100644 index 0000000000..e26222ae1f --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/constants/MusicConstant.java @@ -0,0 +1,13 @@ +package com.mogo.module.media.constants; + +/** + * 音频相关常量 + * + * @author tongchenfei + */ +public class MusicConstant { + public static final int PLAY_STATE_PLAYING = 1; + public static final int PLAY_STATE_BUFF = 2; + public static final int PLAY_STATE_PAUSE_OR_STOP = 0; + public static final int PLAY_STATE_ERROR = -1; +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java index aafffdbe03..a0ddf0f210 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java @@ -1,5 +1,7 @@ package com.mogo.module.media.model; +import com.mogo.module.media.constants.MusicConstant; + import java.io.Serializable; public class MediaInfoData implements Serializable { @@ -142,4 +144,13 @@ public class MediaInfoData implements Serializable { public void setBookInfo(String bookInfo) { this.bookInfo = bookInfo; } + + @Override + public String toString() { + return "MediaInfoData{" + + "mediaName='" + mediaName + '\'' + + ", mediaImg='" + mediaImg + '\'' + + ", playState=" + playState + + '}'; + } } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/BaseMediaPresenter.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/BaseMediaPresenter.java new file mode 100644 index 0000000000..103528a49a --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/BaseMediaPresenter.java @@ -0,0 +1,53 @@ +package com.mogo.module.media.presenter; + +import android.content.Context; + +import com.mogo.commons.mvp.IView; +import com.mogo.commons.mvp.Presenter; +import com.mogo.module.media.model.MediaInfoData; + +/** + * 媒体播放presenter基类,目前没有整合到原MediaPresenter中,原来的qq音乐,喜马拉雅和懒人听书下掉了 + * + * @author tongchenfei + */ +public abstract class BaseMediaPresenter extends Presenter { + public BaseMediaPresenter(V view) { + super(view); + } + + /** + * 初始化 + * + * @param context 上下文 + */ + public abstract void init(Context context); + + /** + * 播放音乐 + * @param mediaInfoData 待播放音乐信息 + */ + public abstract void play(MediaInfoData mediaInfoData); + + /** + * 暂停播放 + * @param mediaInfoData 待暂停音乐信息 + */ + public abstract void pause(MediaInfoData mediaInfoData); + + /** + * 停止播放 + * @param mediaInfoData 待停止播放音乐信息 + */ + public abstract void stop(MediaInfoData mediaInfoData); + + /** + * 上一首 + */ + public abstract void pre(); + + /** + * 下一首 + */ + public abstract void next(); +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java new file mode 100644 index 0000000000..66ab3efecc --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java @@ -0,0 +1,198 @@ +package com.mogo.module.media.presenter; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.module.media.MediaConstants; +import com.mogo.module.media.constants.MusicConstant; +import com.mogo.module.media.model.MediaInfoData; +import com.mogo.module.media.view.IMusicView; +import com.mogo.service.IMogoServiceApis; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; +import com.mogo.utils.logger.Logger; +import com.tencent.wecarflow.flowoutside.sdk.BindListener; +import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl; +import com.tencent.wecarflow.flowoutside.sdk.MediaChangeListener; +import com.tencent.wecarflow.flowoutside.sdk.MediaInfo; +import com.tencent.wecarflow.flowoutside.sdk.PlayStateListener; +import com.tencent.wecarflow.flowoutside.sdk.QueryCallback; + +/** + * 爱趣听presenter + * + * @author tongchenfei + */ +public class WeCarFlowPresenter extends BaseMediaPresenter { + private static final String TAG = "WeCarFlowPresenter"; + public WeCarFlowPresenter(IMusicView view) { + super(view); + } + + private Context context; + + private MediaInfoData currentMedia; + + private boolean isBind = true; + private IMogoServiceApis serviceApis; + + private QueryCallback isPlayingCallback = new QueryCallback() { + @Override + public void onError(int i) { + + } + + @Override + public void onSuccess(Boolean aBoolean) { + currentMedia.setPlayState(aBoolean ? MusicConstant.PLAY_STATE_PLAYING : + MusicConstant.PLAY_STATE_PAUSE_OR_STOP); + if (mView != null) { + mView.onMediaInfoChanged(currentMedia); + } + } + }; + + private QueryCallback currentCallback = new QueryCallback() { + @Override + public void onError(int i) { + + } + + @Override + public void onSuccess(MediaInfo mediaInfo) { + currentMedia.setMediaName(mediaInfo.getMediaName()); + currentMedia.setMediaImg(mediaInfo.getMediaImage()); + if (mView != null) { + mView.onMediaInfoChanged(currentMedia); + } + } + }; + + @Override + public void init(Context context) { + this.context = context; + currentMedia = new MediaInfoData(); + + serviceApis = + (IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context); + + serviceApis.getStatusManagerApi().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.MAIN_PAGE_RESUME, new IMogoStatusChangedListener() { + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (isTrue) { + Logger.d(TAG, "onResume, isBind: " + isBind); + // 需要在resume时候判断绑定关系是否正常 + if (!isBind) { + // 未绑定,需要重新绑定,同时第一次绑定初始化也是在此处 + FlowPlayControl.getInstance().bindPlayService(context); + } + } + } + }); + + FlowPlayControl.getInstance().addBindListener(new BindListener() { + @Override + public void onServiceConnected() { + Logger.d(TAG, "onServiceConnected==="); + isBind = true; + FlowPlayControl.getInstance().queryPlaying(isPlayingCallback); + FlowPlayControl.getInstance().queryCurrent(currentCallback); + } + + @Override + public void onServiceDisconnected() { + Logger.e(TAG, "onServiceDisconnected==="); + isBind = false; + } + + @Override + public void onBindDied() { + Logger.e(TAG, "onBindDied==="); + isBind = false; + } + }); + + FlowPlayControl.getInstance().addMediaChangeListener(new MediaChangeListener() { + @Override + public void onMediaChange(MediaInfo mediaInfo) { + Logger.d(TAG, "onMediaChange: " + mediaInfo); + Logger.d(TAG, "onMediaChange, img: " + mediaInfo.getMediaImage()); + currentMedia.setMediaName(mediaInfo.getMediaName()); + currentMedia.setMediaImg(mediaInfo.getMediaImage()); + mView.onMediaInfoChanged(currentMedia); + } + + @Override + public void onFavorChange(boolean b) { + + } + }); + + FlowPlayControl.getInstance().addPlayStateListener(new PlayStateListener() { + @Override + public void onStart() { + if (mView != null && currentMedia != null) { + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PLAYING); + mView.onMusicPlaying(); + mView.onMediaInfoChanged(currentMedia); + } + } + + @Override + public void onPause() { + if (mView != null && currentMedia != null) { + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); + mView.onMusicPause(); + mView.onMediaInfoChanged(currentMedia); + } + } + + @Override + public void onStop() { + if (mView != null && currentMedia != null) { + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); + mView.onMusicStopped(); + mView.onMediaInfoChanged(currentMedia); + } + } + + @Override + public void onProgress(String s, long current, long total) { + if (mView != null) { + mView.onMusicProgress(current, total); + } + } + }); + + FlowPlayControl.getInstance().bindPlayService(context); + } + + @Override + public void play(MediaInfoData mediaInfoData) { + FlowPlayControl.getInstance().doPlay(); + } + + @Override + public void pause(MediaInfoData mediaInfoData) { + FlowPlayControl.getInstance().doPause(); + } + + @Override + public void stop(MediaInfoData mediaInfoData) { + FlowPlayControl.getInstance().doStop(); + } + + @Override + public void pre() { + FlowPlayControl.getInstance().doPre(); + } + + @Override + public void next() { + FlowPlayControl.getInstance().doNext(); + } +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/receiver/MediaSpeechReceiver.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/receiver/MediaSpeechReceiver.java index 5fecc7468d..fd35cc5bb6 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/receiver/MediaSpeechReceiver.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/receiver/MediaSpeechReceiver.java @@ -9,6 +9,9 @@ import com.mogo.module.media.utils.MusicControlBroadCast; import com.mogo.utils.ActivityLifecycleManager; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; +import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl; + +import io.reactivex.processors.FlowableProcessor; /** * 我要听{歌手/歌名}: @@ -35,30 +38,32 @@ public class MediaSpeechReceiver extends BroadcastReceiver { //我要听{歌手/歌名} Logger.d("MediaSpeechReceiver"," "+"type qq "); String musicModel = intent.getStringExtra("music_model"); - if (appActive){ - MusicControlBroadCast.playSomeBodyMusic(musicModel); - MusicControlBroadCast.mediaCenterBroadcast(); - }else { - MusicControlBroadCast.playSomeBodyMusic(musicModel); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - MusicControlBroadCast.qqOpenQQMusic(); - } - },300); - } + FlowPlayControl.getInstance().semanticSearch(context, "launcher", musicModel); +// if (appActive){ +// MusicControlBroadCast.playSomeBodyMusic(musicModel); +// MusicControlBroadCast.mediaCenterBroadcast(); +// }else { +// MusicControlBroadCast.playSomeBodyMusic(musicModel); +// UiThreadHandler.postDelayed(new Runnable() { +// @Override +// public void run() { +// MusicControlBroadCast.qqOpenQQMusic(); +// } +// },300); +// } }else if (cmdAction.equals("com.zhidao.speech.awake.notify")){ //播放音乐 String musicCmd = intent.getStringExtra("command"); Logger.d("MediaSpeechReceiver"," "+"qq book"+musicCmd==null?"":musicCmd); if (musicCmd.equals("com.ileja.music.playapp")){ //QQ音乐 - if (appActive){ - MusicControlBroadCast.qqPlayQQMusic(); - MusicControlBroadCast.mediaCenterBroadcast(); - }else{ - MusicControlBroadCast.qqOpenQQMusic(); - } + FlowPlayControl.getInstance().doPlay(); +// if (appActive){ +// MusicControlBroadCast.qqPlayQQMusic(); +// MusicControlBroadCast.mediaCenterBroadcast(); +// }else{ +// MusicControlBroadCast.qqOpenQQMusic(); +// } }else if (musicCmd.equals("com.zhidao.book.play")){ //懒人听书 if (appActive){ diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java new file mode 100644 index 0000000000..653a77601e --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java @@ -0,0 +1,29 @@ +package com.mogo.module.media.utils; + +import android.content.Context; +import android.content.Intent; + +/** + * @author congtaowang + * @since 2020-02-03 + *

+ * 描述 + */ +public class LaunchUtils { + + /** + * 通过包名启动app + * + * @param context + * @param pkg 包名 + */ + public static void launchByPkg( Context context, String pkg ) throws Exception { + Intent intent = getLaunchIntentForPackage( context, pkg ); + intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); + context.startActivity( intent ); + } + + public static Intent getLaunchIntentForPackage( Context context, String pkg ) { + return context.getPackageManager().getLaunchIntentForPackage( pkg ); + } +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/MusicControlBroadCast.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/MusicControlBroadCast.java index 4a7a247c71..6ec22f102e 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/MusicControlBroadCast.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/MusicControlBroadCast.java @@ -459,21 +459,23 @@ public class MusicControlBroadCast { } } -// return null; - MediaInfoData mediaInfoData = new MediaInfoData(); - mediaInfoData.setMediaId("001jiOrk2g389Y"); - mediaInfoData.setBookInfo(""); - mediaInfoData.setType(1); - mediaInfoData.setMediaName("恭喜发财 (广场舞)"); - mediaInfoData.setMediaSinger("刘德华"); - mediaInfoData.setMediaType("物流派"); - mediaInfoData.setPlayState(0); - mediaInfoData.setLocalMedia(false); - mediaInfoData.setCurTime(0); - mediaInfoData.setMaxTime(410*1000); - mediaInfoData.setMediaUrl("http://isure.stream.qqmusic.qq.com/C200000s2wCd3pzdnA.m4a?guid=2000001271&vkey=8CE1A876F5079A6E4E9BCB8306252EF152F3D4F237B3BF4C1450B50BA7E065D3D55A0735FD2E957B129E83FF7D7D5D398479D53FE2171DF0&uin=&fromtag=50"); - mediaInfoData.setMediaImg("http://music.qq.com/musicbox/img/uccpic_error.jpg"); - return mediaInfoData;//刘德华的恭喜发财 + return null; + + // 测试代码吧? +// MediaInfoData mediaInfoData = new MediaInfoData(); +// mediaInfoData.setMediaId("001jiOrk2g389Y"); +// mediaInfoData.setBookInfo(""); +// mediaInfoData.setType(1); +// mediaInfoData.setMediaName("恭喜发财 (广场舞)"); +// mediaInfoData.setMediaSinger("刘德华"); +// mediaInfoData.setMediaType("物流派"); +// mediaInfoData.setPlayState(0); +// mediaInfoData.setLocalMedia(false); +// mediaInfoData.setCurTime(0); +// mediaInfoData.setMaxTime(410*1000); +// mediaInfoData.setMediaUrl("http://isure.stream.qqmusic.qq.com/C200000s2wCd3pzdnA.m4a?guid=2000001271&vkey=8CE1A876F5079A6E4E9BCB8306252EF152F3D4F237B3BF4C1450B50BA7E065D3D55A0735FD2E957B129E83FF7D7D5D398479D53FE2171DF0&uin=&fromtag=50"); +// mediaInfoData.setMediaImg("http://music.qq.com/musicbox/img/uccpic_error.jpg"); +// return mediaInfoData;//刘德华的恭喜发财 } /** diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java new file mode 100644 index 0000000000..d0379ff238 --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java @@ -0,0 +1,21 @@ +package com.mogo.module.media.view; + +import com.mogo.commons.mvp.IView; +import com.mogo.module.media.model.MediaInfoData; + +/** + * 音频显示类的接口 + * + * @author tongchenfei + */ +public interface IMusicView extends IView { + void onMediaInfoChanged(MediaInfoData mediaInfoData); + + void onMusicPlaying(); + + void onMusicPause(); + + void onMusicStopped(); + + void onMusicProgress(long current,long total); +} 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 35713da421..f93e774f96 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 @@ -1,9 +1,12 @@ package com.mogo.module.navi.manager; import android.content.Context; +import android.content.Intent; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.commons.AbsMogoApplication; import com.mogo.map.MogoLatLng; +import com.mogo.module.common.map.CustomNaviInterrupter; import com.mogo.module.navi.constants.SearchApisHolder; import com.mogo.service.MogoServicePaths; import com.mogo.service.module.IMogoSearchManager; diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 1b5027ac8d..50370ed441 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -23,13 +23,11 @@ import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.location.MogoLocation; -import com.mogo.map.model.MogoPoi; import com.mogo.map.navi.IMogoAimlessModeListener; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.navi.MogoCongestionInfo; -import com.mogo.map.navi.MogoNaviInfo; import com.mogo.map.navi.MogoTraffic; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; @@ -235,7 +233,6 @@ public class MogoServices implements IMogoMapListener, mLoopRequest = false; // 用户手动操作地图刷新成功后,设置状态为 true,引发延时策略 mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, true ); - } @Override @@ -316,6 +313,11 @@ public class MogoServices implements IMogoMapListener, mIntentManager.registerIntentListener( ServiceConst.COMMAND_OPERATION, this ); mIntentManager.registerIntentListener( MogoReceiver.ACTION_VOICE_READY, this ); mIntentManager.registerIntentListener( MogoReceiver.ACTION_MOCK, this ); + mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE, this ); + mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE, this ); + mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND, this ); + mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_USER_ONLINE, this ); + mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION, this ); mADASController = MarkerServiceHandler.getADASController(); mLauncher = MarkerServiceHandler.getLauncher(); @@ -756,94 +758,16 @@ public class MogoServices implements IMogoMapListener, @Override public void onIntentReceived( String command, Intent intent ) { - if ( MogoReceiver.ACTIION_ADAS.equals( command ) ) { - if ( intent == null ) { - return; - } - int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 ); - mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 ); - } else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) { - mStatusManager.setAccStatus( ServiceConst.TYPE, true ); - Logger.d( TAG, "acc status: %s", true ); - } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( command ) ) { - mStatusManager.setAccStatus( ServiceConst.TYPE, false ); - Logger.d( TAG, "acc status: %s", false ); - } else if ( MogoReceiver.ACTION_NWD_ACC.equals( command ) ) { - int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 ); - Logger.d( TAG, "acc status: %s", state == 1 ); - mStatusManager.setAccStatus( ServiceConst.TYPE, state == 1 ); - } else if ( MogoReceiver.ACTION_VOICE_UI.equals( command ) ) { - String val = intent.getStringExtra( MogoReceiver.PARRAM_WAKE_STATUS ); - if ( TextUtils.equals( val, MogoReceiver.VALUE_DISMISS ) ) { - mStatusManager.setVoiceUIShow( TAG, false ); - } else if ( TextUtils.equals( val, MogoReceiver.VALUE_SHOW ) ) { - mStatusManager.setVoiceUIShow( TAG, true ); - } - } else if ( ServiceConst.COMMAND_NEXT.equals( command ) ) { + + if ( ServiceConst.COMMAND_NEXT.equals( command ) ) { onActionDone( MogoAction.Next ); } else if ( ServiceConst.COMMAND_PREVIOUS.equals( command ) ) { onActionDone( MogoAction.Prev ); - } else if ( ServiceConst.COMMAND_SWITCH_CARD.equals( command ) ) { - IntentHandlerFactory.getInstance().handle( mContext, command, intent ); - } else if ( MogoReceiver.ACTION_ADAS_STATUS.equals( command ) ) { - String msg = intent.getStringExtra( "adasMsg" ); - if ( TextUtils.isEmpty( msg ) ) { - return; - } - CarStateInfo stateInfo = GsonUtil.objectFromJson( msg, CarStateInfo.class ); - if ( stateInfo != null ) { - changeCarHeadstockDirection( stateInfo.getValues().getHeading() ); - // changeMyLocation( stateInfo.getValues() ); - } - } else if ( ServiceConst.COMMAND_OPERATION.equals( command ) ) { - IntentHandlerFactory.getInstance().handle( mContext, command, intent ); - } else if ( MogoReceiver.ACTION_VOICE_READY.equals( command ) ) { - AIAssist.getInstance( mContext ).flush(); - mStatusManager.setAIAssistReady( TAG, true ); - } else if ( ServiceConst.COMMAND_MY_LOCATION.equals( command ) ) { - IntentHandlerFactory.getInstance().handle( mContext, command, intent ); - } else if ( MogoReceiver.ACTION_MOCK.equals( command ) ) { + } else { IntentHandlerFactory.getInstance().handle( mContext, command, intent ); } } - private void changeCarHeadstockDirection( final double degree ) { - if ( mNavi.isNaviing() ) { - return; - } - if ( mStatusManager.isSearchUIShow() ) { - return; - } - if ( !mStatusManager.isMainPageOnResume() ) { - return; - } - if ( mStatusManager.isSeekHelping() ) { - return; - } - if ( mUiController.getCurrentUiMode() != EnumMapUI.NorthUP_2D ) { - return; - } - UiThreadHandler.post( () -> { - mUiController.showMyLocation( inflateCursorView( degree ) ); - } ); - } - - private View inflateCursorView( double degree ) { - View view = View.inflate( mContext, R.layout.map_amap_cursor, null ); - view.setRotation( ( float ) degree ); - return view; - } - - private void changeMyLocation( CarStateInfo.ValuesBean valuesBean ) { - if ( valuesBean == null ) { - return; - } - Location location = new Location( LocationManager.GPS_PROVIDER ); - location.setAltitude( valuesBean.getAlt() ); - location.setLatitude( valuesBean.getLat() ); - location.setLongitude( valuesBean.getLon() ); - } - /** * 注册桌面免唤醒指令 */ diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java index 70012c00b6..e1de1cfacd 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java @@ -159,4 +159,39 @@ public class ServiceConst { public static final String[] CMD_BACK_WORDS = new String[]{"关闭", "返回"}; + /** + * 查询附近的人 + * "data"="{"op":"查询","location":"附近","obj":"人"}" + */ + public static final String COMMAND_ZHIDAO_NEARBY_CAR_ONLINE = "com.zhidao.nearby.car.online"; + + /** + * 查询附近的好友 + * 搜索当前车机所在位置同城市本人有好友关系 + * (如果一期做不了根据车机所在位置同城查询,则根据车机激活城市查询) + * "data"="{"op":"查询","status":"","location":"","obj":"好友"}" + */ + public static final String COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE = "com.zhidao.nearby.friend.online"; + + /** + * 查询在线的好友 + * "data"="{"op":"查询","status":"在线","obj":"好友"}" + */ + public static final String COMMAND_ZHIDAO_NEARBY_FRIEND = "com.zhidao.nearby.friend"; + + /** + * 查询在线的人 + *

+ * "data"="{"op":"查询","status":"在线","obj":"车主"}" + */ + public static final String COMMAND_ZHIDAO_NEARBY_USER_ONLINE = "com.zhidao.nearby.user.online"; + + /** + * 查询指定位置的好友 + *

+ * "data"="{"op":"看看","obj":"好友","location":"中关村"}" + */ + public static final String COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION = "com.zhidao.nearby.friend.bylocation"; + + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java new file mode 100644 index 0000000000..aa5c6c8161 --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/ADASStatusIntentHandler.java @@ -0,0 +1,106 @@ +package com.mogo.module.service.intent; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.location.LocationManager; +import android.text.TextUtils; +import android.view.View; + +import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.R; +import com.mogo.module.service.ServiceConst; +import com.mogo.module.service.carinfo.CarStateInfo; +import com.mogo.module.service.receiver.MogoReceiver; +import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.network.utils.GsonUtil; + +public +/** + * @author congtaowang + * @since 2020/6/5 + *

+ * 描述 + */ +class ADASStatusIntentHandler implements IntentHandler { + + private static volatile ADASStatusIntentHandler sInstance; + + private ADASStatusIntentHandler() { + } + + public static ADASStatusIntentHandler getInstance() { + if ( sInstance == null ) { + synchronized ( ADASStatusIntentHandler.class ) { + if ( sInstance == null ) { + sInstance = new ADASStatusIntentHandler(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + @Override + public void handle( Context context, Intent intent ) { + + if ( MogoReceiver.ACTIION_ADAS.equals( intent.getAction() ) ) { + if ( intent == null ) { + return; + } + int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 ); + MarkerServiceHandler.getMogoStatusManager().setADASUIShow( ServiceConst.TYPE, status == 1 ); + } else { + String msg = intent.getStringExtra( "adasMsg" ); + if ( TextUtils.isEmpty( msg ) ) { + return; + } + CarStateInfo stateInfo = GsonUtil.objectFromJson( msg, CarStateInfo.class ); + if ( stateInfo != null ) { + changeCarHeadstockDirection( context, stateInfo.getValues().getHeading() ); + // changeMyLocation( stateInfo.getValues() ); + } + } + } + + private void changeCarHeadstockDirection( final Context context, final double degree ) { + if ( MarkerServiceHandler.getNavi().isNaviing() ) { + return; + } + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { + return; + } + if ( !MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume() ) { + return; + } + if ( MarkerServiceHandler.getMogoStatusManager().isSeekHelping() ) { + return; + } + if ( MarkerServiceHandler.getMapUIController().getCurrentUiMode() != EnumMapUI.NorthUP_2D ) { + return; + } + UiThreadHandler.post( () -> { + MarkerServiceHandler.getMapUIController().showMyLocation( inflateCursorView( context, degree ) ); + } ); + } + + private View inflateCursorView( Context context, double degree ) { + View view = View.inflate( context, R.layout.map_amap_cursor, null ); + view.setRotation( ( float ) degree ); + return view; + } + + private void changeMyLocation( CarStateInfo.ValuesBean valuesBean ) { + if ( valuesBean == null ) { + return; + } + Location location = new Location( LocationManager.GPS_PROVIDER ); + location.setAltitude( valuesBean.getAlt() ); + location.setLatitude( valuesBean.getLat() ); + location.setLongitude( valuesBean.getLon() ); + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AIAssistIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AIAssistIntentHandler.java new file mode 100644 index 0000000000..b7e22acdaa --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AIAssistIntentHandler.java @@ -0,0 +1,25 @@ +package com.mogo.module.service.intent; + +import android.content.Context; +import android.content.Intent; + +import com.mogo.commons.voice.AIAssist; +import com.mogo.module.service.MarkerServiceHandler; + +public +/** + * @author congtaowang + * @since 2020/6/5 + *

+ * 描述 + */ +class AIAssistIntentHandler implements IntentHandler { + + private static final String TAG = "AIAssistIntentHandler"; + + @Override + public void handle( Context context, Intent intent ) { + AIAssist.getInstance( context ).flush(); + MarkerServiceHandler.getMogoStatusManager().setAIAssistReady( TAG, true ); + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java new file mode 100644 index 0000000000..b9f14e92da --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AccStatusIntentHandler.java @@ -0,0 +1,56 @@ +package com.mogo.module.service.intent; + +import android.content.Context; +import android.content.Intent; + +import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.ServiceConst; +import com.mogo.module.service.receiver.MogoReceiver; +import com.mogo.utils.logger.Logger; + +public +/** + * @author congtaowang + * @since 2020/6/5 + * + * 描述 + */ +class AccStatusIntentHandler implements IntentHandler { + + private static final String TAG = "AccStatusIntentHandler"; + + private static volatile AccStatusIntentHandler sInstance; + + private AccStatusIntentHandler(){} + + public static AccStatusIntentHandler getInstance(){ + if( sInstance == null ){ + synchronized( AccStatusIntentHandler.class ) { + if( sInstance == null ){ + sInstance = new AccStatusIntentHandler(); + } + } + } + return sInstance; + } + + public synchronized void release(){ + sInstance = null; + } + + @Override + public void handle( Context context, Intent intent ) { + String action = intent.getAction(); + if ( Intent.ACTION_POWER_CONNECTED.equals( action ) ) { + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, true ); + Logger.d( TAG, "acc status: %s", true ); + } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( action ) ) { + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, false ); + Logger.d( TAG, "acc status: %s", false ); + } else if ( MogoReceiver.ACTION_NWD_ACC.equals( action ) ) { + int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 ); + Logger.d( TAG, "acc status: %s", state == 1 ); + MarkerServiceHandler.getMogoStatusManager().setAccStatus( ServiceConst.TYPE, state == 1 ); + } + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java index fbba17c7b6..7e79d98584 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/IntentHandlerFactory.java @@ -23,6 +23,18 @@ public class IntentHandlerFactory { mHandlers.put( ServiceConst.COMMAND_SWITCH_CARD, new SwitchCardIntentHandler() ); mHandlers.put( ServiceConst.COMMAND_OPERATION, new AppOperationIntentHandler() ); mHandlers.put( ServiceConst.COMMAND_MY_LOCATION, new MyLocationHandler() ); + mHandlers.put( ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE, OnlineCarSearchIntentHandler.getInstance() ); + mHandlers.put( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE, OnlineCarSearchIntentHandler.getInstance() ); + mHandlers.put( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND, OnlineCarSearchIntentHandler.getInstance() ); + mHandlers.put( ServiceConst.COMMAND_ZHIDAO_NEARBY_USER_ONLINE, OnlineCarSearchIntentHandler.getInstance() ); + mHandlers.put( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION, OnlineCarSearchIntentHandler.getInstance() ); + mHandlers.put( MogoReceiver.ACTION_VOICE_UI, new VoiceUiIntentHandler() ); + mHandlers.put( Intent.ACTION_POWER_CONNECTED, AccStatusIntentHandler.getInstance() ); + mHandlers.put( Intent.ACTION_POWER_DISCONNECTED, AccStatusIntentHandler.getInstance() ); + mHandlers.put( MogoReceiver.ACTION_NWD_ACC, AccStatusIntentHandler.getInstance() ); + mHandlers.put( MogoReceiver.ACTION_ADAS_STATUS, ADASStatusIntentHandler.getInstance() ); + mHandlers.put( MogoReceiver.ACTIION_ADAS, ADASStatusIntentHandler.getInstance() ); + mHandlers.put( MogoReceiver.ACTION_VOICE_READY, new AIAssistIntentHandler() ); } private static final class InstanceHolder { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java index 7bee8a08a0..e836349303 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java @@ -26,6 +26,7 @@ import com.mogo.module.service.MogoServiceProvider; import com.mogo.module.service.R; import com.mogo.service.entrance.ButtonIndex; import com.mogo.utils.TipToast; +import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; import com.mogo.utils.network.utils.GsonUtil; @@ -268,9 +269,16 @@ public class MockIntentHandler implements IntentHandler { MogoMarkerOptions options = new MogoMarkerOptions(); options.icon( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_gray ) ) .position( mogoLatLngs.get( 0 ) ) + .owner( TAG ) .autoManager( false ); + int duration = intent.getIntExtra( "duration", 30 ); + MarkerServiceHandler.getApis().getRefreshStrategyControllerApi().restartAutoRefreshAtTime( duration ); IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker( TAG, options ); - marker.startSmooth( mogoLatLngs, intent.getIntExtra( "duration", 30 ) ); + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mogoLatLngs.get( 0 ) ); + WorkThreadHandler.getInstance().post( ()->{ + marker.startSmooth( mogoLatLngs, duration ); + } ); } break; } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java new file mode 100644 index 0000000000..e20915bd3b --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java @@ -0,0 +1,167 @@ +package com.mogo.module.service.intent; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; + +import com.mogo.map.MogoLatLng; +import com.mogo.map.location.MogoLocation; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.search.geo.IMogoGeoSearchListener; +import com.mogo.map.search.geo.MogoGeocodeAddress; +import com.mogo.map.search.geo.MogoGeocodeResult; +import com.mogo.map.search.geo.query.MogoGeocodeQuery; +import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.ServiceConst; +import com.mogo.module.service.marker.MapMarkerManager; +import com.mogo.module.service.receiver.MogoReceiver; +import com.mogo.utils.logger.Logger; + +import org.json.JSONObject; + +public +/** + * @author congtaowang + * @since 2020/6/5 + *

+ * 描述 + */ +class OnlineCarSearchIntentHandler implements IntentHandler { + + private static final String TAG = "OnlineCarSearchIntentHandler"; + + private static volatile OnlineCarSearchIntentHandler sInstance; + + private OnlineCarSearchIntentHandler() { + } + + public static OnlineCarSearchIntentHandler getInstance() { + if ( sInstance == null ) { + synchronized ( OnlineCarSearchIntentHandler.class ) { + if ( sInstance == null ) { + sInstance = new OnlineCarSearchIntentHandler(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + @Override + public void handle( Context context, Intent intent ) { + + String command = intent.getStringExtra( MogoReceiver.PARAM_COMMAND ); + if ( TextUtils.isEmpty( command ) ) { + return; + } + + MogoLocation location = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); + MogoLatLng target = null; + if ( location != null ) { + target = new MogoLatLng( location.getLatitude(), location.getLongitude() ); + } + boolean isFocus = false; + boolean isSameCity = false; + int limit = 50; + int radius = 5_000; + switch ( command ) { + case ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND: + case ServiceConst.COMMAND_ZHIDAO_NEARBY_USER_ONLINE: + isFocus = true; + isSameCity = true; + case ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE: + case ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE: + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( target ); + MapMarkerManager.getInstance().getOnlineCarData( + target, + isFocus, + isSameCity, + limit, + radius ); + break; + case ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION: + handleAreaSearch( intent, context, target ); + break; + } + } + + private void handleAreaSearch( Intent intent, Context context, MogoLatLng target ) { + String data = intent.getStringExtra( "data" ); + if ( TextUtils.isEmpty( data ) ) { + Logger.e( TAG, "语音没有携带数据!!!!!" ); + return; + } + String keyword = null; + try { + JSONObject jsonObject = new JSONObject( data ); + keyword = jsonObject.get( "location" ).toString(); + Logger.d( TAG, "location 查询指定位置的好友 keyword = " + keyword ); + } catch ( Exception e ) { + Logger.e( TAG, "语音携带数据异常!!!!!" ); + return; + } + + if ( TextUtils.isEmpty( keyword ) ) { + Logger.e( TAG, "语音携带数据为空!!!!!" ); + return; + } + + if ( TextUtils.equals( "附近", keyword ) ) { + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( target ); + MapMarkerManager.getInstance().getOnlineCarData( + target, + false, + false, + 50, + 5_000 ); + } else { + String cityCode = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation().getCityCode(); + IMogoGeoSearch search = MarkerServiceHandler.getMapService().getGeoSearch( context ); + search.setGeoSearchListener( new IMogoGeoSearchListener() { + @Override + public void onGeocodeSearched( MogoGeocodeResult geocodeResult ) { + MogoLatLng target = getGeoTargetAddress( geocodeResult ); + if ( target == null ) { + Logger.e( TAG, "geo 检索位置错误" ); + return; + } + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( geocodeResult.getAddresses().get( 0 ).getLatlng() ); + MapMarkerManager.getInstance().getOnlineCarData( + target, + false, + false, + 50, + 5_000 ); + } + } ); + MogoGeocodeQuery mogoGeocodeQuery = new MogoGeocodeQuery(); + mogoGeocodeQuery.setCity( cityCode ); + mogoGeocodeQuery.setLocationName( keyword ); + search.getFromLocationNameAsyn( mogoGeocodeQuery ); + } + } + + private MogoLatLng getGeoTargetAddress( MogoGeocodeResult geocodeResult ) { + if ( geocodeResult == null + || geocodeResult.getAddresses() == null + || geocodeResult.getAddresses().isEmpty() ) { + return null; + } + for ( MogoGeocodeAddress address : geocodeResult.getAddresses() ) { + if ( address == null ) { + continue; + } + if ( address.getLatlng() == null ) { + continue; + } + return address.getLatlng(); + } + return null; + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/VoiceUiIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/VoiceUiIntentHandler.java new file mode 100644 index 0000000000..f8aea1e8b7 --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/VoiceUiIntentHandler.java @@ -0,0 +1,30 @@ +package com.mogo.module.service.intent; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; + +import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.receiver.MogoReceiver; + +public +/** + * @author congtaowang + * @since 2020/6/5 + * + * 描述 + */ +class VoiceUiIntentHandler implements IntentHandler { + + private static final String TAG = "VoiceUiIntentHandler"; + + @Override + public void handle( Context context, Intent intent ) { + String val = intent.getStringExtra( MogoReceiver.PARRAM_WAKE_STATUS ); + if ( TextUtils.equals( val, MogoReceiver.VALUE_DISMISS ) ) { + MarkerServiceHandler.getMogoStatusManager().setVoiceUIShow( TAG, false ); + } else if ( TextUtils.equals( val, MogoReceiver.VALUE_SHOW ) ) { + MarkerServiceHandler.getMogoStatusManager().setVoiceUIShow( TAG, true ); + } + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index a8cd717cde..1e6c812512 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -4,6 +4,7 @@ import android.content.Context; import android.text.TextUtils; import com.mogo.map.MogoLatLng; +import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; @@ -15,6 +16,7 @@ import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; 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.MarkerResponse; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; @@ -109,6 +111,20 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( !result ) { return false; } + + Map< String, Object > properties = new HashMap<>(); + + if ( marker.getObject() instanceof MarkerShowEntity ) { + properties.put( "sn", getCarSnFromMarker( marker ) ); + if ( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerExploreWay ) { + MarkerExploreWay exploreWay = ( MarkerExploreWay ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj(); + properties.put( "dbid", exploreWay.getInfoId() ); + properties.put( "type", exploreWay.getPoiType() ); + } else if ( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerOnlineCar ) { + properties.put( "type", "10000" ); + } + } + MarkerServiceHandler.getMogoAnalytics().track( "v2x_road_click", properties ); } catch ( Exception e ) { e.printStackTrace(); } @@ -478,12 +494,38 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( markerCardResult == null ) { return; } - JSONArray array = new JSONArray(); List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + JSONArray array = new JSONArray(); int size = 0; size = exploreWayList == null ? 0 : exploreWayList.size(); - fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_ROAD_CONDITION, size ); + final Map< String, Integer > typeCounterMap = new HashMap<>(); + for ( int i = 0; i < size; i++ ) { + MarkerExploreWay exploreWay = exploreWayList.get( i ); + String poiType = exploreWay.getPoiType(); + int counter = 0; + if ( !typeCounterMap.containsKey( poiType ) ) { + counter = 0; + } else { + counter = typeCounterMap.get( poiType ); + } + typeCounterMap.put( poiType, counter + 1 ); + } + if ( !typeCounterMap.isEmpty() ) { + for ( Map.Entry< String, Integer > entry : typeCounterMap.entrySet() ) { + if ( entry == null || entry.getKey() == null ) { + continue; + } + JSONObject object = new JSONObject(); + try { + object.put( "type", entry.getKey() ); + object.put( "num", entry.getValue() ); + array.put( object ); + } catch ( JSONException e ) { + e.printStackTrace(); + } + } + } try { if ( array.length() == 0 ) { @@ -491,7 +533,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } final Map< String, Object > properties = new HashMap<>(); properties.put( "data", array.toString() ); - MarkerServiceHandler.getMogoAnalytics().track( "Launcher_Data_Get", properties ); + MarkerServiceHandler.getMogoAnalytics().track( "v2x_data_get", properties ); } catch ( Exception e ) { e.printStackTrace(); } @@ -621,28 +663,44 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } public void getOnlineCarData( MogoLatLng latlng ) { - mCarLatLng = latlng; - getOnlineCarList(); + getOnlineCarData( latlng, false, false, 50, 2_000 ); + } + + public void getOnlineCarData( MogoLatLng latLng, + boolean onlyFocus, + boolean onlySameCity, + int limit, + int radius ) { UiThreadHandler.removeCallbacks( runnable ); UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 ); + getOnlineCarList( latLng, onlyFocus, onlySameCity, limit, radius ); } private Runnable runnable = new Runnable() { @Override public void run() { - getOnlineCarList(); + getOnlineCarList( mCarLatLng, false, false, 2_000, 50 ); UiThreadHandler.postDelayed( this, SMOOTH_DURATION * 1000 ); } }; - private void getOnlineCarList() { + private void getOnlineCarList( + MogoLatLng latLng, + boolean onlyFocus, + boolean onlySameCity, + int limit, + int radius ) { + + if ( latLng == null ) { + return; + } if ( ignoreOnlineCarRequest() ) { removeCarMarkers(); return; } - mRefreshModel.queryOnLineCarWithRoute( mCarLatLng, false, false, new RefreshCallback() { + mRefreshModel.queryOnLineCarWithRoute( latLng, onlyFocus, onlySameCity, limit, radius, new RefreshCallback() { @Override public void onSuccess( Object o ) { MarkerResponse data = ( MarkerResponse ) o; @@ -655,14 +713,31 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } + int size = onlineCarList == null ? 0 : onlineCarList.size(); + trackData( size ); + runOnTargetThread( () -> { drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE ); } ); } - @Override - public void onFail() { + private void trackData( int size ) { + JSONArray array = new JSONArray(); + JSONObject object = new JSONObject(); + try { + object.put( "type", "10000" ); + object.put( "num", size ); + array.put( object ); + } catch ( JSONException e ) { + e.printStackTrace(); + } + if ( array.length() == 0 ) { + return; + } + final Map< String, Object > properties = new HashMap<>(); + properties.put( "data", array.toString() ); + MarkerServiceHandler.getMogoAnalytics().track( "v2x_data_get", properties ); } } ); } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshCallback.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshCallback.java index 34a46cd615..64c691498c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshCallback.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshCallback.java @@ -10,5 +10,5 @@ public interface RefreshCallback { void onSuccess(T o); - void onFail(); + default void onFail(){} } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java index 2800efd440..e6c3f1cde1 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshModel.java @@ -38,14 +38,14 @@ public class RefreshModel { private final Context mContext; private RefreshApiService mRefreshApiService; - public RefreshModel(Context context) { + public RefreshModel( Context context ) { this.mContext = context; - IMogoNetwork network = (IMogoNetwork) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_NETWORK).navigation(context); - this.mRefreshApiService = network.create(RefreshApiService.class, getNetHost()); + IMogoNetwork network = ( IMogoNetwork ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_NETWORK ).navigation( context ); + this.mRefreshApiService = network.create( RefreshApiService.class, getNetHost() ); } public static String getNetHost() { - switch (DebugConfig.getNetMode()) { + switch ( DebugConfig.getNetMode() ) { case DebugConfig.NET_MODE_DEV: return HOST_DEV; case DebugConfig.NET_MODE_QA: @@ -57,143 +57,100 @@ public class RefreshModel { } } - public void refreshData(MogoLatLng latLng, int radius, int limit, final RefreshCallback callback) { - if (mRefreshApiService != null) { - final Map query = new ParamsProvider.Builder(mContext).build(); + public void refreshData( MogoLatLng latLng, int radius, int limit, final RefreshCallback callback ) { + if ( mRefreshApiService != null ) { + final Map< String, Object > query = new ParamsProvider.Builder( mContext ).build(); final RefreshBody refreshBody = new RefreshBody(); refreshBody.limit = limit; - refreshBody.location = new RefreshBody.LatLon(latLng.lat, latLng.lng); + refreshBody.location = new RefreshBody.LatLon( latLng.lat, latLng.lng ); refreshBody.radius = radius; - refreshBody.dataType.add(ServiceConst.CARD_TYPE_CARS_CHATTING); - refreshBody.dataType.add(ServiceConst.CARD_TYPE_ROAD_CONDITION); - refreshBody.dataType.add(ServiceConst.CARD_TYPE_SHARE_MUSIC); + refreshBody.dataType.add( ServiceConst.CARD_TYPE_CARS_CHATTING ); + refreshBody.dataType.add( ServiceConst.CARD_TYPE_ROAD_CONDITION ); + refreshBody.dataType.add( ServiceConst.CARD_TYPE_SHARE_MUSIC ); // refreshBody.dataType.add(ServiceConst.CARD_TYPE_USER_DATA); - refreshBody.dataType.add(ServiceConst.CARD_TYPE_NOVELTY); - query.put("data", GsonUtil.jsonFromObject(refreshBody)); - mRefreshApiService.refreshData(query) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SubscribeImpl(RequestOptions.create(mContext)) { + refreshBody.dataType.add( ServiceConst.CARD_TYPE_NOVELTY ); + query.put( "data", GsonUtil.jsonFromObject( refreshBody ) ); + mRefreshApiService.refreshData( query ) + .subscribeOn( Schedulers.io() ) + .observeOn( AndroidSchedulers.mainThread() ) + .subscribe( new SubscribeImpl< BaseData >( RequestOptions.create( mContext ) ) { @Override - public void onSuccess(BaseData o) { - super.onSuccess(o); - if (callback != null) { - callback.onSuccess(o); + public void onSuccess( BaseData o ) { + super.onSuccess( o ); + if ( callback != null ) { + callback.onSuccess( o ); } } @Override public void onError( Throwable e ) { super.onError( e ); - if (callback != null) { + if ( callback != null ) { callback.onFail(); } } @Override - public void onError(String message, int code) { - super.onError(message, code); - if (callback != null) { + public void onError( String message, int code ) { + super.onError( message, code ); + if ( callback != null ) { callback.onFail(); } } - }); + } ); } } - /** - * 查询在线车辆 - * - * @param latLng 经纬度 - * @param radius 半径 - * @param onlyFocus 是否仅查询已关注的好友 - * @param onlySameCity 是否仅查询注册城市相同的同城用户 - * @param callback - */ - public void queryOnLineCar(MogoLatLng latLng, - int radius, - boolean onlyFocus, - boolean onlySameCity, - final RefreshCallback callback) { - if (mRefreshApiService != null) { - final Map query = new ParamsProvider.Builder(mContext).build(); - final RefreshBody refreshBody = new RefreshBody(); - refreshBody.limit = 100; - refreshBody.location = new RefreshBody.LatLon(latLng.lat, latLng.lng); - refreshBody.radius = radius; - refreshBody.onlyFocus = onlyFocus; - refreshBody.onlySameCity = onlySameCity; - refreshBody.dataType.add(ServiceConst.CARD_TYPE_USER_DATA); - - query.put("data", GsonUtil.jsonFromObject(refreshBody)); - mRefreshApiService.refreshData(query) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SubscribeImpl(RequestOptions.create(mContext)) { - @Override - public void onSuccess(BaseData o) { - super.onSuccess(o); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - if (callback != null) { - callback.onFail(); - } - } - }); - } - } - - /** * 查询车辆 及路线 * - * @param latLng 经纬度 - * @param onlyFocus 是否仅查询已关注的好友 - * @param onlySameCity 是否仅查询注册城市相同的同城用户 + * @param latLng 经纬度 + * @param onlyFocus 是否仅查询已关注的好友 + * @param onlySameCity 是否仅查询注册城市相同的同城用户 * @param callback */ - public void queryOnLineCarWithRoute(MogoLatLng latLng, - boolean onlyFocus, - boolean onlySameCity, - final RefreshCallback callback){ - if (mRefreshApiService != null) { - final Map query = new ParamsProvider.Builder(mContext).build(); + public void queryOnLineCarWithRoute( MogoLatLng latLng, + boolean onlyFocus, + boolean onlySameCity, + int radius, + int limit, + final RefreshCallback callback ) { + if ( mRefreshApiService != null ) { + final Map< String, Object > query = new ParamsProvider.Builder( mContext ).build(); final RefreshBody refreshBody = new RefreshBody(); refreshBody.sn = Utils.getSn(); - refreshBody.location = new RefreshBody.LatLon(latLng.lat, latLng.lng); + if ( limit > 0 ) { + refreshBody.limit = limit; + } + refreshBody.radius = radius; + refreshBody.location = new RefreshBody.LatLon( latLng.lat, latLng.lng ); refreshBody.onlyFocus = onlyFocus; refreshBody.onlySameCity = onlySameCity; + refreshBody.dataType.add( ServiceConst.CARD_TYPE_USER_DATA ); - query.put("data", GsonUtil.jsonFromObject(refreshBody)); - mRefreshApiService.queryOnLineCarWithRoute(query) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SubscribeImpl(RequestOptions.create(mContext)){ + query.put( "data", GsonUtil.jsonFromObject( refreshBody ) ); + mRefreshApiService.queryOnLineCarWithRoute( query ) + .subscribeOn( Schedulers.io() ) + .observeOn( AndroidSchedulers.mainThread() ) + .subscribe( new SubscribeImpl< MarkerResponse >( RequestOptions.create( mContext ) ) { @Override - public void onSuccess(MarkerResponse o) { - super.onSuccess(o); - if (callback != null) { - callback.onSuccess(o); + public void onSuccess( MarkerResponse o ) { + super.onSuccess( o ); + if ( callback != null ) { + callback.onSuccess( o ); } } @Override - public void onError(String message, int code) { - super.onError(message, code); - if (callback != null) { + public void onError( String message, int code ) { + super.onError( message, code ); + if ( callback != null ) { callback.onFail(); } } - }); + } ); } } - } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index 5307736cd1..a5b5aba610 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -2,10 +2,13 @@ package com.mogo.module.share; import android.content.Context; +import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.module.share.dialog.LaucherShareDialog; +import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; +import com.mogo.service.share.IMogoShareManager; import com.mogo.utils.logger.Logger; /** @@ -13,55 +16,28 @@ import com.mogo.utils.logger.Logger; * @description 分享弹框接口 * @since 2020-01-10 */ -public class ShareControl implements IShareControl { +@Route(path = MogoServicePaths.PATH_SHARE) +public class ShareControl implements IMogoShareManager { - private static volatile ShareControl sInstance; private Context mContext; private LaucherShareDialog mShareDialog; - private IMogoServiceApis mogoServiceApis; - - private ShareControl(Context context) { - mContext = context; - mogoServiceApis = - (IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context); - } - - public IMogoServiceApis getMogoServiceApis(){ - return mogoServiceApis; - } - - public static ShareControl getInstance(Context context) { - if (sInstance == null) { - synchronized (ShareControl.class) { - if (sInstance == null) { - sInstance = new ShareControl(context); - } - } - } - return sInstance; - } - - @Override - public void showDialog() { - - boolean isAdasShow = mogoServiceApis.getStatusManagerApi().isADASShow(); - Logger.d("ShareControl", "showDialog 判断adas是否展示: " + isAdasShow); -// if (isAdasShow) { -// mogoServiceApis.getAdasControllerApi().closeADAS(); -// } - + public void showShareDialog() { mShareDialog = new LaucherShareDialog(mContext); -// mShareDialog.setCanceledOnTouchOutside(true); mShareDialog.show(); } @Override - public void dismissDialog() { + public void dismissShareDialog() { if (mShareDialog != null) { mShareDialog.dismiss(); } } + @Override + public void init(Context context) { + mContext = context; + ServiceApisManager.INSTANCE.init(context); + } } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt index 0d99d1655b..b8695ceb5d 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import com.mogo.module.share.constant.ShareConstants import com.mogo.module.share.constant.ShareConstants.* +import com.mogo.module.share.manager.ServiceApisManager import com.mogo.module.share.manager.UploadHelper import com.mogo.utils.logger.Logger import org.json.JSONObject @@ -24,7 +25,8 @@ class ShareVoiceCmdReceiver : BroadcastReceiver() { val seekHelp = Intent(context, VoiceCmdService::class.java) seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) context.startService(seekHelp) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } VOICE_CMD_GO_TO_SHARE ->{ val ob = JSONObject(intent.getStringExtra("data") ?: "").opt("ob") @@ -32,23 +34,28 @@ class ShareVoiceCmdReceiver : BroadcastReceiver() { when (ob) { "积水"->{ UploadHelper.upload(context, TYPE_STAGNANT_WATER) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } "积冰"->{ UploadHelper.upload(context, TYPE_ROAD_ICY) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } "雾"->{ UploadHelper.upload(context, TYPE_DENSE_FOG) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } "交通事故"->{ UploadHelper.upload(context, TYPE_ACCIDENT) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } "施工"->{ UploadHelper.upload(context, TYPE_ROAD_CONSTRUCTION) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } } } @@ -59,7 +66,8 @@ class ShareVoiceCmdReceiver : BroadcastReceiver() { // 上报实时路况 Logger.d(TAG, "分享框准备触发上报实时路况") UploadHelper.upload(context, TYPE_REAL_TIME_TRAFFIC) - ShareControl.getInstance(context).dismissDialog() + ServiceApisManager.serviceApis.shareManager.dismissShareDialog() +// ShareControl.getInstance(context).dismissDialog() } } } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 056450ac89..519f098dea 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -66,8 +66,8 @@ public class LaucherShareDialog implements View.OnClickListener { public LaucherShareDialog(@NonNull Context context) { this.mContext = context; - mAnalytics = ShareControl.getInstance(context).getMogoServiceApis().getAnalyticsApi(); mApis = (IMogoServiceApis) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(context); + mAnalytics = mApis.getAnalyticsApi(); mStatusManager = mApis.getStatusManagerApi(); } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt index 70050fb729..9a9c1d949f 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt @@ -7,7 +7,6 @@ import com.mogo.commons.data.BaseData import com.mogo.commons.network.SubscribeImpl import com.mogo.commons.voice.AIAssist import com.mogo.commons.voice.IMogoVoiceCmdCallBack -import com.mogo.module.share.ShareControl import com.mogo.module.share.bean.SeekRecord import com.mogo.module.share.bean.SeekRequest import com.mogo.module.share.bean.getJson @@ -20,7 +19,6 @@ import com.mogo.utils.storage.SharedPrefsMgr import com.zhidao.auto.platform.util.DeviceUtil import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers -import java.util.* /** * 故障求助管理类,相关故障求助操作的具体实现类 @@ -73,7 +71,6 @@ object SeekHelpManager { } - /** * 寻求帮助,是开始故障求助的入口 * 由于当前需求仅需要提供这一个方法,所以context的初始化放到了此方法,后面如果有增加,需要把这部分提出去 @@ -88,7 +85,8 @@ object SeekHelpManager { this.context = context } aiAssist = AIAssist.getInstance(context) - isSeekHelp = ShareControl.getInstance(SeekHelpManager.context).mogoServiceApis.statusManagerApi.isSeekHelping + + isSeekHelp = ServiceApisManager.serviceApis.statusManagerApi.isSeekHelping Logger.d(TAG, "开始故障求助上报---${isSeekHelp}") seekListenerList.add(seekHelpListener) when { @@ -157,11 +155,11 @@ object SeekHelpManager { val seekRequest = SeekRequest(DeviceUtil.getSn()) val param = mutableMapOf("data" to seekRequest.getJson()) - ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { + ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { override fun onSuccess(o: BaseData?) { super.onSuccess(o) // 接口请求成功,内部同步v2x状态,通知adas,改变自车图标 - ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", true) + ServiceApisManager.serviceApis.statusManagerApi.setSeekHelping("ShareDialog", true) SharedPrefsMgr.getInstance(context!!).putLong("seek_help_time", System.currentTimeMillis()) isSeekHelp = true aiAssist?.speakTTSVoice("已发布求助信息,将为你通知其他车主") @@ -213,11 +211,11 @@ object SeekHelpManager { fun debugCancelSeek() { val seekRequest = SeekRequest(DeviceUtil.getSn(), 0) val param = mutableMapOf("data" to seekRequest.getJson()) - ShareControl.getInstance(context).mogoServiceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { + ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { override fun onSuccess(o: BaseData?) { super.onSuccess(o) // 接口请求成功,内部同步v2x状态,通知adas,改变自车图标 - ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setSeekHelping("ShareDialog", false) + ServiceApisManager.serviceApis.statusManagerApi.setSeekHelping("ShareDialog", false) isSeekHelp = false } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/ServiceApisManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/ServiceApisManager.kt new file mode 100644 index 0000000000..74c0ab300d --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/ServiceApisManager.kt @@ -0,0 +1,17 @@ +package com.mogo.module.share.manager + +import android.content.Context +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.service.IMogoServiceApis +import com.mogo.service.MogoServicePaths + +/** + * 全局管理IMogoServiceApis + */ +object ServiceApisManager { + lateinit var serviceApis: IMogoServiceApis + + fun init(context: Context) { + serviceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis + } +} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt index 906c291da8..27133e2c38 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt @@ -11,10 +11,10 @@ import com.mogo.utils.logger.Logger */ object UploadHelper { fun upload(context:Context, type: String) { - ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true) + ServiceApisManager.serviceApis.statusManagerApi.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true) Logger.d("UploadHelper", "upload ----> $type") val intent = Intent() - intent.action = "com.zhidao.roadcondition.share" + intent.action = "com.zhidao.share.roadcondition.action" intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND) intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES) intent.putExtra("type", type) diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java index 647a236561..73ba95f5a2 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -21,6 +21,7 @@ import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.module.IMogoSettingManager; import com.mogo.service.network.IMogoNetwork; +import com.mogo.service.share.IMogoShareManager; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; @@ -194,4 +195,10 @@ public interface IMogoServiceApis extends IProvider { * @return */ IMogoMarkerService getMarkerService(); + + /** + * 其他模块调用分享框的显示和隐藏 + * @return + */ + IMogoShareManager getShareManager(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java index 93986037c7..d511aaf799 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java @@ -170,6 +170,7 @@ public class MogoServicePaths { /** * 顶部1/2屏管理 */ + @Deprecated public static final String PATH_EXTENSIONS_TOP_VIEW_MANAGER = "/topview/api"; /** @@ -177,4 +178,10 @@ public class MogoServicePaths { */ @Deprecated public static final String PATH_MARKER_SERVICE = "/mogomarker/api"; + + /** + * 其他模块调用分享框 + */ + @Deprecated + public static final String PATH_SHARE = "/extensions/share"; } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java new file mode 100644 index 0000000000..2ed5841ad8 --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java @@ -0,0 +1,19 @@ +package com.mogo.service.share; + +import com.alibaba.android.arouter.facade.template.IProvider; + +/** + * 分享框管理接口 + * @author tongchenfei + */ +public interface IMogoShareManager extends IProvider { + /** + * 显示分享框 + */ + void showShareDialog(); + + /** + * 隐藏分享框 + */ + void dismissShareDialog(); +} diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java index 534de90589..30f5a47ab1 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java @@ -30,6 +30,7 @@ import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.module.IMogoSettingManager; import com.mogo.service.network.IMogoNetwork; +import com.mogo.service.share.IMogoShareManager; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; @@ -171,7 +172,12 @@ public class MogoServiceApis implements IMogoServiceApis { return getApiInstance( IMogoMarkerService.class, MogoServicePaths.PATH_MARKER_SERVICE ); } - private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) { + @Override + public IMogoShareManager getShareManager() { + return getApiInstance(IMogoShareManager.class,MogoServicePaths.PATH_SHARE); + } + + private static < T extends IProvider > T getApiInstance(Class< T > clazz, String path ) { T inst = SingletonsHolder.get( clazz ); if ( inst == null ) { synchronized ( sLock ) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index aa344adc0b..f44ab838d0 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -67,8 +67,8 @@ public class MogoADASController implements IMogoADASController { Logger.d( TAG, "show adas" ); if ( !isProcessRunning( AbsMogoApplication.getApp(), getPackageUid( AbsMogoApplication.getApp(), "com.zhidiao.autopilot" ) ) ) { - init( AbsMogoApplication.getApp() ); } + init( AbsMogoApplication.getApp() ); if ( mStatusManager.isSearchUIShow() ) { return; diff --git a/upload.sh b/upload.sh index 1b56049a7e..f2d05856f2 100755 --- a/upload.sh +++ b/upload.sh @@ -6,7 +6,7 @@ ./gradlew :services:mogo-service-api:clean :services:mogo-service-api:uploadArchives ./gradlew :foudations:mogo-connection:clean :foudations:mogo-connection:uploadArchives ./gradlew :libraries:map-amap:clean :libraries:map-amap:uploadArchives -./gradlew :libraries:map-autommap:clean :libraries:map-autommap:uploadArchives +./gradlew :libraries:map-autonavi:clean :libraries:map-autonavi:uploadArchives ./gradlew :libraries:mogo-map:clean :libraries:mogo-map:uploadArchives ./gradlew :services:mogo-service:clean :services:mogo-service:uploadArchives ./gradlew :modules:mogo-module-common:clean :modules:mogo-module-common:uploadArchives @@ -18,8 +18,9 @@ ./gradlew :modules:mogo-module-extensions:clean :modules:mogo-module-extensions:uploadArchives ./gradlew :modules:mogo-module-gps-simulator:clean :modules:mogo-module-gps-simulator:uploadArchives ./gradlew :modules:mogo-module-search:clean :modules:mogo-module-search:uploadArchives -./gradlew :modules:mogo-module-main:clean :modules:mogo-module-main:uploadArchives +./gradlew :modules:mogo-module-media:clean :modules:mogo-module-media:uploadArchives ./gradlew :modules:mogo-module-back:clean :modules:mogo-module-back:uploadArchives +./gradlew :modules:mogo-module-main:clean :modules:mogo-module-main:uploadArchives ./gradlew :modules:mogo-module-guide:clean :modules:mogo-module-guide:uploadArchives ./gradlew :modules:mogo-module-gps-simulator-debug:clean :modules:mogo-module-gps-simulator-debug:uploadArchives ./gradlew :modules:mogo-module-gps-simulator-noop:clean :modules:mogo-module-gps-simulator-noop:uploadArchives