This commit is contained in:
unknown
2020-07-23 19:29:41 +08:00
25 changed files with 223 additions and 133 deletions

2
.idea/misc.xml generated
View File

@@ -4,7 +4,7 @@
<asm skipDebug="false" skipFrames="false" skipCode="false" expandFrames="false" />
<groovy codeStyle="LEGACY" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>

View File

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

View File

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

View File

@@ -0,0 +1,16 @@
package com.mogo.base.services;
public
/**
* @author congtaowang
* @since 2020/7/23
*
* 描述
*/
interface BaseServicesConstants {
/**
* 建立长链的通道ID
*/
String SOCKET_CHANNEL_ID = "dataCrawler";
}

View File

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

View File

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

View File

@@ -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
#左侧面板模块

View File

@@ -131,6 +131,7 @@ open class IMogoAuthorizeController {
}
}
onError {
//todo
Logger.d(TAG, it.message ?: "checkIfNeedAuthorize onError, message is null")
setAuthorizeStatus(agreementType, true)
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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<EntranceView> implements Weathe
private UserInfo userInfo;
public void requestUserInfo() {
Map<String, String> 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);

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

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

View File

@@ -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<BaseData>(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<BaseData>(RequestOptions.create(context)) {
override fun onSuccess(o: BaseData?) {

View File

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

View File

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

View File

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

View File

@@ -16,7 +16,7 @@ public interface IMogoSocketManager extends IProvider {
* 初始化,各模块不用关心
*
* @param context 上下文
* @param appId 一般为包名
* @param appId 一般为包名,不参与通道的建立,一般用于发消息
*/
void init( Context context, String appId );