├── app ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── drawable │ │ │ ├── ic_sett_back_white.png │ │ │ ├── ic_tracking_mode_auto.png │ │ │ ├── ic_tracking_mode_demand.png │ │ │ ├── ic_tracking_mode_disable.png │ │ │ ├── circle_setting_tracking_mode_disable.xml │ │ │ └── ic_check.xml │ │ ├── drawable-nodpi │ │ │ ├── bg_onboard_fourth.webp │ │ │ ├── bg_onboard_second.webp │ │ │ └── bg_onboard_third.webp │ │ ├── layout │ │ │ └── main_activity.xml │ │ └── xml │ │ │ └── network_security_config.xml │ │ └── java │ │ └── com │ │ └── telematics │ │ └── zenroad │ │ ├── MainViewModel.kt │ │ ├── extention │ │ └── Extentions.kt │ │ ├── MainApplication.kt │ │ ├── ui │ │ ├── onboarding │ │ │ └── OnboardingViewModel.kt │ │ ├── login │ │ │ └── LoginViewModel.kt │ │ └── settings │ │ │ └── company_id │ │ │ └── CompanyIdViewModel.kt │ │ └── di │ │ └── DatabaseModule.kt └── proguard-rules.pro ├── img_readme ├── 1.txt ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── here_step_1.png ├── here_step_2.png ├── here_step_3.png ├── here_step_4.png ├── here_step_5.png ├── here_step_6.png ├── telematicsapp.jpeg ├── instruction_map_1.png ├── instruction_map_2.png ├── instruction_map_3.png ├── instruction_map_4.png ├── instruction_map_5.png ├── instruction_map_6.png └── instruction_map_7.png ├── core └── sdkhelper │ ├── .gitignore │ ├── consumer-rules.pro │ ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ └── values │ │ └── strings.xml │ ├── build.gradle.kts │ └── proguard-rules.pro ├── content ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ ├── drawable │ │ │ ├── bg_dash.webp │ │ │ ├── ic_auth_logo.webp │ │ │ ├── ic_menu_dash_on.png │ │ │ ├── ic_onboard_logo.png │ │ │ ├── ic_wizard_plus.png │ │ │ ├── bg_onboard_first.webp │ │ │ ├── ic_menu_dash_off.png │ │ │ ├── ic_account_btn_edit.png │ │ │ ├── ic_account_btn_photo.png │ │ │ ├── ic_menu_profile_off.png │ │ │ ├── ic_menu_profile_on.png │ │ │ ├── ic_no_avatar_white.webp │ │ │ ├── ic_wizard_logo_back.webp │ │ │ ├── ic_wizard_verified.png │ │ │ ├── ic_menu_leaderboard_on.png │ │ │ ├── ic_sett_measure_large.png │ │ │ ├── ic_sett_profile_large.png │ │ │ ├── ic_menu_leaderboard_off.png │ │ │ ├── ic_account_btn_edit_pressed.png │ │ │ ├── ic_account_btn_photo_pressed.png │ │ │ ├── splash_screen.xml │ │ │ ├── ic_def_btn_norm.xml │ │ │ ├── ic_def_btn_orange.xml │ │ │ ├── ic_dot_red.xml │ │ │ ├── ic_def_btn_disable.xml │ │ │ ├── ic_dot_green.xml │ │ │ ├── ic_dot_orange.xml │ │ │ ├── ic_dot_yellow.xml │ │ │ ├── ic_slide_dot_checked.xml │ │ │ ├── ic_sett_measure.xml │ │ │ ├── ic_sett_profile.xml │ │ │ ├── ic_slide_dot_unchecked.xml │ │ │ ├── ic_custom_dialog_bubble.xml │ │ │ ├── ic_def_btn_press.xml │ │ │ ├── dr_login_email_rect.xml │ │ │ ├── ic_menu_feed.xml │ │ │ ├── ic_menu_dashboard.xml │ │ │ ├── ic_menu_profile.xml │ │ │ ├── selector_primary_color.xml │ │ │ ├── ic_menu_leaderboard.xml │ │ │ ├── selector_account_edit_btn.xml │ │ │ ├── selector_account_photo_btn.xml │ │ │ ├── ic_arrow_back_24dp.xml │ │ │ ├── selector_default_btn.xml │ │ │ ├── selector_orange_btn.xml │ │ │ ├── radio_group_rounded_background.xml │ │ │ ├── ic_next.xml │ │ │ ├── ic_rect_checkbox.xml │ │ │ ├── ic_rect_checkbox_empty.xml │ │ │ ├── ic_back.xml │ │ │ ├── ic_exit.xml │ │ │ ├── ic_rect_checkbox_fill.xml │ │ │ ├── ic_dash_arrow_down_gray.xml │ │ │ ├── ic_event_trash.xml │ │ │ ├── ic_edit.xml │ │ │ ├── ic_leaderboard_more.xml │ │ │ ├── ic_arrow_double_back.xml │ │ │ └── ic_login_email.xml │ │ ├── font │ │ │ ├── open_sans_bold.ttf │ │ │ ├── open_sans_light.ttf │ │ │ ├── open_sans_regular.ttf │ │ │ ├── spen_sans_semi_bold.ttf │ │ │ └── open_sans_extra_bold.ttf │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ ├── drawable-hdpi │ │ │ ├── ic_tracking_sdk_status_bar.png │ │ │ └── ic_tracking_sdk_notification.png │ │ ├── drawable-mdpi │ │ │ ├── ic_tracking_sdk_status_bar.png │ │ │ └── ic_tracking_sdk_notification.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_tracking_sdk_status_bar.png │ │ │ └── ic_tracking_sdk_notification.png │ │ ├── drawable-xxhdpi │ │ │ ├── ic_rotate_left_white_24dp.png │ │ │ ├── ic_rotate_right_white_24dp.png │ │ │ ├── ic_tracking_sdk_notification.png │ │ │ └── ic_tracking_sdk_status_bar.png │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_dash_arrow_right_gray.png │ │ │ ├── ic_tracking_sdk_status_bar.png │ │ │ ├── ic_tracking_sdk_notification.png │ │ │ └── ic_wizard_back_bubble_smallest.png │ │ ├── anim │ │ │ ├── fade_in.xml │ │ │ ├── fade_out.xml │ │ │ ├── slide_in.xml │ │ │ └── slide_out.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── color │ │ │ ├── bottom_menu_item_text_sel.xml │ │ │ ├── default_button_text_sel.xml │ │ │ └── menu_icon_color_sel.xml │ │ └── java │ │ └── com │ │ └── telematics │ │ └── content │ │ └── utils │ │ └── TryOpenLink.kt └── build.gradle.kts ├── domain ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── telematics │ │ └── domain │ │ ├── model │ │ ├── LoginType.kt │ │ ├── tracking │ │ │ ├── TripImageHolder.kt │ │ │ ├── ChangeTripEvent.kt │ │ │ ├── ElmDevice.kt │ │ │ ├── ElmManagerLinkingResult.kt │ │ │ ├── TripDetailsAddressesData.kt │ │ │ └── TripPointData.kt │ │ ├── reward │ │ │ ├── DailyLimitData.kt │ │ │ ├── DriveCoinsDuration.kt │ │ │ ├── DriveCoinsTotalData.kt │ │ │ ├── StreakCarType.kt │ │ │ ├── DriveCoinsDailyData.kt │ │ │ └── Streak.kt │ │ ├── statistics │ │ │ ├── DriveCoins.kt │ │ │ ├── ScoreType.kt │ │ │ ├── StatisticEcoScoringTabData.kt │ │ │ ├── StatisticEcoScoringMain.kt │ │ │ ├── UserStatisticsIndividualData.kt │ │ │ ├── UserStatisticsScoreData.kt │ │ │ ├── StatisticEcoScoringTabsData.kt │ │ │ ├── StatisticScoringData.kt │ │ │ ├── DrivingDetailsData.kt │ │ │ └── ScoreTypeModel.kt │ │ ├── carservice │ │ │ ├── ModelData.kt │ │ │ ├── ManufacturerData.kt │ │ │ └── Vehicle.kt │ │ ├── company_id │ │ │ └── InstanceName.kt │ │ ├── authentication │ │ │ ├── PhoneAuthResult.kt │ │ │ └── PhoneAuthCallback.kt │ │ ├── RegistrationApiData.kt │ │ ├── on_demand │ │ │ ├── OnDemandJobState.kt │ │ │ ├── TrackingState.kt │ │ │ ├── OnDemandState.kt │ │ │ └── DashboardOnDemandJob.kt │ │ ├── SessionData.kt │ │ └── leaderboard │ │ │ ├── LeaderboardType.kt │ │ │ ├── LeaderboardMemberData.kt │ │ │ ├── LeaderboardUserItems.kt │ │ │ └── LeaderboardUser.kt │ │ └── repository │ │ ├── LeaderboardRepo.kt │ │ ├── SessionRepo.kt │ │ ├── CarServiceRepo.kt │ │ ├── OnDemandRepo.kt │ │ ├── UserRepo.kt │ │ ├── UserServicesRepo.kt │ │ └── RewardRepo.kt └── build.gradle.kts ├── authentication ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── telematics │ │ └── authentication │ │ ├── exception │ │ ├── AuthException.kt │ │ └── AuthErrorCode.kt │ │ └── model │ │ └── UserDatabase.kt └── build.gradle.kts ├── features ├── dashboard │ ├── src │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_dash_land_green.png │ │ │ ├── ic_on_demand_status.png │ │ │ ├── ic_dash_arrow_up_gray.png │ │ │ ├── ic_rewards_drivecoins.png │ │ │ ├── ic_eco_scoring_tabs_bg.png │ │ │ ├── ib_empty_dashboard_last_trip.png │ │ │ ├── ic_dashboard_ecoscoring_hint_bubble.xml │ │ │ ├── ic_def_btn_norm.xml │ │ │ ├── ic_def_btn_disable.xml │ │ │ ├── rank_background.xml │ │ │ ├── btn_rectangle_red.xml │ │ │ ├── ic_orange_btn_disable.xml │ │ │ ├── ic_trip_circle_blue.xml │ │ │ ├── ic_orange_btn_norm.xml │ │ │ ├── btn_rectangle_green_bold.xml │ │ │ ├── ic_rect_round_5dp.xml │ │ │ ├── ic_event_trip_round_gray.xml │ │ │ ├── ic_event_trip_round_green.xml │ │ │ ├── ic_def_btn_press.xml │ │ │ ├── ic_orange_btn_press.xml │ │ │ ├── rect_fade_gradient.xml │ │ │ ├── selector_default_btn.xml │ │ │ ├── selector_default_btn_stroke.xml │ │ │ ├── background_with_elevation.xml │ │ │ ├── selector_orange_btn_stroke.xml │ │ │ ├── ic_next.xml │ │ │ ├── progress_bg.xml │ │ │ └── ic_empty_dashboard_last_trip_warning.xml │ │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_dash_fuel.png │ │ │ ├── ic_dash_tyres.png │ │ │ ├── ic_dash_brakes.png │ │ │ └── ic_dash_depreciation.png │ │ │ └── values │ │ │ ├── themes.xml │ │ │ └── dimens.xml │ └── build.gradle.kts ├── reward │ ├── src │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── ic_rewards_money_bg.png │ │ │ │ ├── badge_tab_background.xml │ │ │ │ ├── total_coins_background.xml │ │ │ │ ├── drive_coins_arrow_top.xml │ │ │ │ ├── ic_acceleration_arrow.xml │ │ │ │ └── drive_coins_eco_score.xml │ │ │ ├── navigation │ │ │ │ └── reward_nav_graph.xml │ │ │ └── layout │ │ │ │ ├── fragment_reward_feature_host.xml │ │ │ │ └── fragment_streaks.xml │ │ │ └── java │ │ │ └── com │ │ │ └── telematics │ │ │ └── features │ │ │ └── reward │ │ │ └── rewards │ │ │ └── RewardViewModel.kt │ └── build.gradle.kts ├── leaderboard │ ├── src │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── leader_graph.png │ │ │ │ ├── ic_dash_arrow_right_gray.png │ │ │ │ ├── ic_wizard_back_bubble_smallest.png │ │ │ │ └── gradient_leadboard_current_user.xml │ │ │ └── layout │ │ │ │ ├── layout_item_leaderboard_placeholder.xml │ │ │ │ ├── fragment_leaderboard_feature_host.xml │ │ │ │ └── fragment_leaderboard_details_page.xml │ │ │ └── java │ │ │ └── com │ │ │ └── telematics │ │ │ └── features │ │ │ └── leaderboard │ │ │ ├── ui │ │ │ └── leaderboard_details │ │ │ │ └── LeaderboardDetailsViewModel.kt │ │ │ └── LeaderboardFeatureHost.kt │ └── build.gradle.kts ├── obd │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── odb_alert.png │ │ │ │ ├── odb_success.png │ │ │ │ ├── background_rounded.xml │ │ │ │ ├── elm_selected_background.xml │ │ │ │ └── obd_connected.xml │ │ │ ├── values │ │ │ │ └── themes.xml │ │ │ └── layout │ │ │ │ ├── vehicles_choose_item_view.xml │ │ │ │ └── elm_device_item_view.xml │ │ │ ├── java │ │ │ └── ui │ │ │ │ ├── step4_connect_device │ │ │ │ └── DeviceConnectEnum.kt │ │ │ │ ├── step2_wizard │ │ │ │ └── ConnectVehicleEnum.kt │ │ │ │ └── step_unknown_error │ │ │ │ └── CouldNotConnectFragment.kt │ │ │ └── AndroidManifest.xml │ └── build.gradle.kts ├── account │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── drawable │ │ │ │ └── claim_icons_back.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_wizard_phone.png │ │ │ │ ├── ic_wizard_user.png │ │ │ │ ├── ic_wizard_address.png │ │ │ │ ├── ic_wizard_calendar.png │ │ │ │ ├── ic_wizard_number.png │ │ │ │ ├── ic_wizard_driving_licence.png │ │ │ │ └── ic_wizard_email.xml │ │ │ ├── layout │ │ │ │ ├── fragment_account_feature_host.xml │ │ │ │ ├── account_navigation_fragment.xml │ │ │ │ └── vehicles_choose_item_view.xml │ │ │ └── xml │ │ │ │ └── file_paths.xml │ │ │ └── java │ │ │ └── com │ │ │ └── telematics │ │ │ └── features │ │ │ └── account │ │ │ └── AccountFeatureHost.kt │ └── build.gradle.kts └── feed │ ├── src │ └── main │ │ ├── res │ │ ├── drawable-hdpi │ │ │ ├── ic_dot_a_trip.png │ │ │ └── ic_dot_b_trip.png │ │ ├── drawable-mdpi │ │ │ ├── ic_dot_a_trip.png │ │ │ └── ic_dot_b_trip.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_dot_a_trip.png │ │ │ └── ic_dot_b_trip.png │ │ ├── drawable │ │ │ ├── ib_feed_blur_trip.png │ │ │ ├── ic_red_popup__cornering.png │ │ │ ├── ic_red_popup__accleration.png │ │ │ ├── ic_red_popup__deceleration.png │ │ │ ├── ic_red_popup__distraction.png │ │ │ ├── ic_yellow_popup__cornering.png │ │ │ ├── ic_yellow_popup__acceleration.png │ │ │ ├── ic_yellow_popup__deceleration.png │ │ │ ├── ic_yellow_popup__distraction.png │ │ │ ├── ic_event_trip_bubble_bg.xml │ │ │ ├── ic_event_trip_bubble_type_bg.xml │ │ │ ├── ic_event_trip_label_bg_green.xml │ │ │ ├── ic_trip_circle_white.xml │ │ │ ├── ic_event_trip_bubble_right_btn.xml │ │ │ ├── cancel_background.xml │ │ │ ├── ic_behavior_bubble.xml │ │ │ ├── circle_background.xml │ │ │ ├── ic_toast_success.xml │ │ │ ├── feed_circle.xml │ │ │ ├── ic_toast_error.xml │ │ │ ├── background_with_elevation.xml │ │ │ ├── ic_event_trip_round_gray.xml │ │ │ ├── ic_event_trip_round_green.xml │ │ │ ├── ic_trip_details_speed_hint.xml │ │ │ ├── custom_info_bubble.xml │ │ │ ├── ic_event_trip_bubble_taxi.xml │ │ │ ├── ic_event_message_round.xml │ │ │ ├── ic_dot_a_trip_v.xml │ │ │ ├── ic_empty_dashboard_last_trip_warning.xml │ │ │ └── ic_dash_arrow_up_gray.xml │ │ ├── drawable-xxhdpi │ │ │ ├── ic_dot_a_trip.png │ │ │ └── ic_dot_b_trip.png │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_dot_a_trip.png │ │ │ └── ic_dot_b_trip.png │ │ ├── anim │ │ │ └── list_push_left_in_animator.xml │ │ ├── values │ │ │ └── themes.xml │ │ ├── layout │ │ │ ├── fragment_trip_details_map.xml │ │ │ └── fragment_feed_feature_host.xml │ │ └── navigation │ │ │ └── feed_nav_graph.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── telematics │ │ └── features │ │ └── feed │ │ ├── FeedFeatureHost.kt │ │ └── model │ │ └── SpeedType.kt │ └── build.gradle.kts ├── Android Open-Source App.png ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── repo └── com │ └── isseiaoki │ └── simplecropview │ └── 1.1.8 │ ├── simplecropview-1.1.8.aar │ ├── simplecropview-1.1.8-javadoc.jar │ └── simplecropview-1.1.8-sources.jar ├── data └── src │ └── main │ ├── java │ └── com │ │ └── telematics │ │ └── data │ │ ├── model │ │ ├── reward │ │ │ ├── DailyLimit.kt │ │ │ ├── DriveCoinsTotal.kt │ │ │ ├── DriveCoinsDaily.kt │ │ │ ├── DriveCoinsDetailed.kt │ │ │ ├── DriveCoinsScoreEco.kt │ │ │ └── DriveCoinsDetailed2.kt │ │ ├── carservice │ │ │ ├── VehicleResponse.kt │ │ │ ├── VehicleDevicesResponse.kt │ │ │ ├── ModelRest.kt │ │ │ ├── ManufacturerRest.kt │ │ │ ├── ElmRest.kt │ │ │ ├── CarUpdateBody.kt │ │ │ └── CarRest.kt │ │ ├── statistics │ │ │ ├── DriveCoinsRest.kt │ │ │ ├── LeaderboardResponse.kt │ │ │ ├── EcoScoringRest.kt │ │ │ ├── UserStatisticsIndividualRest.kt │ │ │ ├── UserStatisticsScoreRest.kt │ │ │ ├── DrivingDetailsRest.kt │ │ │ └── LeaderboardUserBody.kt │ │ ├── company_id │ │ │ └── InstanceNameBody.kt │ │ ├── login │ │ │ ├── LoginFieldsWithDeviceToken.kt │ │ │ ├── LoginFields.kt │ │ │ ├── LoginBody.kt │ │ │ ├── RegistrationBody.kt │ │ │ ├── LoginWithDeviceTokenBody.kt │ │ │ └── UserUpdateBody.kt │ │ ├── rest │ │ │ ├── ErrorData.kt │ │ │ ├── AccessToken.kt │ │ │ ├── BaseResponse.kt │ │ │ ├── ApiResult.kt │ │ │ └── ApiResponse.kt │ │ ├── profile │ │ │ └── ProfileResponse.kt │ │ ├── refresh_token │ │ │ └── RefreshRequest.kt │ │ ├── user_exists │ │ │ └── UserExists.kt │ │ └── tracking │ │ │ ├── ChangeEventBody.kt │ │ │ └── MeasuresFormatter.kt │ │ ├── api │ │ ├── errors │ │ │ └── ApiError.kt │ │ ├── RefreshApi.kt │ │ ├── TripEventTypeApi.kt │ │ └── LeaderboardApi.kt │ │ ├── utils │ │ └── Resource.kt │ │ ├── db_room │ │ ├── migration │ │ │ └── Migration1To2.kt │ │ └── OnDemandDao.kt │ │ ├── extentions │ │ ├── DoubleExt.kt │ │ ├── FloatExt.kt │ │ ├── BundleExt.kt │ │ ├── TaskExt.kt │ │ ├── ResourceExt.kt │ │ ├── ViewExt.kt │ │ └── FlowExt.kt │ │ ├── interceptor │ │ └── InstanceValuesInterceptor.kt │ │ └── usecase │ │ └── AlarmPermissionUseCase.kt │ ├── res │ └── drawable │ │ ├── ic_wizard_page_bg_center.xml │ │ ├── dialog_selected_background.xml │ │ ├── ic_wizard_page_disable_rect.xml │ │ ├── ic_wizard_page_bg_top.xml │ │ ├── ic_wizard_page_bg_bottom.xml │ │ └── ic_wizard_page_location_bg.xml │ └── AndroidManifest.xml ├── .gitignore └── settings.gradle.kts /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /img_readme/1.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /core/sdkhelper/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /core/sdkhelper/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /content/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /domain/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /authentication/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /core/sdkhelper/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /features/dashboard/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /features/reward/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /features/leaderboard/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img_readme/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/1.png -------------------------------------------------------------------------------- /img_readme/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/2.png -------------------------------------------------------------------------------- /img_readme/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/3.png -------------------------------------------------------------------------------- /img_readme/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/4.png -------------------------------------------------------------------------------- /img_readme/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/5.png -------------------------------------------------------------------------------- /img_readme/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/6.png -------------------------------------------------------------------------------- /img_readme/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/7.png -------------------------------------------------------------------------------- /img_readme/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/8.png -------------------------------------------------------------------------------- /img_readme/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/9.png -------------------------------------------------------------------------------- /img_readme/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/10.png -------------------------------------------------------------------------------- /img_readme/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/11.png -------------------------------------------------------------------------------- /img_readme/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/12.png -------------------------------------------------------------------------------- /img_readme/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/13.png -------------------------------------------------------------------------------- /img_readme/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/14.png -------------------------------------------------------------------------------- /img_readme/here_step_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_1.png -------------------------------------------------------------------------------- /img_readme/here_step_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_2.png -------------------------------------------------------------------------------- /img_readme/here_step_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_3.png -------------------------------------------------------------------------------- /img_readme/here_step_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_4.png -------------------------------------------------------------------------------- /img_readme/here_step_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_5.png -------------------------------------------------------------------------------- /img_readme/here_step_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/here_step_6.png -------------------------------------------------------------------------------- /Android Open-Source App.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/Android Open-Source App.png -------------------------------------------------------------------------------- /img_readme/telematicsapp.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/telematicsapp.jpeg -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /img_readme/instruction_map_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_1.png -------------------------------------------------------------------------------- /img_readme/instruction_map_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_2.png -------------------------------------------------------------------------------- /img_readme/instruction_map_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_3.png -------------------------------------------------------------------------------- /img_readme/instruction_map_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_4.png -------------------------------------------------------------------------------- /img_readme/instruction_map_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_5.png -------------------------------------------------------------------------------- /img_readme/instruction_map_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_6.png -------------------------------------------------------------------------------- /img_readme/instruction_map_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/img_readme/instruction_map_7.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/bg_dash.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/bg_dash.webp -------------------------------------------------------------------------------- /content/src/main/res/font/open_sans_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/font/open_sans_bold.ttf -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/LoginType.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model 2 | 3 | enum class LoginType { 4 | EMAIL, 5 | PHONE 6 | } -------------------------------------------------------------------------------- /content/src/main/res/font/open_sans_light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/font/open_sans_light.ttf -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sett_back_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable/ic_sett_back_white.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_auth_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_auth_logo.webp -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_dash_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_dash_on.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_onboard_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_onboard_logo.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_wizard_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_wizard_plus.png -------------------------------------------------------------------------------- /content/src/main/res/font/open_sans_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/font/open_sans_regular.ttf -------------------------------------------------------------------------------- /content/src/main/res/font/spen_sans_semi_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/font/spen_sans_semi_bold.ttf -------------------------------------------------------------------------------- /content/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /features/obd/src/main/res/drawable/odb_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/obd/src/main/res/drawable/odb_alert.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tracking_mode_auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable/ic_tracking_mode_auto.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/bg_onboard_first.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/bg_onboard_first.webp -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_dash_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_dash_off.png -------------------------------------------------------------------------------- /content/src/main/res/font/open_sans_extra_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/font/open_sans_extra_bold.ttf -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /features/obd/src/main/res/drawable/odb_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/obd/src/main/res/drawable/odb_success.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/bg_onboard_fourth.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable-nodpi/bg_onboard_fourth.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/bg_onboard_second.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable-nodpi/bg_onboard_second.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/bg_onboard_third.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable-nodpi/bg_onboard_third.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tracking_mode_demand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable/ic_tracking_mode_demand.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tracking_mode_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/app/src/main/res/drawable/ic_tracking_mode_disable.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_account_btn_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_account_btn_edit.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_account_btn_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_account_btn_photo.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_profile_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_profile_off.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_profile_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_profile_on.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_no_avatar_white.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_no_avatar_white.webp -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_wizard_logo_back.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_wizard_logo_back.webp -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_wizard_verified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_wizard_verified.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_leaderboard_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_leaderboard_on.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_sett_measure_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_sett_measure_large.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_sett_profile_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_sett_profile_large.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/TripImageHolder.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | data class TripImageHolder(val url: String, val r: String) -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_leaderboard_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_menu_leaderboard_off.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/DailyLimitData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | data class DailyLimitData( 4 | val dailyLimitData: Int = 0 5 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/DriveCoins.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class DriveCoins( 4 | val totalCoins: Int = 0 5 | ) -------------------------------------------------------------------------------- /features/account/src/main/res/drawable/claim_icons_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable/claim_icons_back.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-hdpi/ic_dot_a_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-hdpi/ic_dot_a_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-hdpi/ic_dot_b_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-hdpi/ic_dot_b_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-mdpi/ic_dot_a_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-mdpi/ic_dot_a_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-mdpi/ic_dot_b_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-mdpi/ic_dot_b_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xhdpi/ic_dot_a_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xhdpi/ic_dot_a_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xhdpi/ic_dot_b_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xhdpi/ic_dot_b_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ib_feed_blur_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ib_feed_blur_trip.png -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/drawable/leader_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/leaderboard/src/main/res/drawable/leader_graph.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_account_btn_edit_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_account_btn_edit_pressed.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xxhdpi/ic_dot_a_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xxhdpi/ic_dot_a_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xxhdpi/ic_dot_b_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xxhdpi/ic_dot_b_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xxxhdpi/ic_dot_a_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xxxhdpi/ic_dot_a_trip.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable-xxxhdpi/ic_dot_b_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable-xxxhdpi/ic_dot_b_trip.png -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/ic_rewards_money_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/reward/src/main/res/drawable/ic_rewards_money_bg.png -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_account_btn_photo_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable/ic_account_btn_photo_pressed.png -------------------------------------------------------------------------------- /content/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/carservice/ModelData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.carservice 2 | 3 | data class ModelData( 4 | val id: Int, 5 | val name: String 6 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_dash_land_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ic_dash_land_green.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_on_demand_status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ic_on_demand_status.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_red_popup__cornering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_red_popup__cornering.png -------------------------------------------------------------------------------- /repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8.aar -------------------------------------------------------------------------------- /content/src/main/res/drawable-hdpi/ic_tracking_sdk_status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-hdpi/ic_tracking_sdk_status_bar.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-mdpi/ic_tracking_sdk_status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-mdpi/ic_tracking_sdk_status_bar.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xhdpi/ic_tracking_sdk_status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xhdpi/ic_tracking_sdk_status_bar.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxhdpi/ic_rotate_left_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxhdpi/ic_rotate_left_white_24dp.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxxhdpi/ic_dash_arrow_right_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxxhdpi/ic_dash_arrow_right_gray.png -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_phone.png -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_user.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_fuel.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_tyres.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_tyres.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_dash_arrow_up_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ic_dash_arrow_up_gray.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_rewards_drivecoins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ic_rewards_drivecoins.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_red_popup__accleration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_red_popup__accleration.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_red_popup__deceleration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_red_popup__deceleration.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_red_popup__distraction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_red_popup__distraction.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_yellow_popup__cornering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_yellow_popup__cornering.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-hdpi/ic_tracking_sdk_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-hdpi/ic_tracking_sdk_notification.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-mdpi/ic_tracking_sdk_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-mdpi/ic_tracking_sdk_notification.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xhdpi/ic_tracking_sdk_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xhdpi/ic_tracking_sdk_notification.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxhdpi/ic_rotate_right_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxhdpi/ic_rotate_right_white_24dp.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxhdpi/ic_tracking_sdk_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxhdpi/ic_tracking_sdk_notification.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxhdpi/ic_tracking_sdk_status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxhdpi/ic_tracking_sdk_status_bar.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxxhdpi/ic_tracking_sdk_status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxxhdpi/ic_tracking_sdk_status_bar.png -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_address.png -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_calendar.png -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_number.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_brakes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_brakes.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_eco_scoring_tabs_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ic_eco_scoring_tabs_bg.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_yellow_popup__acceleration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_yellow_popup__acceleration.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_yellow_popup__deceleration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_yellow_popup__deceleration.png -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_yellow_popup__distraction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/feed/src/main/res/drawable/ic_yellow_popup__distraction.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxxhdpi/ic_tracking_sdk_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxxhdpi/ic_tracking_sdk_notification.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/carservice/ManufacturerData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.carservice 2 | 3 | data class ManufacturerData( 4 | val id: Int, 5 | val name: String 6 | ) -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/drawable/ic_dash_arrow_right_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/leaderboard/src/main/res/drawable/ic_dash_arrow_right_gray.png -------------------------------------------------------------------------------- /content/src/main/res/drawable-xxxhdpi/ic_wizard_back_bubble_smallest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/content/src/main/res/drawable-xxxhdpi/ic_wizard_back_bubble_smallest.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/company_id/InstanceName.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.company_id 2 | 3 | data class InstanceName( 4 | val name: String?, 5 | val isSuccess: Boolean 6 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_depreciation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable-xxxhdpi/ic_dash_depreciation.png -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ib_empty_dashboard_last_trip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/dashboard/src/main/res/drawable/ib_empty_dashboard_last_trip.png -------------------------------------------------------------------------------- /repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8-javadoc.jar -------------------------------------------------------------------------------- /repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/repo/com/isseiaoki/simplecropview/1.1.8/simplecropview-1.1.8-sources.jar -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_driving_licence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/account/src/main/res/drawable-xxxhdpi/ic_wizard_driving_licence.png -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/drawable/ic_wizard_back_bubble_smallest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mobile-Telematics/TelematicsApp-Android/HEAD/features/leaderboard/src/main/res/drawable/ic_wizard_back_bubble_smallest.png -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/DriveCoinsDuration.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | enum class DriveCoinsDuration { 4 | ALL_TIME, 5 | DAY, 6 | THIS_MONTH, 7 | LAST_MONTH 8 | } -------------------------------------------------------------------------------- /authentication/src/main/java/com/telematics/authentication/exception/AuthException.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.authentication.exception 2 | 3 | import java.io.IOException 4 | 5 | class AuthException(val errorCode: AuthErrorCode) : IOException() -------------------------------------------------------------------------------- /content/src/main/res/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/DriveCoinsTotalData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | data class DriveCoinsTotalData( 4 | val totalEarnedCoins: Int = 0, 5 | val acquiredCoins: Int = 0 6 | ) -------------------------------------------------------------------------------- /features/reward/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.reward" 7 | } 8 | 9 | dependencies { 10 | implementation(libs.chartView) 11 | } 12 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/authentication/PhoneAuthResult.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.authentication 2 | 3 | enum class PhoneAuthResult { 4 | TIMEOUT, 5 | CODE_SEND, 6 | COMPETED, 7 | FAILED 8 | } -------------------------------------------------------------------------------- /features/account/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.features.account" 7 | } 8 | 9 | dependencies { 10 | implementation(libs.cropView) 11 | } -------------------------------------------------------------------------------- /features/leaderboard/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.leaderboard" 7 | } 8 | 9 | dependencies { 10 | implementation(libs.glide) 11 | } 12 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DailyLimit.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DailyLimit( 6 | @SerializedName("DailyLimit") val dailyLimit: Int 7 | ) -------------------------------------------------------------------------------- /content/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /content/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/VehicleResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class VehicleResponse( 6 | @SerializedName("Cars") val cars: List 7 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/DriveCoinsRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsRest( 6 | @SerializedName("TotalCoins") val totalCoins: Int 7 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/RegistrationApiData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model 2 | 3 | data class RegistrationApiData( 4 | var deviceToken: String, 5 | val accessToken: String, 6 | val refreshToken: String, 7 | var expiresIn: Long? 8 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/StreakCarType.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | enum class StreakCarType { 4 | Acceleration, 5 | Braking, 6 | Speeding, 7 | Distraction, 8 | Cornering, 9 | PhoneUsage 10 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/ScoreType.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | enum class ScoreType { 4 | OVERALL, 5 | ACCELERATION, 6 | BREAKING, 7 | PHONE_USAGE, 8 | SPEEDING, 9 | CORNERING 10 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_bubble_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_bubble_type_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /content/src/main/res/anim/slide_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /features/obd/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.obd" 7 | } 8 | 9 | dependencies { 10 | implementation(libs.cropView) 11 | implementation(libs.circleIndicatorView) 12 | } 13 | -------------------------------------------------------------------------------- /content/src/main/res/anim/slide_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/VehicleDevicesResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class VehicleDevicesResponse( 6 | @SerializedName("Elms") val elms: List? 7 | ) -------------------------------------------------------------------------------- /data/src/main/res/drawable/ic_wizard_page_bg_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/badge_tab_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/company_id/InstanceNameBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.company_id 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class InstanceNameBody( 6 | @SerializedName("InstanceName") 7 | val instanceName: String? 8 | ) -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_label_bg_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/ModelRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ModelRest( 6 | @SerializedName("Id") val id: Int, 7 | @SerializedName("Name") val name: String 8 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_dashboard_ecoscoring_hint_bubble.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_setting_tracking_mode_disable.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/api/errors/ApiError.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.api.errors 2 | 3 | import java.io.IOException 4 | 5 | data class ApiError( 6 | val errorCode: Int, 7 | val msg: String? = null, 8 | //val details: List? = null 9 | ) : IOException(msg) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/StatisticEcoScoringTabData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class StatisticEcoScoringTabData( 4 | var averageSpeed: Double = .0, 5 | var maxSpeed: Double = .0, 6 | var averageTripDistance: Double = .0 7 | ) -------------------------------------------------------------------------------- /features/obd/src/main/java/ui/step4_connect_device/DeviceConnectEnum.kt: -------------------------------------------------------------------------------- 1 | package ui.step4_connect_device 2 | 3 | import com.telematics.obd.R 4 | 5 | 6 | enum class DeviceConnectEnum(val pageResId: Int) { 7 | PREPARE(R.layout.odb_prepare), 8 | TURN_ON_BLUETOOTH(R.layout.odb_turn_on_bluetooth) 9 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_def_btn_norm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/LoginFieldsWithDeviceToken.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LoginFieldsWithDeviceToken( 6 | @SerializedName("DeviceToken") 7 | val deviceToken: String? = null 8 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_def_btn_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_dot_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/ManufacturerRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ManufacturerRest( 6 | @SerializedName("Id") val id: Int, 7 | @SerializedName("Name") val name: String 8 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/on_demand/OnDemandJobState.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.on_demand 2 | 3 | 4 | enum class OnDemandJobState { 5 | CURRENT, ACCEPTED, COMPLETE, PAUSED; 6 | 7 | override fun toString(): String { 8 | return this.name 9 | } 10 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_def_btn_disable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_dot_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/StatisticEcoScoringMain.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class StatisticEcoScoringMain( 4 | val score: Int = 0, 5 | val fuel: Int = 0, 6 | val tires: Int = 0, 7 | val brakes: Int = 0, 8 | val cost: Int = 0 9 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_def_btn_norm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_dot_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_dot_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/rest/ErrorData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.rest 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ErrorData( 6 | @SerializedName("Key") 7 | val key: String?, 8 | @SerializedName("Message") 9 | val message: String? 10 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/ChangeTripEvent.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | data class ChangeTripEvent( 4 | val eventType: String?, 5 | val latitude: Double?, 6 | val longitude: Double?, 7 | val pointDate: String?, 8 | val changeTypeTo: String? 9 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_slide_dot_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/utils/Resource.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.utils 2 | 3 | sealed class Resource { 4 | 5 | class Success(val data: T? = null) : Resource() 6 | 7 | class Loading : Resource() 8 | 9 | class Failure(val error: Throwable? = null) : Resource() 10 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/UserStatisticsIndividualData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class UserStatisticsIndividualData( 4 | val tripsCount: Int = 0, 5 | val mileageKm: Double = .0, 6 | val mileageMile: Double = .0, 7 | val drivingTime: Int = 0 8 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_def_btn_disable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/rank_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_sett_measure.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_sett_profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_slide_dot_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/rest/AccessToken.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.rest 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class AccessToken( 6 | @SerializedName("ExpiresIn") 7 | val expiresIn: Long, 8 | @SerializedName("Token") 9 | val token: String 10 | ) -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_trip_circle_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_custom_dialog_bubble.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /content/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/LoginFields.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LoginFields( 6 | @SerializedName("Phone") 7 | val phone: String? = null, 8 | @SerializedName("Email") 9 | val email: String? = null 10 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/profile/ProfileResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.profile 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ProfileResponse( 6 | @SerializedName("name") 7 | val name: String, 8 | @SerializedName("session") 9 | val session: String 10 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/rest/BaseResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.rest 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | open class BaseResponse { 6 | 7 | @SerializedName("Code") 8 | var code: Int = 0 9 | @SerializedName("Message") 10 | var message: String? = null 11 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DriveCoinsTotal.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsTotal( 6 | @SerializedName("TotalEarnedCoins") val totalEarnedCoins: Int, 7 | @SerializedName("AcquiredCoins") val acquiredCoins: Int 8 | ) -------------------------------------------------------------------------------- /features/dashboard/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.dashboard" 7 | } 8 | 9 | dependencies { 10 | implementation(project(":core:sdkhelper")) 11 | implementation(libs.chartView) 12 | implementation(libs.circleIndicatorView) 13 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/btn_rectangle_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_orange_btn_disable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/LoginBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LoginBody( 6 | @SerializedName("loginFields") 7 | val loginFields: LoginFields, 8 | @SerializedName("password") 9 | val password: String 10 | ) -------------------------------------------------------------------------------- /domain/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.library") 3 | id("telematics.android.room") 4 | } 5 | 6 | 7 | android { 8 | namespace = "com.telematics.domain" 9 | } 10 | 11 | dependencies { 12 | implementation(libs.androidx.recyclerview) 13 | 14 | implementation(libs.kotlinx.coroutines.core) 15 | 16 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/DriveCoinsDailyData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | data class DriveCoinsDailyData( 4 | val data: String = "", 5 | val dateUpdated: String = "", 6 | val limitReached: Boolean = true, 7 | val totalEarnedCoins: Int = 0, 8 | val acquiredCoins: Int = 0 9 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/ElmDevice.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | data class ElmDevice( 4 | var connectedState: Boolean, 5 | var device: android.bluetooth.BluetoothDevice?, 6 | var deviceMacAddress: String?, 7 | var deviceName: String?, 8 | var rssi: Int 9 | ) 10 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_trip_circle_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /features/obd/src/main/java/ui/step2_wizard/ConnectVehicleEnum.kt: -------------------------------------------------------------------------------- 1 | package ui.step2_wizard 2 | 3 | import com.telematics.obd.R 4 | 5 | enum class ConnectVehicleEnum(val layout: Int) { 6 | INSTALL_YOUR_DEVICE(R.layout.obd_first_step), 7 | TURN_ON_VEHICLE(R.layout.obd_second_step), 8 | PHOTO_PHOTO_OF_ODOMETR(R.layout.obd_third_step) 9 | } -------------------------------------------------------------------------------- /core/sdkhelper/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.library") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.core.sdkhelper" 7 | } 8 | 9 | dependencies { 10 | implementation(libs.androidx.core.ktx) 11 | implementation(libs.androidx.constraintlayout) 12 | implementation(libs.androidx.fragment) 13 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/RegistrationBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class RegistrationBody( 6 | @SerializedName("Email") 7 | val email: String? = null, 8 | @SerializedName("Phone") 9 | val phone: String? = null 10 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_orange_btn_norm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_bubble_right_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /features/leaderboard/src/main/java/com/telematics/features/leaderboard/ui/leaderboard_details/LeaderboardDetailsViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.leaderboard.ui.leaderboard_details 2 | 3 | import androidx.lifecycle.ViewModel 4 | import javax.inject.Inject 5 | 6 | class LeaderboardDetailsViewModel @Inject constructor( 7 | 8 | ) : ViewModel() -------------------------------------------------------------------------------- /features/obd/src/main/res/drawable/background_rounded.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/db_room/migration/Migration1To2.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.db_room.migration 2 | 3 | import androidx.room.migration.Migration 4 | import androidx.sqlite.db.SupportSQLiteDatabase 5 | 6 | class Migration1To2 : Migration(1, 2) { 7 | override fun migrate(database: SupportSQLiteDatabase) { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/SessionData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model 2 | 3 | interface IAvailableSession 4 | 5 | data class SessionData( 6 | val accessToken: String, 7 | val refreshToken: String, 8 | var expiresIn: Long? 9 | ) : IAvailableSession { 10 | fun isEmpty(): Boolean = accessToken.isBlank() 11 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/btn_rectangle_green_bold.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/cancel_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /features/feed/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.feature") 3 | } 4 | 5 | android { 6 | namespace = "com.telematics.feed" 7 | 8 | defaultConfig { 9 | manifestPlaceholders["MAPS_API_KEY"] = AppConfig.GOOGLE_MAP_API 10 | } 11 | } 12 | 13 | dependencies { 14 | implementation(libs.google.play.services.maps) 15 | } 16 | -------------------------------------------------------------------------------- /features/feed/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/refresh_token/RefreshRequest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.refresh_token 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class RefreshRequest( 6 | @SerializedName("AccessToken") 7 | val accessToken: String, 8 | @SerializedName("RefreshToken") 9 | val refreshToken: String 10 | ) -------------------------------------------------------------------------------- /features/obd/src/main/res/drawable/elm_selected_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /data/src/main/res/drawable/dialog_selected_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/reward/Streak.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.reward 2 | 3 | data class Streak( 4 | val cardType: StreakCarType, 5 | val currentDistance: String, 6 | val currentDate: String?, 7 | val currentTrips: String, 8 | val bestDistance: String, 9 | val bestDate: String?, 10 | val bestTrips: String 11 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/LoginWithDeviceTokenBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LoginWithDeviceTokenBody( 6 | @SerializedName("loginFields") 7 | val loginFields: LoginFieldsWithDeviceToken, 8 | @SerializedName("password") 9 | val password: String 10 | ) -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/drawable/gradient_leadboard_current_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_rect_round_5dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /features/obd/src/main/res/drawable/obd_connected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/DoubleExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import java.text.DecimalFormat 4 | import java.util.Locale 5 | 6 | fun Double.format(format: String = "0.0"): String { 7 | Locale.setDefault(Locale.US) 8 | return DecimalFormat(format).format(this) 9 | } 10 | 11 | fun Double.toMiles(): Double { 12 | return this / 1.609f 13 | } -------------------------------------------------------------------------------- /data/src/main/res/drawable/ic_wizard_page_disable_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/UserStatisticsScoreData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class UserStatisticsScoreData( 4 | val overallScore: Int = 0, 5 | val accelerationScore: Int = 0, 6 | val brakingScore: Int = 0, 7 | val distractedScore: Int = 0, 8 | val speedingScore: Int = 0, 9 | val corneringScore: Int = 0 10 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/ElmManagerLinkingResult.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | class ElmManagerLinkingResult( 4 | val isLinkingComplete: Boolean, 5 | val vehicleToken: String?, 6 | val elmMAC: String?, 7 | 8 | val isScanningComplete: Boolean, 9 | val foundDevices: List?, 10 | 11 | val error: String? 12 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_def_btn_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/dr_login_email_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/authentication/PhoneAuthCallback.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.authentication 2 | 3 | class PhoneAuthCred(val credential: T, val phone: String) 4 | 5 | interface PhoneAuthCallback { 6 | fun onCodeSend(verificationId: String) 7 | fun onCompleted(result: PhoneAuthCred<*>) 8 | fun onTimeout() {} 9 | fun onFailure(e: Exception) 10 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/StatisticEcoScoringTabsData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class StatisticEcoScoringTabsData( 4 | var week: StatisticEcoScoringTabData = StatisticEcoScoringTabData(), 5 | var month: StatisticEcoScoringTabData = StatisticEcoScoringTabData(), 6 | var year: StatisticEcoScoringTabData = StatisticEcoScoringTabData() 7 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_event_trip_round_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_event_trip_round_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_dashboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_def_btn_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /content/src/main/res/color/bottom_menu_item_text_sel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/rest/ApiResult.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.rest 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ApiResult( 6 | @SerializedName("AccessToken") 7 | val accessToken: AccessToken, 8 | @SerializedName("DeviceToken") 9 | val deviceToken: String, 10 | @SerializedName("RefreshToken") 11 | val refreshToken: String 12 | ) -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_behavior_bubble.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/selector_primary_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /content/src/main/res/color/default_button_text_sel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /features/feed/src/main/res/anim/list_push_left_in_animator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/total_coins_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_menu_leaderboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/StatisticScoringData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class StatisticScoringData( 4 | val drivingDetailsData: List = ScoreTypeModel.empty(), 5 | val userStatisticsIndividualData: UserStatisticsIndividualData = UserStatisticsIndividualData(), 6 | val userStatisticsScoreData: List = ScoreTypeModel.empty() 7 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/selector_account_edit_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/selector_account_photo_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/LeaderboardResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LeaderboardResponse( 6 | @SerializedName("ScoringRate") 7 | val scoringRate: String, 8 | @SerializedName("Users") 9 | val users: List?, 10 | @SerializedName("UsersNumber") 11 | val usersNumber: Int 12 | ) -------------------------------------------------------------------------------- /content/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.library") 3 | } 4 | 5 | 6 | android { 7 | namespace = "com.telematics.content" 8 | } 9 | 10 | dependencies { 11 | 12 | implementation(libs.androidx.appcompat) 13 | implementation(libs.androidx.activity) 14 | implementation(libs.androidx.fragment) 15 | 16 | implementation(libs.androidx.navigation.fragment.ktx) 17 | 18 | implementation(libs.google.material) 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/MainViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad 2 | 3 | import androidx.lifecycle.ViewModel 4 | import com.telematics.data.tracking.TrackingUseCase 5 | import javax.inject.Inject 6 | 7 | class MainViewModel @Inject constructor( 8 | private val trackingUseCase: TrackingUseCase 9 | ) : ViewModel() { 10 | 11 | fun allPermissionsGranted() { 12 | 13 | trackingUseCase.enableTrackingSDK() 14 | } 15 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/circle_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /content/src/main/res/color/menu_icon_color_sel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/LeaderboardRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.leaderboard.LeaderboardMemberData 4 | import com.telematics.domain.model.leaderboard.LeaderboardUserItems 5 | 6 | interface LeaderboardRepo { 7 | 8 | suspend fun getLeaderboardUserData(): List 9 | suspend fun getLeaderboardUserList(type: Int): List 10 | } -------------------------------------------------------------------------------- /data/src/main/res/drawable/ic_wizard_page_bg_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/SessionRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.SessionData 4 | 5 | 6 | interface SessionRepo { 7 | fun saveSession(session: SessionData) 8 | fun getSession(): SessionData 9 | fun clearSession() 10 | 11 | fun saveStateForRewardInviteScreen() 12 | fun isRewardInviteScreenOpened(): Boolean 13 | fun clearStateForRewardInviteScreen() 14 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_orange_btn_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_toast_success.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /authentication/src/main/java/com/telematics/authentication/exception/AuthErrorCode.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.authentication.exception 2 | 3 | enum class AuthErrorCode { 4 | INVALID_PASSWORD, 5 | USER_NOT_EXIST, 6 | LOGIN_TIMEOUT, 7 | EMPTY_VERIFICATION_CODE, 8 | INVALID_VERIFICATION_CODE, 9 | EMPTY_SESSION, 10 | EMPTY_DEVICE_TOKEN, 11 | NONE, 12 | EMPTY, 13 | NEED_VERIFY_CODE, 14 | EMAIL_ALREADY_IN_USE, 15 | NETWORK_EXCEPTION 16 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_arrow_back_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /data/src/main/res/drawable/ic_wizard_page_bg_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/feed_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/FloatExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import android.content.Context 4 | import java.text.DecimalFormat 5 | import java.util.Locale 6 | 7 | fun Float.format(format: String = "0.0"): String { 8 | Locale.setDefault(Locale.US) 9 | return DecimalFormat(format).format(this) 10 | } 11 | 12 | fun convertDpToPx(context: Context, dp: Float): Float { 13 | return dp * context.resources.displayMetrics.density 14 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/rect_fade_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_toast_error.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/rest/ApiResponse.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.rest 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ApiResponse( 6 | 7 | @SerializedName("Result") 8 | val result: Result?, 9 | @SerializedName("Status") 10 | val status: Int, 11 | @SerializedName("Title") 12 | val msg: String? = null, 13 | @SerializedName("Errors") 14 | val details: List? = null 15 | ) : BaseResponse() -------------------------------------------------------------------------------- /content/src/main/res/drawable/selector_default_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/TripDetailsAddressesData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | class TripDetailsAddressesData( 4 | val city: String? = null, 5 | val country: String? = null, 6 | val countryCode: String? = null, 7 | val county: String? = null, 8 | val distinct: String? = null, 9 | val house: String? = null, 10 | val postalCode: String? = null, 11 | val state: String? = null, 12 | val street: String? = null 13 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/selector_orange_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/on_demand/TrackingState.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.on_demand 2 | 3 | enum class TrackingState(val index: Int) { 4 | AUTO(0), DEMAND(1), DISABLE(2); 5 | 6 | companion object { 7 | fun parse(index: Int?): TrackingState { 8 | return when (index) { 9 | 0 -> AUTO 10 | 1 -> DEMAND 11 | 2 -> DISABLE 12 | else -> AUTO 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/extention/Extentions.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad.extention 2 | 3 | import android.util.Patterns 4 | import android.view.View 5 | 6 | fun View.setVisible(visible: Boolean?) { 7 | this.visibility = when (visible) { 8 | true -> View.VISIBLE 9 | false -> View.INVISIBLE 10 | null -> View.GONE 11 | } 12 | } 13 | 14 | fun String.isValidEmail(): Boolean { 15 | return this.isNotEmpty() && Patterns.EMAIL_ADDRESS.matcher(this).matches() 16 | } 17 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/EcoScoringRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class EcoScoringRest( 6 | @SerializedName("EcoScoreFuel") val fuel: Double, 7 | @SerializedName("EcoScoreTyres") val tyres: Double, 8 | @SerializedName("EcoScoreDepreciation") val depreciation: Double, 9 | @SerializedName("EcoScoreBrakes") val brakes: Double, 10 | @SerializedName("EcoScore") val score: Double 11 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/tracking/TripPointData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.tracking 2 | 3 | class TripPointData { 4 | 5 | var latitude: Double = 0.0 6 | var longitude: Double = 0.0 7 | var speedType: String? = null 8 | var alertType: String? = null 9 | var usePhone: Boolean = false 10 | var alertValue: Double = 0.0 11 | var speed: Double = 0.0 12 | var date: String = "" 13 | var fullDate: String = "" 14 | var edited: Boolean = false 15 | 16 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/selector_default_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Gradle files 2 | .gradle/ 3 | build/ 4 | 5 | # Local configuration file (sdk path, etc) 6 | local.properties 7 | 8 | # Log/OS Files 9 | *.log 10 | 11 | # Android Studio generated files and folders 12 | captures/ 13 | .externalNativeBuild/ 14 | .cxx/ 15 | *.apk 16 | output.json 17 | 18 | # IntelliJ 19 | *.iml 20 | .idea/ 21 | misc.xml 22 | 23 | # Keystore files 24 | #*.jks 25 | #*.keystore 26 | 27 | # Google Services (e.g. APIs or Firebase) 28 | #google-services.json 29 | 30 | # Android Profiling 31 | *.hprof -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/api/RefreshApi.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.api 2 | 3 | import com.telematics.data.model.refresh_token.RefreshRequest 4 | import com.telematics.data.model.rest.ApiResponse 5 | import com.telematics.data.model.rest.ApiResult 6 | import retrofit2.http.Body 7 | import retrofit2.http.POST 8 | 9 | interface RefreshApi { 10 | 11 | // refresh token 12 | @POST("v1/Auth/RefreshToken") 13 | suspend fun refreshToken(@Body refreshRequest: RefreshRequest): ApiResponse 14 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DriveCoinsDaily.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsDaily( 6 | @SerializedName("Date") val data: String, 7 | @SerializedName("DateUpdated") val dateUpdated: String, 8 | @SerializedName("LimitReached") val limitReached: Boolean, 9 | @SerializedName("TotalEarnedCoins") val totalEarnedCoins: Int, 10 | @SerializedName("AcquiredCoins") val acquiredCoins: Int 11 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/selector_default_btn_stroke.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/background_with_elevation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/background_with_elevation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/selector_orange_btn_stroke.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /authentication/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("telematics.android.library") 3 | } 4 | 5 | 6 | android { 7 | namespace = "com.telematics.authentication" 8 | } 9 | 10 | dependencies { 11 | 12 | implementation(project(":domain")) 13 | implementation(project(":data")) 14 | 15 | implementation(platform(libs.firebase.bom)) 16 | implementation(libs.firebase.database) 17 | implementation(libs.firebase.auth) 18 | implementation(libs.firebase.storage) 19 | 20 | implementation(libs.loginAuthFramework) 21 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/radio_group_rounded_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DriveCoinsDetailed.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsDetailed( 6 | @SerializedName("CoinCategoryName") val coinCategoryName: String, 7 | @SerializedName("CoinCategoryToken") val coinCategoryToken: String, 8 | @SerializedName("CoinFactor") val coinFactor: String, 9 | @SerializedName("CoinFactorToken") val coinFactorToken: String, 10 | @SerializedName("CoinsSum") val coinsSum: Int 11 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/user_exists/UserExists.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.user_exists 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UserExists( 6 | @SerializedName("FirstName") 7 | val firstName: String?, 8 | @SerializedName("ImageUrl") 9 | val imageUrl: String?, 10 | @SerializedName("LastName") 11 | val lastName: String?, 12 | @SerializedName("Nickname") 13 | val nickname: String?, 14 | @SerializedName("UserExists") 15 | val userExists: Boolean 16 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/leaderboard/LeaderboardType.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.leaderboard 2 | 3 | enum class LeaderboardType(val index: Int) { 4 | Rate(1), 5 | 6 | Acceleration(2), 7 | Deceleration(3), 8 | Speeding(4), 9 | Distraction(5), 10 | Turn(6), 11 | 12 | Trips(7), 13 | Distance(8), 14 | Duration(9); 15 | 16 | companion object { 17 | fun getFromIndex(index: Int): LeaderboardType { 18 | return values()[index - 1] 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DriveCoinsScoreEco.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsScoreEco( 6 | @SerializedName("EcoScoreFuel") val ecoScoreFuel: Double, 7 | @SerializedName("EcoScoreTyres") val ecoScoreTyres: Double, 8 | @SerializedName("EcoScoreBrakes") val ecoScoreBrakes: Double, 9 | @SerializedName("EcoScoreDepreciation") val ecoScoreDepreciation: Double, 10 | @SerializedName("EcoScore") val ecoScore: Double 11 | ) -------------------------------------------------------------------------------- /core/sdkhelper/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | For optimal app function, a persistent notification is displayed. If preferred, disable it without affecting performance by tapping Settings.\nThanks for your understanding. 4 | Notification Reminder 5 | Settings 6 | Skip 7 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/reward/DriveCoinsDetailed2.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.reward 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DriveCoinsDetailed2( 6 | @SerializedName("AccelerationsCount") val accelerationCount: Int, 7 | @SerializedName("BrakingsCount") val brakingCount: Int, 8 | @SerializedName("CorneringsCount") val corneringCount: Int, 9 | @SerializedName("TotalSpeedingKm") val totalSpeedingKm: Double, 10 | @SerializedName("PhoneUsageDurationMin") val phoneUsage: Double 11 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/tracking/ChangeEventBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.tracking 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ChangeEventBody( 6 | @SerializedName("EventType") 7 | val eventType: String?, 8 | @SerializedName("Latitude") 9 | val latitude: Double?, 10 | @SerializedName("Longitude") 11 | val longitude: Double?, 12 | @SerializedName("PointDate") 13 | val pointDate: String?, 14 | @SerializedName("ChangeTypeTo") 15 | val changeTypeTo: String? 16 | ) -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/ElmRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class ElmRest( 6 | @SerializedName("Id") val id: Int, 7 | @SerializedName("UUID") val uuid: String, 8 | @SerializedName("Name") val name: String?, 9 | @SerializedName("Model") val model: String?, 10 | @SerializedName("Manufacturer") val manufacturer: String?, 11 | @SerializedName("SoftwareVersion") val softwareVersion: String?, 12 | @SerializedName("Mac") val mac: String? 13 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/DrivingDetailsData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class DrivingDetailsData( 4 | val createdAtUtc: String = "", 5 | val distanceKm: Double = 0.0, 6 | val durationMinutes: Double = 0.0, 7 | val periodDays: Int = 0, 8 | val score: Int = 0, 9 | val scoreAcceleration: Int = 0, 10 | val scoreDate: String = "", 11 | val scoreDeceleration: Int = 0, 12 | val scoreDistraction: Int = 0, 13 | val scoreSpeeding: Int = 0, 14 | val scoreTurn: Int = 0, 15 | val trips: Int = 0 16 | ) -------------------------------------------------------------------------------- /features/obd/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_next.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_rect_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/UserStatisticsIndividualRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UserStatisticsIndividualRest( 6 | @SerializedName("TripsCount") val tripsCount: Double, 7 | @SerializedName("MileageMile") val mileageMile: Double, 8 | @SerializedName("MileageKm") val mileageKm: Double, 9 | @SerializedName("DrivingTime") val drivingTime: Double, 10 | @SerializedName("AverageSpeedKmh") val averageSpeedKmh: Double, 11 | @SerializedName("MaxSpeedKmh") val maxSpeedKmh: Double 12 | ) -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_next.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/BundleExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import android.os.Build 4 | import android.os.Bundle 5 | import java.io.Serializable 6 | 7 | fun Bundle.getSerializableCompat( 8 | key: String?, 9 | clazz: Class 10 | ): T? { 11 | return when { 12 | Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> { 13 | getSerializable(key, clazz) 14 | } 15 | 16 | else -> { 17 | @Suppress("DEPRECATION", "UNCHECKED_CAST") 18 | getSerializable(key) as T? 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/interceptor/InstanceValuesInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.interceptor 2 | 3 | import com.telematics.data.BuildConfig 4 | import okhttp3.Interceptor 5 | import okhttp3.Response 6 | 7 | class InstanceValuesInterceptor : Interceptor { 8 | override fun intercept(chain: Interceptor.Chain): Response { 9 | val request = chain.request() 10 | .newBuilder() 11 | .addHeader("InstanceId", BuildConfig.INSTANCE_ID) 12 | .addHeader("InstanceKey", BuildConfig.INSTANCE_KEY) 13 | .build() 14 | return chain.proceed(request) 15 | } 16 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_rect_checkbox_empty.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/UserStatisticsScoreRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UserStatisticsScoreRest( 6 | @SerializedName("AccelerationScore") val accelerationScore: Double, 7 | @SerializedName("BrakingScore") val brakingScore: Double, 8 | @SerializedName("SpeedingScore") val speedingScore: Double, 9 | @SerializedName("PhoneUsageScore") val distractedScore: Double, 10 | @SerializedName("CorneringScore") val corneringScore: Double, 11 | @SerializedName("SafetyScore") val overallScore: Double 12 | ) -------------------------------------------------------------------------------- /authentication/src/main/java/com/telematics/authentication/model/UserDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.authentication.model 2 | 3 | class UserDatabase { 4 | var email: String? = null 5 | var deviceToken: String? = null 6 | var userId: String? = null 7 | var firstName: String? = null 8 | var lastName: String? = null 9 | var phone: String? = null 10 | var birthday: String? = null //in ISO 11 | var address: String? = null 12 | var clientId: String? = null 13 | var profilePictureLink: String? = null 14 | var gender: String? = null 15 | var maritalStatus: String? = null 16 | var childrenCount: Int? = 0 17 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_round_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_round_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /features/reward/src/main/java/com/telematics/features/reward/rewards/RewardViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.reward.rewards 2 | 3 | import androidx.lifecycle.ViewModel 4 | import com.telematics.domain.repository.SessionRepo 5 | import javax.inject.Inject 6 | 7 | class RewardViewModel @Inject constructor( 8 | private val sessionRepo: SessionRepo 9 | ) : ViewModel() { 10 | 11 | val isNeedShowRewardsInvite: Boolean 12 | get() { 13 | return !sessionRepo.isRewardInviteScreenOpened() 14 | } 15 | 16 | fun inviteScreenClosed() { 17 | 18 | sessionRepo.saveStateForRewardInviteScreen() 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/CarServiceRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.carservice.ManufacturerData 4 | import com.telematics.domain.model.carservice.ModelData 5 | import com.telematics.domain.model.carservice.Vehicle 6 | 7 | interface CarServiceRepo { 8 | suspend fun getVehicles(): List 9 | suspend fun createVehicle(vehicle: Vehicle) 10 | suspend fun updateVehicle(vehicle: Vehicle) 11 | suspend fun deleteVehicle(vehicleToken: String) 12 | suspend fun getManufacturers(): List 13 | suspend fun getModels(manufacturerId: Int): List 14 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 17sp 6 | 14sp 7 | 130dp 8 | 45dp 9 | 50dp 10 | 40dp 11 | 16dp 12 | 13 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/leaderboard/LeaderboardMemberData.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.leaderboard 2 | 3 | data class LeaderboardMemberData( 4 | var deviceToken: String? = null, 5 | var firstName: String? = null, 6 | var familyName: String? = null, 7 | var rank: Int = -1, // place 8 | var tracksCount: Int = 0, // rating 9 | var photoUrl: String? = null, 10 | var isCurrentUser: Boolean = false, 11 | var type: LeaderboardType = LeaderboardType.Rate, 12 | var nickname: String = "", 13 | var distance: Double = 0.0, 14 | var duration: Double = 0.0, 15 | var value: Double = 0.0, 16 | var valuePerc: Double = 0.0 17 | ) -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_exit.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/OnDemandRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.on_demand.DashboardOnDemandJob 4 | import com.telematics.domain.model.on_demand.OnDemandJobState 5 | 6 | interface OnDemandRepo { 7 | 8 | suspend fun getOnDemandJobList(): List 9 | 10 | suspend fun putOnDemandJobList(list: List) 11 | suspend fun removeOnDemandJobByState(state: OnDemandJobState) 12 | suspend fun updateOnDemandJob(jobTagName: String, newState: String) 13 | suspend fun addOnDemandJob(job: DashboardOnDemandJob) 14 | fun removeOnDemandJob(job: DashboardOnDemandJob) 15 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/usecase/AlarmPermissionUseCase.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.usecase 2 | 3 | import android.content.Context 4 | import com.telematics.data.extentions.isExactAlarmGranted 5 | import dagger.hilt.android.qualifiers.ApplicationContext 6 | import kotlinx.coroutines.flow.Flow 7 | import kotlinx.coroutines.flow.flow 8 | import javax.inject.Inject 9 | 10 | open class AlarmPermissionUseCase @Inject constructor( 11 | @ApplicationContext private val context: Context, 12 | ) { 13 | 14 | operator fun invoke(): Flow { 15 | return flow { 16 | emit( 17 | isExactAlarmGranted(context) 18 | ) 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/TaskExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import android.util.Log 4 | import kotlin.coroutines.resume 5 | import kotlin.coroutines.resumeWithException 6 | import kotlin.coroutines.suspendCoroutine 7 | 8 | suspend fun com.telematicssdk.auth.external.Task.await(): T = 9 | suspendCoroutine { continuation -> 10 | onSuccess { 11 | Log.d("com.telematicssdk.auth", "TASK: await: onSuccess") 12 | continuation.resume(it) 13 | } 14 | onError { 15 | Log.d("com.telematicssdk.auth", "TASK: await: onError ${it.message}") 16 | continuation.resumeWithException(it) 17 | } 18 | } -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/layout/layout_item_leaderboard_placeholder.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/drive_coins_arrow_top.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 16 | 17 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/DrivingDetailsRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class DrivingDetailsRest( 6 | @SerializedName("SafetyScore") 7 | val score: Int, 8 | @SerializedName("AccelerationScore") 9 | val scoreAcceleration: Int, 10 | @SerializedName("CalcDate") 11 | val scoreDate: String, 12 | @SerializedName("BrakingScore") 13 | val scoreDeceleration: Int, 14 | @SerializedName("PhoneUsageScore") 15 | val scoreDistraction: Int, 16 | @SerializedName("SpeedingScore") 17 | val scoreSpeeding: Int, 18 | @SerializedName("CorneringScore") 19 | val scoreTurn: Int 20 | ) -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/on_demand/OnDemandState.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.on_demand 2 | 3 | enum class OnDemandState { 4 | ONLINE, OFFLINE, ON_DUTY; 5 | 6 | companion object { 7 | fun translation(s: String?): OnDemandState { 8 | return when (s) { 9 | "online" -> ONLINE 10 | "offline" -> OFFLINE 11 | "on_duty" -> ON_DUTY 12 | else -> OFFLINE 13 | } 14 | } 15 | } 16 | 17 | override fun toString(): String { 18 | return when (this) { 19 | ONLINE -> "online" 20 | OFFLINE -> "offline" 21 | ON_DUTY -> "on_duty" 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_trip_details_speed_hint.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/custom_info_bubble.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/statistics/ScoreTypeModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.statistics 2 | 3 | data class ScoreTypeModel( 4 | val type: ScoreType = ScoreType.OVERALL, 5 | val score: Int = -1, 6 | val data: MutableList> = mutableListOf() 7 | ) { 8 | companion object { 9 | fun empty() = mutableListOf( 10 | ScoreTypeModel(ScoreType.OVERALL, -2), 11 | ScoreTypeModel(ScoreType.ACCELERATION, -2), 12 | ScoreTypeModel(ScoreType.BREAKING, -2), 13 | ScoreTypeModel(ScoreType.PHONE_USAGE, -2), 14 | ScoreTypeModel(ScoreType.SPEEDING, -2), 15 | ScoreTypeModel(ScoreType.CORNERING, -2) 16 | ) 17 | } 18 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/layout/fragment_trip_details_map.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/UserRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import android.content.Context 4 | import android.graphics.Bitmap 5 | import com.telematics.domain.model.authentication.User 6 | 7 | interface UserRepo { 8 | 9 | suspend fun saveDeviceToken(deviceToken: String?) 10 | suspend fun getDeviceToken(): String 11 | 12 | suspend fun saveUserId(uId: String?) 13 | suspend fun getUserId(): String? 14 | 15 | suspend fun getUser(): User 16 | suspend fun saveUser(user: User) 17 | 18 | suspend fun getUserPicture(context: Context): Bitmap 19 | 20 | suspend fun needOnboarding(): Boolean 21 | suspend fun setNeedOnboarding(need: Boolean) 22 | 23 | suspend fun clear() 24 | } -------------------------------------------------------------------------------- /features/reward/src/main/res/navigation/reward_nav_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_trip_bubble_taxi.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /features/obd/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 11 | 15 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/api/TripEventTypeApi.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.api 2 | 3 | import com.telematics.data.model.tracking.ChangeEventBody 4 | import retrofit2.http.Body 5 | import retrofit2.http.Header 6 | import retrofit2.http.POST 7 | import retrofit2.http.Path 8 | 9 | interface TripEventTypeApi { 10 | 11 | @POST("events/reportwrongeventtype/v1/{trackToken}") 12 | suspend fun changeEvent( 13 | @Header("DeviceToken") deviceToken: String, 14 | @Path("trackToken") trackToken: String, 15 | @Body body: ChangeEventBody 16 | ) 17 | 18 | @POST("track/{trackId}/setdeleted/v1") 19 | suspend fun setDeleted( 20 | @Path("trackId") trackId: String, 21 | @Header("DeviceToken") deviceToken: String 22 | ) 23 | } -------------------------------------------------------------------------------- /features/feed/src/main/java/com/telematics/features/feed/FeedFeatureHost.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.feed 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.telematics.feed.databinding.FragmentFeedFeatureHostBinding 9 | 10 | class FeedFeatureHost : Fragment() { 11 | 12 | lateinit var binding: FragmentFeedFeatureHostBinding 13 | 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View { 19 | binding = FragmentFeedFeatureHostBinding.inflate(inflater, container, false) 20 | return binding.root 21 | } 22 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/layout/fragment_feed_feature_host.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/carservice/Vehicle.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.carservice 2 | 3 | import java.io.Serializable 4 | 5 | data class Vehicle( 6 | var plateNumber: String? = "", 7 | var vin: String? = "", 8 | var manufacturer: String? = "", 9 | var manufacturerId: Int? = null, 10 | var model: String? = "", 11 | var modelId: Int? = null, 12 | var name: String? = "", 13 | var carYear: Int? = null, 14 | var initialMileage: String? = "", 15 | 16 | var token: String? = "", 17 | var activated: Boolean = false, 18 | 19 | var company: String? = "", 20 | var type: String? = "", 21 | var specialMarks: String? = "", 22 | var nvic: String? = "", 23 | var vehicleIdString: String? = "" 24 | ) : Serializable -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/on_demand/DashboardOnDemandJob.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.on_demand 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity(tableName = "DashboardOnDemandJob") 7 | data class DashboardOnDemandJob( 8 | val name: String, 9 | val state: String, 10 | val createTime: Long //use for sort by date 11 | ) { 12 | 13 | @PrimaryKey(autoGenerate = true) 14 | var key: Int = 0 15 | 16 | val getTag: String 17 | get() { 18 | return name 19 | } 20 | 21 | val getOriginName: String 22 | get() { 23 | return createTime.toString() 24 | } 25 | 26 | val getName: String 27 | get() { 28 | return name 29 | } 30 | } -------------------------------------------------------------------------------- /features/reward/src/main/res/layout/fragment_reward_feature_host.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/MainApplication.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad 2 | 3 | import android.app.Application 4 | import androidx.appcompat.app.AppCompatDelegate 5 | import com.telematics.data.extentions.isExactAlarmGranted 6 | import com.telematics.data.tracking.TrackingUseCase 7 | import dagger.hilt.android.HiltAndroidApp 8 | import javax.inject.Inject 9 | 10 | @HiltAndroidApp 11 | class MainApplication : Application() { 12 | 13 | @Inject 14 | lateinit var trackingUseCase: TrackingUseCase 15 | 16 | override fun onCreate() { 17 | super.onCreate() 18 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) 19 | 20 | if (isExactAlarmGranted(this)) { 21 | trackingUseCase.initializeSdk() 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /features/account/src/main/res/layout/fragment_account_feature_host.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_rect_checkbox_fill.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /features/account/src/main/res/layout/account_navigation_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/layout/fragment_leaderboard_feature_host.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/ui/onboarding/OnboardingViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad.ui.onboarding 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import com.telematics.domain.repository.UserRepo 6 | import kotlinx.coroutines.Dispatchers 7 | import kotlinx.coroutines.flow.flow 8 | import kotlinx.coroutines.flow.flowOn 9 | import kotlinx.coroutines.flow.launchIn 10 | import javax.inject.Inject 11 | 12 | class OnboardingViewModel @Inject constructor( 13 | private val userRepo: UserRepo 14 | ) : ViewModel() { 15 | 16 | fun onboardingScreenComplete() { 17 | 18 | flow { 19 | emit(userRepo.setNeedOnboarding(false)) 20 | } 21 | .flowOn(Dispatchers.IO) 22 | .launchIn(viewModelScope) 23 | } 24 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_dash_arrow_down_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /features/account/src/main/java/com/telematics/features/account/AccountFeatureHost.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.account 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.telematics.features.account.databinding.FragmentAccountFeatureHostBinding 9 | 10 | class AccountFeatureHost : Fragment() { 11 | 12 | private lateinit var binding: FragmentAccountFeatureHostBinding 13 | 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View { 19 | binding = FragmentAccountFeatureHostBinding.inflate(inflater, container, false) 20 | return binding.root 21 | } 22 | } -------------------------------------------------------------------------------- /features/leaderboard/src/main/java/com/telematics/features/leaderboard/LeaderboardFeatureHost.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.leaderboard 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import com.telematics.leaderboard.databinding.FragmentLeaderboardFeatureHostBinding 9 | 10 | class LeaderboardFeatureHost : Fragment() { 11 | 12 | lateinit var binding: FragmentLeaderboardFeatureHostBinding 13 | 14 | override fun onCreateView( 15 | inflater: LayoutInflater, 16 | container: ViewGroup?, 17 | savedInstanceState: Bundle? 18 | ): View { 19 | binding = FragmentLeaderboardFeatureHostBinding.inflate(inflater, container, false) 20 | return binding.root 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/main_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/tracking/MeasuresFormatter.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.tracking 2 | 3 | import com.telematics.domain.model.measures.DistanceMeasure 4 | import java.util.Date 5 | 6 | 7 | interface MeasuresFormatter { 8 | 9 | fun getFullNewDate(date: Date?): String 10 | fun getDateMonthDay(date: Date?): String 11 | fun parseDate(date: String): Date? 12 | fun getTime(date: Date?): String 13 | fun getDateYearTime(date: Date?): String 14 | 15 | fun parseFullNewDate(date: String): Date? 16 | fun getDateWithTime(date: Date?): String 17 | 18 | fun getDistanceByKm(km: Double): Double 19 | fun getDistanceByKm(km: Float): Double 20 | fun getDistanceByKm(km: Int): Double 21 | fun getDistanceMeasureValue(): DistanceMeasure 22 | 23 | fun getDateForDemandMode(time: Long?): String 24 | } -------------------------------------------------------------------------------- /core/sdkhelper/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/ResourceExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import android.annotation.SuppressLint 4 | import android.content.Context 5 | import android.content.res.Resources 6 | import android.graphics.drawable.Drawable 7 | import android.os.Build 8 | 9 | @Suppress("DEPRECATION") 10 | fun Resources.color(colorRes: Int) = 11 | if (Build.VERSION.SDK_INT >= 23) { 12 | this.getColor(colorRes, null) 13 | } else { 14 | this.getColor(colorRes) 15 | } 16 | 17 | @SuppressLint("ObsoleteSdkInt") 18 | @Suppress("DEPRECATION") 19 | fun Resources.drawable(drawableRes: Int, context: Context): Drawable = 20 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 21 | this.getDrawable(drawableRes, context.theme) 22 | } else { 23 | this.getDrawable(drawableRes) 24 | } -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/UserServicesRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.LoginType 4 | import com.telematics.domain.model.RegistrationApiData 5 | import com.telematics.domain.model.SessionData 6 | import com.telematics.domain.model.authentication.IUser 7 | import com.telematics.domain.model.company_id.InstanceName 8 | 9 | interface UserServicesRepo { 10 | suspend fun login(login: String, password: String, loginType: LoginType): SessionData 11 | suspend fun logout() 12 | suspend fun loginWithDeviceToken(deviceToken: String): SessionData 13 | suspend fun registration(): RegistrationApiData 14 | suspend fun updateUser(user: IUser): SessionData 15 | suspend fun updateUserPicture(path: String) 16 | suspend fun changeCompanyId(companyId: String): InstanceName 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/di/DatabaseModule.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad.di 2 | 3 | import android.content.Context 4 | import com.telematics.data.db_room.AppDatabase 5 | import com.telematics.data.db_room.OnDemandDao 6 | import dagger.Module 7 | import dagger.Provides 8 | import dagger.hilt.InstallIn 9 | import dagger.hilt.android.qualifiers.ApplicationContext 10 | import dagger.hilt.components.SingletonComponent 11 | import javax.inject.Singleton 12 | 13 | @InstallIn(SingletonComponent::class) 14 | @Module 15 | class DatabaseModule { 16 | @Provides 17 | @Singleton 18 | fun provideAppDatabase( 19 | @ApplicationContext appContext: Context 20 | ): AppDatabase = AppDatabase(appContext) 21 | 22 | @Provides 23 | @Singleton 24 | fun provideOnDemandDao(appDatabase: AppDatabase): OnDemandDao = appDatabase.onDemandDao() 25 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_event_trash.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /features/account/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 16 | 19 | 22 | 25 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -keep public class com.telematicssdk.auth.** {*;} -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/repository/RewardRepo.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.repository 2 | 3 | import com.telematics.domain.model.reward.DailyLimitData 4 | import com.telematics.domain.model.reward.DriveCoinsDetailedData 5 | import com.telematics.domain.model.reward.DriveCoinsDuration 6 | import com.telematics.domain.model.reward.DriveCoinsTotalData 7 | import com.telematics.domain.model.reward.Streak 8 | import com.telematics.domain.model.reward.StreaksData 9 | 10 | interface RewardRepo { 11 | 12 | suspend fun getDaily(): List> 13 | suspend fun getDailyLimit(): DailyLimitData 14 | suspend fun getTotalCoinsByDuration(duration: DriveCoinsDuration): DriveCoinsTotalData 15 | suspend fun getDetailed(duration: DriveCoinsDuration): DriveCoinsDetailedData 16 | suspend fun getStreaks(): List 17 | suspend fun getDrivingStreaks(): StreaksData 18 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/CarUpdateBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class CarUpdateBody( 6 | @SerializedName("Name") val name: String? = "", 7 | @SerializedName("PlateNumber") val plateNumber: String? = "", 8 | @SerializedName("Vin") val vin: String? = "", 9 | @SerializedName("ManufacturerId") val manufacturerId: Int? = null, 10 | @SerializedName("ManufacturerName") val manufacturer: String? = "", 11 | @SerializedName("ModelId") val modelId: Int? = null, 12 | @SerializedName("ModelName") val model: String? = "", 13 | @SerializedName("TypeName") val type: String? = "", 14 | @SerializedName("CarYear") val carYear: Int? = 0, 15 | @SerializedName("InitialMilage") val initialMileage: String? = "", 16 | @SerializedName("EntityStatus") val status: Int? = 1 17 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/api/LeaderboardApi.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.api 2 | 3 | import com.telematics.data.model.rest.ApiResponse 4 | import com.telematics.data.model.statistics.LeaderboardResponse 5 | import com.telematics.data.model.statistics.LeaderboardUserResponse 6 | import retrofit2.http.GET 7 | import retrofit2.http.Header 8 | import retrofit2.http.Query 9 | 10 | interface LeaderboardApi { 11 | 12 | @GET("v1/Leaderboard") 13 | suspend fun getLeaderBoard( 14 | @Header("DeviceToken") deviceToken: String, 15 | @Query("usersCount") userCount: Int? = 10, 16 | @Query("roundUsersCount") roundUsersCount: Int? = 2, 17 | @Query("ScoringRate") scoringRate: Int 18 | ): ApiResponse 19 | 20 | @GET("v1/Leaderboard/user") 21 | suspend fun getUserLeaderboard( 22 | @Header("DeviceToken") deviceToken: String 23 | ): ApiResponse 24 | } -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_leaderboard_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /data/src/main/res/drawable/ic_wizard_page_location_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /features/account/src/main/res/layout/vehicles_choose_item_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | -------------------------------------------------------------------------------- /features/obd/src/main/res/layout/vehicles_choose_item_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | -------------------------------------------------------------------------------- /features/feed/src/main/java/com/telematics/features/feed/model/SpeedType.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.features.feed.model 2 | 3 | import androidx.annotation.ColorRes 4 | import com.telematics.feed.R 5 | 6 | enum class SpeedType constructor( 7 | val type: String, 8 | @param:ColorRes @field:ColorRes val colorResId: Int 9 | ) { 10 | 11 | UNKNOWN("", R.color.colorSpeedTypeNormal), 12 | NORMAL("norm", R.color.colorSpeedTypeNormal), 13 | MID("mid", R.color.colorSpeedTypeMid), 14 | HIGH("high", R.color.colorSpeedTypeHigh); 15 | 16 | companion object { 17 | 18 | fun from(type: String?): SpeedType { 19 | for (speedType in values()) { 20 | if (speedType.type == type) { 21 | return speedType 22 | } 23 | } 24 | return UNKNOWN 25 | } 26 | 27 | @ColorRes 28 | fun getColor(type: String?): Int { 29 | return from(type).colorResId 30 | } 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/login/UserUpdateBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.login 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class UserUpdateBody( 6 | @SerializedName("Phone") 7 | val phone: String? = null, 8 | @SerializedName("Email") 9 | val email: String? = null, 10 | @SerializedName("address") 11 | val address: String? = null, 12 | @SerializedName("birthday") 13 | val birthday: String? = null, 14 | @SerializedName("childrenCount") 15 | val childrenCount: Int? = null, 16 | @SerializedName("firstName") 17 | val firstName: String? = null, 18 | @SerializedName("gender") 19 | val gender: String? = null, 20 | @SerializedName("lastName") 21 | val lastName: String? = null, 22 | @SerializedName("maritalStatus") 23 | val maritalStatus: String? = null, 24 | @SerializedName("ClientID") 25 | val clientId: String? = null, 26 | @SerializedName("imageUrl") 27 | val imageUrl: String? = null 28 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/statistics/LeaderboardUserBody.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.statistics 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class LeaderboardUserBody( 6 | @SerializedName("DeviceToken") 7 | val deviceToken: String?, 8 | @SerializedName("Distance") 9 | val distance: Double?, 10 | @SerializedName("Duration") 11 | val duration: Double?, 12 | @SerializedName("FirstName") 13 | val firstName: String?, 14 | @SerializedName("Image") 15 | val image: String?, 16 | @SerializedName("IsCurrentUser") 17 | val isCurrentUser: Boolean?, 18 | @SerializedName("LastName") 19 | val lastName: String?, 20 | @SerializedName("Nickname") 21 | val nickname: String?, 22 | @SerializedName("Place") 23 | val place: Int?, 24 | @SerializedName("Trips") 25 | val trips: Int?, 26 | @SerializedName("Value") 27 | val value: Double?, 28 | @SerializedName("ValuePerc") 29 | val valuePerc: Double? 30 | ) 31 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/leaderboard/LeaderboardUserItems.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.leaderboard 2 | 3 | import androidx.recyclerview.widget.DiffUtil 4 | 5 | data class LeaderboardUserItems( 6 | val type: LeaderboardType = LeaderboardType.Rate, 7 | val progress: Double = 0.0, 8 | val place: Int = -1, 9 | val progressMax: Int = 100 10 | ) { 11 | companion object { 12 | val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { 13 | override fun areItemsTheSame( 14 | oldItem: LeaderboardUserItems, 15 | newItem: LeaderboardUserItems 16 | ): Boolean { 17 | return oldItem == newItem 18 | } 19 | 20 | override fun areContentsTheSame( 21 | oldItem: LeaderboardUserItems, 22 | newItem: LeaderboardUserItems 23 | ): Boolean { 24 | return oldItem == newItem 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_event_message_round.xml: -------------------------------------------------------------------------------- 1 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/ic_acceleration_arrow.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 18 | 23 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_dot_a_trip_v.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 14 | 17 | -------------------------------------------------------------------------------- /features/obd/src/main/java/ui/step_unknown_error/CouldNotConnectFragment.kt: -------------------------------------------------------------------------------- 1 | package ui.step_unknown_error 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import com.telematics.content.utils.BaseFragment 8 | import com.telematics.obd.databinding.FragmentOdbOopsBinding 9 | 10 | class CouldNotConnectFragment : BaseFragment() { 11 | 12 | private lateinit var binding: FragmentOdbOopsBinding 13 | 14 | override fun onCreateView( 15 | inflater: LayoutInflater, container: ViewGroup?, 16 | savedInstanceState: Bundle? 17 | ): View { 18 | binding = FragmentOdbOopsBinding.inflate(inflater, container, false) 19 | return binding.root 20 | } 21 | 22 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 23 | super.onViewCreated(view, savedInstanceState) 24 | 25 | binding.tryAgainButton.setOnClickListener { 26 | onBackPressed() 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /features/leaderboard/src/main/res/layout/fragment_leaderboard_details_page.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /features/feed/src/main/res/navigation/feed_nav_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 16 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_arrow_double_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /content/src/main/res/drawable/ic_login_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 20 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_empty_dashboard_last_trip_warning.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/ViewExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import android.content.res.ColorStateList 4 | import android.widget.ProgressBar 5 | import androidx.core.content.ContextCompat 6 | import com.telematics.data.R 7 | 8 | fun ProgressBar.setProgressWithColor(p: Int) { 9 | 10 | val newP = if (p > 100) 100 else if (p < 0) 0 else p 11 | progressTintList = 12 | ColorStateList.valueOf(ContextCompat.getColor(this.context, p.getColorByScore())) 13 | progress = newP 14 | } 15 | 16 | fun Int.getColorByScore(): Int { 17 | return when (if (this > 100) 100 else if (this < 0) 0 else this) { 18 | in 81..100 -> { 19 | R.color.colorSpeedTypeNormal 20 | } 21 | 22 | in 61..80 -> { 23 | R.color.colorSpeedTypeMid 24 | } 25 | 26 | in 40..60 -> { 27 | R.color.colorSpeedTypeMid2 28 | } 29 | 30 | in 0..39 -> { 31 | R.color.colorSpeedTypeHigh 32 | } 33 | 34 | else -> R.color.colorSpeedTypeNormal 35 | } 36 | } -------------------------------------------------------------------------------- /features/dashboard/src/main/res/drawable/ic_empty_dashboard_last_trip_warning.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /features/feed/src/main/res/drawable/ic_dash_arrow_up_gray.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /content/src/main/java/com/telematics/content/utils/TryOpenLink.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.content.utils 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import android.webkit.URLUtil 7 | 8 | class TryOpenLink(private val context: Context) { 9 | fun open(link: String): Boolean { 10 | 11 | if (!URLUtil.isValidUrl(link)) return false 12 | 13 | val openIntent = Intent(Intent.ACTION_VIEW).apply { 14 | addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 15 | addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) 16 | setDataAndType(Uri.parse(link), "text/html") 17 | } 18 | 19 | return try { 20 | context.startActivity(openIntent) 21 | true 22 | } catch (ex: Exception) { 23 | try { 24 | openIntent.addCategory(Intent.CATEGORY_BROWSABLE) 25 | context.startActivity(openIntent) 26 | true 27 | } catch (ex: Exception) { 28 | false 29 | } 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/extentions/FlowExt.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.extentions 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import com.telematics.data.utils.Resource 5 | import kotlinx.coroutines.flow.Flow 6 | import kotlinx.coroutines.flow.catch 7 | import kotlinx.coroutines.flow.onEach 8 | import kotlinx.coroutines.flow.onStart 9 | 10 | fun Flow.setLiveData(liveData: MutableLiveData>): Flow { 11 | return this 12 | .onStart { 13 | liveData.postValue(Resource.Loading()) 14 | } 15 | .onEach { 16 | liveData.postValue(Resource.Success(it)) 17 | } 18 | .catch { 19 | liveData.postValue(Resource.Failure(it)) 20 | } 21 | } 22 | 23 | fun Flow.setLiveDataForResult(liveData: MutableLiveData>): Flow { 24 | return this 25 | .onStart { 26 | 27 | } 28 | .onEach { 29 | liveData.postValue(Result.success(it)) 30 | } 31 | .catch { 32 | liveData.postValue(Result.failure(it)) 33 | } 34 | } -------------------------------------------------------------------------------- /features/account/src/main/res/drawable-xxxhdpi/ic_wizard_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | raxel-test.raxeltelematics.com 5 | 6 | 7 | user.telematicssdk.com 8 | 9 | 10 | leaderboard.telematicssdk.com 11 | 12 | 13 | test.raxeltelematics.com 14 | 15 | 16 | telematicssdk.com 17 | 18 | 19 | test.telematicssdk.com 20 | 21 | -------------------------------------------------------------------------------- /domain/src/main/java/com/telematics/domain/model/leaderboard/LeaderboardUser.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.domain.model.leaderboard 2 | 3 | data class LeaderboardUser( 4 | val accelerationPerc: Double = 0.0, 5 | val accelerationPlace: Int = 0, 6 | val accelerationScore: Double = 0.0, 7 | val decelerationPerc: Double = 0.0, 8 | val decelerationPlace: Int = 0, 9 | val decelerationScore: Double = 0.0, 10 | val distance: Double = 0.0, 11 | val distractionPerc: Double = 0.0, 12 | val distractionPlace: Int = 0, 13 | val distractionScore: Double = 0.0, 14 | val duration: Double = 0.0, 15 | val perc: Double = 0.0, 16 | val place: Int = 0, 17 | val score: Double = 0.0, 18 | val speedingPerc: Double = 0.0, 19 | val speedingPlace: Int = 0, 20 | val speedingScore: Double = 0.0, 21 | val trips: Int = 0, 22 | val turnPerc: Double = 0.0, 23 | val turnPlace: Int = 0, 24 | val turnScore: Double = 0.0, 25 | val usersNumber: Int = 0, 26 | val tripsPlace: Int = 0, 27 | val durationPlace: Int = 0, 28 | val distancePlace: Int = 0 29 | ) -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/model/carservice/CarRest.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.model.carservice 2 | 3 | import com.google.gson.annotations.SerializedName 4 | 5 | data class CarRest( 6 | @SerializedName("Company") val company: String?, 7 | @SerializedName("Name") val name: String?, 8 | @SerializedName("PlateNumber") val plateNumber: String?, 9 | @SerializedName("Vin") val vin: String?, 10 | @SerializedName("ManufacturerId") val manufacturerId: Int?, 11 | @SerializedName("Manufacturer") val manufacturer: String?, 12 | @SerializedName("ModelId") val modelId: Int?, 13 | @SerializedName("Model") val model: String?, 14 | @SerializedName("Type") val type: String?, 15 | @SerializedName("CarYear") val carYear: Int?, 16 | @SerializedName("SpecialMarks") val specialMarks: String?, 17 | @SerializedName("Nvic") val nvic: String?, 18 | @SerializedName("InitialMilage") val initialMilage: String?, 19 | @SerializedName("VehicleIdString") val vehicleIdString: String?, 20 | @SerializedName("Token") val token: String?, 21 | var activated: Boolean 22 | ) -------------------------------------------------------------------------------- /features/reward/src/main/res/drawable/drive_coins_eco_score.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /features/obd/src/main/res/layout/elm_device_item_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/ui/login/LoginViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad.ui.login 2 | 3 | import androidx.lifecycle.LiveData 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.ViewModel 6 | import androidx.lifecycle.viewModelScope 7 | import com.telematics.data.extentions.setLiveDataForResult 8 | import com.telematics.features.account.use_case.LoginUseCase 9 | import kotlinx.coroutines.Dispatchers 10 | import kotlinx.coroutines.flow.flowOn 11 | import kotlinx.coroutines.flow.launchIn 12 | import javax.inject.Inject 13 | 14 | class LoginViewModel @Inject constructor( 15 | private var loginUseCase: LoginUseCase 16 | ) : ViewModel() { 17 | 18 | fun authorize( 19 | login: String, 20 | password: String 21 | ): LiveData> { 22 | 23 | val authorizeState = MutableLiveData>() 24 | 25 | loginUseCase.authorize(login, password) 26 | .flowOn(Dispatchers.IO) 27 | .setLiveDataForResult(authorizeState) 28 | .launchIn(viewModelScope) 29 | 30 | return authorizeState 31 | } 32 | } -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | includeBuild("build-logic") 3 | repositories { 4 | google() 5 | mavenCentral() 6 | gradlePluginPortal() 7 | } 8 | } 9 | dependencyResolutionManagement { 10 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 11 | gradle.startParameter.excludedTaskNames.addAll(listOf(":build-logic:convention:testClasses")) 12 | repositories { 13 | google() 14 | mavenCentral() 15 | //jcenter() // Warning: this repository is going to shut down soon 16 | maven { url = uri("https://jitpack.io") } 17 | maven { url = uri("https://s3.us-east-2.amazonaws.com/android.telematics.sdk.production/") } 18 | maven { url = uri("file://${rootDir}/repo") } 19 | } 20 | } 21 | include( 22 | ":app", 23 | ":data", 24 | ":domain", 25 | ":content", 26 | ":authentication", 27 | ":features:account", 28 | ":features:dashboard", 29 | ":features:feed", 30 | ":features:leaderboard", 31 | ":features:reward", 32 | ":features:obd", 33 | ":core:sdkhelper" 34 | ) 35 | rootProject.name = "Telematics" 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/telematics/zenroad/ui/settings/company_id/CompanyIdViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.zenroad.ui.settings.company_id 2 | 3 | import androidx.lifecycle.LiveData 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.ViewModel 6 | import androidx.lifecycle.viewModelScope 7 | import com.telematics.data.extentions.setLiveDataForResult 8 | import com.telematics.domain.model.company_id.InstanceName 9 | import com.telematics.features.account.use_case.LoginUseCase 10 | import kotlinx.coroutines.Dispatchers 11 | import kotlinx.coroutines.flow.flowOn 12 | import kotlinx.coroutines.flow.launchIn 13 | import javax.inject.Inject 14 | 15 | class CompanyIdViewModel @Inject constructor( 16 | private val loginUseCase: LoginUseCase 17 | ) : ViewModel() { 18 | 19 | fun send(companyId: String): LiveData> { 20 | 21 | val logoutState = MutableLiveData>() 22 | loginUseCase.changeCompanyId(companyId) 23 | .flowOn(Dispatchers.IO) 24 | .setLiveDataForResult(logoutState) 25 | .launchIn(viewModelScope) 26 | return logoutState 27 | } 28 | } -------------------------------------------------------------------------------- /data/src/main/java/com/telematics/data/db_room/OnDemandDao.kt: -------------------------------------------------------------------------------- 1 | package com.telematics.data.db_room 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.telematics.domain.model.on_demand.DashboardOnDemandJob 8 | 9 | @Dao 10 | interface OnDemandDao { 11 | 12 | @Query("SELECT * FROM DashboardOnDemandJob") 13 | fun getOnDemandJobList(): List 14 | 15 | @Insert(onConflict = OnConflictStrategy.REPLACE) 16 | fun putOnDemandJobList(list: List) 17 | 18 | @Query("DELETE FROM DashboardOnDemandJob WHERE state = :state") 19 | fun removeOnDemandJobByState(state: String) 20 | 21 | @Query("UPDATE DashboardOnDemandJob SET state = :newState WHERE createTime = :originJobName") 22 | fun updateOnDemandJob(originJobName: String, newState: String) 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | fun addOnDemandJob(job: DashboardOnDemandJob) 26 | 27 | @Query("DELETE FROM DashboardOnDemandJob WHERE createTime = :originJobName") 28 | fun removeOnDemandJob(originJobName: String) 29 | } -------------------------------------------------------------------------------- /features/reward/src/main/res/layout/fragment_streaks.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 22 | 23 | --------------------------------------------------------------------------------