From 984bd57fd2afcee5dff9c5eafe37cb95be02fbeb Mon Sep 17 00:00:00 2001 From: donghongyu Date: Thu, 9 Dec 2021 17:50:36 +0800 Subject: [PATCH] =?UTF-8?q?[Delete]och=EF=BC=8C=E5=A2=9E=E5=8A=A0maven?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- OCH/README.md | 7 - OCH/mogo-och-bus/.gitignore | 1 - OCH/mogo-och-bus/build.gradle | 71 -- OCH/mogo-och-bus/consumer-rules.pro | 0 OCH/mogo-och-bus/gradle.properties | 3 - OCH/mogo-och-bus/proguard-rules.pro | 21 - OCH/mogo-och-bus/src/main/AndroidManifest.xml | 15 - .../java/com/mogo/och/bus/OchBusProvider.java | 105 -- .../och/bus/adapter/OchBusStationAdapter.java | 127 --- .../bus/bean/OchBusArriveAtStationMsg.java | 15 - .../bus/bean/OchBusLeaveStationRequest.java | 24 - .../bean/OchBusOperationStatusRequest.java | 33 - .../bean/OchBusOperationStatusResponse.java | 24 - .../com/mogo/och/bus/bean/OchBusOrder.java | 227 ----- .../mogo/och/bus/bean/OchBusResetRequest.java | 52 - .../och/bus/bean/OchBusRoutesRequest.java | 42 - .../och/bus/bean/OchBusRoutesResponse.java | 27 - .../mogo/och/bus/bean/OchBusRoutesResult.java | 27 - .../com/mogo/och/bus/bean/OchBusStation.java | 154 --- .../bus/bean/OchBusStationsChangedMsg.java | 15 - .../bean/QueryLeaveAwayPassengersRequest.java | 44 - .../QueryLeaveAwayPassengersResponse.java | 83 -- .../QueryOchBusOperationStatusRequest.java | 20 - .../och/bus/bean/UpdateSiteStatusRequest.java | 24 - .../mogo/och/bus/constant/OchBusConst.java | 19 - .../mogo/och/bus/fragment/OchBusFragment.java | 238 ----- .../mogo/och/bus/net/IOchBusApiService.java | 98 -- .../och/bus/presenter/OchBusOrderModel.java | 154 --- .../och/bus/presenter/OchBusPresenter.java | 653 ------------- .../receiver/TestOchBusBroadcastReceiver.java | 40 - .../och/bus/view/NoTouchConstraintLayout.java | 37 - .../och/bus/view/VerticalDashLineView.java | 64 -- ...e_mogo_och_bus_icon_not_arrive_station.png | Bin 338 -> 0 bytes ...e_mogo_och_bus_station_green_dash_line.xml | 12 - ...dule_mogo_och_bus_station_v_green_dash.xml | 11 - .../module_och_bus_panel_anchor_bkg.xml | 5 - .../res/drawable/module_och_bus_panel_bkg.xml | 19 - .../src/main/res/layout/fragment_och_bus.xml | 145 --- .../main/res/layout/item_och_bus_station.xml | 58 -- .../src/main/res/raw/bus_away_passengers.json | 184 ---- .../src/main/res/raw/bus_order_1.json | 28 - .../src/main/res/raw/bus_station_list1.json | 69 -- .../src/main/res/raw/bus_station_list2.json | 109 --- .../res/values-xhdpi-2560x1440/dimens.xml | 63 -- .../src/main/res/values/colors.xml | 17 - .../src/main/res/values/dimens.xml | 63 -- OCH/mogo-och-noop/.gitignore | 1 - OCH/mogo-och-noop/build.gradle | 61 -- OCH/mogo-och-noop/consumer-rules.pro | 0 OCH/mogo-och-noop/gradle.properties | 3 - OCH/mogo-och-noop/proguard-rules.pro | 21 - .../src/main/AndroidManifest.xml | 5 - .../java/com/mogo/och/bus/MogoOCHNoop.java | 50 - OCH/mogo-och-taxi/.gitignore | 1 - OCH/mogo-och-taxi/build.gradle | 66 -- OCH/mogo-och-taxi/consumer-rules.pro | 0 OCH/mogo-och-taxi/gradle.properties | 3 - OCH/mogo-och-taxi/proguard-rules.pro | 21 - .../src/main/AndroidManifest.xml | 5 - ...ogoADASAutoPilotStatusChangedListener.java | 13 - .../och/taxi/IMogoOCHTaxiArriveCallback.java | 33 - .../och/taxi/IOperationChangedListener.java | 6 - .../java/com/mogo/och/taxi/MogoOCHTaxi.java | 97 -- .../com/mogo/och/taxi/MogoOCHTaxiModel.java | 915 ------------------ .../java/com/mogo/och/taxi/OCHCarStatus.java | 20 - .../mogo/och/taxi/OCHCarStatusResponse.java | 29 - .../com/mogo/och/taxi/OCHOrderStatus.java | 47 - .../mogo/och/taxi/OCHOrderStatusCallback.java | 19 - .../mogo/och/taxi/OCHTaxiOrderResponse.java | 142 --- .../mogo/och/taxi/OCHTaxiOrderResponse2.java | 64 -- .../com/mogo/och/taxi/OCHTaxiOrderStatus.java | 24 - .../och/taxi/OCHTaxiOrderStatusResponse.java | 40 - .../mogo/och/taxi/OCHTaxiOverlayManager.java | 76 -- .../com/mogo/och/taxi/OCHTaxiServiceApi.java | 51 - .../com/mogo/och/taxi/ui/OCHTaxiFragment.java | 511 ---------- .../mogo/och/taxi/ui/OCHTaxiPresenter.java | 34 - .../mogo/och/taxi/ui/OCHTaxiUiController.java | 204 ---- .../com/mogo/och/taxi/ui/OCHTaxiView.java | 13 - .../drawable/module_och_taxi_panel_bkg.xml | 25 - .../module_och_taxi_panel_distance_bkg.xml | 13 - .../main/res/layout/module_och_taxi_panel.xml | 166 ---- .../src/main/res/raw/taxi_order.json | 22 - .../src/main/res/raw/taxi_order_detail.json | 39 - .../main/res/raw/taxi_order_state_update.json | 10 - .../res/values-xhdpi-2560x1440/dimens.xml | 28 - .../src/main/res/values/colors.xml | 9 - .../src/main/res/values/dimens.xml | 28 - .../src/main/res/values/strings.xml | 16 - OCH/mogo-och/.gitignore | 1 - OCH/mogo-och/build.gradle | 61 -- OCH/mogo-och/consumer-rules.pro | 0 OCH/mogo-och/gradle.properties | 3 - OCH/mogo-och/proguard-rules.pro | 21 - OCH/mogo-och/src/main/AndroidManifest.xml | 5 - .../java/com/mogo/och/BaseOchFragment.java | 273 ------ .../main/java/com/mogo/och/OCHConstants.java | 16 - .../com/mogo/och/view/FrameAnimImageView.java | 65 -- .../com/mogo/och/view/SlidePanelView.java | 268 ----- ...mogo_och_autopilot_text_color_selector.xml | 4 - .../module_mogo_och_autopilot_status_bg.xml | 16 - ...le_mogo_och_base_icon_not_in_autopilot.png | Bin 2342 -> 0 bytes .../module_mogo_och_icon_arrived_station.png | Bin 1420 -> 0 bytes .../module_mogo_och_icon_arriving_station.png | Bin 1349 -> 0 bytes .../module_och_base_slide_block.png | Bin 15058 -> 0 bytes .../module_och_bus_ic_autopilot.png | Bin 2342 -> 0 bytes .../module_och_dot_line.png | Bin 1004 -> 0 bytes ...mg_module_mogo_och_operation_status_bg.png | Bin 10050 -> 0 bytes ...module_mogo_och_base_icon_in_autopilot.png | Bin 8756 -> 0 bytes ...le_mogo_och_base_icon_not_in_autopilot.png | Bin 3347 -> 0 bytes .../module_mogo_och_base_notice_box_bg.9.png | Bin 4787 -> 0 bytes .../module_mogo_och_icon_arrived_station.png | Bin 850 -> 0 bytes .../module_mogo_och_icon_arriving_station.png | Bin 828 -> 0 bytes .../module_och_base_slide_block.png | Bin 9342 -> 0 bytes .../module_och_bus_ic_autopilot.png | Bin 1781 -> 0 bytes .../drawable-xhdpi/module_och_dot_line.png | Bin 323 -> 0 bytes ..._module_mogo_och_operation_status_bg.9.png | Bin 4299 -> 0 bytes .../module_mogo_och_autopilot_status_bg.xml | 16 - ...ule_mogo_och_autopilot_status_bg_check.png | Bin 20817 -> 0 bytes ...odule_mogo_och_autopilot_status_bg_nor.png | Bin 20635 -> 0 bytes ...ch_base_autopilot_status_icon_selector.xml | 5 - .../module_mogo_och_operation_status_bg.xml | 14 - .../res/drawable/module_och_panel_bkg.xml | 19 - .../layout/module_mogo_och_base_fragment.xml | 128 --- .../res/values-xhdpi-2560x1440/dimens.xml | 44 - OCH/mogo-och/src/main/res/values/attrs.xml | 13 - OCH/mogo-och/src/main/res/values/colors.xml | 5 - OCH/mogo-och/src/main/res/values/dimens.xml | 41 - app/functions/och.gradle | 44 +- .../com/mogo/launcher/MogoApplication.java | 17 - gradle.properties | 6 +- modules.txt | 4 - settings.gradle | 17 - 132 files changed, 27 insertions(+), 7257 deletions(-) delete mode 100644 OCH/README.md delete mode 100644 OCH/mogo-och-bus/.gitignore delete mode 100644 OCH/mogo-och-bus/build.gradle delete mode 100644 OCH/mogo-och-bus/consumer-rules.pro delete mode 100644 OCH/mogo-och-bus/gradle.properties delete mode 100644 OCH/mogo-och-bus/proguard-rules.pro delete mode 100644 OCH/mogo-och-bus/src/main/AndroidManifest.xml delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusArriveAtStationMsg.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusLeaveStationRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStationsChangedMsg.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/UpdateSiteStatusRequest.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/NoTouchConstraintLayout.java delete mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java delete mode 100644 OCH/mogo-och-bus/src/main/res/drawable-xhdpi/module_mogo_och_bus_icon_not_arrive_station.png delete mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_anchor_bkg.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_bkg.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/raw/bus_away_passengers.json delete mode 100644 OCH/mogo-och-bus/src/main/res/raw/bus_order_1.json delete mode 100644 OCH/mogo-och-bus/src/main/res/raw/bus_station_list1.json delete mode 100644 OCH/mogo-och-bus/src/main/res/raw/bus_station_list2.json delete mode 100644 OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/values/colors.xml delete mode 100644 OCH/mogo-och-bus/src/main/res/values/dimens.xml delete mode 100644 OCH/mogo-och-noop/.gitignore delete mode 100644 OCH/mogo-och-noop/build.gradle delete mode 100644 OCH/mogo-och-noop/consumer-rules.pro delete mode 100644 OCH/mogo-och-noop/gradle.properties delete mode 100644 OCH/mogo-och-noop/proguard-rules.pro delete mode 100644 OCH/mogo-och-noop/src/main/AndroidManifest.xml delete mode 100644 OCH/mogo-och-noop/src/main/java/com/mogo/och/bus/MogoOCHNoop.java delete mode 100644 OCH/mogo-och-taxi/.gitignore delete mode 100644 OCH/mogo-och-taxi/build.gradle delete mode 100644 OCH/mogo-och-taxi/consumer-rules.pro delete mode 100644 OCH/mogo-och-taxi/gradle.properties delete mode 100644 OCH/mogo-och-taxi/proguard-rules.pro delete mode 100644 OCH/mogo-och-taxi/src/main/AndroidManifest.xml delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IOperationChangedListener.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatus.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatusResponse.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatus.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatusCallback.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse2.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatusResponse.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOverlayManager.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiServiceApi.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java delete mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java delete mode 100644 OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/raw/taxi_order.json delete mode 100644 OCH/mogo-och-taxi/src/main/res/raw/taxi_order_detail.json delete mode 100644 OCH/mogo-och-taxi/src/main/res/raw/taxi_order_state_update.json delete mode 100644 OCH/mogo-och-taxi/src/main/res/values-xhdpi-2560x1440/dimens.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/values/colors.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/values/dimens.xml delete mode 100644 OCH/mogo-och-taxi/src/main/res/values/strings.xml delete mode 100644 OCH/mogo-och/.gitignore delete mode 100644 OCH/mogo-och/build.gradle delete mode 100644 OCH/mogo-och/consumer-rules.pro delete mode 100644 OCH/mogo-och/gradle.properties delete mode 100644 OCH/mogo-och/proguard-rules.pro delete mode 100644 OCH/mogo-och/src/main/AndroidManifest.xml delete mode 100644 OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java delete mode 100644 OCH/mogo-och/src/main/java/com/mogo/och/OCHConstants.java delete mode 100644 OCH/mogo-och/src/main/java/com/mogo/och/view/FrameAnimImageView.java delete mode 100644 OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java delete mode 100644 OCH/mogo-och/src/main/res/color/module_mogo_och_autopilot_text_color_selector.xml delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_autopilot_status_bg.xml delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_base_icon_not_in_autopilot.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_icon_arrived_station.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_icon_arriving_station.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_base_slide_block.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_bus_ic_autopilot.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_dot_line.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/img_module_mogo_och_operation_status_bg.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_icon_in_autopilot.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_icon_not_in_autopilot.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_notice_box_bg.9.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arrived_station.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arriving_station.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_base_slide_block.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_bus_ic_autopilot.png delete mode 100644 OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_dot_line.png delete mode 100644 OCH/mogo-och/src/main/res/drawable/img_module_mogo_och_operation_status_bg.9.png delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg.xml delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_check.png delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_nor.png delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_mogo_och_base_autopilot_status_icon_selector.xml delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_mogo_och_operation_status_bg.xml delete mode 100644 OCH/mogo-och/src/main/res/drawable/module_och_panel_bkg.xml delete mode 100644 OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml delete mode 100644 OCH/mogo-och/src/main/res/values-xhdpi-2560x1440/dimens.xml delete mode 100644 OCH/mogo-och/src/main/res/values/attrs.xml delete mode 100644 OCH/mogo-och/src/main/res/values/colors.xml delete mode 100644 OCH/mogo-och/src/main/res/values/dimens.xml diff --git a/OCH/README.md b/OCH/README.md deleted file mode 100644 index 56d1764db2..0000000000 --- a/OCH/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# 网约车(Online Car Hailing) - -## 小巴 - -## 出租车 - -## 无实现 \ No newline at end of file diff --git a/OCH/mogo-och-bus/.gitignore b/OCH/mogo-och-bus/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/OCH/mogo-och-bus/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/OCH/mogo-och-bus/build.gradle b/OCH/mogo-och-bus/build.gradle deleted file mode 100644 index e303b6368b..0000000000 --- a/OCH/mogo-och-bus/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'com.alibaba.arouter' - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - // buildToolsVersion rootProject.ext.android.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - - javaCompileOptions { - annotationProcessorOptions { - arguments = [AROUTER_MODULE_NAME: project.getName()] - } - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.arouter - annotationProcessor rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.androidxconstraintlayout - - implementation rootProject.ext.dependencies.rxjava - implementation rootProject.ext.dependencies.rxandroid - - implementation rootProject.ext.dependencies.androidxrecyclerview - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.mogooch - implementation rootProject.ext.dependencies.mogoutils - implementation rootProject.ext.dependencies.mogocommons - implementation rootProject.ext.dependencies.modulecommon - - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogo_core_data - implementation rootProject.ext.dependencies.mogo_core_function_api - } else { - implementation project(":OCH:mogo-och") - implementation project(":foudations:mogo-utils") - implementation project(":foudations:mogo-commons") - implementation project(":modules:mogo-module-common") - - implementation project(':core:mogo-core-utils') - implementation project(':core:mogo-core-data') - implementation project(':core:mogo-core-function-api') - - } -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/OCH/mogo-och-bus/consumer-rules.pro b/OCH/mogo-och-bus/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OCH/mogo-och-bus/gradle.properties b/OCH/mogo-och-bus/gradle.properties deleted file mode 100644 index dd5c44ee62..0000000000 --- a/OCH/mogo-och-bus/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.och -POM_ARTIFACT_ID=och-bus -VERSION_CODE=1 diff --git a/OCH/mogo-och-bus/proguard-rules.pro b/OCH/mogo-och-bus/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/OCH/mogo-och-bus/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/AndroidManifest.xml b/OCH/mogo-och-bus/src/main/AndroidManifest.xml deleted file mode 100644 index 8f40dcf1a5..0000000000 --- a/OCH/mogo-och-bus/src/main/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java deleted file mode 100644 index 870222587f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.mogo.och.bus; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.OCHConstants; -import com.mogo.och.bus.fragment.OchBusFragment; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.logger.Logger; - -/** - * 网约车小巴业务实现入口 - * - * @author tongchenfei - */ -@Route(path = OCHConstants.PATH) -public class OchBusProvider implements IMoGoFunctionProvider { - private static final String TAG = "OchBusProvider"; - private OchBusFragment busFragment; - private int containerId; - private FragmentActivity activity; - - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private void stepIntoVrMode(){ - Logger.d( TAG, "进入vr模式" ); - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() - .openVrMode(false); - } - - @Override - public void init(Context context) { - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus", StatusDescriptor.VR_MODE, statusChangedListener); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus", StatusDescriptor.TOP_VIEW, statusChangedListener); - } - - private void showFragment() { - if (busFragment == null) { - Logger.d(TAG, "准备add fragment======"); - busFragment = new OchBusFragment(); - activity.getSupportFragmentManager().beginTransaction().add(containerId, busFragment).commit(); - return; - } - Logger.d(TAG, "准备show fragment"); - activity.getSupportFragmentManager().beginTransaction().show(busFragment).commit(); - } - - private void hideFragment() { - if (busFragment != null) { - Logger.d(TAG, "准备hide fragment"); - activity.getSupportFragmentManager().beginTransaction().hide(busFragment).commit(); - } - - } - - private final IMogoStatusChangedListener statusChangedListener = (descriptor, isTrue) -> { - if (descriptor == StatusDescriptor.VR_MODE) { - // 进入vr模式默认显示网约车小巴fragment - if (isTrue) { - showFragment(); - } else { - hideFragment(); - } - } else if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() && descriptor == StatusDescriptor.TOP_VIEW) { - // topView进行展示时推出网约车界面,但是不隐藏整个fragment - if (busFragment != null && isTrue) { - busFragment.hideOchBus(); - } - } - }; - - @Nullable - @Override - public Fragment createCoverage(@Nullable FragmentActivity activity, @Nullable Integer containerId) { - this.containerId = containerId; - this.activity = activity; - - UiThreadHandler.postDelayed(this::stepIntoVrMode, 5_000L ); - return null; - } - - @NonNull - @Override - public String getFunctionName() { - return TAG; - } - - @Override - public void onDestroy() { - - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java deleted file mode 100644 index f46502e624..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.mogo.och.bus.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.view.VerticalDashLineView; - -import java.util.ArrayList; -import java.util.List; - -/** - * Station Panel 中的车站列表adapter - * - * @author tongchenfei - */ -public class OchBusStationAdapter extends RecyclerView.Adapter { - private final Context context; - private final List stationList = new ArrayList<>(); - private int currentStation; - - public OchBusStationAdapter(Context context) { - this.context = context; - } - - public void refreshStationList(List stationList) { - this.stationList.clear(); - this.stationList.addAll(stationList); - for (int i = 0; i < stationList.size(); i++) { - OchBusStation station = stationList.get(i); - if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_ARRIVING || station.getIsCurrentSite() == OchBusConst.STATION_STATUS_STOPPED ) { - currentStation = i; - break; - } - } - notifyDataSetChanged(); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_och_bus_station, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { -// Logger.d("OchBusStationAdapter", "position: " + position + " currPos: " + currentStation + " station: " + stationList.get(position)); - holder.tvStationName.setText(stationList.get(position).getSiteName()); - if (position == currentStation) { - if (currentStation == 0) { - // 在起始点 - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.module_mogo_och_icon_arrived_station); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_dash_color)); - } else { - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_current_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.module_mogo_och_icon_arriving_station); - holder.vDashTop.setGradient(context.getResources().getColor(R.color.module_mogo_och_bus_arriving_start_dash_color), context.getResources().getColor(R.color.module_mogo_och_bus_arriving_end_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_dash_color)); - } - } else if (position < currentStation) { - // 驶过 - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.module_mogo_och_icon_arrived_station); - if (position == currentStation - 1) { - holder.vDashBottom.setGradient(context.getResources().getColor(R.color.module_mogo_och_bus_leaving_start_dash_color), context.getResources().getColor(R.color.module_mogo_och_bus_leaving_end_dash_color)); - holder.vDashTop.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_dash_color)); - } else { - holder.vDashTop.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_dash_color)); - } - } else { - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.module_mogo_och_bus_icon_not_arrive_station); - holder.vDashTop.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_dash_color)); - } - - if (position == 0) { - holder.tvStationNotice.setText("起点"); - holder.tvStationNotice.setVisibility(View.VISIBLE); - holder.vDashTop.setVisibility(View.GONE); - holder.vDashBottom.setVisibility(View.VISIBLE); - } else if (position == getItemCount() - 1) { - holder.tvStationNotice.setText("终点"); - holder.tvStationNotice.setVisibility(View.VISIBLE); - holder.vDashTop.setVisibility(View.VISIBLE); - holder.vDashBottom.setVisibility(View.GONE); - } else { - holder.tvStationNotice.setVisibility(View.GONE); - holder.vDashTop.setVisibility(View.VISIBLE); - holder.vDashBottom.setVisibility(View.VISIBLE); - - } - - } - - @Override - public int getItemCount() { - return stationList.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - ImageView ivIcon; - TextView tvStationName; - TextView tvStationNotice; - VerticalDashLineView vDashBottom, vDashTop; - - public ViewHolder(@NonNull View itemView) { - super(itemView); - ivIcon = itemView.findViewById(R.id.module_mogo_och_bus_station_icon); - tvStationName = itemView.findViewById(R.id.module_mogo_och_bus_station_name); - tvStationNotice = itemView.findViewById(R.id.module_mogo_och_bus_station_notice); - vDashTop = itemView.findViewById(R.id.module_mogo_och_bus_station_top_dash); - vDashBottom = itemView.findViewById(R.id.module_mogo_och_bus_station_bottom_dash); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusArriveAtStationMsg.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusArriveAtStationMsg.java deleted file mode 100644 index af742321b0..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusArriveAtStationMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.bus.bean; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/3/23 - *

