diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHShapeBlurView.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHShapeBlurView.java new file mode 100644 index 0000000000..b9170190c3 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHShapeBlurView.java @@ -0,0 +1,70 @@ +package com.mogo.och.common.module.wigets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.Shader; +import android.util.AttributeSet; +import android.util.TypedValue; + +import com.mogo.och.common.module.R; + + +/** + * Created by mmin18 on 9/27/16. + */ +public class OCHShapeBlurView extends OCHStockBlurView { + Paint mPaint; + RectF mRectF; + private float mRadius; + private int mTopColor; // default #aaffffff + private int mBottomColor; // default #aaffffff + + public OCHShapeBlurView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OCHRShapeBlurView); + mRadius = a.getDimension(R.styleable.OCHRShapeBlurView_och_realtime_radius, + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, context.getResources().getDisplayMetrics())); + mTopColor = a.getColor(R.styleable.OCHRShapeBlurView_och_realtime_start_color, 0xAAFFFFFF); + mBottomColor = a.getColor(R.styleable.OCHRShapeBlurView_och_realtime_end_color, 0xAAFFFFFF); + a.recycle(); + mPaint = new Paint(); + mRectF = new RectF(); + } + + /** + * Custom oval shape + */ + @Override + protected void drawBlurredBitmap(Canvas canvas, Bitmap blurredBitmap, int overlayColor) { + if (blurredBitmap != null) { + mRectF.right = getWidth(); + mRectF.bottom = getHeight(); + + mPaint.reset(); + mPaint.setAntiAlias(true); + BitmapShader shader = new BitmapShader(blurredBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + Matrix matrix = new Matrix(); + matrix.postScale(mRectF.width() / blurredBitmap.getWidth(), mRectF.height() / blurredBitmap.getHeight()); + shader.setLocalMatrix(matrix); + mPaint.setShader(shader); + canvas.drawRoundRect(mRectF, mRadius,mRadius,mPaint); + + mPaint.reset(); + mPaint.setAntiAlias(true); + /* 设置渐变色 这个正方形的颜色是改变的 */ + Shader mShader = new LinearGradient(getWidth()/2, 0, getWidth()/2, getHeight(), + new int[] {mTopColor,mBottomColor}, null, Shader.TileMode.CLAMP); // 一个材质,打造出一个线性梯度沿著一条线。 + mPaint.setShader(mShader);//0xBFE0E8FF,0xBF6AA2D7 + canvas.drawRoundRect(mRectF, mRadius,mRadius,mPaint); + + } + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHStockBlurView.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHStockBlurView.java new file mode 100644 index 0000000000..f88571b949 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHStockBlurView.java @@ -0,0 +1,343 @@ +package com.mogo.och.common.module.wigets; + +import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.RenderScript; +import android.renderscript.ScriptIntrinsicBlur; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.View; +import android.view.ViewTreeObserver; + +import com.mogo.och.common.module.R; + +public class OCHStockBlurView extends View { + + private float mDownsampleFactor; // default 4 + private int mOverlayColor; // default #aaffffff + private float mBlurRadius; // default 10dp (0 < r <= 25) + private boolean onece; + + private boolean mDirty; + private Bitmap mBitmapToBlur, mBlurredBitmap; + private Canvas mBlurringCanvas; + private boolean mIsRendering; + private Paint mPaint; + private final Rect mRectSrc = new Rect(), mRectDst = new Rect(); + // mDecorView should be the root view of the activity (even if you are on a different window like a dialog) + private View mDecorView; + // If the view is on different root view (usually means we are on a PopupWindow), + // we need to manually call invalidate() in onPreDraw(), otherwise we will not be able to see the changes + private boolean mDifferentRoot; + private static int RENDERING_COUNT; + private static int BLUR_IMPL; + + private RenderScript mRenderScript; + private ScriptIntrinsicBlur mBlurScript; + private Allocation mBlurInput, mBlurOutput; + + public OCHStockBlurView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OCHRealtimeBlurView); + mBlurRadius = a.getDimension(R.styleable.OCHRealtimeBlurView_och_realtime_blur_radius, + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics())); + mDownsampleFactor = a.getFloat(R.styleable.OCHRealtimeBlurView_och_realtime_downsample_factor, 4); + mOverlayColor = a.getColor(R.styleable.OCHRealtimeBlurView_och_realtime_overlay_color, 0xAAFFFFFF); + onece = a.getBoolean(R.styleable.OCHRealtimeBlurView_och_realtime_onece,false); + a.recycle(); + + mPaint = new Paint(); + } + + public void setBlurRadius(float radius) { + if (mBlurRadius != radius) { + mBlurRadius = radius; + mDirty = true; + invalidate(); + } + } + + public void setDownsampleFactor(float factor) { + if (factor <= 0) { + throw new IllegalArgumentException("Downsample factor must be greater than 0."); + } + + if (mDownsampleFactor != factor) { + mDownsampleFactor = factor; + mDirty = true; // may also change blur radius + releaseBitmap(); + invalidate(); + } + } + + public void setOverlayColor(int color) { + if (mOverlayColor != color) { + mOverlayColor = color; + invalidate(); + } + } + + private void releaseBitmap() { + if (mBitmapToBlur != null) { + mBitmapToBlur.recycle(); + mBitmapToBlur = null; + } + if (mBlurredBitmap != null) { + mBlurredBitmap.recycle(); + mBlurredBitmap = null; + } + } + + protected void release() { + releaseBitmap(); + releaseBlur(); + } + + protected boolean prepare() { + if (mBlurRadius == 0) { + release(); + return false; + } + + float downsampleFactor = mDownsampleFactor; + float radius = mBlurRadius / downsampleFactor; + if (radius > 25) { + downsampleFactor = downsampleFactor * radius / 25; + radius = 25; + } + + final int width = getWidth(); + final int height = getHeight(); + + int scaledWidth = Math.max(1, (int) (width / downsampleFactor)); + int scaledHeight = Math.max(1, (int) (height / downsampleFactor)); + + boolean dirty = mDirty; + + if (mBlurringCanvas == null || mBlurredBitmap == null + || mBlurredBitmap.getWidth() != scaledWidth + || mBlurredBitmap.getHeight() != scaledHeight) { + dirty = true; + releaseBitmap(); + + boolean r = false; + try { + mBitmapToBlur = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888); + if (mBitmapToBlur == null) { + return false; + } + mBlurringCanvas = new Canvas(mBitmapToBlur); + + mBlurredBitmap = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888); + if (mBlurredBitmap == null) { + return false; + } + + r = true; + } catch (OutOfMemoryError e) { + // Bitmap.createBitmap() may cause OOM error + // Simply ignore and fallback + } finally { + if (!r) { + release(); + return false; + } + } + } + + if (dirty) { + if (prepareBlur(getContext(), mBitmapToBlur, radius)) { + mDirty = false; + } else { + return false; + } + } + + return true; + } + + protected void blur(Bitmap bitmapToBlur, Bitmap blurredBitmap) { + mBlurInput.copyFrom(bitmapToBlur); + mBlurScript.setInput(mBlurInput); + mBlurScript.forEach(mBlurOutput); + mBlurOutput.copyTo(blurredBitmap); + } + + private final ViewTreeObserver.OnPreDrawListener preDrawListener = new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + final int[] locations = new int[2]; + Bitmap oldBmp = mBlurredBitmap; + View decor = mDecorView; + if (decor != null && isShown() && prepare()) { + boolean redrawBitmap = mBlurredBitmap != oldBmp; + oldBmp = null; + decor.getLocationOnScreen(locations); + int x = -locations[0]; + int y = -locations[1]; + + getLocationOnScreen(locations); + x += locations[0]; + y += locations[1]; + + // just erase transparent + mBitmapToBlur.eraseColor(mOverlayColor & 0xffffff); + + int rc = mBlurringCanvas.save(); + mIsRendering = true; + RENDERING_COUNT++; + try { + mBlurringCanvas.scale(1.f * mBitmapToBlur.getWidth() / getWidth(), 1.f * mBitmapToBlur.getHeight() / getHeight()); + mBlurringCanvas.translate(-x, -y); + if (decor.getBackground() != null) { + decor.getBackground().draw(mBlurringCanvas); + } + decor.draw(mBlurringCanvas); + } catch (StopException e) { + } finally { + mIsRendering = false; + RENDERING_COUNT--; + mBlurringCanvas.restoreToCount(rc); + } + + blur(mBitmapToBlur, mBlurredBitmap); + + if (redrawBitmap || mDifferentRoot) { + invalidate(); + } + } + if(onece) { + mDecorView.getViewTreeObserver().removeOnPreDrawListener(this); + } + return true; + } + }; + + protected View getActivityDecorView() { + Context ctx = getContext(); + for (int i = 0; i < 4 && ctx != null && !(ctx instanceof Activity) && ctx instanceof ContextWrapper; i++) { + ctx = ((ContextWrapper) ctx).getBaseContext(); + } + if (ctx instanceof Activity) { + return ((Activity) ctx).getWindow().getDecorView(); + } else { + return null; + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mDecorView = getRootView(); + if (mDecorView != null) { + mDecorView.getViewTreeObserver().addOnPreDrawListener(preDrawListener); + mDifferentRoot = mDecorView.getRootView() != getRootView(); + if (mDifferentRoot) { + mDecorView.postInvalidate(); + } + } else { + mDifferentRoot = false; + } + } + + @Override + protected void onDetachedFromWindow() { + if (mDecorView != null) { + mDecorView.getViewTreeObserver().removeOnPreDrawListener(preDrawListener); + } + release(); + super.onDetachedFromWindow(); + } + + @Override + public void draw(Canvas canvas) { + if (mIsRendering) { + // Quit here, don't draw views above me + throw STOP_EXCEPTION; + } else if (RENDERING_COUNT > 0) { + // Doesn't support blurview overlap on another blurview + } else { + super.draw(canvas); + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawBlurredBitmap(canvas, mBlurredBitmap, mOverlayColor); + } + + /** + * Custom draw the blurred bitmap and color to define your own shape + * + * @param canvas + * @param blurredBitmap + * @param overlayColor + */ + protected void drawBlurredBitmap(Canvas canvas, Bitmap blurredBitmap, int overlayColor) { + if (blurredBitmap != null) { + mRectSrc.right = blurredBitmap.getWidth(); + mRectSrc.bottom = blurredBitmap.getHeight(); + mRectDst.right = getWidth(); + mRectDst.bottom = getHeight(); + canvas.drawBitmap(blurredBitmap, mRectSrc, mRectDst, null); + } + mPaint.setColor(overlayColor); + canvas.drawRect(mRectDst, mPaint); + } + + private static class StopException extends RuntimeException { + } + + private static StopException STOP_EXCEPTION = new StopException(); + + + public boolean prepareBlur(Context context, Bitmap buffer, float radius) { + if (mRenderScript == null) { + try { + mRenderScript = RenderScript.create(context); + mBlurScript = ScriptIntrinsicBlur.create(mRenderScript, Element.U8_4(mRenderScript)); + } catch (android.renderscript.RSRuntimeException e) { + // In release mode, just ignore + releaseBlur(); + return false; + } + } + mBlurScript.setRadius(radius); + + mBlurInput = Allocation.createFromBitmap(mRenderScript, buffer, + Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); + mBlurOutput = Allocation.createTyped(mRenderScript, mBlurInput.getType()); + + return true; + } + + public void releaseBlur() { + if (mBlurInput != null) { + mBlurInput.destroy(); + mBlurInput = null; + } + if (mBlurOutput != null) { + mBlurOutput.destroy(); + mBlurOutput = null; + } + if (mBlurScript != null) { + mBlurScript.destroy(); + mBlurScript = null; + } + if (mRenderScript != null) { + mRenderScript.destroy(); + mRenderScript = null; + } + } + +} diff --git a/OCH/mogo-och-common-module/src/main/res/values/attrs.xml b/OCH/mogo-och-common-module/src/main/res/values/attrs.xml index 5c2f6845f0..002381f781 100644 --- a/OCH/mogo-och-common-module/src/main/res/values/attrs.xml +++ b/OCH/mogo-och-common-module/src/main/res/values/attrs.xml @@ -34,4 +34,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerBaseRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerBaseRespBean.java new file mode 100644 index 0000000000..4ad877a45b --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerBaseRespBean.java @@ -0,0 +1,15 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; +import java.util.Objects; + +/** + * Created by pangfan on 2021/8/19 + * + * 查询订单返回数据结构 + */ +public class TaxiPassengerBaseRespBean extends BaseData { + public Object data; +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCheckPhoneUpdateOrderReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCheckPhoneUpdateOrderReqBean.java new file mode 100644 index 0000000000..6e1c9544ce --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCheckPhoneUpdateOrderReqBean.java @@ -0,0 +1,17 @@ +package com.mogo.och.taxi.passenger.bean; + +/** + * Created by pangfan on 2021/8/19 + * + * 验证手机号后四位同时流转订单状态 + */ +public class TaxiPassengerCheckPhoneUpdateOrderReqBean { + + public String orderNo; + public String phone; + + public TaxiPassengerCheckPhoneUpdateOrderReqBean(String driverSn, String orderNo,String phone) { + this.orderNo = orderNo; + this.phone = phone; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java index 5b1da564c7..dc5859b4ab 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java @@ -45,7 +45,10 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData { public long startTime; //预计用车时间:预约单=下单时的预约用车时间;即时单=派单成功的时间+预估的达到上车点的时间 public long bookingTime; - + //乘客手机号 + public String passengerPhone; + //订单多少乘客 + public String passengerCount; // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCheckPhoneCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCheckPhoneCallback.java new file mode 100644 index 0000000000..40cecf0a30 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCheckPhoneCallback.java @@ -0,0 +1,6 @@ +package com.mogo.och.taxi.passenger.callback; + +public interface ITaxiPassengerCheckPhoneCallback { + //验证手机号并流转状态 + void onCheckPhoneAndUpdateOrderStatus(String phoneTail); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index e3266028cc..3ad46fa372 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -26,10 +26,12 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; @@ -673,6 +675,28 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,(int) sumLength); } + public void checkPhoneAndUpdateStatus(String phoneTail) { + if (mCurrentOCHOrder == null) return; + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- checkPhoneAndUpdateStatus"); + TaxiPassengerServiceManager.getInstance().checkPhoneAndUpdateOrderStatus(mContext, mCurrentOCHOrder.orderNo, + phoneTail, new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerBaseRespBean data) { + ToastUtils.showLong("success"); + } + + @Override + public void onError() { + ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!"); + } + + @Override + public void onFail(int code, String msg) { + ToastUtils.showLong("onFail"+code+msg); + } + }); + } + private void runOnUIThread(Runnable executor) { if (executor == null) { return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java index 7e3d423755..7703a2bf14 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java @@ -1,4 +1,6 @@ package com.mogo.och.taxi.passenger.network; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; @@ -63,4 +65,14 @@ interface TaxiPassengerServiceApi { // @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) @GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" ) Observable queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); + + /** + * 通过orderNo查询订单信息(用于本地已经有orderNo时) + * @param data + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST( "/autopilot-car-hailing/passenger/v2/vehicle/taxi/verification/phone" ) + Observable checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerCheckPhoneUpdateOrderReqBean data); + } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java index d1e111635d..099aebd508 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java @@ -12,6 +12,8 @@ import com.mogo.eagle.core.network.RequestOptions; import com.mogo.eagle.core.network.SubscribeImpl; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; @@ -141,4 +143,15 @@ public class TaxiPassengerServiceManager { } }; } + + public void checkPhoneAndUpdateOrderStatus(Context context, String orderNo,String phone ,TaxiPassengerServiceCallback callback){ + + mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus( + MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new TaxiPassengerCheckPhoneUpdateOrderReqBean(getDriverAppSn(),orderNo,phone)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")); + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index fd1d8ef13a..ff968bba03 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -149,6 +149,11 @@ public class BaseTaxiPassengerPresenter extends Presenter mView.showOrHidePressengerCheckPager(true, order.startSiteAddr, + order.endSiteAddr, order.passengerCount, order.carNumber, order.passengerPhone)); + return; + } if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus || TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ runOnUIThread(() -> mView.showOrHideServingOrderFragment(true)); @@ -174,4 +179,8 @@ public class BaseTaxiPassengerPresenter extends Presenter getPresenter().checkAndUpdateStatus(phoneTail)); } /** @@ -253,4 +262,22 @@ public class TaxiPassengerBaseFragment extends MvpFragment(4) + private val numSelectTextView = arrayOfNulls(4) + + private fun initView(context: Context) { + d(SceneConstant.M_TAXI_P + TAG, "initView") + LayoutInflater.from(context).inflate(R.layout.taxi_p_passenger_check_panel, this, true) + tvPassengerCount = findViewById(R.id.tv_passenger_count) + tvPassengerStart = findViewById(R.id.tv_passenger_start) + tvPassengerEnd = findViewById(R.id.tv_passenger_end) + tvTaxiNumber = findViewById(R.id.tv_taxi_number) + tvTaxiPassengerNumberfirst = findViewById(R.id.tv_taxi_passenger_number_first) + tvTaxiPassengerNumberSecond = findViewById(R.id.tv_taxi_passenger_number_second) + tvTaxiPassengerNumberThird = findViewById(R.id.tv_taxi_passenger_number_third) + tvTaxiPassengerNumberFourth = findViewById(R.id.tv_taxi_passenger_number_fourth) + keyBoardLogic() + numSelectTextView[0] = tvTaxiPassengerNumberfirst + numSelectTextView[1] = tvTaxiPassengerNumberSecond + numSelectTextView[2] = tvTaxiPassengerNumberThird + numSelectTextView[3] = tvTaxiPassengerNumberFourth + } + + private fun keyBoardLogic() { + findViewById(R.id.tv_taxi_passenger_number_one).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_two).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_three).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_four).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_five).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_six).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_seven).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_eight).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_nine).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_zero).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_back).setOnClickListener(this) + findViewById(R.id.tv_taxi_passenger_number_submit).setOnClickListener(this) + + tvTaxiPassengerNumberfirst.setOnClickListener(this) + tvTaxiPassengerNumberSecond.setOnClickListener(this) + tvTaxiPassengerNumberThird.setOnClickListener(this) + tvTaxiPassengerNumberFourth.setOnClickListener(this) + } + + override fun onClick(v: View?) { + when (v?.id) { + R.id.tv_taxi_passenger_number_one -> {showNumver(1)} + R.id.tv_taxi_passenger_number_two -> {showNumver(2)} + R.id.tv_taxi_passenger_number_three-> {showNumver(3)} + R.id.tv_taxi_passenger_number_four-> {showNumver(4)} + R.id.tv_taxi_passenger_number_five -> {showNumver(5)} + R.id.tv_taxi_passenger_number_six -> {showNumver(6)} + R.id.tv_taxi_passenger_number_seven -> {showNumver(7)} + R.id.tv_taxi_passenger_number_eight -> {showNumver(8)} + R.id.tv_taxi_passenger_number_nine -> {showNumver(9)} + R.id.tv_taxi_passenger_number_zero -> {showNumver(0)} + R.id.tv_taxi_passenger_number_back -> {deleteNumver()} + R.id.tv_taxi_passenger_number_first -> {selectIndex(0)} + R.id.tv_taxi_passenger_number_second -> {selectIndex(1)} + R.id.tv_taxi_passenger_number_third -> {selectIndex(2)} + R.id.tv_taxi_passenger_number_fourth -> {selectIndex(3)} + R.id.tv_taxi_passenger_number_submit -> {checkAndCommit()} + else -> {} + } + } + + private fun checkAndCommit() { + val numberStr = "${numSelect[0]}${numSelect[1]}${numSelect[2]}${numSelect[3]}" + if(!phone.endsWith(numberStr)){ + ToastUtils.showLong("请输入正确的手机尾号") + return + } + onCheckPhoneAndUpdateStatusListener?.onCheckPhoneAndUpdateOrderStatus(numberStr) + } + + private fun selectIndex(i: Int) { + index = i + changeStyle() + } + + private fun showNumver(number: Int) { + if (index in 0..3) { + numSelect[index] = number + numSelectTextView[index]!!.text = number.toString() + if(index!=3){ + index++ + } + changeStyle() + } + } + + private fun deleteNumver() { + if (index in 0..3) { + if(numSelect[index]==null){ + if(index!=0){ + index-- + } + changeStyle() + return + } + numSelect[index] = null + numSelectTextView[index]!!.text = "" + } + } + + private fun changeStyle() { + numSelectTextView.forEachIndexed { indexIn, textView -> + if(indexIn==index){ + numSelectTextView[index]!!.setBackgroundResource(R.drawable.bg_taxi_p_checked_input_background) + numSelectTextView[index]!!.setTextColor(resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked)) + numSelectTextView[index]!!.setShadowLayer(0f,0f,0f, + resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked_text_shadow)) + }else{ + numSelectTextView[indexIn]!!.setBackgroundResource(R.drawable.bg_taxi_p_check_input_background) + numSelectTextView[indexIn]!!.setTextColor(resources.getColor(R.color.taxi_p_check_keyboard_input_field)) + numSelectTextView[indexIn]!!.setShadowLayer(20f,0f,2f, + resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked_text_shadow)) + } + } + + } + + fun setData( + startSiteAddr: String?, + endSiteAddr: String?, + passengerCount: String? = "1", + carNumber: String?, + phone: String? + ) { + this.phone = phone?:"" + val sb = SpannableStringBuilder("乘客数:$passengerCount 位") // 包装字体内容 + sb.setSpan( + TextAppearanceSpan("default", + Typeface.NORMAL,100, + resources.getColorStateList(R.color.taxi_p_check_passenger_number) ,null ), + 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE) + tvPassengerCount.text = sb + tvPassengerStart.text = "起 点 : $startSiteAddr" + tvPassengerEnd.text = "终 点 : $endSiteAddr" + tvTaxiNumber.text = "蘑菇 " + carNumber + "为您服务" + } + + companion object { + const val TAG = "TaxiPassengerCheckView" + } + + init { + try { + initView(context) + } catch (e: Exception) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_checked_input_background.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_checked_input_background.png new file mode 100644 index 0000000000..ec58d028f2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_checked_input_background.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_end_boll.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_end_boll.png new file mode 100644 index 0000000000..97644d1c3d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_end_boll.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_logo.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_logo.png new file mode 100644 index 0000000000..328da8bc90 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_logo.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_panel_bg.png new file mode 100755 index 0000000000..49567f10c2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_panel_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_robot.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_robot.png new file mode 100644 index 0000000000..156a3d1526 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_robot.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_boll.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_boll.png new file mode 100644 index 0000000000..c6a019187a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_boll.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_end_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_end_line.png new file mode 100644 index 0000000000..14c0e5fa19 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_passenger_check_start_end_line.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_checked_input_background.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_checked_input_background.png new file mode 100644 index 0000000000..ec58d028f2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_checked_input_background.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_end_boll.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_end_boll.png new file mode 100644 index 0000000000..97644d1c3d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_end_boll.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_logo.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_logo.png new file mode 100644 index 0000000000..328da8bc90 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_logo.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png new file mode 100755 index 0000000000..49567f10c2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_robot.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_robot.png new file mode 100644 index 0000000000..156a3d1526 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_robot.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_boll.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_boll.png new file mode 100644 index 0000000000..c6a019187a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_boll.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_end_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_end_line.png new file mode 100644 index 0000000000..14c0e5fa19 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_start_end_line.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_check_input_background.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_check_input_background.xml new file mode 100644 index 0000000000..a60d36d074 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_check_input_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_background.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_background.xml new file mode 100644 index 0000000000..8476da3706 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_submit_background.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_submit_background.xml new file mode 100644 index 0000000000..b29276965c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_keyboard_submit_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_passenger_check_panel.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_passenger_check_panel.xml new file mode 100644 index 0000000000..ee2e0a4365 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_passenger_check_panel.xml @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml index 24d1125213..343e9577d5 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml @@ -38,4 +38,17 @@ #00000000 + + #FFFFC836 + #FF282F62 + #FFFFFF + #FFFFFF + + #7020466F + #8039388E + #B630347D + #151937 + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml index 9be34f07d0..9f66fe500a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml @@ -24,4 +24,10 @@ 已达到目的地,请从右侧下车,感谢乘坐\'蘑菇车联\'无人驾驶车 已到达 感谢您使用蘑菇车联自动驾驶出行服务,期待下次与您相遇 + + + 欢迎体验MOGO自动驾驶出租车 + Hello,您好 + 请输出手机号后4位: + 小蘑菇 \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml index 59da5d765c..860407628e 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml @@ -11,4 +11,29 @@ 32px + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/layout/taxi_being_order.xml b/OCH/mogo-och-taxi/src/main/res/layout/taxi_being_order.xml index da7aa36c9d..d268b79352 100644 --- a/OCH/mogo-och-taxi/src/main/res/layout/taxi_being_order.xml +++ b/OCH/mogo-och-taxi/src/main/res/layout/taxi_being_order.xml @@ -236,6 +236,7 @@ android:text="@string/module_och_taxi_order_server_start" android:textColor="#4DFFFFFF" android:textSize="24sp" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml index 55b3e86c7b..317cae330d 100644 --- a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml @@ -1051,7 +1051,10 @@ 38px 40px 42px + 46px 48px + 76px + 120px -10px 10px 34px