diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index f5b6f63acd..95b753ebdb 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -30,6 +30,8 @@ import com.mogo.commons.voice.AIAssist; import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationClient; +import com.mogo.map.location.IMogoLocationListener; +import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoAimlessModeListener; import com.mogo.map.navi.IMogoNavi; @@ -43,14 +45,11 @@ import com.mogo.module.common.dialog.WMDialog; import com.mogo.module.common.glide.SkinAbleBitmapTarget; import com.mogo.module.common.map.CustomNaviInterrupter; import com.mogo.module.common.map.MapCenterPointStrategy; -import com.mogo.module.common.map.MyLocationUtil; import com.mogo.module.common.map.Scene; import com.mogo.module.common.view.OnPreventFastClickListener; -import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; import com.mogo.module.extensions.navi.AnimNavInfoView; import com.mogo.module.extensions.navi.BaseNaviInfoView; -import com.mogo.module.extensions.navi.NaviInfoView; import com.mogo.module.extensions.navi.VrModeNavInfoView; import com.mogo.module.extensions.userinfo.UserInfo; import com.mogo.module.extensions.utils.AdasNoticeHelper; @@ -59,7 +58,6 @@ import com.mogo.module.extensions.utils.EntranceViewHolder; import com.mogo.module.extensions.utils.NoMapTopViewShaderHelper; import com.mogo.module.extensions.utils.TopViewAnimHelper; import com.mogo.module.extensions.utils.TopViewNoLinkageAnimHelper; -import com.mogo.module.extensions.utils.TrafficLightPanelManager; import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.service.IMogoServiceApis; import com.mogo.service.analytics.IMogoAnalytics; @@ -115,7 +113,8 @@ public class EntranceFragment extends MvpFragment properties = new HashMap<>(); -// properties.put("type", 1); -// MogoApisHandler.getInstance().getApis().getAnalyticsApi().track("APP_Find_Mogoer", properties); -// } -// } ); tvEnterVrMode = findViewById(R.id.module_ext_enter_vr_mode); tvEnterVrMode.setOnClickListener((v)->{ // 进入vr模式 @@ -493,7 +472,6 @@ public class EntranceFragment extends MvpFragment seekHelpNoticeListener = + private final IMogoOnMessageListener seekHelpNoticeListener = new IMogoOnMessageListener() { @Override - public Class target() { + public Class target() { return String.class; } @@ -1206,7 +1185,7 @@ public class EntranceFragment extends MvpFragment { topContainerNoLinkage.setChildAddedListener(null); - NoMapTopViewShaderHelper.getInstance().showShader(); - - constraintSet.clone(topMotionLayout); - - constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage, - ConstraintSet.BOTTOM); - constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP, - R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP); - TransitionManager.beginDelayedTransition(topMotionLayout, transition); - checkCameraModePosition(false); - constraintSet.applyTo(topMotionLayout); - + topContainerNoLinkage.animate().translationY(child.getHeight()).setListener(mainAnimListener).start(); int scene = Scene.AIMLESS_WITH_ROAD_EVENT; Logger.d(TAG, "show top setMapCenterPointByScene: " + scene); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); @@ -387,7 +188,7 @@ public class TopViewNoLinkageAnimHelper { // vr模式下与TopView互斥 if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { - TopViewAnimHelper.getInstance().removeAllView(); + TopViewAnimHelper.getInstance().removeAllViewExceptVrNav(); } } @@ -395,9 +196,7 @@ public class TopViewNoLinkageAnimHelper { * 退出最新的(也就是最上面的)view */ private void startLatestTopOutAnim() { - if (topContainerNoLinkage.getChildCount() > 1) { - removeSubView(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1)); - } else if (topContainerNoLinkage.getChildCount() > 0) { + if (topContainerNoLinkage.getChildCount() > 0) { startTopOutAnim(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1)); } } @@ -414,16 +213,7 @@ public class TopViewNoLinkageAnimHelper { } isTopViewOut = true; NoMapTopViewShaderHelper.getInstance().hideShader(); - constraintSet.clone(topMotionLayout); - - constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP); - constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.BOTTOM, - R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP); - TransitionManager.beginDelayedTransition(topMotionLayout, transition); - checkCameraModePosition(false); - - constraintSet.applyTo(topMotionLayout); - + topContainerNoLinkage.animate().translationY(-topContainerNoLinkage.getTranslationY()).setListener(mainAnimListener).start(); int scene = Scene.AIMLESS; Logger.d(TAG, "hide top setMapCenterPointByScene: " + scene); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); @@ -431,61 +221,10 @@ public class TopViewNoLinkageAnimHelper { } } - public void hideNaviView() { - if (topMotionLayout == null) { - return; - } - - Logger.d(TAG, "hideNaviView====="); - setNaviVisibility(View.GONE); - remainDistanceGroup.setVisibility(View.GONE); - remainTimeGroup.setVisibility(View.GONE); - arriveTimeGroup.setVisibility(View.GONE); - int scene = 0; - if (isTopViewOut) { - scene = Scene.AIMLESS; - } else { - scene = Scene.AIMLESS_WITH_ROAD_EVENT; - } - Logger.d(TAG, "hide navi setMapCenterPointByScene: " + scene); - MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); - checkCameraModePosition(true); - } - - private void checkCameraModePosition(boolean isNeedClone) { - if (isNeedClone) { - constraintSet.clone(topMotionLayout); - } - if (naviBg.getVisibility() == View.VISIBLE) { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(), - ConstraintSet.BOTTOM, (int) getDimen(R.dimen.dp_30)); - } else { - if (isTopViewOut) { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(), - ConstraintSet.BOTTOM, - (int) getDimen(R.dimen.module_ext_north_goneMarginTop)); - } else { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, - R.id.module_entrance_id_top_container_no_linkage, - ConstraintSet.BOTTOM, - (int) getDimen(R.dimen.dp_30)); - } - } - if (isNeedClone) { - constraintSet.applyTo(topMotionLayout); - } - } - private float getDimen(int resId) { return (int) topMotionLayout.getContext().getResources().getDimensionPixelSize(resId); } - private int computeNaviMarginTop(int height) { - int result = (int) (height - (getDimen(R.dimen.module_ext_top_over_navi_height)) - getDimen(R.dimen.module_common_shadow_width_pos)); - Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result); - return result; - } - interface OnTopViewAnimSimpleListener { void onAnimStart(); @@ -496,17 +235,6 @@ public class TopViewNoLinkageAnimHelper { return viewCaches.contains(view); } - private void setNaviVisibility(int visibility) { - ivTurnIcon.setVisibility(visibility); - tvNextRoad.setVisibility(visibility); - tvNextDistance.setVisibility(visibility); - remainTimeGroup.setVisibility(visibility); - remainDistanceGroup.setVisibility(visibility); - arriveTimeGroup.setVisibility(visibility); - naviBg.setVisibility(visibility); - tvNextDistanceUnit.setVisibility(visibility); - tvTurnInfo.setVisibility(visibility); - } public void removeAllView() { Logger.d(TAG, "remove all view"); @@ -522,24 +250,12 @@ public class TopViewNoLinkageAnimHelper { } } topContainerNoLinkage.removeAllViews(); - hideNaviView(); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, Scene.AIMLESS); } public void clear() { topMotionLayout = null; - remainTimeGroup = null; - remainDistanceGroup = null; - arriveTimeGroup = null; - naviBg = null; - ivTurnIcon = null; - tvNextDistance = null; - tvNextRoad = null; - tvNextDistanceUnit = null; - tvTurnInfo = null; topContainerNoLinkage = null; - cameraMode = null; - transition = null; } public void enterVrMode(){ @@ -551,4 +267,46 @@ public class TopViewNoLinkageAnimHelper { removeAllView(); topContainerNoLinkage.getLayoutParams().width = LayoutParams.MATCH_PARENT; } + + private final Animator.AnimatorListener mainAnimListener = new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + Logger.d(TAG, "onMainAnimEnd: " + currentAnimatingView); + IMogoTopViewStatusListener listener; + if (isTopViewOut) { + int lastCount = topContainerNoLinkage.getChildCount(); + for (int i = 0; i < lastCount; i++) { + View child = topContainerNoLinkage.getChildAt(i); + viewCaches.remove(child); + listener = statusListenerMap.remove(child); + if (listener != null) { + listener.onViewRemoved(child); + } + } + topContainerNoLinkage.removeAllViews(); + currentAnimatingView = null; + } else { + listener = statusListenerMap.get(currentAnimatingView); + if (listener != null) { + listener.onViewAdded(currentAnimatingView); + } + } + + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }; } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java deleted file mode 100644 index 4ea1d09158..0000000000 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.mogo.module.extensions.utils; - -import android.os.Handler; -import android.os.Message; -import android.view.View; -import android.widget.TextView; - -import androidx.constraintlayout.widget.Group; - -import com.mogo.module.extensions.R; -import com.mogo.module.extensions.view.VerticalTrafficLightView; -import com.mogo.utils.logger.Logger; - -import java.util.Random; - -/** - * 红绿灯面板管理类,控制各部分显示隐藏,同时控制限速、车速、红绿灯信息展示 - *

