diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 22d04a33fd..ad82747b49 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,7 +4,7 @@ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt index 14fbce0bd5..4dfdd36da2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt @@ -32,7 +32,10 @@ class NoticeNormalBroadcastReceiver : BroadcastReceiver() { mIMoGoWaringProvider = mMogoServiceApis!!.waringProviderApi // 分发场景 - dispatchShowWaring("11", "官方公告", "测试普通云公告", "www") + dispatchShowWaring("11", "官方公告", "测试普通云公告普通云公告普通云公告普通云公告普通云公告普通云公告普通云公告哈哈哈哈哈哈好好", + "https://dataservice-1255510688.cos.ap-beijing.myqcloud.com/carImg/yycp_NoticeDETAIL_location.png", + "https://vd2.bdstatic.com/mda-mk1347dzxdmcre0y/sc/cae_h264/1635819498112313003/mda-mk1347dzxdmcre0y.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1635837585-0-0-5295f6658c7711ba7b4d3ef478a7fbaa&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest=", + 2) } catch (e: Exception) { e.printStackTrace() } @@ -42,7 +45,9 @@ class NoticeNormalBroadcastReceiver : BroadcastReceiver() { id: String, titleTv: String, contentTv: String, - imageUrl: String + imageUrl: String, + videoUrl: String, + fileType: Int ) { val data = NoticeNormalData() @@ -50,6 +55,8 @@ class NoticeNormalBroadcastReceiver : BroadcastReceiver() { data.imageUrl = imageUrl data.title = titleTv data.content = contentTv + data.videoUrl = videoUrl + data.fileType = fileType mIMoGoWaringProvider!!.showNoticeNormalData(data) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt index aa8be66de9..41165b2633 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt @@ -1,35 +1,54 @@ package com.mogo.eagle.core.function.hmi.ui.notice import android.content.Context +import android.text.TextUtils +import android.view.View import android.widget.ImageView import android.widget.TextView +import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer import com.mogo.module.common.dialog.BaseFloatDialog +import com.mogo.utils.glide.GlideApp +import com.mogo.utils.logger.Logger +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.cache.CacheFactory +import com.shuyu.gsyvideoplayer.cache.ProxyCacheManager +import com.shuyu.gsyvideoplayer.listener.GSYMediaPlayerListener +import com.shuyu.gsyvideoplayer.model.VideoOptionModel +import com.shuyu.gsyvideoplayer.player.IjkPlayerManager +import com.shuyu.gsyvideoplayer.player.PlayerFactory +import com.shuyu.gsyvideoplayer.utils.GSYVideoType +import tv.danmaku.ijk.media.player.IjkMediaPlayer +import java.util.* + /** - * 点击查看对话框,需要做接口的请求 TODO - * + * 点击查看对话框,需要做接口的请求 + * */ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { + private val TAG = "NoticeCheckDialog" private var pushCheckClose: ImageView? = null private var pushCheckTitle: TextView? = null private var pushCheckContent: TextView? = null private var pushImageView: ImageView? = null private var pushVideo: SimpleVideoPlayer? = null + private val gsyVideoOptionBuilder = GSYVideoOptionBuilder() +// private var mLoading: ProgressBar? = null init { setContentView(R.layout.notice_dialog_check_with_accessory) setCanceledOnTouchOutside(true) pushCheckClose = findViewById(R.id.module_push_dialog_close) pushCheckTitle = findViewById(R.id.module_push_dialog_acc_title) - pushCheckContent = findViewById(R.id.module_push_dialog_content) + pushCheckContent = findViewById(R.id.module_push_dialog_bottom_title) pushImageView = findViewById(R.id.notice_image) pushVideo = findViewById(R.id.notice_video_layout) - -// GlideApp.with(context!!).load(headImgUrl) -// .placeholder(R.mipmap.module_carchatting_default_head_img).circleCrop().into(pushImageView) +// mLoading = findViewById(R.id.loading) +// mLoading!!.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.notice_video_progressbar_loading_color), PorterDuff.Mode.MULTIPLY) pushCheckClose?.setOnClickListener { dismiss() @@ -39,21 +58,70 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context) { /** * 展示详情页面 */ - fun showCheckDialog(title: String, dbId: String) { - if (isShowing) { + fun showCheckDialog(noticeNormal: NoticeNormalData) { + Logger.d("liyz", "------1--------") + if (isShowing || noticeNormal == null) { return } - if (title.isBlank() || dbId.isBlank()) { - return - } - pushCheckTitle?.text = title - //网络请求处理数据 + if (noticeNormal.title.isBlank() || noticeNormal.content.isBlank()) { + return + } + + pushCheckTitle?.text = noticeNormal.title + pushCheckContent?.text = noticeNormal.content + + if (!TextUtils.isEmpty(noticeNormal.imageUrl) && noticeNormal.fileType == 1) { + Logger.d("liyz", "------2--------") + pushVideo?.visibility = View.GONE + pushImageView?.visibility = View.VISIBLE + pushImageView?.let { GlideApp.with(context!!).load(noticeNormal.imageUrl).into(it) } + } + + if (!TextUtils.isEmpty(noticeNormal.videoUrl) && noticeNormal.fileType == 2) { + Logger.d("liyz", "------3--------") + pushImageView?.visibility = View.GONE + pushVideo?.visibility = View.VISIBLE + //加载视频播放 + playLiveVideo(noticeNormal.videoUrl) + } show() } - //展示相关数据,播放视频 TODO + + /** + * 播放直播流,且开始心跳 + */ + private fun playLiveVideo(videoUrl: String) { +// pushVideo?.setPlayListener(object : PlayListener { +// override fun onPlayEvent(event: Int) { +// Logger.d("liyz", "event ----- $event") +// if (event == SimpleVideoPlayer.PLAY_EVT_PLAY_LOADING) { +//// mLoading!!.visibility = View.VISIBLE +// } else if (event == SimpleVideoPlayer.PLAY_EVT_PLAY_BEGIN) { +//// mLoading!!.visibility = View.GONE +// } else if (event < 0) { +// stopLive() +//// mLoading!!.visibility = View.GONE +// } +// } +// }) + + gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG) + .build(pushVideo) + pushVideo!!.startButton.performClick() + } + + fun stopLive() { + try { + GSYVideoManager.releaseAllVideos() + } catch (e: Exception) { + e.printStackTrace() + } + } + + //播放完成的回调 TODO } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeFloatView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeFloatView.kt index 2eb06663a0..90a65417db 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeFloatView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeFloatView.kt @@ -54,13 +54,14 @@ class NoticeFloatView constructor( pushContent = findViewById(R.id.notice_push_content) titleIconContainer = findViewById(R.id.module_push_app_icon_title) - //查看结果 TODO + //查看结果 pushCheck.setOnClickListener { pushData?.let { if (pushCheckDialog == null) { pushCheckDialog = NoticeCheckDialog(ContextHolderUtil.getContext()) } - pushCheckDialog!!.showCheckDialog(it.title, it.dbId) + pushCheckDialog!!.showCheckDialog(it) + } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java index 4fe0f6e1aa..91a1e701c0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java @@ -1,6 +1,9 @@ package com.mogo.eagle.core.function.hmi.ui.notice; import android.content.Context; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.View; import android.widget.ImageView; import androidx.annotation.NonNull; @@ -12,7 +15,11 @@ import com.mogo.eagle.core.function.hmi.R; import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer; import com.mogo.module.common.dialog.BaseFloatDialog; import com.mogo.module.common.view.SpacesItemDecoration; +import com.mogo.utils.BitmapHelper; import com.mogo.utils.ResourcesHelper; +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; +import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack; +import com.shuyu.gsyvideoplayer.video.base.GSYVideoView; import java.util.List; @@ -22,16 +29,23 @@ import java.util.List; * @since: 10/26/21 */ public class NoticeTrafficDialog extends BaseFloatDialog { + private String TAG = "AINotice"; private Context mContext; private RecyclerView mRecyclerView; private SimpleVideoPlayer mVideoPlayer; private NoticeTrafficStylePushData mPushData; private ImageView close; + private ImageView playImageView; + private ImageView thumbnailImage; + private GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder(); + public NoticeTrafficDialog(@NonNull Context context, NoticeTrafficStylePushData pushData) { super(context); mContext = context; mPushData = pushData; + mPushData.setPoiImgUrl("https://vd2.bdstatic.com/mda-mk1347dzxdmcre0y/sc/cae_h264/1635819498112313003/mda-mk1347dzxdmcre0y.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1635837585-0-0-5295f6658c7711ba7b4d3ef478a7fbaa&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest="); + mPushData.setIsVideo(true); initView(); } @@ -42,6 +56,8 @@ public class NoticeTrafficDialog extends BaseFloatDialog { public void initView() { setContentView(R.layout.notice_dialog_traffic_police); mVideoPlayer = findViewById(R.id.video_player); + thumbnailImage = findViewById(R.id.thumbnail_image); + playImageView = this.findViewById(R.id.window_video_play); close = findViewById(R.id.notice_traffic_dialog_close); close.setOnClickListener(v -> { dismiss(); @@ -61,18 +77,185 @@ public class NoticeTrafficDialog extends BaseFloatDialog { } NoticeTrafficAdapter adapter = new NoticeTrafficAdapter(mContext); mRecyclerView.setAdapter(adapter); - startLive(); + + mVideoPlayer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mVideoPlayer.getCurrentState() == GSYVideoView.CURRENT_STATE_PAUSE) {/*播放中*/ + resume(); + } else { + pause(); + } + } + }); +// startLive(); } + /** + * 暂停 + */ + private void pause() { + playImageView.setVisibility(View.VISIBLE); + thumbnailImage.setVisibility(View.GONE); + playImageView.setOnClickListener(v -> { + mVideoPlayer.onVideoResume(); + }); + thumbnailImage.setOnClickListener(v -> { + mVideoPlayer.onVideoResume(); + }); + } + + /** + * 继续 + */ + private void resume() { + playImageView.setImageResource(R.drawable.video_pause); + playImageView.setVisibility(View.GONE); + thumbnailImage.setVisibility(View.GONE); + } + + /** + * 播放结束后 + */ + private void complete(Bitmap firstbitmap, String path) { + thumbnailImage.setVisibility(View.VISIBLE); + thumbnailImage.setImageBitmap(firstbitmap); + playImageView.setImageResource(R.drawable.video_play); + playImageView.setVisibility(View.VISIBLE); + playImageView.setOnClickListener(v -> { + startLive(); + }); + thumbnailImage.setOnClickListener(v -> { + startLive(); + }); + } + + /** * 视频播放 */ private void startLive() { if (mPushData != null && mPushData.getIsVideo() == true) { - + try { + Log.d(TAG, "交警事故开始播放视频startLive"); + String videoUrl = mPushData.getPoiImgUrl(); + gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag("NoticeTrafficDialog") + .build(mVideoPlayer); + mVideoPlayer.getStartButton().performClick(); + thumbnailImage.setVisibility(View.GONE); + playImageView.setVisibility(View.GONE); + startVideoCallBack(videoUrl); + } catch (Exception e) { + e.printStackTrace(); + } } } + private void startVideoCallBack(String path) { + new Thread(new Runnable() { + @Override + public void run() { + Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(path);/*获取第一帧图*/ + mVideoPlayer.setVideoAllCallBack(new VideoAllCallBack() { + @Override + public void onAutoComplete(String url, Object... objects) { + complete(firstBitmap, path); + } + + @Override + public void onClickResume(String url, Object... objects) { + thumbnailImage.setVisibility(View.GONE); + playImageView.setVisibility(View.GONE); + } + + @Override + public void onClickStop(String url, Object... objects) { + Log.d(TAG, "onClickStop"); + } + + @Override + public void onStartPrepared(String url, Object... objects) { + Log.d(TAG, "onStartPrepared"); + } + + @Override + public void onPrepared(String url, Object... objects) { + } + + @Override + public void onClickStartIcon(String url, Object... objects) { + } + + @Override + public void onClickStartError(String url, Object... objects) { + } + + @Override + public void onClickStopFullscreen(String url, Object... objects) { + } + + @Override + public void onClickResumeFullscreen(String url, Object... objects) { + } + + @Override + public void onClickSeekbar(String url, Object... objects) { + } + + @Override + public void onClickSeekbarFullscreen(String url, Object... objects) { + } + + @Override + public void onEnterFullscreen(String url, Object... objects) { + } + + @Override + public void onQuitFullscreen(String url, Object... objects) { + } + + @Override + public void onQuitSmallWidget(String url, Object... objects) { + } + + @Override + public void onEnterSmallWidget(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekVolume(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekPosition(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekLight(String url, Object... objects) { + } + + @Override + public void onPlayError(String url, Object... objects) { + } + + @Override + public void onClickStartThumb(String url, Object... objects) { + } + + @Override + public void onClickBlank(String url, Object... objects) { + } + + @Override + public void onClickBlankFullscreen(String url, Object... objects) { + Log.d(TAG, "onClickBlankFullscreen"); + + } + }); + } + }).start(); + } + public void cancel() { } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/utils/FileUtils.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/utils/FileUtils.java new file mode 100644 index 0000000000..e558fa7a58 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/utils/FileUtils.java @@ -0,0 +1,29 @@ +package com.mogo.eagle.core.function.hmi.ui.utils; + +import java.util.regex.Pattern; + +/** + * @author Jing + * @description 文件工具类 + * @since: 11/2/21 + */ +public class FileUtils { + + /** + * @param path 文件链接 + * @return 视频文件 + */ + boolean isVideo(String path) { + String reg = "(mp4|flv|avi|rm|rmvb|wmv|mov)"; + Pattern p = Pattern.compile(reg); + boolean boo = p.matcher("url").find(); + return boo; + } + + boolean isImage(String path) { + String reg = "(jpg|png|jpeg|gif|bmp)"; + Pattern p = Pattern.compile(reg); + boolean boo = p.matcher("url").find(); + return boo; + } +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_pause.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_pause.png new file mode 100644 index 0000000000..2bc83b4e41 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_pause.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_play.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_play.png new file mode 100644 index 0000000000..4c733621b6 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/video_play.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml index e3c17b5030..4e1d752dc2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_check_with_accessory.xml @@ -50,12 +50,13 @@ + + + + + + #E63B4577 #D5D5D4 #3B4577 + #256BFF \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml index 588f4336aa..a8acbe58ec 100644 --- a/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml +++ b/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ - +