This commit is contained in:
unknown
2020-06-09 10:12:38 +08:00
80 changed files with 1866 additions and 570 deletions

View File

@@ -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')

107
app/libs/t.txt Normal file
View File

@@ -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));

View File

@@ -20,9 +20,9 @@
<!-- android:enabled="true"-->
<!-- android:exported="true" />-->
<meta-data
tools:replace="android:value"
android:name="com.amap.api.v2.apikey"
android:value="40e2e7e773c7562b1f2b13699a93992c" />
android:value="40e2e7e773c7562b1f2b13699a93992c"
tools:replace="android:value" />
<!-- 高德地图 -->
</application>

View File

@@ -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

View File

@@ -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",

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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 ) {

View File

@@ -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
## 工程外部模块

View File

@@ -42,4 +42,6 @@ dependencies {
implementation project(':libraries:map-amap')
}
}
}
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()

View File

@@ -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 );

View File

@@ -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 ){}
}

View File

@@ -29,6 +29,15 @@
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<intent-filter>
<data
android:host="launcher"
android:path="/main/share"
android:scheme="mogo" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -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

View File

@@ -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

View File

@@ -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();

View File

@@ -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

View File

@@ -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 );

View File

@@ -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 ),

View File

@@ -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{" +

View File

@@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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
* <p>
@@ -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);
}
}

View File

@@ -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<String, String> 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<UserInfoResponse>() {
@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<String, String> map, String salt) {
try {
StringBuilder queryString = new StringBuilder();
for (Map.Entry<String, String> 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 "";
}
}
}

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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 );
}
}

View File

@@ -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<EntranceView> {
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<EntranceView> {
mogoIntentManager = apis.getIntentManagerApi();
mIMogoAuthorizeModuleManager = authorizeModuleManager;
mStatusManager = apis.getStatusManagerApi();
mNetWork = apis.getNetworkApi();
registerUnWake();
registerAwakeVoice();
@@ -100,9 +96,6 @@ public class EntrancePresenter extends Presenter<EntranceView> {
@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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
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<EntranceView> {
// 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<EntranceView> {
*/
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<EntranceView> {
AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ExtensionsModuleConst.UPLOAD_TRAFFIC_CHECK);
AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ExtensionsModuleConst.UPLOAD_ROAD_CLOSURE);
}
public void requestUserInfo() {
Map<String, String> 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<UserInfoResponse>() {
@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<String, String> map, String salt) {
try {
StringBuilder queryString = new StringBuilder();
for (Map.Entry<String, String> 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 "";
}
}
}

View File

@@ -10,7 +10,4 @@ import com.mogo.module.extensions.userinfo.UserInfo;
* 描述
*/
public interface EntranceView extends IView {
void refreshUserInfo(UserInfo userInfo);
}

View File

@@ -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 + '\'' +
'}';
}
}

View File

@@ -0,0 +1,29 @@
package com.mogo.module.extensions.utils;
import android.content.Context;
import android.content.Intent;
/**
* @author congtaowang
* @since 2020-02-03
* <p>
* 描述
*/
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 );
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -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">
<ImageView
@@ -66,5 +67,14 @@
tools:text="···" />
</FrameLayout>
<ImageView
android:id="@+id/ivUserHeadImg"
android:layout_width="@dimen/module_ext_height"
android:layout_height="@dimen/module_ext_height"
android:layout_marginEnd="@dimen/dp_16"
android:src="@drawable/model_ext_default_user_head"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -73,6 +73,9 @@
<dimen name="module_ext_msg_counter_height">30px</dimen>
<dimen name="module_ext_msg_counter_textSize">20px</dimen>
<dimen name="module_ext_user_img_width">103px</dimen>
<dimen name="module_ext_user_img_height">103px</dimen>
<!-- module_map_layout_navi_info_panel.xml-->
<dimen name="module_ext_navi_info_panel_width">1058px</dimen>
<dimen name="module_ext_navi_info_panel_height">210px</dimen>

View File

@@ -76,6 +76,9 @@
<dimen name="module_ext_msg_counter_height">15px</dimen>
<dimen name="module_ext_msg_counter_textSize">11.73px</dimen>
<dimen name="module_ext_user_img_width">56px</dimen>
<dimen name="module_ext_user_img_height">56px</dimen>
<!-- module_map_layout_navi_info_panel.xml-->
<dimen name="module_ext_navi_info_panel_width">544px</dimen>
<dimen name="module_ext_navi_info_panel_height">117px</dimen>

View File

@@ -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')
}
}

View File

@@ -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 );

View File

@@ -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;
}

View File

@@ -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

View File

@@ -8,6 +8,7 @@
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
<uses-permission android:name="android.permission.TYPE_APPLICATION_OVERLAY" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="com.tencent.wecarflow.PLAY_CONTROL" />
<application>
<receiver android:name=".receiver.MediaSpeechReceiver">

View File

@@ -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

View File

@@ -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();

View File

@@ -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();
}
}
}

View File

@@ -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;
}

View File

@@ -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 +
'}';
}
}

View File

@@ -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<V extends IView> extends Presenter<V> {
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();
}

View File

@@ -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<IMusicView> {
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<Boolean> isPlayingCallback = new QueryCallback<Boolean>() {
@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<MediaInfo> currentCallback = new QueryCallback<MediaInfo>() {
@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();
}
}

View File

@@ -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){

View File

@@ -0,0 +1,29 @@
package com.mogo.module.media.utils;
import android.content.Context;
import android.content.Intent;
/**
* @author congtaowang
* @since 2020-02-03
* <p>
* 描述
*/
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 );
}
}

View File

@@ -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;//刘德华的恭喜发财
}
/**

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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() );
}
/**
* 注册桌面免唤醒指令
*/

View File

@@ -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";
/**
* 查询在线的人
* <p>
* "data"="{"op":"查询","status":"在线","obj":"车主"}"
*/
public static final String COMMAND_ZHIDAO_NEARBY_USER_ONLINE = "com.zhidao.nearby.user.online";
/**
* 查询指定位置的好友
* <p>
* "data"="{"op":"看看","obj":"好友","location":"中关村"}"
*/
public static final String COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION = "com.zhidao.nearby.friend.bylocation";
}

View File

@@ -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
* <p>
* 描述
*/
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() );
}
}

View File

@@ -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
* <p>
* 描述
*/
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 );
}
}

View File

@@ -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 );
}
}
}

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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
* <p>
* 描述
*/
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;
}
}

View File

@@ -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 );
}
}
}

View File

@@ -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 );
}
} );
}

View File

@@ -10,5 +10,5 @@ public interface RefreshCallback <T> {
void onSuccess(T o);
void onFail();
default void onFail(){}
}

View File

@@ -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<String, Object> 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<BaseData>(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<String, Object> 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<BaseData>(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<String, Object> 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<MarkerResponse>(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();
}
}
});
} );
}
}
}

View File

@@ -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);
}
}

View File

@@ -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()
}
}
}

View File

@@ -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();
}

View File

@@ -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<BaseData>(RequestOptions.create(context)) {
ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl<BaseData>(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<BaseData>(RequestOptions.create(context)) {
ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl<BaseData>(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
}

View File

@@ -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
}
}

View File

@@ -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)

View File

@@ -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();
}

View File

@@ -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";
}

View File

@@ -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();
}

View File

@@ -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 ) {

View File

@@ -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;

View File

@@ -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