diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/config.gradle b/config.gradle index d9f8af0fd0..e12bbcd7bf 100644 --- a/config.gradle +++ b/config.gradle @@ -12,7 +12,7 @@ ext { // androidx androidxappcompat : "androidx.appcompat:appcompat:1.0.2", androidxccorektx : "androidx.core:core-ktx:1.2.0", - androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-alpha5", + androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-beta6", androidxmultidex : "androidx.multidex:multidex:2.0.1", androidxviewpager2 : "androidx.viewpager2:viewpager2:1.0.0", androidxrecyclerview : "androidx.recyclerview:recyclerview:1.1.0", 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 34867b8492..6670b8d022 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 @@ -14,6 +14,7 @@ import android.widget.TextView; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; @@ -36,7 +37,7 @@ import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; -import com.mogo.module.extensions.navi.NaviInfoView; +import com.mogo.module.extensions.utils.TopViewAnimHelper; import com.mogo.module.share.ShareControl; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; @@ -80,7 +81,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private View mMove2CurrentLocation; - private NaviInfoView mNaviInfo; +// private NaviInfoView mNaviInfo; private TextView mExitNavi; @@ -103,6 +104,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private IMogoAuthorizeModuleManager mIMogoAuthorizeModuleManager; private IMogoStatusManager mStatusManager; + /** * 搜索莫模块 */ @@ -236,7 +238,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } } ); - mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); +// mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); + ConstraintLayout rootView = findViewById(R.id.module_entrance_id_top_motion_layout); + if(rootView!=null) { + TopViewAnimHelper.getInstance().init(rootView); + } + mExitNavi = findViewById( R.id.module_entrance_id_exit_navi ); mExitNavi.setOnClickListener( view -> { if ( mMogoNavi != null ) { @@ -366,12 +373,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent if ( naviinfo == null ) { return; } - mNaviInfo.notifyChanged( naviinfo ); +// mNaviInfo.notifyChanged( naviinfo ); } @Override public void onStartNavi() { - mNaviInfo.setVisibility( View.VISIBLE ); +// mNaviInfo.setVisibility( View.VISIBLE ); mExitNavi.setVisibility( View.VISIBLE ); mMApUIController.changeMapMode( mCameraMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D ); MapCenterPointStrategy.setMapCenterPointBySceneAndDelay( mMApUIController, Scene.NAVI, 500, () -> { @@ -383,7 +390,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStopNavi() { - mNaviInfo.setVisibility( View.GONE ); +// mNaviInfo.setVisibility( View.GONE ); mExitNavi.setVisibility( View.GONE ); mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D ); mDisplayOverview.setVisibility( View.GONE ); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java new file mode 100644 index 0000000000..4547548674 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java @@ -0,0 +1,292 @@ +package com.mogo.module.extensions.utils; + +import android.transition.AutoTransition; +import android.transition.Transition; +import android.transition.TransitionManager; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.ConstraintSet; +import androidx.constraintlayout.widget.Group; + +import com.mogo.module.extensions.R; +import com.mogo.utils.logger.Logger; + + +/** + * 顶部动画帮助类 + * + * @author tongchenfei + */ +public class TopViewAnimHelper { + + private ConstraintLayout topMotionLayout; + private Group naviGroup, remainTimeGroup, remainDistanceGroup, arriveTimeGroup; + private View naviBg; + + private ImageView ivTurnIcon; + private TextView tvNextDistance; + private TextView tvNextRoad; + private FrameLayout topContainer; + + private ConstraintSet constraintSet = new ConstraintSet(); + private Transition transition = new AutoTransition(); + private TextView cameraMode; + + private TopViewAnimHelper() { + } + + private volatile static TopViewAnimHelper instance = null; + + public static TopViewAnimHelper getInstance() { + if (instance == null) { + synchronized (TopViewAnimHelper.class) { + if (instance == null) { + instance = new TopViewAnimHelper(); + } + } + } + return instance; + } + + public void init(ConstraintLayout rootView) { + init(rootView, null); + } + + public void init(ConstraintLayout rootView, OnTopViewAnimSimpleListener listener) { + topMotionLayout = rootView; + naviBg = rootView.findViewById(R.id.module_map_id_navi_bg); + naviGroup = rootView.findViewById(R.id.naviGroup); + remainTimeGroup = rootView.findViewById(R.id.remainTimeGroup); + remainDistanceGroup = rootView.findViewById(R.id.remainDistanceGroup); + arriveTimeGroup = rootView.findViewById(R.id.arriveTimeGroup); + topContainer = rootView.findViewById(R.id.module_entrance_id_top_container); + + ivTurnIcon = rootView.findViewById(R.id.module_map_id_navi_next_info_road_turn_icon); + tvNextDistance = rootView.findViewById(R.id.module_map_id_navi_next_info_distance); + tvNextRoad = rootView.findViewById(R.id.module_map_id_navi_next_info_road); + transition.setDuration(200); + + transition.addListener(new Transition.TransitionListener() { + @Override + public void onTransitionStart(Transition transition) { + if (listener != null) { + listener.onAnimStart(); + } + } + + @Override + public void onTransitionEnd(Transition transition) { + if (isTopViewOut) { + topContainer.removeAllViews(); + } + if (listener != null) { + listener.onAnimEnd(); + } + } + + @Override + public void onTransitionCancel(Transition transition) { + + } + + @Override + public void onTransitionPause(Transition transition) { + + } + + @Override + public void onTransitionResume(Transition transition) { + + } + }); + + cameraMode = rootView.findViewById(R.id.module_ext_id_north); + } + + private boolean isTopViewOut = true; + + public void startTopInAnim(View view, ViewGroup.LayoutParams params) { + Logger.d("TopViewAnimHelper", "startTopInAnim====="); + if (view == null) { + throw new IllegalArgumentException("method addTopView params view is null"); + } + if (params == null) { + throw new IllegalArgumentException("method addTopView params LayoutParams is null"); + } + if (isTopViewOut) { + isTopViewOut = false; + + topContainer.addView(view, params); + + constraintSet.clone(topMotionLayout); + + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1; + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = + R.id.module_entrance_id_top_motion_layout; + + TransitionManager.beginDelayedTransition(topMotionLayout, transition); + checkCameraModePosition(false); + if (naviGroup.getVisibility() == View.VISIBLE) { + // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() + // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 + constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM, + ivTurnIcon.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BASELINE, + tvNextDistance.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT, + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46)); + } + constraintSet.applyTo(topMotionLayout); + if (naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + } + ivTurnIcon.getLayoutParams().height = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height); + ivTurnIcon.getLayoutParams().width = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); + naviBg.getLayoutParams().height = + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height); + } + } + + public void startTopOutAnim() { + Logger.d("TopViewAnimHelper", "startTopOutAnim====="); + if (!isTopViewOut) { + isTopViewOut = true; + constraintSet.clone(topMotionLayout); + + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = + R.id.module_entrance_id_top_motion_layout; + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = -1; + TransitionManager.beginDelayedTransition(topMotionLayout, transition); + checkCameraModePosition(false); + + if (naviGroup.getVisibility() == View.VISIBLE) { + // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() + // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 + constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM, + ivTurnIcon.getId(), ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + tvNextDistance.getId(), ConstraintSet.LEFT, + 0); + } + constraintSet.applyTo(topMotionLayout); + if (naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.VISIBLE); + remainTimeGroup.setVisibility(View.VISIBLE); + arriveTimeGroup.setVisibility(View.VISIBLE); + } + ivTurnIcon.getLayoutParams().height = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height); + ivTurnIcon.getLayoutParams().width = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_width); + naviBg.getLayoutParams().height = + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_height); + } + } + + public void showNaviView() { + Logger.d("TopViewAnimHelper", "showNaviView====="); + naviGroup.setVisibility(View.VISIBLE); + if (isTopViewOut) { + remainDistanceGroup.setVisibility(View.VISIBLE); + remainTimeGroup.setVisibility(View.VISIBLE); + arriveTimeGroup.setVisibility(View.VISIBLE); + // 调整约束 + constraintSet.clone(topMotionLayout); + constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM, ivTurnIcon.getId(), + ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + tvNextDistance.getId(), ConstraintSet.LEFT, + 0); +// ivTurnIcon.getLayoutParams().height = +// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height); +// ivTurnIcon.getLayoutParams().width = +// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_width); +// naviBg.getLayoutParams().height = +// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen +// .module_ext_navi_info_panel_height); + constraintSet.applyTo(topMotionLayout); + } else { + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + // 调整约束 + constraintSet.clone(topMotionLayout); + constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM, + ivTurnIcon.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BASELINE, + tvNextDistance.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT, + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46)); +// ivTurnIcon.getLayoutParams().height = +// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height); +// ivTurnIcon.getLayoutParams().width = +// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); +// naviBg.getLayoutParams().height = +// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen +// .module_ext_navi_info_panel_small_height); + constraintSet.applyTo(topMotionLayout); + } + + checkCameraModePosition(true); + } + + public void hideNaviView() { + Logger.d("TopViewAnimHelper", "hideNaviView====="); + naviGroup.setVisibility(View.GONE); + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + checkCameraModePosition(true); + } + + private void checkCameraModePosition(boolean isNeedClone) { + if (isNeedClone) { + constraintSet.clone(topMotionLayout); + } + if (naviGroup.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, + ConstraintSet.BOTTOM, + (int) getDimen(R.dimen.dp_30)); + } + } + if (isNeedClone) { + constraintSet.applyTo(topMotionLayout); + } + } + + private float getDimen(int resId) { + return (int) topMotionLayout.getContext().getResources().getDimension(resId); + } + + interface OnTopViewAnimSimpleListener { + void onAnimStart(); + + void onAnimEnd(); + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java new file mode 100644 index 0000000000..54a9485d89 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java @@ -0,0 +1,34 @@ +package com.mogo.module.extensions.utils; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.windowview.IMogoTopViewManager; + +/** + * 顶部1/2界面管理 + * + * @author tongchenfei + */ +@Route(path = MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER) +public class TopViewManager implements IMogoTopViewManager { + + @Override + public void addTopView(View view, ViewGroup.LayoutParams params) { + TopViewAnimHelper.getInstance().startTopInAnim(view, params); + } + + @Override + public void removeTopView() { + TopViewAnimHelper.getInstance().startTopOutAnim(); + } + + + @Override + public void init(Context context) { + + } +} diff --git a/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml b/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml new file mode 100644 index 0000000000..777cc6b5d5 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + \ No newline at end of file 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 61a9d338d0..6eb9dcc854 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 @@ -1,17 +1,229 @@ - + + + app:constraint_referenced_ids="module_map_id_navi_next_info_road,module_map_id_navi_next_info_turn_info,module_map_id_navi_bg,module_map_id_navi_next_info_road_turn_icon,module_map_id_navi_next_info_distance,module_map_id_navi_next_info_distance_unit,remainDistanceGroup,remainTimeGroup,arriveTimeGroup" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:visibility="visible" + app:layout_constraintLeft_toLeftOf="@+id/module_map_id_navi_bg" + app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg"> + android:visibility="visible" /> + android:visibility="visible" /> + android:visibility="visible" /> + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml b/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml new file mode 100644 index 0000000000..729703ad4e --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index 31fec5ee59..6ee10cc338 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -79,8 +79,11 @@ 544px 117px + 60px 85px 85px + 52px + 52px 13px 13px 20px diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index fc372e59cf..cfbe0d4486 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -76,9 +76,13 @@ 1058px 210px + 144px 159px 159px + 96px + 96px 24px + 83px 24px 40px 60px diff --git a/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml new file mode 100644 index 0000000000..99a7f0e15c --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml new file mode 100644 index 0000000000..8fda6c7123 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java index f7b69a8dd2..cc87d1dbc5 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java @@ -56,4 +56,9 @@ public class MogoWindowManager implements IMogoWindowManager { public void init( Context context ) { } + + @Override + public void addTopView(View view) { + + } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java new file mode 100644 index 0000000000..12bc772e07 --- /dev/null +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java @@ -0,0 +1,15 @@ +package com.mogo.module.main.windowview; + +import android.view.View; + +/** + * 用来处理主屏上方1/2屏的view + */ +public class TopViewHolder { + public void init(){ + + } + public void addView(View view) { + + } +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java index 346667562f..ba87481b25 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -23,6 +23,7 @@ import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; +import com.mogo.service.windowview.IMogoTopViewManager; import com.mogo.service.windowview.IMogoWindowManager; /** @@ -180,4 +181,10 @@ public interface IMogoServiceApis extends IProvider { * @return */ IMogoEntranceButtonController getEntranceButtonController(); + + /** + * 获取顶部1/2屏界面管理类 + * @return + */ + IMogoTopViewManager getTopViewManager(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java index ca78173ea3..59bfa910b0 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java @@ -166,4 +166,9 @@ public class MogoServicePaths { */ @Deprecated public static final String PATH_ENTRANCE_BUTTON_API = "/entrancebutton/api"; + + /** + * 顶部1/2屏管理 + */ + public static final String PATH_EXTENSIONS_TOP_VIEW_MANAGER = "/topview/api"; } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java new file mode 100644 index 0000000000..195629734d --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java @@ -0,0 +1,14 @@ +package com.mogo.service.windowview; + +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.android.arouter.facade.template.IProvider; + +/** + * 管理1/2屏界面的增添,为了配合导航展示新增接口 + */ +public interface IMogoTopViewManager extends IProvider { + void addTopView(View view, ViewGroup.LayoutParams params); + void removeTopView(); +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java index 6ef9929854..591f113706 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java @@ -71,4 +71,10 @@ public interface IMogoWindowManager extends IProvider { * 显示所有 */ void showAll(); + + /** + * 为了配合导航动画,主屏上方1/2屏的view通过此方法添加 + * @param view 主屏上方1/2屏的view + */ + void addTopView(View view); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java index 462e799b7a..91363abc52 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java @@ -32,6 +32,7 @@ import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; +import com.mogo.service.windowview.IMogoTopViewManager; import com.mogo.service.windowview.IMogoWindowManager; import com.mogo.utils.logger.Logger; @@ -159,7 +160,12 @@ public class MogoServiceApis implements IMogoServiceApis { return getApiInstance( IMogoEntranceButtonController.class, MogoServicePaths.PATH_ENTRANCE_BUTTON_API ); } - private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) { + @Override + public IMogoTopViewManager getTopViewManager() { + return getApiInstance(IMogoTopViewManager.class,MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER); + } + + private static < T extends IProvider > T getApiInstance(Class< T > clazz, String path ) { T inst = SingletonsHolder.get( clazz ); if ( inst == null ) { synchronized ( sLock ) {