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 7eadd38ab6..df83f351c0 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,6 +14,8 @@ import com.mogo.module.apps.R; * 基础类:均衡器、方控学习、蓝牙、FM、车载设置、AUX */ public enum AppEnum { + // 酷我音乐 + KwMusic("酷我音乐", "cn.kuwo.kwmusiccar", R.drawable.ic_kuwo), // 爱趣听 WeCarFlow("爱趣听","com.tencent.wecarflow", R.drawable.module_apps_ic_we_car_flow ), //"QQ音乐", diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java index 700564dce6..f1e00886b6 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java @@ -15,7 +15,8 @@ public class NavigatorApps { private static AppInfo app = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi, 1 ); private static AppInfo app_ = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi_disable, 1 ); - private static AppInfo app2 = new AppInfo( "音乐", "com.tencent.wecarflow", "", 0, null, R.drawable.module_apps_ic_navigator_media, 2 ); +// private static AppInfo app2 = new AppInfo( "音乐", "com.tencent.wecarflow", "", 0, null, R.drawable.module_apps_ic_navigator_media, 2 ); + private static AppInfo app2 = new AppInfo( "音乐", "cn.kuwo.kwmusiccar", "", 0, null, R.drawable.module_apps_ic_navigator_media, 2 ); private static AppInfo app3 = new AppInfo( "车聊聊", "com.zhidao.imdemo", "", 0, null, R.drawable.module_apps_ic_navigator_im, 6 ); private static AppInfo app4 = new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_navigator_applist, 4 ); diff --git a/modules/mogo-module-apps/src/main/res/drawable/ic_kuwo.webp b/modules/mogo-module-apps/src/main/res/drawable/ic_kuwo.webp new file mode 100644 index 0000000000..82330db5fa Binary files /dev/null and b/modules/mogo-module-apps/src/main/res/drawable/ic_kuwo.webp differ diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml index 02d9555475..96f61eca7b 100644 --- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml +++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml @@ -9,7 +9,13 @@ + android:layout_height="match_parent" > + + + - - extends Presenter { * 下一首 */ public abstract void next(); + + /** + * 打开对应的应用 + */ + public abstract void openApp(); } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/KwPresenter.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/KwPresenter.java index 8faf72a28a..75e49e751a 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/KwPresenter.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/presenter/KwPresenter.java @@ -6,6 +6,7 @@ import android.os.Message; 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; @@ -14,10 +15,10 @@ import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; -import java.security.PrivilegedAction; - import cn.kuwo.autosdk.api.KWAPI; +import cn.kuwo.autosdk.api.OnGetSongImgUrlListener; import cn.kuwo.autosdk.api.PlayState; +import cn.kuwo.autosdk.api.PlayerStatus; import cn.kuwo.base.bean.Music; /** @@ -30,7 +31,7 @@ public class KwPresenter extends BaseMediaPresenter { private KWAPI kwapi; private boolean isBind = false; - private Music currentMusic; + private MediaInfoData currentMedia = new MediaInfoData(); public KwPresenter(IMusicView view) { super(view); @@ -45,35 +46,42 @@ public class KwPresenter extends BaseMediaPresenter { isBind = b; if (!isBind) { mView.onMusicStopped(); + }else{ + PlayerStatus currentState = kwapi.getPlayerStatus(); + Logger.d(TAG, "check current status: " + currentState); + if(currentState == PlayerStatus.BUFFERING||currentState == PlayerStatus.PLAYING){ + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PLAYING); + kwapi.getSongPicUrl(kwapi.getNowPlayingMusic(), onGetSongImgUrlListener); + startTrackTrackProgress(); + mView.onMusicPlaying(); + } } }); kwapi.registerExitListener(() -> { Logger.d(TAG, "onExit==="); - mView.onMusicStopped(); + mView.onAppExit(); }); kwapi.registerPlayerStatusListener((playerStatus, music) -> { - currentMusic = music; - MediaInfoData mediaInfoData = new MediaInfoData(); - mediaInfoData.setMediaName(music.name); - mediaInfoData.setMediaImg(music.imageURL); - Logger.d(TAG, - "onPlayerStatusChange: " + mediaInfoData + " playStatus: " + playerStatus); - mView.onMediaInfoChanged(mediaInfoData); + Logger.d(TAG, "onPlayerStatusListener: " + playerStatus); switch (playerStatus) { - case PLAYING: case BUFFERING: + kwapi.getSongPicUrl(music, onGetSongImgUrlListener); + break; + case PLAYING: + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PLAYING); + kwapi.getSongPicUrl(music, onGetSongImgUrlListener); startTrackTrackProgress(); mView.onMusicPlaying(); break; + case INIT: case PAUSE: + case STOP: + currentMedia.setPlayState(MusicConstant.PLAY_STATE_PAUSE_OR_STOP); stopTrackTrackProgress(); mView.onMusicPause(); break; - case STOP: - stopTrackTrackProgress(); - break; default: break; } @@ -101,11 +109,11 @@ public class KwPresenter extends BaseMediaPresenter { @Override public void play(MediaInfoData mediaInfoData) { - if (kwapi.isKuwoRunning()) { +// if (kwapi.isKuwoRunning()) { kwapi.setPlayState(PlayState.STATE_PLAY); - } else { - kwapi.randomPlayMusic(); - } +// } else { +// kwapi.randomPlayMusic(); +// } } @Override @@ -138,8 +146,9 @@ public class KwPresenter extends BaseMediaPresenter { @Override public boolean handleMessage(Message msg) { if (isTrackingProgress) { - mView.onMusicProgress(kwapi.getCurrentMusicDuration(), currentMusic.duration); - msg.getTarget().sendEmptyMessageDelayed(MSG_TRACK_PROGRESS, MSG_TRACK_PROGRESS_DELAY); + mView.onMusicProgress(kwapi.getCurrentPos(), kwapi.getCurrentMusicDuration()); + msg.getTarget().sendEmptyMessageDelayed(MSG_TRACK_PROGRESS, + MSG_TRACK_PROGRESS_DELAY); } return false; } @@ -151,12 +160,37 @@ public class KwPresenter extends BaseMediaPresenter { private boolean isTrackingProgress = false; private void startTrackTrackProgress() { - isTrackingProgress = true; - handler.sendEmptyMessageDelayed(MSG_TRACK_PROGRESS, MSG_TRACK_PROGRESS_DELAY); + if(!isTrackingProgress) { + isTrackingProgress = true; + handler.sendEmptyMessageDelayed(MSG_TRACK_PROGRESS, MSG_TRACK_PROGRESS_DELAY); + } } private void stopTrackTrackProgress() { - isTrackingProgress = false; - handler.removeMessages(MSG_TRACK_PROGRESS); + if(isTrackingProgress) { + isTrackingProgress = false; + handler.removeMessages(MSG_TRACK_PROGRESS); + } + } + + private OnGetSongImgUrlListener onGetSongImgUrlListener = new OnGetSongImgUrlListener() { + @Override + public void onGetSongImgUrlSucessed(Music music, String s) { + currentMedia.setMediaName(music.name); + currentMedia.setMediaImg(s); + Logger.d(TAG, + "onGetSongImgUrlSucessed: " + currentMedia); + handler.post(() -> mView.onMediaInfoChanged(currentMedia)); + } + + @Override + public void onGetSongImgUrlFailed(Music music, int i) { + Logger.e(TAG, "onGetSongImgUrlFailed: " + i); + } + }; + + @Override + public void openApp(){ + kwapi.startAPP(true); } } 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 66ab3efecc..4aa6dd259c 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 @@ -195,4 +195,9 @@ public class WeCarFlowPresenter extends BaseMediaPresenter { public void next() { FlowPlayControl.getInstance().doNext(); } + + @Override + public void openApp() { + FlowPlayControl.getInstance().startPlayActivity(context); + } } 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 d0379ff238..bf6eee1611 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 @@ -18,4 +18,6 @@ public interface IMusicView extends IView { void onMusicStopped(); void onMusicProgress(long current,long total); + + void onAppExit(); } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/AnimCircleImageView.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/AnimCircleImageView.java index 280aee83e1..77cee5ce4e 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/AnimCircleImageView.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/AnimCircleImageView.java @@ -79,7 +79,9 @@ public class AnimCircleImageView extends ImageView { } public void startAnim() { - if (isRotating == true) return; + if (isRotating){ + return; + } isRotateEnable = true; isRotating = true; currentDegree = savedDegree; diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow.java similarity index 98% rename from modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java rename to modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow.java index dfa6be7426..45ea10d832 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow.java @@ -1,4 +1,4 @@ -package com.mogo.module.media; +package com.mogo.module.media.window; import android.content.BroadcastReceiver; import android.content.Context; @@ -8,12 +8,14 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import com.mogo.map.marker.IMogoMarker; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.media.MediaConstants; +import com.mogo.module.media.R; +import com.mogo.module.media.ServiceMediaHandler; import com.mogo.module.media.constants.LeTingFieldConstants; import com.mogo.module.media.constants.QQMusicFieldConstants; import com.mogo.module.media.listener.NoDoubleClickListener; @@ -30,7 +32,6 @@ import com.mogo.module.media.view.MediaView; import com.mogo.module.media.widget.AnimCircleImageView; import com.mogo.module.media.widget.NoScrollSeekBar; import com.mogo.module.media.widget.ScrollingTextView; -import com.mogo.module.service.marker.MapMarkerManager; import com.mogo.utils.ActivityLifecycleManager; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; @@ -65,15 +66,9 @@ public class MediaWindow implements MediaView{ private boolean mTwoChange = false; private boolean isFirstPlay = false; - private Runnable mRunnable = new Runnable() { - @Override - public void run() { - MusicControlBroadCast.sendGetMusicPlayStateBroadcast(); - } - }; + private Runnable mRunnable = MusicControlBroadCast::sendGetMusicPlayStateBroadcast; public void initMedia(Context context){ - mContext = context; mPresenter = new MediaPresenter(this); registerMediaReceiver(); diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java similarity index 93% rename from modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java rename to modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java index 1ba6514075..818bf5e792 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java @@ -1,7 +1,6 @@ -package com.mogo.module.media; +package com.mogo.module.media.window; import android.content.Context; -import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -11,18 +10,17 @@ import android.widget.TextView; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; +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.BaseMediaPresenter; import com.mogo.module.media.presenter.KwPresenter; -import com.mogo.module.media.presenter.WeCarFlowPresenter; 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.LaunchUtils; import com.mogo.utils.WindowUtils; import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; @@ -110,7 +108,7 @@ public class MediaWindow2 implements IMusicView { mWindowView.setOnClickListener(new NoDoubleClickListener() { @Override public void onClicks(View view) { - openAqtApp(); + mPresenter.openApp(); } }); @@ -125,7 +123,7 @@ public class MediaWindow2 implements IMusicView { mPresenter.pause(mMediaInfoData); } } else { - openAqtApp(); + mPresenter.openApp(); } } }); @@ -171,6 +169,16 @@ public class MediaWindow2 implements IMusicView { if (mWindowCurrTime != null) { mWindowCurrTime.setText(Utils.calculateTime((int) mMediaInfoData.getCurTime())); } + + if( mMediaInfoData.getPlayState() == MusicConstant.PLAY_STATE_PLAYING) { + // kw音乐做的容错 + if (mWindowPlayPause != null) { + mWindowPlayPause.setImageResource(R.drawable.module_media_window_pop_play); + } + if (mCircleImg != null) { + mCircleImg.startAnim(); + } + } } if (mCircleImg != null) { @@ -257,11 +265,8 @@ public class MediaWindow2 implements IMusicView { } } - private void openAqtApp() { - try { - LaunchUtils.launchByPkg(mContext, "com.tencent.wecarflow"); - } catch (Exception e) { - e.printStackTrace(); - } + @Override + public void onAppExit() { + mWindowView.setVisibility(View.GONE); } }