- * 导航信息内容通过{@link com.mogo.module.extensions.navi.VrModeNavInfoView} 在{@link com.mogo.module.extensions.entrance.EntranceFragment}进行控制 - * 此处仅控制导航信息的显示与隐藏 - * - * @author tongchenfei - */ -public class TrafficLightPanelManager implements Handler.Callback, View.OnClickListener { - private static final String TAG = "TrafficLightPanelManager"; - - private TrafficLightPanelManager() { - } - - private final static TrafficLightPanelManager INSTANCE = new TrafficLightPanelManager(); - - public static TrafficLightPanelManager getInstance() { - return INSTANCE; - } - - private Group speedGroup, navGroup, extraGroup; - private TextView tvLimitSpeed; - private VerticalTrafficLightView turnAroundLight, turnLeftLight, straightLight, turnRightLight; - - private Handler handler = new Handler(this); - - private boolean isInit = false; - - public void initPanel(View root) { - speedGroup = root.findViewById(R.id.module_ext_id_group_navi_in_vr_speed); - navGroup = root.findViewById(R.id.module_ext_id_group_navi_in_vr_nav_info); - extraGroup = root.findViewById(R.id.module_ext_id_group_traffic_light_panel_extra); - tvLimitSpeed = root.findViewById(R.id.module_ext_id_tv_limit_speed); - turnAroundLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_around); - turnLeftLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_left); - straightLight = root.findViewById(R.id.module_ext_id_traffic_light_straight); - turnRightLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_right); - isInit = true; - - // debug -// root.findViewById(R.id.module_ext_id_navi_in_vr_speed_bg).setOnClickListener(this); -// root.findViewById(R.id.module_ext_id_navi_in_vr_traffic_bg).setOnClickListener(this); - } - - public void showNavPanel() { - if (!isInit) { - Logger.e(TAG, "nav panel 未初始化"); - return; - } -// extraGroup.setVisibility(View.VISIBLE); -// if (isNav) { -// navGroup.setVisibility(View.VISIBLE); -// speedGroup.setVisibility(View.GONE); -// } else { -// speedGroup.setVisibility(View.VISIBLE); -// navGroup.setVisibility(View.GONE); -// } -// tvLimitSpeed.setVisibility(View.VISIBLE); - } - - public void hideNavPanel() { - if (!isInit) { - Logger.e(TAG, "nav panel 未初始化"); - return; - } -// extraGroup.setVisibility(View.GONE); -// speedGroup.setVisibility(View.GONE); -// tvLimitSpeed.setVisibility(View.GONE); - - } - - private boolean isNav = false; - - public void startNav() { - isNav = true; -// navGroup.setVisibility(View.VISIBLE); -// speedGroup.setVisibility(View.GONE); - } - - public void stopNav() { - isNav = false; -// speedGroup.setVisibility(View.VISIBLE); -// navGroup.setVisibility(View.GONE); - } - - public void refreshLimitSpeed(int limitSpeed) { - handler.removeMessages(MSG_HIDE_LIMIT_SPEED); - tvLimitSpeed.setVisibility(View.VISIBLE); - tvLimitSpeed.setText(String.valueOf(limitSpeed)); - handler.sendEmptyMessageDelayed(MSG_HIDE_LIMIT_SPEED, HIDE_LIMIT_SPEED_DELAY); - } - - /** - * 刷新红绿灯显示状态 - * - * @param laneLight 固定数组长度为4的车道类型灯,从0-3依次代表 掉头,左转,执行,右转 - * @param surplusTime 固定数组长度为4的剩余时长数组,从0-3依次代表 掉头,左转,执行,右转 - */ - public void refreshTrafficLightStatus(int[] laneLight, String[] surplusTime) { - turnAroundLight.setTrafficLightStatus(laneLight[0], surplusTime[0]); - turnLeftLight.setTrafficLightStatus(laneLight[1], surplusTime[1]); - straightLight.setTrafficLightStatus(laneLight[2], surplusTime[2]); - turnRightLight.setTrafficLightStatus(laneLight[3], surplusTime[3]); - } - - public void release() { - isInit = false; - speedGroup = null; - navGroup = null; - extraGroup = null; - tvLimitSpeed = null; - turnAroundLight = null; - turnLeftLight = null; - straightLight = null; - turnRightLight = null; - } - - private static final int MSG_HIDE_LIMIT_SPEED = 1001; - private static final long HIDE_LIMIT_SPEED_DELAY = 5000; - - @Override - public boolean handleMessage(Message msg) { - if (!isInit) { - return false; - } - if (msg.what == MSG_HIDE_LIMIT_SPEED) { - tvLimitSpeed.setVisibility(View.GONE); - return true; - } - return false; - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.module_ext_id_navi_in_vr_speed_bg) { - boolean s = new Random().nextBoolean(); - boolean b = new Random().nextBoolean(); - if (s) { - if (b) { - startNav(); - } else { - stopNav(); - } - } else { - refreshLimitSpeed(90); - } - } else { - int[] color = new int[4]; - String[] time = new String[4]; - for (int i = 0; i < 4; i++) { - int s = new Random().nextInt(4); - boolean b = new Random().nextBoolean(); - color[i] = s; - time[i] = b ? "12" : ""; - } - refreshTrafficLightStatus(color, time); - } - - } -} diff --git a/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml b/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml index 34a47aaadd..e6efac5899 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml @@ -107,6 +107,7 @@ android:gravity="center" android:text="80" android:textColor="#FF9CA8D8" + android:visibility="gone" android:textSize="@dimen/module_ext_navi_in_vr_limit_speed_text_size" app:layout_constraintBottom_toTopOf="@id/module_ext_id_navi_in_vr_traffic_bg" app:layout_constraintRight_toRightOf="@id/module_ext_id_navi_in_vr_bg" @@ -169,7 +170,7 @@ android:id="@+id/module_ext_id_group_traffic_light_panel_extra" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:visibility="gone" + android:visibility="visible" app:constraint_referenced_ids="module_ext_id_navi_in_vr_bg,module_ext_id_navi_in_vr_speed_bg,module_ext_id_navi_in_vr_traffic_bg,module_ext_id_traffic_light_turn_left,module_ext_id_traffic_light_turn_around,module_ext_id_traffic_light_straight,module_ext_id_traffic_light_turn_right" tools:visibility="visible" /> diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index eb8d2bd448..b1610caf4c 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -20,6 +20,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/module_ext_id_vr_nav_info" + android:visibility="gone" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/> diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java index 665b08f9f5..ead28acbda 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java @@ -76,55 +76,60 @@ public class V2XShareEventAdapter extends RecyclerView.Adapter position) { - V2XShareEventDescription.ResultBean.EnthusiasmIndexBean data = (V2XShareEventDescription.ResultBean.EnthusiasmIndexBean) dataArrayList.get(position); - if (data != null) { - String shareNum = String.valueOf(data.getShareNum()); - String likeNum = String.valueOf(data.getLikeNum()); - double enthusiasmIndex = data.getEnthusiasmIndex() <= 5 ? data.getEnthusiasmIndex() : 5; - if (shareNum != null) { - ((shareDescriptionViewHolder) holder).shareNumTextView.setText(shareNum); - } - if (likeNum != null) { - ((shareDescriptionViewHolder) holder).approveNumTextView.setText(likeNum); - } - ((shareDescriptionViewHolder) holder).ratingBar.setRating((float) enthusiasmIndex); - } - } - } else if (holder instanceof shareItemViewHolder) { - //分享列表 - if (dataArrayList.size() > position) { - V2XShareEventItem.ResultBean.PageBean.ContentBean data = (V2XShareEventItem.ResultBean.PageBean.ContentBean) dataArrayList.get(position); - if (data != null) { - String poitype = data.getPoiType(); - String address = data.getUploadAddress(); - String time = DateTimeUtils.getTimeText(data.getUploadTimestamp(), DateTimeUtils.MM_Yue_dd_Ri_HH_mm); - String likeNum = String.valueOf(data.getLikeNum()); - String notLikeNum = String.valueOf(data.getNotlikeNum()); - if (poitype != null) { - ((shareItemViewHolder) holder).caseStyleTextView.setText(EventTypeUtils.getPoiTypeStr(poitype)); - ((shareItemViewHolder) holder).caseStyleTextView.setBackgroundResource(EventTypeUtils.getPoiTypeBgForShareItem(poitype)); - - } - if (address != null) { - ((shareItemViewHolder) holder).caseAddressTextView.setText(address); - } - if (time != null) { - ((shareItemViewHolder) holder).caseTimeTextView.setText(time); - } - if (likeNum != null) { - ((shareItemViewHolder) holder).caseUsefulTextView.setText(likeNum); - } - if (notLikeNum != null) { - ((shareItemViewHolder) holder).caseUselessTextView.setText(notLikeNum); + if (holder instanceof shareDescriptionViewHolder) { + //分享次数,车友认同次数,热心指数 + if (dataArrayList.size() > position) { + V2XShareEventDescription.ResultBean.EnthusiasmIndexBean data = (V2XShareEventDescription.ResultBean.EnthusiasmIndexBean) dataArrayList.get(position); + if (data != null) { + String shareNum = String.valueOf(data.getShareNum()); + String likeNum = String.valueOf(data.getLikeNum()); + double enthusiasmIndex = data.getEnthusiasmIndex() <= 5 ? data.getEnthusiasmIndex() : 5; + if (shareNum != null) { + ((shareDescriptionViewHolder) holder).shareNumTextView.setText(shareNum); + } + if (likeNum != null) { + ((shareDescriptionViewHolder) holder).approveNumTextView.setText(likeNum); + } + ((shareDescriptionViewHolder) holder).ratingBar.setRating((float) enthusiasmIndex); } } + } else if (holder instanceof shareItemViewHolder) { + //分享列表 + if (dataArrayList.size() > position) { + V2XShareEventItem.ResultBean.PageBean.ContentBean data = (V2XShareEventItem.ResultBean.PageBean.ContentBean) dataArrayList.get(position); + if (data != null) { + String poitype = data.getPoiType(); + String address = data.getUploadAddress(); + String time = DateTimeUtils.getTimeText(data.getUploadTimestamp(), DateTimeUtils.MM_Yue_dd_Ri_HH_mm); + String likeNum = String.valueOf(data.getLikeNum()); + String notLikeNum = String.valueOf(data.getNotlikeNum()); + if (poitype != null) { + ((shareItemViewHolder) holder).caseStyleTextView.setText(EventTypeUtils.getPoiTypeStr(poitype)); + ((shareItemViewHolder) holder).caseStyleTextView.setBackgroundResource(EventTypeUtils.getPoiTypeBgForShareItem(poitype)); + + } + if (address != null) { + ((shareItemViewHolder) holder).caseAddressTextView.setText(address); + } + if (time != null) { + ((shareItemViewHolder) holder).caseTimeTextView.setText(time); + } + if (likeNum != null) { + ((shareItemViewHolder) holder).caseUsefulTextView.setText(likeNum); + } + if (notLikeNum != null) { + ((shareItemViewHolder) holder).caseUselessTextView.setText(notLikeNum); + } + } + + } } + } catch (Exception e) { + } } @@ -143,7 +148,7 @@ public class V2XShareEventAdapter extends RecyclerView.Adapter