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 ) {