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/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_traffic_police.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml index c69d6efcd2..0c0a7e75e7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml @@ -43,6 +43,29 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/notice_traffic_dialog_title" /> + + + + - +