From 25dcae01cd690efe6ac11c9d89093e3d20ba632a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Sun, 13 Dec 2020 15:26:24 +0800 Subject: [PATCH 1/2] add camera live --- config.gradle | 1 + .../common/entity/MogoSnapshotSetData.java | 15 +- modules/mogo-module-extensions/build.gradle | 1 + .../extensions/entrance/EntranceFragment.java | 5 + .../extensions/entrance/EntranceProvider.java | 7 +- .../live/CameraLiveGSYVideoView.java | 211 +++++++++++++++++ .../extensions/live/CameraLiveManager.java | 124 ++++++++++ .../live/ExtensionServiceManager.java | 214 ++++++++++++++++++ .../extensions/live/PushCameraLiveWindow.java | 149 ++++++++++++ .../module/extensions/live/PushDataType.java | 13 ++ .../live/impl/AbsCameraScenario.java | 65 ++++++ .../extensions/live/impl/ICameraScenario.java | 46 ++++ .../extensions/live/impl/ICameraWindow.java | 33 +++ .../CameraLiveWindowStatusListener.java | 7 + .../utils/CameraLiveNoticeHelper.java | 121 ++++++++++ .../extensions/view/LiveRoundLayout.java | 85 +++++++ .../drawable-xhdpi/icon_live_load_error.png | Bin 0 -> 6309 bytes .../module_camera_real_time_traffic.png | Bin 0 -> 3390 bytes .../main/res/drawable/v2x_alert_window_bg.xml | 38 ++++ .../res/drawable/v2x_refresh_button_bg.xml | 9 + .../res/layout/camera_item_v2x_live_video.xml | 37 +++ .../res/layout/camera_push_live_video.xml | 22 ++ .../camera_view_video_layout_normal.xml | 68 ++++++ .../src/main/res/values-ldpi/dimens.xml | 3 +- .../src/main/res/values-mdpi/dimens.xml | 3 + .../res/values-xhdpi-1920x1000/dimens.xml | 3 + .../src/main/res/values-xhdpi/dimens.xml | 4 + .../src/main/res/values/colors.xml | 3 +- .../src/main/res/values/dimens.xml | 1 + .../src/main/res/values/styles.xml | 4 + .../module/media/window/MediaWindow2.java | 5 +- modules/mogo-module-v2x/build.gradle | 3 +- 32 files changed, 1292 insertions(+), 8 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveManager.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/ExtensionServiceManager.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushCameraLiveWindow.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushDataType.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/AbsCameraScenario.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraScenario.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraWindow.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/listener/CameraLiveWindowStatusListener.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/LiveRoundLayout.java create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_live_load_error.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_camera_real_time_traffic.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable/v2x_alert_window_bg.xml create mode 100644 modules/mogo-module-extensions/src/main/res/drawable/v2x_refresh_button_bg.xml create mode 100644 modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml create mode 100644 modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml create mode 100644 modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml diff --git a/config.gradle b/config.gradle index 95ed304dde..87bf5019e4 100644 --- a/config.gradle +++ b/config.gradle @@ -144,6 +144,7 @@ ext { videojava : "com.shuyu:gsyVideoPlayer-java:7.1.2", eventbus : "org.greenrobot:eventbus:3.1.1", videoprocessor : "com.zhidao.video:video-processor:1.0.2.1", + livesdk : "com.tencent.liteavsdk:LiteAVSDK_Smart:7.4.9211", coroutinescore : "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3", coroutinesandroid : "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3", diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java index e0c65c2ff9..eec679b05f 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java @@ -36,6 +36,7 @@ class MogoSnapshotSetData implements Parcelable { // 自车速度 本地添加 public double curSpeed = 0.0; + @Override public String toString() { return "MogoSnapshotSetData{" + @@ -43,7 +44,9 @@ class MogoSnapshotSetData implements Parcelable { ", time=" + time + ", expire=" + expire + ", allList=" + allList + - ", trafficLight=" + trafficLight + + ", nearList=" + nearList + + ", camera=" + camera + + ", curSpeed=" + curSpeed + '}'; } @@ -87,6 +90,14 @@ class MogoSnapshotSetData implements Parcelable { this.trafficLight = trafficLight; } + public CloudRoadData getCamera() { + return camera; + } + + public void setCamera(CloudRoadData camera) { + this.camera = camera; + } + public List< CloudRoadData > getNearList() { return nearList; } @@ -111,6 +122,7 @@ class MogoSnapshotSetData implements Parcelable { dest.writeTypedList( this.allList ); dest.writeTypedList( this.nearList ); dest.writeParcelable( this.trafficLight, flags ); + dest.writeParcelable( this.camera, flags ); dest.writeDouble( this.curSpeed ); } @@ -121,6 +133,7 @@ class MogoSnapshotSetData implements Parcelable { this.allList = in.createTypedArrayList( CloudRoadData.CREATOR ); this.nearList = in.createTypedArrayList( CloudRoadData.CREATOR ); this.trafficLight = in.readParcelable( CloudRoadData.class.getClassLoader() ); + this.camera = in.readParcelable( CloudRoadData.class.getClassLoader() ); this.curSpeed = in.readDouble(); } diff --git a/modules/mogo-module-extensions/build.gradle b/modules/mogo-module-extensions/build.gradle index db3c0ee1a4..e59c5e48d5 100644 --- a/modules/mogo-module-extensions/build.gradle +++ b/modules/mogo-module-extensions/build.gradle @@ -49,6 +49,7 @@ dependencies { annotationProcessor rootProject.ext.dependencies.aroutercompiler implementation rootProject.ext.dependencies.rxjava implementation rootProject.ext.dependencies.rxandroid + implementation rootProject.ext.dependencies.livesdk if (Boolean.valueOf(RELEASE)) { api rootProject.ext.dependencies.mogomap diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 8df19ce8d4..612e36b511 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -53,6 +53,7 @@ import com.mogo.module.extensions.navi.NaviInfoView; import com.mogo.module.extensions.navi.VrModeNavInfoView; import com.mogo.module.extensions.userinfo.UserInfo; import com.mogo.module.extensions.utils.AdasNoticeHelper; +import com.mogo.module.extensions.utils.CameraLiveNoticeHelper; import com.mogo.module.extensions.utils.EntranceViewHolder; import com.mogo.module.extensions.utils.NoMapTopViewShaderHelper; import com.mogo.module.extensions.utils.TopViewAnimHelper; @@ -205,6 +206,7 @@ public class EntranceFragment extends MvpFragment "); + ExtensionServiceManager.init(context); return mFragment; } @@ -73,7 +77,8 @@ public class EntranceProvider implements IMogoModuleProvider { @Override public void init( Context context ) { - + Log.d("liyz", " EntranceProvider init ------> "); + ExtensionServiceManager.init(context); } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java new file mode 100644 index 0000000000..601f041786 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java @@ -0,0 +1,211 @@ +package com.mogo.module.extensions.live; + +import android.content.Context; +import android.graphics.PorterDuff; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; + +import com.mogo.module.extensions.R; +import com.mogo.module.extensions.view.LiveRoundLayout; +import com.mogo.skin.support.IMogoSkinCompatSupportable; +import com.mogo.skin.support.helper.MogoSkinCompatBackgroundHelperDelegate; +import com.mogo.utils.logger.Logger; +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; + +/** + * V2XLiveGSYVideoView + */ +public class CameraLiveGSYVideoView extends LiveRoundLayout implements IMogoSkinCompatSupportable { + private static final String TAG = "CameraLiveGSYVideoView"; + + private TXCloudVideoView mTxcVideoView; + private ProgressBar mLoading; + private TXLivePlayer mLivePlayer; + private ConstraintLayout mClLoadError; + private TextView mTvRefreshButton; + + private MogoSkinCompatBackgroundHelperDelegate mBackgroundTintHelper; + private String mLiveUrl; + + + public CameraLiveGSYVideoView(Context context) { + this(context, null); + } + + public CameraLiveGSYVideoView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CameraLiveGSYVideoView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(context); + + mBackgroundTintHelper = new MogoSkinCompatBackgroundHelperDelegate(this); + mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr); + } + + private void initView(Context context) { + LayoutInflater.from(context) + .inflate(R.layout.camera_view_video_layout_normal, this); + //mPlayerView 即 step1 中添加的界面 view + mTxcVideoView = findViewById(R.id.txcVideoView); + //创建 player 对象 + mLivePlayer = new TXLivePlayer(context); + //关键 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); + mLoading.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.module_live_video_progress_bar_loading_color), PorterDuff.Mode.MULTIPLY); + + mClLoadError = findViewById(R.id.clLoadError); + mTvRefreshButton = findViewById(R.id.tvRefreshButton); + mTvRefreshButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mLoading.setVisibility(VISIBLE); + mClLoadError.setVisibility(GONE); + if (mLiveUrl != null) { + startLive(mLiveUrl); + } + } + }); + } + + + /** + * 开始直播 + * + * @param liveUrl 要直播的车机,如果没有直播的地址需要重新获取最新的直播地址 + */ + public void startLive(String liveUrl) { + // 进行直播播放 + if (mLivePlayer != null) { + if (!TextUtils.isEmpty(liveUrl)) { + mLiveUrl = liveUrl; + playLiveVideo(liveUrl); + } + } + } + + /** + * 播放直播流,且开始心跳 + */ + private void playLiveVideo(String liveUrl) { + try { + if (mLivePlayer != null) { + mLivePlayer.startPlay(liveUrl, TXLivePlayer.PLAY_TYPE_LIVE_RTMP); + mLivePlayer.setPlayListener(new ITXLivePlayListener() { + @Override + public void onPlayEvent(int event, Bundle bundle) { + Logger.w(TAG, + "直播信息= " + + "\n播放器:onPlayEvent==" + event + + "\nbundle===" + bundle); + Logger.d(TAG, "liveUrl = " + liveUrl); + 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(mLiveUrl); + 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(TAG, "播放器:onNetStatus===bundle===" + bundle); + } + }); + } + } catch (Exception e) { + e.printStackTrace(); + mLoading.setVisibility(GONE); + mClLoadError.setVisibility(VISIBLE); + } + } + + public void stopLive(String liveUrl) { + try { + Logger.w(TAG, "心跳:关闭直播..."); + // 暂停 + mLivePlayer.pause(); + // true 代表清除最后一帧画面 + mLivePlayer.stopPlay(true); + mTxcVideoView.onDestroy(); + // 停止推流 +// V2XServiceManager +// .getV2XRefreshModel() +// .livePush(new V2XRefreshCallback() { +// @Override +// public void onSuccess(V2XLivePushVoRes result) { +// Logger.d(TAG, "播放器:" + result); +// } +// +// @Override +// public void onFail(String msg) { +// Logger.e(TAG, "播放器:" + msg); +// } +// }, carLiveInfo.getVideoSn(), 1); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (mLiveUrl != null) { + startLive(mLiveUrl); + } + } + + @Override + protected void onDetachedFromWindow() { + stopLive(mLiveUrl); + mLoading.setVisibility(VISIBLE); + // 反注册语音交互 +// V2XVoiceManager.INSTANCE +// .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE) +// .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP); + super.onDetachedFromWindow(); + } + + @Override + public void applySkin() { + if (mBackgroundTintHelper != null) { + mBackgroundTintHelper.applySkin(); + } + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveManager.java new file mode 100644 index 0000000000..4debd09358 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveManager.java @@ -0,0 +1,124 @@ +package com.mogo.module.extensions.live; + +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.Nullable; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.module.common.entity.CloudRoadData; +import com.mogo.module.extensions.R; +import com.mogo.module.extensions.live.impl.AbsCameraScenario; +import com.mogo.service.windowview.IMogoTopViewStatusListener; +import com.mogo.utils.logger.Logger; + +/** + * 路边摄像头直播控制 V2XPushLiveCarScenario + */ +public class CameraLiveManager extends AbsCameraScenario implements IMogoTopViewStatusListener { + private static final String TAG = "CameraLiveManager"; + private static CameraLiveManager mCameraLiveCarScenario; + private boolean isShowWindow; + + private CameraLiveManager() { + } + + public static CameraLiveManager getInstance() { + if (mCameraLiveCarScenario == null) { + synchronized (CameraLiveManager.class) { + if (mCameraLiveCarScenario == null) { + mCameraLiveCarScenario = new CameraLiveManager(); + mCameraLiveCarScenario.setV2XWindow(new PushCameraLiveWindow()); + } + } + } + return mCameraLiveCarScenario; + } + + @Override + public void init(@Nullable CloudRoadData cloudRoadData) { + Log.d(TAG, "CameraLiveManager init -----> "); + if (isShowWindow) { + close(); + } + + setmCloudRoadData(cloudRoadData); + show(); + } + + @Override + public void show() { + showWindow(); + } + + @Override + public void showWindow() { + Log.d(TAG, "CameraLiveManager showWindow --------"); + if (getV2XWindow() != null) { + ViewGroup.LayoutParams layoutParams = + new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + (int) AbsMogoApplication.getApp().getResources() + .getDimension(R.dimen.module_video_window_height_content)); + + ExtensionServiceManager + .getMogoTopViewManager() + .addViewNoLinkage(getV2XWindow().getView(), layoutParams, this); + getV2XWindow().show(getmCloudRoadData()); + isShowWindow = true; +// ExtensionServiceManager.getMoGoV2XStatusManager().setRoadLiveCarWindowShow(TAG, true); + } + } + + @Override + public void closeWindow() { + if (getV2XWindow() != null) { + getV2XWindow().close(); + } + isShowWindow = false; +// ExtensionServiceManager.getMoGoV2XStatusManager().setRoadLiveCarWindowShow(TAG, false); + } + + @Override + public void showButton() { + + } + + @Override + public void closeButton() { + + } + + @Override + public void drawPOI() { + + } + + @Override + public void clearPOI() { + + } + + @Override + public void onViewAdded(View view) { + Logger.d(TAG, "展示 Window 动画结束"); + + } + + @Override + public void onViewRemoved(View view) { + Logger.d(TAG, "关闭 Window 动画结束"); + + } + + @Override + public void beforeViewAddAnim(View view) { + Logger.d(TAG, "展示 Window 开始"); + } + + @Override + public void beforeViewRemoveAnim(View view) { + + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/ExtensionServiceManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/ExtensionServiceManager.java new file mode 100644 index 0000000000..4084b0bd6a --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/ExtensionServiceManager.java @@ -0,0 +1,214 @@ +package com.mogo.module.extensions.live; + +import android.content.Context; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.map.location.IMogoLocationClient; +import com.mogo.map.marker.IMogoMarkerManager; +import com.mogo.map.navi.IMogoNavi; +import com.mogo.map.overlay.IMogoOverlayManager; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.service.IMogoServiceApis; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.connection.IMogoSocketManager; +import com.mogo.service.entrance.IMogoEntranceButtonController; +import com.mogo.service.eventpanel.IEventPanelProvider; +import com.mogo.service.imageloader.IMogoImageloader; +import com.mogo.service.intent.IMogoIntentManager; +import com.mogo.service.map.IMogoMapService; +import com.mogo.service.module.IMogoActionManager; +import com.mogo.service.module.IMogoMarkerService; +import com.mogo.service.module.IMogoRegisterCenter; +import com.mogo.service.module.IMogoSearchManager; +import com.mogo.service.share.IMogoShareManager; +import com.mogo.service.share.IMogoTanluProvider; +import com.mogo.service.share.IMogoTrafficUploadProvider; +import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.service.strategy.IMogoOnlineCarListPanelProvider; +import com.mogo.service.strategy.IMogoRefreshStrategyController; +import com.mogo.service.windowview.IMogoTopViewManager; +import com.mogo.service.windowview.IMogoWindowManager; + + +public class ExtensionServiceManager { + private static boolean isInit; + private static Context mContext; + private static IMogoServiceApis mMogoServiceApis; + + private static IMogoMapService mMapService; + private static IMogoMarkerManager mMarkerManager; + private static IMogoNavi mNavi; + private static IMogoMapUIController mMapUIController; + private static IMogoLocationClient mMogoLocationClient; + private static IMogoGeoSearch mIMogoGeoSearch; + private static IMogoSearchManager mIMogoSearchManager; + private static IMogoTopViewManager mMogoTopViewManager; + private static IMogoStatusManager mMogoStatusManager; + private static IMogoWindowManager mIMogoWindowManager; + private static IMogoImageloader mImageLoader; + private static IMogoSocketManager mMogoSocketManager; + private static IMogoAnalytics mMogoAnalytics; + private static IMogoOverlayManager mMogoOverlayManager; + private static IMogoRegisterCenter mMogoRegisterCenter; + private static IMogoRefreshStrategyController mIMogoRefreshStrategyController; + private static IMogoMarkerService mIMogoMarkerService; + private static IMogoShareManager mIMogoShareManager; + private static IMogoTanluProvider mIMogoTanluProvider; + private static IMogoTrafficUploadProvider mIMogoTrafficUploadProvider; + //事件面板 + private static IEventPanelProvider mIEventPanelProvider; + + private static IMogoActionManager mMogoActionManager; + private static IMogoIntentManager mMogoIntentManager; + private static IMogoEntranceButtonController mMogoEntranceButtonController; + private static IMogoOnlineCarListPanelProvider mMogoOnlineCarListPanelProvider; + + + private ExtensionServiceManager() { + + } + + public static void init(final Context context) { + if (!isInit) { + isInit = true; + + mContext = context; + mMogoServiceApis = (IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context); + + mMapService = mMogoServiceApis.getMapServiceApi(); + mImageLoader = mMogoServiceApis.getImageLoaderApi(); + mMogoStatusManager = mMogoServiceApis.getStatusManagerApi(); + mMogoSocketManager = mMogoServiceApis.getSocketManagerApi(context); + mMogoAnalytics = mMogoServiceApis.getAnalyticsApi(); + mIMogoWindowManager = mMogoServiceApis.getWindowManagerApi(); + mMogoRegisterCenter = mMogoServiceApis.getRegisterCenterApi(); + mIMogoRefreshStrategyController = mMogoServiceApis.getRefreshStrategyControllerApi(); + mMogoEntranceButtonController = mMogoServiceApis.getEntranceButtonController(); + mMogoActionManager = mMogoServiceApis.getActionManagerApi(); + mMogoTopViewManager = mMogoServiceApis.getTopViewManager(); + mIMogoSearchManager = mMogoServiceApis.getSearchManagerApi(); + mIMogoMarkerService = mMogoServiceApis.getMarkerService(); + mIMogoShareManager = mMogoServiceApis.getShareManager(); + mIMogoTanluProvider = mMogoServiceApis.getTanluApi(); + mIMogoTrafficUploadProvider = mMogoServiceApis.getTrafficUploadApi(); + mMogoOnlineCarListPanelProvider = mMogoServiceApis.getOnlineCarPanelApi(); + //事件面板 + mIEventPanelProvider = mMogoServiceApis.getEventPanelManager(); + + mMarkerManager = mMapService.getMarkerManager(context); + mNavi = mMapService.getNavi(context); + mMapUIController = mMapService.getMapUIController(); + mMogoLocationClient = mMapService.getSingletonLocationClient(context); + mMogoOverlayManager = mMapService.getOverlayManager(context); + mIMogoGeoSearch = mMapService.getGeoSearch(context); + + mMogoIntentManager = mMogoServiceApis.getIntentManagerApi(); + } + } + + public static Context getContext() { + return mContext; + } + + public static IMogoTopViewManager getMogoTopViewManager() { + return mMogoTopViewManager; + } + + public static IMogoEntranceButtonController getMogoEntranceButtonController() { + return mMogoEntranceButtonController; + } + + public static IMogoMapService getMapService() { + return mMapService; + } + + public static IMogoOverlayManager getMogoOverlayManager() { + return mMogoOverlayManager; + } + + public static IMogoRegisterCenter getMogoRegisterCenter() { + return mMogoRegisterCenter; + } + + public static IMogoMarkerManager getMarkerManager() { + return mMarkerManager; + } + + public static IMogoNavi getNavi() { + return mNavi; + } + + public static IMogoMapUIController getMapUIController() { + return mMapUIController; + } + + public static IMogoLocationClient getMogoLocationClient() { + return mMogoLocationClient; + } + + public static IMogoImageloader getImageLoader() { + return mImageLoader; + } + + public static IMogoSocketManager getMoGoSocketManager() { + return mMogoSocketManager; + } + + public static IMogoStatusManager getMoGoStatusManager() { + return mMogoStatusManager; + } + + public static IMogoWindowManager getIMogoWindowManager() { + return mIMogoWindowManager; + } + + public static IMogoIntentManager getMogoIntentManager() { + return mMogoIntentManager; + } + + public static IMogoActionManager getMogoActionManager() { + return mMogoActionManager; + } + + public static IMogoGeoSearch getMogoGeoSearch() { + return mIMogoGeoSearch; + } + + public static IMogoSearchManager getSearchManager() { + return mIMogoSearchManager; + } + + public static IMogoRefreshStrategyController getIMogoRefreshStrategyController() { + return mIMogoRefreshStrategyController; + } + + public static IMogoAnalytics getMogoAnalytics() { + return mMogoAnalytics; + } + + public static IMogoMarkerService getIMogoMarkerService() { + return mIMogoMarkerService; + } + + public static IMogoShareManager getMogoShareManager() { + return mIMogoShareManager; + } + + public static IMogoTanluProvider getTanluManager() { + return mIMogoTanluProvider; + } + + public static IMogoTrafficUploadProvider getIMogoTrafficUploadProvider() { + return mIMogoTrafficUploadProvider; + } + + public static IMogoOnlineCarListPanelProvider getMogoOnlineCarListPanelProvider() { + return mMogoOnlineCarListPanelProvider; + } + + public static IEventPanelProvider getEventPanelProvider() { + return mIEventPanelProvider; + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushCameraLiveWindow.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushCameraLiveWindow.java new file mode 100644 index 0000000000..70c79b5528 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushCameraLiveWindow.java @@ -0,0 +1,149 @@ +package com.mogo.module.extensions.live; + +import android.content.Context; +import android.os.Handler; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.mogo.module.common.entity.CloudRoadData; +import com.mogo.module.extensions.R; +import com.mogo.module.extensions.live.listener.CameraLiveWindowStatusListener; +import com.mogo.module.extensions.live.impl.ICameraWindow; +import com.mogo.service.imageloader.MogoImageView; +import com.mogo.utils.logger.Logger; + + +/** + * 点击摄像头 marker + * vr路边摄像头弹窗 V2XPushLiveCarWindow + */ +public class PushCameraLiveWindow extends RelativeLayout implements ICameraWindow { + private static final String TAG = "PushCameraLiveWindow"; + private Context mContext; + private CameraLiveGSYVideoView mLiveGSYVideoView; + private MogoImageView mIvReportHead; + private ImageView pushVideoClose; + + // 弹窗状态监听 + private CameraLiveWindowStatusListener mWindowStatusListener; + + // 直播30秒自动关闭 + private static Handler handlerV2XEvent = new Handler(); + private static Runnable runnableV2XEvent; + + public PushCameraLiveWindow() { + this(ExtensionServiceManager.getContext(), null); + } + + public PushCameraLiveWindow(Context context) { + this(context, null); + } + + public PushCameraLiveWindow(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PushCameraLiveWindow(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + mContext = context; + initView(context); + } + + public void initView(Context context) { + Logger.w(TAG, "initView 。。。。。"); + LayoutInflater.from(context).inflate(R.layout.camera_push_live_video, this); + // 详情列表 + mLiveGSYVideoView = findViewById(R.id.videoPlayer); + mIvReportHead = findViewById(R.id.ivReportHead); + pushVideoClose = findViewById(R.id.pushVideoClose); + pushVideoClose.setOnClickListener(v -> { + //移除窗体 + ExtensionServiceManager + .getMogoTopViewManager() + .removeViewNoLinkage(this); + }); + } + + /** + * 展示直播Windows + */ + @Override + public void show(CloudRoadData entity) { + if (entity != null) { + Logger.w(TAG, "更新直播信息 show entity = " + entity); + if (!TextUtils.isEmpty(entity.getRtmpUrl())) { + Logger.w(TAG, "entity.getRtmpUrl() = " + entity.getRtmpUrl()); + mIvReportHead.setVisibility(VISIBLE); + ExtensionServiceManager.getImageLoader() + .displayImage(entity.getRtmpUrl(), mIvReportHead); + mLiveGSYVideoView.startLive(entity.getRtmpUrl()); + } + + countDownV2XEvent(entity); + if (mWindowStatusListener != null) { + mWindowStatusListener.onViewShow(); + } + } + } + + @Override + public View getView() { + return this; + } + + @Override + public void close() { + // 修改地图比例 +// V2XServiceManager.getMoGoStatusManager().setUserInteractionStatus(MODULE_NAME, true, false); + // 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随 +// MarkerUtils.resetMapZoom(16); + + // 如果窗体处于展示的时候 + if (mWindowStatusListener != null) { + mWindowStatusListener.onViewClose(); + } + + // 停止倒计时 + if (handlerV2XEvent != null && runnableV2XEvent != null) { + handlerV2XEvent.removeCallbacks(runnableV2XEvent); + runnableV2XEvent = null; + } + + //移除窗体 + ExtensionServiceManager + .getMogoTopViewManager() + .removeView(this); + } + + + @Override + public void setWindowStatusListener(CameraLiveWindowStatusListener listener) { + this.mWindowStatusListener = listener; + } + + /** + * 窗体倒计时 TODO + */ + public void countDownV2XEvent(CloudRoadData data) { + // 倒计时 + if (runnableV2XEvent == null) { + runnableV2XEvent = () -> { + //Logger.d(MODULE_NAME, "V2X=== Window 30秒倒计时结束。。。"); + //移除窗体 + ExtensionServiceManager + .getMogoTopViewManager() + .removeViewNoLinkage(this); + }; + } else { + handlerV2XEvent.removeCallbacks(runnableV2XEvent); + } + + Logger.d(TAG, "V2X=== Window 展示开始倒计时:" ); + handlerV2XEvent.postDelayed(runnableV2XEvent, 20000); + } + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushDataType.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushDataType.java new file mode 100644 index 0000000000..6a5a9bf80c --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/PushDataType.java @@ -0,0 +1,13 @@ +package com.mogo.module.extensions.live; + +/** + * @author lixiaopeng + * @description + * @since 2020/12/13 + */ +public class PushDataType { + /** + * Push 摄像头事件场景 VR + */ + public static final String TYPE_PUSH_CAMERA_DATA = "TYPE_PUSH_CAMERA_DATA"; +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/AbsCameraScenario.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/AbsCameraScenario.java new file mode 100644 index 0000000000..6dfb6e4ada --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/AbsCameraScenario.java @@ -0,0 +1,65 @@ +package com.mogo.module.extensions.live.impl; + +import androidx.annotation.Nullable; + +import com.mogo.module.common.entity.CloudRoadData; + + +public abstract class AbsCameraScenario implements ICameraScenario { + protected String TAG = "AbsCameraScenario"; + private ICameraWindow mV2XWindow; + private CloudRoadData mCloudRoadData; + +// private IV2XButton mV2XButton; +// private IV2XMarker mV2XMarker; +// private IMoGoV2XStatusManager mV2XStatusManager; +// private V2XMessageEntity mV2XMessageEntity; + +// protected AbsCameraScenario() { +// this.mV2XStatusManager = V2XServiceManager.getMoGoV2XStatusManager(); +// } + + public abstract void init(@Nullable CloudRoadData cloudRoadData); + + @Override + public void close() { + closeButton(); + closeWindow(); + clearPOI(); + } + + + public ICameraWindow getV2XWindow() { + return mV2XWindow; + } + + public void setV2XWindow(@Nullable ICameraWindow mV2XWindow) { + this.mV2XWindow = mV2XWindow; + } + + public CloudRoadData getmCloudRoadData() { + return mCloudRoadData; + } + + public void setmCloudRoadData(CloudRoadData mCloudRoadData) { + this.mCloudRoadData = mCloudRoadData; + } + + // public IV2XMarker getV2XMarker() { +// return mV2XMarker; +// } +// +// public IV2XButton getV2XButton() { +// return mV2XButton; +// } + +// public void setV2XButton(@Nullable IV2XButton mV2XButton) { +// this.mV2XButton = mV2XButton; +// } +// +// public void setV2XMarker(@Nullable IV2XMarker mV2XMarker) { +// this.mV2XMarker = mV2XMarker; +// } + + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraScenario.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraScenario.java new file mode 100644 index 0000000000..db829a28b1 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraScenario.java @@ -0,0 +1,46 @@ +package com.mogo.module.extensions.live.impl; + + +public interface ICameraScenario { + + /** + * 展示场景 + */ + void show(); + + /** + * 关闭场景 + */ + void close(); + + /** + * 展示Window + */ + void showWindow(); + + /** + * 关闭Window + */ + void closeWindow(); + + /** + * 展示按钮 + */ + void showButton(); + + /** + * 关闭按钮 + */ + void closeButton(); + + /** + * 绘制POI + */ + void drawPOI(); + + /** + * 清除POI + */ + void clearPOI(); + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraWindow.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraWindow.java new file mode 100644 index 0000000000..13cd90417c --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/impl/ICameraWindow.java @@ -0,0 +1,33 @@ +package com.mogo.module.extensions.live.impl; + +import android.view.View; + +import com.mogo.module.extensions.live.listener.CameraLiveWindowStatusListener; + +public interface ICameraWindow { + + /** + * 展示1/2窗口 + */ + void show(T entity); + + /** + * 关闭1/2窗口 + */ + void close(); + + /** + * 返回窗体 + * + * @return 当前窗体 + */ + View getView(); + + /** + * 设置Window状态监听 + * + * @param listener 监听器 + */ + void setWindowStatusListener(CameraLiveWindowStatusListener listener); + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/listener/CameraLiveWindowStatusListener.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/listener/CameraLiveWindowStatusListener.java new file mode 100644 index 0000000000..8334977555 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/listener/CameraLiveWindowStatusListener.java @@ -0,0 +1,7 @@ +package com.mogo.module.extensions.live.listener; + + +public interface CameraLiveWindowStatusListener { + void onViewShow(); + void onViewClose(); +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java new file mode 100644 index 0000000000..fbec2bd1a7 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java @@ -0,0 +1,121 @@ +package com.mogo.module.extensions.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.IMogoMarkerClickListener; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.constants.DataTypes; +import com.mogo.module.common.entity.CloudRoadData; +import com.mogo.module.common.entity.MogoSnapshotSetData; +import com.mogo.module.extensions.R; +import com.mogo.module.extensions.live.CameraLiveManager; +import com.mogo.module.extensions.live.ExtensionServiceManager; +import com.mogo.module.extensions.live.PushDataType; +import com.mogo.service.connection.IMogoOnWebSocketMessageListener; +import com.mogo.service.connection.WebSocketMsgType; +import com.mogo.utils.logger.Logger; + + +/** + * vr模式下,红绿灯消息 AdasNoticeHelper + * + */ +public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener { + private static final String TAG = "CameraLiveNoticeHelper"; + private Context mContext; + private static IMogoMarker mMogoMarker; + private CloudRoadData mCloudRoadData; + + + public void init(Context context) { + Logger.d(TAG, "init===="); + mContext = context; + ExtensionServiceManager + .getMogoRegisterCenter().registerMogoMarkerClickListener(PushDataType.TYPE_PUSH_CAMERA_DATA, new IMogoMarkerClickListener() { + @Override + public boolean onMarkerClicked(IMogoMarker marker) { + //点击的marker的具体数据 TODO + if (mCloudRoadData != null) { + CameraLiveManager.getInstance().init(mCloudRoadData); + } else { + Logger.e(TAG, " mCloudRoadData == null "); + } + + return false; + } + }); + } + + public void enterVrMode() { + Logger.d(TAG, "enterVrMode==="); + MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(mContext).registerOnWebSocketMessageListener(this); + } + + public void exitVrMode() { + Logger.d(TAG, "退出vr模式==="); + MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(mContext).unregisterOnWebSocketMessageListener(this); + } + + /** + * PushRoadConditionDrawer + * @param roadData + */ + private void addCameraMarker(CloudRoadData roadData) { + Logger.d(TAG, "addCameraMarker ------ "); + MogoMarkerOptions options = new MogoMarkerOptions() + .object(roadData) + .latitude(roadData.getLat()) + .longitude(roadData.getLon()); + options.anchor(0.5f, 0.5f); + + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.module_camera_real_time_traffic, null); + options.icon(bitmap); + mMogoMarker = MogoApisHandler + .getInstance() + .getApis() + .getMapServiceApi() + .getMarkerManager(AbsMogoApplication.getApp()) + .addMarker(DataTypes.TYPE_MARKER_PUSH_DATA, options); + + ExtensionServiceManager.getMapService().getMarkerManager(mContext).addMarker(PushDataType.TYPE_PUSH_CAMERA_DATA, options); + } + + private void removeCameraMarker() { + if (mMogoMarker != null) { + mMogoMarker.remove(); + } + } + + + @Override + public WebSocketMsgType getDownLinkType() { + return WebSocketMsgType.MSG_TYPE_DOWNLINK_CAR_DATA; + } + + @Override + public Class target() { + return MogoSnapshotSetData.class; + } + + @Override + public void onMsgReceived(MogoSnapshotSetData obj) { + Logger.d(TAG, "onMsgReceived cameralive : " + obj); + mCloudRoadData = obj.getTrafficLight(); + if (mCloudRoadData != null) { + Logger.d(TAG, "onMsgReceived cameralive : "); + //添加marker TODO + addCameraMarker(mCloudRoadData); + + } else { + //删除marker TODO + removeCameraMarker(); + + } + } + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/LiveRoundLayout.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/LiveRoundLayout.java new file mode 100644 index 0000000000..bc97d2f5d2 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/LiveRoundLayout.java @@ -0,0 +1,85 @@ +package com.mogo.module.extensions.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + + +import com.mogo.module.extensions.R; +import com.mogo.skin.support.IMogoSkinCompatSupportable; +import com.mogo.skin.support.helper.MogoSkinCompatBackgroundHelperDelegate; + + +public class LiveRoundLayout extends RelativeLayout implements IMogoSkinCompatSupportable { + private float roundLayoutRadius = 14f; + private Path roundPath; + private RectF rectF; + private MogoSkinCompatBackgroundHelperDelegate mBackgroundTintHelper; + + public LiveRoundLayout(Context context) { + this(context, null); + } + + public LiveRoundLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LiveRoundLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundLayout); + roundLayoutRadius = typedArray.getDimensionPixelSize(R.styleable.RoundLayout_roundLayoutRadius, (int) roundLayoutRadius); + typedArray.recycle(); + + init(); + + mBackgroundTintHelper = new MogoSkinCompatBackgroundHelperDelegate(this); + mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr); + } + + + private void init() { + setWillNotDraw(false);//如果你继承的是ViewGroup,注意此行,否则draw方法是不会回调的; + roundPath = new Path(); + rectF = new RectF(); + } + + private void setRoundPath() { + //添加一个圆角矩形到path中, 如果要实现任意形状的View, 只需要手动添加path就行 + roundPath.addRoundRect(rectF, roundLayoutRadius, roundLayoutRadius, Path.Direction.CW); + } + + + public void setRoundLayoutRadius(float roundLayoutRadius) { + this.roundLayoutRadius = roundLayoutRadius; + setRoundPath(); + postInvalidate(); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + rectF.set(0f, 0f, getMeasuredWidth(), getMeasuredHeight()); + setRoundPath(); + } + + @Override + public void draw(Canvas canvas) { + if (roundLayoutRadius > 0f) { + canvas.clipPath(roundPath); + } + super.draw(canvas); + } + + @Override + public void applySkin() { + if (mBackgroundTintHelper != null) { + mBackgroundTintHelper.applySkin(); + } + } +} + diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_live_load_error.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_live_load_error.png new file mode 100644 index 0000000000000000000000000000000000000000..a1da551655536f62ce8eaa5454c3f9e30500f702 GIT binary patch literal 6309 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 bJJtWc1%85!Qn2Qr00000NkvXXu0mjfv0E2y literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_camera_real_time_traffic.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_camera_real_time_traffic.png new file mode 100644 index 0000000000000000000000000000000000000000..049d2131487803af958e74dbe52ebf4ebf85494b GIT binary patch literal 3390 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 UELE{h-T(jq07*qoM6N<$f(3_!GXMYp literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/res/drawable/v2x_alert_window_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/v2x_alert_window_bg.xml new file mode 100644 index 0000000000..5f9bc8d7d2 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/drawable/v2x_alert_window_bg.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/v2x_refresh_button_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/v2x_refresh_button_bg.xml new file mode 100644 index 0000000000..cac43e0f2d --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/drawable/v2x_refresh_button_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml new file mode 100644 index 0000000000..da246758f3 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml @@ -0,0 +1,37 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml new file mode 100644 index 0000000000..a444b15a4a --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml new file mode 100644 index 0000000000..a25796d122 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index 6c6614f147..468a4617d3 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -3,5 +3,6 @@ 2px 0px -6px - + 20px + 370px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml index 8a48af5df3..286f0b120f 100644 --- a/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml @@ -13,4 +13,7 @@ 1920px -1 0px + 20px + 370px + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml index 71c4fe9ef9..9d0821625b 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml @@ -159,4 +159,7 @@ -1 0px + + 36px + 664px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index e70fc69b2a..f35e24782f 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -176,4 +176,8 @@ 20px 16px 20px + + 36px + 664px + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/colors.xml b/modules/mogo-module-extensions/src/main/res/values/colors.xml index 943bde9777..d00d7313db 100644 --- a/modules/mogo-module-extensions/src/main/res/values/colors.xml +++ b/modules/mogo-module-extensions/src/main/res/values/colors.xml @@ -9,6 +9,7 @@ #FF2B2B #E3BC59 #FFF - + #256BFF + #FFFFFF \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 653d924d60..173e3fb522 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -239,5 +239,6 @@ 21px 21px + 370px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/styles.xml b/modules/mogo-module-extensions/src/main/res/values/styles.xml index b92fcf7d00..ebcaf53855 100644 --- a/modules/mogo-module-extensions/src/main/res/values/styles.xml +++ b/modules/mogo-module-extensions/src/main/res/values/styles.xml @@ -3,4 +3,8 @@ + + + + \ No newline at end of file diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java index 5a9f514f9a..222842029d 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java @@ -184,7 +184,6 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { } else { mWindowView.setVisibility(View.VISIBLE); } - } else { mWindowView = LayoutInflater.from(mContext).inflate(R.layout.module_media_music_window_alert_layout, null); @@ -447,7 +446,7 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { (int) ((current * 1.0f * 100) / (total * 1.0f)); if (mPercentageRingView != null) { mPercentageRingView.setVisibility(View.VISIBLE); - Log.d(TAG, "progress vr = " + progress); +// Log.d(TAG, "progress vr = " + progress); mPercentageRingView.setTargetPercent(progress); } } catch (Exception e) { @@ -466,7 +465,7 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { int progress = (int) ((current * 1.0f * 100) / (total * 1.0f)); if (mWindowProgress != null) { - Log.d(TAG, "progress = " + progress); +// Log.d(TAG, "progress = " + progress); mWindowProgress.setProgress(progress); } } catch (Exception e) { diff --git a/modules/mogo-module-v2x/build.gradle b/modules/mogo-module-v2x/build.gradle index 1a7eaf2143..1962ad41fb 100644 --- a/modules/mogo-module-v2x/build.gradle +++ b/modules/mogo-module-v2x/build.gradle @@ -43,7 +43,8 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.tencent.liteavsdk:LiteAVSDK_Smart:7.4.9211' +// implementation 'com.tencent.liteavsdk:LiteAVSDK_Smart:7.4.9211' + implementation rootProject.ext.dependencies.livesdk implementation 'ch.hsr:geohash:1.4.0' implementation rootProject.ext.dependencies.flexbox implementation rootProject.ext.dependencies.rxandroid From f767acf274e785a174e9040f3f29e2d7ce06ce5c Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Sun, 13 Dec 2020 16:02:03 +0800 Subject: [PATCH 2/2] opt --- .../com/mogo/module/media/window/MediaWindow2.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java index 222842029d..c3f8748bea 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java @@ -89,6 +89,7 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { } ServiceMediaHandler.getIMogoStatusManager().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.ACC_STATUS, this); + ServiceMediaHandler.getIMogoStatusManager().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.VR_MODE, this); // 车聊聊才是王 mCallProviderResponse = new ICallChatResponse(){ @@ -114,10 +115,17 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { @Override public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { + Log.d(TAG, " onStatusChanged ----- descriptor = " + descriptor); if (descriptor == StatusDescriptor.ACC_STATUS&&!isTrue) { ServiceMediaHandler.getMogoWindowManager().removeView(mWindowView); mHasAddWindow = false; } + + if (descriptor == StatusDescriptor.VR_MODE) { + ServiceMediaHandler.getMogoWindowManager().removeView(mWindowView); + mHasAddWindow = false; + addWindowView(); + } } private void addWindowView() { @@ -127,7 +135,7 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { return; } - if (!mHasAddWindow) { //TODO + if (!mHasAddWindow) { mHasAddWindow = true; if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { mWindowView =