Merge branch 'dev' of gitlab.zhidaoauto.com:ecos/yycp-service/Launcher into dev

This commit is contained in:
wangcongtao
2020-06-16 17:06:24 +08:00
21 changed files with 292 additions and 49 deletions

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>

View File

@@ -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音乐",

View File

@@ -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 );

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1,11 +1,13 @@
package com.mogo.module.common.entity;
import com.mogo.commons.data.BaseData;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("unused")
public class MarkerCardResult implements Serializable {
public class MarkerCardResult extends BaseData {
private List<String> dataType; // 要查询的类型
private List<MarkerCarChat> carChat;

View File

@@ -6,11 +6,15 @@ import android.text.TextUtils;
import java.io.Serializable;
/**
* 道路情报V2X预警地图道路事件POI违章停车POI等
*/
@SuppressWarnings("unused")
public class MarkerExploreWayItem implements Serializable {
private String thumbnail;
private String url;
private String content;
public String getThumbnail() {
if (TextUtils.isEmpty(thumbnail)) {
@@ -34,11 +38,20 @@ public class MarkerExploreWayItem implements Serializable {
this.url = url;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "MarkerExploreWayItem{" +
"thumbnail='" + thumbnail + '\'' +
", url='" + url + '\'' +
", content='" + content + '\'' +
'}';
}
}

View File

@@ -9,33 +9,35 @@ package com.mogo.module.common.entity;
*/
public interface MarkerPoiTypeEnum {
//加油站
public String GAS_STATION = "10001";
String GAS_STATION = "10001";
//交通检查
public String TRAFFIC_CHECK = "10002";
String TRAFFIC_CHECK = "10002";
//封路
public String ROAD_CLOSED = "10003";
String ROAD_CLOSED = "10003";
//商场打折
public String SHOP_DISCOUNT = "10004";
String SHOP_DISCOUNT = "10004";
//4S店
public String FOURS_4S = "10005";
String FOURS_4S = "10005";
//施工
public String FOURS_ROAD_WORK = "10006";
String FOURS_ROAD_WORK = "10006";
//拥堵
public String FOURS_BLOCK_UP = "10007";
String FOURS_BLOCK_UP = "10007";
//积水
public String FOURS_PONDING = "10008";
String FOURS_PONDING = "10008";
//超市打折
public String FOURS_SHOP_FREE = "10009";
String FOURS_SHOP_FREE = "10009";
//浓雾
public String FOURS_FOG = "10010";
String FOURS_FOG = "10010";
//结冰
public String FOURS_ICE = "10011";
String FOURS_ICE = "10011";
//停车场
public String FOURS_PARKING = "10012";
String FOURS_PARKING = "10012";
//事故
public String FOURS_ACCIDENT = "10013";
String FOURS_ACCIDENT = "10013";
//身边
public String FOURS_NEALY = "10014";
String FOURS_NEALY = "10014";
//实时路况
public String FOURS_LIVING = "10015";
String FOURS_LIVING = "10015";
//违章停车
String ILLEGAL_PARK_LIVING = "10016";
}

View File

@@ -9,7 +9,13 @@
<FrameLayout
android:id="@+id/module_main_id_map_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/module_main_id_search_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<FrameLayout
android:id="@+id/module_main_id_map_left_shadow_frame"
@@ -48,11 +54,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/module_main_id_search_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/module_main_id_cover_up"
android:layout_width="match_parent"

View File

@@ -46,6 +46,7 @@ dependencies {
// 爱趣听sdk上传到了公司的maven用来规避RELEASE时ClassDefNotFound异常后续若爱趣听有新的sdk也需要上传maven
implementation "com.mogo.tencent.wecarflow:mogo-wecarflow:+@aar"
implementation "com.mogo.kwmusic:mogo-kwmusic:+"
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogomap

View File

@@ -11,6 +11,7 @@ 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.window.MediaWindow2;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;

View File

@@ -50,4 +50,9 @@ public abstract class BaseMediaPresenter<V extends IView> extends Presenter<V> {
* 下一首
*/
public abstract void next();
/**
* 打开对应的应用
*/
public abstract void openApp();
}

View File

@@ -0,0 +1,196 @@
package com.mogo.module.media.presenter;
import android.content.Context;
import android.os.Handler;
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;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.logger.Logger;
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;
/**
* 适配酷我的presenter
*
* @author tongchenfei
*/
public class KwPresenter extends BaseMediaPresenter<IMusicView> {
private static final String TAG = "KwPresenter";
private KWAPI kwapi;
private boolean isBind = false;
private MediaInfoData currentMedia = new MediaInfoData();
public KwPresenter(IMusicView view) {
super(view);
}
@Override
public void init(Context context) {
kwapi = KWAPI.createKWAPI(context, "auto");
kwapi.registerConnectedListener(b -> {
Logger.d(TAG, "onConnected: " + b);
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.onAppExit();
});
kwapi.registerPlayerStatusListener((playerStatus, music) -> {
Logger.d(TAG, "onPlayerStatusListener: " + playerStatus);
switch (playerStatus) {
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;
default:
break;
}
});
IMogoServiceApis 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) {
// 未绑定,需要重新绑定,同时第一次绑定初始化也是在此处
kwapi.bindAutoSdkService();
}
}
}
});
kwapi.bindAutoSdkService();
}
@Override
public void play(MediaInfoData mediaInfoData) {
// if (kwapi.isKuwoRunning()) {
kwapi.setPlayState(PlayState.STATE_PLAY);
// } else {
// kwapi.randomPlayMusic();
// }
}
@Override
public void pause(MediaInfoData mediaInfoData) {
if (kwapi.isKuwoRunning()) {
kwapi.setPlayState(PlayState.STATE_PAUSE);
}
}
@Override
public void stop(MediaInfoData mediaInfoData) {
}
@Override
public void pre() {
if (kwapi.isKuwoRunning()) {
kwapi.setPlayState(PlayState.STATE_PRE);
}
}
@Override
public void next() {
if (kwapi.isKuwoRunning()) {
kwapi.setPlayState(PlayState.STATE_NEXT);
}
}
private Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (isTrackingProgress) {
mView.onMusicProgress(kwapi.getCurrentPos(), kwapi.getCurrentMusicDuration());
msg.getTarget().sendEmptyMessageDelayed(MSG_TRACK_PROGRESS,
MSG_TRACK_PROGRESS_DELAY);
}
return false;
}
};
private Handler handler = new Handler(callback);
private static final int MSG_TRACK_PROGRESS = 1001;
private static final long MSG_TRACK_PROGRESS_DELAY = 1000;
private boolean isTrackingProgress = false;
private void startTrackTrackProgress() {
if(!isTrackingProgress) {
isTrackingProgress = true;
handler.sendEmptyMessageDelayed(MSG_TRACK_PROGRESS, MSG_TRACK_PROGRESS_DELAY);
}
}
private void stopTrackTrackProgress() {
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);
}
}

View File

@@ -195,4 +195,9 @@ public class WeCarFlowPresenter extends BaseMediaPresenter<IMusicView> {
public void next() {
FlowPlayControl.getInstance().doNext();
}
@Override
public void openApp() {
FlowPlayControl.getInstance().startPlayActivity(context);
}
}

View File

@@ -18,4 +18,6 @@ public interface IMusicView extends IView {
void onMusicStopped();
void onMusicProgress(long current,long total);
void onAppExit();
}

View File

@@ -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;

View File

@@ -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();

View File

@@ -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,16 +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.WeCarFlowPresenter;
import com.mogo.module.media.presenter.KwPresenter;
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;
@@ -35,7 +35,7 @@ public class MediaWindow2 implements IMusicView {
public static final String TAG = MediaWindow2.class.getName();
private Context mContext;
private WeCarFlowPresenter mPresenter;
private KwPresenter mPresenter;
private MediaInfoData mMediaInfoData = new MediaInfoData();
@@ -54,7 +54,7 @@ public class MediaWindow2 implements IMusicView {
public void initMedia(Context context) {
mContext = context;
mPresenter = new WeCarFlowPresenter(this);
mPresenter = new KwPresenter(this);
mPresenter.init(context);
if(DebugConfig.isLauncher()) {
@@ -108,7 +108,7 @@ public class MediaWindow2 implements IMusicView {
mWindowView.setOnClickListener(new NoDoubleClickListener() {
@Override
public void onClicks(View view) {
openAqtApp();
mPresenter.openApp();
}
});
@@ -123,7 +123,7 @@ public class MediaWindow2 implements IMusicView {
mPresenter.pause(mMediaInfoData);
}
} else {
openAqtApp();
mPresenter.openApp();
}
}
});
@@ -169,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) {
@@ -221,6 +231,8 @@ public class MediaWindow2 implements IMusicView {
if (mCircleImg != null) {
mCircleImg.stopAnim();
}
}
@Override
@@ -253,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);
}
}

View File

@@ -135,6 +135,9 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
case MarkerPoiTypeEnum.FOURS_LIVING:
ivIcon.setImageResource( R.drawable.icon_map_marker_living_light );
break;
case MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING:
ivIcon.setImageResource( R.drawable.module_service_ic_rc_illegal_park_light );
break;
default:
ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2_light );
break;

View File

@@ -101,6 +101,9 @@ public class MapMarkerView extends MapMarkerBaseView {
case MarkerPoiTypeEnum.FOURS_LIVING:
ivIcon.setImageResource( R.drawable.icon_map_marker_living );
break;
case MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING:
ivIcon.setImageResource( R.drawable.module_service_ic_rc_illegal_park );
break;
case MarkerPoiTypeEnum.FOURS_PARKING:
default:
ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2 );

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB