From d65bf7a709a19184c2e0e8cfc87a550f30fb5062 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 5 Jun 2020 15:30:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E6=8E=A5=E5=85=A5=E7=88=B1?= =?UTF-8?q?=E8=B6=A3=E5=90=AC=EF=BC=8C=E5=9F=BA=E6=9C=AC=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../com/mogo/module/apps/model/AppEnum.java | 3 +- .../module/media/MediaCardViewProvider.java | 2 - .../media/{widget => }/MediaWindow2.java | 86 +++++++++-------- .../module/media/model/MediaInfoData.java | 9 ++ .../media/presenter/WeCarFlowPresenter.java | 92 ++++++++++++++++--- .../mogo/module/media/utils/LaunchUtils.java | 29 ++++++ .../mogo/module/media/view/IMusicView.java | 8 +- 8 files changed, 170 insertions(+), 61 deletions(-) rename modules/mogo-module-media/src/main/java/com/mogo/module/media/{widget => }/MediaWindow2.java (79%) create mode 100644 modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java diff --git a/app/build.gradle b/app/build.gradle index d6878216d1..8a69d4c097 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,7 +55,7 @@ android { sourceSets { main { - manifest.srcFile 'src/independent/AndroidManifest.xml' + manifest.srcFile 'src/main/AndroidManifest.xml' } launcher { manifest.srcFile 'src/launcher/AndroidManifest.xml' diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index ac70be137a..8c545cc2dc 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -14,7 +14,8 @@ import com.mogo.module.apps.R; * 基础类:均衡器、方控学习、蓝牙、FM、车载设置、AUX */ public enum AppEnum { - + // 爱趣听 + WeCarFlow("爱趣听","com.tencent.wecarflow", R.drawable.module_apps_ic_qq_music ), //"QQ音乐", QQMusic( "QQ音乐", "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ), diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java index fa467bc990..c2e341752b 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaCardViewProvider.java @@ -11,11 +11,9 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoNaviListener; -import com.mogo.module.media.widget.MediaWindow2; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.ModuleType; -import com.mogo.utils.logger.Logger; @Route( path = MediaConstants.TAG ) public class MediaCardViewProvider implements IMogoModuleProvider { diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java similarity index 79% rename from modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/MediaWindow2.java rename to modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java index 64af4f4009..359302f586 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java @@ -1,4 +1,4 @@ -package com.mogo.module.media.widget; +package com.mogo.module.media; import android.content.Context; import android.view.LayoutInflater; @@ -7,15 +7,18 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.mogo.module.media.R; -import com.mogo.module.media.ServiceMediaHandler; import com.mogo.module.media.constants.MusicConstant; import com.mogo.module.media.listener.NoDoubleClickListener; import com.mogo.module.media.model.MediaInfoData; import com.mogo.module.media.presenter.WeCarFlowPresenter; +import com.mogo.module.media.utils.LaunchUtils; import com.mogo.module.media.utils.MusicControlBroadCast; import com.mogo.module.media.utils.Utils; import com.mogo.module.media.view.IMusicView; +import com.mogo.module.media.widget.AnimCircleImageView; +import com.mogo.module.media.widget.NoScrollSeekBar; +import com.mogo.module.media.widget.ScrollingTextView; +import com.mogo.utils.TipToast; import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; @@ -46,13 +49,6 @@ public class MediaWindow2 implements IMusicView { private boolean mTwoChange = false; private boolean isFirstPlay = false; - private Runnable mRunnable = new Runnable() { - @Override - public void run() { - MusicControlBroadCast.sendGetMusicPlayStateBroadcast(); - } - }; - public void initMedia(Context context) { mContext = context; mPresenter = new WeCarFlowPresenter(this); @@ -91,26 +87,22 @@ public class MediaWindow2 implements IMusicView { mWindowMediaCenter.setOnClickListener(new NoDoubleClickListener() { @Override public void onClicks(View view) { - if (mMediaInfoData != null) { - MusicControlBroadCast.openMediaApp(mMediaInfoData.getType()); - } else { - MusicControlBroadCast.openMediaApp(1); - } + openAqtApp(); } }); mWindowPlayPause.setOnClickListener(new NoDoubleClickListener() { @Override public void onClicks(View view) { - if (isFirstPlay) { - if (mMediaInfoData != null) { - MusicControlBroadCast.listeningSendData(mMediaInfoData); - } - } else { - if (mMediaInfoData != null) { - MusicControlBroadCast.commandPlayPause(mMediaInfoData.getType(), - mMediaInfoData.getPlayState()); + if (mMediaInfoData != null) { + if (mMediaInfoData.getPlayState() == MusicConstant.PLAY_STATE_PAUSE_OR_STOP) { + mPresenter.play(mMediaInfoData); + }else{ + // 没有做详细判断,不是暂停就是播放 + mPresenter.pause(mMediaInfoData); } + }else{ + openAqtApp(); } } }); @@ -118,8 +110,8 @@ public class MediaWindow2 implements IMusicView { mWindowPlayNext.setOnClickListener(new NoDoubleClickListener() { @Override public void onClicks(View view) { - if (mMediaInfoData != null) { - MusicControlBroadCast.commandNext(mMediaInfoData.getType()); + if (mPresenter != null) { + mPresenter.next(); } } }); @@ -171,11 +163,8 @@ public class MediaWindow2 implements IMusicView { } @Override - public void onMusicPlaying(MediaInfoData mediaInfoData) { - Logger.d(TAG, "onMusicPlaying: " + mediaInfoData); - addWindowView(); - mMediaInfoData = mediaInfoData; - updateWindowUI(); + public void onMusicPlaying() { + Logger.d(TAG, "onMusicPlaying"); if (mWindowPlayPause != null) { mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_play); } @@ -186,10 +175,8 @@ public class MediaWindow2 implements IMusicView { } @Override - public void onMusicPause(MediaInfoData mediaInfoData) { - Logger.d(TAG, "onMusicPause: " + mediaInfoData); - mMediaInfoData = mediaInfoData; - updateWindowUI(); + public void onMusicPause() { + Logger.d(TAG, "onMusicPause: "); if (mWindowPlayPause != null) { mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_pause); } @@ -200,23 +187,34 @@ public class MediaWindow2 implements IMusicView { } @Override - public void onMusicStoped(MediaInfoData mediaInfoData) { - Logger.d(TAG, "onMusicStoped: " + mediaInfoData); - mMediaInfoData = mediaInfoData; - updateWindowUI(); + public void onMusicStopped() { + Logger.d(TAG, "onMusicStopped"); if (mWindowPlayPause != null) { mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_pause); } - if (mCircleImg != null) { mCircleImg.stopAnim(); } } + @Override + public void onMediaInfoChanged(MediaInfoData mediaInfoData) { + if(!isFirstPlay) { + mMediaInfoData = mediaInfoData; + addWindowView(); + updateWindowUI(); + } + isFirstPlay = false; + } + @Override public void onMusicProgress(long current, long total) { - Logger.d(TAG, "onMusicProgress==current: " + current + " total: " + total); +// Logger.d(TAG, "onMusicProgress==current: " + current + " total: " + total); + if(mMediaInfoData!=null) { + mMediaInfoData.setCurTime((int) current); + mMediaInfoData.setMaxTime((int) total); + } if (mWindowCurrTime != null) { mWindowCurrTime.setText(Utils.calculateTime((int) current)); mWindowMaxTime.setText(Utils.calculateTime((int) total)); @@ -231,4 +229,12 @@ public class MediaWindow2 implements IMusicView { e.printStackTrace(); } } + + private void openAqtApp(){ + try { + LaunchUtils.launchByPkg(mContext,"com.tencent.wecarflow"); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java index aafffdbe03..826e47ae51 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/model/MediaInfoData.java @@ -142,4 +142,13 @@ public class MediaInfoData implements Serializable { public void setBookInfo(String bookInfo) { this.bookInfo = bookInfo; } + + @Override + public String toString() { + return "MediaInfoData{" + + "mediaName='" + mediaName + '\'' + + ", mediaImg='" + mediaImg + '\'' + + ", playState=" + playState + + '}'; + } } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java index c56637d26b..3ebbc6e96f 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/WeCarFlowPresenter.java @@ -5,16 +5,22 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.module.media.MediaConstants; import com.mogo.module.media.constants.MusicConstant; import com.mogo.module.media.model.MediaInfoData; import com.mogo.module.media.view.IMusicView; +import com.mogo.service.IMogoServiceApis; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; import com.tencent.wecarflow.flowoutside.sdk.BindListener; import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl; import com.tencent.wecarflow.flowoutside.sdk.MediaChangeListener; import com.tencent.wecarflow.flowoutside.sdk.MediaInfo; import com.tencent.wecarflow.flowoutside.sdk.PlayStateListener; +import com.tencent.wecarflow.flowoutside.sdk.QueryCallback; /** * 爱趣听presenter @@ -31,33 +37,94 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { private MediaInfoData currentMedia; + private boolean isBind = true; + private IMogoServiceApis serviceApis; + + private QueryCallback isPlayingCallback = new QueryCallback() { + @Override + public void onError(int i) { + + } + + @Override + public void onSuccess(Boolean aBoolean) { + currentMedia.setPlayState(aBoolean ? MusicConstant.PLAY_STATE_PLAYING : + MusicConstant.PLAY_STATE_PAUSE_OR_STOP); + if (mView != null) { + mView.onMediaInfoChanged(currentMedia); + } + } + }; + + private QueryCallback currentCallback = new QueryCallback() { + @Override + public void onError(int i) { + + } + + @Override + public void onSuccess(MediaInfo mediaInfo) { + currentMedia.setMediaName(mediaInfo.getMediaName()); + currentMedia.setMediaImg(mediaInfo.getMediaImage()); + if (mView != null) { + mView.onMediaInfoChanged(currentMedia); + } + } + }; + @Override public void init(Context context) { this.context = context; - FlowPlayControl.getInstance().bindPlayService(context); + currentMedia = new MediaInfoData(); + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); + + serviceApis = + (IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context); + + serviceApis.getStatusManagerApi().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.MAIN_PAGE_RESUME, new IMogoStatusChangedListener() { + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (isTrue) { + Logger.d(TAG, "onResume, isBind: " + isBind); + // 需要在resume时候判断绑定关系是否正常 + if (!isBind) { + // 未绑定,需要重新绑定,同时第一次绑定初始化也是在此处 + FlowPlayControl.getInstance().bindPlayService(context); + } + } + } + }); + FlowPlayControl.getInstance().addBindListener(new BindListener() { @Override public void onServiceConnected() { Logger.d(TAG, "onServiceConnected==="); + isBind = true; + FlowPlayControl.getInstance().queryPlaying(isPlayingCallback); + FlowPlayControl.getInstance().queryCurrent(currentCallback); } @Override public void onServiceDisconnected() { Logger.e(TAG, "onServiceDisconnected==="); + isBind = false; } @Override public void onBindDied() { Logger.e(TAG, "onBindDied==="); + isBind = false; } }); FlowPlayControl.getInstance().addMediaChangeListener(new MediaChangeListener() { @Override public void onMediaChange(MediaInfo mediaInfo) { - currentMedia = new MediaInfoData(); + Logger.d(TAG, "onMediaChange: " + mediaInfo); + Logger.d(TAG, "onMediaChange, img: " + mediaInfo.getMediaImage()); currentMedia.setMediaName(mediaInfo.getMediaName()); - currentMedia.setMediaUrl(mediaInfo.getMediaImage()); + currentMedia.setMediaImg(mediaInfo.getMediaImage()); + mView.onMediaInfoChanged(currentMedia); } @Override @@ -71,7 +138,8 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { public void onStart() { if (mView != null && currentMedia != null) { currentMedia.setPlayState(MusicConstant.PLAY_STATE_PLAYING); - mView.onMusicPlaying(currentMedia); + mView.onMusicPlaying(); + mView.onMediaInfoChanged(currentMedia); } } @@ -79,7 +147,8 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { public void onPause() { if (mView != null && currentMedia != null) { currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); - mView.onMusicPause(currentMedia); + mView.onMusicPause(); + mView.onMediaInfoChanged(currentMedia); } } @@ -87,7 +156,8 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { public void onStop() { if (mView != null && currentMedia != null) { currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); - mView.onMusicStoped(currentMedia); + mView.onMusicStopped(); + mView.onMediaInfoChanged(currentMedia); } } @@ -98,6 +168,8 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { } } }); + + FlowPlayControl.getInstance().bindPlayService(context); } @Override @@ -124,12 +196,4 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { public void next() { FlowPlayControl.getInstance().doNext(); } - - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - if (context != null) { - FlowPlayControl.getInstance().unbindPlayService(context); - } - } } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java new file mode 100644 index 0000000000..653a77601e --- /dev/null +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java @@ -0,0 +1,29 @@ +package com.mogo.module.media.utils; + +import android.content.Context; +import android.content.Intent; + +/** + * @author congtaowang + * @since 2020-02-03 + *

+ * 描述 + */ +public class LaunchUtils { + + /** + * 通过包名启动app + * + * @param context + * @param pkg 包名 + */ + public static void launchByPkg( Context context, String pkg ) throws Exception { + Intent intent = getLaunchIntentForPackage( context, pkg ); + intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); + context.startActivity( intent ); + } + + public static Intent getLaunchIntentForPackage( Context context, String pkg ) { + return context.getPackageManager().getLaunchIntentForPackage( pkg ); + } +} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java index 853a9cde86..d0379ff238 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/view/IMusicView.java @@ -9,11 +9,13 @@ import com.mogo.module.media.model.MediaInfoData; * @author tongchenfei */ public interface IMusicView extends IView { - void onMusicPlaying(MediaInfoData mediaInfoData); + void onMediaInfoChanged(MediaInfoData mediaInfoData); - void onMusicPause(MediaInfoData mediaInfoData); + void onMusicPlaying(); - void onMusicStoped(MediaInfoData mediaInfoData); + void onMusicPause(); + + void onMusicStopped(); void onMusicProgress(long current,long total); }