diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java
index fe9e34b244..83ed40c2d8 100644
--- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java
@@ -22,7 +22,9 @@ public class AppLauncher extends BaseAppLauncher {
@Override
public void launch( Context context, AppInfo appInfo ) {
try {
- AppServiceHandler.getApis().getAdasControllerApi().closeADAS();
+ if ( LaunchUtils.getLaunchIntentForPackage( context, appInfo.getPackageName() ) != null ) {
+ AppServiceHandler.getApis().getAdasControllerApi().closeADAS();
+ }
LaunchUtils.launchByPkg( context, appInfo.getPackageName() );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java
index b328070501..1e704842d2 100644
--- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java
@@ -20,9 +20,13 @@ public class LaunchUtils {
* @param context
* @param pkg 包名
*/
- public static void launchByPkg( Context context, String pkg ) throws Exception{
- Intent intent = context.getPackageManager().getLaunchIntentForPackage( pkg );
+ public static void launchByPkg( Context context, String pkg ) throws Exception {
+ Intent intent = getLaunchIntentForPackage( context, pkg );
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
context.startActivity( intent );
}
+
+ public static Intent getLaunchIntentForPackage( Context context, String pkg ) {
+ return context.getPackageManager().getLaunchIntentForPackage( pkg );
+ }
}
diff --git a/modules/mogo-module-common/build.gradle b/modules/mogo-module-common/build.gradle
index 6b8c0ae9c3..c3f39b9c50 100644
--- a/modules/mogo-module-common/build.gradle
+++ b/modules/mogo-module-common/build.gradle
@@ -31,7 +31,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.androidxrecyclerview
-
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.mogomap
api rootProject.ext.dependencies.mogomapapi
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java
new file mode 100644
index 0000000000..097330f871
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java
@@ -0,0 +1,198 @@
+package com.mogo.module.common.dialog;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.PixelFormat;
+import android.os.Build;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import androidx.annotation.StringRes;
+
+import com.mogo.module.common.R;
+import com.mogo.module.common.utils.CarSeries;
+import com.mogo.utils.WindowUtils;
+
+/**
+ * @author congtaowang
+ * @since 2020-04-24
+ *
+ * 显示在最上层的对话框
+ */
+public class WMDialog implements DialogInterface {
+
+ private WMDialogParams mParams;
+ private WindowManager mWindowManager;
+ private boolean mIsShowing = false;
+ private View mContentView;
+ private WindowManager.LayoutParams mLayoutParams;
+
+ private WMDialog( WMDialogParams params ) {
+ this.mParams = params;
+ }
+
+ public void show() {
+ if ( mIsShowing ) {
+ return;
+ }
+ mIsShowing = true;
+ if ( mWindowManager == null ) {
+ mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ }
+ if ( mContentView == null ) {
+ mLayoutParams = new WindowManager.LayoutParams();
+ if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
+ mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+ } else {
+ mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
+ }
+ mLayoutParams.format = PixelFormat.TRANSLUCENT;
+ mLayoutParams.gravity = Gravity.CENTER;
+ mLayoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
+
+ if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) {
+ mLayoutParams.width = 1920;
+ mLayoutParams.height = 1080;
+ } else {
+ mLayoutParams.width = WindowUtils.getScreenWidth( mParams.mContext );
+ mLayoutParams.height = WindowUtils.getScreenHeight( mParams.mContext );
+ }
+ mLayoutParams.dimAmount = 0.5f;
+ mLayoutParams.x = 0;
+ mLayoutParams.y = 0;
+ mContentView = initViews();
+ }
+ mWindowManager.addView( mContentView, mLayoutParams );
+ }
+
+ private View initViews() {
+ View contentView = LayoutInflater.from( mParams.mContext ).inflate( R.layout.module_commons_layout_wm_dialog, null );
+ TextView ok = contentView.findViewById( R.id.module_commons_wm_dialog_button_ok );
+ TextView cancel = contentView.findViewById( R.id.module_commons_wm_dialog_button_cancel );
+ TextView content = contentView.findViewById( R.id.module_commons_wm_dialog_content );
+
+ ok.setText( mParams.mOkButtonText );
+ if ( mParams.mOnOkButtonClickListener != null ) {
+ ok.setOnClickListener( view -> {
+ if ( mParams.mOnOkButtonClickListener != null ) {
+ mParams.mOnOkButtonClickListener.onClick( WMDialog.this, DialogInterface.BUTTON_POSITIVE );
+ }
+ } );
+ }
+ cancel.setText( mParams.mCancelButtonText );
+ if ( mParams.mOnCancelButtonClickListener != null ) {
+ cancel.setOnClickListener( view -> {
+ if ( mParams.mOnCancelButtonClickListener != null ) {
+ mParams.mOnCancelButtonClickListener.onClick( WMDialog.this, DialogInterface.BUTTON_NEGATIVE );
+ }
+ } );
+ }
+
+ content.setText( mParams.mContent );
+ return contentView;
+ }
+
+ @Override
+ public void cancel() {
+ dismiss();
+ }
+
+ @Override
+ public void dismiss() {
+ if ( !mIsShowing ) {
+ return;
+ }
+ if ( mContentView != null ) {
+ mWindowManager.removeViewImmediate( mContentView );
+ }
+ if ( mParams.mOnDialogDismissListener != null ) {
+ mParams.mOnDialogDismissListener.onDismiss( this );
+ }
+ mIsShowing = false;
+ }
+
+ public boolean isShowing() {
+ return mIsShowing;
+ }
+
+ public static class Builder {
+
+ private Context mContext;
+ private WMDialogParams mParams;
+
+ public Builder( Context context ) {
+ this.mContext = context;
+ mParams = new WMDialogParams();
+ mParams.mContext = context;
+ }
+
+// public Builder setTitle( CharSequence title ) {
+// mParams.mTitle = title;
+// return this;
+// }
+//
+// public Builder setTitle( @StringRes int title ) {
+// mParams.mTitle = mContext.getString( title );
+// return this;
+// }
+
+ public Builder setContent( CharSequence content ) {
+ mParams.mContent = content;
+ return this;
+ }
+
+ public Builder setContent( @StringRes int content ) {
+ mParams.mContent = mContext.getString( content );
+ return this;
+ }
+
+ public Builder setOkButton( CharSequence buttonText, OnClickListener listener ) {
+ mParams.mOkButtonText = buttonText;
+ mParams.mOnOkButtonClickListener = listener;
+ return this;
+ }
+
+ public Builder setOkButton( @StringRes int buttonText, OnClickListener listener ) {
+ mParams.mOkButtonText = mContext.getText( buttonText );
+ mParams.mOnOkButtonClickListener = listener;
+ return this;
+ }
+
+ public Builder setCancelButton( CharSequence buttonText, OnClickListener listener ) {
+ mParams.mCancelButtonText = buttonText;
+ mParams.mOnCancelButtonClickListener = listener;
+ return this;
+ }
+
+ public Builder setCancelButton( @StringRes int buttonText, OnClickListener listener ) {
+ mParams.mCancelButtonText = mContext.getText( buttonText );
+ mParams.mOnCancelButtonClickListener = listener;
+ return this;
+ }
+
+ public Builder setOnDialogDismissListener( OnDismissListener onDialogDismissListener ) {
+ mParams.mOnDialogDismissListener = onDialogDismissListener;
+ return this;
+ }
+
+ public WMDialog build() {
+ WMDialog dialog = new WMDialog( mParams );
+ return dialog;
+ }
+ }
+
+ public static class WMDialogParams {
+
+ // public CharSequence mTitle;
+ public CharSequence mOkButtonText;
+ public CharSequence mCancelButtonText;
+ public CharSequence mContent;
+ public OnClickListener mOnOkButtonClickListener;
+ public OnClickListener mOnCancelButtonClickListener;
+ public OnDismissListener mOnDialogDismissListener;
+ public Context mContext;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java
deleted file mode 100644
index ce167a9870..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-import android.graphics.Point;
-import android.view.View;
-
-/**
- * Created by yarolegovich on 16.03.2017.
- */
-public enum DSVOrientation {
-
- HORIZONTAL {
- @Override
- Helper createHelper() {
- return new HorizontalHelper();
- }
- },
- VERTICAL {
- @Override
- Helper createHelper() {
- return new VerticalHelper();
- }
- };
-
- //Package private
- abstract Helper createHelper();
-
- interface Helper {
-
- int getViewEnd(int recyclerWidth, int recyclerHeight);
-
- int getDistanceToChangeCurrent(int childWidth, int childHeight);
-
- void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint);
-
- void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter);
-
- int getFlingVelocity(int velocityX, int velocityY);
-
- int getPendingDx(int pendingScroll);
-
- int getPendingDy(int pendingScroll);
-
- void offsetChildren(int amount, RecyclerViewProxy lm);
-
- float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY);
-
- boolean isViewVisible(Point center, int halfWidth, int halfHeight, int endBound,
- int extraSpace);
-
- boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm);
-
- boolean canScrollVertically();
-
- boolean canScrollHorizontally();
- }
-
- protected static class HorizontalHelper implements Helper {
-
- @Override
- public int getViewEnd(int recyclerWidth, int recyclerHeight) {
- return recyclerWidth;
- }
-
- @Override
- public int getDistanceToChangeCurrent(int childWidth, int childHeight) {
- return childWidth;
- }
-
- @Override
- public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) {
- int newX = recyclerCenter.x - scrolled;
- outPoint.set(newX, recyclerCenter.y);
- }
-
- @Override
- public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) {
- int newX = outCenter.x + direction.applyTo(shiftAmount);
- outCenter.set(newX, outCenter.y);
- }
-
- @Override
- public boolean isViewVisible(
- Point viewCenter, int halfWidth, int halfHeight, int endBound,
- int extraSpace) {
- int viewLeft = viewCenter.x - halfWidth;
- int viewRight = viewCenter.x + halfWidth;
- return viewLeft < (endBound + extraSpace) && viewRight > -extraSpace;
- }
-
- @Override
- public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) {
- View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild();
- int leftBound = -lm.getExtraLayoutSpace();
- int rightBound = lm.getWidth() + lm.getExtraLayoutSpace();
- boolean isNewVisibleFromLeft = lm.getDecoratedLeft(firstChild) > leftBound
- && lm.getPosition(firstChild) > 0;
- boolean isNewVisibleFromRight = lm.getDecoratedRight(lastChild) < rightBound
- && lm.getPosition(lastChild) < lm.getItemCount() - 1;
- return isNewVisibleFromLeft || isNewVisibleFromRight;
- }
-
- @Override
- public void offsetChildren(int amount, RecyclerViewProxy helper) {
- helper.offsetChildrenHorizontal(amount);
- }
-
- @Override
- public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) {
- return viewCenterX - center.x;
- }
-
- @Override
- public int getFlingVelocity(int velocityX, int velocityY) {
- return velocityX;
- }
-
- @Override
- public boolean canScrollHorizontally() {
- return true;
- }
-
- @Override
- public boolean canScrollVertically() {
- return false;
- }
-
- @Override
- public int getPendingDx(int pendingScroll) {
- return pendingScroll;
- }
-
- @Override
- public int getPendingDy(int pendingScroll) {
- return 0;
- }
- }
-
-
- protected static class VerticalHelper implements Helper {
-
- @Override
- public int getViewEnd(int recyclerWidth, int recyclerHeight) {
- return recyclerHeight;
- }
-
- @Override
- public int getDistanceToChangeCurrent(int childWidth, int childHeight) {
- return childHeight;
- }
-
- @Override
- public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) {
- int newY = recyclerCenter.y - scrolled;
- outPoint.set(recyclerCenter.x, newY);
- }
-
- @Override
- public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) {
- int newY = outCenter.y + direction.applyTo(shiftAmount);
- outCenter.set(outCenter.x, newY);
- }
-
- @Override
- public void offsetChildren(int amount, RecyclerViewProxy helper) {
- helper.offsetChildrenVertical(amount);
- }
-
- @Override
- public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) {
- return viewCenterY - center.y;
- }
-
- @Override
- public boolean isViewVisible(
- Point viewCenter, int halfWidth, int halfHeight, int endBound,
- int extraSpace) {
- int viewTop = viewCenter.y - halfHeight;
- int viewBottom = viewCenter.y + halfHeight;
- return viewTop < (endBound + extraSpace) && viewBottom > -extraSpace;
- }
-
- @Override
- public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) {
- View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild();
- int topBound = -lm.getExtraLayoutSpace();
- int bottomBound = lm.getHeight() + lm.getExtraLayoutSpace();
- boolean isNewVisibleFromTop = lm.getDecoratedTop(firstChild) > topBound
- && lm.getPosition(firstChild) > 0;
- boolean isNewVisibleFromBottom = lm.getDecoratedBottom(lastChild) < bottomBound
- && lm.getPosition(lastChild) < lm.getItemCount() - 1;
- return isNewVisibleFromTop || isNewVisibleFromBottom;
- }
-
- @Override
- public int getFlingVelocity(int velocityX, int velocityY) {
- return velocityY;
- }
-
- @Override
- public boolean canScrollHorizontally() {
- return false;
- }
-
- @Override
- public boolean canScrollVertically() {
- return true;
- }
-
- @Override
- public int getPendingDx(int pendingScroll) {
- return 0;
- }
-
- @Override
- public int getPendingDy(int pendingScroll) {
- return pendingScroll;
- }
- }
-
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java
deleted file mode 100644
index e4d1c386ce..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-/**
- * Created by yarolegovich on 16.03.2017.
- */
-enum Direction {
-
- START {
- @Override
- public int applyTo(int delta) {
- return delta * -1;
- }
-
- @Override
- public boolean sameAs(int direction) {
- return direction < 0;
- }
- },
- END {
- @Override
- public int applyTo(int delta) {
- return delta;
- }
-
- @Override
- public boolean sameAs(int direction) {
- return direction > 0;
- }
- };
-
- public abstract int applyTo(int delta);
-
- public abstract boolean sameAs(int direction);
-
- public static Direction fromDelta(int delta) {
- return delta > 0 ? END : START;
- }
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java
deleted file mode 100644
index 777d950bed..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java
+++ /dev/null
@@ -1,836 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-import android.content.Context;
-import android.graphics.Point;
-import android.graphics.PointF;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.util.DisplayMetrics;
-import android.util.SparseArray;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.view.accessibility.AccessibilityEventCompat;
-import androidx.core.view.accessibility.AccessibilityRecordCompat;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.LinearSmoothScroller;
-import androidx.recyclerview.widget.RecyclerView;
-import com.alibaba.idst.nls.internal.utils.L;
-import com.mogo.utils.logger.Logger;
-import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer;
-
-import java.util.Locale;
-
-/**
- * Created by yarolegovich on 17.02.2017.
- */
-public class DiscreteScrollLayoutManager extends LinearLayoutManager {
-
- static final int NO_POSITION = -1;
-
- private static final String EXTRA_POSITION = "extra_position";
- private static final int DEFAULT_TIME_FOR_ITEM_SETTLE = 300;
- private static final int DEFAULT_FLING_THRESHOLD = 2100; //Decrease to increase sensitivity.
- private static final int DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT = 1;
-
- protected static final float SCROLL_TO_SNAP_TO_ANOTHER_ITEM = 0.6f;
-
- //This field will take value of all visible view's center points during the fill phase
- protected Point viewCenterIterator;
- protected Point recyclerCenter;
- protected Point currentViewCenter;
- protected int childHalfWidth, childHalfHeight;
- protected int extraLayoutSpace;
-
- //Max possible distance a view can travel during one scroll phase
- protected int scrollToChangeCurrent;
- protected int currentScrollState;
-
- protected int scrolled;
- protected int pendingScroll;
- protected int currentPosition;
- protected int pendingPosition;
-
- protected SparseArray detachedCache;
-
- private DSVOrientation.Helper orientationHelper;
-
- protected boolean isFirstOrEmptyLayout;
-
- private Context context;
-
- private int timeForItemSettle;
- private int offscreenItems;
- private int transformClampItemCount;
-
- private boolean dataSetChangeShiftedPosition;
-
- private int flingThreshold;
- private boolean shouldSlideOnFling;
-
- private int viewWidth, viewHeight;
-
- private float ratio=0.5F;
-
- private static final String TAG = "DiscreteScrollLayoutMan";
- @NonNull
- private final ScrollStateListener scrollStateListener;
- private DiscreteScrollItemTransformer itemTransformer;
-
- private RecyclerViewProxy recyclerViewProxy;
-
- public DiscreteScrollLayoutManager(
- @NonNull Context c,
- @NonNull ScrollStateListener scrollStateListener,
- @NonNull DSVOrientation orientation) {
- super(c);
- this.context = c;
- this.timeForItemSettle = DEFAULT_TIME_FOR_ITEM_SETTLE;
- this.pendingPosition = NO_POSITION;
- this.currentPosition = NO_POSITION;
- this.flingThreshold = DEFAULT_FLING_THRESHOLD;
- this.shouldSlideOnFling = false;
- this.recyclerCenter = new Point();
- this.currentViewCenter = new Point();
- this.viewCenterIterator = new Point();
- this.detachedCache = new SparseArray<>();
- this.scrollStateListener = scrollStateListener;
- this.orientationHelper = orientation.createHelper();
- this.recyclerViewProxy = new RecyclerViewProxy(this);
- this.transformClampItemCount = DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT;
- }
-
- @Override
- public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
- if (state.getItemCount() == 0) {
- recyclerViewProxy.removeAndRecycleAllViews(recycler);
- currentPosition = pendingPosition = NO_POSITION;
- scrolled = pendingScroll = 0;
- return;
- }
-
- ensureValidPosition(state);
-
- updateRecyclerDimensions(state);
-
- //onLayoutChildren may be called multiple times and this check is required so that the flag
- //won't be cleared until onLayoutCompleted
- if (!isFirstOrEmptyLayout) {
- isFirstOrEmptyLayout = recyclerViewProxy.getChildCount() == 0;
- if (isFirstOrEmptyLayout) {
- initChildDimensions(recycler);
- }
- }
-
- recyclerViewProxy.detachAndScrapAttachedViews(recycler);
-
- fill(recycler);
-
- applyItemTransformToChildren();
- }
-
- private void ensureValidPosition(RecyclerView.State state) {
- if (currentPosition == NO_POSITION || currentPosition >= state.getItemCount()) {
- //currentPosition might have been assigned in onRestoreInstanceState()
- //which can lead to a crash (position out of bounds) when data set
- //is not persisted across rotations
- currentPosition = 0;
- }
- }
-
- public void setRatio(float ratio) {
- this.ratio = ratio;
- }
-
- @Override
- public void onLayoutCompleted(RecyclerView.State state) {
- if (isFirstOrEmptyLayout) {
- scrollStateListener.onCurrentViewFirstLayout();
- isFirstOrEmptyLayout = false;
- } else if (dataSetChangeShiftedPosition) {
- scrollStateListener.onDataSetChangeChangedPosition();
- dataSetChangeShiftedPosition = false;
- }
- }
-
- protected void initChildDimensions(RecyclerView.Recycler recycler) {
- View viewToMeasure = recyclerViewProxy.getMeasuredChildForAdapterPosition(0, recycler);
-
- int childViewWidth = recyclerViewProxy.getMeasuredWidthWithMargin(viewToMeasure);
- int childViewHeight = recyclerViewProxy.getMeasuredHeightWithMargin(viewToMeasure);
-
- childHalfWidth = childViewWidth / 2;
- childHalfHeight = childViewHeight / 2;
-
- scrollToChangeCurrent = orientationHelper.getDistanceToChangeCurrent(
- childViewWidth,
- childViewHeight);
-
- extraLayoutSpace = scrollToChangeCurrent * offscreenItems;
-
- recyclerViewProxy.detachAndScrapView(viewToMeasure, recycler);
- }
-
- protected void updateRecyclerDimensions(RecyclerView.State state) {
- boolean dimensionsChanged = !state.isMeasuring()
- && (recyclerViewProxy.getWidth() != viewWidth
- || recyclerViewProxy.getHeight() != viewHeight);
- if (dimensionsChanged) {
- viewWidth = recyclerViewProxy.getWidth();
- viewHeight = recyclerViewProxy.getHeight();
- recyclerViewProxy.removeAllViews();
- }
- recyclerCenter.set(
- (int) (recyclerViewProxy.getWidth() * ratio),
- recyclerViewProxy.getHeight() / 2);
- }
-
- protected void fill(RecyclerView.Recycler recycler) {
- cacheAndDetachAttachedViews();
-
- orientationHelper.setCurrentViewCenter(recyclerCenter, scrolled, currentViewCenter);
-
- final int endBound = orientationHelper.getViewEnd(
- recyclerViewProxy.getWidth(),
- recyclerViewProxy.getHeight());
-
- //Layout current
- if (isViewVisible(currentViewCenter, endBound)) {
- layoutView(recycler, currentPosition, currentViewCenter);
- }
-
- //Layout items before the current item
- layoutViews(recycler, Direction.START, endBound);
-
- //Layout items after the current item
- layoutViews(recycler, Direction.END, endBound);
-
- recycleDetachedViewsAndClearCache(recycler);
- }
-
- private void layoutViews(RecyclerView.Recycler recycler, Direction direction, int endBound) {
- final int positionStep = direction.applyTo(1);
-
- //Predictive layout is required when we are doing smooth fast scroll towards pendingPosition
- boolean noPredictiveLayoutRequired = pendingPosition == NO_POSITION
- || !direction.sameAs(pendingPosition - currentPosition);
-
- viewCenterIterator.set(currentViewCenter.x, currentViewCenter.y);
- for (int pos = currentPosition + positionStep; isInBounds(pos); pos += positionStep) {
- if (pos == pendingPosition) {
- noPredictiveLayoutRequired = true;
- }
- orientationHelper.shiftViewCenter(direction, scrollToChangeCurrent, viewCenterIterator);
- if (isViewVisible(viewCenterIterator, endBound)) {
- layoutView(recycler, pos, viewCenterIterator);
- } else if (noPredictiveLayoutRequired) {
- break;
- }
- }
- }
-
- protected void layoutView(RecyclerView.Recycler recycler, int position, Point viewCenter) {
- if (position < 0) return;
- View v = detachedCache.get(position);
- if (v == null) {
- v = recyclerViewProxy.getMeasuredChildForAdapterPosition(position, recycler);
- recyclerViewProxy.layoutDecoratedWithMargins(v,
- viewCenter.x - childHalfWidth, viewCenter.y - childHalfHeight,
- viewCenter.x + childHalfWidth, viewCenter.y + childHalfHeight);
- } else {
- recyclerViewProxy.attachView(v);
- detachedCache.remove(position);
- }
- }
-
- protected void cacheAndDetachAttachedViews() {
- detachedCache.clear();
- for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) {
- View child = recyclerViewProxy.getChildAt(i);
- detachedCache.put(recyclerViewProxy.getPosition(child), child);
- }
-
- for (int i = 0; i < detachedCache.size(); i++) {
- recyclerViewProxy.detachView(detachedCache.valueAt(i));
- }
- }
-
- protected void recycleDetachedViewsAndClearCache(RecyclerView.Recycler recycler) {
- for (int i = 0; i < detachedCache.size(); i++) {
- View viewToRemove = detachedCache.valueAt(i);
- recyclerViewProxy.recycleView(viewToRemove, recycler);
- }
- detachedCache.clear();
- }
-
- @Override
- public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) {
- int newPosition = currentPosition;
- if (currentPosition == NO_POSITION) {
- newPosition = 0;
- } else if (currentPosition >= positionStart) {
- newPosition = Math.min(currentPosition + itemCount, recyclerViewProxy.getItemCount() - 1);
- }
- onNewPosition(newPosition);
- }
-
- @Override
- public void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount) {
- int newPosition = currentPosition;
- if (recyclerViewProxy.getItemCount() == 0) {
- newPosition = NO_POSITION;
- } else if (currentPosition >= positionStart) {
- if (currentPosition < positionStart + itemCount) {
- //If currentPosition is in the removed items, then the new item became current
- currentPosition = NO_POSITION;
- }
- newPosition = Math.max(0, currentPosition - itemCount);
- }
- onNewPosition(newPosition);
- }
-
- @Override
- public void onItemsChanged(RecyclerView recyclerView) {
- //notifyDataSetChanged() was called. We need to ensure that currentPosition is not out of bounds
- currentPosition = Math.min(Math.max(0, currentPosition), recyclerViewProxy.getItemCount() - 1);
- dataSetChangeShiftedPosition = true;
- }
-
- private void onNewPosition(int position) {
- if (currentPosition != position) {
- currentPosition = position;
- dataSetChangeShiftedPosition = true;
- }
- }
-
- @Override
- public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
- return scrollBy(dx, recycler);
- }
-
- @Override
- public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
- return scrollBy(dy, recycler);
- }
-
- protected int scrollBy(int amount, RecyclerView.Recycler recycler) {
- if (recyclerViewProxy.getChildCount() == 0) {
- return 0;
- }
-
- Direction direction = Direction.fromDelta(amount);
- int leftToScroll = calculateAllowedScrollIn(direction);
- if (leftToScroll <= 0) {
- return 0;
- }
- int delta = direction.applyTo(Math.min(leftToScroll, Math.abs(amount)));
- Logger.d(TAG,"leftToScroll--》"+leftToScroll+"---amount--》"+amount);
-
- scrolled += delta;
- if (pendingScroll != 0) {
- pendingScroll -= delta;
- }
-
- orientationHelper.offsetChildren(-delta, recyclerViewProxy);
-
- if (orientationHelper.hasNewBecomeVisible(this)) {
- fill(recycler);
- }
-
- notifyScroll();
-
- applyItemTransformToChildren();
-
- return delta;
- }
-
- protected void applyItemTransformToChildren() {
- if (itemTransformer != null) {
- int clampAfterDistance = scrollToChangeCurrent * transformClampItemCount;
- for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) {
- View child = recyclerViewProxy.getChildAt(i);
-
- //RecyclerView.ViewHolder childViewHolder = recyclerView.getChildViewHolder(child);
- float position = getCenterRelativePositionOf(child, clampAfterDistance);
- itemTransformer.transformItem(child,null, position);
- }
- }
- }
-
- @Override
- public void scrollToPosition(int position) {
- if (currentPosition == position) {
- return;
- }
-
- currentPosition = position;
- recyclerViewProxy.requestLayout();
- }
-
- //@Override
- //public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
- // if (currentPosition == position || pendingPosition != NO_POSITION) {
- // return;
- // }
- // checkTargetPosition(state, position);
- // if (currentPosition == NO_POSITION) {
- // //Layout not happened yet
- // currentPosition = position;
- // } else {
- // startSmoothPendingScroll(position);
- // }
- //}
-
-
- @Override
- public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
- LinearSmoothScroller smoothScroller =
- new LinearSmoothScroller(recyclerView.getContext()) {
- @Override
- protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
- // 返回:滑过1px时经历的时间(ms)。
- return 10f / displayMetrics.densityDpi;
- }
-
- @Override
- public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
- return boxStart - viewStart;
- }
- };
-
- smoothScroller.setTargetPosition(position);
- startSmoothScroll(smoothScroller);
- }
-
- @Override
- public boolean canScrollHorizontally() {
- return orientationHelper.canScrollHorizontally();
- }
-
- @Override
- public boolean canScrollVertically() {
- return orientationHelper.canScrollVertically();
- }
-
- @Override
- public void onScrollStateChanged(int state) {
- if (currentScrollState == RecyclerView.SCROLL_STATE_IDLE && currentScrollState != state) {
- scrollStateListener.onScrollStart();
- }
-
- if (state == RecyclerView.SCROLL_STATE_IDLE) {
- //Scroll is not finished until current view is centered
- boolean isScrollEnded = onScrollEnd();
- if (isScrollEnded) {
- scrollStateListener.onScrollEnd();
- } else {
- //Scroll continues and we don't want to set currentScrollState to STATE_IDLE,
- //because this will then trigger .scrollStateListener.onScrollStart()
- return;
- }
- } else if (state == RecyclerView.SCROLL_STATE_DRAGGING) {
- onDragStart();
- }
- currentScrollState = state;
- }
-
- /**
- * @return true if scroll is ended and we don't need to settle items
- */
- private boolean onScrollEnd() {
- if (pendingPosition != NO_POSITION) {
- currentPosition = pendingPosition;
- pendingPosition = NO_POSITION;
- scrolled = 0;
- }
-
- Direction scrollDirection = Direction.fromDelta(scrolled);
- if (Math.abs(scrolled) == scrollToChangeCurrent) {
- currentPosition += scrollDirection.applyTo(1);
- scrolled = 0;
- }
-
- if (isAnotherItemCloserThanCurrent()) {
- pendingScroll = getHowMuchIsLeftToScroll(scrolled);
- } else {
- pendingScroll = -scrolled;
- }
-
- if (pendingScroll == 0) {
- return true;
- } else {
- startSmoothPendingScroll();
- return false;
- }
- }
-
- private void onDragStart() {
- //Here we need to:
- //1. Stop any pending scroll
- //2. Set currentPosition to position of the item that is closest to the center
- boolean isScrollingThroughMultiplePositions = Math.abs(scrolled) > scrollToChangeCurrent;
- if (isScrollingThroughMultiplePositions) {
- int scrolledPositions = scrolled / scrollToChangeCurrent;
- currentPosition += scrolledPositions;
- scrolled -= scrolledPositions * scrollToChangeCurrent;
- }
- if (isAnotherItemCloserThanCurrent()) {
- Direction direction = Direction.fromDelta(scrolled);
- currentPosition += direction.applyTo(1);
- scrolled = -getHowMuchIsLeftToScroll(scrolled);
- }
- pendingPosition = NO_POSITION;
- pendingScroll = 0;
- }
-
- public void onFling(int velocityX, int velocityY) {
- int velocity = orientationHelper.getFlingVelocity(velocityX, velocityY);
- int throttleValue = shouldSlideOnFling ? Math.abs(velocity / flingThreshold) : 1;
- int newPosition = currentPosition + Direction.fromDelta(velocity).applyTo(throttleValue);
- newPosition = checkNewOnFlingPositionIsInBounds(newPosition);
- boolean isInScrollDirection = velocity * scrolled >= 0;
- boolean canFling = isInScrollDirection && isInBounds(newPosition);
- if (canFling) {
- startSmoothPendingScroll(newPosition);
- } else {
- returnToCurrentPosition();
- }
-
- Logger.d(TAG,"onFling"+newPosition);
- }
-
- public void returnToCurrentPosition() {
- pendingScroll = -scrolled;
- if (pendingScroll != 0) {
- startSmoothPendingScroll();
- }
- }
-
- protected int calculateAllowedScrollIn(Direction direction) {
- if (pendingScroll != 0) {
- return Math.abs(pendingScroll);
- }
- int allowedScroll;
- boolean isBoundReached;
- boolean isScrollDirectionAsBefore = direction.applyTo(scrolled) > 0;
- if (direction == Direction.START && currentPosition == 0) {
- //We can scroll to the left when currentPosition == 0 only if we scrolled to the right before
- isBoundReached = scrolled == 0;
- allowedScroll = isBoundReached ? 0 : Math.abs(scrolled);
- } else if (direction == Direction.END && currentPosition == recyclerViewProxy.getItemCount() - 1) {
- //We can scroll to the right when currentPosition == last only if we scrolled to the left before
- isBoundReached = scrolled == 0;
- allowedScroll = isBoundReached ? 0 : Math.abs(scrolled);
- } else {
- isBoundReached = false;
- allowedScroll = isScrollDirectionAsBefore ?
- scrollToChangeCurrent - Math.abs(scrolled) :
- scrollToChangeCurrent + Math.abs(scrolled);
- }
- scrollStateListener.onIsBoundReachedFlagChange(isBoundReached);
- return allowedScroll;
- }
-
- private void startSmoothPendingScroll() {
- LinearSmoothScroller scroller = new DiscreteLinearSmoothScroller(context);
- scroller.setTargetPosition(currentPosition);
- recyclerViewProxy.startSmoothScroll(scroller);
- }
-
- public void startSmoothPendingScroll(int position) {
- if (currentPosition == position) return;
- pendingScroll = -scrolled;
- Direction direction = Direction.fromDelta(position - currentPosition);
- int distanceToScroll = Math.abs(position - currentPosition) * scrollToChangeCurrent;
- pendingScroll += direction.applyTo(distanceToScroll);
- pendingPosition = position;
- startSmoothPendingScroll();
- }
-
-
-
-
- @Override
- public boolean isAutoMeasureEnabled() {
- return true;
- }
-
- @Override
- public int computeVerticalScrollRange(RecyclerView.State state) {
- return computeScrollRange(state);
- }
-
- @Override
- public int computeVerticalScrollOffset(RecyclerView.State state) {
- return computeScrollOffset(state);
- }
-
- @Override
- public int computeVerticalScrollExtent(RecyclerView.State state) {
- return computeScrollExtent(state);
- }
-
- @Override
- public int computeHorizontalScrollRange(RecyclerView.State state) {
- return computeScrollRange(state);
- }
-
- @Override
- public int computeHorizontalScrollOffset(RecyclerView.State state) {
- return computeScrollOffset(state);
- }
-
- @Override
- public int computeHorizontalScrollExtent(RecyclerView.State state) {
- return computeScrollExtent(state);
- }
-
- private int computeScrollOffset(RecyclerView.State state) {
- int scrollbarSize = computeScrollExtent(state);
- int offset = (int) ((scrolled / (float) scrollToChangeCurrent) * scrollbarSize);
- return (currentPosition * scrollbarSize) + offset;
- }
-
- private int computeScrollExtent(RecyclerView.State state) {
- if (getItemCount() == 0) {
- return 0;
- } else {
- return (int) (computeScrollRange(state) / (float) getItemCount());
- }
- }
-
- private int computeScrollRange(RecyclerView.State state) {
- if (getItemCount() == 0) {
- return 0;
- } else {
- return scrollToChangeCurrent * (getItemCount() - 1);
- }
- }
-
- @Override
- public void onAdapterChanged(RecyclerView.Adapter oldAdapter, RecyclerView.Adapter newAdapter) {
- pendingPosition = NO_POSITION;
- scrolled = pendingScroll = 0;
- if (newAdapter instanceof InitialPositionProvider) {
- currentPosition = ((InitialPositionProvider) newAdapter).getInitialPosition();
- } else {
- currentPosition = 0;
- }
- recyclerViewProxy.removeAllViews();
- }
-
- @Override
- public Parcelable onSaveInstanceState() {
- Bundle bundle = new Bundle();
- if (pendingPosition != NO_POSITION) {
- currentPosition = pendingPosition;
- }
- bundle.putInt(EXTRA_POSITION, currentPosition);
- return bundle;
- }
-
- @Override
- public void onRestoreInstanceState(Parcelable state) {
- Bundle bundle = (Bundle) state;
- currentPosition = bundle.getInt(EXTRA_POSITION);
- }
-
- @Override
- public RecyclerView.LayoutParams generateDefaultLayoutParams() {
- return new RecyclerView.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- }
-
- public int getNextPosition() {
- if (scrolled == 0) {
- return currentPosition;
- } else if (pendingPosition != NO_POSITION) {
- return pendingPosition;
- } else {
- return currentPosition + Direction.fromDelta(scrolled).applyTo(1);
- }
- }
-
- public void setItemTransformer(DiscreteScrollItemTransformer itemTransformer) {
- this.itemTransformer = itemTransformer;
- }
-
- public void setTimeForItemSettle(int timeForItemSettle) {
- this.timeForItemSettle = timeForItemSettle;
- }
-
- public void setOffscreenItems(int offscreenItems) {
- this.offscreenItems = offscreenItems;
- extraLayoutSpace = scrollToChangeCurrent * offscreenItems;
- recyclerViewProxy.requestLayout();
- }
-
- public void setTransformClampItemCount(int transformClampItemCount) {
- this.transformClampItemCount = transformClampItemCount;
- applyItemTransformToChildren();
- }
-
- public void setOrientation(DSVOrientation orientation) {
- orientationHelper = orientation.createHelper();
- recyclerViewProxy.removeAllViews();
- recyclerViewProxy.requestLayout();
- }
-
- public void setShouldSlideOnFling(boolean result) {
- shouldSlideOnFling = result;
- }
-
- public void setSlideOnFlingThreshold(int threshold) {
- flingThreshold = threshold;
- }
-
- public int getCurrentPosition() {
- return currentPosition;
- }
-
- @Override
- public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- super.onInitializeAccessibilityEvent(event);
- if (recyclerViewProxy.getChildCount() > 0) {
- final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
- record.setFromIndex(getPosition(getFirstChild()));
- record.setToIndex(getPosition(getLastChild()));
- }
- }
-
- private float getCenterRelativePositionOf(View v, int maxDistance) {
- float distanceFromCenter = orientationHelper.getDistanceFromCenter(recyclerCenter,
- getDecoratedLeft(v) + childHalfWidth,
- getDecoratedTop(v) + childHalfHeight);
- return Math.min(Math.max(-1f, distanceFromCenter / maxDistance), 1f);
- }
-
- private int checkNewOnFlingPositionIsInBounds(int position) {
- final int itemCount = recyclerViewProxy.getItemCount();
- //The check is required in case slide through multiple items is turned on
- if (currentPosition != 0 && position < 0) {
- //If currentPosition == 0 && position < 0 we forbid scroll to the left,
- //but if currentPosition != 0 we can slide to the first item
- return 0;
- } else if (currentPosition != itemCount - 1 && position >= itemCount) {
- return itemCount - 1;
- }
- return position;
- }
-
- private int getHowMuchIsLeftToScroll(int dx) {
- return Direction.fromDelta(dx).applyTo(scrollToChangeCurrent - Math.abs(scrolled));
- }
-
- private boolean isAnotherItemCloserThanCurrent() {
- return Math.abs(scrolled) >= scrollToChangeCurrent * SCROLL_TO_SNAP_TO_ANOTHER_ITEM;
- }
-
- public View getFirstChild() {
- return recyclerViewProxy.getChildAt(0);
- }
-
- public View getLastChild() {
- return recyclerViewProxy.getChildAt(recyclerViewProxy.getChildCount() - 1);
- }
-
- public int getExtraLayoutSpace() {
- return extraLayoutSpace;
- }
-
- private void notifyScroll() {
- float amountToScroll = pendingPosition != NO_POSITION ?
- Math.abs(scrolled + pendingScroll) :
- scrollToChangeCurrent;
- float position = -Math.min(Math.max(-1f, scrolled / amountToScroll), 1f);
- scrollStateListener.onScroll(position);
- }
-
- private boolean isInBounds(int itemPosition) {
- return itemPosition >= 0 && itemPosition < recyclerViewProxy.getItemCount();
- }
-
- private boolean isViewVisible(Point viewCenter, int endBound) {
- return orientationHelper.isViewVisible(
- viewCenter, childHalfWidth, childHalfHeight,
- endBound, extraLayoutSpace);
- }
-
-
- public void setPendingScroll(int pendingScroll){
- this.pendingScroll=pendingScroll;
- }
-
- private void checkTargetPosition(RecyclerView.State state, int targetPosition) {
- if (targetPosition < 0 || targetPosition >= state.getItemCount()) {
- throw new IllegalArgumentException(String.format(Locale.US,
- "target position out of bounds: position=%d, itemCount=%d",
- targetPosition, state.getItemCount()));
- }
- }
-
- protected void setRecyclerViewProxy(RecyclerViewProxy recyclerViewProxy) {
- this.recyclerViewProxy = recyclerViewProxy;
- }
-
- protected void setOrientationHelper(DSVOrientation.Helper orientationHelper) {
- this.orientationHelper = orientationHelper;
- }
-
- private class DiscreteLinearSmoothScroller extends LinearSmoothScroller {
-
- public DiscreteLinearSmoothScroller(Context context) {
- super(context);
- }
-
- @Override
- public int calculateDxToMakeVisible(View view, int snapPreference) {
- return orientationHelper.getPendingDx(-pendingScroll);
- }
-
- @Override
- public int calculateDyToMakeVisible(View view, int snapPreference) {
- return orientationHelper.getPendingDy(-pendingScroll);
- }
-
- @Override
- protected int calculateTimeForScrolling(int dx) {
- float dist = Math.min(Math.abs(dx), scrollToChangeCurrent);
- return (int) (Math.max(0.01f, dist / scrollToChangeCurrent) * timeForItemSettle);
- }
-
- @Nullable
- @Override
- public PointF computeScrollVectorForPosition(int targetPosition) {
- return new PointF(
- orientationHelper.getPendingDx(pendingScroll),
- orientationHelper.getPendingDy(pendingScroll));
- }
-
- @Override protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
- return 10f / displayMetrics.densityDpi;
- }
- }
-
- public interface ScrollStateListener {
- void onIsBoundReachedFlagChange(boolean isBoundReached);
-
- void onScrollStart();
-
- void onScrollEnd();
-
- void onScroll(float currentViewPosition);
-
- void onCurrentViewFirstLayout();
-
- void onDataSetChangeChangedPosition();
- }
-
- public interface InitialPositionProvider {
- int getInitialPosition();
- }
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java
deleted file mode 100644
index bf37a87cd7..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.View;
-
-import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.RecyclerView;
-import com.mogo.module.common.R;
-import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer;
-import com.yarolegovich.discretescrollview.util.ScrollListenerAdapter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by yarolegovich on 18.02.2017.
- */
-@SuppressWarnings("unchecked")
-public class DiscreteScrollView extends RecyclerView {
-
- public static final int NO_POSITION = DiscreteScrollLayoutManager.NO_POSITION;
-
- private static final int DEFAULT_ORIENTATION = DSVOrientation.HORIZONTAL.ordinal();
-
- private DiscreteScrollLayoutManager layoutManager;
-
- private List scrollStateChangeListeners;
- private List onItemChangedListeners;
-
- private boolean isOverScrollEnabled;
-
- public DiscreteScrollView(Context context) {
- super(context);
- init(null);
- }
-
- public DiscreteScrollView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(attrs);
- }
-
- public DiscreteScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init(attrs);
- }
-
- private void init(AttributeSet attrs) {
- scrollStateChangeListeners = new ArrayList<>();
- onItemChangedListeners = new ArrayList<>();
-
- int orientation = DEFAULT_ORIENTATION;
- if (attrs != null) {
- TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.DiscreteScrollView);
- orientation = ta.getInt(R.styleable.DiscreteScrollView_dsv_orientation, DEFAULT_ORIENTATION);
- ta.recycle();
- }
-
- isOverScrollEnabled = getOverScrollMode() != OVER_SCROLL_NEVER;
-
- layoutManager = new DiscreteScrollLayoutManager(
- getContext(), new ScrollStateListener(),
- DSVOrientation.values()[orientation]);
- setLayoutManager(layoutManager);
- }
-
- public void setRatio(float ratio){
- layoutManager.setRatio(ratio);
- }
-
- @Override
- public void setLayoutManager(LayoutManager layout) {
- if (layout instanceof DiscreteScrollLayoutManager) {
- super.setLayoutManager(layout);
- } else {
- throw new IllegalArgumentException(getContext().getString(R.string.dsv_ex_msg_dont_set_lm));
- }
- }
-
-
- @Override
- public boolean fling(int velocityX, int velocityY) {
- boolean isFling = super.fling(velocityX, velocityY);
- if (isFling) {
- layoutManager.onFling(velocityX, velocityY);
- } else {
- layoutManager.returnToCurrentPosition();
- }
- return isFling;
- }
-
- @Nullable
- public ViewHolder getViewHolder(int position) {
- View view = layoutManager.findViewByPosition(position);
- return view != null ? getChildViewHolder(view) : null;
- }
-
- /**
- * @return adapter position of the current item or -1 if nothing is selected
- */
- public int getCurrentItem() {
- return layoutManager.getCurrentPosition();
- }
-
- public void setItemTransformer(DiscreteScrollItemTransformer transformer) {
- layoutManager.setItemTransformer(transformer);
- }
-
- public void setItemTransitionTimeMillis(@IntRange(from = 10) int millis) {
- layoutManager.setTimeForItemSettle(millis);
- }
-
- public void setSlideOnFling(boolean result){
- layoutManager.setShouldSlideOnFling(result);
- }
-
- public void setSlideOnFlingThreshold(int threshold){
- layoutManager.setSlideOnFlingThreshold(threshold);
- }
-
- public void setOrientation(DSVOrientation orientation) {
- layoutManager.setOrientation(orientation);
- }
-
- public void setOffscreenItems(int items) {
- layoutManager.setOffscreenItems(items);
- }
-
- public void setClampTransformProgressAfter(@IntRange(from = 1) int itemCount) {
- if (itemCount <= 1) {
- throw new IllegalArgumentException("must be >= 1");
- }
- layoutManager.setTransformClampItemCount(itemCount);
- }
-
- public void setOverScrollEnabled(boolean overScrollEnabled) {
- isOverScrollEnabled = overScrollEnabled;
- setOverScrollMode(OVER_SCROLL_NEVER);
- }
-
- public void addScrollStateChangeListener(@NonNull ScrollStateChangeListener> scrollStateChangeListener) {
- scrollStateChangeListeners.add(scrollStateChangeListener);
- }
-
- public void addScrollListener(@NonNull ScrollListener> scrollListener) {
- addScrollStateChangeListener(new ScrollListenerAdapter(scrollListener));
- }
-
- public void addOnItemChangedListener(@NonNull OnItemChangedListener> onItemChangedListener) {
- onItemChangedListeners.add(onItemChangedListener);
- }
-
- public void removeScrollStateChangeListener(@NonNull ScrollStateChangeListener> scrollStateChangeListener) {
- scrollStateChangeListeners.remove(scrollStateChangeListener);
- }
-
- public void removeScrollListener(@NonNull ScrollListener> scrollListener) {
- removeScrollStateChangeListener(new ScrollListenerAdapter<>(scrollListener));
- }
-
- public void removeItemChangedListener(@NonNull OnItemChangedListener> onItemChangedListener) {
- onItemChangedListeners.remove(onItemChangedListener);
- }
-
- private void notifyScrollStart(ViewHolder holder, int current) {
- for (ScrollStateChangeListener listener : scrollStateChangeListeners) {
- listener.onScrollStart(holder, current);
- }
- }
-
- private void notifyScrollEnd(ViewHolder holder, int current) {
- for (ScrollStateChangeListener listener : scrollStateChangeListeners) {
- listener.onScrollEnd(holder, current);
- }
- }
-
- private void notifyScroll(float position,
- int currentIndex, int newIndex,
- ViewHolder currentHolder, ViewHolder newHolder) {
- for (ScrollStateChangeListener listener : scrollStateChangeListeners) {
- listener.onScroll(position, currentIndex, newIndex,
- currentHolder,
- newHolder);
- }
- }
-
- private void notifyCurrentItemChanged(ViewHolder holder, int current) {
- for (OnItemChangedListener listener : onItemChangedListeners) {
- listener.onCurrentItemChanged(holder, current);
- }
- }
-
- private void notifyCurrentItemChanged() {
- if (onItemChangedListeners.isEmpty()) {
- return;
- }
- int current = layoutManager.getCurrentPosition();
- ViewHolder currentHolder = getViewHolder(current);
- notifyCurrentItemChanged(currentHolder, current);
- }
-
- public void setPendingScroll(int PendingScroll ) {
- layoutManager.setPendingScroll(PendingScroll);
- }
-
- private class ScrollStateListener implements DiscreteScrollLayoutManager.ScrollStateListener {
-
- @Override
- public void onIsBoundReachedFlagChange(boolean isBoundReached) {
- if (isOverScrollEnabled) {
- setOverScrollMode(isBoundReached ? OVER_SCROLL_ALWAYS : OVER_SCROLL_NEVER);
- }
- }
-
- @Override
- public void onScrollStart() {
- if (scrollStateChangeListeners.isEmpty()) {
- return;
- }
- int current = layoutManager.getCurrentPosition();
- ViewHolder holder = getViewHolder(current);
- if (holder != null) {
- notifyScrollStart(holder, current);
- }
- }
-
- @Override
- public void onScrollEnd() {
- if (onItemChangedListeners.isEmpty() && scrollStateChangeListeners.isEmpty()) {
- return;
- }
- int current = layoutManager.getCurrentPosition();
- ViewHolder holder = getViewHolder(current);
- if (holder != null) {
- notifyScrollEnd(holder, current);
- notifyCurrentItemChanged(holder, current);
- }
- }
-
- @Override
- public void onScroll(float currentViewPosition) {
- if (scrollStateChangeListeners.isEmpty()) {
- return;
- }
- int currentIndex = getCurrentItem();
- int newIndex = layoutManager.getNextPosition();
- if (currentIndex != newIndex) {
- notifyScroll(currentViewPosition,
- currentIndex, newIndex,
- getViewHolder(currentIndex),
- getViewHolder(newIndex));
- }
- }
-
- @Override
- public void onCurrentViewFirstLayout() {
- post(new Runnable() {
- @Override
- public void run() {
- notifyCurrentItemChanged();
- }
- });
- }
-
- @Override
- public void onDataSetChangeChangedPosition() {
- notifyCurrentItemChanged();
- }
- }
-
- public interface ScrollStateChangeListener {
-
- void onScrollStart(@NonNull T currentItemHolder, int adapterPosition);
-
- void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition);
-
- void onScroll(float scrollPosition,
- int currentPosition,
- int newPosition,
- @Nullable T currentHolder,
- @Nullable T newCurrent);
- }
-
- public interface ScrollListener {
-
- void onScroll(float scrollPosition,
- int currentPosition, int newPosition,
- @Nullable T currentHolder,
- @Nullable T newCurrent);
- }
-
- public interface OnItemChangedListener {
- /*
- * This method will be also triggered when view appears on the screen for the first time.
- * If data set is empty, viewHolder will be null and adapterPosition will be NO_POSITION
- */
- void onCurrentItemChanged(@Nullable T viewHolder, int adapterPosition);
- }
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java
deleted file mode 100644
index 36fb35c94d..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-import com.mogo.module.common.R;
-import java.util.Locale;
-
-/**
- * Created by yarolegovich on 28-Apr-17.
- */
-
-public class InfiniteScrollAdapter extends RecyclerView.Adapter
- implements DiscreteScrollLayoutManager.InitialPositionProvider {
-
- private static final int CENTER = Integer.MAX_VALUE / 2;
- private static final int RESET_BOUND = 100;
-
- public static InfiniteScrollAdapter wrap(
- @NonNull RecyclerView.Adapter adapter) {
- return new InfiniteScrollAdapter<>(adapter);
- }
-
- private RecyclerView.Adapter wrapped;
- private DiscreteScrollLayoutManager layoutManager;
-
- public InfiniteScrollAdapter(@NonNull RecyclerView.Adapter wrapped) {
- this.wrapped = wrapped;
- this.wrapped.registerAdapterDataObserver(new DataSetChangeDelegate());
- }
-
- @Override
- public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
- wrapped.onAttachedToRecyclerView(recyclerView);
- if (recyclerView instanceof DiscreteScrollView) {
- layoutManager = (DiscreteScrollLayoutManager) recyclerView.getLayoutManager();
- } else {
- String msg = recyclerView.getContext().getString(R.string.dsv_ex_msg_adapter_wrong_recycler);
- throw new RuntimeException(msg);
- }
- }
-
- @Override
- public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
- wrapped.onDetachedFromRecyclerView(recyclerView);
- layoutManager = null;
- }
-
- @Override
- public @NonNull T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return wrapped.onCreateViewHolder(parent, viewType);
- }
-
- @Override
- public void onBindViewHolder(@NonNull T holder, int position) {
- if (isResetRequired(position)) {
- int resetPosition = CENTER + mapPositionToReal(layoutManager.getCurrentPosition());
- setPosition(resetPosition);
- return;
- }
- wrapped.onBindViewHolder(holder, mapPositionToReal(position));
- }
-
- @Override
- public int getItemViewType(int position) {
- return wrapped.getItemViewType(mapPositionToReal(position));
- }
-
- @Override
- public int getItemCount() {
- return isInfinite() ? Integer.MAX_VALUE : wrapped.getItemCount();
- }
-
- public int getRealItemCount() {
- return wrapped.getItemCount();
- }
-
- public int getRealCurrentPosition() {
- return getRealPosition(layoutManager.getCurrentPosition());
- }
-
- public int getRealPosition(int position) {
- return mapPositionToReal(position);
- }
-
- public int getClosestPosition(int position) {
- ensureValidPosition(position);
- int adapterCurrent = layoutManager.getCurrentPosition();
- int current = mapPositionToReal(adapterCurrent);
- if (position == current) {
- return adapterCurrent;
- }
- int delta = position - current;
- int target = adapterCurrent + delta;
- int wraparoundTarget = adapterCurrent + (position > current ?
- delta - wrapped.getItemCount() :
- wrapped.getItemCount() + delta);
- int distance = Math.abs(adapterCurrent - target);
- int wraparoundDistance = Math.abs(adapterCurrent - wraparoundTarget);
- if (distance == wraparoundDistance) {
- //Scroll to the right feels more natural, so prefer it
- return target > adapterCurrent ? target : wraparoundTarget;
- } else {
- return distance < wraparoundDistance ? target : wraparoundTarget;
- }
- }
-
- private int mapPositionToReal(int position) {
- if (position < CENTER) {
- int rem = (CENTER - position) % wrapped.getItemCount();
- return rem == 0 ? 0 : wrapped.getItemCount() - rem;
- } else {
- return (position - CENTER) % wrapped.getItemCount();
- }
- }
-
- private boolean isResetRequired(int requestedPosition) {
- return isInfinite()
- && (requestedPosition <= RESET_BOUND
- || requestedPosition >= (Integer.MAX_VALUE - RESET_BOUND));
- }
-
- private void ensureValidPosition(int position) {
- if (position >= wrapped.getItemCount()) {
- throw new IndexOutOfBoundsException(String.format(Locale.US,
- "requested position is outside adapter's bounds: position=%d, size=%d",
- position, wrapped.getItemCount()));
- }
- }
-
- private boolean isInfinite() {
- return wrapped.getItemCount() > 1;
- }
-
- @Override
- public int getInitialPosition() {
- return isInfinite() ? CENTER : 0;
- }
-
- private void setPosition(int position) {
- layoutManager.scrollToPosition(position);
- }
-
- //TODO: handle proper data set change notifications
- private class DataSetChangeDelegate extends RecyclerView.AdapterDataObserver {
-
- @Override
- public void onChanged() {
- setPosition(getInitialPosition());
- notifyDataSetChanged();
- }
-
- @Override
- public void onItemRangeRemoved(int positionStart, int itemCount) {
- onChanged();
- }
-
- @Override
- public void onItemRangeInserted(int positionStart, int itemCount) {
- onChanged();
- }
-
- @Override
- public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
- onChanged();
- }
-
- @Override
- public void onItemRangeChanged(int positionStart, int itemCount) {
- notifyItemRangeChanged(0, getItemCount());
- }
-
- @Override
- public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
- notifyItemRangeChanged(0, getItemCount(), payload);
- }
- }
-}
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java
deleted file mode 100644
index cbafbf4f6b..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.yarolegovich.discretescrollview;
-
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-/**
- * Created by yarolegovich on 10/25/17.
- */
-public class RecyclerViewProxy {
-
- private RecyclerView.LayoutManager layoutManager;
-
- public RecyclerViewProxy(@NonNull RecyclerView.LayoutManager layoutManager) {
- this.layoutManager = layoutManager;
- }
-
- public void attachView(View view) {
- layoutManager.attachView(view);
- }
-
- public void detachView(View view) {
- layoutManager.detachView(view);
- }
-
- public void detachAndScrapView(View view, RecyclerView.Recycler recycler) {
- layoutManager.detachAndScrapView(view, recycler);
- }
-
- public void detachAndScrapAttachedViews(RecyclerView.Recycler recycler) {
- layoutManager.detachAndScrapAttachedViews(recycler);
- }
-
- public void recycleView(View view, RecyclerView.Recycler recycler) {
- recycler.recycleView(view);
- }
-
- public void removeAndRecycleAllViews(RecyclerView.Recycler recycler) {
- layoutManager.removeAndRecycleAllViews(recycler);
- }
-
- public int getChildCount() {
- return layoutManager.getChildCount();
- }
-
- public int getItemCount() {
- return layoutManager.getItemCount();
- }
-
- public View getMeasuredChildForAdapterPosition(int position, RecyclerView.Recycler recycler) {
- View view = recycler.getViewForPosition(position);
- layoutManager.addView(view);
- layoutManager.measureChildWithMargins(view, 0, 0);
- return view;
- }
-
- public void layoutDecoratedWithMargins(View v, int left, int top, int right, int bottom) {
- layoutManager.layoutDecoratedWithMargins(v, left, top, right, bottom);
- }
-
- public View getChildAt(int index) {
- return layoutManager.getChildAt(index);
- }
-
- public int getPosition(View view) {
- return layoutManager.getPosition(view);
- }
-
- public int getMeasuredWidthWithMargin(View child) {
- ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
- return layoutManager.getDecoratedMeasuredWidth(child) + lp.leftMargin + lp.rightMargin;
- }
-
- public int getMeasuredHeightWithMargin(View child) {
- ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
- return layoutManager.getDecoratedMeasuredHeight(child) + lp.topMargin + lp.bottomMargin;
- }
-
- public int getWidth() {
- return layoutManager.getWidth();
- }
-
- public int getHeight() {
- return layoutManager.getHeight();
- }
-
- public void offsetChildrenHorizontal(int amount) {
- layoutManager.offsetChildrenHorizontal(amount);
- }
-
- public void offsetChildrenVertical(int amount) {
- layoutManager.offsetChildrenVertical(amount);
- }
-
- public void requestLayout() {
- layoutManager.requestLayout();
- }
-
- public void startSmoothScroll(RecyclerView.SmoothScroller smoothScroller) {
- layoutManager.startSmoothScroll(smoothScroller);
- }
-
- public void removeAllViews() {
- layoutManager.removeAllViews();
- }
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java
deleted file mode 100644
index 5be48cd737..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.yarolegovich.discretescrollview.transform;
-
-import android.view.View;
-import androidx.recyclerview.widget.RecyclerView;
-
-/**
- * Created by yarolegovich on 02.03.2017.
- */
-
-public interface DiscreteScrollItemTransformer {
- void transformItem(View item, RecyclerView.ViewHolder childViewHolder,float position);
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java
deleted file mode 100644
index fc5fcd11d2..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.yarolegovich.discretescrollview.transform;
-
-import android.view.View;
-
-import androidx.annotation.IntDef;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Created by yarolegovich on 03.03.2017.
- */
-
-public class Pivot {
-
- public static final int AXIS_X = 0;
- public static final int AXIS_Y = 1;
-
- private static final int PIVOT_CENTER = -1;
- private static final int PIVOT_MAX = -2;
-
- private int axis;
- private int pivotPoint;
-
- public Pivot(@Axis int axis, int pivotPoint) {
- this.axis = axis;
- this.pivotPoint = pivotPoint;
- }
-
- public void setOn(View view) {
- if (axis == AXIS_X) {
- switch (pivotPoint) {
- case PIVOT_CENTER:
- view.setPivotX(view.getWidth() * 0.5f);
- break;
- case PIVOT_MAX:
- view.setPivotX(view.getWidth());
- break;
- default:
- view.setPivotX(pivotPoint);
- break;
- }
- return;
- }
-
- if (axis == AXIS_Y) {
- switch (pivotPoint) {
- case PIVOT_CENTER:
- view.setPivotY(view.getHeight() * 0.5f);
- break;
- case PIVOT_MAX:
- view.setPivotY(view.getHeight());
- break;
- default:
- view.setPivotY(pivotPoint);
- break;
- }
- }
- }
-
- @Axis
- public int getAxis() {
- return axis;
- }
-
- public enum X {
- LEFT {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_X, 0);
- }
- },
- CENTER {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_X, PIVOT_CENTER);
- }
- },
- RIGHT {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_X, PIVOT_MAX);
- }
- };
-
- public abstract Pivot create();
- }
-
- public enum Y {
- TOP {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_Y, 0);
- }
- },
- CENTER {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_Y, PIVOT_CENTER);
- }
- },
- BOTTOM {
- @Override
- public Pivot create() {
- return new Pivot(AXIS_Y, PIVOT_MAX);
- }
- };
-
- public abstract Pivot create();
- }
-
- @IntDef({AXIS_X, AXIS_Y})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Axis{
- }
-}
-
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java
deleted file mode 100644
index 89ec6c9b34..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.yarolegovich.discretescrollview.transform;
-
-import android.view.View;
-import androidx.annotation.FloatRange;
-import androidx.recyclerview.widget.RecyclerView;
-
-/**
- * Created by yarolegovich on 03.03.2017.
- */
-public class ScaleTransformer implements DiscreteScrollItemTransformer {
-
- private Pivot pivotX;
- private Pivot pivotY;
- private float minScale;
- private float maxMinDiff;
-
- public ScaleTransformer() {
- pivotX = Pivot.X.CENTER.create();
- pivotY = Pivot.Y.CENTER.create();
- minScale = 0.8f;
- maxMinDiff = 0.2f;
- }
-
- @Override
- public void transformItem(View item, RecyclerView.ViewHolder childViewHolder, float position) {
- pivotX.setOn(item);
- pivotY.setOn(item);
- float closenessToCenter = 1f - Math.abs(position);
- float scale = minScale + maxMinDiff * closenessToCenter;
- item.setScaleX(scale);
- item.setScaleY(scale);
- }
-
- public static class Builder {
-
- private ScaleTransformer transformer;
- private float maxScale;
-
- public Builder() {
- transformer = new ScaleTransformer();
- maxScale = 1f;
- }
-
- public Builder setMinScale(@FloatRange(from = 0.01) float scale) {
- transformer.minScale = scale;
- return this;
- }
-
- public Builder setMaxScale(@FloatRange(from = 0.01) float scale) {
- maxScale = scale;
- return this;
- }
-
- public Builder setPivotX(Pivot.X pivotX) {
- return setPivotX(pivotX.create());
- }
-
- public Builder setPivotX(Pivot pivot) {
- assertAxis(pivot, Pivot.AXIS_X);
- transformer.pivotX = pivot;
- return this;
- }
-
- public Builder setPivotY(Pivot.Y pivotY) {
- return setPivotY(pivotY.create());
- }
-
- public Builder setPivotY(Pivot pivot) {
- assertAxis(pivot, Pivot.AXIS_Y);
- transformer.pivotY = pivot;
- return this;
- }
-
- public ScaleTransformer build() {
- transformer.maxMinDiff = maxScale - transformer.minScale;
- return transformer;
- }
-
- private void assertAxis(Pivot pivot, @Pivot.Axis int axis) {
- if (pivot.getAxis() != axis) {
- throw new IllegalArgumentException("You passed a Pivot for wrong axis.");
- }
- }
- }
-}
diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java
deleted file mode 100644
index 7611c52a18..0000000000
--- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.yarolegovich.discretescrollview.util;
-
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.RecyclerView;
-import com.yarolegovich.discretescrollview.DiscreteScrollView;
-
-/**
- * Created by yarolegovich on 16.03.2017.
- */
-public class ScrollListenerAdapter implements DiscreteScrollView.ScrollStateChangeListener {
-
- private DiscreteScrollView.ScrollListener adaptee;
-
- public ScrollListenerAdapter(@NonNull DiscreteScrollView.ScrollListener adaptee) {
- this.adaptee = adaptee;
- }
-
- @Override
- public void onScrollStart(@NonNull T currentItemHolder, int adapterPosition) {
-
- }
-
- @Override
- public void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition) {
-
- }
-
- @Override
- public void onScroll(float scrollPosition,
- int currentIndex, int newIndex,
- @Nullable T currentHolder, @Nullable T newCurrentHolder) {
- adaptee.onScroll(scrollPosition, currentIndex, newIndex, currentHolder, newCurrentHolder);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof ScrollListenerAdapter) {
- return adaptee.equals(((ScrollListenerAdapter) obj).adaptee);
- } else {
- return super.equals(obj);
- }
- }
-}
diff --git a/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml b/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml
new file mode 100644
index 0000000000..3c91cb81a9
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml
new file mode 100644
index 0000000000..5d90ff43e3
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml
new file mode 100644
index 0000000000..37f8498d8c
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml
new file mode 100644
index 0000000000..ae4839f484
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/values/strings.xml b/modules/mogo-module-common/src/main/res/values/strings.xml
index f6affe31b5..74f2951c89 100644
--- a/modules/mogo-module-common/src/main/res/values/strings.xml
+++ b/modules/mogo-module-common/src/main/res/values/strings.xml
@@ -1,5 +1,6 @@
mogo-module-common
- You should not set LayoutManager on DiscreteScrollView.class instance. Library uses a special one. Just don\'t call the method.
- InfiniteScrollAdapter is supposed to work only with DiscreteScrollView
+ 确认
+ 取消
+ 是否退出导航?
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 7d95097c3e..41275ad0cc 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
@@ -34,6 +34,7 @@ import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant;
import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener;
import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager;
+import com.mogo.module.common.dialog.WMDialog;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
import com.mogo.module.extensions.ExtensionsModuleConst;
@@ -97,7 +98,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
private IMogoLocationClient mMogoLocationClient;
private IMogoNavi mMogoNavi;
private IMogoFragmentManager mMogoFragmentManager;
- private IMogoAddressManager mMogoAddressManager;
private IMogoMarkerManager mMogoMarkerManager;
private IMogoRegisterCenter mMogoRegisterCenter;
@@ -178,7 +178,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mEntrancePresenter = new EntrancePresenter( getContext(), this, mIMogoAuthorizeModuleManager );
mMogoFragmentManager = mApis.getFragmentManagerApi();
- mMogoAddressManager = mApis.getAddressManagerApi();
mStatusManager = mApis.getStatusManagerApi();
@@ -217,8 +216,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mExitNavi.setOnClickListener( view -> {
if ( mMogoNavi != null ) {
if ( mIsLock ) {
- NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() );
- naviNoticeDialog.show();
+ new WMDialog.Builder( getContext() )
+ .setOkButton( R.string.module_commons_button_ok, ( dlg, which ) -> {
+ mMogoNavi.stopNavi();
+ } )
+ .setCancelButton( R.string.module_commons_button_cancel, ( dlg, which ) -> {
+ dlg.dismiss();
+ } )
+ .setContent( R.string.module_commons_exit_navi_content )
+ .build()
+ .show();
} else {
MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.NAVI );
mMApUIController.recoverLockMode();
@@ -466,10 +473,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
if ( mCurrentUploadFrame == mUploadingFrameRes.length ) {
mCurrentUploadFrame = 12;
}
- mUploading.setImageResource( mUploadingFrameRes[mCurrentUploadFrame++%mUploadingFrameRes.length] );
+ mUploading.setImageResource( mUploadingFrameRes[mCurrentUploadFrame++ % mUploadingFrameRes.length] );
}
mUploadFrameAnimHandler.sendEmptyMessageDelayed( MSG_FRAME_ANIM, TIME_FRAME_INTERVAL_TIME );
- } else if( msg.what == MSG_STOP_ANIM ){
+ } else if ( msg.what == MSG_STOP_ANIM ) {
mStatusManager.setUploadingStatus( TAG, false );
}
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
index debafa9007..b46e8c7656 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
@@ -246,7 +246,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
protected void onResume() {
super.onResume();
mMogoStatusManager.setMainPageResumeStatus( TAG, true );
- if ( mCoverUpLayout.getVisibility() == View.VISIBLE ) {
+ if ( mCoverUpLayout.getVisibility() != View.VISIBLE ) {
mServiceApis.getAdasControllerApi().showADAS();
}
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java
index 81185341b8..14ec2be9ab 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java
@@ -125,7 +125,7 @@ public class SchemeIntent implements IMogoStatusChangedListener {
if ( mApis.getMapServiceApi().getNavi( mContext ).isNaviing() ) {
mApis.getMapServiceApi().getNavi( mContext ).naviTo( new MogoLatLng( dlat, dlon ) );
} else {
- mApis.getAddressManagerApi().calculatePath( new MogoLatLng( dlat, dlon ) );
+ mApis.getSearchManagerApi().calculatePath( new MogoLatLng( dlat, dlon ) );
}
} catch ( Exception e ) {
TipToast.shortTip( "目的地异常,不能导航" );
diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java
index a1cec4be2c..650f4d3998 100644
--- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java
+++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java
@@ -28,7 +28,6 @@ import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.launcher.IMogoLauncher;
import com.mogo.service.map.IMogoMapService;
-import com.mogo.service.module.IMogoAddressManager;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.statusmanager.IMogoStatusManager;
@@ -59,7 +58,7 @@ public class MapPresenter extends Presenter< MapView > implements
private IMogoStatusManager mStatusManager;
private IMogoRegisterCenter mRegisterCenter;
private IMogoLauncher mLauncher;
- private IMogoAddressManager mMogoAddressManager;
+ private IMogoSearchManager mMogoSearchManager;
private Rect mDisplayOverviewBounds;
public MapPresenter( MapView view ) {
@@ -208,7 +207,7 @@ public class MapPresenter extends Presenter< MapView > implements
lon = intent.getDoubleExtra( "LON", 0.0 );
}
- mMogoAddressManager.calculatePath( new MogoLatLng( lat, lon ) );
+ mMogoSearchManager.calculatePath( new MogoLatLng( lat, lon ) );
}
/**
@@ -287,7 +286,7 @@ public class MapPresenter extends Presenter< MapView > implements
private void onOpenNavi() {
mLauncher.backToLauncher( getContext() );
if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) {
- mMogoAddressManager.goSearch();
+ mSearchManager.showSearch();
}
AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" );
}
@@ -305,7 +304,7 @@ public class MapPresenter extends Presenter< MapView > implements
mRegisterCenter = apis.getRegisterCenterApi();
mRegisterCenter.registerMogoNaviListener( TAG, this );
mLauncher = apis.getLauncherApi();
- mMogoAddressManager = apis.getAddressManagerApi();
+ mMogoSearchManager = apis.getSearchManagerApi();
IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() );
mogoNavi.setCalculatePathDisplayBounds( new Rect(
@@ -418,7 +417,7 @@ public class MapPresenter extends Presenter< MapView > implements
break;
case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP:
case VoiceConstants.CMD_MAP_STOP_NAVI_MODE:
- mSearchManager.showMain();
+ mLauncher.backToLauncher( getContext() );
break;
case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP:
case VoiceConstants.CMD_MAP_NIGHT_MODE:
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java
index 8c2204f9f8..e5b4c314f6 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java
@@ -4,51 +4,56 @@ import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.MogoLatLng;
-import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoAddressManager;
+import com.mogo.service.module.IMogoSearchManager;
+import com.mogo.utils.logger.Logger;
/**
* @author zyz
* 2020-01-12.
+ *
+ * Deprecated, use {@link IMogoSearchManager} instead.
*/
+
+@Deprecated
@Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER )
public class MogoAddressManager implements IMogoAddressManager {
+ private static final String TAG = "MogoAddressManager";
+
@Override
public void goHome() {
- AddressManager.INSTANCE.goHome();
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void goCompany() {
- AddressManager.INSTANCE.goCompany();
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void goSearch() {
- AddressManager.INSTANCE.goSearch();
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void calculatePath( MogoLatLng destination ) {
- AddressManager.INSTANCE.calculatePath( destination );
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void categorySearch( String category ) {
- AddressManager.INSTANCE.categorySearch( category );
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void goSettings() {
- AddressManager.INSTANCE.goSettings();
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
@Override
public void init( Context context ) {
- AddressManager.INSTANCE.init( context );
- SearchServiceHolder.INSTANCE.init( context );
- SettingManager.INSTANCE.init( context );
+ Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." );
}
}
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java
index 75a749ba67..dfd463a490 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java
@@ -1,8 +1,11 @@
package com.mogo.module.navi.manager;
import android.content.Context;
+
import androidx.fragment.app.Fragment;
+
import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.map.MogoLatLng;
import com.mogo.map.constants.BroadcastMode;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.navi.constants.AMapConstants;
@@ -17,37 +20,57 @@ import com.mogo.service.module.IMogoSearchManager;
* @author zyz
* 2020-01-13.
*/
-@Route(path = MogoServicePaths.PATH_SEARCH_MANAGER)
+@Route( path = MogoServicePaths.PATH_SEARCH_MANAGER )
public class MogoSearchManager implements IMogoSearchManager {
- @Override public void goHome() {
+ @Override
+ public void goHome() {
AddressManager.INSTANCE.goHome();
}
- @Override public void goCompany() {
+ @Override
+ public void goCompany() {
AddressManager.INSTANCE.goCompany();
}
- @Override public void showSearch() {
+ @Override
+ public void showSearch() {
AddressManager.INSTANCE.goSearch();
}
- @Override public void showMain() {
+ @Override
+ public void showMain() {
SearchServiceHolder.INSTANCE.getFragmentManager().clearAll();
}
- @Override public void speakDraft() {
- SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode(BroadcastMode.CONCISE);
+ @Override
+ public void speakDraft() {
+ SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.CONCISE );
}
- @Override public void speakDetail() {
- SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode(BroadcastMode.DETAIL);
+ @Override
+ public void speakDetail() {
+ SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.DETAIL );
}
- @Override public void showCategory(String keyword) {
+ @Override
+ public void categorySearch( String keyword ) {
AddressManager.INSTANCE.categorySearch( keyword );
}
- @Override public void init(Context context) {
+ @Override
+ public void calculatePath( MogoLatLng destination ) {
+ AddressManager.INSTANCE.calculatePath( destination );
+ }
+ @Override
+ public void goSettings() {
+ AddressManager.INSTANCE.goSettings();
+ }
+
+ @Override
+ public void init( Context context ) {
+ AddressManager.INSTANCE.init( context );
+ SearchServiceHolder.INSTANCE.init( context );
+ SettingManager.INSTANCE.init( context );
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
index 108ba2ec75..972aa61212 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
@@ -9,9 +9,20 @@ import android.view.View;
import android.widget.TextView;
import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.search.geo.IMogoGeoSearch;
+import com.mogo.map.search.geo.IMogoGeoSearchListener;
+import com.mogo.map.search.geo.MogoGeocodeResult;
+import com.mogo.map.search.geo.MogoRegeocodeResult;
+import com.mogo.map.search.geo.query.MogoRegeocodeQuery;
+import com.mogo.module.common.dialog.WMDialog;
import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.module.service.MogoServiceProvider;
+import com.mogo.module.service.R;
import com.mogo.service.entrance.ButtonIndex;
import com.mogo.utils.TipToast;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
/**
* @author congtaowang
@@ -71,10 +82,10 @@ public class MockIntentHandler implements IntentHandler {
button11.setVisibility( View.VISIBLE );
button11.setBackgroundColor( Color.RED );
button11.setOnClickListener( view -> {
- Intent intent1 = new Intent( );
+ Intent intent1 = new Intent();
intent1.setAction( Intent.ACTION_VIEW );
intent1.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
- intent1.setData( Uri.parse("wechathelper://com.zhidao.wechathelper/main/transform?type=navi&lon=116.327007&lat=39.977639&from=os2.0") );
+ intent1.setData( Uri.parse( "wechathelper://com.zhidao.wechathelper/main/transform?type=navi&lon=116.327007&lat=39.977639&from=os2.0" ) );
try {
view.setOnClickListener( null );
view.getContext().startActivity( intent1 );
@@ -89,6 +100,37 @@ public class MockIntentHandler implements IntentHandler {
float bearing = intent.getFloatExtra( "bearing", 0 );
MarkerServiceHandler.getMapUIController().changeBearing( bearing );
break;
+ case 9:
+ new WMDialog.Builder( context )
+ .setOkButton( "确认", ( dlg, which ) -> {
+ dlg.dismiss();
+ } )
+ .setCancelButton( "取消", ( dlg, which ) -> {
+ dlg.dismiss();
+ } )
+ .setContent( "内容内容内容内容内容内容内容内容" )
+ .build()
+ .show();
+ break;
+ case 10:
+ IMogoGeoSearch geoSearch = MarkerServiceHandler.getMapService().getGeoSearch( context );
+ geoSearch.setGeoSearchListener( new IMogoGeoSearchListener() {
+ @Override
+ public void onRegeocodeSearched( MogoRegeocodeResult regeocodeResult ) {
+ Logger.d( TAG, GsonUtil.jsonFromObject( regeocodeResult ) );
+ }
+
+ @Override
+ public void onGeocodeSearched( MogoGeocodeResult geocodeResult ) {
+
+ }
+ } );
+ MogoRegeocodeQuery query = new MogoRegeocodeQuery();
+ query.setLatlngType( "autonavi" );
+ query.setPoint( new MogoLatLng( intent.getFloatExtra( "lat", 39.917366f ), intent.getFloatExtra( "lon", 116.39962f ) ) );
+ query.setRadius( 1000 );
+ geoSearch.getFromLocationAsyn( query );
+ break;
}
}
}
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 b2c827db12..346667562f 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
@@ -160,9 +160,11 @@ public interface IMogoServiceApis extends IProvider {
/**
* 地址操作
+ * Deprecated, use {@link IMogoSearchManager} instead.
*
* @return
*/
+ @Deprecated
IMogoAddressManager getAddressManagerApi();
/**
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
index d4a794ea16..dce52487ec 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
@@ -41,6 +41,7 @@ public interface IMogoMapService extends IProvider {
* @param context
* @return 定位实例
*/
+ @Deprecated
IMogoLocationClient getLocationClient( Context context );
/**
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java
index 617023ea53..cd83a54470 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java
@@ -6,22 +6,28 @@ import com.mogo.map.MogoLatLng;
/**
* @author zyz
* 2020-01-12.
+ *
+ * Deprecated, use {@link IMogoSearchManager} instead."
*/
+@Deprecated
public interface IMogoAddressManager extends IProvider {
/**
* 回家
*/
+ @Deprecated
void goHome();
/**
* 去公司
*/
+ @Deprecated
void goCompany();
/**
* 打开搜索
*/
+ @Deprecated
void goSearch();
/**
@@ -29,12 +35,15 @@ public interface IMogoAddressManager extends IProvider {
*
* @param destination 目的地
*/
+ @Deprecated
void calculatePath( MogoLatLng destination );
/**
* 分类搜索
*/
- void categorySearch(String category);
+ @Deprecated
+ void categorySearch( String category );
+ @Deprecated
void goSettings();
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java
index c477e5ecf0..106880c33a 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java
@@ -1,6 +1,7 @@
package com.mogo.service.module;
import com.alibaba.android.arouter.facade.template.IProvider;
+import com.mogo.map.MogoLatLng;
/**
* @author zyz
@@ -8,11 +9,41 @@ import com.alibaba.android.arouter.facade.template.IProvider;
*/
public interface IMogoSearchManager extends IProvider {
+ /**
+ * 回家
+ */
void goHome();
+
+ /**
+ * 去公司
+ */
void goCompany();
+
+ /**
+ * 打开搜索
+ */
void showSearch();
+
void showMain();
+
void speakDraft();
+
void speakDetail();
- void showCategory(String keyword);
+
+ /**
+ * 规划路线
+ *
+ * @param destination 目的地
+ */
+ void calculatePath( MogoLatLng destination );
+
+ /**
+ * 分类搜索
+ */
+ void categorySearch( String keyword );
+
+ /**
+ * 打开导航设置
+ */
+ void goSettings();
}