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 deleted file mode 100644 index 40cecf0a30..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCheckPhoneCallback.java +++ /dev/null @@ -1,6 +0,0 @@ -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/callback/ITaxiPassengerScoreCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java new file mode 100644 index 0000000000..4bb7b6e187 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java @@ -0,0 +1,5 @@ +package com.mogo.och.taxi.passenger.callback; + +public interface ITaxiPassengerScoreCallback { + void onScoreCallback(int fraction,String orderNo); +} 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 31618df95a..5518237875 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 @@ -702,11 +702,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback }); } - public void arrivedAndScore(int score, ITaxiPassengerCommonValueCallback commonCallback) { - if (mCurrentOCHOrder == null) return; - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- checkPhoneAndUpdateStatus"); - TaxiPassengerServiceManager.getInstance().arrivedAndScore(mContext,mCurrentOCHOrder.orderNo, - score, new TaxiPassengerServiceCallback() { + public void arrivedAndScore(int score,String orderNo ,ITaxiPassengerCommonValueCallback commonCallback) { + if (orderNo == null) return; + TaxiPassengerServiceManager.getInstance().arrivedAndScore(mContext,orderNo,score, + new TaxiPassengerServiceCallback() { @Override public void onSuccess(TaxiPassengerBaseRespBean data) { ToastUtils.showLong("评分成功"); 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 18f8c192d1..86f529c5fb 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 @@ -123,7 +123,7 @@ public class BaseTaxiPassengerPresenter extends Presenter { - mView.showOrHideArrivedEndLayout(false, ""); - mView.showOrHidePressengerCheckPager(true, order.startSiteAddr, + mView.preOrderThankPageTenlogic(order.startSiteAddr, order.endSiteAddr, order.passengerNum, order.carNumber, order.passengerPhone); }); return; } + // 30 用户到达上车点 并通过了手机号后四位验证 + // 40 服务中 if (TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus || TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ runOnUIThread(() -> mView.showOrHideServingOrderFragment(true)); return; } + // 50 到达终点 乘客可以评价 if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){ TaxiPassengerModel.getInstance().recoverNaviInfo(); TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); runOnUIThread(() -> { mView.showOrHideServingOrderFragment(false); - mView.showOrHideArrivedEndLayout(true, order.endSiteAddr); + mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo); }); return; } + // 60 服务完成 页面 if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){ - runOnUIThread(() -> { - mView.showOrHideServingOrderFragment(false); - }); TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); mCurrentPassengerOrder = null; return; @@ -201,14 +203,8 @@ public class BaseTaxiPassengerPresenter extends Presenter() { - - @Override - public void onCommonCallback(Boolean aBoolean) { - mView.showArrivedEndLayout2Thank(aBoolean); - } - }); + public void arrivedAndScore(int score,String orderNo){ + TaxiPassengerModel.getInstance().arrivedAndScore(score,orderNo, aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean)); } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerArrivedView.kt index 0f40c4b5b3..08f1d072f5 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerArrivedView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerArrivedView.kt @@ -2,6 +2,7 @@ package com.mogo.och.taxi.passenger.ui import android.animation.* import android.content.Context +import android.graphics.drawable.AnimationDrawable import android.util.AttributeSet import android.view.LayoutInflater import android.view.View @@ -13,9 +14,17 @@ import android.widget.TextView import com.amap.api.navi.view.PoiInputSearchWidget import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.OverlayViewUtils import com.mogo.och.common.module.wigets.OCHBorderShadowLayout import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerScoreCallback +import com.mogo.och.taxi.passenger.utils.view.FrameSurfaceView +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import java.util.concurrent.TimeUnit + /** * @@ -41,12 +50,113 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { private lateinit var ivStarThird: ImageView private lateinit var ivStarFourth: ImageView private lateinit var ivStarFifth: ImageView + private lateinit var ivAnimalList: ImageView + private lateinit var svFrame: FrameSurfaceView + private var subscribe: Disposable?=null + private var orderNo = "" - var taxiPassengerCommonValueCallback: ITaxiPassengerCommonValueCallback?=null - var trAnimation: Animation = AnimationUtils.loadAnimation( + var right_res_id = arrayListOf( + R.drawable.tail_ani_0000, + R.drawable.tail_ani_0001, + R.drawable.tail_ani_0002, + R.drawable.tail_ani_0003, + R.drawable.tail_ani_0004, + R.drawable.tail_ani_0005, + R.drawable.tail_ani_0006, + R.drawable.tail_ani_0007, + R.drawable.tail_ani_0008, + R.drawable.tail_ani_0009, + R.drawable.tail_ani_0010, + R.drawable.tail_ani_0011, + R.drawable.tail_ani_0012, + R.drawable.tail_ani_0013, + R.drawable.tail_ani_0014, + R.drawable.tail_ani_0015, + R.drawable.tail_ani_0016, + R.drawable.tail_ani_0017, + R.drawable.tail_ani_0018, + R.drawable.tail_ani_0019, + R.drawable.tail_ani_0020, + R.drawable.tail_ani_0021, + R.drawable.tail_ani_0022, + R.drawable.tail_ani_0023, + R.drawable.tail_ani_0024, + R.drawable.tail_ani_0025, + R.drawable.tail_ani_0026, + R.drawable.tail_ani_0027, + R.drawable.tail_ani_0028, + R.drawable.tail_ani_0029, + R.drawable.tail_ani_0030, + R.drawable.tail_ani_0031, + R.drawable.tail_ani_0032, + R.drawable.tail_ani_0033, + R.drawable.tail_ani_0034, + R.drawable.tail_ani_0035, + R.drawable.tail_ani_0036, + R.drawable.tail_ani_0037, + R.drawable.tail_ani_0038, + R.drawable.tail_ani_0039, + R.drawable.tail_ani_0040, + R.drawable.tail_ani_0041, + R.drawable.tail_ani_0042, + R.drawable.tail_ani_0043, + R.drawable.tail_ani_0044, + R.drawable.tail_ani_0045, + R.drawable.tail_ani_0046, + R.drawable.tail_ani_0047, + R.drawable.tail_ani_0048, + R.drawable.tail_ani_0049, + R.drawable.tail_ani_0050, + R.drawable.tail_ani_0051, + R.drawable.tail_ani_0052, + R.drawable.tail_ani_0053, + R.drawable.tail_ani_0054, + R.drawable.tail_ani_0055, + R.drawable.tail_ani_0056, + R.drawable.tail_ani_0057, + R.drawable.tail_ani_0058, + R.drawable.tail_ani_0059, + R.drawable.tail_ani_0060, + R.drawable.tail_ani_0061, + R.drawable.tail_ani_0062, + R.drawable.tail_ani_0063, + R.drawable.tail_ani_0064, + R.drawable.tail_ani_0065, + R.drawable.tail_ani_0066, + R.drawable.tail_ani_0067, + R.drawable.tail_ani_0068, + R.drawable.tail_ani_0069, + R.drawable.tail_ani_0070, + R.drawable.tail_ani_0071, + R.drawable.tail_ani_0072, + R.drawable.tail_ani_0073, + R.drawable.tail_ani_0074, + R.drawable.tail_ani_0075, + R.drawable.tail_ani_0076, + R.drawable.tail_ani_0077, + R.drawable.tail_ani_0078, + R.drawable.tail_ani_0079, + R.drawable.tail_ani_0080, + R.drawable.tail_ani_0081, + R.drawable.tail_ani_0082, + R.drawable.tail_ani_0083, + R.drawable.tail_ani_0084, + R.drawable.tail_ani_0085, + R.drawable.tail_ani_0086, + R.drawable.tail_ani_0087, + R.drawable.tail_ani_0088, + R.drawable.tail_ani_0089, + R.drawable.tail_ani_0090 + ) + + + var iTaxiPassengerScoreCallback: ITaxiPassengerScoreCallback?=null + @Volatile + var taxiPassengerCommonCallback: ITaxiPassengerCommonCallback?=null + var left2Right: Animation = AnimationUtils.loadAnimation( context, R.anim.left_to_right ) - var troutAnimation: Animation = AnimationUtils.loadAnimation( + var right2Left: Animation = AnimationUtils.loadAnimation( context, R.anim.right_to_left ) var alphaAnimation: Animation = AnimationUtils.loadAnimation( @@ -55,6 +165,9 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { private var allStartOrdered = mutableListOf() + var show: Boolean = false + var showThanks:Boolean = false + private fun initView(context: Context) { d(SceneConstant.M_TAXI_P + TAG, "initView") LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true) @@ -62,15 +175,20 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { tvFeel = findViewById(R.id.tv_feel) ochShadowLayout = findViewById(R.id.och_shadow_layout) ochThankShadowLayout = findViewById(R.id.och_thank_shadow_layout) + ivAnimalList = findViewById(R.id.iv_animal_list) + svFrame = findViewById(R.id.sv_frame) - allStartOrdered = mutableListOf() + allStartOrdered = mutableListOf() initScore() findViewById(R.id.tv_please_score).setOnClickListener(this) + svFrame.setBitmapIds(right_res_id) + svFrame.setDuration(2000) + // debug 弹出 mArrivedEndStation.setOnLongClickListener { - showThanksPageWithAnimation(true) + scoreSuccess() false } } @@ -94,10 +212,25 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { allStartOrdered.add(ivStarFifth) } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + show = true + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + show = false + subscribe?.let { + if (!it.isDisposed) { + it.dispose() + } + } + } + override fun onClick(v: View?) { when (v?.id) { R.id.tv_please_score -> { - taxiPassengerCommonValueCallback?.onCommonCallback(2) + iTaxiPassengerScoreCallback?.onScoreCallback(2,orderNo) } R.id.iv_star_first -> {commitAndStartAnimation(1,"不满意")} R.id.iv_star_second -> {commitAndStartAnimation(2,"不满意")} @@ -127,6 +260,9 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { } } + /** + * 星星动画 + */ private fun animation(fraction: Int) { val showView = allStartOrdered[currentAnimarion] @@ -171,42 +307,88 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { set.addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator?) { super.onAnimationEnd(animation) - taxiPassengerCommonValueCallback?.onCommonCallback(fraction) + iTaxiPassengerScoreCallback?.onScoreCallback(fraction,orderNo) } }) } set.start() } - - fun setDataAndStartAnimation(endSiteAddr: String?) { + /** + * 设置目的地重置星星状态 + */ + fun setDataAndStartAnimation(endSiteAddr: String?,orderId:String) { mArrivedEndStation.text = endSiteAddr - ochShadowLayout.startAnimation(trAnimation) + ochThankShadowLayout.visibility = View.GONE + ivAnimalList.visibility = View.GONE + + //play frame animation by FrameSurfaceView which is much more memory-efficient than AnimationDrawable + svFrame.setRepeatTimes(0) + svFrame.setFrameFinishCallback { + ochShadowLayout.visibility = View.VISIBLE + svFrame.setBackgroundResource(R.drawable.tail_ani_0090) + ochShadowLayout.startAnimation(left2Right) + } + svFrame.start() + + showThanks = false + this.orderNo = orderId + resetStar() + } + + /** + * 评论成功 向左移动并消失 消失后感谢页面透明度0-1 然后开始小手的动画 + */ + fun scoreSuccess(){ + right2Left.setAnimationListener(object :PoiInputSearchWidget.AnimationListenerAdapter(){ + override fun onAnimationEnd(p0: Animation?) { + ochShadowLayout.visibility = View.GONE + ochThankShadowLayout.startAnimation(alphaAnimation) + alphaAnimation.setAnimationListener(object : PoiInputSearchWidget.AnimationListenerAdapter(){ + override fun onAnimationStart(p0: Animation?) { + ochThankShadowLayout.visibility = View.VISIBLE + showThanks = true + } + override fun onAnimationEnd(p0: Animation?) { + ivAnimalList.visibility = View.VISIBLE + val animationDrawable = ivAnimalList.drawable as AnimationDrawable + animationDrawable.start() + } + }) + } + }) + ochShadowLayout.startAnimation(right2Left) + + // 10s 后逻辑 + subscribe = Observable.timer(10000, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + // 正在展示感谢页面 + if (taxiPassengerCommonCallback == null) { + // 没有用户确定页面 + OverlayViewUtils.dismissOverlayView(this@TaxiPassengerArrivedView) + } else { + // 有排队展示的用户确定页面 + taxiPassengerCommonCallback?.onCommonCallback() + } + } + } + + /** + * 评论失败 重置状态 + */ + fun scoreFail(){ + tvFeel.text = "" + resetStar() + } + + private fun resetStar() { allStartOrdered.forEach { it.setImageResource(R.drawable.taxi_p_passenger_star) it.isEnabled = true } } - fun showThanksPageWithAnimation(isSuccess:Boolean) { - if(!isSuccess){ - tvFeel.text = "" - allStartOrdered.forEach { - it.setImageResource(R.drawable.taxi_p_passenger_star) - it.isEnabled = true - } - return - } - troutAnimation.setAnimationListener(object :PoiInputSearchWidget.AnimationListenerAdapter(){ - override fun onAnimationEnd(p0: Animation?) { - ochShadowLayout.visibility = View.GONE - ochThankShadowLayout.startAnimation(alphaAnimation) - ochThankShadowLayout.visibility = View.VISIBLE - } - }) - ochShadowLayout.startAnimation(troutAnimation) - } - companion object { const val TAG = "TaxiPassengerArrivedView" } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index 80d3117003..376e85c561 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -78,9 +78,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment(new TaxiPassengerArrivedView(getContext())); - mArrivedEndView.get().setTaxiPassengerCommonValueCallback(integer -> getPresenter().arrivedAndScore(integer)); + mArrivedEndView.get().setITaxiPassengerScoreCallback((fraction, orderNo) -> getPresenter().arrivedAndScore(fraction,orderNo)); } private void initCheckView() { mArrivedCheckView = new WeakReference<>(new TaxiPassengerCheckView(getContext())); - mArrivedCheckView.get().setOnCheckPhoneAndUpdateStatusListener(phoneTail -> getPresenter().checkAndUpdateStatus(phoneTail)); + mArrivedCheckView.get().setITaxiPassengerCommonValueCallback(phoneTail -> getPresenter().checkAndUpdateStatus(phoneTail)); } /** @@ -215,8 +208,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment { + showOrHideArrivedEndLayout(false, "",""); + showOrHidePressengerCheckPager(true, startSiteAddr, + endSiteAddr, passengerNum, carNumber, phone); + mArrivedEndView.get().setTaxiPassengerCommonCallback(null); + }); + }else { + // 正在展示打分页面 + showOrHideArrivedEndLayout(false, "",""); + showOrHidePressengerCheckPager(true, startSiteAddr, + endSiteAddr, passengerNum, carNumber, phone); + } + } + + } + + /** + * ① 取消订单 到达上车点后乘客取消订单 隐藏乘客验证页面 + * ② 司机到达上车点 到达上车点 展示乘客验证页面 + * ③ 乘客到达上车点 手机号验证成功后 隐藏乘客验证页面 + * ④ debug 使用 + */ public void showOrHidePressengerCheckPager(boolean isShow, String startSiteAddr, String endSiteAddr, String passengerNum, @@ -288,7 +322,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment?=null private lateinit var tvPassengerCount: TextView private lateinit var tvPassengerStart: TextView @@ -115,7 +114,7 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { ToastUtils.showLong("请输入正确的手机尾号") return } - onCheckPhoneAndUpdateStatusListener?.onCheckPhoneAndUpdateOrderStatus(numberStr) + iTaxiPassengerCommonValueCallback?.onCommonCallback(numberStr) } private fun selectIndex(i: Int) { @@ -141,7 +140,7 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { index-- } changeStyle() - return + //return } numSelect[index] = null numSelectTextView[index]!!.text = "" diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/BaseSurfaceView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/BaseSurfaceView.java new file mode 100644 index 0000000000..f65ded5302 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/BaseSurfaceView.java @@ -0,0 +1,174 @@ +package com.mogo.och.taxi.passenger.utils.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.PixelFormat; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Looper; +import android.os.Message; +import android.util.AttributeSet; +import android.util.Log; +import android.view.SurfaceHolder; +import android.view.SurfaceView; + +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; + +public abstract class BaseSurfaceView extends SurfaceView implements SurfaceHolder.Callback { + public static final int DEFAULT_FRAME_DURATION_MILLISECOND = 50; + + private HandlerThread handlerThread; + private SurfaceViewHandler handler; + protected int frameDuration = DEFAULT_FRAME_DURATION_MILLISECOND; + private Canvas canvas; + private boolean isAlive; + + public BaseSurfaceView(Context context) { + super(context); + init(); + } + + public BaseSurfaceView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public BaseSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + protected int getFrameDuration() { + return frameDuration; + } + + protected void setFrameDuration(int frameDuration) { + this.frameDuration = frameDuration; + } + + protected void init() { + getHolder().addCallback(this); + setBackgroundTransparent(); + } + + private void setBackgroundTransparent() { + getHolder().setFormat(PixelFormat.TRANSLUCENT); + setZOrderOnTop(true); + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + isAlive = true; + startDrawThread(); + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + stopDrawThread(); + isAlive = false; + } + + private void stopDrawThread() { + isAlive = false; + handlerThread.quit(); + handler = null; + } + + private void startDrawThread() { + handlerThread = new HandlerThread("SurfaceViewThread"); + handlerThread.start(); + handler = new SurfaceViewHandler(handlerThread.getLooper()); + handler.post(new DrawRunnable()); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int originWidth = getMeasuredWidth(); + int originHeight = getMeasuredHeight(); + int width = widthMode == MeasureSpec.AT_MOST ? getDefaultWidth() : originWidth; + int height = heightMode == MeasureSpec.AT_MOST ? getDefaultHeight() : originHeight; + setMeasuredDimension(width, height); + Log.v("ttaylor", "BaseSurfaceView.onMeasure()" + " default Width=" + getDefaultWidth() + " default height=" + getDefaultHeight()); + } + + /** + * the width is used when wrap_content is set to layout_width + * the child knows how big it should be + * + * @return + */ + protected abstract int getDefaultWidth(); + + /** + * the height is used when wrap_content is set to layout_height + * the child knows how big it should be + * + * @return + */ + protected abstract int getDefaultHeight(); + + + private class SurfaceViewHandler extends Handler { + + public SurfaceViewHandler(Looper looper) { + super(looper); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + } + } + + private class DrawRunnable implements Runnable { + + @Override + public void run() { + if (!isAlive) { + return; + } + try { + canvas = getHolder().lockCanvas(); + onFrameDraw(canvas); + } catch (Exception e) { + e.printStackTrace(); + } finally { + getHolder().unlockCanvasAndPost(canvas); + onFrameDrawFinish(); + } + + handler.postDelayed(this, frameDuration); + } + } + + /** + * it is will be invoked after one frame is drawn + */ + protected abstract void onFrameDrawFinish(); + + /** + * draw one frame to the surface by canvas + * + * @param canvas + */ + protected abstract void onFrameDraw(Canvas canvas); + + protected void runOnUIThread( Runnable executor ) { + if ( executor == null ) { + return; + } + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( executor ); + } else { + executor.run(); + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameFinishCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameFinishCallback.java new file mode 100644 index 0000000000..656d86048e --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameFinishCallback.java @@ -0,0 +1,5 @@ +package com.mogo.och.taxi.passenger.utils.view; + +public interface FrameFinishCallback { + void onFinishCallback(); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameSurfaceView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameSurfaceView.java new file mode 100644 index 0000000000..55e91afa5d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/FrameSurfaceView.java @@ -0,0 +1,399 @@ +package com.mogo.och.taxi.passenger.utils.view; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.os.Handler; +import android.os.HandlerThread; +import android.util.AttributeSet; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * a SurfaceView which draws bitmaps one after another like frame animation + */ +public class FrameSurfaceView extends BaseSurfaceView { + public static final int INVALID_INDEX = Integer.MAX_VALUE; + private int bufferSize = 3; + public static final String DECODE_THREAD_NAME = "DecodingThread"; + public static final int INFINITE = -1; + //-1 means repeat infinitely + private int repeatTimes; + private int repeatedCount; + + /** + * the resources of frame animation + */ + private List bitmapIds = new ArrayList<>(); + /** + * the index of bitmap resource which is decoding + */ + private int bitmapIdIndex; + /** + * the index of frame which is drawing + */ + private AtomicInteger frameIndex; + /** + * decoded bitmaps stores in this queue + * consumer is drawing thread, producer is decoding thread. + */ + private LinkedBlockingQueue decodedBitmaps = new LinkedBlockingQueue(bufferSize); + /** + * bitmaps already drawn by canvas stores in this queue + * consumer is decoding thread, producer is drawing thread. + */ + private LinkedBlockingQueue drawnBitmaps = new LinkedBlockingQueue(bufferSize); + /** + * the thread for decoding bitmaps + */ + private HandlerThread decodeThread; + /** + * the Runnable describes how to decode one bitmap + */ + private DecodeRunnable decodeRunnable; + /** + * this handler helps to decode bitmap one after another + */ + private Handler handler; + private BitmapFactory.Options options; + private Paint paint = new Paint(); + private Rect srcRect; + private Rect dstRect = new Rect(); + private int defaultWidth; + private int defaultHeight; + + private FrameFinishCallback frameFinishCallback; + + public FrameSurfaceView(Context context) { + super(context); + } + + public FrameSurfaceView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FrameSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public void setRepeatTimes(int repeatTimes) { + this.repeatTimes = repeatTimes; + } + + @Override + protected void init() { + super.init(); + options = new BitmapFactory.Options(); + options.inMutable = true; + decodeThread = new HandlerThread(DECODE_THREAD_NAME); + frameIndex = new AtomicInteger(); + frameIndex.set(INVALID_INDEX); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + dstRect.set(0, 0, getWidth(), getHeight()); + } + + @Override + protected int getDefaultWidth() { + return defaultWidth; + } + + @Override + protected int getDefaultHeight() { + return defaultHeight; + } + + @Override + protected void onFrameDrawFinish() { + } + + /** + * set the duration of frame animation + * + * @param duration time in milliseconds + */ + public void setDuration(int duration) { + int frameDuration = duration / bitmapIds.size(); + setFrameDuration(frameDuration); + } + + /** + * set the materials of frame animation which is an array of bitmap resource id + * + * @param bitmapIds an array of bitmap resource id + */ + public void setBitmapIds(List bitmapIds) { + if (bitmapIds == null || bitmapIds.size() == 0) { + return; + } + this.bitmapIds = bitmapIds; + //by default, take the first bitmap's dimension into consideration + getBitmapDimension(bitmapIds.get(bitmapIdIndex)); + preloadFrames(); + decodeRunnable = new DecodeRunnable(bitmapIdIndex, bitmapIds, options); + } + + private void getBitmapDimension(int bitmapId) { + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeResource(this.getResources(), bitmapId, options); + defaultWidth = options.outWidth; + defaultHeight = options.outHeight; + srcRect = new Rect(0, 0, defaultWidth, defaultHeight); + //we have to re-measure to make defaultWidth in use in onMeasure() + requestLayout(); + } + + /** + * load the first several frames of animation before it is started + */ + private void preloadFrames() { + decodeAndPutBitmap(bitmapIds.get(bitmapIdIndex++), options, new LinkedBitmap()); + decodeAndPutBitmap(bitmapIds.get(bitmapIdIndex++), options, new LinkedBitmap()); + } + + /** + * recycle the bitmap used by frame animation. + * Usually it should be invoked when the ui of frame animation is no longer visible + */ + public void destroy() { + if (drawnBitmaps != null) { + drawnBitmaps.clear(); + } + if (decodeThread != null) { + decodeThread.quit(); + decodeThread = null; + } + if (handler != null) { + handler = null; + } + } + + @Override + protected void onFrameDraw(Canvas canvas) { + clearCanvas(canvas); + if (!isStart()) { + return; + } + if (!isFinish()) { + drawOneFrame(canvas); + } else { + onFrameAnimationEnd(); + if (repeatTimes != 0 && repeatTimes == INFINITE) { + start(); + } else if (repeatedCount < repeatTimes) { + start(); + repeatedCount++; + } else { + repeatedCount = 0; + } + } + } + + /** + * draw a single frame which is a bitmap + * + * @param canvas + */ + private void drawOneFrame(Canvas canvas) { + LinkedBitmap linkedBitmap = getDecodedBitmap(); + if (linkedBitmap != null) { + canvas.drawBitmap(linkedBitmap.bitmap, srcRect, dstRect, paint); + } + putDrawnBitmap(linkedBitmap); + frameIndex.incrementAndGet(); + if(isFinish()&&frameFinishCallback!=null){ + runOnUIThread(() -> frameFinishCallback.onFinishCallback()); + } + } + + /** + * invoked when frame animation is done + */ + private void onFrameAnimationEnd() { + reset(); + } + + /** + * reset the index of frame, preparing for the next frame animation + */ + private void reset() { + frameIndex.set(INVALID_INDEX); + } + + /** + * whether frame animation is finished + * + * @return true: animation is finished, false: animation is doing + */ + private boolean isFinish() { + return frameIndex.get() >= bitmapIds.size() - 1; + } + + /** + * whether frame animation is started + * + * @return true: animation is started, false: animation is not started + */ + private boolean isStart() { + return frameIndex.get() != INVALID_INDEX; + } + + /** + * start frame animation from the first frame + */ + public void start() { + frameIndex.compareAndSet(INVALID_INDEX, 0); + if (decodeThread == null) { + decodeThread = new HandlerThread(DECODE_THREAD_NAME); + } + if (!decodeThread.isAlive()) { + decodeThread.start(); + } + if (handler == null) { + handler = new Handler(decodeThread.getLooper()); + } + if (decodeRunnable != null) { + decodeRunnable.setIndex(0); + } + handler.post(decodeRunnable); + } + + + /** + * clear out the drawing on canvas,preparing for the next frame + * * @param canvas + */ + private void clearCanvas(Canvas canvas) { + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + canvas.drawPaint(paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); + } + + /** + * decode bitmap by BitmapFactory.decodeStream(), it is about twice faster than BitmapFactory.decodeResource() + * + * @param resId the bitmap resource + * @param options + * @return + */ + private Bitmap decodeBitmap(int resId, BitmapFactory.Options options) { + options.inScaled = false; + InputStream inputStream = getResources().openRawResource(resId); + return BitmapFactory.decodeStream(inputStream, null, options); + } + + /** + * reuse bitmap in drawnBitmaps to decode new bitmap + * + * @param resId + * @param options + */ + private void decodedBitmapByReuse(int resId, BitmapFactory.Options options) { + LinkedBitmap linkedBitmap = getDrawnBitmap(); + if (linkedBitmap == null) { + linkedBitmap = new LinkedBitmap(); + } + options.inBitmap = linkedBitmap.bitmap; + decodeAndPutBitmap(resId, options, linkedBitmap); + } + + /** + * decode bitmap and put it into decodedBitmaps + * + * @param resId + * @param options + * @param linkedBitmap + */ + private void decodeAndPutBitmap(int resId, BitmapFactory.Options options, LinkedBitmap linkedBitmap) { + Bitmap bitmap = decodeBitmap(resId, options); + linkedBitmap.bitmap = bitmap; + try { + decodedBitmaps.put(linkedBitmap); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + private void putDrawnBitmap(LinkedBitmap bitmap) { + drawnBitmaps.offer(bitmap); + } + + /** + * get bitmap which already drawn by canvas + * + * @return + */ + private LinkedBitmap getDrawnBitmap() { + LinkedBitmap bitmap = null; + try { + bitmap = drawnBitmaps.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return bitmap; + } + + /** + * get decoded bitmap in the decoded bitmap queue + * it might block due to new bitmap is not ready + * + * @return + */ + private LinkedBitmap getDecodedBitmap() { + LinkedBitmap bitmap = null; + try { + bitmap = decodedBitmaps.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return bitmap; + } + + public FrameFinishCallback getFrameFinishCallback() { + return frameFinishCallback; + } + + public void setFrameFinishCallback(FrameFinishCallback frameFinishCallback) { + this.frameFinishCallback = frameFinishCallback; + } + + private class DecodeRunnable implements Runnable { + + private int index; + private List bitmapIds; + private BitmapFactory.Options options; + + public DecodeRunnable(int index, List bitmapIds, BitmapFactory.Options options) { + this.index = index; + this.bitmapIds = bitmapIds; + this.options = options; + } + + public void setIndex(int index) { + this.index = index; + } + + @Override + public void run() { + decodedBitmapByReuse(bitmapIds.get(index), options); + index++; + if (index < bitmapIds.size()) { + handler.post(this); + } else { + index = 0; + } + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBitmap.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBitmap.java new file mode 100644 index 0000000000..0de56b7ba5 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBitmap.java @@ -0,0 +1,12 @@ +package com.mogo.och.taxi.passenger.utils.view; + +import android.graphics.Bitmap; + +/** + * a structure used by LinkedBlockingQueue to keep bitmap + */ +public class LinkedBitmap { + public Bitmap bitmap; + public LinkedBitmap next; + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBlockingQueue.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBlockingQueue.java new file mode 100644 index 0000000000..7a02d44d89 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/LinkedBlockingQueue.java @@ -0,0 +1,205 @@ +package com.mogo.och.taxi.passenger.utils.view; + + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + +public class LinkedBlockingQueue { + /** + * Current number of elements + */ + private final AtomicInteger count = new AtomicInteger(); + /** + * Lock held by take, poll, etc + */ + private final ReentrantLock takeLock = new ReentrantLock(); + + /** + * Wait queue for waiting takes + */ + private final Condition notEmpty = takeLock.newCondition(); + + /** + * Lock held by put, offer, etc + */ + private final ReentrantLock putLock = new ReentrantLock(); + + /** + * Wait queue for waiting puts + */ + private final Condition notFull = putLock.newCondition(); + /** + * The capacity bound, or Integer.MAX_VALUE if none + */ + private final int capacity; + /** + * the first element in the queue + */ + private LinkedBitmap head; + /** + * the last element int the queue + */ + private LinkedBitmap tail; + + + public LinkedBlockingQueue(int capacity) { + if (capacity <= 0) throw new IllegalArgumentException(); + this.capacity = capacity; + } + + public void put(LinkedBitmap bitmap) throws InterruptedException { + if (bitmap == null) throw new NullPointerException(); + // Note: convention in all put/take/etc is to preset local var + // holding count negative to indicate failure unless set. + int c = -1; + final ReentrantLock putLock = this.putLock; + final AtomicInteger count = this.count; + putLock.lockInterruptibly(); + try { + /* + * Note that count is used in wait guard even though it is + * not protected by lock. This works because count can + * only decrease at this point (all other puts are shut + * out by lock), and we (or some other waiting put) are + * signalled if it ever changes from capacity. Similarly + * for all other uses of count in other wait guards. + */ + while (count.get() == capacity) { + notFull.await(); + } + enqueue(bitmap); + c = count.getAndIncrement(); + if (c + 1 < capacity) + notFull.signal(); + } finally { + putLock.unlock(); + } + if (c == 0) + signalNotEmpty(); + } + + public boolean offer(LinkedBitmap bitmap) { + if (bitmap == null) throw new NullPointerException(); + final AtomicInteger count = this.count; + if (count.get() == capacity) + return false; + int c = -1; + final ReentrantLock putLock = this.putLock; + putLock.lock(); + try { + if (count.get() < capacity) { + enqueue(bitmap); + c = count.getAndIncrement(); + if (c + 1 < capacity) + notFull.signal(); + } + } finally { + putLock.unlock(); + } + if (c == 0) + signalNotEmpty(); + return c >= 0; + } + + public LinkedBitmap take() throws InterruptedException { + LinkedBitmap x; + int c = -1; + final AtomicInteger count = this.count; + final ReentrantLock takeLock = this.takeLock; + takeLock.lockInterruptibly(); + try { + while (count.get() == 0) { + notEmpty.await(); + } + x = dequeue(); + c = count.getAndDecrement(); + if (c > 1) + notEmpty.signal(); + } finally { + takeLock.unlock(); + } + if (c == capacity) + signalNotFull(); + return x; + } + + /** + * insert element into the end of queue + * + * @param bitmap + */ + private void enqueue(LinkedBitmap bitmap) { + if (head == null) { + head = bitmap; + tail = bitmap; + bitmap.next = null; + } else { + tail.next = bitmap; + bitmap.next = null; + } + } + + /** + * get and remove the first element of the queue + * + * @return + */ + private LinkedBitmap dequeue() { + LinkedBitmap p = head; + if (p == null) { + return null; + } else { + head = head.next; + } + return p; + } + + /** + * Signals a waiting take. Called only from put/offer (which do not + * otherwise ordinarily lock takeLock.) + */ + private void signalNotEmpty() { + final ReentrantLock takeLock = this.takeLock; + takeLock.lock(); + try { + notEmpty.signal(); + } finally { + takeLock.unlock(); + } + } + + /** + * Signals a waiting put. Called only from take/poll. + */ + private void signalNotFull() { + final ReentrantLock putLock = this.putLock; + putLock.lock(); + try { + notFull.signal(); + } finally { + putLock.unlock(); + } + } + + /** + * recycle the bitmaps one by one + */ + public void clear() { + LinkedBitmap p = head; + if (p == null) { + return; + } + while (p != null) { + if (p.bitmap != null) { + p.bitmap.recycle(); + } + p.bitmap = null; + p = p.next; + } + } + + public Integer getCount() { + return count.get(); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/MethodUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/MethodUtil.java new file mode 100644 index 0000000000..7df1853286 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/MethodUtil.java @@ -0,0 +1,20 @@ +package com.mogo.och.taxi.passenger.utils.view; + +import android.os.SystemClock; +import android.util.Log; + +public class MethodUtil { + /** + * calculate the time consumed by runnable invocation, print log in millisecond + * + * @param runnable + */ + public static long time(Runnable runnable) { + long start = SystemClock.elapsedRealtime(); + runnable.run(); + long end = SystemClock.elapsedRealtime(); + long span = end - start; + Log.v("ttaylor", "MethodUtil.time()" + " time span = " + span + " ms"); + return span; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/NumberUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/NumberUtil.java new file mode 100644 index 0000000000..76b8d45b5c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/view/NumberUtil.java @@ -0,0 +1,32 @@ +package com.mogo.och.taxi.passenger.utils.view; + +import android.text.TextUtils; +import android.util.Log; + +public class NumberUtil { + + private static long total; + private static int times; + + private static String tag; + + /** + * calculate the average of a series long number and print it + * @param tag + * @param l + */ + public static void average(String tag, Long l) { + if (!TextUtils.isEmpty(tag) && !tag.equals(NumberUtil.tag)) { + reset(); + NumberUtil.tag = tag; + } + times++; + total += l; + Log.v("ttaylor", "Average.average() " + NumberUtil.tag + " average = " + (total / times)); + } + + private static void reset() { + total = 0; + times = 0; + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/anim/left_to_right.xml b/OCH/mogo-och-taxi-passenger/src/main/res/anim/left_to_right.xml index 9444da0304..a3fbfd8d32 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/anim/left_to_right.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/anim/left_to_right.xml @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/anim/right_to_left.xml b/OCH/mogo-och-taxi-passenger/src/main/res/anim/right_to_left.xml index dfc420e67e..cda1a0f99c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/anim/right_to_left.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/anim/right_to_left.xml @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_arrived_ani.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_arrived_ani.xml new file mode 100644 index 0000000000..cce2361910 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_arrived_ani.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml new file mode 100644 index 0000000000..48ccdcfe95 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00000.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00000.png new file mode 100755 index 0000000000..16d7388c6a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00000.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00002.png new file mode 100755 index 0000000000..03911ae2af Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00002.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png new file mode 100755 index 0000000000..f7dd0c6b25 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png new file mode 100755 index 0000000000..70108e3707 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png new file mode 100755 index 0000000000..a0877d0acc Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png new file mode 100755 index 0000000000..f297f5d342 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png new file mode 100755 index 0000000000..68f2afcae2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png new file mode 100755 index 0000000000..831402be08 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png new file mode 100755 index 0000000000..267f43b0f3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png new file mode 100755 index 0000000000..090e0f5956 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png new file mode 100755 index 0000000000..79dcb2bd7d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png new file mode 100755 index 0000000000..f0bdfebe51 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png new file mode 100755 index 0000000000..f2849724a9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png new file mode 100755 index 0000000000..61ced03693 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png new file mode 100755 index 0000000000..267f43b0f3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png new file mode 100755 index 0000000000..6ace3723e0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png new file mode 100755 index 0000000000..7bf472281c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png new file mode 100755 index 0000000000..b4f6621cf1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png new file mode 100755 index 0000000000..c7b712902f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png new file mode 100755 index 0000000000..948889745a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png new file mode 100755 index 0000000000..642dc60de2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png new file mode 100755 index 0000000000..58fd5e0e7e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png new file mode 100755 index 0000000000..19bcbac261 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png new file mode 100755 index 0000000000..acd43f4298 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png new file mode 100755 index 0000000000..170eb808a3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png new file mode 100755 index 0000000000..4be63ceae0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png new file mode 100755 index 0000000000..e32c7f0f05 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png new file mode 100755 index 0000000000..261498d77c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png new file mode 100755 index 0000000000..6e86e9562e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png new file mode 100755 index 0000000000..eccea55da7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png new file mode 100755 index 0000000000..84f0a318ec Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png new file mode 100755 index 0000000000..638959b769 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png new file mode 100755 index 0000000000..6cd7a9c5e3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png new file mode 100755 index 0000000000..7c98a6bc11 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png new file mode 100755 index 0000000000..1e29bf4ff5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00069.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00069.png new file mode 100755 index 0000000000..5ac76f3089 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00069.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.jpg new file mode 100755 index 0000000000..2890c08ef4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0001.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0001.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0001.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0002.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0002.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0002.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0003.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0003.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0003.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0004.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0004.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0004.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0005.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0005.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0005.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0006.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0006.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0006.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0007.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0007.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0007.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0008.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0008.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0008.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0009.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0009.jpg new file mode 100755 index 0000000000..14ee21e5a0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0009.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0010.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0010.jpg new file mode 100755 index 0000000000..8490db8e20 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0010.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0011.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0011.jpg new file mode 100755 index 0000000000..4b87758271 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0011.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0012.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0012.jpg new file mode 100755 index 0000000000..736b624c40 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0012.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0013.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0013.jpg new file mode 100755 index 0000000000..711639e5e3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0013.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0014.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0014.jpg new file mode 100755 index 0000000000..cd9769540f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0014.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0015.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0015.jpg new file mode 100755 index 0000000000..d41f338b6f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0015.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0016.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0016.jpg new file mode 100755 index 0000000000..2a0f87cbbe Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0016.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0017.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0017.jpg new file mode 100755 index 0000000000..2f144379bc Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0017.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0018.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0018.jpg new file mode 100755 index 0000000000..1dc6945239 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0018.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0019.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0019.jpg new file mode 100755 index 0000000000..20a9e7d175 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0019.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0020.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0020.jpg new file mode 100755 index 0000000000..94572374e6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0020.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0021.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0021.jpg new file mode 100755 index 0000000000..3fda64b043 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0021.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0022.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0022.jpg new file mode 100755 index 0000000000..37ee00f042 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0022.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0023.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0023.jpg new file mode 100755 index 0000000000..8478160592 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0023.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0024.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0024.jpg new file mode 100755 index 0000000000..a75bb92607 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0024.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0025.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0025.jpg new file mode 100755 index 0000000000..8247f9304f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0025.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0026.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0026.jpg new file mode 100755 index 0000000000..e562fe3f0f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0026.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0027.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0027.jpg new file mode 100755 index 0000000000..a71a21b8fb Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0027.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0028.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0028.jpg new file mode 100755 index 0000000000..94648a95c9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0028.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0029.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0029.jpg new file mode 100755 index 0000000000..1c4062365b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0029.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0030.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0030.jpg new file mode 100755 index 0000000000..2508aa055f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0030.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0031.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0031.jpg new file mode 100755 index 0000000000..3d1d1d9690 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0031.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0032.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0032.jpg new file mode 100755 index 0000000000..2f9a6da815 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0032.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0033.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0033.jpg new file mode 100755 index 0000000000..a4b500e9e0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0033.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0034.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0034.jpg new file mode 100755 index 0000000000..5d455a830a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0034.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0035.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0035.jpg new file mode 100755 index 0000000000..88a9083b8d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0035.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0036.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0036.jpg new file mode 100755 index 0000000000..3e118fe969 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0036.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0037.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0037.jpg new file mode 100755 index 0000000000..be9bc118af Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0037.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0038.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0038.jpg new file mode 100755 index 0000000000..4c5771c0bd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0038.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0039.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0039.jpg new file mode 100755 index 0000000000..9a693b6907 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0039.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0040.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0040.jpg new file mode 100755 index 0000000000..6c7d8bdc08 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0040.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0041.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0041.jpg new file mode 100755 index 0000000000..8235428c28 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0041.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0042.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0042.jpg new file mode 100755 index 0000000000..1e65aee6d8 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0042.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0043.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0043.jpg new file mode 100755 index 0000000000..51bddad08f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0043.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0044.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0044.jpg new file mode 100755 index 0000000000..5714b176d1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0044.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0045.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0045.jpg new file mode 100755 index 0000000000..edad1ee27e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0045.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0046.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0046.jpg new file mode 100755 index 0000000000..abc24eb5d9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0046.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0047.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0047.jpg new file mode 100755 index 0000000000..995d9a1d4c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0047.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0048.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0048.jpg new file mode 100755 index 0000000000..99e2139d5b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0048.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0049.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0049.jpg new file mode 100755 index 0000000000..cef0f721a3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0049.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0050.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0050.jpg new file mode 100755 index 0000000000..86cd759172 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0050.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0051.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0051.jpg new file mode 100755 index 0000000000..bb0763d485 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0051.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0052.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0052.jpg new file mode 100755 index 0000000000..e41bb7be37 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0052.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0053.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0053.jpg new file mode 100755 index 0000000000..f825caa976 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0053.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0054.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0054.jpg new file mode 100755 index 0000000000..74dd1f544d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0054.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0055.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0055.jpg new file mode 100755 index 0000000000..0f37ca5a8f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0055.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0056.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0056.jpg new file mode 100755 index 0000000000..a25aeb81f5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0056.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0057.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0057.jpg new file mode 100755 index 0000000000..b038c99abd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0057.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0058.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0058.jpg new file mode 100755 index 0000000000..396a715aca Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0058.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0059.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0059.jpg new file mode 100755 index 0000000000..71d589d4ff Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0059.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0060.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0060.jpg new file mode 100755 index 0000000000..b83216fda5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0060.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0061.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0061.jpg new file mode 100755 index 0000000000..ca94243c8e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0061.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0062.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0062.jpg new file mode 100755 index 0000000000..ada2672745 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0062.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0063.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0063.jpg new file mode 100755 index 0000000000..fa5949386d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0063.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0064.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0064.jpg new file mode 100755 index 0000000000..dab3b49419 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0064.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0065.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0065.jpg new file mode 100755 index 0000000000..befb8ee4e7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0065.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0066.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0066.jpg new file mode 100755 index 0000000000..275b35700d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0066.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0067.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0067.jpg new file mode 100755 index 0000000000..70b3fa9874 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0067.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0068.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0068.jpg new file mode 100755 index 0000000000..b1b6b868f5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0068.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0069.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0069.jpg new file mode 100755 index 0000000000..b1aca0ff04 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0069.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0070.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0070.jpg new file mode 100755 index 0000000000..5c88932a37 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0070.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0071.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0071.jpg new file mode 100755 index 0000000000..8ec5072801 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0071.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0072.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0072.jpg new file mode 100755 index 0000000000..81401a5361 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0072.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0073.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0073.jpg new file mode 100755 index 0000000000..8cd873e754 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0073.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0074.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0074.jpg new file mode 100755 index 0000000000..7fe75f74e1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0074.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0075.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0075.jpg new file mode 100755 index 0000000000..e718159739 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0075.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0076.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0076.jpg new file mode 100755 index 0000000000..9c76dda713 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0076.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0077.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0077.jpg new file mode 100755 index 0000000000..e64a1b0cbf Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0077.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0078.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0078.jpg new file mode 100755 index 0000000000..099cc47713 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0078.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0079.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0079.jpg new file mode 100755 index 0000000000..de4bbaf360 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0079.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0080.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0080.jpg new file mode 100755 index 0000000000..a9ee1c2f8e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0080.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0081.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0081.jpg new file mode 100755 index 0000000000..d393a3d0b4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0081.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0082.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0082.jpg new file mode 100755 index 0000000000..822e4d4ce5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0082.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0083.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0083.jpg new file mode 100755 index 0000000000..21bb38294c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0083.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0084.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0084.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0084.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0085.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0085.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0085.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0086.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0086.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0086.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0087.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0087.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0087.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0088.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0088.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0088.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0089.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0089.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0089.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.jpg b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.jpg new file mode 100755 index 0000000000..cd802473ac Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.jpg differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml index 4be10cf32d..b18d8e59c5 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml @@ -2,12 +2,20 @@ + + @@ -237,4 +246,14 @@ + + \ No newline at end of file