- * 小巴达到站点,推送需要下车的乘客列表 - */ -class OchBusArriveAtStationMsg { - - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusLeaveStationRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusLeaveStationRequest.java deleted file mode 100644 index d9e470ecf6..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusLeaveStationRequest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * 公交驶离车站,同步服务端请求参数封装 - * - * @author tongchenfei - */ -public class OchBusLeaveStationRequest { - private final String sn; - private final int siteId; - - public OchBusLeaveStationRequest(String sn, int siteId) { - this.sn = sn; - this.siteId = siteId; - } - - public String getSn() { - return sn; - } - - public int getSiteId() { - return siteId; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java deleted file mode 100644 index fd952f537e..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; -import com.mogo.utils.network.utils.Util; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class OchBusOperationStatusRequest { - - public String sn; - // 0 - 关闭、1 - 启动 - public String status; - - public OchBusOperationStatusRequest() { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - } - - public OchBusOperationStatusRequest shutdown() { - status = "0"; - return this; - } - - public OchBusOperationStatusRequest launch() { - status = "1"; - return this; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java deleted file mode 100644 index fa7ae2b59f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class OchBusOperationStatusResponse extends BaseData { - - public Result result; - - public static class Result { - public String id; - public String sn; - public String areaCode; - public String plateNumber; - public int status; - - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java deleted file mode 100644 index d1ba24ee9f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java +++ /dev/null @@ -1,227 +0,0 @@ -package com.mogo.och.bus.bean; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/3/23 - *

- * 小巴订单 - */ -class OchBusOrder { - - /** - * _id : bf014b186a0d417e8086f324e5cbcd1d - * orderNo : XB20210324000002 - * orderType : 10 - * userName : 星期一 - * userPhone : 15555555555 - * startStationId : 1 - * startStation : 万集东门站 - * startStationCoordinate : [116.7354579447,40.1974932972] - * endStationId : 2 - * endStation : 顺密路口站 - * endStationCoordinate : [116.7215386924,40.194019209] - * orderDispatchType : 1 - * carNum : 京NB007 - * sn : F803BB2037EZD00088 - * orderStartTime : Mar 24, 2021 12:51:51 PM - * orderEndTime : Mar 24, 2021 1:38:13 PM - * cityCode : 010 - * areaCode : 1001 - * createTime : Mar 24, 2021 12:51:51 PM - * updateTime : Mar 24, 2021 1:38:13 PM - * travelDistance : 1.2 - */ - - private String _id; - private String orderNo; - private int orderType; - private String userName; - private String userPhone; - private int startStationId; - private String startStation; - private int endStationId; - private String endStation; - private int orderDispatchType; - private String carNum; - private String sn; - private String orderStartTime; - private String orderEndTime; - private String cityCode; - private String areaCode; - private String createTime; - private String updateTime; - private double travelDistance; - private List< Double > startStationCoordinate; - private List< Double > endStationCoordinate; - - public String get_id() { - return _id; - } - - public void set_id( String _id ) { - this._id = _id; - } - - public String getOrderNo() { - return orderNo; - } - - public void setOrderNo( String orderNo ) { - this.orderNo = orderNo; - } - - public int getOrderType() { - return orderType; - } - - public void setOrderType( int orderType ) { - this.orderType = orderType; - } - - public String getUserName() { - return userName; - } - - public void setUserName( String userName ) { - this.userName = userName; - } - - public String getUserPhone() { - return userPhone; - } - - public void setUserPhone( String userPhone ) { - this.userPhone = userPhone; - } - - public int getStartStationId() { - return startStationId; - } - - public void setStartStationId( int startStationId ) { - this.startStationId = startStationId; - } - - public String getStartStation() { - return startStation; - } - - public void setStartStation( String startStation ) { - this.startStation = startStation; - } - - public int getEndStationId() { - return endStationId; - } - - public void setEndStationId( int endStationId ) { - this.endStationId = endStationId; - } - - public String getEndStation() { - return endStation; - } - - public void setEndStation( String endStation ) { - this.endStation = endStation; - } - - public int getOrderDispatchType() { - return orderDispatchType; - } - - public void setOrderDispatchType( int orderDispatchType ) { - this.orderDispatchType = orderDispatchType; - } - - public String getCarNum() { - return carNum; - } - - public void setCarNum( String carNum ) { - this.carNum = carNum; - } - - public String getSn() { - return sn; - } - - public void setSn( String sn ) { - this.sn = sn; - } - - public String getOrderStartTime() { - return orderStartTime; - } - - public void setOrderStartTime( String orderStartTime ) { - this.orderStartTime = orderStartTime; - } - - public String getOrderEndTime() { - return orderEndTime; - } - - public void setOrderEndTime( String orderEndTime ) { - this.orderEndTime = orderEndTime; - } - - public String getCityCode() { - return cityCode; - } - - public void setCityCode( String cityCode ) { - this.cityCode = cityCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode( String areaCode ) { - this.areaCode = areaCode; - } - - public String getCreateTime() { - return createTime; - } - - public void setCreateTime( String createTime ) { - this.createTime = createTime; - } - - public String getUpdateTime() { - return updateTime; - } - - public void setUpdateTime( String updateTime ) { - this.updateTime = updateTime; - } - - public double getTravelDistance() { - return travelDistance; - } - - public void setTravelDistance( double travelDistance ) { - this.travelDistance = travelDistance; - } - - public List< Double > getStartStationCoordinate() { - return startStationCoordinate; - } - - public void setStartStationCoordinate( List< Double > startStationCoordinate ) { - this.startStationCoordinate = startStationCoordinate; - } - - public List< Double > getEndStationCoordinate() { - return endStationCoordinate; - } - - public void setEndStationCoordinate( List< Double > endStationCoordinate ) { - this.endStationCoordinate = endStationCoordinate; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetRequest.java deleted file mode 100644 index 7dc9da88d1..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetRequest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * 重置车站状态请求参数 - * - * @author tongchenfei - */ -public class OchBusResetRequest { - private String sn; - private int siteId; - double lat; - double lon; - - public OchBusResetRequest(String sn, int siteId, double lat, double lon) { - this.sn = sn; - this.siteId = siteId; - this.lat = lat; - this.lon = lon; - } - - public String getSn() { - return sn; - } - - public void setSn(String sn) { - this.sn = sn; - } - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public double getLon() { - return lon; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public int getSiteId() { - return siteId; - } - - public void setSiteId(int siteId) { - this.siteId = siteId; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesRequest.java deleted file mode 100644 index 5de543ba60..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesRequest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * 网约车小巴路线请求参数封装 - * - * @author tongchenfei - */ -public class OchBusRoutesRequest { - double lat; - double lon; - String sn; - - public OchBusRoutesRequest(String sn, double lat, double lon) { - this.lat = lat; - this.lon = lon; - this.sn = sn; - } - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public double getLon() { - return lon; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public String getSn() { - return sn; - } - - public void setSn(String sn) { - this.sn = sn; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java deleted file mode 100644 index 5ba1f6fd06..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * 网约车小巴路线接口请求响应结果 - * - * @author tongchenfei - */ -public class OchBusRoutesResponse extends BaseData { - private OchBusRoutesResult result; - - public OchBusRoutesResult getResult() { - return result; - } - - public void setResult(OchBusRoutesResult result) { - this.result = result; - } - - @Override - public String toString() { - return "OchBusRoutesResponse{" + - "result=" + result + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java deleted file mode 100644 index d9042bcc16..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.bus.bean; - -import java.util.List; - -/** - * 网约车小巴路线接口返回接口数据封装 - * - * @author tongchenfei - */ -public class OchBusRoutesResult { - private List site; - - public List getSite() { - return site; - } - - public void setSite(List site) { - this.site = site; - } - - @Override - public String toString() { - return "OchBusRoutesResult{" + - "site=" + site + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java deleted file mode 100644 index 2172ec94f0..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * 单个网约车小巴车站信息 - * - * @author tongchenfei - */ -public class OchBusStation { - private int lineId; - private int siteId; - private String siteName; - private String cityCode; - private String areaCode; - private String areaName; - private double lat; - private double lon; - private String siteDesc; - private int siteState; - private int isCurrentSite;// @see OchBusConst 是否是当前站 1:是 2:下一站 0:普通站 - private int siteColor; - private String peoples; - private int ifStop; // 是否需要停靠、1需要、0不需要 - - public int getIfStop() { - return ifStop; - } - - public void setIfStop( int ifStop ) { - this.ifStop = ifStop; - } - - public int getLineId() { - return lineId; - } - - public void setLineId(int lineId) { - this.lineId = lineId; - } - - public int getSiteId() { - return siteId; - } - - public void setSiteId(int siteId) { - this.siteId = siteId; - } - - public String getSiteName() { - return siteName; - } - - public void setSiteName(String siteName) { - this.siteName = siteName; - } - - public String getCityCode() { - return cityCode; - } - - public void setCityCode(String cityCode) { - this.cityCode = cityCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getAreaName() { - return areaName; - } - - public void setAreaName(String areaName) { - this.areaName = areaName; - } - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public double getLon() { - return lon; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public String getSiteDesc() { - return siteDesc; - } - - public void setSiteDesc(String siteDesc) { - this.siteDesc = siteDesc; - } - - public int getSiteState() { - return siteState; - } - - public void setSiteState(int siteState) { - this.siteState = siteState; - } - - public int getIsCurrentSite() { - return isCurrentSite; - } - - public void setIsCurrentSite(int isCurrentSite) { - this.isCurrentSite = isCurrentSite; - } - - public int getSiteColor() { - return siteColor; - } - - public void setSiteColor(int siteColor) { - this.siteColor = siteColor; - } - - public String getPeoples() { - return peoples; - } - - public void setPeoples(String peoples) { - this.peoples = peoples; - } - - @Override - public String toString() { - return "OchBusStation{" + - "lineId=" + lineId + - ", siteId=" + siteId + - ", siteName='" + siteName + '\'' + - ", cityCode='" + cityCode + '\'' + - ", areaCode='" + areaCode + '\'' + - ", areaName='" + areaName + '\'' + - ", lat=" + lat + - ", lon=" + lon + - ", siteDesc='" + siteDesc + '\'' + - ", siteState=" + siteState + - ", isCurrentSite=" + isCurrentSite + - ", siteColor=" + siteColor + - ", peoples='" + peoples + '\'' + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStationsChangedMsg.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStationsChangedMsg.java deleted file mode 100644 index 6c188a1be7..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStationsChangedMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.bus.bean; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/3/25 - * - * 小巴站点信息变更:停靠状态等 - */ -class OchBusStationsChangedMsg { - - public List< OchBusStation > data; -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersRequest.java deleted file mode 100644 index 464a2d6ad3..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersRequest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -/** - * 查询下车乘客请求参数 - * - * @author tongchenfei - */ -public class QueryLeaveAwayPassengersRequest { - private String sn; - private int endSiteId; - private int orderDispatchType = 4; - - public QueryLeaveAwayPassengersRequest(int siteId) { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.endSiteId = siteId; - } - - public String getSn() { - return sn; - } - - public void setSn(String sn) { - this.sn = sn; - } - - public int getEndSiteId() { - return endSiteId; - } - - public void setEndSiteId(int endSiteId) { - this.endSiteId = endSiteId; - } - - public int getOrderDispatchType() { - return orderDispatchType; - } - - public void setOrderDispatchType(int orderDispatchType) { - this.orderDispatchType = orderDispatchType; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java deleted file mode 100644 index 2b371aa57d..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/3/26 - * - * 到站查询下车乘客 - */ -class QueryLeaveAwayPassengersResponse extends BaseData { - - public Result result; - - public static class Result { - - public List< LeaveAwayPassenger > info; - } - - public static class LeaveAwayPassenger { - - /** - * _id : 9a3b0aacb5f241eabb5ed9f8615d9af6 - * orderNo : XB20210324000001 - * orderType : 10 - * userName : 星期一 - * userPhone : 15555555555 - * startStationId : 1 - * startStation : 万集东门站 - * startStationCoordinate : [116.7354579447,40.1974932972] - * endStationId : 2 - * endStation : 顺密路口站 - * endStationCoordinate : [116.7215386924,40.194019209] - * orderDispatchType : 1 - * carNum : 京NB007 - * sn : F803BB2037EZD00088 - * orderStartTime : 2021-03-24 11:51:24 - * orderEndTime : - * arrivedStartStationTime : - * arrivedEndStationTime : - * cityCode : 010 - * areaCode : 1001 - * createTime : 2021-03-24 11:51:24 - * updateTime : 2021-03-24 12:32:10 - * personNum : - * travelDistance : 1.2 - * vehicleColour : - * lastBrandName : - * headImgUrl : - */ - - public String _id; - public String orderNo; - public int orderType; - public String userName; - public String userPhone; - public int startStationId; - public String startStation; - public int endStationId; - public String endStation; - public int orderDispatchType; - public String carNum; - public String sn; - public String orderStartTime; - public String orderEndTime; - public String arrivedStartStationTime; - public String arrivedEndStationTime; - public String cityCode; - public String areaCode; - public String createTime; - public String updateTime; - public String personNum; - public double travelDistance; - public String vehicleColour; - public String lastBrandName; - public String headImgUrl; - public List< Double > startStationCoordinate; - public List< Double > endStationCoordinate; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java deleted file mode 100644 index 8b261aaad7..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class QueryOchBusOperationStatusRequest { - - public String sn; - - public QueryOchBusOperationStatusRequest() { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/UpdateSiteStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/UpdateSiteStatusRequest.java deleted file mode 100644 index 05f42f0f8a..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/UpdateSiteStatusRequest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class UpdateSiteStatusRequest { - - public String sn; - // 0 - 关闭、1 - 启动 - public int siteId; - - public UpdateSiteStatusRequest( int siteId ) { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.siteId = siteId; - } - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java deleted file mode 100644 index 5f0cfa5f07..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mogo.och.bus.constant; - -/** - * 常量 - * - * @author tongchenfei - */ -public class OchBusConst { - // 测试用的广播 - public static final String BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY = "sceneType"; - // 无状态 - public static final int STATION_STATUS_IDLE = 0; - // 到站 - public static final int STATION_STATUS_STOPPED = 1; - // 离开某一站 - public static final int STATION_STATUS_LEAVING = 2; - // 下一站 - public static final int STATION_STATUS_ARRIVING = 3; -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java deleted file mode 100644 index 75bda62d70..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.mogo.och.bus.fragment; - -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.voice.AIAssist; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.BaseOchFragment; -import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.presenter.OchBusPresenter; -import com.mogo.och.view.SlidePanelView; -import com.mogo.service.adas.IMogoAdasOCHCallback; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.utils.logger.Logger; - -import java.util.List; - - -/** - * 网约车小巴界面 - * - * @author tongchenfei - */ -public class OchBusFragment extends BaseOchFragment< OchBusFragment, OchBusPresenter > implements SlidePanelView.OnSlidePanelMoveToEndListener { - private static final String TAG = "OchBusFragment"; - - private TextView mCurrentStationName; - private TextView mStartStationFlag; - private TextView mNextStationName; - private TextView mEndStationFlag; - - private View mBus; - - - @Override - protected void initViews() { - super.initViews(); - mBus = findViewById( R.id.module_och_bus_tag ); - mCurrentStationName = findViewById( R.id.module_och_bus_current_station ); - mStartStationFlag = findViewById( R.id.module_och_bus_start_station_tag ); - mNextStationName = findViewById( R.id.module_och_bus_order_end_station ); - mEndStationFlag = findViewById( R.id.module_och_bus_end_station_tag ); - - if ( DebugConfig.isDebug() ) { - mBus.setOnClickListener( view -> { - TipToast.shortTip( "重置了车站状态" ); - mPresenter.debugResetStationStatus(); - } ); - - mBus.setOnLongClickListener( view -> { - getActivity().finish(); - return true; - } ); - } - - Logger.d( TAG, "initView: " + MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() ); - // 初始化的时候设置 UI 按钮状态 - switch ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() ) { - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE: - hideAutopilotBiz(); - break; - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE: - showAutopilotBiz(); - onAutopilotStatusChanged( false ); - break; - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING: - showAutopilotBiz(); - onAutopilotStatusChanged( true ); - break; - default: - break; - } - } - - @NonNull - @Override - protected OchBusPresenter createPresenter() { - return new OchBusPresenter( this ); - } - - @Override - public void onResume() { - super.onResume(); - } - - /** - * 根据站点列表信息刷新车站面板,滑块面板 - * - * @param stationList 车站列表信息 - * @param currentStation 当前站点 - * @param nextStation 下个站点 - */ - public void refreshBusStations( List< OchBusStation > stationList, int currentStation, int nextStation ) { - if ( getActivity() == null ) { - return; - } - getActivity().runOnUiThread( () -> { - if ( stationList == null ) { - // 获取小巴数据失败 - return; - } - - // 渲染小巴路线数据 - renderCurrentStationStatus( stationList, currentStation, nextStation ); - } ); - } - - /** - * 重新刷新站点信息 - */ - private void renderCurrentStationStatus( List< OchBusStation > stationList, int currentStation, int nextStation ) { - - String currentStationName = null; - String nextStationName = null; - int startStationFlagVisibility = View.INVISIBLE; - int endStationFlagVisibility = View.INVISIBLE; - - boolean isArriveEndStation = false; - boolean isArriveAtStation = false; - boolean isArriveAtStartStation = false; - - // 获取当前站点的名称 - currentStationName = stationList.get( currentStation ).getSiteName(); - - // 是否到达起点 - if ( currentStation == 0 ) { - startStationFlagVisibility = View.VISIBLE; - isArriveAtStartStation = true; - mStartStationFlag.setText( "始" ); - } - // 是否到达站点 - else if ( currentStation > 0 && currentStation < stationList.size() - 1 ) { - isArriveAtStation = true; - } - // 是否到达终点 - else if ( currentStation == stationList.size() - 1 ) { - isArriveEndStation = true; - nextStationName = "--"; - mStartStationFlag.setText( "终" ); - startStationFlagVisibility = View.VISIBLE; - endStationFlagVisibility = View.INVISIBLE; - } - - // 获取下一站点名称 - if ( nextStation > currentStation && nextStation <= stationList.size() - 1 ) { - nextStationName = stationList.get( nextStation ).getSiteName(); - } - - // 是否到达终点 - if ( nextStation == stationList.size() - 1 ) { - endStationFlagVisibility = View.VISIBLE; - } - - // 重置滑动按钮文字 - if ( isArriveEndStation ) { - showSlidePanle( "单程结束" ); - } else if ( isArriveAtStartStation ) { - showSlidePanle( "滑动出发" ); - } else if ( isArriveAtStation ) { - showSlidePanle( "滑动出发" ); - } - mCurrentStationName.setText( currentStationName ); - mNextStationName.setText( nextStationName ); - mStartStationFlag.setVisibility( startStationFlagVisibility ); - mEndStationFlag.setVisibility( endStationFlagVisibility ); - } - - - public void hideOchBus() { -// tvNotice.setVisibility(View.GONE); - } - - @Override - public int getStationPanelViewId() { - return R.layout.fragment_och_bus; - } - - @Override - public void restartAutopilot() { - mPresenter.restartAutopilot(); - } - - @Override - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { - return this; - } - - @Override - public void moveToEnd() { - // 开启自动驾驶到下一站 - mPresenter.autoDriveToNextStation(false); - } - - /** - * 设置自动驾驶可用状态 - */ - public void onAutopilotEnableChange( boolean isEnable ) { - onAutopilotStatusChanged(isEnable); - if ( isEnable ) { - showAutopilotBiz(); - } else { - hideAutopilotBiz(); - } - } - - @Override - protected void onChangeOperationStatus() { - super.onChangeOperationStatus(); - mPresenter.onChangeOperationStatus(); - // TODO 临时解决因为首次请求Http-DNS是北京的bug,后续需要考虑Http-DNS状态变化后向外同步的逻辑 - mPresenter.queryBusRoutes(); - } - - /** - * 修改经营状态 - * @param launch true-收车,false-出车 - */ - public void changeOperationStatus( boolean launch ) { - isOperationStatus = launch; - if ( launch ) { - // 出车的时候重制站点状态 - mPresenter.debugResetStationStatus(); - - tvOperationStatus.setText( "收车" ); -// showSlidePanle("滑动出发"); - showPanel(); - } else { - AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); - tvOperationStatus.setText("出车"); - hideSlidePanel(); - hidPanel(); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java deleted file mode 100644 index 66755df49f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.mogo.och.bus.net; - -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.bus.bean.OchBusOperationStatusRequest; -import com.mogo.och.bus.bean.OchBusOperationStatusResponse; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.bean.QueryOchBusOperationStatusRequest; -import com.mogo.och.bus.bean.UpdateSiteStatusRequest; - -import io.reactivex.Observable; -import okhttp3.RequestBody; -import retrofit2.http.Body; -import retrofit2.http.Headers; -import retrofit2.http.POST; - -/** - * 小巴车相关接口 - * - * @author tongchenfei - *

- * wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072 - */ -public interface IOchBusApiService { - - /** - * 根据车机坐标获取所在区域全部站点信息 - * - * @param requestBody 请求参数 - * @return 接口返回数据 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/site/querySiteByCoordinate/v1" ) - Observable< OchBusRoutesResponse > querySiteByCoordinate( @Body RequestBody requestBody ); - - - /** - * 公交车驶离车站时,通知服务端 - * - * @param requestBody 请求参数 {"sn":"","siteId":"车站id"} - * @return 无返回值 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/site/siteCrashCheck/v1" ) - Observable< OchBusRoutesResponse > leaveStation( @Body RequestBody requestBody ); - - /** - * 调试用重置接口 - * - * @param requestBody 请求参数{"siteId":1,"sn":"F803EB2046PZD00229"} - * @return 返回值是重置后的车站列表 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/site/resetSiteByCoordinate/v1" ) - Observable< OchBusRoutesResponse > debugResetStationStatus( @Body RequestBody requestBody ); - - /** - * 修改小巴运营状态 - * - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/busOrder/updateBusStatus/v1" ) - Observable< BaseData > changeOperationStatus( @Body OchBusOperationStatusRequest request ); - - /** - * 查询小巴运营状态 - * - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/busOrder/queryBusStatus/v1" ) - Observable< OchBusOperationStatusResponse > queryOperationStatus( @Body QueryOchBusOperationStatusRequest request ); - - /** - * 更新到站信息 - * - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/site/siteDynamic/v1" ) - Observable< OchBusRoutesResponse > updateSiteStation( @Body UpdateSiteStatusRequest request ); - - /** - * 到站查询下车乘客 - * - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/busOrder/queryOrderBySiteAndSn/v1" ) - Observable< QueryLeaveAwayPassengersResponse > queryStationLeaveAwayPassengers( @Body QueryLeaveAwayPassengersRequest request ); - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java deleted file mode 100644 index 0676b09427..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.mogo.och.bus.presenter; - -import android.content.Context; -import android.os.Looper; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.bean.OchBusOrder; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.bean.OchBusStationsChangedMsg; -import com.mogo.service.cloud.socket.IMogoOnMessageListener; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.utils.GsonUtil; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/3/23 - * - * 小巴订单管理 - */ -class OchBusOrderModel { - private final String TAG = "OchBusOrderModel"; - - private static volatile OchBusOrderModel sInstance; - - public static OchBusOrderModel getInstance() { - if ( sInstance == null ) { - synchronized ( OchBusOrderModel.class ) { - if ( sInstance == null ) { - sInstance = new OchBusOrderModel(); - } - } - } - return sInstance; - } - - public void init() { - mContext = AbsMogoApplication.getApp(); - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi( mContext ) - .registerOnMessageListener( 401021, mOnOrderListener ); - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi( mContext ) - .registerOnMessageListener( 401020, mOnBusStationsChangedMsg ); - } - - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return sInstance; - } - - private Context mContext; - - /** - * 小巴订单 - *

- * 1. 新订单 - */ - private IMogoOnMessageListener< OchBusOrder > mOnOrderListener = new IMogoOnMessageListener< OchBusOrder >() { - @Override - public Class< OchBusOrder > target() { - return OchBusOrder.class; - } - - @Override - public void onMsgReceived( OchBusOrder obj ) { - Logger.i(TAG, "401021--小巴订单:" + GsonUtil.jsonFromObject(obj)); - - if ( obj == null ) { - return; - } - runOnUiThread( () -> { - if ( mOnBusOrderChangedListener != null ) { - mOnBusOrderChangedListener.onBusOrderChanged( obj ); - } - } ); - } - }; - - /** - * 站点信息变更推送 - * 新订单、取消订单、到达站点等都会导致停靠站点变更,故都会收到此推送 - */ - private IMogoOnMessageListener< OchBusStationsChangedMsg > mOnBusStationsChangedMsg = new IMogoOnMessageListener< OchBusStationsChangedMsg >() { - @Override - public Class< OchBusStationsChangedMsg > target() { - return OchBusStationsChangedMsg.class; - } - - @Override - public void onMsgReceived( OchBusStationsChangedMsg obj ) { - Logger.i(TAG, "401020--站点信息变更推送:" + GsonUtil.jsonFromObject(obj)); - - if ( obj == null ) { - return; - } - runOnUiThread( () -> { - if ( mOnBusStationsChangedListener != null ) { - mOnBusStationsChangedListener.onBusStationsChanged( obj.data ); - } - } ); - } - }; - - private OnBusStationsChangedListener mOnBusStationsChangedListener; - private OnBusOrderChangedListener mOnBusOrderChangedListener; - - private OchBusOrderModel() { - - } - - /** - * 小巴到站 - */ - public void onArriveAtStation() { - - } - - public void setOnBusStationsChangedListener( OnBusStationsChangedListener onBusStationsChangedListener ) { - this.mOnBusStationsChangedListener = onBusStationsChangedListener; - } - - public void setOnBusOrderChangedListener( OnBusOrderChangedListener mOnBusOrderChangedListener ) { - this.mOnBusOrderChangedListener = mOnBusOrderChangedListener; - } - - /** - * 站点信息 - */ - public interface OnBusStationsChangedListener { - void onBusStationsChanged( List< OchBusStation > data ); - } - - /** - * 站点信息 - */ - public interface OnBusOrderChangedListener { - void onBusOrderChanged( OchBusOrder order ); - } - - private void runOnUiThread( Runnable runnable ) { - if ( Looper.myLooper() == Looper.getMainLooper() ) { - runnable.run(); - } else { - UiThreadHandler.postDelayed( runnable, 0 ); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java deleted file mode 100644 index c197e01b4f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java +++ /dev/null @@ -1,653 +0,0 @@ -package com.mogo.och.bus.presenter; - -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.network.SubscribeImpl; -import com.mogo.commons.voice.AIAssist; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.constants.HostConst; -import com.mogo.och.bus.bean.OchBusLeaveStationRequest; -import com.mogo.och.bus.bean.OchBusOperationStatusRequest; -import com.mogo.och.bus.bean.OchBusOperationStatusResponse; -import com.mogo.och.bus.bean.OchBusOrder; -import com.mogo.och.bus.bean.OchBusResetRequest; -import com.mogo.och.bus.bean.OchBusRoutesRequest; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.bean.QueryOchBusOperationStatusRequest; -import com.mogo.och.bus.bean.UpdateSiteStatusRequest; -import com.mogo.och.bus.fragment.OchBusFragment; -import com.mogo.och.bus.net.IOchBusApiService; -import com.mogo.service.adas.IMogoAdasOCHCallback; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.RequestOptions; -import com.mogo.utils.network.utils.GsonUtil; - -import java.util.ArrayList; -import java.util.List; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; -import okhttp3.MediaType; -import okhttp3.RequestBody; - -import static com.mogo.och.bus.constant.OchBusConst.STATION_STATUS_ARRIVING; -import static com.mogo.och.bus.constant.OchBusConst.STATION_STATUS_LEAVING; -import static com.mogo.och.bus.constant.OchBusConst.STATION_STATUS_STOPPED; - -/** - * 网约车小巴 - * - * @author tongchenfei - */ -public class OchBusPresenter extends Presenter< OchBusFragment > implements IMogoAdasOCHCallback, - Handler.Callback, - OchBusOrderModel.OnBusStationsChangedListener, - OchBusOrderModel.OnBusOrderChangedListener { - private static final String TAG = "OchBusPresenter"; - - // 运营类型 - private static final int VEHICLE_TYPE = 10; - private static final int MSG_QUERY_BUS_STATION = 1001; - private static final long QUERY_BUS_STATION_DELAY = 5000; - - /** - * 用来表示是否正在开往下一站 - */ - private boolean isGoingToNextStation = false; - - private IOchBusApiService mService; - - /** - * 运营状态、后端更具运营状态来判断车辆是否派单 - */ - private boolean mIsWorking = false; - - public OchBusPresenter( OchBusFragment view ) { - super( view ); - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, HostConst.OCH_DOMAIN ); - MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasOCHCallback( this ); - OchBusOrderModel.getInstance().init(); - OchBusOrderModel.getInstance().setOnBusStationsChangedListener( this ); - OchBusOrderModel.getInstance().setOnBusOrderChangedListener( this ); - } - - private final Handler handler = new Handler( this ); - - private final List< OchBusStation > stationList = new ArrayList<>(); - - private int currentStationIndex = 0; - - @Override - public void onCreate( @NonNull LifecycleOwner owner ) { - super.onCreate( owner ); - Log.d(TAG, "onCreate ------> "); - queryOperationStatus(); - queryBusRoutes(); - } - - /** - * 查询小巴路线 - */ - public void queryBusRoutes() { - Logger.d( TAG, "查询小巴路线"); - - double lat = 40.1974932972; - double lon = 116.7354579447; - lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); - lon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(); - - OchBusRoutesRequest request = new OchBusRoutesRequest( MoGoAiCloudClientConfig.getInstance().getSn(), lat, lon ); - RequestBody requestBody = RequestBody.create( MediaType.get( "application/json;charset=UTF-8" ), GsonUtil.jsonFromObject( request ) ); - mService.querySiteByCoordinate( requestBody ) - .subscribeOn( Schedulers.io() ).observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OchBusRoutesResponse >( RequestOptions.create( getContext() ) ) { - - @Override - public void onSuccess( OchBusRoutesResponse o ) { - super.onSuccess( o ); - if ( o == null - || o.getResult() == null - || o.getResult().getSite() == null - || o.getResult().getSite().isEmpty() ) { - return; - } - Logger.d( TAG, "获取到小巴路线数据: " + o ); - renderBusStationsStatus( o.getResult().getSite() ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "获取小巴路线图失败" ); - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.e( TAG, "获取小巴路线失败 code: " + code + " msg: " + message ); - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - } ); - } - - /** - * 渲染站点信息 - * - * @param site - */ - private void renderBusStationsStatus( List< OchBusStation > site ) { - Logger.d( TAG, "渲染站点信息"); - - int lastStopStation = getNextStopStation(); - - stationList.clear(); - stationList.addAll( site ); - for ( int i = 0; i < stationList.size(); i++ ) { - OchBusStation s = stationList.get( i ); - // 是否正在开往下一站 - if ( s.getIsCurrentSite() == STATION_STATUS_LEAVING ) { - isGoingToNextStation = true; - mView.hideSlidePanel(); - } - - // 当前站点信息 - if ( s.getIsCurrentSite() == STATION_STATUS_LEAVING - || s.getIsCurrentSite() == STATION_STATUS_STOPPED ) { - currentStationIndex = i; - } - } - - mView.refreshBusStations( stationList, currentStationIndex, getNextStopStation() ); - - if ( isGoingToNextStation ) { - mView.hideSlidePanel(); - } - - resetNextStopStation( lastStopStation ); - - } - - /** - * 重置下一站 - * - * @param lastStopStation - */ - private void resetNextStopStation( int lastStopStation ) { - Logger.d( TAG, "重置下一站"); - - int nextStopStation = getNextStopStation(); - if ( nextStopStation < 0 ) { - return; - } - if ( lastStopStation <= nextStopStation || nextStopStation <= currentStationIndex ) { - return; - } - if ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() - == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) { - // 自动驾驶中动态设置下一个停靠站点 - autoDriveToNextStation( true ); - } - } - - /** - * 根据订单状态、获取下一站靠站的的站点 - * - * @return -1 当前已是最后一个站点 - */ - private int getNextStopStation() { - if ( currentStationIndex >= stationList.size() - 1 ) { - return -1; - } - int nextStationIndex = currentStationIndex + 1; - for ( ; nextStationIndex < stationList.size() - 1; nextStationIndex++ ) { - if ( stationList.get( nextStationIndex ).getIfStop() == 1 ) { - break; - } - } - return nextStationIndex; - } - - /** - * 延时查询站点信心 - */ - private void queryBusStationDelay() { - handler.sendEmptyMessageDelayed( MSG_QUERY_BUS_STATION, QUERY_BUS_STATION_DELAY ); - } - - /** - * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 - */ - public void restartAutopilot() { - Logger.d( TAG, "重启自动驾驶===" + isGoingToNextStation ); - if ( isGoingToNextStation ) { - autoDriveToNextStation( true ); - } - } - - /** - * 测试、重置站点状态 - */ - public void debugResetStationStatus() { - Logger.d( TAG, "测试、重置站点状态"); - double lat = 40.1974932972; - double lon = 116.7354579447; - - // ADAS 经纬度,需要启动工控机 - lat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(); - lon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(); - - OchBusResetRequest request = new OchBusResetRequest(MoGoAiCloudClientConfig.getInstance().getSn(), 1, lat, lon); - RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); - mService.debugResetStationStatus(requestBody) - .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SubscribeImpl(RequestOptions.create(getContext())) { - - @Override - public void onSuccess(OchBusRoutesResponse o) { - super.onSuccess(o); - Logger.d(TAG, "获取到小巴路线数据: " + o); - isGoingToNextStation = false; - if (o.getResult() == null || o.getResult().getSite() == null || o.getResult().getSite().isEmpty()) { - return; - } - renderBusStationsStatus(o.getResult().getSite()); - } - - @Override - public void onError(Throwable e) { - super.onError(e); - Logger.e(TAG, e, "获取小巴路线图失败"); - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - Logger.e(TAG, "获取小巴路线失败 code: " + code + " msg: " + message); - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - }); - } - - /** - * 开启自动驾驶到下一站 - */ - public void autoDriveToNextStation( boolean isRestart ) { - Logger.d( TAG, "开启自动驾驶到下一站"); - - if ( currentStationIndex >= stationList.size() - 1 ) { - // 当前站是最后一站,结束当前行程 - travelOver(); - return; - } - OchBusStation currentStation = stationList.get( currentStationIndex ); - - int nextStationIndex = getNextStopStation(); - - OchBusStation nextStation = stationList.get( nextStationIndex ); - currentStation.setIsCurrentSite( STATION_STATUS_LEAVING ); - nextStation.setIsCurrentSite( STATION_STATUS_ARRIVING ); - - AutopilotControlParameters currentAutopilot = new AutopilotControlParameters(); - currentAutopilot.isSpeakVoice = !isRestart; - currentAutopilot.startLatLon = new AutopilotControlParameters.AutoPilotLonLat( currentStation.getLat(), currentStation.getLon() ); - currentAutopilot.endLatLon = new AutopilotControlParameters.AutoPilotLonLat( nextStation.getLat(), nextStation.getLon() ); - currentAutopilot.vehicleType = VEHICLE_TYPE; - Logger.d( TAG, "开启自动驾驶====" + currentAutopilot ); - MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData( currentAutopilot ); - - if ( mView != null ) { - mView.refreshBusStations( stationList, currentStationIndex, nextStationIndex ); - mView.hideSlidePanel(); - } - - if ( isGoingToNextStation ) { - // 为了避免恢复自动驾驶时重复的接口请求 - return; - } - isGoingToNextStation = true; - AIAssist.getInstance( getContext() ).speakTTSVoice( "欢迎乘坐’蘑菇车联‘无人驾驶小巴车,请您坐好,注意乘车安全,行程即将开始" ); - RequestBody request = RequestBody.create( MediaType.get( "application/json" ), GsonUtil.jsonFromObject( new OchBusLeaveStationRequest( MoGoAiCloudClientConfig.getInstance().getSn(), stationList.get( currentStationIndex ).getSiteId() ) ) ); - mService.leaveStation( request ).subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OchBusRoutesResponse >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( OchBusRoutesResponse o ) { - super.onSuccess( o ); - if ( o.getResult() == null || o.getResult().getSite() == null || o.getResult().getSite().isEmpty() ) { - return; - } - renderBusStationsStatus( o.getResult().getSite() ); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "leave station error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "leave station exception" ); - } - } ); - } - - @Override - public void onArriveAt( AutopilotStationInfo data ) { - if ( currentStationIndex >= stationList.size() - 1 ) { - Logger.e( TAG, "到站异常,取消后续操作" ); - return; - } - Logger.d( TAG, "到站====" ); - isGoingToNextStation = false; - // 到达站点后,更新站点状态 - currentStationIndex = getNextStopStation(); - updateSiteStation(); - queryLeaveAwayPassengers(); - } - - /** - * 到站后重置站点状态 - */ - private void updateSiteStation() { - Logger.d( TAG, "到站后重置站点状态"); - - mService.updateSiteStation( new UpdateSiteStatusRequest( stationList.get( currentStationIndex ).getSiteId() ) ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OchBusRoutesResponse >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( OchBusRoutesResponse o ) { - super.onSuccess( o ); - if ( o.getResult() == null && o.getResult().getSite() == null || o.getResult().getSite().isEmpty() ) { - return; - } - renderBusStationsStatus( o.getResult().getSite() ); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "leave station error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "leave station exception" ); - } - } ); - } - - /** - * 查询到站下车乘客 - */ - private void queryLeaveAwayPassengers() { - Logger.d( TAG, "查询到站下车乘客"); - - mService.queryStationLeaveAwayPassengers( new QueryLeaveAwayPassengersRequest( stationList.get( currentStationIndex ).getSiteId() ) ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< QueryLeaveAwayPassengersResponse >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( QueryLeaveAwayPassengersResponse o ) { - super.onSuccess( o ); - playLeavePassengersMsg( o ); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "leave station error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "leave station exception" ); - } - } ); - } - - /** - * 播报下车乘客信息 - * - * @param awayPassengersResponse - */ - private void playLeavePassengersMsg( QueryLeaveAwayPassengersResponse awayPassengersResponse ) { - Logger.d( TAG, "播报下车乘客信息"); - - if ( currentStationIndex > stationList.size() - 1 ) { - return; - } - String station = stationList.get( currentStationIndex ).getSiteName(); - StringBuilder builder = new StringBuilder( "已到达" ); - builder.append( station ); - if ( !station.endsWith( "站" ) ) { - builder.append( "站" ); - } - if ( awayPassengersResponse == null || awayPassengersResponse.result == null || awayPassengersResponse.result.info == null || awayPassengersResponse.result.info.isEmpty() ) { - // - } else { - builder.append( ",请尾号为 " ); - for ( QueryLeaveAwayPassengersResponse.LeaveAwayPassenger leaveAwayPassenger : awayPassengersResponse.result.info ) { - if ( leaveAwayPassenger == null ) { - continue; - } - String tailNum = null; - try { - tailNum = leaveAwayPassenger.userPhone.substring(leaveAwayPassenger.userPhone.length() - 4); - } catch (Exception e) { - e.printStackTrace(); - tailNum = leaveAwayPassenger.userPhone; - } - builder.append( tailNum ).append( "。" ); - } - builder.append( "的乘客下车" ); - } - builder.append(",带好随身物品,下车请注意安全"); - Logger.d(TAG, "TTS:" + builder.toString()); - AIAssist.getInstance( getContext() ).speakTTSVoice( builder.toString() ); - } - - /** - * 行程结束 - */ - private void travelOver() { - Logger.d( TAG, "行程结束"); - - if ( currentStationIndex >= stationList.size() ) { - Logger.e( TAG, "travel over index out of station list" ); - return; - } - Logger.d( TAG, "单程结束====" ); - MogoApisHandler.getInstance().getApis().getAdasControllerApi().cancelAutopilot(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "感谢您体验’蘑菇车联‘无人驾驶小巴车,请您携带好随身物品,我们下次再见" ); - RequestBody request = RequestBody.create( MediaType.get( "application/json" ), GsonUtil.jsonFromObject( new OchBusLeaveStationRequest( MoGoAiCloudClientConfig.getInstance().getSn(), stationList.get( currentStationIndex ).getSiteId() ) ) ); - mService.leaveStation( request ).subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OchBusRoutesResponse >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( OchBusRoutesResponse o ) { - super.onSuccess( o ); - // 始发站改为Stoped,其他站改为Idle - Logger.d( TAG, "单程真的结束了====" ); - if ( o.getResult() == null || o.getResult().getSite() == null || o.getResult().getSite().isEmpty() ) { - return; - } - renderBusStationsStatus( o.getResult().getSite() ); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "leave station error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "leave station exception" ); - } - } ); - } - - @Override - public void onStateChanged( int state, String reason ) { - Logger.d( TAG, "onStateChange: " + state ); - switch ( state ) { - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE: - // 设置UI【自动驾驶】按钮是否展示 - mView.onAutopilotEnableChange( true ); - // 改变UI自动驾驶状态 - mView.onAutopilotStatusChanged( false ); - if ( isGoingToNextStation ) { - mView.hideSlidePanel(); - } - break; - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING: - // 改变UI自动驾驶状态 - mView.onAutopilotStatusChanged( true ); - break; - default: - mView.onAutopilotEnableChange( false ); - break; - } - } - - @Override - public boolean handleMessage( Message msg ) { - if ( msg.what == MSG_QUERY_BUS_STATION ) { - queryBusRoutes(); - return true; - } - return false; - } - - public boolean isWorking() { - return mIsWorking; - } - - /** - * 修改小巴运营状态 - */ - public void onChangeOperationStatus() { - Logger.d( TAG, "修改小巴运营状态"); - - mService.changeOperationStatus( isWorking() ? new OchBusOperationStatusRequest().shutdown() : new OchBusOperationStatusRequest().launch() ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< BaseData >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( BaseData o ) { - super.onSuccess( o ); - mIsWorking = !mIsWorking; - if ( mIsWorking ) { - if ( stationList != null && stationList.size() > 0 ) { - AIAssist.getInstance( getContext() ).speakTTSVoice( "车辆已整备完毕,请前往" + stationList.get( 0 ).getSiteName() + "站点" ); - } - } - if ( mView != null ) { - mView.changeOperationStatus( isWorking() ); - } - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "leave station error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "leave station exception" ); - } - } ); - } - - /** - * 查询运营状态 - */ - public void queryOperationStatus() { - Logger.d( TAG, "查询运营状态"); - - mService.queryOperationStatus( new QueryOchBusOperationStatusRequest() ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OchBusOperationStatusResponse >( RequestOptions.create( getContext() ) ) { - @Override - public void onSuccess( OchBusOperationStatusResponse o ) { - super.onSuccess( o ); - if ( o.result != null ) { - mIsWorking = o.result.status == 1; - } - if ( mView != null ) { - mView.changeOperationStatus( isWorking() ); - } - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.d( TAG, "查询运营状态 error: " + message ); - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - Logger.e( TAG, e, "查询运营状态 exception" ); - } - } ); - } - - - @Override - public void onBusStationsChanged( List< OchBusStation > data ) { - renderBusStationsStatus( data ); - } - - @Override - public void onBusOrderChanged( OchBusOrder order ) { - if ( order == null ) { - return; - } - if ( TextUtils.isEmpty( order.getUserPhone() ) ) { - return; - } - try { - String tailNum = null; - try { - tailNum = order.getUserPhone().substring( order.getUserPhone().length() - 4 ); - } catch (Exception e) { - e.printStackTrace(); - tailNum = order.getUserPhone(); - } - Logger.d(TAG, "TTS:" + tailNum); - AIAssist.getInstance( getContext() ).speakTTSVoice( "接到新订单,尾号 " + tailNum + " 上车站点为 " + order.getStartStation() ); - } catch ( Exception e ) { - e.printStackTrace(); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java deleted file mode 100644 index 066b55b112..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.bus.receiver; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.utils.logger.Logger; - -/** - * 测试小巴车的场景 - * - * @author donghongyu - * @date 4/26/21 12:08 PM - */ -public class TestOchBusBroadcastReceiver extends BroadcastReceiver { - private static final String TAG = "TestOchBusBroadcastReceiver"; - - private Context mContext; - - @Override - public void onReceive(Context context, Intent intent) { - try { - this.mContext = context; - int sceneType = intent.getIntExtra(OchBusConst.BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY, 0); - Logger.d(TAG, "sceneType:" + sceneType); - - // 分发场景 - dispatchSceneTest(sceneType); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void dispatchSceneTest(int sceneType) { - - } - - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/NoTouchConstraintLayout.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/NoTouchConstraintLayout.java deleted file mode 100644 index 558a515bd9..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/NoTouchConstraintLayout.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.mogo.och.bus.view; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.MotionEvent; - -import androidx.constraintlayout.widget.ConstraintLayout; - -import com.mogo.commons.debug.DebugConfig; - -/** - * 强制拦截所有touch时间的约束布局 - * - * @author tongchenfei - */ -public class NoTouchConstraintLayout extends ConstraintLayout { - public NoTouchConstraintLayout(Context context) { - super(context); - } - - public NoTouchConstraintLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public NoTouchConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - if(DebugConfig.isDebug()){ - return super.onInterceptTouchEvent(ev); - }else { - return true; - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java deleted file mode 100644 index 250d4a41b6..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/VerticalDashLineView.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.mogo.och.bus.view; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.DashPathEffect; -import android.graphics.LinearGradient; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Shader; -import android.util.AttributeSet; -import android.view.View; - -import androidx.annotation.Nullable; - -/** - * 垂直虚线 - * - * @author tongchenfei - */ -public class VerticalDashLineView extends View { - public VerticalDashLineView(Context context) { - this(context,null); - } - - public VerticalDashLineView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs,0); - } - - public VerticalDashLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private final Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private final Path dashPath = new Path(); - - private void init(){ - linePaint.setColor(Color.GREEN); - linePaint.setStyle(Paint.Style.STROKE); - linePaint.setStrokeWidth(2); - linePaint.setPathEffect(new DashPathEffect(new float[]{5, 5}, 0)); - } - - public void setGradient(int startColor, int endColor) { - LinearGradient linearGradient = new LinearGradient(0, 0, getWidth(), getHeight(), startColor, endColor, Shader.TileMode.CLAMP); - linePaint.setShader(linearGradient); - invalidate(); - } - - public void setColor(int color) { - linePaint.setShader(null); - linePaint.setColor(color); - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - dashPath.reset(); - dashPath.moveTo((float) getWidth()/2, 0); - dashPath.lineTo((float) getWidth()/2,getHeight()); - canvas.drawPath(dashPath,linePaint); - } -} diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/module_mogo_och_bus_icon_not_arrive_station.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/module_mogo_och_bus_icon_not_arrive_station.png deleted file mode 100644 index e0bb24c526887d10da84456c758e1ee02efefa8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1&S-^~7gA@w${E7uqdpunnLo`H_ zQyQB7|Nn2?wnW$C=lKuzGaDc7H*=ZsQA?Tm@g396LeC70jQ+8A8a8z-*m86d&;NRT z#;hWyj~5vOKH9OlU7Jz5IcdIeqtCJB5=$g=1dcekJ<~of64c04`C?hpL+y3yFh34`wACOkm8sQuqm)CIq~k%UIcD|z7B4=$ zU^#m9R%EB1&jSe-H!h2!f{X@N84q2HWsa{L%mgQ!FuZ1r_>w7jn+fC}Pgg&ebxsLQ E08h+m#{d8T diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml deleted file mode 100644 index e8584b47ff..0000000000 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml deleted file mode 100644 index 969b501621..0000000000 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_anchor_bkg.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_anchor_bkg.xml deleted file mode 100644 index 38fc28d893..0000000000 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_anchor_bkg.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_bkg.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_bkg.xml deleted file mode 100644 index 4a08f10745..0000000000 --- a/OCH/mogo-och-bus/src/main/res/drawable/module_och_bus_panel_bkg.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml deleted file mode 100644 index f2b8dfca44..0000000000 --- a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml b/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml deleted file mode 100644 index 25ac60ead5..0000000000 --- a/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/raw/bus_away_passengers.json b/OCH/mogo-och-bus/src/main/res/raw/bus_away_passengers.json deleted file mode 100644 index e76436f2dc..0000000000 --- a/OCH/mogo-och-bus/src/main/res/raw/bus_away_passengers.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "code": 0, - "msg": "", - "detailMsg": "", - "result": { - "info": [ - { - "_id": "cee57b3ae07c4486b0357319368487d7", - "orderNo": "XB20210422000002", - "orderType": 10, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 1, - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "endStationId": 2, - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "orderDispatchType": 7, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "2021-04-22 16:31:58", - "orderEndTime": "2021-04-26 10:38:13", - "arrivedStartStationTime": null, - "arrivedEndStationTime": null, - "cityCode": "010", - "areaCode": "1001", - "createTime": "2021-04-22 16:31:58", - "updateTime": "2021-04-26 10:38:13", - "personNum": 1, - "travelDistance": 1.2, - "vehicleColour": null, - "lastBrandName": null, - "headImgUrl": null - }, - { - "_id": "ce69b1bcfb9840c6a4563bc6ef947caf", - "orderNo": "XB20210426000000", - "orderType": 10, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 1, - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "endStationId": 2, - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "orderDispatchType": 7, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "2021-04-26 10:38:48", - "orderEndTime": "2021-04-26 10:46:16", - "arrivedStartStationTime": null, - "arrivedEndStationTime": null, - "cityCode": "010", - "areaCode": "1001", - "createTime": "2021-04-26 10:38:48", - "updateTime": "2021-04-26 10:46:16", - "personNum": 1, - "travelDistance": 1.2, - "vehicleColour": null, - "lastBrandName": null, - "headImgUrl": null - }, - { - "_id": "cae07b56f41c4e0fa60ab3543ffc258e", - "orderNo": "XB20210426000001", - "orderType": 10, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 1, - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "endStationId": 2, - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "orderDispatchType": 7, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "2021-04-26 10:47:05", - "orderEndTime": "2021-04-26 10:48:07", - "arrivedStartStationTime": null, - "arrivedEndStationTime": null, - "cityCode": "010", - "areaCode": "1001", - "createTime": "2021-04-26 10:47:05", - "updateTime": "2021-04-26 10:48:07", - "personNum": 1, - "travelDistance": 1.2, - "vehicleColour": null, - "lastBrandName": null, - "headImgUrl": null - }, - { - "_id": "62bc84afbc434d01b644c74ee406e772", - "orderNo": "XB20210426000002", - "orderType": 10, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 1, - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "endStationId": 2, - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "orderDispatchType": 7, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "2021-04-26 10:48:22", - "orderEndTime": "2021-04-26 10:50:32", - "arrivedStartStationTime": null, - "arrivedEndStationTime": null, - "cityCode": "010", - "areaCode": "1001", - "createTime": "2021-04-26 10:48:22", - "updateTime": "2021-04-26 10:50:32", - "personNum": 1, - "travelDistance": 1.2, - "vehicleColour": null, - "lastBrandName": null, - "headImgUrl": null - }, - { - "_id": "fa3214c7a6ec411bb3d6edbc98907423", - "orderNo": "XB20210426000009", - "orderType": 10, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 1, - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "endStationId": 2, - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "orderDispatchType": 7, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "2021-04-26 19:26:05", - "orderEndTime": "2021-04-27 14:35:50", - "arrivedStartStationTime": null, - "arrivedEndStationTime": null, - "cityCode": "010", - "areaCode": "1001", - "createTime": "2021-04-26 19:26:05", - "updateTime": "2021-04-27 14:35:50", - "personNum": 1, - "travelDistance": 1.2, - "vehicleColour": null, - "lastBrandName": null, - "headImgUrl": null - } - ] - } -} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/raw/bus_order_1.json b/OCH/mogo-och-bus/src/main/res/raw/bus_order_1.json deleted file mode 100644 index 050b67447d..0000000000 --- a/OCH/mogo-och-bus/src/main/res/raw/bus_order_1.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "_id": "62bc84afbc434d01b644c74ee406e772", - "areaCode": "1001", - "carNum": "京NB010", - "cityCode": "010", - "createTime": "Apr 26, 2021 10:48:22 AM", - "endStation": "顺密路口站", - "endStationCoordinate": [ - 116.721520973, - 40.1940181096 - ], - "endStationId": 2, - "orderDispatchType": 1, - "orderNo": "XB20210426000002", - "orderStartTime": "Apr 26, 2021 10:48:22 AM", - "orderType": 10, - "sn": "F803EB2046PZD00149", - "startStation": "万集东门站", - "startStationCoordinate": [ - 116.7354579447, - 40.1974932972 - ], - "startStationId": 1, - "travelDistance": 1.2, - "updateTime": "Apr 26, 2021 10:48:23 AM", - "userName": "董QAD", - "userPhone": "15631204018" -} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/raw/bus_station_list1.json b/OCH/mogo-och-bus/src/main/res/raw/bus_station_list1.json deleted file mode 100644 index c74daa1174..0000000000 --- a/OCH/mogo-och-bus/src/main/res/raw/bus_station_list1.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "code": 0, - "msg": "", - "detailMsg": "", - "result": { - "site": [ - { - "lineId": 1.0, - "siteId": 1.0, - "siteName": "万集东门站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.7354579447, - 40.1974932972 - ], - "lon": 116.7354579447, - "lat": 40.1974932972, - "siteDesc": "万集东门站", - "siteState": 1.0, - "isCurrentSite": 1.0, - "siteColor": 1.0, - "peoples": "0", - "ifStop": 1.0 - }, - { - "lineId": 1.0, - "siteId": 2.0, - "siteName": "市政府前街18号", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.729134342, - 40.1953113732 - ], - "lon": 116.729134342, - "lat": 40.1953113732, - "siteDesc": "市政府前街18号", - "siteState": 1.0, - "isCurrentSite": 3.0, - "siteColor": 2.0, - "peoples": "0", - "ifStop": 0.0 - }, - { - "lineId": 1.0, - "siteId": 3.0, - "siteName": "顺密路口站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.721520973, - 40.1940181096 - ], - "lon": 116.721520973, - "lat": 40.1940181096, - "siteDesc": "顺密路口站", - "siteState": 1.0, - "isCurrentSite": 0.0, - "siteColor": 0.0, - "peoples": "0", - "ifStop": 1.0 - } - ] - } -} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/raw/bus_station_list2.json b/OCH/mogo-och-bus/src/main/res/raw/bus_station_list2.json deleted file mode 100644 index 48d6782cc3..0000000000 --- a/OCH/mogo-och-bus/src/main/res/raw/bus_station_list2.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "code": 0, - "msg": "", - "detailMsg": "", - "result": { - "site": [ - { - "lineId": 1.0, - "siteId": 1.0, - "siteName": "万集东门站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.7354579447, - 40.1974932972 - ], - "lon": 116.7354579447, - "lat": 40.1974932972, - "siteDesc": "万集东门站", - "siteState": 1.0, - "isCurrentSite": 0.0, - "siteColor": 0.0, - "peoples": "0", - "ifStop": 1.0 - }, - { - "lineId": 1.0, - "siteId": 1.0, - "siteName": "万集东门站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.7374429112, - 40.2023987087 - ], - "lon": 116.7374429112, - "lat": 40.2023987087, - "siteDesc": "万集东门站", - "siteState": 1.0, - "isCurrentSite": 0.0, - "siteColor": 0.0, - "peoples": "0", - "ifStop": 1.0 - }, - { - "lineId": 1.0, - "siteId": 2.0, - "siteName": "顺密路口站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.721520973, - 40.1940181096 - ], - "lon": 116.721520973, - "lat": 40.1940181096, - "siteDesc": "顺密路口站", - "siteState": 1.0, - "isCurrentSite": 1.0, - "siteColor": 1.0, - "peoples": "0", - "ifStop": 1.0 - }, - { - "lineId": 1.0, - "siteId": 2.0, - "siteName": "顺密路口站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.723146, - 40.179637 - ], - "lon": 116.723146, - "lat": 40.179637, - "siteDesc": "顺密路口站", - "siteState": 1.0, - "isCurrentSite": 1.0, - "siteColor": 1.0, - "peoples": "0", - "ifStop": 1.0 - }, - { - "lineId": 2.0, - "siteId": 2.0, - "siteName": "顺密路口站", - "cityCode": "010", - "areaCode": "1001", - "areaName": "顺义区", - "currentLocation": [ - 116.738835502, - 40.2023958306 - ], - "lon": 116.738835502, - "lat": 40.2023958306, - "siteDesc": "顺密路口站", - "siteState": 1.0, - "isCurrentSite": 1.0, - "siteColor": 1.0, - "peoples": "0", - "ifStop": 1.0 - } - ] - } -} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml deleted file mode 100644 index 81c5fe7e4e..0000000000 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - 300px - 348px - 211px - 276px - - - 220px - 98px - 159px - - 32px - 20px - 42px - 32px - - 15px - - 20px - 36px - 28px - 36px - - 3px - 3px - 17px - 17px - - - 300px - 270px - 30px - 24px - 24px - 1px - 30px - 23px - 30px - 146px - 20px - 23px - 30px - 23px - 26px - 32px - 20px - 80px - 3px - 44.5px - 20px - 28px - 27px - - - 25.6px - 20px - 20px - 16px - 16px - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/colors.xml b/OCH/mogo-och-bus/src/main/res/values/colors.xml deleted file mode 100644 index fa0e45046d..0000000000 --- a/OCH/mogo-och-bus/src/main/res/values/colors.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - #FF1FA7FF - #FFFFFFFF - #FFFFFFFF - #FF51649D - #7F8299EB - - #51649D - #427d8e - #1FA7FF - #3FC281 - #427d8e - #3FC281 - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/dimens.xml b/OCH/mogo-och-bus/src/main/res/values/dimens.xml deleted file mode 100644 index 38414718d2..0000000000 --- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - 300px - 348px - 211px - 276px - - - 220px - 98px - 159px - - 32px - 20px - 26px - 20px - - 15px - - 20px - 36px - 28px - 36px - - 3px - 3px - 17px - 17px - - - 300px - 270px - 30px - 24px - 24px - 1px - 30px - 23px - 30px - 146px - 20px - 23px - 30px - 23px - 26px - 20px - 20px - 80px - 3px - 27px - 20px - 28px - 27px - - 16px - 16px - 16px - 16px - 16px - - - \ No newline at end of file diff --git a/OCH/mogo-och-noop/.gitignore b/OCH/mogo-och-noop/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/OCH/mogo-och-noop/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/OCH/mogo-och-noop/build.gradle b/OCH/mogo-och-noop/build.gradle deleted file mode 100644 index f1a7e40077..0000000000 --- a/OCH/mogo-och-noop/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'com.alibaba.arouter' - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - // buildToolsVersion rootProject.ext.android.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - - javaCompileOptions { - annotationProcessorOptions { - arguments = [AROUTER_MODULE_NAME: project.getName()] - } - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.arouter - annotationProcessor rootProject.ext.dependencies.aroutercompiler - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.mogooch - implementation rootProject.ext.dependencies.mogoutils - implementation rootProject.ext.dependencies.mogocommons - - implementation rootProject.ext.dependencies.mogo_core_data - implementation rootProject.ext.dependencies.mogo_core_function_api - - } else { - implementation project(":OCH:mogo-och") - implementation project(":foudations:mogo-utils") - implementation project(":foudations:mogo-commons") - - implementation project(':core:mogo-core-data') - implementation project(':core:mogo-core-function-api') - } -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/OCH/mogo-och-noop/consumer-rules.pro b/OCH/mogo-och-noop/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OCH/mogo-och-noop/gradle.properties b/OCH/mogo-och-noop/gradle.properties deleted file mode 100644 index a3c4fc4290..0000000000 --- a/OCH/mogo-och-noop/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.och -POM_ARTIFACT_ID=och-noop -VERSION_CODE=1 diff --git a/OCH/mogo-och-noop/proguard-rules.pro b/OCH/mogo-och-noop/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/OCH/mogo-och-noop/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/OCH/mogo-och-noop/src/main/AndroidManifest.xml b/OCH/mogo-och-noop/src/main/AndroidManifest.xml deleted file mode 100644 index 83e4053945..0000000000 --- a/OCH/mogo-och-noop/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - / - \ No newline at end of file diff --git a/OCH/mogo-och-noop/src/main/java/com/mogo/och/bus/MogoOCHNoop.java b/OCH/mogo-och-noop/src/main/java/com/mogo/och/bus/MogoOCHNoop.java deleted file mode 100644 index 787751ea8a..0000000000 --- a/OCH/mogo-och-noop/src/main/java/com/mogo/och/bus/MogoOCHNoop.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mogo.och.bus; - -import android.content.Context; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.och.OCHConstants; -import com.mogo.utils.logger.Logger; - -/** - * @author congtaowang - * @since 2021/1/15 - *

- * 描述 - */ -@Route(path = OCHConstants.PATH) -public class MogoOCHNoop implements IMoGoFunctionProvider { - - private static final String TAG = "MogoOCHNoop"; - - @Override - public void init(Context context) { - Logger.d(TAG, "noop-"); - } - - @Nullable - @Override - public Fragment createCoverage(@Nullable FragmentActivity activity, @Nullable Integer containerId) { - Logger.d(TAG, "noop-"); - return null; - } - - @NonNull - @Override - public String getFunctionName() { - return TAG; - } - - @Override - public void onDestroy() { - - } - -} diff --git a/OCH/mogo-och-taxi/.gitignore b/OCH/mogo-och-taxi/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/OCH/mogo-och-taxi/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/OCH/mogo-och-taxi/build.gradle b/OCH/mogo-och-taxi/build.gradle deleted file mode 100644 index 11f721a2dc..0000000000 --- a/OCH/mogo-och-taxi/build.gradle +++ /dev/null @@ -1,66 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'com.alibaba.arouter' - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - // buildToolsVersion rootProject.ext.android.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - - javaCompileOptions { - annotationProcessorOptions { - arguments = [AROUTER_MODULE_NAME: project.getName()] - } - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.arouter - annotationProcessor rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.rxandroid - implementation rootProject.ext.dependencies.androidxconstraintlayout - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.mogooch - implementation rootProject.ext.dependencies.mogoutils - implementation rootProject.ext.dependencies.mogocommons - implementation rootProject.ext.dependencies.modulecommon - - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogo_core_data - implementation rootProject.ext.dependencies.mogo_core_function_api - } else { - implementation project(":OCH:mogo-och") - implementation project(":foudations:mogo-utils") - implementation project(":foudations:mogo-commons") - implementation project(":modules:mogo-module-common") - - implementation project(':core:mogo-core-utils') - implementation project(':core:mogo-core-data') - implementation project(':core:mogo-core-function-api') - } -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/OCH/mogo-och-taxi/consumer-rules.pro b/OCH/mogo-och-taxi/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OCH/mogo-och-taxi/gradle.properties b/OCH/mogo-och-taxi/gradle.properties deleted file mode 100644 index 2d8ec933d9..0000000000 --- a/OCH/mogo-och-taxi/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.och -POM_ARTIFACT_ID=och-taxi -VERSION_CODE=1 diff --git a/OCH/mogo-och-taxi/proguard-rules.pro b/OCH/mogo-och-taxi/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/OCH/mogo-och-taxi/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/AndroidManifest.xml b/OCH/mogo-och-taxi/src/main/AndroidManifest.xml deleted file mode 100644 index fb42392054..0000000000 --- a/OCH/mogo-och-taxi/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - / - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java deleted file mode 100644 index 944f331d2c..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoADASAutoPilotStatusChangedListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/26 - * - * adas 可自动驾驶状态切换逻辑 - */ -interface IMogoADASAutoPilotStatusChangedListener { - - void onAutoPilotStatusChanged( int status, String reason ); -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java deleted file mode 100644 index b3f683b843..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 网约车-出租车到站回调 - */ -interface IMogoOCHTaxiArriveCallback { - - void onTheWay2StartStation(); - - /** - * 到达起始站 - */ - void onArriveAtStartStation(); - - /** - * 到达终点站 - */ - void onArriveAtEndStation(); - - /** - * 去往目的地的路上 - */ - void onTheWay2EndStation(); - - /** - * 乘客已到达站点 - */ - void onUserArriveAtStartStation(); -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IOperationChangedListener.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IOperationChangedListener.java deleted file mode 100644 index af7fc38699..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IOperationChangedListener.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.mogo.och.taxi; - -public interface IOperationChangedListener { - void onOperationChanged(boolean launch); - void onOrderStatusChanged(int status); -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java deleted file mode 100644 index 5541e6029d..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxi.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.mogo.och.taxi; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.OCHConstants; -import com.mogo.och.taxi.ui.OCHTaxiFragment; -import com.mogo.och.taxi.ui.OCHTaxiUiController; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.logger.Logger; - -/** - * @author congtaowang - * @since 2021/1/15 - *

- * 网约车-出租车 - */ -@Route(path = OCHConstants.PATH) -public class MogoOCHTaxi implements IMoGoFunctionProvider, IMogoStatusChangedListener { - - private static final String TAG = "MogoOCHTaxi"; - private OCHTaxiFragment ochTaxiFragment; - private FragmentActivity mActivity; - private int mContainerId; - - - @Override - public void init(Context context) { - Logger.d(TAG, "init"); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("ochTaxi", StatusDescriptor.VR_MODE, this); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("ochTaxi", StatusDescriptor.TOP_VIEW, this); - } - - private void showFragment() { - if (ochTaxiFragment == null) { - Logger.d(TAG, "准备add fragment======"); - ochTaxiFragment = new OCHTaxiFragment(); - mActivity.getSupportFragmentManager().beginTransaction().add(mContainerId, ochTaxiFragment).commitAllowingStateLoss(); - return; - } - Logger.d(TAG, "准备show fragment"); - mActivity.getSupportFragmentManager().beginTransaction().show(ochTaxiFragment).commitAllowingStateLoss(); - } - - private void hideFragment() { - if (ochTaxiFragment != null) { - mActivity.getSupportFragmentManager().beginTransaction().hide(ochTaxiFragment).commitAllowingStateLoss(); - } - } - - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (descriptor == StatusDescriptor.VR_MODE) { - if (isTrue) { - showFragment(); - MogoOCHTaxiModel.getInstance().init(mActivity.getApplicationContext()); - } else { - hideFragment(); - } - } - } - - @Nullable - @Override - public Fragment createCoverage(@Nullable FragmentActivity activity, @Nullable Integer containerId) { - this.mActivity = activity; - this.mContainerId = containerId; -// MogoOCHTaxiModel.getInstance().init( activity.getApplicationContext() ); - OCHTaxiUiController.getInstance().init(activity, containerId); - - UiThreadHandler.postDelayed(() -> { - OCHTaxiUiController.getInstance().stepIntoVrMode(); - }, 5_000L); - return null; - } - - @NonNull - @Override - public String getFunctionName() { - return TAG; - } - - @Override - public void onDestroy() { - - } - -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java deleted file mode 100644 index f897b01a23..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ /dev/null @@ -1,915 +0,0 @@ -package com.mogo.och.taxi; - -import android.content.Context; -import android.content.Intent; -import android.location.Location; -import android.net.ConnectivityManager; - -import com.mogo.cloud.commons.utils.CoordinateUtils; -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.commons.network.SubscribeImpl; -import com.mogo.eagle.core.data.map.MogoLatLng; -import com.mogo.map.navi.IMogoCarLocationChangedListener2; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.constants.HostConst; -import com.mogo.och.taxi.ui.OCHTaxiUiController; -import com.mogo.service.adas.IMogoAdasOCHCallback; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -import com.mogo.service.cloud.socket.IMogoLifecycleListener; -import com.mogo.service.cloud.socket.IMogoOnMessageListener; -import com.mogo.service.intent.IMogoIntentListener; -import com.mogo.utils.NetworkUtils; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.RequestOptions; -import com.mogo.utils.network.utils.GsonUtil; -import com.mogo.utils.storage.SharedPrefsMgr; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 网约车 - 出租车业务逻辑处理 - */ -class MogoOCHTaxiModel { - - private static final String TAG = "MogoOCHTaxiModel"; - - /** - * 到达起始点围栏 - */ - public static final int ARRIVE_AT_START_STATION_DISTANCE = 20; - - private static volatile MogoOCHTaxiModel sInstance; - - private MogoOCHTaxiModel() { - } - - public static MogoOCHTaxiModel getInstance() { - if ( sInstance == null ) { - synchronized ( MogoOCHTaxiModel.class ) { - if ( sInstance == null ) { - sInstance = new MogoOCHTaxiModel(); - } - } - } - return sInstance; - } - - /** - * 订单信息 - */ - public static final String SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER"; - - private OrderMsgListener mOrderMsgListener; - private OrderStatusMsgListener mOrderStatusMsgListener; - private OCHTaxiServiceApi mOCHTaxiServiceApi; - private Context mContext; - private OCHTaxiOrderResponse mCurrentOCHOrder; - private OCHArriveNotifyCallback mNotifyCallback; - private OCHSocketLifeCycleLisnter mSocketLifeCycleLisnter; - private IMogoCarLocationChangedListener2 mCarLocationChangedListener2; - /** - * 是否达到起始站点 - */ - private boolean mIsArriveAtStartStation = false; - - /** - * 是否在去往终点站的路上 - */ - private boolean mIsOnTheWay2EndStation = false; - - /** - * 是否达到终点 - */ - private boolean mIsArriveAtEndStation = false; - -// /** -// * 乘客已到达上车站点 -// */ -// private boolean mIsUserArriveAtStartStation = false; - - /** - * 查询订单信息重试次数 - */ - private int mRetryCounter = 0; - - private int mOCHRHCarstatus = -1; - - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return sInstance; - } - - public void init( Context context ) { - mContext = context.getApplicationContext(); - - if (mOCHTaxiServiceApi == null){ - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create(OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN); - } - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi( context ) - .registerOnMessageListener( 401016, mOrderMsgListener = new OrderMsgListener() ); - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi( context ) - .registerOnMessageListener( 401019, mOrderStatusMsgListener = new OrderStatusMsgListener() ); - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi(context) - .registerLifecycleListener(10010,mSocketLifeCycleLisnter = new OCHSocketLifeCycleLisnter()); - MogoApisHandler.getInstance() - .getApis() - .getAdasControllerApi() - .addAdasOCHCallback( mNotifyCallback = new OCHArriveNotifyCallback() ); - MogoApisHandler.getInstance() - .getApis() - .getIntentManagerApi() - .registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); -// if ( NetworkUtils.isConnected( mContext ) ) { -// restoreOrderInfo(); -// } - if ( NetworkUtils.isConnected( mContext ) ) { - querryCarStatus(); - } - } - - public void querryCarStatus() { - mOCHTaxiServiceApi.queryCarStatus( new OCHCarStatus (MoGoAiCloudClientConfig.getInstance().getSn(),0)) - .subscribeOn(Schedulers.io()) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OCHCarStatusResponse >(RequestOptions.create(mContext)) { - @Override - public void onSuccess(OCHCarStatusResponse data) { - super.onSuccess(data); - Logger.e(TAG,"querryCarStatus:"+data.data.status); - - mOCHRHCarstatus = data.data.status == 1 ? 1:0; - - //更新view - OCHTaxiUiController.getInstance().onOperationChanged(mOCHRHCarstatus==1); - //刷新数据 - updateData(mOCHRHCarstatus); - } - - @Override - public void onError(Throwable e) { - super.onError(e); - Logger.e(TAG,"querryCarStatus:"+e.getMessage()); - } - - @Override - public void onError(String message, int code) { - super.onError(message,code); - Logger.e(TAG,"querryCarStatus:"+message); - } - }); - } - - public void updateData(int status){ - if (status == 1){ - //查询订单 - restoreOrderInfo(); - } - } - - /** - * 重新恢复订单状态 - */ - private void restoreOrderInfo() { - Logger.d( TAG, "重新查询订单状态" ); - mRetryCounter = 0; - query2RestoreOrderStatus(null); - } - - /** - * 查询订单状态,来恢复旧订单(因crash导致应用重启、断网没收到推送等)状态 - *

- * 已结束、已取消:清除订单状态 - * 已到达目的地:更新UI,显示到达目的地状态 - * 车辆已到达起始地:等待乘客上车,并确认上车 - * 乘客已上车:更新UI,显示已到达起始站,等待安全员确认开启自动驾驶 - * 在去往目的地的路上:显示去往目的地的路上 - * 在去往起始地的路上、未获取具体状态:以新接收订单开始处理 - * - * @param orderNo - */ - private void query2RestoreOrderStatus( String orderNo ) { - Logger.e(TAG,"query2RestoreOrderStatus:"+orderNo); - queryOCHOrderStatus( orderNo, new OCHOrderStatusCallback< OCHTaxiOrderResponse2 >() { - @Override - public void onSuccess( OCHTaxiOrderResponse2 data ) { - Logger.d( TAG, "query2RestoreOrderStatus:"+ data.toString()); - if ( data == null || data.data == null) { - Logger.d( TAG, "订单已取消或已完成" ); - clearCurrentOCHOrder(); - OCHTaxiUiController.getInstance().onOrderStatusChanged(OCHOrderStatus.None.getCode()); - return; - } - convertCurrentOrder( data ); - OCHOrderStatus status = OCHOrderStatus.valueOf( data.data.orderDispatchType ); - OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); - switch ( status ) { - case JourneyCompleted: - TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_completed ) ); - clearCurrentOCHOrder(); -// OCHTaxiUiController.getInstance().removeFragment(); - break; - case Cancel: - TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_cancel ) ); - clearCurrentOCHOrder(); -// OCHTaxiUiController.getInstance().removeFragment(); - break; - case ArriveAtEndStation: - case UserState: - mIsArriveAtEndStation = true; - mIsArriveAtStartStation = false; - mIsOnTheWay2EndStation = false; -// mIsUserArriveAtStartStation = false; -// OCHTaxiUiController.getInstance().addFragment(); - break; - case ArriveAtStartStation: - mIsArriveAtStartStation = true; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = false; -// mIsUserArriveAtStartStation = false; -// OCHTaxiUiController.getInstance().addFragment(); - break; - case UserArriveAtStartStation: - mIsArriveAtStartStation = true; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = false; -// mIsUserArriveAtStartStation = true; -// OCHTaxiUiController.getInstance().addFragment(); - break; - case OnTheWayToEndStation: - mIsArriveAtStartStation = false; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = true; -// mIsUserArriveAtStartStation = false; -// OCHTaxiUiController.getInstance().addFragment(); - break; - case OnTheWayToStartStation: - default: - mIsArriveAtStartStation = false; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = false; -// mIsUserArriveAtStartStation = false; - mOrderMsgListener.onMsgReceived( mCurrentOCHOrder ); - break; - } - } - - @Override - public void onError() { - if ( mRetryCounter++ > 3 ) { - return; - } - query2RestoreOrderStatus( orderNo ); - } - - @Override - public void onFail() { - Logger.w( TAG, "查询订单失败" ); - } - } ); - } - - /** - * 用于长连接 - * @param orderNo - */ - private void querryOrderStatusForMakeUp( String orderNo ) { - Logger.e(TAG,"querryOrderStatusForMakeUp:"+orderNo); - queryOCHOrderStatus( orderNo, new OCHOrderStatusCallback< OCHTaxiOrderResponse2 >() { - @Override - public void onSuccess( OCHTaxiOrderResponse2 data ) { - if ( data == null || data.data == null) { - Logger.d( TAG, "订单已取消或已完成" ); - clearCurrentOCHOrder(); - OCHTaxiUiController.getInstance().onOrderStatusChanged(OCHOrderStatus.None.getCode()); - return; - } - Logger.d( TAG, "querryOrderStatusForMakeUp:"+ data.data.orderDispatchType); - convertCurrentOrder( data ); - OCHOrderStatus status = OCHOrderStatus.valueOf( data.data.orderDispatchType ); - switch ( status ) { - case JourneyCompleted: - TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_completed ) ); - OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); - clearCurrentOCHOrder(); - break; - case Cancel: - TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_cancel ) ); - OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); - clearCurrentOCHOrder(); - break; - case OnTheWayToStartStation: -// default: - mIsArriveAtStartStation = false; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = false; - OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); - mOrderMsgListener.onMsgReceived( mCurrentOCHOrder ); - break; - } - } - - @Override - public void onError() { - - } - - @Override - public void onFail() { - Logger.w( TAG, "查询订单失败" ); - } - } ); - } - - /** - * 将查询到的订单转换成推送的订单数据,目前两者数据结构不一样 - * - * @param data - */ - private void convertCurrentOrder( OCHTaxiOrderResponse2 data ) { - if (data.data == null){ - return; - } - if ( mCurrentOCHOrder == null ) { - mCurrentOCHOrder = new OCHTaxiOrderResponse(); - } - mCurrentOCHOrder.orderNo = data.data.orderNo; - mCurrentOCHOrder.orderDispatchType = data.data.orderDispatchType; - mCurrentOCHOrder.endStation = data.data.endStation; - mCurrentOCHOrder.startStation = data.data.startStation; - mCurrentOCHOrder.travelDistance = data.data.travelDistance; - mCurrentOCHOrder.orderType = data.data.orderType; - mCurrentOCHOrder.drivingRoutes = new ArrayList<>(); - OCHTaxiOrderResponse.OCHTaxiStation startStation = new OCHTaxiOrderResponse.OCHTaxiStation(); - List< Double > startStationCoordinate = data.data.startStationCoordinate; - List< Double > startGcjStationCoordinate = data.data.startGcjStationCoordinate; - if (startStationCoordinate != null && startStationCoordinate.size()>1 && - startGcjStationCoordinate!= null && startGcjStationCoordinate.size() > 1){ - startStation.lon = startGcjStationCoordinate.get( 0 ); - startStation.lat = startGcjStationCoordinate.get( 1 ); - startStation.wgsLon = startStationCoordinate.get(0); - startStation.wgsLat = startStationCoordinate.get(1); - startStation.siteId = data.data.startStationId; - startStation.siteName = data.data.startStation; - mCurrentOCHOrder.drivingRoutes.add( startStation ); - } - OCHTaxiOrderResponse.OCHTaxiStation endStation = new OCHTaxiOrderResponse.OCHTaxiStation(); - List< Double > endStationCoordinate = data.data.endStationCoordinate; - List< Double > endGcjStationCoordinate = data.data.endGcjStationCoordinate; - if (endStationCoordinate != null && endStationCoordinate.size()>1 && - endGcjStationCoordinate!=null && endGcjStationCoordinate.size() > 1){ - endStation.lon = endGcjStationCoordinate.get( 0 ); - endStation.lat = endGcjStationCoordinate.get( 1 ); - endStation.wgsLon = endStationCoordinate.get( 0 ); - endStation.wgsLat = endStationCoordinate.get( 1 ); - endStation.siteId = data.data.endStationId; - endStation.siteName = data.data.endStation; - mCurrentOCHOrder.drivingRoutes.add( endStation ); - } - cacheOrderInfo2Native( mCurrentOCHOrder ); - } - - /** - * 监听网络变化,避免启动机器时无网导致无法更新订单信息 - */ - private IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { - @Override - public void onIntentReceived( String intentStr, Intent intent ) { - Logger.d( TAG, "onIntentReceived = %s", intentStr ); - if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) { - if ( NetworkUtils.isConnected( mContext ) ) { -// restoreOrderInfo(); - querryCarStatus(); - } - } - } - }; - - public void changedOperationStatus() { - if ( mOCHRHCarstatus == -1){ - querryCarStatus(); - return; - } - - if (checkCurrentOCHOrder()){ - TipToast.shortTip( "订单未完成,无法下线收车" ); - return; - } - - int status = mOCHRHCarstatus == 1 ? 0 : 1; - mOCHTaxiServiceApi.updateCarStatus(new OCHCarStatus(MoGoAiCloudClientConfig.getInstance().getSn(),status)) - .subscribeOn(Schedulers.io()) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OCHCarStatusResponse >(RequestOptions.create(mContext)) { - @Override - public void onSuccess(OCHCarStatusResponse o) { - super.onSuccess(o); - Logger.d(TAG,"OCHCarStatusResponse:"+o.data.status); - mOCHRHCarstatus = o.data.status; - OCHTaxiUiController.getInstance().onOperationChanged(mOCHRHCarstatus == 1); - updateData(mOCHRHCarstatus); - Logger.d(TAG,"changeCarStatus:"+status); - } - - @Override - public void onError(Throwable e) { - super.onError(e); - Logger.d(TAG,"changeCarStatus:"+e.getMessage()); - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - Logger.d(TAG,"changeCarStatus:"+message); - } - }); - } - - /** - * 自车定位 - */ - private class LocationListener implements IMogoCarLocationChangedListener2 { - - @Override - public void onCarLocationChanged2( Location location ) { -// Logger.d( TAG, "定位已判断是否达到上车站点: 起点(%s, %s), 当前位置(%s, %s)", -// mCurrentOCHOrder.drivingRoutes.get( 0 ).lon, -// mCurrentOCHOrder.drivingRoutes.get( 0 ).lat, -// location.getLongitude(), -// location.getLatitude() -// ); - onLocationChanged( location ); - } - - @Override - public void onCarLocationChanged( MogoLatLng latLng ) { - - } - } - - /** - * 位置变化时,通过围栏({@link #ARRIVE_AT_START_STATION_DISTANCE}M)判断,是否到达x点 - * - * @param location - */ - private void onLocationChanged( Location location ) { - if ( location == null ) { - return; - } - if ( !checkCurrentOCHOrder() ) { - return; - } - if ( mIsArriveAtStartStation ) { - return; - } -// if ( mIsUserArriveAtStartStation ) { -// return; -// } - judgeStartStation( location ); - } - - - /** - * 根据围栏判断,是否到达起点 - * - * @param location - */ - private void judgeStartStation( Location location ) { - OCHTaxiOrderResponse.OCHTaxiStation station = mCurrentOCHOrder.drivingRoutes.get( 0 );//起点 - double distance = CoordinateUtils.calculateLineDistance( station.lon, station.lat, location.getLongitude(), location.getLatitude() ); - if ( distance > ARRIVE_AT_START_STATION_DISTANCE ) { - distance = CoordinateUtils.calculateLineDistance( station.lon, station.lat, - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(), - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat() ); - } - if ( distance <= ARRIVE_AT_START_STATION_DISTANCE ) { - mIsArriveAtStartStation = true; - OCHTaxiUiController.getInstance().onArriveAtStartStation(); - updateOCHOrderStatus( OCHOrderStatus.ArriveAtStartStation, new OCHOrderStatusCallback() { - @Override - public void onSuccess( Object data ) { - OCHTaxiUiController.getInstance().onOrderStatusChanged(OCHOrderStatus.ArriveAtStartStation.getCode()); - Logger.d( TAG, "更新状态成功" ); - } - - @Override - public void onFail() { - Logger.d( TAG, "更新状态失败" ); - } - - - @Override - public void onError() { - Logger.d( TAG, "更新状态失败2" ); - } - } ); - return; - } -// Logger.d( TAG, "distance = %s", distance ); - } - - /** - * 是否已到达起始站 - */ - public boolean isArriveAtStartStation() { - return mIsArriveAtStartStation; - } - - /** - * 是否已到达终点站 - * - * @return - */ - public boolean isArriveAtEndStation() { - return mIsArriveAtEndStation; - } - - - /** - * 设置去往终点状态 - * - * @param isOnTheWay2EndStation - */ - public void setOnTheWay2EndStation( boolean isOnTheWay2EndStation ) { - this.mIsOnTheWay2EndStation = isOnTheWay2EndStation; - OCHTaxiUiController.getInstance().onTheWay2EndStation(); - } - - /** - * 是否在去往目的地的路上 - * - * @return - */ - public boolean isOnTheWay2EndStation() { - return mIsOnTheWay2EndStation; - } - - /** - * 后端长链推送通知新订单 - */ - private class OrderMsgListener implements IMogoOnMessageListener< OCHTaxiOrderResponse > { - @Override - public Class< OCHTaxiOrderResponse > target() { - return OCHTaxiOrderResponse.class; - } - - @Override - public void onMsgReceived( OCHTaxiOrderResponse obj ) { - if ( obj == null ) { - return; - } - if (mOCHRHCarstatus != 1){ - return; - } - Logger.d( TAG, "收到新订单" + GsonUtil.jsonFromObject(obj)); - - mCurrentOCHOrder = obj; - cacheOrderInfo2Native( mCurrentOCHOrder ); - Location location = MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getNavi( mContext ) - .getCarLocation2(); - onLocationChanged( location ); - if ( !isArriveAtStartStation() ) { - registerCarLocationListener(); - } - OCHTaxiUiController.getInstance().onOrderStatusChanged(mCurrentOCHOrder.orderDispatchType); - } - } - - /** - * 保存订单到本地,避免车机重启丢失数据 - * - * @param obj - */ - private void cacheOrderInfo2Native( OCHTaxiOrderResponse obj ) { - if ( obj == null ) { - return; - } - SharedPrefsMgr.getInstance( mContext ).putString( SP_KEY_OCH_TAXI_ORDER, GsonUtil.jsonFromObject( obj ) ); - } - - /** - * 达到起始站围栏监听 - */ - private void registerCarLocationListener() { - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .registerCarLocationChangedListener( TAG, - mCarLocationChangedListener2 == null ? mCarLocationChangedListener2 = new LocationListener() : mCarLocationChangedListener2 ); - } - - /** - * 注销到达起始站围栏监听 - */ - public void unregisterCarLocationListener() { - if ( mCarLocationChangedListener2 == null ) { - return; - } - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .unregisterCarLocationChangedListener( TAG, mCarLocationChangedListener2 ); - } - - public void unregisterSocketListener(){ - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi(mContext) - .unregisterLifecycleListener(10010); - } - - /** - * 后端长链推送通知订单状态被改变 - */ - private class OrderStatusMsgListener implements IMogoOnMessageListener< OCHTaxiOrderStatusResponse > { - - @Override - public Class target() { - return OCHTaxiOrderStatusResponse.class; - } - - @Override - public void onMsgReceived( OCHTaxiOrderStatusResponse obj ) { - if ( obj == null ) { - return; - } - if (mOCHRHCarstatus != 1){ - return; - } - - Logger.d(TAG, "订单状态被改变:" + GsonUtil.jsonFromObject(obj)); - OCHOrderStatus status = OCHOrderStatus.valueOf( obj.orderDispatchType ); - switch ( status ) { - case Cancel: - clearCurrentOCHOrder(); - OCHTaxiUiController.getInstance().onOrderStatusChanged(status.getCode()); - break; - case UserArriveAtStartStation: - mIsArriveAtStartStation = true; - OCHTaxiUiController.getInstance().onUserArriveAtStartStation(); - break; - default: - Logger.d( TAG, "current order status: %s", status ); - break; - } - } - } - - private class OCHSocketLifeCycleLisnter implements IMogoLifecycleListener { - - @Override - public void onConnectFailure() { - Logger.e(TAG,"socket onConnectFailure"); - } - - @Override - public void onConnectSuccess() { - Logger.e(TAG,"socket onConnectSuccess"); - stopSocketMakeUp(); - } - - @Override - public void onConnectLost() { - Logger.e(TAG,"socket onConnectLost"); - startSocketMakeUp(); - } - } - - public void startSocketMakeUp(){ - if (mOCHRHCarstatus == 1){ - timeLoop(); - } - } - - public void stopSocketMakeUp(){ - if (mDisposable != null){ - mDisposable.dispose(); - } - } - - /** - * 自动驾驶本地通知订单到站 - */ - private class OCHArriveNotifyCallback implements IMogoAdasOCHCallback { - @Override - public void onArriveAt( AutopilotStationInfo data ) { - if ( data == null ) { - return; - } - if ( mIsArriveAtEndStation ) { - return; - } - if ( !checkCurrentOCHOrder() ) { - return; - } - mIsArriveAtEndStation = true; - OCHTaxiUiController.getInstance().onArriveAtEndStation(); - } - - @Override - public void onStateChanged( int state, String reason ) { -// Logger.d( TAG, "state = %s", state ); - OCHTaxiUiController.getInstance().onAutoPilotStatusChanged( state, reason ); - } - } - - /** - * 更新订单状态 - * - * @param orderStatus 订单状态 - */ - public void updateOCHOrderStatus( OCHOrderStatus orderStatus, OCHOrderStatusCallback callback ) { - if ( mCurrentOCHOrder == null ) { - return; - } - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN ); - } - mOCHTaxiServiceApi.updateOrderStatus( new OCHTaxiOrderStatus( MoGoAiCloudClientConfig.getInstance().getSn(), mCurrentOCHOrder.orderNo, orderStatus.getCode() ) ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< BaseData >( RequestOptions.create( mContext ) ) { - @Override - public void onSuccess( BaseData o ) { - super.onSuccess( o ); - if ( callback != null ) { - callback.onSuccess( o ); - } - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - if ( callback != null ) { - callback.onError(); - } - Logger.e(TAG,"updateOCHOrderStatus:"+e.getMessage()); - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.e(TAG,"updateOCHOrderStatus:"+message); - if ( callback != null ) { - callback.onFail(); - } - } - } ); - } - - /** - * 查询订单状态 - * - * @param orderNo 订单号 - */ - public void queryOCHOrderStatus( String orderNo, OCHOrderStatusCallback< OCHTaxiOrderResponse2 > callback ) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN ); - } - mOCHTaxiServiceApi.queryOrder( new OCHTaxiOrderStatus( MoGoAiCloudClientConfig.getInstance().getSn(), orderNo, OCHOrderStatus.None.getCode() ) ) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe( new SubscribeImpl< OCHTaxiOrderResponse2 >( RequestOptions.create( mContext ) ) { - @Override - public void onSuccess( OCHTaxiOrderResponse2 o ) { - super.onSuccess( o ); - if ( callback != null ) { - callback.onSuccess( o ); - } - } - - @Override - public void onError( Throwable e ) { - super.onError( e ); - if ( callback != null ) { - callback.onError(); - } - } - - @Override - public void onError( String message, int code ) { - super.onError( message, code ); - Logger.e("MogoOCHTaxi","queryOCHOrderStatus:"+message); - if ( callback != null ) { - callback.onFail(); - } - } - } ); - } - - /** - * 清除订单信息 - */ - public void clearCurrentOCHOrder() { - mCurrentOCHOrder = null; - mIsArriveAtStartStation = false; - mIsArriveAtEndStation = false; - mIsOnTheWay2EndStation = false; -// mIsUserArriveAtStartStation = false; - SharedPrefsMgr.getInstance( mContext ).remove( SP_KEY_OCH_TAXI_ORDER ); - } - - /** - * 检测当前订单 - * - * @return - */ - public boolean checkCurrentOCHOrder() { - if ( mCurrentOCHOrder != null - && mCurrentOCHOrder.drivingRoutes != null) { - return true; - } - return false; - } - - /** - * 以当前订单为基础,开启自动驾驶 - */ - public void startAutoPilot() { - if ( !checkCurrentOCHOrder() ) { - Logger.e( TAG, "no order or order is empty." ); - return; - } - - AutopilotControlParameters parameters = new AutopilotControlParameters(); - parameters.vehicleType = mCurrentOCHOrder.orderType; - parameters.startLatLon = new AutopilotControlParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoutes.get( 0 ).wgsLat, mCurrentOCHOrder.drivingRoutes.get( 0 ).wgsLon ); - parameters.endLatLon = new AutopilotControlParameters.AutoPilotLonLat( mCurrentOCHOrder.drivingRoutes.get( 1 ).wgsLat, mCurrentOCHOrder.drivingRoutes.get( 1 ).wgsLon ); - MogoApisHandler.getInstance() - .getApis() - .getAdasControllerApi() - .aiCloudToAdasData( parameters ); - Logger.d( TAG, "start autopilot with parameter: %s", GsonUtil.jsonFromObject( parameters ) ); - } - - /** - * 获取当前订单 - * - * @return - */ - public OCHTaxiOrderResponse getCurrentOCHOrder() { - return mCurrentOCHOrder; - } - - public void calculateTravelDistance(Location carLocation){ - if (mCurrentOCHOrder.drivingRoutes != null && mCurrentOCHOrder.drivingRoutes.size()>0){ - OCHTaxiOrderResponse.OCHTaxiStation endStationOCHLocation = mCurrentOCHOrder.drivingRoutes.get(1); - double distance = CoordinateUtils.calculateLineDistance( - endStationOCHLocation.lon, endStationOCHLocation.lat, - carLocation.getLongitude(), carLocation.getLatitude()); - mCurrentOCHOrder.decreaseTravelDistance(distance); - } - } - - /** - * 结束自动驾驶 - */ - public void cancelAutopilot() { - try { - MogoApisHandler.getInstance() - .getApis() - .getAdasControllerApi() - .cancelAutopilot(); - Logger.d( TAG, "结束自动驾驶" ); - unregisterCarLocationListener(); - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - private static final int PERIOD = 1 * 1000; - private static final int DELAY = 100; - private Disposable mDisposable; - /** - * 定时循环任务 - */ - private void timeLoop() { - mDisposable = Observable.interval(DELAY, PERIOD, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> querryOrderStatusForMakeUp(null)); - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatus.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatus.java deleted file mode 100644 index b3744a6063..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatus.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.taxi; - -import com.mogo.eagle.core.data.BaseData; - -public -/** - * - * 修改/查询网约车-出租车订单状态的数据结构 - */ -class OCHCarStatus extends BaseData { - - public String sn;// 不排除本地没有缓存订单号的情况 - public int status; //0 收车 1出车 - - public OCHCarStatus(String sn, - int status ) { - this.sn = sn; - this.status = status; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatusResponse.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatusResponse.java deleted file mode 100644 index 3a497cabc0..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHCarStatusResponse.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mogo.och.taxi; - -import com.mogo.eagle.core.data.BaseData; - -public -/** - * - * 修改/查询网约车-出租车订单状态的数据结构 - */ -class OCHCarStatusResponse extends BaseData { - - public String sn;// 不排除本地没有缓存订单号的情况 - public int status; //0 收车 1出车 - public Result data; - - public OCHCarStatusResponse(String sn, - int status ) { - this.sn = sn; - this.status = status; - } - public static class Result{ - public int id; - public String sn; - public String areaCode; - public String plateNumber; - public int status; -// String remark; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatus.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatus.java deleted file mode 100644 index 10d20acefc..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatus.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 未派单 0 - * 去往上车站点 1 - * 车辆已到达上车站点 2 - * 乘客已到达上车站点 3 - * 去往下车站点 4 - * 到达下车站点 5 - * 已完成 6 - * 已取消 7 - */ -enum OCHOrderStatus { - - None( 0 ), - OnTheWayToStartStation( 1 ), - ArriveAtStartStation( 2 ), - UserArriveAtStartStation( 3 ), - OnTheWayToEndStation( 4 ), - ArriveAtEndStation( 5 ), - UserState( 6 ),//小程序用的状态 车机不处理 - Cancel( 7 ), - JourneyCompleted(8);//行程完成 - - private int code; - - OCHOrderStatus( int code ) { - this.code = code; - } - - public int getCode() { - return code; - } - - public static OCHOrderStatus valueOf( int code ) { - for ( OCHOrderStatus value : OCHOrderStatus.values() ) { - if ( value.code == code ) { - return value; - } - } - return None; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatusCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatusCallback.java deleted file mode 100644 index 45be87c871..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHOrderStatusCallback.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 修改订单状态回调接口 - */ -interface OCHOrderStatusCallback< T > { - - void onSuccess( T data ); - - void onFail(); - - default void onError() { - - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java deleted file mode 100644 index ffdc0c3451..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.mogo.och.taxi; - -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 描述 - */ -class OCHTaxiOrderResponse implements Parcelable { - - // 订单号 - public String orderNo; - // 订单运营类型 (9出租车,10小巴) - public int orderType; - // 起始站名称 - public String startStation; - // 目的站名称 - public String endStation; - // 当前订单状态 - public int orderDispatchType; - // 起始站目的站距离km - public double travelDistance; - // 站点 - public List< OCHTaxiStation > drivingRoutes; - - /** - * @param distance - */ - public void decreaseTravelDistance( double distance ) { - travelDistance = ( ( float ) distance / 1000f ); - if ( travelDistance < 0 ) { - travelDistance = 0; - } - } - - public static class OCHTaxiStation implements Parcelable { - public String siteId; - public String siteName; - public double lon;// 用于计算距离 - public double lat; - public double wgsLon;//用于自动驾驶 - public double wgsLat; - public OCHTaxiStation() { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel( Parcel dest, int flags ) { - dest.writeString( this.siteId ); - dest.writeString( this.siteName ); - dest.writeDouble( this.lon ); - dest.writeDouble( this.lat ); - dest.writeDouble( this.wgsLon ); - dest.writeDouble( this.wgsLat ); - } - - protected OCHTaxiStation( Parcel in ) { - this.siteId = in.readString(); - this.siteName = in.readString(); - this.lon = in.readDouble(); - this.lat = in.readDouble(); - this.wgsLon = in.readDouble(); - this.wgsLat = in.readDouble(); - } - - public static final Creator< OCHTaxiStation > CREATOR = new Creator< OCHTaxiStation >() { - @Override - public OCHTaxiStation createFromParcel( Parcel source ) { - return new OCHTaxiStation( source ); - } - - @Override - public OCHTaxiStation[] newArray( int size ) { - return new OCHTaxiStation[size]; - } - }; - } - - public OCHTaxiOrderResponse() { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel( Parcel dest, int flags ) { - dest.writeString( this.orderNo ); - dest.writeInt( this.orderType ); - dest.writeString( this.startStation ); - dest.writeString( this.endStation ); - dest.writeInt( this.orderDispatchType ); - dest.writeDouble( this.travelDistance ); - dest.writeTypedList( this.drivingRoutes ); - } - - protected OCHTaxiOrderResponse( Parcel in ) { - this.orderNo = in.readString(); - this.orderType = in.readInt(); - this.startStation = in.readString(); - this.endStation = in.readString(); - this.orderDispatchType = in.readInt(); - this.travelDistance = in.readDouble(); - this.drivingRoutes = in.createTypedArrayList( OCHTaxiStation.CREATOR ); - } - - public static final Creator< OCHTaxiOrderResponse > CREATOR = new Creator< OCHTaxiOrderResponse >() { - @Override - public OCHTaxiOrderResponse createFromParcel( Parcel source ) { - return new OCHTaxiOrderResponse( source ); - } - - @Override - public OCHTaxiOrderResponse[] newArray( int size ) { - return new OCHTaxiOrderResponse[size]; - } - }; - - @Override - public String toString() { - return "OCHTaxiResponse{" + - "orderNo='" + orderNo + '\'' + - ", orderType=" + orderType + - ", startStation='" + startStation + '\'' + - ", endStation='" + endStation + '\'' + - ", orderDispatchType=" + orderDispatchType + - ", travelDistance=" + travelDistance + - ", drivingRoutes=" + drivingRoutes + - '}'; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse2.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse2.java deleted file mode 100644 index fc1ecb4437..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse2.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.mogo.och.taxi; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 描述 - */ -class OCHTaxiOrderResponse2 extends BaseData { - - public Result data; - - public static class Result { - public String _id; - // 订单号 - public String orderNo; - // 订单运营类型 (9出租车,10小巴) - public int orderType; - - // 当前订单状态 - public int orderDispatchType; - // 起始站目的站距离km - public double travelDistance; - - public String userName; - public String userPhone; - - // 起始站名称 - public String startStation; - // 起始站ID - public String startStationId; - // 起点站点 - public List< Double > startStationCoordinate; - public List< Double > startGcjStationCoordinate;//高德坐标系 用于距离计算 - - // 目的站名称 - public String endStation; - // 目的站ID - public String endStationId; - // 终点站点 - public List< Double > endStationCoordinate; - public List< Double > endGcjStationCoordinate;//高德坐标系 用于距离计算 - - public String orderStartTime; - public String cityCode; - public String areaCode; - public String createTime; - public String updateTime; - public int personNum; - public String headImgUrl; - public String lastBrandName; - - public String arrivedStartStationTime; - public String arrivedEndStationTime; - - public String sn; - public String carNum; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java deleted file mode 100644 index 061dcd6f79..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 修改/查询网约车-出租车订单状态的数据结构 - */ -class OCHTaxiOrderStatus { - - public String sn;// 不排除本地没有缓存订单号的情况 - public String orderNo; - public int orderDispatchType; - - - public OCHTaxiOrderStatus( String sn, - String orderNo, - int orderDispatchType ) { - this.sn = sn; - this.orderNo = orderNo; - this.orderDispatchType = orderDispatchType; - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatusResponse.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatusResponse.java deleted file mode 100644 index 3dd006f2f1..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatusResponse.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.taxi; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 描述 - */ -class OCHTaxiOrderStatusResponse { - - // 订单号 - public String orderNo; - - // 订单运营类型 (9出租车,10小巴) - public int orderType; - - // 起始站名称 - public String startStation; - public String startStationId; - - // 目的站名称 - public String endStation; - public String endStationId; - - // 当前订单状态 - /** - * 未派单 0 - * 去往上车站点 1 - * 已到达上车站点 2 - * 去往下车站点 3 - * 到达下车站点 4 - * 已完成 5 - * 已取消 6 - */ - public int orderDispatchType; - - // 起始站目的站距离km - public double travelDistance; -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOverlayManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOverlayManager.java deleted file mode 100644 index e12ebe6d6d..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOverlayManager.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.mogo.och.taxi; - -import android.content.Context; - -import com.mogo.eagle.core.data.map.MogoLatLng; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.map.overlay.IMogoOverlayManager; -import com.mogo.map.overlay.IMogoPolyline; -import com.mogo.map.overlay.MogoPolylineOptions; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.utils.LocationUtils; -import com.mogo.utils.ColorUtils; - -import java.util.ArrayList; -import java.util.List; - -public class OCHTaxiOverlayManager { - - - private IMogoPolyline mMoGoPolyline; - // 连接线参数 - private MogoPolylineOptions mPolylineOptions; - // 线路径集合 - private List mPolylinePointList; - // 渐变色 - private List mPolylineColors; - private Context mContext; - IMogoOverlayManager mogoOverlayManager; - public OCHTaxiOverlayManager(Context context) { - mPolylineOptions = new MogoPolylineOptions(); - // 绘制路径集合 - mPolylinePointList = new ArrayList<>(); - // 引导线颜色 - mPolylineColors = new ArrayList<>(); - mContext = context; - mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext); - } - - /** - * 绘制最优路线 - * - * @param routelist 要绘制的经纬度度集合 - */ - public IMogoPolyline draw(MogoLocation carLocal, List routelist) { - clearMogoRouteOverlay(); - if (routelist != null) { - - // 将当前车辆位置放进去 - mPolylinePointList.add(new MogoLatLng(carLocal.getLatitude(), carLocal.getLongitude())); - // 过滤后台推送的推荐路线集合 - for (MogoLatLng polyline : routelist) { - //需要剔除已经行驶过的经纬度,这里需要比对推荐路线集合中的点是否在当前车辆行驶方向前面如果不在则抛弃 - if (LocationUtils.isPointOnCarFront(carLocal, polyline)) { - mPolylinePointList.add(polyline); - } - } - mPolylineColors.addAll(ColorUtils.getGradientAlpha("#002965ED", "#FF2965ED", "#002965ED", mPolylinePointList.size())); - // 替换路径集合 - mPolylineOptions.points(mPolylinePointList); - // 线条粗细,渐变,渐变色值 - mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors); - // 绘制线 - mMoGoPolyline = mogoOverlayManager.addPolyline(mPolylineOptions); - } - return mMoGoPolyline; - } - - public void clearMogoRouteOverlay(){ - if (mMoGoPolyline != null) { - mMoGoPolyline.remove(); - mPolylinePointList.clear(); - mPolylineColors.clear(); - } - } - -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiServiceApi.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiServiceApi.java deleted file mode 100644 index b8c437336a..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiServiceApi.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mogo.och.taxi; - -import com.mogo.eagle.core.data.BaseData; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.Headers; -import retrofit2.http.POST; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 网约车-出租车接口 - */ -interface OCHTaxiServiceApi { - - /** - * 更新订单状态 - * - * @param status - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/order/updateOCHOrderState/v1" ) - Observable< BaseData > updateOrderStatus( @Body OCHTaxiOrderStatus status ); - - /** - * 查询订单状态 - * - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/yycp-onlinecar-hailing/onlineCarHailing/order/queryOrderForCar/v1" ) - Observable< OCHTaxiOrderResponse2 > queryOrder( @Body OCHTaxiOrderStatus status ); - /** - * 查询网约车状态 - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/yycp-onlinecar-hailing/onlineCarHailing/order/queryTaxiCarStatus/v1") - Observable queryCarStatus(@Body OCHCarStatus sn ); - - - /** - * 更新网约车状态 - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/yycp-onlinecar-hailing/onlineCarHailing/order/updateTaxiCarStatus/v1") - Observable updateCarStatus(@Body OCHCarStatus status ); -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java deleted file mode 100644 index 12450552ac..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ /dev/null @@ -1,511 +0,0 @@ -package com.mogo.och.taxi.ui; - -import android.location.Location; -import android.os.Bundle; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.mogo.cloud.commons.utils.CoordinateUtils; -import com.mogo.eagle.core.data.map.MogoLatLng; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.map.navi.IMogoCarLocationChangedListener2; -import com.mogo.map.overlay.MogoPolylineOptions; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.utils.LocationUtils; -import com.mogo.och.BaseOchFragment; -import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener; -import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback; -import com.mogo.och.taxi.IOperationChangedListener; -import com.mogo.och.taxi.MogoOCHTaxiModel; -import com.mogo.och.taxi.OCHOrderStatus; -import com.mogo.och.taxi.OCHOrderStatusCallback; -import com.mogo.och.taxi.R; -import com.mogo.och.view.SlidePanelView; -import com.mogo.service.adas.IMogoAdasOCHCallback; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.logger.Logger; - -import java.util.ArrayList; -import java.util.List; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 网约车-出租车UI - */ -class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView, - IMogoStatusChangedListener, - IMogoOCHTaxiArriveCallback, - IMogoADASAutoPilotStatusChangedListener, - IOperationChangedListener, - IMogoAdasOCHCallback, - IMogoCarLocationChangedListener2 { - - public static final String TAG = "OCHTaxiFragment"; - - public static OCHTaxiFragment newInstance() { - - Bundle args = new Bundle(); - - OCHTaxiFragment fragment = new OCHTaxiFragment(); - fragment.setArguments( args ); - return fragment; - } - - private TextView mOrderStatus; - private TextView mStartStationName; - private TextView mEndStationName; - private TextView mDistance; - - private MogoPolylineOptions mogoPolylineOptions; - private volatile int saveOrderState = -1; - @Override - public int getStationPanelViewId() { - return R.layout.module_och_taxi_panel; - } - - @Override - public void restartAutopilot() { - // 在自动驾驶中,才会有重新开启自动驾驶的操作 - if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { - Logger.d( TAG, "restartAutopilot" ); - MogoOCHTaxiModel.getInstance().startAutoPilot(); - } - } - - @Override - protected void initViews() { - super.initViews(); - mOrderStatus = findViewById( R.id.module_och_taxi_order_status ); - mStartStationName = findViewById( R.id.module_och_taxi_order_start_station ); - mEndStationName = findViewById( R.id.module_och_taxi_order_end_station ); - mDistance = findViewById( R.id.module_och_taxi_order_distance ); - -// showPanel(); - hidPanel(); - initListeners(); -// updateOrderStatus(); - if ( MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .isVrMode() ) { - vrMode(); - } else { - flatMode(); - } - - tvOperationStatus.setVisibility(View.VISIBLE); - } - - private void initListeners() { - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this ); - OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( this ); - OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( this ); - OCHTaxiUiController.getInstance().setOperationChangeListener(this); - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .registerCarLocationChangedListener( TAG, this ); - } - - @NonNull - @Override - protected OCHTaxiPresenter createPresenter() { - return new OCHTaxiPresenter( this ); - } - - @Override - public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { - if ( isTrue ) { - vrMode(); - } else { - flatMode(); - } - } - - @Override - protected void onChangeOperationStatus() { - super.onChangeOperationStatus(); - MogoOCHTaxiModel.getInstance().changedOperationStatus(); - } - - private void vrMode() { - if ( mRootView != null ) { - mRootView.setVisibility( - View.VISIBLE - ); - } - } - - private void flatMode() { - if ( mRootView != null ) { - mRootView.setVisibility( - View.GONE - ); - } - } - - private boolean isSpeakedEndingNotice = false; - /** - * 初始化订单信息 - */ - private void updateOrderStatus() { - updateOrderBaseStatusInfo(); - if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { - Logger.d( TAG, "已经达到终点" ); - slidePanelView.setVisibility( View.VISIBLE ); - slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_end_station ) ); - mOrderStatus.setText( R.string.module_och_taxi_arrive_at_end_station2 ); - } else if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { - Logger.d( TAG, "已经去往终点" ); - slidePanelView.setVisibility( View.GONE ); - mOrderStatus.setText( R.string.module_och_taxi_on_the_way_2_end_station ); - } else if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) { - Logger.d( TAG, "已经达到起点" ); - mOrderStatus.setText( R.string.module_och_taxi_waiting ); - slidePanelView.setVisibility( View.VISIBLE ); - slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) ); - } else if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { - Logger.d( TAG, "去往上车站点" ); - slidePanelView.setVisibility( View.GONE ); - mOrderStatus.setText( R.string.module_och_taxi_new_order ); - } - } - - public synchronized void SpeakNoticeOnce(){ - if (!isSpeakedEndingNotice){ - isSpeakedEndingNotice = true; - showNotice( getString( R.string.module_och_taxi_order_complete_1) ); - } - } - - /** - * 更新订单基本信息 - */ - private void updateOrderBaseStatusInfo() { - if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { - mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation ); - mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation ); - double distance = MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance; - if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { - distance = 0; - } - if ( distance * 1000 >= 1000 ) { - mDistance.setText( String.format( "%.1f km", distance ) ); - } else { - mDistance.setText( ( ( int ) ( distance * 1000 ) ) + " m" ); - } - - } - } - - @Override - public void onArriveAtStartStation() { - Logger.d( TAG, "通知达到起点" ); - updateOrderStatus(); - } - - @Override - public void onTheWay2StartStation() { - Logger.d( TAG, "去往上车站点" ); - updateOrderStatus(); - } - - @Override - public void onArriveAtEndStation() { - Logger.d( TAG, "通知达到终点" ); - updateOrderStatus(); - MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() { - @Override - public void onSuccess( Object data ) { - Logger.d( TAG, "更新状态成功" ); - onOrderStatusChanged(OCHOrderStatus.ArriveAtEndStation.getCode()); - } - - @Override - public void onFail() { - Logger.d( TAG, "更新状态失败" ); - } - - - @Override - public void onError() { - Logger.d( TAG, "更新状态失败2" ); - } - } ); -// MogoApisHandler.getInstance() -// .getApis() -// .getRegisterCenterApi() -// .unregisterCarLocationChangedListener( TAG, this ); - } - - @Override - public void onTheWay2EndStation() { - Logger.d( TAG, "通知去往终点" ); - updateOrderStatus(); - } - - @Override - public void onUserArriveAtStartStation() { - Logger.d( TAG, "通知乘客已上车" ); - updateOrderStatus(); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this ); - OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null ); - OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( null ); - OCHTaxiUiController.getInstance().setOperationChangeListener(null); - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .unregisterCarLocationChangedListener( TAG, this ); - MogoOCHTaxiModel.getInstance().unregisterCarLocationListener(); - MogoOCHTaxiModel.getInstance().unregisterSocketListener(); - mLocation = null; - } - - @Override - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { - return this::onSlidePanelMoveToEnd; - } - - private void onSlidePanelMoveToEnd() { - // 已到达终点,需要结束订单 - if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { - MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.JourneyCompleted, new OCHOrderStatusCallback() { - @Override - public void onSuccess( Object data ) { - Logger.d( TAG, "更新状态成功" ); - MogoOCHTaxiModel.getInstance().clearCurrentOCHOrder(); - MogoOCHTaxiModel.getInstance().cancelAutopilot(); - OCHTaxiUiController.getInstance().onOrderStatusChanged(0); - } - - @Override - public void onFail() { - Logger.d( TAG, "更新状态失败" ); - } - - @Override - public void onError() { - Logger.d( TAG, "更新状态失败2" ); - } - } ); - return; - // 乘客已确认到达起点,前往下一站并开启自动驾驶 - } else if ( !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { - MogoOCHTaxiModel.getInstance().startAutoPilot(); - } - } - - @Override - public void onAutoPilotStatusChanged( int status, String reason ) { - Logger.d( TAG, "status = %s, reason = %s", status, reason ); - onAutopilotStatusChanged( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ); - if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING && !MogoOCHTaxiModel.getInstance().isArriveAtEndStation()) { - resetOCHTaxiOrderAutopilotStatus(); - } else { - updateOrderStatus(); - } - } - - /** - * 收到自动驾驶通知的成功状态之后,设置本地状态及服务端状态 - */ - private void resetOCHTaxiOrderAutopilotStatus() { - MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true ); - MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() { - @Override - public void onSuccess( Object data ) { - Logger.d( TAG, "更新状态成功" ); - onOrderStatusChanged(OCHOrderStatus.OnTheWayToEndStation.getCode()); - } - - @Override - public void onFail() { - Logger.d( TAG, "更新状态失败" ); - } - - - @Override - public void onError() { - Logger.d( TAG, "更新状态失败2" ); - } - } ); - } - - @Override - public void onCarLocationChanged( MogoLatLng latLng ) { - } - - private Location mLocation; - @Override - public void onCarLocationChanged2( Location location ) { - OCHTaxiUiController.getInstance().runOnUIThread( () -> { - calculateTravelDistance( location ); - } ); - } - - /** - * 根据位置信息计算当前剩余距离 - * - * @param location - */ - private void calculateTravelDistance( Location location ) { - if ( location == null ) { - return; - } -// if ( !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { -// return; -// } -// if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { -// return; -// } - if ( mLocation == null ) { - mLocation = location; - } -// double distance = CoordinateUtils.calculateLineDistance( -// location.getLongitude(), location.getLatitude(), -// mLocation.getLongitude(), mLocation.getLatitude() -// ); -// Logger.e("lianglihui","calculateTravelDistance:"+distance); - - if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() && - MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() && - !MogoOCHTaxiModel.getInstance().isArriveAtEndStation()) { - MogoOCHTaxiModel.getInstance().calculateTravelDistance(location); -// MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance ); - updateOrderBaseStatusInfo(); - } - mLocation = location; - } - - @Override - public void onOperationChanged(boolean launch) { - Logger.e(TAG,"onOperationChanged:"+ launch); - isOperationStatus = launch; - if ( launch ) { - tvOperationStatus.setText( "收车" ); -// showSlidePanle("滑动出发"); -// showPanel(); - } else { -// AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); - tvOperationStatus.setText("出车"); - hideSlidePanel(); -// hidPanel(); - } -// changeLayoutViewStatus(launch); - } - - private void changeLayoutViewStatus(boolean launch) { - getPanelView().setVisibility(launch ? View.VISIBLE : View.INVISIBLE); - } - - @Override - public void onOrderStatusChanged(int status) { - -// int orderState = MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().orderDispatchType; -// if (orderState == status){ -// return; -// } - getActivity().runOnUiThread(() -> { - if (status == OCHOrderStatus.None.getCode() || status == OCHOrderStatus.Cancel.getCode() || status == OCHOrderStatus.JourneyCompleted.getCode() ){ - getPanelView().setVisibility(View.INVISIBLE); - hideSlidePanel(); - changeOperationViewVisible(View.VISIBLE); - isSpeakedEndingNotice = false; - } else { - getPanelView().setVisibility(View.VISIBLE); - changeOperationViewVisible(View.INVISIBLE); - } - - if(status != saveOrderState){ - OCHOrderStatus ochStatus = OCHOrderStatus.valueOf( status ); - switch (ochStatus){ - case OnTheWayToStartStation: - showNotice(getString( R.string.module_och_taxi_new_order)); - break; - case Cancel: - showNotice(getString( R.string.module_och_taxi_order_cancel)); - break; - case ArriveAtStartStation: - showNotice( getString( R.string.module_och_taxi_order_status_ph_text) ); - break; - case OnTheWayToEndStation: -// showNotice("欢迎使用蘑菇智行"); - break; - case ArriveAtEndStation: - showNotice( getString( R.string.module_och_taxi_order_complete_1) ); - break; - case JourneyCompleted: - showNotice( "感谢您使用蘑菇智行,再见~" ); - break; - } - } - saveOrderState = status; - updateOrderStatus(); - }); - } - - - public double calculateTravelDistance(MogoLocation carLocation,List routeList){ - List mPolylinePointList = new ArrayList<>(); - mPolylinePointList.add(new MogoLatLng(carLocation.getLatitude(), carLocation.getLongitude())); - MogoLatLng routeLatLng; - for (int i = 0 ; i< routeList.size() ; i++) { - routeLatLng =routeList.get(i); - //需要剔除已经行驶过的经纬度,这里需要比对推荐路线集合中点是否在当前车w辆行驶方向前面如果不在则抛弃 - if (LocationUtils.isPointOnCarFront(carLocation, routeLatLng)) { - mPolylinePointList.add(routeLatLng); - } - } - MogoLatLng routeLatLng1,routeLatLng2; - double distance = 0; - for (int i = 0; i < mPolylinePointList.size() ; i ++){ - if (i < mPolylinePointList.size() -1 ){ - routeLatLng1 = mPolylinePointList.get(i); - routeLatLng2 = mPolylinePointList.get(i+1); - distance += CoordinateUtils.calculateLineDistance( - routeLatLng1.getLon(), routeLatLng1.getLat(), - routeLatLng2.getLon(), routeLatLng2.getLat() - ); - } - } - return distance; - } - - @Override - public void onArriveAt(AutopilotStationInfo data) { - Logger.d( TAG, "行程结束"); - MogoApisHandler.getInstance().getApis().getAdasControllerApi().cancelAutopilot(); - } - - @Override - public void onStateChanged(int state, String reason) { - Logger.d( TAG, "onStateChange: " + state ); - switch ( state ) { - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE: - hideSlidePanel(); - break; - case IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING: - break; - default: - break; - } - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java deleted file mode 100644 index 477e9df753..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiPresenter.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mogo.och.taxi.ui; - -import androidx.annotation.NonNull; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.commons.mvp.Presenter; -import com.mogo.utils.logger.Logger; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 描述 - */ -class OCHTaxiPresenter extends Presenter< OCHTaxiView > { - - private static final String TAG = "OCHTaxiPresenter"; - - public OCHTaxiPresenter( OCHTaxiView view ) { - super( view ); - } - - @Override - public void onCreate( @NonNull LifecycleOwner owner ) { - super.onCreate( owner ); - Logger.d( TAG, "网约车-出租车拿到订单" ); - } - - @Override - public void onDestroy( @NonNull LifecycleOwner owner ) { - super.onDestroy( owner ); - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java deleted file mode 100644 index a7d025469a..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.mogo.och.taxi.ui; - -import android.os.Looper; -import android.util.Log; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; - -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener; -import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback; -import com.mogo.och.taxi.IOperationChangedListener; -import com.mogo.och.taxi.MogoOCHTaxiModel; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.logger.Logger; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 控制UI显示 - */ -class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback, IMogoADASAutoPilotStatusChangedListener { - - private static final String TAG = "OCHTaxiUiController"; - - private static volatile OCHTaxiUiController sInstance; - private FragmentActivity mActivity; - private int mContainerId; - - private IMogoOCHTaxiArriveCallback mOCHTaxiArriveCallback; - private IMogoADASAutoPilotStatusChangedListener mAutoPilotStatusChangedListener; - private IOperationChangedListener mOperationChangedLisnter; - - private OCHTaxiUiController() { - } - - public static OCHTaxiUiController getInstance() { - if ( sInstance == null ) { - synchronized ( OCHTaxiUiController.class ) { - if ( sInstance == null ) { - sInstance = new OCHTaxiUiController(); - } - } - } - return sInstance; - } - - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return sInstance; - } - - public void init( FragmentActivity activity, int containerId ) { - mActivity = activity; - mContainerId = containerId; - } - - public void addFragment() { - Logger.d( TAG, Log.getStackTraceString( new Throwable() ) ); - runOnUIThread( this::addFragmentImpl ); - } - - private void addFragmentImpl() { - if ( !MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { - return; - } - Fragment fragment = null; - FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); - fragment = fragmentManager.findFragmentByTag( OCHTaxiFragment.TAG ); - if ( fragment == null ) { - fragment = OCHTaxiFragment.newInstance(); - } - mActivity.getSupportFragmentManager() - .beginTransaction() - .replace( mContainerId, fragment, OCHTaxiFragment.TAG ) - .commitNowAllowingStateLoss(); - - Logger.d( TAG, "add fragment" ); - } - - public void removeFragment() { - runOnUIThread( () -> { - Fragment fragment = null; - FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); - fragment = fragmentManager.findFragmentByTag( OCHTaxiFragment.TAG ); - if ( fragment == null ) { - return; - } - fragmentManager.beginTransaction() - .remove( fragment ) - .commitNowAllowingStateLoss(); - } ); - } - - public void setOCHTaxiArriveCallback( IMogoOCHTaxiArriveCallback OCHTaxiArriveCallback ) { - this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback; - } - - public void setAutoPilotStatusChangedListener( IMogoADASAutoPilotStatusChangedListener autoPilotStatusChangedListener ) { - this.mAutoPilotStatusChangedListener = autoPilotStatusChangedListener; - } - - public void setOperationChangeListener(IOperationChangedListener listener){ - this.mOperationChangedLisnter = listener; - } - - @Override - public void onTheWay2StartStation() { - runOnUIThread( () -> { - if ( mOCHTaxiArriveCallback != null ) { - mOCHTaxiArriveCallback.onTheWay2StartStation(); - } - } ); - } - - @Override - public void onArriveAtStartStation() { - runOnUIThread( () -> { - if ( mOCHTaxiArriveCallback != null ) { - mOCHTaxiArriveCallback.onArriveAtStartStation(); - } - } ); - } - - @Override - public void onTheWay2EndStation() { - runOnUIThread( () -> { - if ( mOCHTaxiArriveCallback != null ) { - mOCHTaxiArriveCallback.onTheWay2EndStation(); - } - } ); - } - - @Override - public void onArriveAtEndStation() { - runOnUIThread( () -> { - if ( mOCHTaxiArriveCallback != null ) { - mOCHTaxiArriveCallback.onArriveAtEndStation(); - } - } ); - } - - @Override - public void onUserArriveAtStartStation() { - runOnUIThread( () -> { - if ( mOCHTaxiArriveCallback != null ) { - mOCHTaxiArriveCallback.onUserArriveAtStartStation(); - } - } ); - } - - public void runOnUIThread( Runnable executor ) { - if ( executor == null ) { - return; - } - if ( Looper.myLooper() != Looper.getMainLooper() ) { - UiThreadHandler.post( executor ); - } else { - executor.run(); - } - } - - @Override - public void onAutoPilotStatusChanged( int status, String reason ) { - runOnUIThread( () -> { - if ( mAutoPilotStatusChangedListener != null ) { - mAutoPilotStatusChangedListener.onAutoPilotStatusChanged( status, reason ); - } - } ); - } - - - - - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - public void stepIntoVrMode() { - Logger.d( TAG, "进入vr模式" ); - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() - .openVrMode( false ); - } - - public void onOperationChanged(boolean b) { - runOnUIThread( () -> { - if (mOperationChangedLisnter != null){ - mOperationChangedLisnter.onOperationChanged(b); - } - } ); - } - public void onOrderStatusChanged(int status){ - runOnUIThread( () -> { - if (mOperationChangedLisnter != null){ - mOperationChangedLisnter.onOrderStatusChanged(status); - } - } ); - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java deleted file mode 100644 index ba9377c8fe..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiView.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.taxi.ui; - -import com.mogo.commons.mvp.IView; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 描述 - */ -interface OCHTaxiView extends IView { -} diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml deleted file mode 100644 index 04864e072b..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml deleted file mode 100644 index 50d9558492..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml deleted file mode 100644 index a9ccf96c3e..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order.json b/OCH/mogo-och-taxi/src/main/res/raw/taxi_order.json deleted file mode 100644 index e8d0819d3f..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "drivingRoutes": [ - { - "lat": 40.197234, - "lon": 116.74143, - "siteId": "1.0", - "siteName": "万集东门站" - }, - { - "lat": 40.1953113732, - "lon": 116.729134342, - "siteId": "2.0", - "siteName": "市政府前街18号" - } - ], - "endStation": "市政府前街18号", - "orderDispatchType": 1, - "orderNo": "CZ20210430000005", - "orderType": 9, - "startStation": "万集东门站", - "travelDistance": 0.6 -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_detail.json b/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_detail.json deleted file mode 100644 index 7d62fcacb7..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_detail.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "code": 0, - "msg": "", - "detailMsg": "", - "result": { - "_id": "5352c1d2c9d84ab3ab9ecf1e47e13bdd", - "orderNo": "CZ20210427000016", - "orderType": 9, - "userName": "董QAD", - "userPhone": "15631204018", - "startStationId": 10000, - "startStation": "0409第一站", - "startStationCoordinate": [ - 116.7389159039, - 40.1992312592 - ], - "endStationId": 21, - "endStation": "第二十一站", - "endStationCoordinate": [ - 116.737866, - 40.19646 - ], - "orderDispatchType": 1, - "carNum": "京NB010", - "sn": "F803EB2046PZD00149", - "orderStartTime": "Apr 27, 2021 8:55:44 PM", - "arrivedStartStationTime": "", - "arrivedEndStationTime": "", - "cityCode": "010", - "areaCode": "1001", - "createTime": "Apr 27, 2021 8:55:44 PM", - "updateTime": "Apr 27, 2021 8:55:56 PM", - "personNum": 1, - "travelDistance": 0.3, - "vehicleColour": "黑色", - "lastBrandName": "", - "headImgUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83ep4YkeZqjiazTK87NQtYp6KMYvAdJcxNpxyJ2gibeNNheH1HFaJdX4hB15eIR3zZdGMWNanKzIn460w/132" - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_state_update.json b/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_state_update.json deleted file mode 100644 index 9ee3d17f02..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/raw/taxi_order_state_update.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "endStation": "市政府前街18号", - "endStationId": "2.0", - "orderDispatchType": 7, - "orderNo": "CZ20210430000005", - "orderType": 9, - "startStation": "万集东门站", - "startStationId": "1.0", - "travelDistance": 0.6 -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och-taxi/src/main/res/values-xhdpi-2560x1440/dimens.xml deleted file mode 100644 index 7c13d7dcbd..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 464px - 310px - 15px - 25px - 25px - 32px - 1px - 20px - 20px - 20px - 140px - 20px - 41px - 17px - 41px - 42px - 32px - 32px - 84px - 3px - 20px - 32px - 36px - 17px - 31.5px - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values/colors.xml b/OCH/mogo-och-taxi/src/main/res/values/colors.xml deleted file mode 100644 index 0bc7d761be..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/values/colors.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - #FFFFFF - #707DBE - #8198E8 - #8198E8 - #8198E8 - #FFFFFF - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values/dimens.xml b/OCH/mogo-och-taxi/src/main/res/values/dimens.xml deleted file mode 100644 index ff8e1c5530..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/values/dimens.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 464px - 310px - 5px - 20px - 20px - 20px - 1px - 20px - 20px - 20px - 140px - 20px - 20px - 17px - 20px - 26px - 20px - 20px - 64px - 3px - 20px - 20px - 24px - 17px - 22.5px - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/values/strings.xml b/OCH/mogo-och-taxi/src/main/res/values/strings.xml deleted file mode 100644 index f81168d27d..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/values/strings.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 确认上车,行程开始 - 到达站点,乘客已下车 - 已到达上车站点,等待乘客上车 - 预计里程 - 3.2 km - 请携带好随身物品,注意侧后\n方来车,感谢体验’蘑菇车联‘自\n动驾驶车! - 即将到达目的地,请您携带好随身物品,安全下车。 - 去往下车地点 - 已到达,等待乘客上车 - 收到新订单,前往上车地点 - 已到达下车地点 - 订单已完成 - 订单已取消 - \ No newline at end of file diff --git a/OCH/mogo-och/.gitignore b/OCH/mogo-och/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/OCH/mogo-och/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/OCH/mogo-och/build.gradle b/OCH/mogo-och/build.gradle deleted file mode 100644 index fe6096623e..0000000000 --- a/OCH/mogo-och/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'com.alibaba.arouter' - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - // buildToolsVersion rootProject.ext.android.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles "consumer-rules.pro" - - javaCompileOptions { - annotationProcessorOptions { - arguments = [AROUTER_MODULE_NAME: project.getName()] - } - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.arouter - annotationProcessor rootProject.ext.dependencies.aroutercompiler - - implementation rootProject.ext.dependencies.androidxconstraintlayout - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.mogoutils - implementation rootProject.ext.dependencies.mogocommons - implementation rootProject.ext.dependencies.modulecommon - - implementation rootProject.ext.dependencies.mogo_core_data - } else { - implementation project(":foudations:mogo-utils") - implementation project(":foudations:mogo-commons") - implementation project(":modules:mogo-module-common") - - implementation project(':core:mogo-core-data') - - } -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/OCH/mogo-och/consumer-rules.pro b/OCH/mogo-och/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OCH/mogo-och/gradle.properties b/OCH/mogo-och/gradle.properties deleted file mode 100644 index 48c034660a..0000000000 --- a/OCH/mogo-och/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.och -POM_ARTIFACT_ID=och -VERSION_CODE=1 diff --git a/OCH/mogo-och/proguard-rules.pro b/OCH/mogo-och/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/OCH/mogo-och/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/OCH/mogo-och/src/main/AndroidManifest.xml b/OCH/mogo-och/src/main/AndroidManifest.xml deleted file mode 100644 index e27819d70f..0000000000 --- a/OCH/mogo-och/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - / - \ No newline at end of file diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java deleted file mode 100644 index c5952774c7..0000000000 --- a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.mogo.och; - -import android.view.LayoutInflater; -import android.view.View; -import android.widget.CheckedTextView; -import android.widget.FrameLayout; -import android.widget.TextView; - -import androidx.constraintlayout.widget.Group; - -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.mvp.IView; -import com.mogo.commons.mvp.MvpFragment; -import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.view.OnPreventFastClickListener; -import com.mogo.och.view.SlidePanelView; -import com.mogo.service.adas.IMogoAdasOCHCallback; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.utils.logger.Logger; - -/** - * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 - *

- * 部分业务放在了此处处理 - * - * @author tongchenfei - */ -public abstract class BaseOchFragment> extends MvpFragment { - - private static final String TAG = "BaseOchFragment"; - - protected SlidePanelView slidePanelView; - private CheckedTextView ctvAutopilotStatus; - protected TextView tvOperationStatus; - public boolean isOperationStatus;//false-收车,true-出车 - private FrameLayout flStationPanelContainer; - private Group groupTestPanel; - - - /** - * 滑动按钮触发的事件 - */ - private final SlidePanelView.OnSlidePanelMoveToEndListener onSlideToEndListener = () -> { - // 此处做一个代理,处理一下共有情况 - if (getSlidePanelOnEndListener() != null) { - getSlidePanelOnEndListener().moveToEnd(); - } - }; - - @Override - protected int getLayoutId() { - return R.layout.module_mogo_och_base_fragment; - } - - @Override - public String getTagName() { - return TAG; - } - - private View panelView; - - @Override - protected void initViews() { - groupTestPanel = findViewById(R.id.groupTestPanel); - slidePanelView = findViewById(R.id.module_mogo_och_slide_panel); - ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status); - flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container); - - tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); - - panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); - slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); - - ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener() { - @Override - public void onClickImpl(View v) { - // 如果能自动驾驶,就自动驾驶,不能就提示 - restartAutopilot(); - } - }); - - // debug下调用测试面板 - if (DebugConfig.isDebug()) { - ctvAutopilotStatus.setOnLongClickListener(v -> { - if (groupTestPanel.getVisibility() == View.VISIBLE) { - groupTestPanel.setVisibility(View.GONE); - } else { - groupTestPanel.setVisibility(View.VISIBLE); - } - return false; - }); - } - - onAutopilotStatusChanged(MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING); - - // 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接 - findViewById(R.id.btnAutopilotDisable).setOnClickListener(view -> - { - MogoApisHandler.getInstance().getApis() - .getAdasControllerApi() - .mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE, "不能使用"); -// Logger.d("lianglihui","模拟 不可自动驾驶"); - } - ); - - // 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态 - findViewById(R.id.btnAutopilotEnable).setOnClickListener(view -> - { - MogoApisHandler.getInstance().getApis() - .getAdasControllerApi() - .mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE, "能使用"); - -// Logger.d("lianglihui","模拟 可自动驾驶"); - } - ); - - // 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 - findViewById(R.id.btnAutopilotRunning).setOnClickListener(view -> - { - MogoApisHandler.getInstance().getApis() - .getAdasControllerApi() - .mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING, "Running"); -// Logger.d("lianglihui","模拟 自动驾驶能力"); - } - ); - - // 模拟 自动驾驶站 - findViewById(R.id.btnAutopilotArrive).setOnClickListener(view -> - { - MogoApisHandler.getInstance().getApis() - .getAdasControllerApi().mockOchStatus(-1, "Arrived"); - -// Logger.d("lianglihui","模拟 自动驾驶站"); - } - ); - - // 模拟 站点下发工控 - findViewById(R.id.btnAutopilotControl).setOnClickListener(view -> - { -// Logger.d("lianglihui","模拟 站点下发工控"); - AutopilotControlParameters currentAutopilot = new AutopilotControlParameters(); - currentAutopilot.isSpeakVoice = true; - // 万集东门站 - currentAutopilot.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.194795425,116.724476409); - // 市政府前街18号 - currentAutopilot.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.1939540844,116.720067); - // 订单运营类型 (9出租车,10小巴) - currentAutopilot.vehicleType = 10; - Logger.d(TAG, "模拟 订单站点下发:" + currentAutopilot); - MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(currentAutopilot); - } - ); - - tvOperationStatus.setOnClickListener(view -> { - onChangeOperationStatus(); - }); - } - - protected void onChangeOperationStatus() { - - } - - - /** - * 展示滑动按钮 - * - * @param text 指定的文字 - */ - public void showSlidePanle(String text) { - if (isOperationStatus) { - getActivity().runOnUiThread(() -> { - slidePanelView.setText(text); - slidePanelView.setVisibility(View.VISIBLE); - }); - } - } - - /** - * 隐藏滑动按钮 - */ - public void hideSlidePanel() { - getActivity().runOnUiThread(() -> { - slidePanelView.setVisibility(View.GONE); - }); - } - - public void showNotice(String notice) { - getActivity().runOnUiThread(() -> { - AIAssist.getInstance(getContext()).speakTTSVoice(notice); - }); - } - - /** - * 改变自动驾驶状态 - * - * @param isInAutopilot true - 在自动驾驶中 false - 不在自动驾驶中 - */ - public void onAutopilotStatusChanged(boolean isInAutopilot) { - getActivity().runOnUiThread(() -> { - ctvAutopilotStatus.setChecked(isInAutopilot); - }); - } - - /** - * 隐藏【自动驾驶】按钮 - */ - public void hideAutopilotBiz() { - getActivity().runOnUiThread(() -> { -// ctvAutopilotStatus.setVisibility(View.GONE); -// slidePanelView.setVisibility(View.GONE); - }); - } - - /** - * 展示【自动驾驶】按钮 - */ - public void showAutopilotBiz() { - getActivity().runOnUiThread(() -> { - ctvAutopilotStatus.setVisibility(View.VISIBLE); - if (isOperationStatus) { - slidePanelView.setVisibility(View.VISIBLE); - } else { - slidePanelView.setVisibility(View.GONE); - } - }); - } - - public void hidPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.GONE); - }); - } - - public void showPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.VISIBLE); - }); - } - - public View getPanelView() { - return panelView; - } - - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { - return null; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - } - - /** - * 获取站点面板view,在{@link #initViews()}时候添加到container中 - * - * @return 站点面板view - */ - public abstract int getStationPanelViewId(); - - /** - * 重新开启自动驾驶 - */ - public abstract void restartAutopilot(); - - - public void changeOperationViewVisible(int visible){ - getActivity().runOnUiThread(() -> { - tvOperationStatus.setVisibility(visible); - }); - } -} diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/OCHConstants.java b/OCH/mogo-och/src/main/java/com/mogo/och/OCHConstants.java deleted file mode 100644 index 09ab4955e0..0000000000 --- a/OCH/mogo-och/src/main/java/com/mogo/och/OCHConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och; - -public -/** - * @author congtaowang - * @since 2021/1/15 - * - * 网约车部分常量字段 - */ -class OCHConstants { - - /** - * arouter 路由地址 - */ - public static final String PATH = "/och/api"; -} diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/view/FrameAnimImageView.java b/OCH/mogo-och/src/main/java/com/mogo/och/view/FrameAnimImageView.java deleted file mode 100644 index c2776c48b9..0000000000 --- a/OCH/mogo-och/src/main/java/com/mogo/och/view/FrameAnimImageView.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.mogo.och.view; - -import android.content.Context; -import android.os.Handler; -import android.os.Message; -import android.util.AttributeSet; - -/** - * 帧动画ImageView封装 - * - * @author tongchenfei - */ -public class FrameAnimImageView extends androidx.appcompat.widget.AppCompatImageView implements Handler.Callback { - public static final long FRAME_INTERVAL = 50L; - private final static int MSG_LOOP = 3003; - - public FrameAnimImageView(Context context) { - super(context); - } - - public FrameAnimImageView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FrameAnimImageView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - private int[] animRes; - private int animPos; - private boolean isInAnim = false; - - private final Handler animHandler = new Handler(this); - - public void setAnimRes(int[] animRes) { - this.animRes = animRes; - } - - public void startAnim() { - isInAnim = true; - animHandler.sendEmptyMessage(MSG_LOOP); - } - - public void stopAnim() { - isInAnim = false; - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - stopAnim(); - } - - @Override - public boolean handleMessage(Message msg) { - if (isInAnim && animRes != null) { - if (animPos >= animRes.length) { - animPos = 0; - } - setImageResource(animRes[animPos++]); - animHandler.sendEmptyMessageDelayed(MSG_LOOP, FRAME_INTERVAL); - } - return true; - } -} diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java b/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java deleted file mode 100644 index 8f2e12b9a6..0000000000 --- a/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.mogo.och.view; - -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.LinearGradient; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Shader; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.view.animation.DecelerateInterpolator; - -import androidx.annotation.Nullable; - -import com.mogo.och.R; - - -/** - * 滑块滑动面板 - * - * @author tongchenfei - */ -public class SlidePanelView extends View { - private static final String TAG = "SlidePanelView"; - - public SlidePanelView(Context context) { - this(context, null); - } - - public SlidePanelView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public SlidePanelView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.SlidePanelView); - textSize = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_textSize, textSize); - BLOCK_START_X = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_BLOCK_START_X, BLOCK_START_X); - BLOCK_START_Y = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_BLOCK_START_Y, BLOCK_START_Y); - NORMAL_TEXT_MARGIN_LEFT = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_NORMAL_TEXT_MARGIN_LEFT, NORMAL_TEXT_MARGIN_LEFT); - NORMAL_TEXT_MARGIN_RIGHT = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_NORMAL_TEXT_MARGIN_RIGHT, NORMAL_TEXT_MARGIN_RIGHT); - SHORT_TEXT_MARGIN_LEFT = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_SHORT_TEXT_MARGIN_LEFT, SHORT_TEXT_MARGIN_LEFT); - SHORT_TEXT_MARGIN_RIGHT = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_SHORT_TEXT_MARGIN_RIGHT, SHORT_TEXT_MARGIN_RIGHT); - SLIDEPANELVIEW_VIEW_HIGH = (int) mTypedArray.getDimension(R.styleable.SlidePanelView_SLIDEPANELVIEW_VIEW_HIGH, SLIDEPANELVIEW_VIEW_HIGH); - init(); - } - - private final Paint bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private final Paint blockPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - - private static int textSize = 67; - private static int BLOCK_START_X = 15; - private static int BLOCK_START_Y = 15; - private static int NORMAL_TEXT_MARGIN_LEFT = 40; - private static int NORMAL_TEXT_MARGIN_RIGHT = 60; - private static int SHORT_TEXT_MARGIN_LEFT = 60; - private static int SHORT_TEXT_MARGIN_RIGHT = 70; - private static int SLIDEPANELVIEW_VIEW_HIGH = 160; - - private int textMarginLeft = NORMAL_TEXT_MARGIN_LEFT; - private int textMarginRight = NORMAL_TEXT_MARGIN_RIGHT; - - private OnSlidePanelMoveToEndListener moveToEndListener; - - private int blockWidth = 0; - private int blockOffset = 0; - - private float lastX; - private boolean isToEnd = false; - - private static final String STRING_SLIDE_TO_RIGHT = "向右滑动"; - private RectF bgRectF; - private Bitmap bmBlock; - - private final Matrix gradientMatrix = new Matrix(); - private float matrixTranslate; - private final Rect textRect = new Rect(); - private LinearGradient textGradient; - - private ObjectAnimator matrixAnim; - - private String blockText = STRING_SLIDE_TO_RIGHT; - private Paint.FontMetrics blockTextMetrics = new Paint.FontMetrics(); - - private static final int GRADIENT_OFFSET = 200; - - public void setOnSlidePanelMoveToEndListener(OnSlidePanelMoveToEndListener moveToEndListener) { - this.moveToEndListener = moveToEndListener; - } - - private void setBlockOffset(int blockOffset) { - this.blockOffset = blockOffset; - invalidate(); - } - - private void setMatrixTranslate(float matrixTranslate) { - this.matrixTranslate = matrixTranslate; - invalidate(); - } - - public void setText(String text) { - this.blockText = text; - requestLayout(); - invalidate(); - } - - private void init() { - bgPaint.setColor(Color.parseColor("#CC0F1325")); - bgPaint.setStyle(Paint.Style.FILL); - - textPaint.setStyle(Paint.Style.FILL); - textPaint.setTextSize(textSize); - textPaint.setTextAlign(Paint.Align.LEFT); - textGradient = new LinearGradient(-GRADIENT_OFFSET, 0, 0, 0, new int[]{0x33ffffff, 0xffffffff, 0x33ffffff}, null, Shader.TileMode.CLAMP); - textGradient.setLocalMatrix(gradientMatrix); - textPaint.setShader(textGradient); - textPaint.getFontMetrics(blockTextMetrics); - - bmBlock = BitmapFactory.decodeResource(getResources(), R.drawable.module_och_base_slide_block); - blockWidth = bmBlock.getWidth(); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - int widthSize; - int heightSize; - - if (blockText.length() < 5) { - textMarginLeft = SHORT_TEXT_MARGIN_LEFT; - textMarginRight = SHORT_TEXT_MARGIN_RIGHT; - } else { - textMarginLeft = NORMAL_TEXT_MARGIN_LEFT; - textMarginRight = NORMAL_TEXT_MARGIN_RIGHT; - } - - if (widthMode == MeasureSpec.AT_MOST) { - // 宽度根据图片大小,字符串长度,各种间隔确定 - // 高度根据图片大小和上下间隔确定 - textPaint.getTextBounds(blockText, 0, blockText.length(), textRect); - widthSize = BLOCK_START_X * 2 + bmBlock.getWidth() + textMarginLeft + textMarginRight + textRect.width(); -// heightSize = BLOCK_START_Y * 2 + bmBlock.getHeight(); - heightSize = SLIDEPANELVIEW_VIEW_HIGH; - widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, widthMode); - heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, heightMode); - } - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - private float textOffset = 0; - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - bgRectF = new RectF(0, 0, w, h); - - if (matrixAnim != null) { - matrixAnim.cancel(); - } - textOffset = (getHeight() - blockTextMetrics.ascent - blockTextMetrics.descent) / 2; - matrixAnim = ObjectAnimator.ofFloat(this, "matrixTranslate", 0, w + GRADIENT_OFFSET).setDuration(2000); - matrixAnim.setRepeatCount(ValueAnimator.INFINITE); - matrixAnim.start(); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - if (matrixAnim != null) { - matrixAnim.start(); - } - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (matrixAnim != null) { - matrixAnim.cancel(); - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - float x = event.getX(); - float y = event.getY(); - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - if (x > BLOCK_START_X + blockOffset && x < blockWidth + BLOCK_START_X + blockOffset && y > BLOCK_START_Y && y < getHeight() - BLOCK_START_Y) { - isToEnd = false; - lastX = x; - } - break; - case MotionEvent.ACTION_MOVE: - if (lastX != 0) { - blockOffset = (int) (x - lastX); - if (blockOffset < 0) { - blockOffset = 0; - } - if (blockOffset + BLOCK_START_X + blockWidth > getWidth()) { - // 超出右边界 - blockOffset = getWidth() - BLOCK_START_X - blockWidth; - if (!isToEnd) { - isToEnd = true; - if (moveToEndListener != null) { - moveToEndListener.moveToEnd(); - } - startBlockBackAnim(); - } - } - invalidate(); - } - break; - case MotionEvent.ACTION_UP: - // 执行滑块回归动画 - if (!isToEnd) { - startBlockBackAnim(); - } - break; - default: - break; - } - - return true; - } - - private void startBlockBackAnim() { - ObjectAnimator animator = ObjectAnimator.ofInt(this, "blockOffset", blockOffset, 0); - animator.setInterpolator(new DecelerateInterpolator()); - animator.setDuration(1000 * blockOffset / getWidth()); - animator.start(); - lastX = 0; - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - // 画背景 - canvas.drawRoundRect(bgRectF, (float) getHeight() / 2, SLIDEPANELVIEW_VIEW_HIGH / 2, bgPaint); - // 画文字 - gradientMatrix.setTranslate(matrixTranslate, 0); - textGradient.setLocalMatrix(gradientMatrix); - canvas.save(); - canvas.drawText(blockText, blockWidth + BLOCK_START_X + textMarginLeft, textOffset, textPaint); - canvas.restore(); - // 画滑块 - canvas.drawBitmap(bmBlock, BLOCK_START_X + blockOffset, BLOCK_START_Y, blockPaint); - } - - public interface OnSlidePanelMoveToEndListener { - /** - * 滑块滑到了末尾 - */ - void moveToEnd(); - } -} diff --git a/OCH/mogo-och/src/main/res/color/module_mogo_och_autopilot_text_color_selector.xml b/OCH/mogo-och/src/main/res/color/module_mogo_och_autopilot_text_color_selector.xml deleted file mode 100644 index 19f43e5bfd..0000000000 --- a/OCH/mogo-och/src/main/res/color/module_mogo_och_autopilot_text_color_selector.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_autopilot_status_bg.xml b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_autopilot_status_bg.xml deleted file mode 100644 index 97ac9039cc..0000000000 --- a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_autopilot_status_bg.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_base_icon_not_in_autopilot.png b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_base_icon_not_in_autopilot.png deleted file mode 100644 index 927296d6900963a898b84f78d1f7699c9d5cec12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2342 zcmV+>3EB3EP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NuUD&1ONa40RR91NdN!<04n#S8~^|akV!;ARCodHn`?*_Wf;djrj}Zf znYvqnXrg&1mC6uNQ%fNc@@qlg3=Uq_s!5^Jktj+JVmt-rfazcq$SNmruovtGUr@B0 zSsiwYJ;j*>HiL_xk|O_#GqF<=O%oKdGr`xOGemJ`rr})`8^}EY4tGXnVq%Jio_n<+ zkQo5Bfm@)KM0~_cFNMw%2+Rk~pqAxN$j#4ErBrV>g5FNh4dA5=!S$Ly0)7VIQ#ia03BU*K2%eMJ0+I)w07!SPsd-h<6)be8~)q$?)!AH-2S zSNQ|QvAL4M;Sg}vk%4Z5wZQ9k%1T)Ag1D}?q4F7$HEz)!M-AX4aFG)zJ(f%0lui^M zh=+?PuZEPN+RSj!6C84hhR!?Sj!Xe_G8T`34+pC#zn-Z>W4y^4qHPelBz2Gq8p2)A zM3+JCrc^X=zQCbCy8mBD6`)E+;s;!wQ_p%)!fAhCo4x;wj-O*M7WpZQClFtgDBu3h zQBmG%@)qt{=Qa6 zHK-uo;J78f{YL5-&#*XXp?`$YNsV{H|6!m!Ofn-e4XnN~S<<&Q(YOnBC=W}X`(o3< zXq?4R>qc6_=<=dGfNdRYT$pJ0@Pwmnyt9V27_Iemc?t4ZV@afaJ*cXtAEt59Z}iv1 zl*5vkbGPyV$}34O&{3SOXirR{9ftdgXYv1Rqx%2EcloyxT&s@vf;)khQgjT@OE)L~ zru_=gQD}yTRxvY+@`1;89IZ@nro}ncWp`Ml*$Ika^GD%{>k$G;*XV`AFdHQ__IsF&hMY=`$#X)7=mcg8Ot8TX&W}Uk4y`dtt)O{Ju1!z%`n$0?O z-`lJa_c<^$p%nV`cLg{Av}B=4?ENLs80%?J%fpCE@cSH`1ZPX2$*-1av^(-9P%Yx* zoaSyjK$0Advnp-Fum{ivg0{p>i&%75O~gZd#49QJC=GOuf+X3YA}vqqrTr@C6?wCq zpsN+m#Xzfiogs>=_|6|dpxX;5&m>u{B549^lBt&3bm+#JKCD^|Y+E;`xITSKQt`Y$ z7{g|&CD2?I$+n)fszVhV8}L0IoVJk2+AaU%9VvBC!*-R0Kx5GeCDTVwdT6H>d=CT% zEJV_F%dghUQ;UV$iO4aE`o9@TqR&7vygG#Run(bqRJNO^(}-FjJ{QL@i; zi;2GS0m>^$PSH`E(`v-sja>yza^KT=f@pjD`Gh{_X5whiY##94`Uzub3Nol^u9qE)m2&}8fbVaKU4YBU&_ym|_ zW2~WPBLOsy@*QwW-+LSsM-4w4fk{4&vn#e?HOpj4pWXx$5*>JS;7224A6e|-K2eo` z6M*TBCQjNJN){CMNXsDFzp~DUk|VVB;6qaw&9PiWdd^dgq}cfA0c`t)dy?#DON<^{t2PYnB*URv~nY*{&dk zf6Ko*fd$5zu6!yl4x)#m_icgALW}Q(z6pp2usx*1u*$DE{qT(w>EoaeFfDI}!F1H? z)oUDuzU{X5x(yUR;K9Kv$}69ZSsXQjGuDu83L2=r4Vx+QIt>Hf?Aoc)IV`J8n_lpEHpQI5g3a_{}^Brcnv0eDS01BN7sF(T zV_i|YM14fd5$i$h!X53CEzTy#agskEzoz95x;u#Y=X(W}6C{A1QLYd3Qii$>v{<$Z zOa;Y7GmcAvNtTKO3R<+2o$Teu^|nGa67kOG8B|`F^4|pN4qS!@5xbZZ?QrO?YFeI= znfj$?+V+v2O~g0bTdcegF24z?H(^b M07*qoM6N<$f)F%O!~g&Q diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_icon_arrived_station.png b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_mogo_och_icon_arrived_station.png deleted file mode 100644 index 8a065b66dd39352486755c293369d25987521e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 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 Hu0mjf@OOIK diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_base_slide_block.png b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_base_slide_block.png deleted file mode 100644 index c7655b477cf85aea6987d62af30d9353e20d4c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15058 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 diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_bus_ic_autopilot.png b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_bus_ic_autopilot.png deleted file mode 100644 index 927296d6900963a898b84f78d1f7699c9d5cec12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2342 zcmV+>3EB3EP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NuUD&1ONa40RR91NdN!<04n#S8~^|akV!;ARCodHn`?*_Wf;djrj}Zf znYvqnXrg&1mC6uNQ%fNc@@qlg3=Uq_s!5^Jktj+JVmt-rfazcq$SNmruovtGUr@B0 zSsiwYJ;j*>HiL_xk|O_#GqF<=O%oKdGr`xOGemJ`rr})`8^}EY4tGXnVq%Jio_n<+ zkQo5Bfm@)KM0~_cFNMw%2+Rk~pqAxN$j#4ErBrV>g5FNh4dA5=!S$Ly0)7VIQ#ia03BU*K2%eMJ0+I)w07!SPsd-h<6)be8~)q$?)!AH-2S zSNQ|QvAL4M;Sg}vk%4Z5wZQ9k%1T)Ag1D}?q4F7$HEz)!M-AX4aFG)zJ(f%0lui^M zh=+?PuZEPN+RSj!6C84hhR!?Sj!Xe_G8T`34+pC#zn-Z>W4y^4qHPelBz2Gq8p2)A zM3+JCrc^X=zQCbCy8mBD6`)E+;s;!wQ_p%)!fAhCo4x;wj-O*M7WpZQClFtgDBu3h zQBmG%@)qt{=Qa6 zHK-uo;J78f{YL5-&#*XXp?`$YNsV{H|6!m!Ofn-e4XnN~S<<&Q(YOnBC=W}X`(o3< zXq?4R>qc6_=<=dGfNdRYT$pJ0@Pwmnyt9V27_Iemc?t4ZV@afaJ*cXtAEt59Z}iv1 zl*5vkbGPyV$}34O&{3SOXirR{9ftdgXYv1Rqx%2EcloyxT&s@vf;)khQgjT@OE)L~ zru_=gQD}yTRxvY+@`1;89IZ@nro}ncWp`Ml*$Ika^GD%{>k$G;*XV`AFdHQ__IsF&hMY=`$#X)7=mcg8Ot8TX&W}Uk4y`dtt)O{Ju1!z%`n$0?O z-`lJa_c<^$p%nV`cLg{Av}B=4?ENLs80%?J%fpCE@cSH`1ZPX2$*-1av^(-9P%Yx* zoaSyjK$0Advnp-Fum{ivg0{p>i&%75O~gZd#49QJC=GOuf+X3YA}vqqrTr@C6?wCq zpsN+m#Xzfiogs>=_|6|dpxX;5&m>u{B549^lBt&3bm+#JKCD^|Y+E;`xITSKQt`Y$ z7{g|&CD2?I$+n)fszVhV8}L0IoVJk2+AaU%9VvBC!*-R0Kx5GeCDTVwdT6H>d=CT% zEJV_F%dghUQ;UV$iO4aE`o9@TqR&7vygG#Run(bqRJNO^(}-FjJ{QL@i; zi;2GS0m>^$PSH`E(`v-sja>yza^KT=f@pjD`Gh{_X5whiY##94`Uzub3Nol^u9qE)m2&}8fbVaKU4YBU&_ym|_ zW2~WPBLOsy@*QwW-+LSsM-4w4fk{4&vn#e?HOpj4pWXx$5*>JS;7224A6e|-K2eo` z6M*TBCQjNJN){CMNXsDFzp~DUk|VVB;6qaw&9PiWdd^dgq}cfA0c`t)dy?#DON<^{t2PYnB*URv~nY*{&dk zf6Ko*fd$5zu6!yl4x)#m_icgALW}Q(z6pp2usx*1u*$DE{qT(w>EoaeFfDI}!F1H? z)oUDuzU{X5x(yUR;K9Kv$}69ZSsXQjGuDu83L2=r4Vx+QIt>Hf?Aoc)IV`J8n_lpEHpQI5g3a_{}^Brcnv0eDS01BN7sF(T zV_i|YM14fd5$i$h!X53CEzTy#agskEzoz95x;u#Y=X(W}6C{A1QLYd3Qii$>v{<$Z zOa;Y7GmcAvNtTKO3R<+2o$Teu^|nGa67kOG8B|`F^4|pN4qS!@5xbZZ?QrO?YFeI= znfj$?+V+v2O~g0bTdcegF24z?H(^b M07*qoM6N<$f)F%O!~g&Q diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_dot_line.png b/OCH/mogo-och/src/main/res/drawable-xhdpi-2560x1440/module_och_dot_line.png deleted file mode 100644 index a720a532eafc22cd6f4393f745e5f4b91c336aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR911fT-|1ONa40RR91h5!Hn01iqW@BjbN!306SHf(|+Z1t8&w$Y+T_ zh|kB}y|=r=?Cdkx2)cuj?!CR)dAr{?-|Q@c*sr%cGoxBFch-+=bo6Ux9(cGXE6v~P zFo6&-P64QcQA|8&45tX02?4-452SHGNHUTKtHUHOWG19f+BmiR-eT5wTvl`AeJS8m zcdza*gKK7`{ZEm4#$N>YY?=9I71FeAF*KB*TQCrSg>ID(2?zwn zW5#~GB)+y7}mlLJZ? zVP$=B>KZbBEn06fVee~j#_LydXBKaq@$7SJXeHqQ(=v!P0;=y2%5zA{ZAYOIqGVDo z*eb%rd>9~G6)uJF6oHKm@bC7|$2QjeJ4;JRj^*W`gO#FxE^a~d^AFUaaHAs=F3ci< zDwj^p)}(@>kg>fi)mT+$a_X~sxFBmRh=3X55;=D-Z@0VK1I9MS4l})2ygz4aUdjdD z**AZ_$O7`|Vkn?9xBp$C8+M*N$ye9>At(xHHhVAa+S;JO4v$H1gU!wM+a0>tnm{kC z5$LJLV4yU2$=MQY@{19+(eL3X$qI#Uq%((P90$M{F?JqbTo5n(@qBs!#Ssc}5+-II zQfaUbfeuJxJBYrhksAulic9W9XqbpgCFM5aC?6qKT;=aZ>XtDkTJ9#XlR{tP)dR83X6`#)BWnnaBrq=p?wB$>`g@t$- zd;`Nvi#(BU!gN{h^OfHw*C{Vy-zW>GL#Y2AH&kHKufecU4CFC&2hlJ&ws85+uin%~ a0X_f)vOJfIzrLXI1d8OW)vZTf)S@B2}X?v7fOK~b+;huy!&f5aP(C&eBr7BzP{x^6cHe9Xt9 zz1t_emmhrizkS9e2*da5ZfQBYYH7Q7(aaI`ZDQsinJ>RsCh2+TST%8IK=KyssAs03 z@jV{h-QD$h6ZV6CVp2NwGxM!PgkcaqIRweySkqZ-w~PJ6r>jiekX_3XasOa8`uGO( zBx7ZHAcci{PuNjd=i~CAl(8~A5+pAZEeE^^0O9^}wFd-u5pfmJ7trcS zLKGz-MJ+d-(IKiDgN;J^nG3*H{)wc4cS0ZLtGM~ORh>0l<<1k!vya-2(Hl-tqm8uZ z4H)qA!YZH?u-O5t$w%QBmGs@fmGPO()9%=8FQQiQr~M_Oo#}k>FTH?enWbP$*Kf_x zA}fBfskC~sugKw~FA7dJ~KY@jI|i-(`@*rmu8ZNQ*d zm8U`kIIP`!%Za^MwgifOS2w^)VP0lMv7XAeIUrLQ2|a@6#cb?O&=2<(1`?5CB)q#@ zGBk=wFE1B4+1LORh2>$R*LASvxuA5H-N0TWak;2zn;RHp>Ziquiq~;d4%U2SwQgeE zXc3~wD9aq^8|in=(i32`+ax?Ru*@IG1)EV?PT;gy5fygD;67--K1|jY5%&x5e;)nL zItpUW2)?F8g26~@X+Ca5Rc0Dmu*WE-FhH{k5|#`m(^;j=_7@D_@HLK2JGdWPgiK6w zWGcn+jx1kl{*-*h=Ns(`kWC@urcX)vtxJ&K@x?aQ+R=cRziKe;HB()l{0gAf^?Mt? zW3m>0;9#)I=7;41%=G-^y2iivo+WwihLc-Xr@MS*kAGiP{_G?mnu9`4Au1vRbL9Od zBV}CtZVg>Oiy4WmH;ZD3)EA|3#j7QO>CbJ_ijFaUb(o?5}1R~MZhrg>cZ4SveSxU@I!}84~nYH)lIztVQiyn z=|Fbr)PPP~5^edDgK5U9HVSFT-LKQ^)@Cq#{u^BKY+NB zgn)8w$a6n={>vv{TX`Z);{K^v7&M?TnCBL>5gmv?Z=_wxo>gB2;iN-dEoXUOD}9_! zC!dg4R<717^TSd&RV$yFC2&#bUG#xr*YIK776Z0t2GzHMG3A7ou~0W|wgkHJ1ov!f zvf&19ODjbln{fY~uN)f(5%%HZoNacp$n(5R#B!9RxnL!QW|HG|Gk1Scx&{nlTZaRE zr;39m0F(DkF55w>>w%JPRkPy~`jaZvQerWdD#Z#Rr6!)*S9t|Iqnhe99MLul#P&U8 zAr<1wGdkNDy3(~_8yyR211N)S5}va_SH*zzPnFl3A*a zA2rpQ91b+Gp+C$lk9r)R4kzxrU$MDKmUIFyx%=qVB?XGd@KLS?0PVV%k53dPH!SY_ z29u+EdBIskfIp0un>P+@vEKK20gE?0tk+0iKCp%qcSd8V$l+%$m`;u$66oTI^DSQZ zQ@Gl;i}&6hFScm9G`tX1t5lA(C|wDy&?`ZJb~u)BOLJ>&AY4fy{?!a`)l8jj$P5LY z%eG=ezKb}9~+2X1d|L^K%RHcrdgflZ$Du2N|%_UD}& z+(MIu0QrME2jzC@j_P%K&^RcMax+kZzOw4JNJ7Ra@T-EeP2tyJs$P8j4?E1xO4$&5 z_B^=^z>kiK1a3-pg*2)LuSO1eAB}|%vS&gTTG^s^!pS@oLx@t`F4^-GmYV=DA3qd_ zX{E$I%tP9$f}7a{a;Pg{0}pfOwkite4vLeEDnttpqgpSeh{Awvg(z7l>x2U-M?p0mmu|PflnyJmizOfWKltB2$}2< zB6+$y&L{(~m6G;Hq#>fzV@zaS8D1|)U*{{NTRjFxVNuGMfn9lF!N^S)c>lQ|-L3Mr zqn5s#UD$O>gQExfgqr9q%-I}mkG-RQu8!#YtC>Pz%MmJxZ z=TbRBPR*c&OwkfsiYgr4&a{GjEWt*MLS}PRH2s%IRZoq_X@&D+b!)(4;oRlIO&}U&z22g*QS(v&-zLR3cb`belr>z5_pFL*N6i~^l(P7 zcSo|b?_fzzQ(UfEbqSBuxZgQ|ge z$otjjwdtJPcSUi5vF#uOm+>wb<7a4&jY4zW)A*P)|KPg*&mAg5<39-NJ z)3>*uEROZSb_pBrF>9glk3w<=hPu<+n}{OMa|}1T_2r+k#eE++hIr3?(rJAl_^3_} zXcLsM-plCw5gXFb`du|N1jQ(PE*61q5m*ri)?>U%>%Nr7s0cLrl-f>PeMyS;axGE0 zirfQ)Q6w1JR`>A}>bT#ee`Mnis<^jK3?)K@{I{t){R7vlvb#BtvkqPtIr>f|wYlF2 zWp3@}C6);%XuaKr0YkDdw#rAK;;=?tQWQOm!`WgozL;ttFoGYQ(zIYAkdw%*_q~p% z(tb3SxhdP&@)x_mzor0&$F*a(b=wG$$>VVMbnD<(9~QyH+8;kj|3yt&gIDf2Xedww zVHGXz{muGv^XxAtJW-m=&b9RJuv_G?>F+&2q1^&Mj21DdE+&C>dh^ziChPfXcQRY_ z?`~bHxK+w?nJG?S-rsefvmtIAIrLsGY9$ISUF$?rBFV>Ni5VWmR?9EfAjaM$n%x>UqK-a2Jd^z zW)!z!2K++rHK6&h9`}6UqFK!)@;m;Iv1+N9A~f4*il)qV!RO@-LkfW|jiH`woRL0< zuG}<)MI{O{<}AORX#qUFQSvNbr2+DgPv4284)^5JH!n}B|584*UXM1&s6_k@4f^TmGG%>L3W=xzZJqFv zlFEwlL~rtY#pB`z^_eNyr5=4bf;v5~NuazpO>>+>{A zU&Ged7)AfZw5L%N^bx0wK9Unws~FO&mWrisT2UcxiGcM`$Wd1oL!&lN5)=M(P+omz zV;$8P7vu1{5ZhB0Sb}44OlDVa-tnfxY=bhDSajcfgHnOZ`puiHUw60NR(-?O%PgY} z6)dYK%l10$&Cl(zC~hP0tSI;I!*b@Nk&pM{ElwhmRPhD{#7L5r7K@CNs?-qM)G?UXQ@l~Jj2u|^MH1~{&QE6Ky>N-AVN zVEQ<|^&;2|G>LF-fa3bdHm{3N{&@G5qr2(FJ{pobYu=lvEnvJg-9}gZhF2X_iV{CL zOVHG-ql4{i%7ItH>`%nPpjn1G_(KJHrcOAN*~m`&5RXEmI2nfRO!UbNAP=(=mCwti zE6@nSMt5>)9IOiIXyUyma#N6~!>#+d^eKM}3RKE|JS*Nk`XNCh^cETuP79%l|E{+S z9qaICo={TilIMvIPq_8h0o6}$U)57Q1#6?k2iECCk)4!A7lAB*CtD-*^r5^}iJ+kp z+CZtA_(cq#uS2^o7EzUUA(K+Ur4iLNKc6m6fHjdoRiF~@i6-$p&YAonQT7>fVeb_D zo}7UF?JIQaq~b2t^cFLad83YoVELap^RuaR&Xwe z7R~n$ax?4GY{rf3u9@@JUhbXzihVY6`&9WZfKlrPL*)KSBtb&^XV(}F;m4Uvcj5L& zyb3RE(hh|UtF08B28BK)K1KJ@M1n=5X$Orgjart`QW23zgEOhb*6nJ><$QxzQ2Uw3 z*W>!rKTt9$tj<}T<@n@^l{n$voN8$yM*^~z?Ms_k^7-9oEc7)4693MKek|xsa*sKq zQg9_F${3IZ9@%LA1lyFLMj^-TGP<>D&aE z8aVP8Pr6d4<=c$*QYC~8*Tm{Pr8Uev$?p$BL!rD|V0H#ImO{U<&V^lZw4aTOyLv34 z8oO7c$0>d_2WErr$ApS!D4T9Z4LgdvN{1}kryo>D&8|%TUK#Tc20Fox6G?G#X2Y0z z$Ns9H?1k;ey``rm>eF5=o#fc=7{1**>IM$4HJo;?Xa%^V_Rv^L&lfZqJ*VMr0NlV@ z@pYS|ev`ZrZ3u?}j|fFtIAy$g_~vi8{O<+EZ+<`1Kv`@^aUXuLB#S5*pj z3~|zr(d37?t<@45Fd`Hech^^ZyxZvk6+vk=L?OL1=2%VC=AEkG)WA+b0DBNgB}U#G z&%Vip$@{)Z`k*r1>-QyDETb-Rc34+!PfX%Hpu9U#XNi-YNku#Pr75j^$#A{p*f=iU?n6qBN&g|$Vna0mo&X$-9l7wCS5-waLz6bryh*2XJm6cBJ-6{|(;(#PjKJYU2~vGJOlpz~r^mHp9XBcw~I;5THR zthA_ZAx`D0KU14=F*9{&JD>2>#x%;A0z5F0B#c!J2pNx#=4t#;rpT$=l{Fm=EzLS8 zYgd15_eKDY=Q+Nh+bUv}7F=20&xA7i(}%3JK$EA^p?G!#79Md*Q5(gqrVRp_6KxFg zvSc(mj>zq=n|eLBwd|T~1i-yqqZ$bOR|9zLt8lAMJoM|sWe$HnH@4(abnoc%2~bBm zKtyH#Gc_E=Gk}V4=}SW+!w|KkNP+tQ@BTk)!w8E1jI3@%6}=wHd6oaF(xLZ04sw;- z%x7Yiti$eG=JKL=v=dO6Pi{=kizo=t zeWxgfVfJ3$2U9ndt#!V*J}4)4k#mnf)kW^sDQk48|eJpWt1IwE(?sOm3>xb7P$hUajs? z10A2w`Xh8U*x37YKFQ=e9@k(QZB2pi8ywEgpSyRh6MOJ*dPbfrEX##NlP~o;vM zVVtDb8-C2~8<6ImpGD(iCT3^gsPL@PX&Lqnj-_5O)~Oe-9fkJXm7Vv=K=sF}&o_lP zjQ)I}UWL@$Cw-i6{}Qm++8VTfuHJ>Elbh@MJdUH97R@KDGK-0&s>c@wQ{ExcgqpLg zP)!cBu^0cszS@5AG^X^pbVotCHJ7OYm4jpz?{-Z7g^FCh>qw3+o0!<{Ymt6x$`m}l z&8T2a{!-Y}2Kx@`m$x+N`Gu|;n%f&5UkK82eOj{!ZEDYT_7QIu_^1_44{A~WAqD*- zeOx-_FiI9&IFJ-dRSeCI&0FJv{{|eyRzxUk+&^W)+T}+ z*?yX^AALu3q&4Ux+IoD<%*x-n0}RS^h8@wtRLU}zDAcDJ0xSs*i{RIO;hKiqla$)q z>yihGjiU!kht>BplR$sKgI{n*4D*eS|G(J4mK;C$6T>{w|34~j0VtQuu;AwPgtZBr zE3q;gs)DLwpwiVC)&og`LiANIa7o42;!)u;lDngartPzOWBW7|J*A-dnh#t&mzqkn ztih!)Atk zH5Oig+6z6bw-AY(J4dT;T#3PMQhme)}n$kj=__R0Mi~DAM71^i^E{`45y)kBYe5WQ zZbM9%K61%(uJPfTjaQmH=#y8tav*t(AoYix)0{Jz~+=CE87whm4fzC2E{1 zAsLcaTXHA`;r`A$4^A2mHjK<=3Hq-}N6}xS2LzTeS7Q)9#+g_ZI9X)C`(HZ}k@72J z%sUgA@9=Xw_w1VQ1pWR)I_Y~Wph4z}sb^t0oeeyVA~$d+72<7K;$;J&ef(|qk_~2Y z5+}cC!!t@`r|{6X0%PV%s=%x&CS7=7j5w)O!C-EQ&%JB9_xtKA|7d%>x3r;hGh?-` zDmyRGTu&7R-k^W{+g_^e;o;&h;R5}v)^)FBDh8z~up)?D%z_;!xRCQDaQz1f{Js*` zXr9ZT2+O(aqxow>^RCUDM%*VECv<*)3`CyK-ZzxS^_2EjvW%fZC2TaCJHRW2GRHAk zJ)or+vZE|6{JfO|cX4n2$O~CDxg9uOlDhByqF|Ci6;MkbN;ONv-t}<0_eXK#O^SpA zrhK+Qy!VLTb7A-!m z$05O+_g5+@Jxw_C+{s75i1Qbz7#XjXXMm|>ri}l42e2QeI&rUb4Gk$EB8Adj_skI- z9QitW7TGxJRYJ@Le00Yal8?uNO(!~ffo0iFvpg711N#gbJ3y!`&F_DBd}9@86SsY3 zyjt=;-sedjc*ZSsVEcJ4AyWJ~wl4D-welPZ^(+8fzbjZciTDkcu(Vjt=%($SJv#>a z!$>|Mt7)Y0B{N&*>eQEJZic#S_ysb%g@Jc>NtL70vp|~Z0T+CFdi<}JB=z3wi>|28wPl)ck564iD3J_^SDWnb}}_gt@zw0wbeaap&m zs4c$(f9KS>+5;iOWZ@)oqn4^6F6z}H!-knsH^{C9l+8%v{{CDk9l%j17`;*9BV3~{ z@-;^!ib5nLST;T~mLgDmV=O$0Cg8e98yv|yh`%E^E^~9b(*FD^3O{ymqQ)BCyad$)MpYyoBCQh&9kR&IR|LqYqAmpA@*`(>%t<+HDR4b}9rhjD)&kcZn? z9!RilU272k1G4^mt?VDD{gKxvmgRm;(Wzv6y_r<0bH6mpoY>SQk)7`0#T1hlN+$V6 zBo^^T4D%h8vP}6`c?w$s5r1^q6&oivx93xt&CTxI`T7pyDNrs2p$^XL&%HwG#L>LSJ4UaVrRwmJe{Z6ivuWG7da_)(TB*yajmra#q7EFn#M6@UNu|9{ zSBqWuTKE1gqkM~BF>vuyg2G~{+eF0$=4OYKRPsOg_38m@p-L9&RQNhDMW_&U##OT_3=X$QePN6Nj4@V zg@`!je}vlxWfwXVblOC$>AATI4c{+(3$tZX~YN^cIly}ye zH$N2dJ}|Aaz0QTCfDM8}Ih1Q}&*L0Fj_$%)rmFdmas}6l+||I%@BdM*oF{da?_7Ro zp-hwd0}rl^3=C4mpKOUY&j&U~v3!X4ap4lgPO2bxK76{JO-4!;!YcldW5M$AFv<@; z-~VsoI^xGb?#UuY2I2d<*b5>Z71H550TPwaGYI2S2^|o^UHZP zQ#ms_zPJY4J|>V%eXDXT%}AlJ`#Q)AP(_2Ajp31;Hq zxuOz2!r?!M!YrJju5Y3ELQW&nV{PahG+Rotu*#!!W1`1lC zOrRAge#!H@nVOsH!EY@FOHs(SQcI-zyYfpDk`J@s0~OYho@f~=L(u#IxY{4yXcOa` zZRj3q`P}{5snTzyC#)bX>B@wRFTwEZAhpv}{;j4b@kNsP;9Dtv8leIOBFJ0T1n;GW z$dc>6YYKe=E@IlGpYJmRS$pXWQ$KK%CpyV(J0D5m&ABVC9m?3H7!}Hoc-b(_ax>Kl zhwpmGkSOSphXwG5R}RaC4`%YRsWM6tHcbPe31-S_*_74b_cWKuBEW<}I*b#zrl2|v(#SA(d^4q=#{8Nh>ICD;}IofjvC@3OzwdJ1lv znZCAuaxLP~k`mvMx0g_Nw`Yyn6nXTPyl4#4mUP#92le}HlJ-r{cX4UY78 zxOIwr?Km|H1sKsNIM>8l=d{-O2m?{#(axFtFQmf?9}3RnKyv@MWJnYc`dCsCbUdhq zrfv{Z@ng?UAyW$3;b5e!IZtO$g^$IMwvzR0XE5(lkLeR0%L8uA0hhs&GYQBQDzHI}6G=yq~#`$snQKE3~1(OQ>|H$02@k(oC%$1U&3nV#(7(WDR)j#*?ulfym~=gm)b>)(uM zRH_t_IX%3!@~Wp3QwaEb9wdignZfwY!*Xw-?V*)Gb>~lduH=x~kMOXK4@6(;3P4pX zL;kab^KoxOfXbrpliymQy`k%_oTFwF@)BAxfOVbPuikUBYc$8e#u2#+q;HLgO8K-& z6x-8Vc6LGQ8jKGez;8MQ@6*3J3C*xx-%;hO8ibRjtC!a%c|S$lKS|z22X#OR(=yA; zRiZtG=oC0bP}5?s1nV`0qU(|Ja0vCa*-YyiB%7O1Yz;nU@Pc7K(&;O*adxC3;qzCC zRd;bI+oOncD6DddIIik7^natVeCS*i@yFd~3qS;t>O_g&tDpoGF9n>DQ-}*dlQdQrynWwG390`J!@FGS>!ag2D0WREv3A(TXXc>j!f7fd(Lcp``QK z0Om>@hKgkmUk2lqYobVVnR|1`(j6jk&DY#y!Thd@W}*FUHctlZpTT(HzOu3+;_3Tw z>E}BPeDOLJrI;gP^N&eY12#Ogm0z{bfKX?q6Fe4|5)+yfyF`yqbwELD5U0>1_|aoIP_QB){s?Q`l@8& z_lN&j%jnU^Ne`m*;+rM+P3+pV?(hLw$5q?4S`C#Y*O3iBby=yM2CGXgHH!?_T=?MO zR9G#dOYS{LVA*0rp?idH<0J<=O9!U-+D7#m35&`mybZV3LSSK{ zxfPA&@+CgAa0Y@@!|JJuiG1F$H;%0 z;nsr@cq|ceSv4p#KEr<^i8nAPWzRP?1paj5Z(IchU3V&~?cJMtdPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91LZAZx1ONa40RR91LI3~&0O+lO7XSbuo=HSORCocsoOzHP*LB`|eecbV z!C=sOTcHxi@sdd8iY4n0S2-m+E()SkR>_sbsl-;1US!#^ ztSF?)ELx#u(zHm~5&>?YNNPY(Sct(gGr#~dnB~n|ddu%S{d({?#E?*2l_q*_cfY>( zp7Y)BoV%T->-;|+S(dp))(0Pa(5{DuhAbT)-{H>8jM#O3^Q7CDUFpWP8M|NAsJhK& zzg-vkqk)}PyZsuvyH7|qbS4{ygC|T+U z{ePJWN9)lgX{SQLLD$%ufZ8)o*!g>BThX4 znJdL<0ZO@}nO0`{Q?cYq0C_KSnHS>S0MKs&q1^|J4-R><{e=L;jnM1rsCp3qNckkH zd*#^oq;OKo(<}|$EKA+2bP0r_ez)mouIm9p#OY^#Gf9;;f+Y3BN-9u70IAlx(x4or zmjh&Qd`H^uL$1VsEDA)yf_4zvSx_DC@&;x~UcrC@fJWW%lM=0u@*#~0Ghl-6rJ?7Q z07KUf0AwjZWWhV?cik8OyvzX*&ri}OAb3#mMc!O5ReN!&9rN< zn#!@Zo6CEF@eVn+^LrS=# z&OR?Gz>qU7OhrA*V$4_+h{7kx90WqUDb!{hU%f!78X<*P03$F2F(7c0Ac;vm0l`Ts zdI*S2Yyh3i@m#>Ny4!&-92!dUV=5n!y0Ah(hz4E?8+#509w(7AEllNdU=;PK4c-PsA=G<;AXBKjm7rh&jS)bPAcYCOn*v0N)BpewQa(+2 z?xmQ7>tT18h3E1M>7_wgK@1a4K)5N)PzrQF;CU__01$u>AfjKAd9laSq!h&>WxZs-3%T?OwKYgCCar{YrU>AB6p0;P<3)GLyv7WL$4tOryr++{DE2nU`OF z;n24pKk5PmB>;w#Bw__8<`x?uX&fgZptxZazzlg2*c!`Jnn^7#z`(a9i0`zyB=t;fgYxj^o8-_OhlIIe{CvkxL^vVLfsh z6~`(29Zqeg<~Ti$LvQDdFJI|6=SI?@p-HzGmdhHfadffJB;*`>ONp=Eq3ksS`2@dO z55)w5ASQUQAhDEdn2;t}aPz1B{hkfC?)g;M*|}NjUGX7wOd8Vm>&p}n&CMMjeqsNg z9Q>1q_j^7aD{M$%gU^}54lyIm!br?Wx+;-;Mk6i7>P@Dbexh;4LgyJ2zCraB1E#8z z50<8as&$c0m0rM!g60AcnB$ei1lM{BFSzHozx2ue&6|JD6j94t)8|@A$E>BH;HO@j zB{J-uNuy}i4Z?0rhjtS+B+cUa!;a3)TkiO0UmRGs=`Wx9{BM4R!IrsIigi5~BXuwq zH*&;`QZ33F6xHma!l~35h&!?ilwFw_p_Uz1jsBSDF4%DVc)!=~7pfP#f|B0|8jOp4 zhp{uQAECUMAP{mkxMBC2mECvzhkd`*xn$`Fa!yNajvRyhn!nAt>WSI0voD|j(d(~_ z9(wK6_?t&2(|Wxy2*;~byuqut^{=}2hIPxXzJ6!-@)f&EU0oaJ3(!S-nOx6JO+5Dx z|M|h+nLRT$n>v}X0?*eJGeS%88%{YYJ4w_`%5m3{YTWKGHgBFxWg_!H$Uzq41)0R` zg*qT~1of;22!0sJ1k$YJW{l@rAfRq(<<6T{?Ed9n``w`2VFKr^4Z_yyLON|uo*aI1 z=&^4+KK9xxOal!*w8%q=xj&uxa>GX{$)ZUp;YNzvI(;SEg_QE%FJ}hitBb>f8zV!{Z87bQw0!HHoX~dslUxK zhJTE>+^mBUSiSB!{q>FveKU9Rq7%m_9e?lMz3!ny%f0EfC%vWTX8mes-EUMYewIW* z5aV$;86}k%{g>h_Dv+~iK|Dx{rG=r^+?GiQ8< z;|~rFdIcN8>CmgDDT5{#$4Ix#RDmwL#1JmbyaX_OoMR5g2R{3`pIW-*>Yr6ZN*HTF zL~72>jlB5PFMsjacfNg0ilK^(fPRkV$<$Ch0tC&$WSFM1G^QWq1zy1u$zptI0%y>I zV$jB69-4V)5C3p{YINkKmDk>Qy&sf%+UqZO_ipXmxOwKx^WQ%rbi_DjYb=4NUuR~c zB@xm}5CDirEBDT`!pBi~qy2TSF@>zP_)93+z}4WqTTpp~UciJ=*jC!Lx*+<5()fAKJ5?nw2^4kVA{l6;a=@=9*WFFmABp_}xS zzNR<&`vU`4`Bksxg*{ELHXSe)$=T2hLRL_d64WY#SvgBw9AsABcGtbz*S+tyPl*5%G?z`VO{KPkg%#ZPd8rEEz?7~<9;nlYMV?hpIDxqP3X+c7H%8RAbL>vt{;x9luzdj8ajV>6x0R?POT-FSn_%@5ZJySmrKwb_>^-a0ag69PY+6Ks$N zN?H0VH<`S(SP>33(^`WuvNCJ6S&J-MV$t6XZVG{%R z-O6c!pz>7@iiI!z&o4i(`mIsaFk%L4J6reO_w$n1B&U2BeUgo$X1&C6O@()_{Lz#Kv?uzKh2 z-KM@y^FJCoaN+ooIfO8<5XAsd<@mc$U??xTvy!V+N|Cmn>HgBm>I={9cY(sG ze0l4)m?jVevgH%#Y{JXLaT1ck+UIhB+1w!sbuiyS}`9LJy_1l~2mp zy_9k(k8a&gP57vrQ*uZiYb3Q56_q=BH%e|}n7}|E)64WjPxe-%xAYI>D8^HU2w8_) z1|?0j9hN?DWUN0TE_*AqkiUNSPwvV=(7@-?QR?cfMAbQ7L2NW+*o3U=_w|H-G#|e( zO5$+wzj%K-5=QD;6;h8#np#`ZiMV+;NkwGx8Ft4EQt13YtWwE2uJFxcNeP8``rVDiaVwVPjdV#+-cakW1 z4&<^!xr^&dSH;s-suw6C|9wGzpp|d3ztDmUU}OL(bM&mMHUDM#d9QofnynhgV5ZoE zXrUQTj3uHUVl$OM_n4uy?MzSR`;Zmb8?iYX(r6JbOdY+A^-{0Y-M3P7vjZU|OiO3F zR?0^vHKQGRO)UcsCaXPcyM9}Ky=VV&-GyVTnnm(ct?Jib-W7AKh*lvB@`sWed*EHz z!;-Qnh<+&Srs(T5(HAXqMzAC8cC!5z<(snt*nD}+ct&1=Li|$4GLboNguI>eYYCo% zU@c`zOR`)%y_xHk1NZ+se}LRJ4v|0!c(AIPgNTSQ!s)2E=^T?Qbsf$*&2aL=_9Z=S z-Gdq+Fbx+o7{`Sb3gA#{m^#J)V+L(wb6>TF;bP4te5{p=cXB{3<&W#tiILY29GD(C zKGwN(Mc<0;yRPeAzV_<;eZ%)%^NWE+*^AXLxh1vqU<^S9xhQtw*@&hq&`)+4BZ`}M zODUz2tKTkQo+Af{=eo5U>XR86D6Mx|_r)vK3!`uCfB1n%8nx*tf5RC$^u*T=-E{x2 z?pb^Dop--ielW$rAb{17H6Rp8#7eJjGt~(&+K<{ zUjin-mc~Wi>g4#?^w@9>v2a4_2I<)B)V1SJzIEu>yX99oMg7dF(NgMa)#07>OK!<8 zJ?3>nKj~TAD>c(l$d0RZq!O!eiMn`(5%i#pAWU`KYML~fYW3b?)SesgrM>IRDlUM`q8RoSr>DI-4>V=e=}b^N!y4|Kh%1wLB`9 zY)P{@gFf(;ZUWC>o5~uEfVAQ+oLZgvEuN!Y4zJ$K>ZLF(H5(FBqZ$fe`V8vLT6N4X zcdp54nfDTn>dYKmVSh!9oqE$}PfzO{8QOoEXD=>YxvBT+5C76_OE+9|y{N8nlk!)3 zm#>h9f;4a1mK16^xYxU4;|l6*;hlppG5p5sZ~X0_eedGP@hN-TvbPEVEAl0h$CyVw z!cH)=ay~}Iczs3@fZ;eyOkwvN#tM#tt-mPNEayZM}egO3ZWs5aOBxX9^e1feg9`_^sPzW zN~{j0a{tt&`Xz_tk$L1N3D=FO$RNUpRT_Rmm?sq))CFx}m4(tDrSS?E)hSh1c0DSM@hV7vESQgm|4niv;kvDRTCjv#m*2&IGhYxw-q7hm9M~GJ{<-Epvpver7%0ISM{45LbjD(WlkZl zf9ZSLzwqw(a&$Ff5kS#9``WA}?W4QvI677e-~qWa-rSiQ)GA#uu6_PtjOyPv)ty z6T@<_R+9k0Eg8`A2QWau3jo!r`b*sd+ww-r^Rr$*Yw{wuk1WhD<*g&M))d`bNAHOV+~lm1BS3R1(a;Fi0R|_FFRtoem|t>A zUSkCEOAqNIy`-P?w9rKKmj0f?@8l;Gc%=Z&AnX7wUM99c@kxqRQX$x)A^XE8AAXD| zmPv%kTah#fDuXxv%x`>50_rp{Xhm3*Gl5r4A=H{WbL5;D+@4>f-`vz%WpY0?dgL7C z@Mg|-JT8pDN2pwZffEOz_{N|9jh|Be?fH{tG$A>~1d|*2rHAy9UZx*p|8tO3;Px&`&Mkbd&fsUvnK~b0B8U+ zZ?V$Hj;S+mPAK2P{PS;$9h5hD`mn+n)O)m?WeZG|D}Vvy`g=e9fxcB&-KF~5^G}`{ z`d^Y$@|xVpFFh>iOl&|u(-VDV7Si8SsBU2%3f5F;o&{pT3Zmk0Fa&F9Tb)=XF@x!B z^vd7-k8d%BKAHP@nY07z6@HfaAE3^a1O1}cOXa>$Ka_Y17H~#LA_t8&J85q{W21u~w z*84xb{mxI`sz^99fTGtZQgmW2G1E@voFNoqfG{lPcd1^O2Ku+a1U`^Z`I~R~7oXv& zR;MkWx=YD(7`Y^$I}ie8nkP-I$ACR~p#05cIG z%PG4%cXa=mQ?LHre?k}r!MQL>p?t9VhI@YL=8r#cUr=K8N8LX(hPqs!Dw*TC>1p!K z)44srt|NZu*Zd%#<)s{zck|CY@KKe|Yg*JbHn#F7!^k7KB%kEeX$}(krHAQ*Ued3f z4btC#=9y=lM<0EZ0p%7a8a(6loQF4+#I04!E-Z2tauQ@srjXiT$6aZyhhY%Q?e668 z!Lv(OZEsY1SKcDU+Iig3yL`)<9e3Xl)vIS_&!3njqvrP7<@c6v+q1r-XZi9=d92On z^UqG4K0S8$AC7>87T02ah*w{G*P5H|``o9xmaf0i5Tda5{1;EX{)dO2{O?cWAYreC z_7f%JaGkO&kB7wTmFT}4#J_d))RUe$EPYj!_QzYYuC8&%|H2o(K%mGWr&=9yW{&r} z69Y?}?#a-NN_Drv+73bFZqSGsqxvk{v1!OKK_3^$e&xDH-}uMF{j0B<1q_z^!ALFL zIz7MKJ-F$XTUTCv+d8N_H8Xx}3fJHctlPP|Yw5bRg4LLz_jR=LO^+Qte(v~zxA-|; zd;N#k@3`l)A6>P5@4YIoct@{We#cENo__VAgO7djo0>7QW6W$SBcg$iL!1(R!ev0s z=#wDSW+`J^KTW&qy$O1z-KWEB?b?%>+{4?Z;j)!__fS?Mx}meDlB5^vZs-R|qeA>5 zjTylVt!1**r`R>7BlOaN;~xC$-}$TUw|{bEH|oH~2#C=p2&(HVh_1=g~>XL#_Z+}Yo~^S%e}>RGmBYgp-AqTltt%AJ3gXRHrY z$KH7Qi--U5D+d(z$ASQ!-uwc)F&>N{5|==q2yx30ou&Jw!Z)0Jm>}GmDDg#b*riE z&tku|KX1Qo%W9YU4U&%?eg13vPXF-9W31;BIF@lb&BCcGB)JG8D`6Jz7E!0@TP=}+ zMGl52GCoej5ScpK)1}~%H13L7@F=rShquQ(aKKJvyKcm}@}Ht!#SfoELQR~0?K9i& z{FP7i4qp8+CS$hp-Odox#Gua^(7Mb`L_f|y$gc|q=qF=Fmer@n-+cV=cOQCW?&9dw zJO~zO3M1qoTOi0Ulo3uKl)F5O)*tO@W&^G7ICkt0teVd`r z5+bimzyz__Fk&%gP-toC%4-HU?fJL=x@TbHUDT9s0L^QeS56lq6wM?|5dA^4f(=Eg zw|O_NUKsxS zQS3x}DDpxuG%leJ2|ZjfJS;J_$wQ1{_9<;M7eF@dUbklZ-9ORYzhPI{*}IYPLtbaA z=0X6IhCgrf1F$u&O`n*Z7=HQ8;isROIC0>V0ANX)y?vZwOkgQKfgsRkS|%_ZHWZ&L zECzxGPeqXFJP6cN$RRACUVdLNqupP$f3;J5uo8Hs00$acY!dO=0!2Q90i4A~=o-Ju zt~lbdi`~C!`?6Kr?zyF-f9+PrDgAy>Swh;!;!YP%zM4d}sU)slWL!BpJ9+x(*&|QA zG&y?syp{p!kZ{fF5dgx*39PJeohu(k8b0F~=_Z?WlR;c32Bcs@@imV=ZMqx?(*13{ zh90yZ>P6%)6w$88cBhX`BjTB%n^R$(IbsQ_++ZP;5tCv9@E6)?#lJI{b(r-#d~~Gl zg>DVZ!|Bn(BNxvceu80~Ma0k*pd%xN*1?<#Td}2c7Id_*u^-%tWVvKR=aPpg+G>MYWEA&LhJSy2S47ctt!M{SKNTVF(`E&PZ@ zpEAi*^bw1q*;pGRS|yL%*Jd5R zQFX+pQGDVT5If3=$47=@Ume zQ47au;5XPjNB}^=TSXj}K5Jr{5GX zKIKF)71(jH}GY@nr;L=sR(JATMAnT7@z!SVM(z*j^;5wjQOpK9tvL zlFR<2mIZ8`L<>i(CCC{T0BEVP{i|P<)jn9#eY<1S{leplfG9E*fCvmdD@>(ehs;HQ zC_qgnqp-d9|8qe5|2CocUnU5kqI@Z=Yukp?4%CAGZGwD&_8>GaumxuTkQpp=h$`bs eSfKZc@ diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_icon_not_in_autopilot.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_icon_not_in_autopilot.png deleted file mode 100644 index 21dc719ec973ee68a6b181658ef9a6620a4e0e4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3347 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 diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_notice_box_bg.9.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_base_notice_box_bg.9.png deleted file mode 100644 index 8b4b579b568ab50119bf6303e5f3c456489c1109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4787 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 KKb*Su;6DIyeYoua diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arrived_station.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arrived_station.png deleted file mode 100644 index a676a789c39d4a64ff318b4e1964d7a73750f462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~m(&Q)G+$o^ zEg+kNfw4W4fd!-lh^2s-fq{7eBLg##W(0{XV1mnvEMP{kK?*nB{qUE8foYGYi(`m| zVD4n!Y~etWw)9D!>T6Y43?sRmT(vnCofiAP>uRWDh|2#1@(MeIb`>i}1r{un-Wbcl zx?RsjfMxa81x{;jBuHh?u6vUGu40~X@iB+JAD+#rem?K{zVFKWzW;xA+F((nPt`o} z<(wCbewQU|YV6o4C@In)J<-v)KtX=3Bu_xV+OTG0{q=V>LXNGksC$xm&k2 z=zqcMpXD>{1x|*u9^0{yQAK~s>8D9=4_(<~FLs8ZE5*t%>?hOIm30Qemi1Zlc3xSs zHH)ufXY%idH^swW*Gc%ymUeh$z`ENp=fca!9^b6--R&6lf+ zg6URzJ8QK=yfy=MpW5WTu=(qv>HKPdI;EHIY*5jf!JTx5UoAKxd{M*)rOjD< z&UasNbnJ69IVD)I{)yp*`slFsKNoJ;SMJ+>GyBH0uW#P)T%IvU^LF1}$L04IsI6^X zD3Ek*+r9r0UgvZyop%fDe!51VuRQG9v`vRh4BIQ7H@clRpRZdsdv0p2UX|g?X_vc= zuI~*?|9Sh)W!J1rQFrajHox_XD>&Etw&w5FD9hS6E%7|7JB=Hy^i&(an{Bf)&thZe81bwN-z+ z{N2~Jzf1=);T3K0RXMoYA^r* diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arriving_station.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_mogo_och_icon_arriving_station.png deleted file mode 100644 index e1fd463963f85f911b0e9447d663c9770c4f6617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~m(&Q)G+$o^ zEg+kNfw4W4fd!-lh^2s-fq{7eBLg##W(0{XV1mnvEMP{kK?*nB{qUE8foYkii(`m| zVC|H%*}{ne$G&Ud_Vr1w?g&^bw`4)w-mriVdXF|P(70uPsNUh@8&`qAH%Ge@ULRe( zU=h1*=tpIatr<#Do?!P&SZN{%Rr#D@) zIgq_3ySgis<9&~#tDwiR1&dlYsCQ>+wM__Le|;}=zg^7tW$F6SedU)#R2QFLJooKX z`*45zjP19TPclj+xP@4+o}taX^su?S-0FFIOYVPaHV)G&-8M~fQ7Z4R^=0vPvHwbc z-{L>X!@BW+&+4hWZ1;z)W-abFzn)_sapvXkT_pm0^WrS46nPGNaIrBJi*URw$*F&J zVXgV;I3b-~LC?PBuKploU3soz<;=-Z7EC+b+*v=WG%v8)pTaF@5g1jGB(*~Q+bZ{I z51zyWyhK_adH^oE8?oG_7TJ$st~Iiwdr$+~qstj-A=ES?0B;NM6U|R0+c(7Gbg4+V6*A z+AQ^VPPt=!aeu`1>L6>!Y5bxoEbDCZ*2Kj0-acEJ_o;qCTa<<6^_=Fy?zdhsUXzZz z-+FETnRD~41BpASDmjY+nLmVsX}6#+4lXm_1`|8{8_zsty^%GbyKXP|AF%cp^DqiZPw&o z#%gSt^+=m3zQK_7vVmw)f_sC4{lS*>!}l0vD@;rd{&-epp8QN4LQe?Gua+L z?-IC>+>r7wv}nDPn@^Fe;>R5;H7rFhm#VIw@vQehcTKVAY^hGmAE1=$>FVdQ&MBb@ E08IvEV*mgE diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_base_slide_block.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_base_slide_block.png deleted file mode 100644 index 8ffd0abe527369119e568c036a9bb11153da9917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9342 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 diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_bus_ic_autopilot.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_bus_ic_autopilot.png deleted file mode 100644 index be978145dc30849b5e3d240d1f1be6d63e476e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1781 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91H=qLm1ONa40RR91Hvj+t07-?+R{#J8Ur9tkRA>d=n%}EcMHI)qshQCa zHTz*+qtFx+HAp4GsFx7ICrf;&KoF$pRg}aa!%F=F(iau_@!~b#^T`OLGA$o^uqY)$ zC4WR(iTUI9`5gB?oU@(Td-l2K{@^b7-r0N2THm$i&g|JUvro^ME=zxZ{{v9I02YBc z;7KqQ+zTdxE8sFX4}JzGz<1zKPfyQ9%8?~BXgb&cj)I$@6VXq9d8QA03rS)&*avQa zZi;;J+Ur9r1f2$Uf@@$fMSkN<8}t?uWIT8e`~!wkjAz{ObsE`|Y7Fs%*!BS@i&Xg? z!;|2T41ZEi1`lO;g0dH+%9j|fV&XZM>QHG%!xn;5ph~V_uphhulAagsGJE~>uM+cE zSebN+0Ys}n)i6Adjl;$s=~(p7c;qV+^LeG?KsrLO0+h{!SE+vo`2Omez;}1XD}PMP zYeh#vahwk>$C%L{0}DDLPjr$$i$f6<^P8VYcgqY1hez2n_7U~tYLRwmY#d;`n3!kU z=f zla;N<41c5ZxZx5w1%495yFi&F#B--|8Wa~4N8nk~gTWLk-9qHO$YnzgVz4Z~DVF#- zT%QLog6DweC2|c^Y@7`}3=V;>$Rj#>$m1Y3FM(FM$<0(3$16cd*0x%EjnQJT0~`UN zXB2hU#W=>>4vM48oYsPnth76yE;b^&KW2%S!|PS>8nAbUT6~5)NfR5$$J4S;!DsZS z8{tNtlto$Su-uRK$qw?llvvIBvMx$KvJ$DvNEws*Qb_4hkIBZ>r zJ_;TKu38=kLoL43T#ft&TymWOcFsJo0~8;vv%aJ~3@u9Oi7v*TN^Jobi;i8sm)|(0 zuPW-#1>*MExb=YwRkQeSlnOSJfXkwklVZ%0MLu~al_o$XHnSqE>#bZGsa#h@oY&(& z2b_rT)K$xqyv)OPT_nI#8#fVzK1KEA$)}WX*o$9)fr$Q1Lj$juO)G|Q9iy^wEex4yEof36*sKXZ(y<-xF4${ z+ON+1>-d?Uc^2i9rh;aB9ufMIa~AzwO~b?se0&B|CmHRMpRqgz^8)5q6x-2$?t@}? z(JH&&niJM3@pZOKk?nPOb6beFM#y*PHq8>lB@yHQ&_C5QOuWFy38v~jXnm~-#PImc z1LhTy@ct7^e?bruKQz?(9-SrO3%E?SB>u0OW{~+^KK7wzU(>L7fm1JteUsZ;w6D5{ zYXK;e(v?SuAF{m>Lh~;F{R#%L6^opkLjlWl_?*-+AitLRh3eqg9N@`S>q9 z?{kkpS*wBg?+S3J+SL}g;s*P&h8?5cO+d9^I0KvpG1*H+(ldx%?0eta)tNLV5C7T5 zi-~#8Na1SQ;IIgU-hFuxAL`0k6q_}LYNAH*gP>CDd~zxsls2exHDRC7A^ zeG`4rQ@0F+#C>5-hTNOfbS@Gj+TYf*H|H3-P^Vh-52 zR+J~S@@S1gxM|aUtN|%{ zg7kveQjMyvig9{V^6IJ$L0xR`0aX(YCbdL9dBcm~uC}6rj3nF-z6IRThmI^zSBif6 z%hSFetB4<~E}r$p?2`2)HWA}zz_S_Lh&}@D1FmX3;r1Zd^HRUHc_bi?vJ<~T*){ne X{%-a4Ah5#400000NkvXXu0mjf^w>N> diff --git a/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_dot_line.png b/OCH/mogo-och/src/main/res/drawable-xhdpi/module_och_dot_line.png deleted file mode 100644 index 186001352c82bb9ad01ac4c1556c3b1e0f551dda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 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 - - - - - - - - - - - - - - - diff --git a/OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_check.png b/OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_check.png deleted file mode 100644 index 28857974b54c8284afcbae20bd663bab7e501be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20817 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 diff --git a/OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_nor.png b/OCH/mogo-och/src/main/res/drawable/module_mogo_och_autopilot_status_bg_nor.png deleted file mode 100644 index f7d4f92c4b872f6985030c27e0eddc93663605cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20635 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 - - - - \ No newline at end of file diff --git a/OCH/mogo-och/src/main/res/drawable/module_mogo_och_operation_status_bg.xml b/OCH/mogo-och/src/main/res/drawable/module_mogo_och_operation_status_bg.xml deleted file mode 100644 index 753d85e3ec..0000000000 --- a/OCH/mogo-och/src/main/res/drawable/module_mogo_och_operation_status_bg.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och/src/main/res/drawable/module_och_panel_bkg.xml b/OCH/mogo-och/src/main/res/drawable/module_och_panel_bkg.xml deleted file mode 100644 index 4a08f10745..0000000000 --- a/OCH/mogo-och/src/main/res/drawable/module_och_panel_bkg.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml b/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml deleted file mode 100644 index 3cc3070de3..0000000000 --- a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - -