1. 车聊聊电话和音乐浮窗的互斥

2. 添加模块资源释放回调
This commit is contained in:
wangcongtao
2020-09-24 16:59:17 +08:00
parent 87bc02aeda
commit d33741db28
13 changed files with 139 additions and 32 deletions

View File

@@ -20,7 +20,7 @@ import com.mogo.service.module.ModuleType;
public class MediaCardViewProvider implements IMogoModuleProvider {
private static final String TAG = "MediaCardViewProvider";
private MediaWindow2 mediaWindow2;
@Override
public Fragment createFragment( Context context, Bundle data ) {
@@ -33,7 +33,7 @@ public class MediaCardViewProvider implements IMogoModuleProvider {
@Override
public void init( Context context ) {
ServiceMediaHandler.init( context );
MediaWindow2 mediaWindow2 = new MediaWindow2();
mediaWindow2 = new MediaWindow2();
mediaWindow2.initMedia(context);
}
@@ -88,4 +88,12 @@ public class MediaCardViewProvider implements IMogoModuleProvider {
public String getAppName() {
return "";
}
@Override
public void onDestroy() {
if ( mediaWindow2 != null ) {
mediaWindow2.onDestroy();
}
mediaWindow2 = null;
}
}

View File

@@ -11,6 +11,7 @@ import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant;
import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager;
import com.mogo.module.carchattingprovider.ICarsChattingProvider;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.analytics.IMogoAnalytics;
@@ -53,6 +54,8 @@ public class ServiceMediaHandler {
private static IMogoAuthorizeModuleManager mMogoAuthorizeModuleManager;
private static IMogoMarkerService sMarkerService;
private static ICarsChattingProvider sCarsChattingProvider;
public static void init(Context context) {
mApis = (MogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context);
mMapService = mApis.getMapServiceApi();
@@ -73,6 +76,8 @@ public class ServiceMediaHandler {
mMogoADASController = mApis.getAdasControllerApi();
mMogoAuthorizeModuleManager = (IMogoAuthorizeModuleManager) ARouter.getInstance().build(AuthorizeConstant.PROVIDER_MODULE).navigation(context);
sMarkerService = mApis.getMarkerService();
sCarsChattingProvider = ARouter.getInstance().navigation( ICarsChattingProvider.class );
}
public static IMogoADASController getMogoADASController(){
@@ -157,6 +162,10 @@ public class ServiceMediaHandler {
return mMogoDataManager;
}
public static MogoServiceApis getApis() {
return mApis;
}
/**
* 这个注册的第一个参数是模块名称,目的是只给当前显示的卡片分发事件
* @return
@@ -183,6 +192,11 @@ public class ServiceMediaHandler {
return sMarkerService;
}
public static ICarsChattingProvider getCarsChattingApis() {
isApisNull( sCarsChattingProvider );
return sCarsChattingProvider;
}
public static void isApisNull( Object object){
if (isObjStaticNull(object)){
init(AbsMogoApplication.getApp());

View File

@@ -12,11 +12,13 @@ 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.carchattingprovider.ICallProviderResponse;
import com.mogo.module.common.glide.SkinAbleBitmapTarget;
import com.mogo.module.media.MediaConstants;
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.CallProviderResponseAdapter;
import com.mogo.module.media.listener.NoDoubleClickListener;
import com.mogo.module.media.model.MediaInfoData;
import com.mogo.module.media.presenter.BaseMediaPresenter;
@@ -25,6 +27,7 @@ import com.mogo.module.media.presenter.PresenterFactory;
import com.mogo.module.media.utils.Utils;
import com.mogo.module.media.view.IMusicView;
import com.mogo.module.media.widget.AnimCircleImageView;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.WindowUtils;
import com.mogo.utils.glide.GlideApp;
@@ -38,7 +41,7 @@ import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl;
*
* @author tongchenfei
*/
public class MediaWindow2 implements IMusicView {
public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener {
public static final String TAG = MediaWindow2.class.getName();
private Context mContext;
@@ -58,6 +61,9 @@ public class MediaWindow2 implements IMusicView {
private boolean mHasAddWindow = false;
private boolean mTwoChange = false;
private boolean isFirstPlay = false;
private boolean mIsCallChatWindowVisible;
private ICallProviderResponse mCallProviderResponse;
public void initMedia(Context context) {
mContext = context;
@@ -76,14 +82,34 @@ public class MediaWindow2 implements IMusicView {
});
}
ServiceMediaHandler.getIMogoStatusManager().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.ACC_STATUS, (descriptor, isTrue) -> {
if (descriptor == StatusDescriptor.ACC_STATUS&&!isTrue) {
ServiceMediaHandler.getMogoWindowManager().removeView(mWindowView);
mHasAddWindow = false;
}
});
ServiceMediaHandler.getIMogoStatusManager().registerStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.ACC_STATUS, this);
isFirstPlay = true;
// 车聊聊才是王
mCallProviderResponse = new CallProviderResponseAdapter(){
@Override
public void callWindowStatus( boolean b ) {
Logger.d( TAG, "callWindowStatus: "+ b);
mIsCallChatWindowVisible = b;
if ( !mHasAddWindow || mWindowView == null ) {
return;
}
if ( mIsCallChatWindowVisible ) {
mWindowView.setVisibility(View.GONE );
} else {
mWindowView.setVisibility(View.VISIBLE);
}
}
};
ServiceMediaHandler.getCarsChattingApis().registerCallWindowStatusListener( MediaConstants.MODULE_TYPE, mContext, mCallProviderResponse);
isFirstPlay = true;
}
@Override
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
if (descriptor == StatusDescriptor.ACC_STATUS&&!isTrue) {
ServiceMediaHandler.getMogoWindowManager().removeView(mWindowView);
mHasAddWindow = false;
}
}
private void addWindowView() {
@@ -93,16 +119,10 @@ public class MediaWindow2 implements IMusicView {
return;
}
if(!ServiceMediaHandler.getIMogoStatusManager().isMainPageOnResume()){
Log.d(TAG, "not in front");
return;
}
if (!mHasAddWindow) {
mHasAddWindow = true;
mWindowView =
LayoutInflater.from(mContext).inflate(R.layout.module_media_music_window_alert_layout, null);
mWindowView.setVisibility(View.VISIBLE);
mCircleImg = mWindowView.findViewById(R.id.window_circle_img);
mScrollText = mWindowView.findViewById(R.id.window_scroll_txt);
mWindowPlayPause = mWindowView.findViewById(R.id.window_play_pause);
@@ -158,6 +178,12 @@ public class MediaWindow2 implements IMusicView {
}
}
});
if ( mIsCallChatWindowVisible ) {
mWindowView.setVisibility(View.GONE);
} else {
mWindowView.setVisibility(View.VISIBLE);
}
}
}
@@ -305,4 +331,10 @@ public class MediaWindow2 implements IMusicView {
mWindowView.setVisibility(View.GONE);
}
}
public void onDestroy(){
Logger.d(TAG, "onDestroy");
ServiceMediaHandler.getCarsChattingApis().unRegisterCallWindowStatusListener( MediaConstants.MODULE_TYPE, mContext);
ServiceMediaHandler.getIMogoStatusManager().unregisterStatusChangedListener(MediaConstants.MODULE_TYPE, StatusDescriptor.ACC_STATUS,this);
}
}