diff --git a/.idea/misc.xml b/.idea/misc.xml index 21e99e2dc0..cd77a1f062 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 14972303d6..3a95ccb761 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -2,6 +2,7 @@ package com.mogo.launcher; import android.content.Context; import android.content.Intent; +import android.text.TextUtils; import android.util.Log; import com.alibaba.android.arouter.launcher.ARouter; @@ -9,6 +10,7 @@ import com.auto.zhidao.logsdk.CrashSystem; import com.bytedance.boost_multidex.BoostMultiDex; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.network.Utils; import com.mogo.commons.storage.SpStorage; import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.carchatting.card.CallChatConstant; @@ -97,26 +99,58 @@ public class MogoApplication extends AbsMogoApplication { @Override protected void init() { super.init(); + prepareBaseService(2_000L); + } + + /** + * 基础服务:passport、location、socket + */ + private void prepareBaseService(long delay) { UiThreadHandler.postDelayed( () -> { final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class ); - apis.getSocketManagerApi( getApplicationContext() ).init( getApplicationContext(), DebugConfig.getSocketAppId() ); - apis.getPassportManagerApi().requestTicket( new IMogoTicketCallback() { - @Override - public void onSuccess( String ticket ) { - Logger.d( TAG, "ticket = %s", ticket ); - SpStorage.setTicket( ticket ); - } + // 第三方平台的sn是服务端生成的,所以必须在返回后才能开启 + if ( TextUtils.isEmpty( Utils.getSn() ) ) { + preparePassportEnvironment( apis, () -> { + prepareSocketAndLocationServices( apis ); + } ); + } else { + preparePassportEnvironment( apis, null ); + prepareSocketAndLocationServices( apis ); + } + }, delay ); + } - @Override - public void onError( int code, String msg ) { - Logger.w( TAG, "code = %s, msg = %s", code, msg ); + private void preparePassportEnvironment( IMogoServiceApis apis, Runnable after ) { + apis.getPassportManagerApi().requestTicket( new IMogoTicketCallback() { + @Override + public void onSuccess( String ticket ) { + Logger.d( TAG, "ticket = %s", ticket ); + SpStorage.setTicket( ticket ); + if ( after != null ) { + after.run(); } - } ); - apis.getLocationInfoApi().start(); - apis.getMapServiceApi().getSingletonLocationClient( getApplicationContext() ).addLocationListener( location -> { - apis.getLocationInfoApi().provideLocation( location ); - } ); - }, 2_000L ); + } + + @Override + public void onError( int code, String msg ) { + Logger.w( TAG, "code = %s, msg = %s", code, msg ); + if ( !TextUtils.isEmpty( Utils.getSn() ) ) { + if ( after != null ) { + after.run(); + } + } else { + prepareBaseService(1_000L); + } + } + } ); + } + + private void prepareSocketAndLocationServices( IMogoServiceApis apis ) { + apis.getSocketManagerApi( getApplicationContext() ).init( getApplicationContext(), DebugConfig.getSocketAppId() ); + apis.getLocationInfoApi().start(); + apis.getMapServiceApi().getSingletonLocationClient( getApplicationContext() ).addLocationListener( location -> { + apis.getLocationInfoApi().provideLocation( location ); + } ); } @Override diff --git a/foudations/mogo-base-services-sdk/build.gradle b/foudations/mogo-base-services-sdk/build.gradle index df02926d16..8b6cd89281 100644 --- a/foudations/mogo-base-services-sdk/build.gradle +++ b/foudations/mogo-base-services-sdk/build.gradle @@ -30,9 +30,9 @@ dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation rootProject.ext.dependencies.arouter // 上报位置 - implementation 'com.zhidao.locupload:loc-upload-sdk:1.0.9' + implementation 'com.zhidao.locupload:loc-upload-sdk:1.1.2' // 长链 - implementation 'com.zhidao.socket:built-in-socket:1.0.13' + implementation 'com.zhidao.socket:built-in-socket:1.0.15' // passport implementation 'com.zhidao.tcloginsdk:tclogin:1.0.9' diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/BaseServicesConstants.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/BaseServicesConstants.java new file mode 100644 index 0000000000..5d4c38a17a --- /dev/null +++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/BaseServicesConstants.java @@ -0,0 +1,16 @@ +package com.mogo.base.services; + +public +/** + * @author congtaowang + * @since 2020/7/23 + * + * 描述 + */ +interface BaseServicesConstants { + + /** + * 建立长链的通道ID + */ + String SOCKET_CHANNEL_ID = "dataCrawler"; +} diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java index 35fcc26723..8ecd0cb034 100644 --- a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java +++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java @@ -4,7 +4,6 @@ import android.content.Context; import androidx.annotation.Keep; -import com.elegant.spi.annotations.Service; import com.mogo.commons.debug.DebugConfig; import com.mogo.map.location.MogoLocation; import com.mogo.service.locationinfo.IMogoLocationInfoService; @@ -12,8 +11,6 @@ import com.mogo.utils.logger.Logger; import com.zhidao.locupload.LocEnvironment; import com.zhidao.locupload.LocUploadConfig; import com.zhidao.locupload.LocUploadManager; -import com.zhidao.locupload.Platform; -import com.zhidao.locupload.location.LocationServiceProvider; public /** @@ -52,7 +49,7 @@ class MogoLocationInfoServices implements IMogoLocationInfoService { @Override public void provideLocation( MogoLocation location ) { mLocation = location; - Logger.d(TAG, "sdk - provideLocation"); + Logger.d( TAG, "sdk - provideLocation" ); } public MogoLocation getLocation() { @@ -62,13 +59,13 @@ class MogoLocationInfoServices implements IMogoLocationInfoService { @Override public void start() { LocUploadManager.getInstance().startUpload(); - Logger.d(TAG, "sdk - start"); + Logger.d( TAG, "sdk - start" ); } @Override public void stop() { LocUploadManager.getInstance().stopUpload(); - Logger.d(TAG, "sdk - stop"); + Logger.d( TAG, "sdk - stop" ); } @Override @@ -76,23 +73,8 @@ class MogoLocationInfoServices implements IMogoLocationInfoService { LocUploadConfig.instance(). setAppId( DebugConfig.getSocketAppId() ). setContext( context.getApplicationContext() ). - setLocEnvironment( getEnvironment() ). setLoggable( DebugConfig.isDebug() ). - setPlatform( Platform.car ). setLocInterval( 2000L ); - Logger.d(TAG, "sdk - init"); - } - - private LocEnvironment getEnvironment() { - switch ( DebugConfig.getNetMode() ) { - case 1: - return LocEnvironment.dev; - case 2: - case 4: - return LocEnvironment.qa; - case 3: - default: - return LocEnvironment.release; - } + Logger.d( TAG, "sdk - init" ); } } diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java index cd588b0434..f9520decf1 100644 --- a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java +++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java @@ -7,7 +7,9 @@ import androidx.annotation.NonNull; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; +import com.mogo.base.services.BaseServicesConstants; import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.network.Utils; import com.mogo.service.connection.IMogoMsgAckListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; @@ -86,8 +88,9 @@ class SocketManager implements IMogoSocketManager, Callback { .setAppContext( context.getApplicationContext() ) .setEnvironment( getEnvironment() ) .setClient( Platform.getClient( Platform.car ) ) - .setAppId( appId ) + .setChannelId( BaseServicesConstants.SOCKET_CHANNEL_ID ) .setOpenAnalytics( true ) + .setSn( Utils.getSn() ) .setDebug( DebugConfig.isDebug() ); SocketMessageDispatcher.getInstance().start( context ); } diff --git a/gradle.properties b/gradle.properties index 90669c17d7..5c9f866ed9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -60,7 +60,7 @@ MOGO_MODULE_V2X_VERSION=1.2.1.20 ## 工程外部模块 # 探路 -MOGO_MODULE_TANLU_VERSION=1.3.1.2 +MOGO_MODULE_TANLU_VERSION=1.3.1.5 # 车聊聊 CARCHATTING_VERSION=1.4.6 # 车聊聊接口 @@ -78,7 +78,7 @@ MOGO_MODULE_PUSH_NOOP_VERSION=1.1.5.6 # 广告资源位 MOGO_MODULE_AD_CARD_VERSION=1.0.1 # 探路上报和分享模块 -TANLULIB_VERSION=1.3.1.2 +TANLULIB_VERSION=1.3.1.5 MOGO_MODULE_EVENT_PANEL_VERSION = 1.0.0-SNAPSHOT MOGO_MODULE_EVENT_PANEL_NOOP_VERSION = 1.0.0-SNAPSHOT #左侧面板模块 diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt index 055f1ee6ed..5e2ad53c7d 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt @@ -131,6 +131,7 @@ open class IMogoAuthorizeController { } } onError { + //todo Logger.d(TAG, it.message ?: "checkIfNeedAuthorize onError, message is null") setAuthorizeStatus(agreementType, true) } diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt index 7fe63c7fdb..6c91ab12fc 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt @@ -18,7 +18,7 @@ open abstract class MogoAuthorizeManagerImpl : IMogoAuthorizeInvoke { override fun needAuthorize(tag: String): Boolean { Logger.d(TAG, "===== needAuthorize update agreement in background") -// baseController.checkIfNeedAuthorize(tag.toAuthorizeType()) + baseController.checkIfNeedAuthorize(tag.toAuthorizeType()) return needAuthorization(tag.toAuthorizeType()) } diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt index 13c2da0e65..cec3e22d62 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt @@ -21,7 +21,7 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog } } - private var mContext:Context? = null + private var mContext: Context? = null private var authorizeDialog: AuthorizeDialog? = null @@ -41,7 +41,7 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog fun invokeAuthorizeForShow(context: Context) { mContext = context -// pushLayoutToMainWindow(AUTHORIZE_TYPE_LAUNCHER_MAIN) + pushLayoutToMainWindow(AUTHORIZE_TYPE_LAUNCHER_MAIN) } fun showAuthorizeView(tag: String, forbiddenVoice: (() -> Unit), onError: ((String) -> Unit)) { @@ -64,7 +64,7 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog Logger.d(TAG, "ready to forbidden voice") forbiddenVoice.invoke() Logger.d(TAG, "ready to push fragment") -// pushLayoutToMainWindow(tag) + pushLayoutToMainWindow(tag) } fun hideAuthorizeView() { @@ -73,7 +73,10 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog private fun pushLayoutToMainWindow(tag: String) { if (authorizeDialog == null) { - authorizeDialog = AuthorizeDialog(tag,mContext!!) + authorizeDialog = AuthorizeDialog(tag, mContext!!) + authorizeDialog!!.setOnDismissListener { + authorizeDialog = null + } } if (authorizeDialog!!.isShowing) { Logger.d(TAG, "User is operation authorization, do not repeat invoke") diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt index 4dc7287746..1f482de0bb 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt @@ -7,12 +7,14 @@ import android.widget.Button import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.debug.DebugConfig import com.mogo.module.authorize.R import com.mogo.module.authorize.util.AnalyticsUtil import com.mogo.module.authorize.voice.IVoiceAuthorizeIntentListener import com.mogo.module.authorize.voice.IVoiceCommandListener import com.mogo.module.authorize.voice.VoiceUtil import com.mogo.module.common.dialog.BaseFloatDialog +import com.mogo.utils.TipToast import com.mogo.utils.logger.Logger import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -21,6 +23,10 @@ import kotlinx.coroutines.withContext class AuthorizeDialog : BaseFloatDialog, View.OnClickListener, IVoiceCommandListener, IVoiceAuthorizeIntentListener { + companion object { + const val TAG = "AuthorizeDialog" + } + private var mContext: Context? = null private var invokeTag: String? = null @@ -49,14 +55,34 @@ class AuthorizeDialog : BaseFloatDialog, View.OnClickListener, IVoiceCommandList private fun initView() { setContentView(R.layout.module_authorize_fragment) + setWrapContent() initViews() } + private fun setWrapContent() { + val mWindow = window + if(DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_BYD){ + if (mWindow != null) { + val lp = mWindow.attributes + lp.width = 1280 + lp.height = 600 + mWindow.attributes = lp + } + }else{ + if (mWindow != null) { + val lp = mWindow.attributes + lp.width = 1920 + lp.height = 1000 + mWindow.attributes = lp + } + } + } + fun initViews() { - Logger.d(AuthorizeLayout.TAG, "initView ") + Logger.d(TAG, "initView ") AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_SHOW) init() - Logger.d(AuthorizeLayout.TAG, "invokeTag :$invokeTag") + Logger.d(TAG, "invokeTag :$invokeTag") authorizeController = AuthorizeController(invokeTag!!) invokeAuthorizationContent() VoiceUtil.registerAll(this, this) @@ -117,8 +143,9 @@ class AuthorizeDialog : BaseFloatDialog, View.OnClickListener, IVoiceCommandList } private fun voiceAuthorizeError() { + TipToast.shortTip("授权失败,请稍后重试") VoiceUtil.speak(AbsMogoApplication.getApp().applicationContext.getString(R.string.module_authorize_failed), AbsMogoApplication.getApp().applicationContext, this) - Logger.d(AuthorizeLayout.TAG, "onDestroy") + Logger.d(TAG, "onDestroy") VoiceUtil.unregisterAll(AbsMogoApplication.getApp().applicationContext, this) } @@ -136,7 +163,7 @@ class AuthorizeDialog : BaseFloatDialog, View.OnClickListener, IVoiceCommandList invokeAuthorizationContent() } R.id.clAuthorizeTopParent -> { - Logger.i(AuthorizeLayout.TAG, "dismiss authorizeView") + Logger.i(TAG, "dismiss authorizeView") authorizeController?.onDestroy() } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java index cef726c5b2..11aa6dee90 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java @@ -7,6 +7,7 @@ import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; +import com.mogo.commons.network.Utils; import com.mogo.module.extensions.net.UserInfoNetApiServices; import com.mogo.module.extensions.userinfo.UserInfo; import com.mogo.module.extensions.userinfo.UserInfoConstant; @@ -23,7 +24,6 @@ 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; @@ -113,7 +113,7 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements private UserInfo userInfo; public void requestUserInfo() { Map params = new ArrayMap<>(); - params.put("sn", DeviceUtil.getSn()); + params.put("sn", Utils.getSn()); params.put("source", "2"); String sign = createSign(params, "JGqZw9"); params.put("sig", sign); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index e638517410..c4ca90cd05 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -8,6 +8,7 @@ import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; +import com.mogo.commons.network.Utils; import com.mogo.module.extensions.R; import com.mogo.module.extensions.net.UserInfoNetApiServices; import com.mogo.module.extensions.userinfo.UserInfo; @@ -25,7 +26,6 @@ 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; @@ -113,7 +113,7 @@ public class EntrancePresenter extends Presenter implements Weathe private UserInfo userInfo; public void requestUserInfo() { Map params = new ArrayMap<>(); - params.put("sn", DeviceUtil.getSn()); + params.put("sn", Utils.getSn()); params.put("source", "2"); String sign = createSign(params, "JGqZw9"); params.put("sig", sign); diff --git a/modules/mogo-module-gps-simulator-debug/src/main/java/com/mogo/module/gps/simulator/Utils.java b/modules/mogo-module-gps-simulator-debug/src/main/java/com/mogo/module/gps/simulator/Utils.java index 4978caa21e..660015b14a 100644 --- a/modules/mogo-module-gps-simulator-debug/src/main/java/com/mogo/module/gps/simulator/Utils.java +++ b/modules/mogo-module-gps-simulator-debug/src/main/java/com/mogo/module/gps/simulator/Utils.java @@ -1,5 +1,9 @@ package com.mogo.module.gps.simulator; +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.utils.storage.SharedPrefsMgr; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -15,6 +19,9 @@ class Utils { public static final String PROPERTIES = "android.os.SystemProperties"; public static String getSn() { + if ( DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE ) { + return SharedPrefsMgr.getInstance( AbsMogoApplication.getApp() ).getString( "allocated_sn" ); + } return getSystemProperties( GSM_SERIAL ); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 56f3d8aa44..5384a5c664 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -115,7 +115,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(); } mServiceApis.getShareManager().resetContext(this); - // mServiceApis.getAuthManagerApi().resetContext(this); + mServiceApis.getAuthManagerApi().resetContext(this); mMogoStatusManager = mServiceApis.getStatusManagerApi(); mMogoStatusManager.setMainPageLaunchedStatus( TAG, true ); AutopilotServiceManage.getInstance().init( getContext() ); diff --git a/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png deleted file mode 100644 index de1e81e0d9..0000000000 Binary files a/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png and /dev/null differ diff --git a/modules/mogo-module-main/src/main/res/drawable-mdpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-mdpi/module_apps_bg_card.png deleted file mode 100644 index de1e81e0d9..0000000000 Binary files a/modules/mogo-module-main/src/main/res/drawable-mdpi/module_apps_bg_card.png and /dev/null differ diff --git a/modules/mogo-module-main/src/main/res/drawable-xhdpi-1920x1000/module_main_launcher_bg.png b/modules/mogo-module-main/src/main/res/drawable-xhdpi-1920x1000/module_main_launcher_bg.png new file mode 100644 index 0000000000..e322c3ccb2 Binary files /dev/null and b/modules/mogo-module-main/src/main/res/drawable-xhdpi-1920x1000/module_main_launcher_bg.png differ diff --git a/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png deleted file mode 100644 index a82b29541a..0000000000 Binary files a/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png and /dev/null differ diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index 2994dcbc77..84cb300af5 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -1,6 +1,7 @@ package com.mogo.module.share; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -111,6 +112,7 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo @Override public void dismissShareDialog() { if (mShareDialog != null) { + Logger.d(TAG,"dismissShareDialog"); mShareDialog.dismiss(); } } @@ -122,7 +124,14 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo private void realShowDialog() { if (mShareDialog == null) { + Logger.d(TAG,"realShowDialog context : " + mContext); mShareDialog = new LaucherShareDialog(mContext); + mShareDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + mShareDialog = null; + } + }); } mShareDialog.show(); } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt index 9a9c1d949f..83282b97f4 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt @@ -5,6 +5,7 @@ import android.content.Context import android.os.SystemClock import com.mogo.commons.data.BaseData import com.mogo.commons.network.SubscribeImpl +import com.mogo.commons.network.Utils import com.mogo.commons.voice.AIAssist import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.share.bean.SeekRecord @@ -16,7 +17,6 @@ import com.mogo.utils.TipToast import com.mogo.utils.logger.Logger import com.mogo.utils.network.RequestOptions import com.mogo.utils.storage.SharedPrefsMgr -import com.zhidao.auto.platform.util.DeviceUtil import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers @@ -152,7 +152,7 @@ object SeekHelpManager { private fun realSeekHelp() { Logger.d(TAG, "realSeekHelp") // 请求故障求助接口 - val seekRequest = SeekRequest(DeviceUtil.getSn()) + val seekRequest = SeekRequest(Utils.getSn()) val param = mutableMapOf("data" to seekRequest.getJson()) ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { @@ -209,7 +209,7 @@ object SeekHelpManager { } fun debugCancelSeek() { - val seekRequest = SeekRequest(DeviceUtil.getSn(), 0) + val seekRequest = SeekRequest(Utils.getSn(), 0) val param = mutableMapOf("data" to seekRequest.getJson()) ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { override fun onSuccess(o: BaseData?) { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpDialog.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpDialog.java index d1ae3f2d22..22ddf0dfd5 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpDialog.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpDialog.java @@ -2,24 +2,22 @@ package com.mogo.module.v2x.scenario.scene.seek; import android.content.Context; import android.content.Intent; -import android.graphics.PixelFormat; -import android.os.Build; import android.util.AttributeSet; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; -import android.view.WindowManager; import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.commons.voice.AIAssist; +import com.mogo.module.common.wm.WindowManagerView; import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.module.v2x.voice.V2XVoiceManager; -import com.mogo.utils.WindowUtils; +import com.mogo.service.entrance.ButtonIndex; import com.mogo.utils.logger.Logger; /** @@ -81,35 +79,26 @@ public class V2XSeekHelpDialog extends ConstraintLayout implements View.OnClickL void onClickRight(); } - boolean isShown; - WindowManager windowManager; + private boolean isShown; + private WindowManagerView windowManager; public void show() { - Logger.d(TAG, "使用windowManager实现"); - if (!isShown) { - windowManager = (WindowManager) mContext.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; - } else { - layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + try { + Logger.d(TAG, "使用windowManager实现"); + if (!isShown) { + if (windowManager == null) { + windowManager = new WindowManagerView.Builder( + V2XServiceManager.getMogoEntranceButtonController().getButton(ButtonIndex.BUTTON2).getContext() + ).contentView(this).build(); + } + windowManager.show(); + isShown = true; + AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("确定要解除求助状态吗"); + unRegisterVoiceCmd(); + registerVoiceCmd(); } - layoutParams.format = PixelFormat.TRANSLUCENT; - layoutParams.gravity = Gravity.START | Gravity.TOP; -// mWindowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - // FLAG_LAYOUT_IN_SCREEN:将window放置在整个屏幕之内,无视其他的装饰(比如状态栏); FLAG_NOT_TOUCH_MODAL:不阻塞事件传递到后面的窗口 - layoutParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - layoutParams.width = WindowUtils.getScreenWidth(mContext); - layoutParams.height = WindowUtils.getScreenHeight(mContext); - //后面变暗区域透明... - layoutParams.dimAmount = 0; - layoutParams.x = 0; - layoutParams.y = 0; - windowManager.addView(this, layoutParams); - isShown = true; - AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("确定要解除求助状态吗"); - unRegisterVoiceCmd(); - registerVoiceCmd(); + } catch (Exception e) { + e.printStackTrace(); } } @@ -125,19 +114,16 @@ public class V2XSeekHelpDialog extends ConstraintLayout implements View.OnClickL public void dismiss() { if (isShown && windowManager != null) { - windowManager.removeViewImmediate(this); - windowManager = null; + windowManager.dismiss(); isShown = false; } } - //放弃求助 private void handleLeft() { if (mListener != null) { mListener.onClickLeft(); } - unRegisterVoiceCmd(); } @@ -147,7 +133,6 @@ public class V2XSeekHelpDialog extends ConstraintLayout implements View.OnClickL mListener.onClickRight(); } unRegisterVoiceCmd(); - } private void registerVoiceCmd() { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java index d5d4801e0e..cf25fe1b0d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java @@ -25,8 +25,10 @@ import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.module.v2x.voice.V2XVoiceManager; import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.utils.GsonUtil; import com.tencent.rtmp.ITXLivePlayListener; import com.tencent.rtmp.TXLiveConstants; +import com.tencent.rtmp.TXLivePlayConfig; import com.tencent.rtmp.TXLivePlayer; import com.tencent.rtmp.ui.TXCloudVideoView; @@ -53,6 +55,7 @@ public class V2XLiveGSYVideoView extends RoundLayout { private V2XVoiceCallbackListener v2XVoiceCallbackRefreshListener = new V2XVoiceCallbackListener() { @Override public void onCallback(String command, Intent intent) { + //startHeartLive(mCarLiveInfo); mLoading.setVisibility(VISIBLE); mClLoadError.setVisibility(GONE); if (mCarLiveInfo != null) { @@ -84,6 +87,12 @@ public class V2XLiveGSYVideoView extends RoundLayout { //关键 player 对象与界面 view mLivePlayer.setPlayerView(mTxcVideoView); mLivePlayer.setMute(true); + + TXLivePlayConfig txLivePlayConfig = new TXLivePlayConfig(); + // 增加重试次数 + txLivePlayConfig.setConnectRetryCount(30); + mLivePlayer.setConfig(txLivePlayConfig); + mLivePlayer.enableHardwareDecode(true); mLoading = findViewById(R.id.loading); @@ -130,6 +139,7 @@ public class V2XLiveGSYVideoView extends RoundLayout { .livePush(new V2XRefreshCallback() { @Override public void onSuccess(V2XLivePushVoRes result) { + Logger.e(MODULE_NAME, "从服务端获取最新直播信息:" + GsonUtil.jsonFromObject(result)); mClLoadError.setVisibility(GONE); mClLoadError.setVisibility(GONE); try { @@ -159,45 +169,58 @@ public class V2XLiveGSYVideoView extends RoundLayout { * 播放直播流,且开始心跳 */ private void playLiveVideo(MarkerCarInfo.CarLiveInfo carLiveInfo) { - startHeartLive(carLiveInfo); - if (mLivePlayer != null) { - mLivePlayer.startPlay(carLiveInfo.getVideoUrl(), TXLivePlayer.PLAY_TYPE_LIVE_RTMP); - mLivePlayer.setPlayListener(new ITXLivePlayListener() { - @Override - public void onPlayEvent(int event, Bundle bundle) { - Logger.w(MODULE_NAME, "播放器:onPlayEvent==" + event + "===bundle===" + bundle); - if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) { - mLoading.setVisibility(VISIBLE); - mClLoadError.setVisibility(GONE); - } else if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) { - mLoading.setVisibility(GONE); - mClLoadError.setVisibility(GONE); - } else if (event < 0) { - AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("直播获取识别,可以对我说重试", null); - stopLive(mCarLiveInfo); - mLoading.setVisibility(GONE); - mClLoadError.setVisibility(VISIBLE); - // 注册语音交互 - V2XVoiceManager.INSTANCE - .registerWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE, - v2XVoiceCallbackRefreshListener) - .registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP, - v2XVoiceCallbackRefreshListener); + try { + if (mLivePlayer != null) { + mLivePlayer.startPlay(carLiveInfo.getVideoUrl(), TXLivePlayer.PLAY_TYPE_LIVE_RTMP); + mLivePlayer.setPlayListener(new ITXLivePlayListener() { + @Override + public void onPlayEvent(int event, Bundle bundle) { + Logger.w(MODULE_NAME, + "直播信息= " + GsonUtil.jsonFromObject(carLiveInfo) + + "\n播放器:onPlayEvent==" + event + + "\nbundle===" + bundle); + if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) { + mLoading.setVisibility(VISIBLE); + mClLoadError.setVisibility(GONE); + } else if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) { + mLoading.setVisibility(GONE); + mClLoadError.setVisibility(GONE); + } else if (event < 0) { + AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("直播获取失败,可以对我说重试", null); + stopLive(mCarLiveInfo); + mLoading.setVisibility(GONE); + mClLoadError.setVisibility(VISIBLE); + // 注册语音交互 + V2XVoiceManager.INSTANCE + .registerWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE, + v2XVoiceCallbackRefreshListener) + .registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP, + v2XVoiceCallbackRefreshListener); + } } - } - @Override - public void onNetStatus(Bundle bundle) { - //Logger.w(MODULE_NAME, "播放器:onNetStatus===bundle===" + bundle); - } - }); + @Override + public void onNetStatus(Bundle bundle) { + Logger.w(MODULE_NAME, "播放器:onNetStatus===bundle===" + bundle); + } + }); + } + } catch (Exception e) { + e.printStackTrace(); + mLoading.setVisibility(GONE); + mClLoadError.setVisibility(VISIBLE); + Logger.e(MODULE_NAME, "直播发生异常:carLiveInfo= " + GsonUtil.jsonFromObject(carLiveInfo)); } } - // 刷新直播心跳 + /** + * 刷新直播心跳 + * + * @param carLiveInfo + */ private void startHeartLive(MarkerCarInfo.CarLiveInfo carLiveInfo) { try { - if (!TextUtils.isEmpty(carLiveInfo.getVideoSn()) + if (carLiveInfo != null && !TextUtils.isEmpty(carLiveInfo.getVideoSn()) && !TextUtils.isEmpty(carLiveInfo.getVideoChannel())) { V2XServiceManager .getV2XRefreshModel() diff --git a/modules/mogo-module-v2x/src/main/res/layout/dialog_v2x_common.xml b/modules/mogo-module-v2x/src/main/res/layout/dialog_v2x_common.xml index cf29b7fb6b..d82d598dd3 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/dialog_v2x_common.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/dialog_v2x_common.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_75" android:gravity="center" - android:textColor="@color/white" + android:textColor="#FFF" android:textSize="@dimen/dp_40" app:layout_constraintEnd_toEndOf="@id/ivDialogBg" app:layout_constraintStart_toStartOf="@id/ivDialogBg" @@ -35,7 +35,7 @@ android:layout_height="@dimen/dp_130" android:background="@drawable/v2x_dialog_left_bg" android:gravity="center" - android:textColor="@color/white" + android:textColor="#FFF" android:textSize="@dimen/dp_40" app:layout_constraintBottom_toBottomOf="@id/ivDialogBg" app:layout_constraintEnd_toStartOf="@id/tvDialogRight" @@ -48,7 +48,7 @@ android:layout_height="@dimen/dp_130" android:background="@drawable/v2x_dialog_right_bg" android:gravity="center" - android:textColor="@color/white" + android:textColor="#FFF" android:textSize="@dimen/dp_40" app:layout_constraintBottom_toBottomOf="@id/ivDialogBg" app:layout_constraintEnd_toEndOf="@id/ivDialogBg" diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java index 0aa36308bd..def9af01f0 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java @@ -16,7 +16,7 @@ public interface IMogoSocketManager extends IProvider { * 初始化,各模块不用关心 * * @param context 上下文 - * @param appId 一般为包名 + * @param appId 一般为包名,不参与通道的建立,一般用于发消息 */ void init( Context context, String appId );