├── .gitignore ├── .idea ├── .name ├── codeStyles │ └── Project.xml ├── compiler.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jarRepositories.xml ├── misc.xml ├── render.experimental.xml ├── runConfigurations.xml └── statistic.xml ├── DesignMockups ├── 9dots.png ├── 9dotsBlue.png ├── detailsPage.png ├── layoutPage.png ├── masterPage.png ├── masterPageLight.png └── rosLogo.png ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── release │ ├── app-release.apk │ └── output-metadata.json └── src │ └── main │ ├── AndroidManifest.xml │ ├── ic_launcher-web.png │ ├── java │ └── com │ │ └── schneewittchen │ │ └── rosandroid │ │ ├── domain │ │ └── RosDomain.java │ │ ├── model │ │ ├── db │ │ │ ├── BaseDao.java │ │ │ ├── ConfigDao.java │ │ │ ├── DataStorage.java │ │ │ ├── MasterDao.java │ │ │ ├── SSHDao.java │ │ │ └── WidgetDao.java │ │ ├── entities │ │ │ ├── ConfigEntity.java │ │ │ ├── MasterEntity.java │ │ │ ├── SSHEntity.java │ │ │ ├── WidgetCountEntity.java │ │ │ ├── WidgetStorageData.java │ │ │ └── widgets │ │ │ │ ├── BaseEntity.java │ │ │ │ ├── GroupEntity.java │ │ │ │ ├── I2DLayerEntity.java │ │ │ │ ├── IPositionEntity.java │ │ │ │ ├── IPublisherEntity.java │ │ │ │ ├── ISilentEntity.java │ │ │ │ ├── ISubscriberEntity.java │ │ │ │ ├── PublisherLayerEntity.java │ │ │ │ ├── PublisherWidgetEntity.java │ │ │ │ ├── SilentLayerEntity.java │ │ │ │ ├── SilentWidgetEntity.java │ │ │ │ ├── SubscriberLayerEntity.java │ │ │ │ └── SubscriberWidgetEntity.java │ │ ├── general │ │ │ ├── GsonWidgetParser.java │ │ │ └── WidgetSerializationAdapter.java │ │ └── repositories │ │ │ ├── ConfigRepository.java │ │ │ ├── ConfigRepositoryImpl.java │ │ │ ├── SshRepository.java │ │ │ ├── SshRepositoryImpl.java │ │ │ └── rosRepo │ │ │ ├── RosRepository.java │ │ │ ├── TransformProvider.java │ │ │ ├── connection │ │ │ ├── ConnectionCheckTask.java │ │ │ ├── ConnectionListener.java │ │ │ └── ConnectionType.java │ │ │ ├── message │ │ │ ├── RosData.java │ │ │ └── Topic.java │ │ │ └── node │ │ │ ├── AbstractNode.java │ │ │ ├── BaseData.java │ │ │ ├── NodeMainExecutorService.java │ │ │ ├── NodeMainExecutorServiceListener.java │ │ │ ├── PubNode.java │ │ │ └── SubNode.java │ │ ├── ui │ │ ├── activity │ │ │ └── MainActivity.java │ │ ├── fragments │ │ │ ├── config │ │ │ │ ├── ConfigListAdapter.java │ │ │ │ ├── ConfigurationsFragment.java │ │ │ │ ├── CustomRVItemTouchListener.java │ │ │ │ ├── CustumLinearLayoutManager.java │ │ │ │ └── RecyclerViewItemClickListener.java │ │ │ ├── details │ │ │ │ ├── DetailContentFragment.java │ │ │ │ ├── DetailMainFragment.java │ │ │ │ ├── RecyclerItemTouchHelper.java │ │ │ │ ├── RecyclerWidgetItemTouchHelper.java │ │ │ │ ├── WidgetDetailListAdapter.java │ │ │ │ └── WidgetListAdapter.java │ │ │ ├── intro │ │ │ │ ├── IntroFragment.java │ │ │ │ ├── IntroViewPagerAdapter.java │ │ │ │ └── ScreenItem.java │ │ │ ├── main │ │ │ │ ├── MainFragment.java │ │ │ │ └── OnBackPressedListener.java │ │ │ ├── master │ │ │ │ └── MasterFragment.java │ │ │ ├── ssh │ │ │ │ ├── SshFragment.java │ │ │ │ └── SshRecyclerViewAdapter.java │ │ │ └── viz │ │ │ │ ├── VizFragment.java │ │ │ │ └── WidgetViewGroup.java │ │ ├── general │ │ │ ├── DataListener.java │ │ │ ├── MatrixGestureDetector.java │ │ │ ├── Position.java │ │ │ ├── TextChangeListener.java │ │ │ ├── WidgetChangeListener.java │ │ │ └── WidgetEditListener.java │ │ ├── opengl │ │ │ ├── layer │ │ │ │ ├── CameraControl.java │ │ │ │ └── CameraControlListener.java │ │ │ ├── shape │ │ │ │ ├── BaseShape.java │ │ │ │ ├── GoalShape.java │ │ │ │ ├── MetricSpacePoiShape.java │ │ │ │ ├── MetricSpacePolygon.java │ │ │ │ ├── MetricSpacePoseShape.java │ │ │ │ ├── PixelSpacePoiShape.java │ │ │ │ ├── PixelSpacePoseShape.java │ │ │ │ ├── Shape.java │ │ │ │ ├── TextShape.java │ │ │ │ ├── TextShapeFactory.java │ │ │ │ ├── TriangleFanShape.java │ │ │ │ └── Triangulate.java │ │ │ └── visualisation │ │ │ │ ├── OpenGlDrawable.java │ │ │ │ ├── OpenGlTransform.java │ │ │ │ ├── ROSColor.java │ │ │ │ ├── RotateGestureDetector.java │ │ │ │ ├── TextureBitmap.java │ │ │ │ ├── Tile.java │ │ │ │ ├── Vertices.java │ │ │ │ ├── Viewport.java │ │ │ │ ├── VisualizationView.java │ │ │ │ ├── XYOrthographicCamera.java │ │ │ │ └── XYOrthographicRenderer.java │ │ └── views │ │ │ ├── CharacterWrapTextView.java │ │ │ ├── ScaleView.java │ │ │ ├── details │ │ │ ├── BaseDetailSubscriberVH.java │ │ │ ├── BaseDetailViewHolder.java │ │ │ ├── DetailViewHolder.java │ │ │ ├── IBaseViewHolder.java │ │ │ ├── LayerViewHolder.java │ │ │ ├── PublisherLayerViewHolder.java │ │ │ ├── PublisherViewHolder.java │ │ │ ├── PublisherWidgetViewHolder.java │ │ │ ├── SilentWidgetViewHolder.java │ │ │ ├── SubscriberLayerViewHolder.java │ │ │ ├── SubscriberViewHolder.java │ │ │ ├── SubscriberWidgetViewHolder.java │ │ │ ├── WidgetGroupViewHolder.java │ │ │ └── WidgetViewHolder.java │ │ │ └── widgets │ │ │ ├── IBaseView.java │ │ │ ├── IPublisherView.java │ │ │ ├── ISubscriberView.java │ │ │ ├── LayerView.java │ │ │ ├── PublisherLayerView.java │ │ │ ├── PublisherWidgetView.java │ │ │ ├── SubscriberLayerView.java │ │ │ ├── SubscriberWidgetView.java │ │ │ ├── WidgetGroupView.java │ │ │ └── WidgetView.java │ │ ├── utility │ │ ├── Constants.java │ │ ├── CustomSpinner.java │ │ ├── LambdaTask.java │ │ ├── TiledBitmap.java │ │ ├── Utils.java │ │ └── WidgetDiffCallback.java │ │ ├── viewmodel │ │ ├── ConfigurationsViewModel.java │ │ ├── DetailsViewModel.java │ │ ├── IntroViewModel.java │ │ ├── MainViewModel.java │ │ ├── MasterViewModel.java │ │ ├── SshViewModel.java │ │ └── VizViewModel.java │ │ └── widgets │ │ ├── battery │ │ ├── BatteryDetailVH.java │ │ ├── BatteryEntity.java │ │ └── BatteryView.java │ │ ├── button │ │ ├── ButtonData.java │ │ ├── ButtonDetailVH.java │ │ ├── ButtonEntity.java │ │ └── ButtonView.java │ │ ├── camera │ │ ├── CameraData.java │ │ ├── CameraDetailVH.java │ │ ├── CameraEntity.java │ │ └── CameraView.java │ │ ├── debug │ │ ├── DebugData.java │ │ ├── DebugDetailVH.java │ │ ├── DebugEntity.java │ │ └── DebugView.java │ │ ├── gps │ │ ├── GpsData.java │ │ ├── GpsDetailVH.java │ │ ├── GpsEntity.java │ │ └── GpsView.java │ │ ├── gridmap │ │ ├── GridMapDetailVH.java │ │ ├── GridMapEntity.java │ │ └── GridMapView.java │ │ ├── joystick │ │ ├── JoystickData.java │ │ ├── JoystickDetailVH.java │ │ ├── JoystickEntity.java │ │ └── JoystickView.java │ │ ├── label │ │ ├── LabelData.java │ │ ├── LabelDetailVH.java │ │ ├── LabelEntity.java │ │ └── LabelView.java │ │ ├── laserscan │ │ ├── LaserScanDetailVH.java │ │ ├── LaserScanEntity.java │ │ └── LaserScanView.java │ │ ├── logger │ │ ├── LoggerData.java │ │ ├── LoggerDetailVH.java │ │ ├── LoggerEntity.java │ │ └── LoggerView.java │ │ ├── path │ │ ├── PathDetailVH.java │ │ ├── PathEntity.java │ │ └── PathView.java │ │ ├── pose │ │ ├── PoseDetailVH.java │ │ ├── PoseEntity.java │ │ └── PoseView.java │ │ ├── rqtplot │ │ ├── PlotDataList.java │ │ ├── RqtPlotData.java │ │ ├── RqtPlotDetailVH.java │ │ ├── RqtPlotEntity.java │ │ ├── RqtPlotView.java │ │ ├── XAxis.java │ │ └── YAxis.java │ │ ├── touchgoal │ │ ├── TouchGoalData.java │ │ ├── TouchGoalDetailVH.java │ │ ├── TouchGoalEntity.java │ │ └── TouchGoalView.java │ │ └── viz2d │ │ ├── Viz2DDetailVH.java │ │ ├── Viz2DEntity.java │ │ └── Viz2DView.java │ └── res │ ├── anim │ └── onboarding_buttton_animation.xml │ ├── color │ └── state_button_color.xml │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── blue_circles.png │ ├── card_bg_onlyborder.xml │ ├── circle.xml │ ├── empty_divider.xml │ ├── ic_abort_btn.xml │ ├── ic_add_white_24dp.xml │ ├── ic_arrow_forward_black_24dp.xml │ ├── ic_back_24.xml │ ├── ic_connected.xml │ ├── ic_delete_white_24dp.xml │ ├── ic_expand_less_white_24dp.xml │ ├── ic_expand_more_white_24dp.xml │ ├── ic_favorite_white_24dp.xml │ ├── ic_filter_white_24dp.xml │ ├── ic_launcher_background.xml │ ├── ic_menu_white_24dp.xml │ ├── ic_mode_edit_white_24dp.xml │ ├── ic_place_white_24dp.xml │ ├── ic_refresh.xml │ ├── ic_remove_circle_white_24dp.xml │ ├── ic_rss_feed_black_24dp.xml │ ├── ic_send.xml │ ├── ic_settings.xml │ ├── intro_config.png │ ├── intro_details.png │ ├── intro_gps.png │ ├── intro_joystick.png │ ├── intro_layers.png │ ├── intro_map.png │ ├── intro_master.png │ ├── intro_ssh.png │ ├── intro_start.png │ ├── onboarding_button_gradient_style.xml │ ├── onboarding_indicator_default.xml │ ├── onboarding_indicator_selected.xml │ ├── onboarding_indicator_selecter.xml │ ├── refresh_selector.xml │ └── update.jpg │ ├── layout │ ├── activity_main.xml │ ├── config_chooser_item.xml │ ├── detail_group_widget.xml │ ├── detail_layer.xml │ ├── detail_publisher.xml │ ├── detail_publisher_layer.xml │ ├── detail_publisher_widget.xml │ ├── detail_subscriber.xml │ ├── detail_subscriber_layer.xml │ ├── detail_subscriber_widget.xml │ ├── detail_widget.xml │ ├── drawer_header.xml │ ├── dropdown_menu_popup_item.xml │ ├── fragent_onboarding.xml │ ├── fragment_configurations.xml │ ├── fragment_detail_content.xml │ ├── fragment_detail_main.xml │ ├── fragment_intro.xml │ ├── fragment_main.xml │ ├── fragment_master.xml │ ├── fragment_ssh.xml │ ├── fragment_viz.xml │ ├── item_widget_card_list.xml │ ├── osm_map.xml │ ├── ssh_text_view.xml │ ├── update_popup_window.xml │ ├── viz_counter.xml │ ├── viz_counter_merge.xml │ ├── viz_location_layout.xml │ ├── widget_detail_base.xml │ ├── widget_detail_battery.xml │ ├── widget_detail_button.xml │ ├── widget_detail_camera.xml │ ├── widget_detail_debug.xml │ ├── widget_detail_gps.xml │ ├── widget_detail_gridmap.xml │ ├── widget_detail_joystick.xml │ ├── widget_detail_label.xml │ ├── widget_detail_laserscan.xml │ ├── widget_detail_logger.xml │ ├── widget_detail_path.xml │ ├── widget_detail_pose.xml │ ├── widget_detail_rqtplot.xml │ ├── widget_detail_touchgoal.xml │ └── widget_detail_viz2d.xml │ ├── menu │ └── toolbar_menu.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── navigation │ └── main_navigation.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── ic_launcher_background.xml │ ├── intro.xml │ ├── strings.xml │ ├── styles.xml │ ├── update.xml │ └── widgets.xml ├── build.gradle ├── doc ├── allclasses-frame.html ├── allclasses-noframe.html ├── com │ └── schneewittchen │ │ └── rosandroid │ │ ├── domain │ │ ├── RosDomain.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── model │ │ ├── db │ │ │ ├── BaseDao.html │ │ │ ├── ConfigDao.html │ │ │ ├── ConfigDatabase.PopulateDbAsync.html │ │ │ ├── ConfigDatabase.html │ │ │ ├── DataStorage.html │ │ │ ├── MasterDao.html │ │ │ ├── SSHDao.html │ │ │ ├── WidgetCountDao.html │ │ │ ├── WidgetDao.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── entities │ │ │ ├── ConfigEntity.html │ │ │ ├── MasterEntity.html │ │ │ ├── SSHEntity.html │ │ │ ├── SubPubNoteEntity.html │ │ │ ├── WidgetCountEntity.html │ │ │ ├── WidgetEntity.html │ │ │ ├── WidgetFactory.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── repositories │ │ │ ├── ConfigModel.html │ │ │ ├── ConfigRepository.html │ │ │ ├── ConfigRepositoryImpl.html │ │ │ ├── RosRepo.NodeMainExecutorServiceConnection.html │ │ │ ├── RosRepo.html │ │ │ ├── RosRepository.html │ │ │ ├── SshRepository.html │ │ │ ├── SshRepositoryImpl.html │ │ │ ├── WidgetModel.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ └── rosRepo │ │ │ ├── RosRepository.html │ │ │ ├── WidgetData.html │ │ │ ├── connection │ │ │ ├── ConnectionCheckTask.html │ │ │ ├── ConnectionListener.html │ │ │ ├── ConnectionType.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ │ ├── message │ │ │ ├── RosMessage.html │ │ │ ├── Topic.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ │ ├── node │ │ │ ├── AbstractNode.html │ │ │ ├── NodeMainExecutorService.LocalBinder.html │ │ │ ├── NodeMainExecutorService.html │ │ │ ├── NodeMainExecutorServiceListener.html │ │ │ ├── PubNode.html │ │ │ ├── SubNode.NodeListener.html │ │ │ ├── SubNode.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── test │ │ ├── TestListener.html │ │ ├── TestListener2.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── ui │ │ ├── activity │ │ │ ├── MainActivity.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── custum_views │ │ │ ├── ScaleView.html │ │ │ ├── VirtualJoystick.html │ │ │ ├── WidgetGroup.WidgetDataListener.html │ │ │ ├── WidgetGroup.html │ │ │ ├── WidgetViewGroup.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── fragments │ │ │ ├── ConfigurationsFragment.html │ │ │ ├── DetailsFragment.html │ │ │ ├── IntroFragment.html │ │ │ ├── MainFragment.html │ │ │ ├── MasterFragment.html │ │ │ ├── SshFragment.html │ │ │ ├── VizFragment.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ └── helper │ │ │ ├── ConfigListAdapter.MyViewHolder.html │ │ │ ├── ConfigListAdapter.html │ │ │ ├── ConfigTabsPagerAdapter.html │ │ │ ├── CustomRVItemTouchListener.html │ │ │ ├── CustumLinearLayoutManager.html │ │ │ ├── IntroViewPagerAdapter.html │ │ │ ├── LinearLayoutManagerWrapper.html │ │ │ ├── LockableViewPager.html │ │ │ ├── MatrixGestureDetector.OnMatrixChangeListener.html │ │ │ ├── MatrixGestureDetector.html │ │ │ ├── OnBackPressedListener.html │ │ │ ├── RecyclerItemTouchHelper.TouchListener.html │ │ │ ├── RecyclerItemTouchHelper.html │ │ │ ├── RecyclerViewItemClickListener.html │ │ │ ├── ScreenItem.html │ │ │ ├── SshRecyclerViewAdapter.SshViewHolder.html │ │ │ ├── SshRecyclerViewAdapter.html │ │ │ ├── TextChangeListener.html │ │ │ ├── WidgetDetailListAdapter.html │ │ │ ├── WidgetDiffCallback.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── utility │ │ ├── Constants.html │ │ ├── LambdaTask.TaskRunnable.html │ │ ├── LambdaTask.html │ │ ├── ListLiveData.html │ │ ├── ObservableVariable.Listener.html │ │ ├── ObservableVariable.html │ │ ├── TiledBitmap.Options.html │ │ ├── TiledBitmap.html │ │ ├── Utils.html │ │ ├── WidgetDiffCallback.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ ├── package-tree.html │ │ └── parser │ │ │ ├── ConfigurationParser.html │ │ │ ├── ConfigurationSerializer.html │ │ │ ├── RuntimeTypeAdapterFactory.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ ├── viewmodel │ │ ├── ConfigurationsViewModel.html │ │ ├── DetailsViewModel.html │ │ ├── IntroViewModel.html │ │ ├── MainViewModel.html │ │ ├── MasterViewModel.html │ │ ├── SshViewModel.html │ │ ├── VizViewModel.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ └── widgets │ │ ├── base │ │ ├── BaseData.html │ │ ├── BaseDetailViewHolder.html │ │ ├── BaseEntity.html │ │ ├── BaseNode.html │ │ ├── BaseView.html │ │ ├── BaseViewLayout.html │ │ ├── DataListener.html │ │ ├── DetailListener.html │ │ ├── Interactable.html │ │ ├── Position.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── counter │ │ ├── CounterData.html │ │ ├── CounterView.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── gridmap │ │ ├── GridDetailVH.html │ │ ├── GridMapView.html │ │ ├── WidgetGridMapEntity.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ ├── joystick │ │ ├── JoystickData.html │ │ ├── JoystickDetailVH.html │ │ ├── JoystickEntity.html │ │ ├── JoystickNode.html │ │ ├── JoystickView.UpdateListener.html │ │ ├── JoystickView.html │ │ ├── WidgetJoystickEntity.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html │ │ └── test │ │ ├── BaseWidget.html │ │ ├── BaseWidgetGroup.html │ │ ├── GsonWidgetParser.html │ │ ├── PublisherWidget.html │ │ ├── SubscriberWidget.html │ │ ├── WidgetSerializationAdapter.html │ │ ├── WidgetStorageData.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ └── package-tree.html ├── constant-values.html ├── deprecated-list.html ├── help-doc.html ├── index-files │ ├── index-1.html │ ├── index-10.html │ ├── index-11.html │ ├── index-12.html │ ├── index-13.html │ ├── index-14.html │ ├── index-15.html │ ├── index-16.html │ ├── index-17.html │ ├── index-18.html │ ├── index-19.html │ ├── index-2.html │ ├── index-20.html │ ├── index-21.html │ ├── index-22.html │ ├── index-23.html │ ├── index-3.html │ ├── index-4.html │ ├── index-5.html │ ├── index-6.html │ ├── index-7.html │ ├── index-8.html │ └── index-9.html ├── index.html ├── overview-frame.html ├── overview-summary.html ├── overview-tree.html ├── package-list ├── script.js └── stylesheet.css ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── images ├── Boat.png ├── CameraDetails.jpg ├── CameraViz.jpg ├── ExampleNodes.png ├── GPSDetails.jpg ├── GPSViz.jpg ├── JoystickDetails.jpg ├── JoystickViz.jpg ├── LawnMower.png ├── MIRANA.png ├── OccGridDetails.jpg ├── OccGridViz.jpg ├── ShortExample01.jpg ├── ShortExample02.jpg ├── ShortExample03.jpg └── ShortExample04.jpg ├── jcraft ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── jcraft │ ├── jsch │ ├── Buffer.java │ ├── Channel.java │ ├── ChannelAgentForwarding.java │ ├── ChannelDirectTCPIP.java │ ├── ChannelExec.java │ ├── ChannelForwardedTCPIP.java │ ├── ChannelSession.java │ ├── ChannelSftp.java │ ├── ChannelShell.java │ ├── ChannelSubsystem.java │ ├── ChannelX11.java │ ├── Cipher.java │ ├── CipherNone.java │ ├── Compression.java │ ├── ConfigRepository.java │ ├── DH.java │ ├── DHEC256.java │ ├── DHEC384.java │ ├── DHEC521.java │ ├── DHECN.java │ ├── DHG1.java │ ├── DHG14.java │ ├── DHGEX.java │ ├── DHGEX256.java │ ├── ECDH.java │ ├── ForwardedTCPIPDaemon.java │ ├── GSSContext.java │ ├── HASH.java │ ├── HostKey.java │ ├── HostKeyRepository.java │ ├── IO.java │ ├── Identity.java │ ├── IdentityFile.java │ ├── IdentityRepository.java │ ├── JSch.java │ ├── JSchAuthCancelException.java │ ├── JSchException.java │ ├── JSchPartialAuthException.java │ ├── KeyExchange.java │ ├── KeyPair.java │ ├── KeyPairDSA.java │ ├── KeyPairECDSA.java │ ├── KeyPairGenDSA.java │ ├── KeyPairGenECDSA.java │ ├── KeyPairGenRSA.java │ ├── KeyPairPKCS8.java │ ├── KeyPairRSA.java │ ├── KnownHosts.java │ ├── LocalIdentityRepository.java │ ├── Logger.java │ ├── MAC.java │ ├── OpenSSHConfig.java │ ├── PBKDF.java │ ├── Packet.java │ ├── PortWatcher.java │ ├── Proxy.java │ ├── ProxyHTTP.java │ ├── ProxySOCKS4.java │ ├── ProxySOCKS5.java │ ├── Random.java │ ├── Request.java │ ├── RequestAgentForwarding.java │ ├── RequestEnv.java │ ├── RequestExec.java │ ├── RequestPtyReq.java │ ├── RequestSftp.java │ ├── RequestShell.java │ ├── RequestSignal.java │ ├── RequestSubsystem.java │ ├── RequestWindowChange.java │ ├── RequestX11.java │ ├── ServerSocketFactory.java │ ├── Session.java │ ├── SftpATTRS.java │ ├── SftpException.java │ ├── SftpProgressMonitor.java │ ├── SftpStatVFS.java │ ├── Signature.java │ ├── SignatureDSA.java │ ├── SignatureECDSA.java │ ├── SignatureRSA.java │ ├── SocketFactory.java │ ├── UIKeyboardInteractive.java │ ├── UserAuth.java │ ├── UserAuthGSSAPIWithMIC.java │ ├── UserAuthKeyboardInteractive.java │ ├── UserAuthNone.java │ ├── UserAuthPassword.java │ ├── UserAuthPublicKey.java │ ├── UserInfo.java │ ├── Util.java │ ├── jce │ │ ├── AES128CBC.java │ │ ├── AES128CTR.java │ │ ├── AES192CBC.java │ │ ├── AES192CTR.java │ │ ├── AES256CBC.java │ │ ├── AES256CTR.java │ │ ├── ARCFOUR.java │ │ ├── ARCFOUR128.java │ │ ├── ARCFOUR256.java │ │ ├── BlowfishCBC.java │ │ ├── DH.java │ │ ├── ECDH256.java │ │ ├── ECDH384.java │ │ ├── ECDH521.java │ │ ├── ECDHN.java │ │ ├── HMAC.java │ │ ├── HMACMD5.java │ │ ├── HMACMD596.java │ │ ├── HMACSHA1.java │ │ ├── HMACSHA196.java │ │ ├── HMACSHA256.java │ │ ├── HMACSHA512.java │ │ ├── KeyPairGenDSA.java │ │ ├── KeyPairGenECDSA.java │ │ ├── KeyPairGenRSA.java │ │ ├── MD5.java │ │ ├── PBKDF.java │ │ ├── Random.java │ │ ├── SHA1.java │ │ ├── SHA256.java │ │ ├── SHA384.java │ │ ├── SHA512.java │ │ ├── SignatureDSA.java │ │ ├── SignatureECDSA256.java │ │ ├── SignatureECDSA384.java │ │ ├── SignatureECDSA521.java │ │ ├── SignatureECDSAN.java │ │ ├── SignatureRSA.java │ │ ├── TripleDESCBC.java │ │ └── TripleDESCTR.java │ └── jcraft │ │ ├── Compression.java │ │ ├── HMAC.java │ │ ├── HMACMD5.java │ │ ├── HMACMD596.java │ │ ├── HMACSHA1.java │ │ └── HMACSHA196.java │ └── jzlib │ ├── Adler32.java │ ├── CRC32.java │ ├── Checksum.java │ ├── Deflate.java │ ├── Deflater.java │ ├── DeflaterOutputStream.java │ ├── GZIPException.java │ ├── GZIPHeader.java │ ├── GZIPInputStream.java │ ├── GZIPOutputStream.java │ ├── InfBlocks.java │ ├── InfCodes.java │ ├── InfTree.java │ ├── Inflate.java │ ├── Inflater.java │ ├── InflaterInputStream.java │ ├── JZlib.java │ ├── StaticTree.java │ ├── Tree.java │ ├── ZInputStream.java │ ├── ZOutputStream.java │ ├── ZStream.java │ └── ZStreamException.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | # *.apk 3 | *.aar 4 | *.ap_ 5 | *.aab 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | # Uncomment the following line in case you need and you don't have the release build type files in your app 18 | # release/ 19 | 20 | # Gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Log Files 31 | *.log 32 | 33 | # Android Studio Navigation editor temp files 34 | .navigation/ 35 | 36 | # Android Studio captures folder 37 | captures/ 38 | 39 | # IntelliJ 40 | *.iml 41 | .idea/workspace.xml 42 | .idea/tasks.xml 43 | .idea/gradle.xml 44 | .idea/assetWizardSettings.xml 45 | .idea/dictionaries 46 | .idea/libraries 47 | # Android Studio 3 in .gitignore file. 48 | .idea/caches 49 | .idea/modules.xml 50 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 51 | .idea/navEditor.xml 52 | 53 | # Keystore files 54 | # Uncomment the following lines if you do not want to check your keystore files in. 55 | #*.jks 56 | #*.keystore 57 | 58 | # External native build folder generated in Android Studio 2.2 and later 59 | .externalNativeBuild 60 | .cxx/ 61 | 62 | # Google Services (e.g. APIs or Firebase) 63 | # google-services.json 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | RosAndroid -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /.idea/render.experimental.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/statistic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /DesignMockups/9dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/9dots.png -------------------------------------------------------------------------------- /DesignMockups/9dotsBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/9dotsBlue.png -------------------------------------------------------------------------------- /DesignMockups/detailsPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/detailsPage.png -------------------------------------------------------------------------------- /DesignMockups/layoutPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/layoutPage.png -------------------------------------------------------------------------------- /DesignMockups/masterPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/masterPage.png -------------------------------------------------------------------------------- /DesignMockups/masterPageLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/masterPageLight.png -------------------------------------------------------------------------------- /DesignMockups/rosLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/DesignMockups/rosLogo.png -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /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. 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 | -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/release/app-release.apk -------------------------------------------------------------------------------- /app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.schneewittchen.rosandroid", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "versionCode": 7, 14 | "versionName": "2.1.0", 15 | "outputFile": "app-release.apk" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/db/BaseDao.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.db; 2 | 3 | import androidx.room.Delete; 4 | import androidx.room.Insert; 5 | import androidx.room.OnConflictStrategy; 6 | import androidx.room.Update; 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nico Studt 12 | * @version 1.0.0 13 | * @created on 31.01.20 14 | * @updated on 31.01.20 15 | * @modified by 16 | */ 17 | public interface BaseDao { 18 | 19 | @Insert(onConflict = OnConflictStrategy.REPLACE) 20 | long insert(T obj); 21 | 22 | @Update(onConflict = OnConflictStrategy.REPLACE) 23 | void update(T obj); 24 | 25 | @Delete 26 | int delete(T obj); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/db/ConfigDao.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.db; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.room.Dao; 5 | import androidx.room.Query; 6 | 7 | import com.schneewittchen.rosandroid.model.entities.ConfigEntity; 8 | 9 | import java.util.List; 10 | 11 | 12 | /** 13 | * TODO: Description 14 | * 15 | * @author Nico Studt 16 | * @version 1.1 17 | * @created on 31.01.20 18 | * @updated on 04.06.20 19 | * @modified by Nils Rottmann 20 | * @updated on 27.07.20 21 | * @modified by Nils Rottmann 22 | * @updated on 23.09.20 23 | * @modified by Nico Studt 24 | */ 25 | @Dao 26 | public abstract class ConfigDao implements BaseDao{ 27 | 28 | static final String TAG = ConfigDao.class.getCanonicalName(); 29 | 30 | 31 | @Query("SELECT * FROM config_table") 32 | abstract LiveData> getAllConfigs(); 33 | 34 | @Query("SELECT * FROM config_table where id = :id") 35 | abstract LiveData getConfig(long id); 36 | 37 | @Query("SELECT * FROM config_table ORDER BY creationTime DESC LIMIT 1") 38 | abstract LiveData getLatestConfig(); 39 | 40 | @Query("SELECT * FROM config_table ORDER BY creationTime DESC LIMIT 1") 41 | abstract ConfigEntity getLatestConfigDirect(); 42 | 43 | @Query("DELETE FROM config_table where id = :id") 44 | abstract void removeConfig(long id); 45 | 46 | @Query("DELETE FROM config_table") 47 | abstract void deleteAll(); 48 | 49 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/db/MasterDao.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.db; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.room.Dao; 5 | import androidx.room.Query; 6 | 7 | import com.schneewittchen.rosandroid.model.entities.MasterEntity; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.1 15 | * @created on 31.01.20 16 | * @updated on 01.10.20 17 | * @modified by Nico Studt 18 | */ 19 | @Dao 20 | public abstract class MasterDao implements BaseDao{ 21 | 22 | @Query("SELECT * FROM master_table WHERE configId = :configId LIMIT 1") 23 | abstract LiveData getMaster(long configId); 24 | 25 | @Query("DELETE FROM master_table WHERE configId = :configId") 26 | abstract void delete(long configId); 27 | 28 | @Query("DELETE FROM master_table") 29 | abstract void deleteAll(); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/db/SSHDao.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.db; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.room.Dao; 5 | import androidx.room.Query; 6 | 7 | import com.schneewittchen.rosandroid.model.entities.SSHEntity; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nils Rottmann 14 | * @version 1.0.1 15 | * @created on 04.06.20 16 | * @updated on 01.10.20 17 | * @modified by Nico Studt 18 | */ 19 | @Dao 20 | public abstract class SSHDao implements BaseDao{ 21 | 22 | @Query("SELECT * FROM ssh_table WHERE configId = :configId LIMIT 1") 23 | abstract LiveData getSSH(long configId); 24 | 25 | @Query("DELETE FROM ssh_table WHERE configId = :configId") 26 | abstract void delete(long configId); 27 | 28 | @Query("DELETE FROM ssh_table") 29 | abstract void deleteAll(); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/ConfigEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities; 2 | 3 | import androidx.room.Entity; 4 | import androidx.room.PrimaryKey; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nico Studt 11 | * @version 1.0.2 12 | * @created on 30.01.20 13 | * @updated on 04.06.20 14 | * @modified by Nils Rottmann 15 | * @updated on 27.07.20 16 | * @modified by Nils Rottmann 17 | * @updated on 01.10.20 18 | * @modified by Nico Studt 19 | */ 20 | @Entity(tableName = "config_table") 21 | public class ConfigEntity { 22 | 23 | @PrimaryKey(autoGenerate = true) 24 | public long id; 25 | 26 | public long creationTime; 27 | public long lastUsed; 28 | public String name = "DefaultName"; 29 | public boolean isFavourite; 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/MasterEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities; 2 | 3 | import androidx.room.Entity; 4 | import androidx.room.PrimaryKey; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nico Studt 11 | * @version 1.0.1 12 | * @created on 30.01.20 13 | * @updated on 31.01.20 14 | * @modified by 15 | */ 16 | @Entity(tableName = "master_table") 17 | public class MasterEntity { 18 | 19 | @PrimaryKey(autoGenerate = true) 20 | public long id; 21 | 22 | public long configId; 23 | public String ip = "192.168.0.0"; 24 | public int port = 11311; 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/SSHEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities; 2 | 3 | import androidx.room.Entity; 4 | import androidx.room.PrimaryKey; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nils Rottmann 11 | * @version 1.0.0 12 | * @created on 04.06.20 13 | */ 14 | 15 | @Entity(tableName = "ssh_table") 16 | public class SSHEntity { 17 | 18 | @PrimaryKey(autoGenerate = true) 19 | public long id; 20 | 21 | public long configId; 22 | public String ip = "192.168.1.1"; 23 | public int port = 22; 24 | public String username = "pi"; 25 | public String password = "raspberry"; 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/WidgetCountEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.room.ColumnInfo; 5 | import androidx.room.Embedded; 6 | import androidx.room.Entity; 7 | import androidx.room.PrimaryKey; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 26.07.20 16 | * @updated on 27.07.20 17 | * @modified by Nils Rottmann 18 | */ 19 | @Entity(tableName = "widget_count_table") 20 | public class WidgetCountEntity { 21 | 22 | @PrimaryKey(autoGenerate = true) 23 | public long id; 24 | 25 | @ColumnInfo(name = "widget_config_id") 26 | @NonNull 27 | public long configId; 28 | 29 | @ColumnInfo(name = "widget_type") 30 | public String type; 31 | 32 | @ColumnInfo(name = "widget_count") 33 | public long count; 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/WidgetStorageData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.room.ColumnInfo; 5 | import androidx.room.Entity; 6 | import androidx.room.PrimaryKey; 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * Replaced version of Base Entity. 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 23.09.20 16 | * @updated on 17 | * @modified by 18 | */ 19 | 20 | @Entity(tableName = "widget_table") 21 | public class WidgetStorageData { 22 | 23 | @PrimaryKey(autoGenerate = true) 24 | public long id; 25 | 26 | @ColumnInfo(name = "type_name") 27 | @NonNull 28 | public String typeName; 29 | 30 | @ColumnInfo(name = "widget_config_id") 31 | @NonNull 32 | public long configId; 33 | 34 | @ColumnInfo(name = "data") 35 | @NonNull 36 | public String data; 37 | 38 | @ColumnInfo(name = "name") 39 | @NonNull 40 | public String name; 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/GroupEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | import com.schneewittchen.rosandroid.ui.general.Position; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 10.03.21 11 | * @updated on 12 | * @modified by 13 | */ 14 | public class GroupEntity extends BaseEntity 15 | implements IPositionEntity, 16 | ISubscriberEntity, 17 | IPublisherEntity{ 18 | 19 | public int posX; 20 | public int posY; 21 | public int width; 22 | public int height; 23 | 24 | @Override 25 | public Position getPosition() { 26 | return new Position(posX, posY, width, height); 27 | } 28 | 29 | @Override 30 | public void setPosition(Position position) { 31 | this.posX = position.x; 32 | this.posY = position.y; 33 | this.width = position.width; 34 | this.height = position.height; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/I2DLayerEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | 4 | /** 5 | * Entity witch indicates layer characteristics to be able to display it 6 | * in a 2D view as a layer widget. 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 10.03.21 11 | */ 12 | public interface I2DLayerEntity { } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/IPositionEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | import com.schneewittchen.rosandroid.ui.general.Position; 4 | 5 | /** 6 | * Entity with positional information to be able to display it 7 | * in the visualisation view as a stand-alone widget. 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 10.03.21 12 | */ 13 | public interface IPositionEntity { 14 | 15 | Position getPosition(); 16 | void setPosition(Position position); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/IPublisherEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | /** 4 | * Entity with publisher information to be able 5 | * to create a appropriate publisher node in the ROS-network. 6 | * 7 | * @author Nico Studt 8 | * @version 1.0.0 9 | * @created on 10.03.21 10 | */ 11 | public interface IPublisherEntity { 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/ISilentEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | /** 4 | * Silent entity which does not interfere in any way with the ROS structure. 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 01.04.21 9 | */ 10 | public interface ISilentEntity { } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/ISubscriberEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | /** 4 | * Entity with subscriber information to be able 5 | * to create a appropriate subscriber node in the ROS-network. 6 | * 7 | * @author Nico Studt 8 | * @version 1.0.0 9 | * @created on 10.03.21 10 | */ 11 | public interface ISubscriberEntity { 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/PublisherLayerEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | 4 | /** 5 | * TODO: Description 6 | * 7 | * @author Nico Studt 8 | * @version 1.0.0 9 | * @created on 24.09.20 10 | */ 11 | public abstract class PublisherLayerEntity extends BaseEntity 12 | implements I2DLayerEntity, IPublisherEntity { 13 | 14 | public float publishRate = 1f; 15 | public boolean immediatePublish = false; 16 | 17 | 18 | @Override 19 | public boolean equalRosState(BaseEntity other) { 20 | if (!super.equalRosState(other)) { 21 | return false; 22 | } 23 | 24 | if (!(other instanceof PublisherLayerEntity)) { 25 | return false; 26 | } 27 | 28 | PublisherLayerEntity otherPub = (PublisherLayerEntity) other; 29 | 30 | return this.publishRate == otherPub.publishRate 31 | && this.immediatePublish == otherPub.immediatePublish; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/PublisherWidgetEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | 4 | import com.schneewittchen.rosandroid.ui.general.Position; 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 24.09.20 12 | */ 13 | public abstract class PublisherWidgetEntity 14 | extends BaseEntity 15 | implements IPositionEntity, IPublisherEntity{ 16 | 17 | public float publishRate = 1f; 18 | public boolean immediatePublish = false; 19 | public int posX; 20 | public int posY; 21 | public int width; 22 | public int height; 23 | 24 | 25 | @Override 26 | public boolean equalRosState(BaseEntity other) { 27 | if (!super.equalRosState(other)) { 28 | return false; 29 | } 30 | 31 | if (!(other instanceof PublisherWidgetEntity)) { 32 | return false; 33 | } 34 | 35 | PublisherWidgetEntity otherPub = (PublisherWidgetEntity) other; 36 | 37 | return this.publishRate == otherPub.publishRate 38 | && this.immediatePublish == otherPub.immediatePublish; 39 | } 40 | 41 | @Override 42 | public Position getPosition() { 43 | return new Position(posX, posY, width, height); 44 | } 45 | 46 | @Override 47 | public void setPosition(Position position) { 48 | this.posX = position.x; 49 | this.posY = position.y; 50 | this.width = position.width; 51 | this.height = position.height; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/SilentLayerEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 05.04.21 9 | */ 10 | public abstract class SilentLayerEntity extends BaseEntity implements ISilentEntity, I2DLayerEntity { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/SilentWidgetEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | import com.schneewittchen.rosandroid.ui.general.Position; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 24.09.20 11 | */ 12 | public abstract class SilentWidgetEntity extends BaseEntity implements ISilentEntity, IPositionEntity { 13 | 14 | public int posX; 15 | public int posY; 16 | public int width; 17 | public int height; 18 | 19 | 20 | @Override 21 | public Position getPosition() { 22 | return new Position(posX, posY, width, height); 23 | } 24 | 25 | @Override 26 | public void setPosition(Position position) { 27 | this.posX = position.x; 28 | this.posY = position.y; 29 | this.width = position.width; 30 | this.height = position.height; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/SubscriberLayerEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 24.09.20 9 | */ 10 | public abstract class SubscriberLayerEntity 11 | extends BaseEntity 12 | implements I2DLayerEntity, ISubscriberEntity{ 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/entities/widgets/SubscriberWidgetEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.entities.widgets; 2 | 3 | import com.schneewittchen.rosandroid.ui.general.Position; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 24.09.20 11 | */ 12 | public abstract class SubscriberWidgetEntity 13 | extends BaseEntity 14 | implements ISubscriberEntity, IPositionEntity{ 15 | 16 | public int posX; 17 | public int posY; 18 | public int width; 19 | public int height; 20 | 21 | 22 | @Override 23 | public Position getPosition() { 24 | return new Position(posX, posY, width, height); 25 | } 26 | 27 | @Override 28 | public void setPosition(Position position) { 29 | this.posX = position.x; 30 | this.posY = position.y; 31 | this.width = position.width; 32 | this.height = position.height; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/SshRepository.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories; 2 | 3 | import androidx.lifecycle.LiveData; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.SSHEntity; 6 | 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nils Rottmann 12 | * @version 1.0.0 13 | * @created on 04.06.20 14 | * @updated on 15 | * @modified by 16 | */ 17 | 18 | public interface SshRepository { 19 | 20 | void startSession(); 21 | 22 | void stopSession(); 23 | 24 | LiveData isConnected(); 25 | 26 | void sendMessage(String message); 27 | 28 | void abort(); 29 | 30 | LiveData getOutputData(); 31 | 32 | void updateSSH(SSHEntity ssh); 33 | 34 | LiveData getCurrentSSH(); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/TransformProvider.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo; 2 | 3 | import org.ros.rosjava_geometry.FrameTransformTree; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 20.05.21 11 | */ 12 | public class TransformProvider { 13 | 14 | private static TransformProvider instance; 15 | 16 | private FrameTransformTree frameTransformTree; 17 | 18 | 19 | public TransformProvider() { 20 | this.reset(); 21 | } 22 | 23 | 24 | public static TransformProvider getInstance() { 25 | if (instance == null) { 26 | instance = new TransformProvider(); 27 | } 28 | 29 | return instance; 30 | } 31 | 32 | public FrameTransformTree getTree() { 33 | return frameTransformTree; 34 | } 35 | 36 | public void reset() { 37 | this.frameTransformTree = new FrameTransformTree(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/connection/ConnectionCheckTask.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.connection; 2 | 3 | import android.os.AsyncTask; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.MasterEntity; 6 | import com.schneewittchen.rosandroid.utility.Utils; 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nico Studt 12 | * @version 1.0.1 13 | * @created on 15.04.20 14 | * @updated on 16.04.20 15 | * @modified by 16 | */ 17 | public class ConnectionCheckTask extends AsyncTask { 18 | 19 | private static final int TIMEOUT_TIME = 2 * 1000; 20 | 21 | private final ConnectionListener listener; 22 | 23 | public ConnectionCheckTask(ConnectionListener listener) { 24 | this.listener = listener; 25 | } 26 | 27 | @Override 28 | protected Boolean doInBackground(MasterEntity... masterEnts) { 29 | MasterEntity masterEnt = masterEnts[0]; 30 | return Utils.isHostAvailable(masterEnt.ip, masterEnt.port, TIMEOUT_TIME); 31 | } 32 | 33 | @Override 34 | protected void onPostExecute(Boolean success) { 35 | if (success) 36 | listener.onSuccess(); 37 | else 38 | listener.onFailed(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/connection/ConnectionListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.connection; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 16.04.20 9 | * @updated on 16.04.20 10 | * @modified by 11 | */ 12 | public interface ConnectionListener { 13 | 14 | void onSuccess(); 15 | void onFailed(); 16 | 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/connection/ConnectionType.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.connection; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 15.04.20 9 | * @updated on 15.04.20 10 | * @modified by 11 | */ 12 | public enum ConnectionType {DISCONNECTED, PENDING, CONNECTED, FAILED} 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/message/RosData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.message; 2 | 3 | import org.ros.internal.message.Message; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 21.09.20 11 | * @updated on 12 | * @modified by 13 | */ 14 | public class RosData { 15 | 16 | private final Topic topic; 17 | private final Message message; 18 | 19 | 20 | public RosData(Topic topic, Message message) { 21 | this.topic = topic; 22 | this.message = message; 23 | } 24 | 25 | 26 | public Topic getTopic() { 27 | return this.topic; 28 | } 29 | 30 | public Message getMessage() { 31 | return this.message; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/message/Topic.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.message; 2 | 3 | 4 | /** 5 | * ROS topic class for subscriber/publisher nodes. 6 | * 7 | * @author Nico Studt 8 | * @version 1.0.0 9 | * @created on 15.09.2020 10 | */ 11 | public class Topic { 12 | 13 | /** 14 | * Topic name e.g. '/map' 15 | */ 16 | public String name = ""; 17 | 18 | /** 19 | * Type of the topic e.g. 'nav_msgs.OccupancyGrid' 20 | */ 21 | public String type = ""; 22 | 23 | 24 | public Topic(String name, String type) { 25 | this.name = name; 26 | this.type = type; 27 | } 28 | 29 | public Topic(Topic other) { 30 | if (other == null) { 31 | return; 32 | } 33 | 34 | this.name = other.name; 35 | this.type = other.type; 36 | } 37 | 38 | 39 | @Override 40 | public boolean equals(Object object) { 41 | if (object == this) { 42 | return true; 43 | 44 | } else if (object.getClass() != this.getClass()) { 45 | return false; 46 | } 47 | 48 | Topic other = (Topic) object; 49 | 50 | return other.name.equals(name) && other.type.equals(type); 51 | } 52 | 53 | @Override 54 | public int hashCode() { 55 | return name.hashCode() + 31 * type.hashCode(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/node/AbstractNode.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.node; 2 | 3 | import android.util.Log; 4 | 5 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 6 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 7 | 8 | import org.ros.namespace.GraphName; 9 | import org.ros.node.ConnectedNode; 10 | import org.ros.node.Node; 11 | import org.ros.node.NodeMain; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nico Studt 18 | * @version 1.0.0 19 | * @created on 15.09.20 20 | */ 21 | public class AbstractNode implements NodeMain { 22 | 23 | public static final String TAG = AbstractNode.class.getSimpleName(); 24 | 25 | protected Topic topic; 26 | protected BaseEntity widget; 27 | 28 | 29 | @Override 30 | public void onStart(ConnectedNode parentNode) { 31 | Log.i(TAG, "On Start: " + topic.name); 32 | } 33 | 34 | @Override 35 | public void onShutdown(Node node) { 36 | Log.i(TAG, "On Shutdown: " + topic.name); 37 | } 38 | 39 | @Override 40 | public void onShutdownComplete(Node node) { 41 | Log.i(TAG, "On Shutdown Complete: " + topic.name); 42 | } 43 | 44 | @Override 45 | public void onError(Node node, Throwable throwable) { 46 | throwable.printStackTrace(); 47 | } 48 | 49 | @Override 50 | public GraphName getDefaultNodeName() { 51 | return GraphName.of(topic.name); 52 | } 53 | 54 | 55 | public Topic getTopic() { 56 | return this.topic; 57 | } 58 | 59 | public void setTopic(Topic topic) { 60 | this.topic = topic; 61 | } 62 | 63 | public void setWidget(BaseEntity widget) { 64 | this.widget = widget; 65 | this.setTopic(widget.topic); 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/node/BaseData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.node; 2 | 3 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 4 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 5 | 6 | import org.ros.internal.message.Message; 7 | import org.ros.node.topic.Publisher; 8 | 9 | 10 | public abstract class BaseData { 11 | 12 | protected Topic topic; 13 | 14 | 15 | public void setTopic(Topic topic) { 16 | this.topic = topic; 17 | } 18 | 19 | public Topic getTopic() { 20 | return this.topic; 21 | } 22 | 23 | public Message toRosMessage(Publisher publisher, BaseEntity widget){ 24 | return null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/node/NodeMainExecutorServiceListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.node; 18 | 19 | /** 20 | * TODO: Description 21 | * 22 | * @author Damon Kohler 23 | * @version 1.0.0 24 | * @created on 15.04.20 25 | * @updated on 15.04.20 26 | * @modified by Nico Studt 27 | */ 28 | public interface NodeMainExecutorServiceListener { 29 | 30 | /** 31 | * @param nodeMainExecutorService the {@link NodeMainExecutorService} that was shut down 32 | */ 33 | void onShutdown(NodeMainExecutorService nodeMainExecutorService); 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/model/repositories/rosRepo/node/SubNode.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.model.repositories.rosRepo.node; 2 | 3 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.RosData; 4 | 5 | import org.ros.internal.message.Message; 6 | import org.ros.node.ConnectedNode; 7 | import org.ros.node.topic.Subscriber; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 16.09.20 16 | */ 17 | public class SubNode extends AbstractNode { 18 | 19 | private final NodeListener listener; 20 | 21 | 22 | public SubNode(NodeListener listener) { 23 | this.listener = listener; 24 | } 25 | 26 | 27 | @Override 28 | public void onStart(ConnectedNode parentNode) { 29 | super.onStart(parentNode); 30 | 31 | try { 32 | if (this.widget != null) { 33 | this.widget.validMessage = true; 34 | } 35 | 36 | Subscriber subscriber = parentNode.newSubscriber(topic.name, topic.type); 37 | 38 | subscriber.addMessageListener(data -> { 39 | listener.onNewMessage(new RosData(topic, data)); 40 | }); 41 | 42 | } catch(Exception e) { 43 | if (this.widget != null) { 44 | this.widget.validMessage = false; 45 | } 46 | e.printStackTrace(); 47 | } 48 | 49 | } 50 | 51 | public interface NodeListener { 52 | void onNewMessage(RosData message); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/fragments/config/CustumLinearLayoutManager.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.fragments.config; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.recyclerview.widget.LinearLayoutManager; 6 | 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nico Studt 12 | * @version 1.0.0 13 | * @created on 05.02.20 14 | * @updated on 05.02.20 15 | * @modified by 16 | */ 17 | public class CustumLinearLayoutManager extends LinearLayoutManager { 18 | 19 | private boolean isScrollEnabled = false; 20 | 21 | 22 | public CustumLinearLayoutManager(Context context) { 23 | super(context); 24 | } 25 | 26 | 27 | public void setScrollEnabled(boolean flag) { 28 | this.isScrollEnabled = flag; 29 | } 30 | 31 | @Override 32 | public boolean canScrollVertically() { 33 | //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll 34 | return isScrollEnabled && super.canScrollVertically(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/fragments/config/RecyclerViewItemClickListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.fragments.config; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nico Studt 12 | * @version 1.0.0 13 | * @created on 05.02.20 14 | * @updated on 05.02.20 15 | * @modified by 16 | */ 17 | public interface RecyclerViewItemClickListener { 18 | 19 | void onClick(RecyclerView parent, View view, int position); 20 | 21 | //void onLongClick(View view, int position); 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/fragments/intro/ScreenItem.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.fragments.intro; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nils Rottmann 7 | * @version 1.0.0 8 | * @created on 19.06.20 9 | * @updated on 10 | * @modified by 11 | */ 12 | 13 | public class ScreenItem { 14 | 15 | String title, description; 16 | int screenImage; 17 | 18 | 19 | public ScreenItem(String title, String description, int screenImage) { 20 | this.title = title; 21 | this.description = description; 22 | this.screenImage = screenImage; 23 | } 24 | 25 | 26 | public void setTitle(String title) { 27 | this.title = title; 28 | } 29 | 30 | public void setDescription(String description) { 31 | this.description = description; 32 | } 33 | 34 | public void setScreenImage(int screenImage) { 35 | this.screenImage = screenImage; 36 | } 37 | 38 | public String getTitle() { 39 | return title; 40 | } 41 | 42 | public String getDescription() { 43 | return description; 44 | } 45 | 46 | public int getScreenImage() { 47 | return screenImage; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/fragments/main/OnBackPressedListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.fragments.main; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 16.01.20 9 | * @updated on 16.01.20 10 | * @modified by 11 | */ 12 | public interface OnBackPressedListener { 13 | 14 | boolean onBackPressed(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/general/DataListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.general; 2 | 3 | 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 15.03.20 12 | * @updated on 15.03.20 13 | * @modified by 14 | */ 15 | public interface DataListener { 16 | 17 | void onNewWidgetData(BaseData data); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/general/Position.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.general; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 17.03.20 9 | * @updated on 17.03.20 10 | * @modified by 11 | */ 12 | public class Position { 13 | 14 | public int x; 15 | public int y; 16 | public int width; 17 | public int height; 18 | 19 | 20 | public Position() { 21 | this(0, 0, 0, 0); 22 | } 23 | 24 | public Position(int x, int y, int width, int height) { 25 | this.x = x; 26 | this.y = y; 27 | this.width = width; 28 | this.height = height; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/general/TextChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.general; 2 | 3 | import android.text.Editable; 4 | import android.text.TextWatcher; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nico Studt 11 | * @version 1.0.0 12 | * @created on 19.01.20 13 | * @updated on 19.01.20 14 | * @modified by 15 | */ 16 | 17 | public abstract class TextChangeListener implements TextWatcher { 18 | 19 | private final T target; 20 | 21 | 22 | public TextChangeListener(T target) { 23 | this.target = target; 24 | } 25 | 26 | @Override 27 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 28 | return; 29 | // System.out.println("Before Text Changed: " + s); 30 | } 31 | 32 | @Override 33 | public void onTextChanged(CharSequence s, int start, int before, int count) { 34 | return; 35 | // System.out.println("On Text Changed: " + s); 36 | } 37 | 38 | @Override 39 | public void afterTextChanged(Editable s) { 40 | // System.out.println("After Text Changed: " + s.toString()); 41 | this.onTextChanged(target, s); 42 | } 43 | 44 | public abstract void onTextChanged(T target, Editable s); 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/general/WidgetChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.general; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.1 11 | * @created on 17.03.20 12 | * @updated on 27.10.2020 13 | * @modified by Nico Studt 14 | */ 15 | public interface WidgetChangeListener { 16 | 17 | void onWidgetDetailsChanged(BaseEntity widgetEntity); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/general/WidgetEditListener.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.general; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Sarthak Mittal 10 | * @version 1.0.1 11 | * @created on 01.07.21 12 | */ 13 | public interface WidgetEditListener { 14 | 15 | void onWidgetEdited(BaseEntity widgetEntity, boolean updateConfig); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/layer/CameraControlListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.layer; 18 | 19 | /** 20 | * @author damonkohler@google.com (Damon Kohler) 21 | */ 22 | public interface CameraControlListener { 23 | void onTranslate(float distanceX, float distanceY); 24 | 25 | void onRotate(float focusX, float focusY, double deltaAngle); 26 | 27 | void onZoom(float focusX, float focusY, float factor); 28 | 29 | void onDoubleTap(float x, float y); 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/GoalShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.shape; 18 | 19 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.ROSColor; 20 | 21 | /** 22 | * Represents the robot's current goal pose. 23 | * 24 | * @author damonkohler@google.com (Damon Kohler) 25 | */ 26 | public class GoalShape extends MetricSpacePoseShape { 27 | 28 | private static final ROSColor COLOR = ROSColor.fromHexAndAlpha("ff0000", 1f); 29 | 30 | public GoalShape() { 31 | super(); 32 | setColor(COLOR); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/MetricSpacePoiShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.shape; 18 | 19 | 20 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.ROSColor; 21 | 22 | /** 23 | * Represents a pose. 24 | * 25 | * @author damonkohler@google.com (Damon Kohler) 26 | */ 27 | public class MetricSpacePoiShape extends TriangleFanShape { 28 | 29 | private static final ROSColor COLOR = ROSColor.fromHexAndAlpha("377dfa", 1.0f); 30 | private static final float VERTICES[] = { 31 | -0.2f, 0.2f, 0.f, 32 | 0.2f, 0.2f, 0.f, 33 | 0.5f, 0.f, 0.f, 34 | 0.2f, -0.2f, 0.f, 35 | -0.2f, -0.2f, 0.f, 36 | -0.2f, 0.2f, 0.f 37 | }; 38 | 39 | public MetricSpacePoiShape() { 40 | super(VERTICES, COLOR); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/MetricSpacePoseShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.shape; 18 | 19 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.ROSColor; 20 | 21 | /** 22 | * Represents a pose. 23 | * 24 | * @author damonkohler@google.com (Damon Kohler) 25 | */ 26 | public class MetricSpacePoseShape extends TriangleFanShape { 27 | 28 | private static final ROSColor COLOR = ROSColor.fromHexAndAlpha("377dfa", 1.0f); 29 | private static final float VERTICES[] = { 30 | 0.2f, 0.f, 0.f, 31 | -0.2f, -0.15f, 0.f, 32 | -0.05f, 0.f, 0.f, 33 | -0.2f, 0.15f, 0.f, 34 | 0.2f, 0.f, 0.f 35 | }; 36 | 37 | public MetricSpacePoseShape() { 38 | super(VERTICES, COLOR); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/PixelSpacePoiShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.shape; 18 | 19 | 20 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.VisualizationView; 21 | 22 | import javax.microedition.khronos.opengles.GL10; 23 | 24 | 25 | /** 26 | * Represents a pose. 27 | *

28 | * This shape is defined in pixel space and will not be affected by the zoom 29 | * level of the camera. 30 | * 31 | * @author damonkohler@google.com (Damon Kohler) 32 | */ 33 | public class PixelSpacePoiShape extends MetricSpacePoiShape { 34 | 35 | private static final float PIXELS_PER_METER = 100.f; 36 | 37 | 38 | @Override 39 | protected void scale(VisualizationView view, GL10 gl) { 40 | // Adjust for metric scale definition of MetricSpacePoseShape vertices. 41 | gl.glScalef(PIXELS_PER_METER, PIXELS_PER_METER, 1.f); 42 | // Counter adjust for the camera zoom. 43 | gl.glScalef(1 / (float) view.getCamera().getZoom(), 44 | 1 / (float) view.getCamera().getZoom(), 45 | 1.0f); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/PixelSpacePoseShape.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.shape; 18 | 19 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.VisualizationView; 20 | 21 | import javax.microedition.khronos.opengles.GL10; 22 | 23 | /** 24 | * Represents a pose. 25 | *

26 | * This shape is defined in pixel space and will not be affected by the zoom 27 | * level of the camera. 28 | * 29 | * @author damonkohler@google.com (Damon Kohler) 30 | */ 31 | public class PixelSpacePoseShape extends MetricSpacePoseShape { 32 | 33 | private static final float PIXELS_PER_METER = 250.f; 34 | 35 | @Override 36 | protected void scale(VisualizationView view, GL10 gl) { 37 | // Adjust for metric scale definition of MetricSpacePoseShape vertices. 38 | gl.glScalef(PIXELS_PER_METER, 250.f, 1.f); 39 | 40 | // Counter adjust for the camera zoom. 41 | gl.glScalef(1 / (float) view.getCamera().getZoom(), 42 | 1 / (float) view.getCamera().getZoom(), 43 | 1.0f); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/shape/TextShapeFactory.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.opengl.shape; 2 | 3 | import android.graphics.Typeface; 4 | 5 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.VisualizationView; 6 | 7 | import javax.microedition.khronos.opengles.GL10; 8 | 9 | import uk.co.blogspot.fractiousg.texample.GLText; 10 | 11 | 12 | public class TextShapeFactory { 13 | 14 | private final GLText glText; 15 | 16 | 17 | public TextShapeFactory(final VisualizationView view, final GL10 gl) { 18 | glText = new GLText(gl, view.getContext().getAssets()); 19 | } 20 | 21 | public void loadFont(final Typeface typeface, final int size, final int padX, final int padY) { 22 | glText.load(typeface, size, padX, padY); 23 | } 24 | 25 | public void loadFont(final String file, final int size, final int padX, final int padY) { 26 | glText.load(file, size, padX, padY); 27 | } 28 | 29 | public TextShape newTextShape(final String text) { 30 | return new TextShape(glText, text); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/opengl/visualisation/OpenGlDrawable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | package com.schneewittchen.rosandroid.ui.opengl.visualisation; 18 | 19 | import javax.microedition.khronos.opengles.GL10; 20 | 21 | 22 | /** 23 | * @author damonkohler@google.com (Damon Kohler) 24 | */ 25 | public interface OpenGlDrawable { 26 | void draw(VisualizationView view, GL10 gl); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/CharacterWrapTextView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.util.Log; 6 | 7 | 8 | import androidx.appcompat.widget.AppCompatTextView; 9 | 10 | import java.util.Arrays; 11 | import java.util.List; 12 | 13 | /** 14 | * TODO: Description 15 | * 16 | * @author Nico Studt 17 | * @version 1.0.0 18 | * @created on 14.04.21 19 | */ 20 | public class CharacterWrapTextView extends AppCompatTextView { 21 | 22 | public CharacterWrapTextView(Context context) { 23 | super(context); 24 | } 25 | 26 | public CharacterWrapTextView(Context context, AttributeSet attrs) { 27 | super(context, attrs); 28 | } 29 | 30 | public CharacterWrapTextView(Context context, AttributeSet attrs, int defStyleAttr) { 31 | super(context, attrs, defStyleAttr); 32 | } 33 | 34 | @Override 35 | public void setText(CharSequence text, BufferType type) { 36 | super.setText(text, type); 37 | getWrappedText(text.toString()); 38 | } 39 | 40 | private String getWrappedText(String input) { 41 | int maxEms = getMaxLines(); 42 | String output = ""; 43 | List parts = Arrays.asList(input.split("/")); 44 | parts.remove(0); 45 | 46 | String currentLine = ""; 47 | int row = 0; 48 | 49 | for (String part: parts) { 50 | if (currentLine.length() + ("/" + part).length() > maxEms) { 51 | output += (row == 0? "" : "\n") + currentLine; 52 | row++; 53 | currentLine = ""; 54 | 55 | } else { 56 | currentLine += "/" + part; 57 | } 58 | } 59 | 60 | return output; 61 | } 62 | } -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/IBaseViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nico Studt 11 | * @version 1.0.0 12 | * @created on 17.03.21 13 | */ 14 | interface IBaseViewHolder { 15 | 16 | void baseInitView(View view); 17 | void baseBindEntity(BaseEntity entity); 18 | void baseUpdateEntity(BaseEntity entity); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/PublisherLayerViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.viewmodel.DetailsViewModel; 7 | 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * TODO: Description 13 | * 14 | * @author Nico Studt 15 | * @version 1.0.0 16 | * @created on 26.05.2021 17 | */ 18 | public abstract class PublisherLayerViewHolder extends DetailViewHolder { 19 | 20 | private LayerViewHolder layerViewHolder; 21 | private PublisherViewHolder publisherViewHolder; 22 | 23 | 24 | public PublisherLayerViewHolder() { 25 | this.layerViewHolder = new LayerViewHolder(this); 26 | this.publisherViewHolder = new PublisherViewHolder(this); 27 | this.publisherViewHolder.topicTypes = this.getTopicTypes(); 28 | } 29 | 30 | 31 | public abstract List getTopicTypes(); 32 | 33 | 34 | @Override 35 | public void setViewModel(DetailsViewModel viewModel) { 36 | super.setViewModel(viewModel); 37 | publisherViewHolder.viewModel = viewModel; 38 | } 39 | 40 | public void baseInitView(View view) { 41 | layerViewHolder.baseInitView(view); 42 | publisherViewHolder.baseInitView(view); 43 | } 44 | 45 | public void baseBindEntity(BaseEntity entity) { 46 | layerViewHolder.baseBindEntity(entity); 47 | publisherViewHolder.baseBindEntity(entity); 48 | } 49 | 50 | public void baseUpdateEntity(BaseEntity entity) { 51 | layerViewHolder.baseUpdateEntity(entity); 52 | publisherViewHolder.baseUpdateEntity(entity); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/PublisherWidgetViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.viewmodel.DetailsViewModel; 7 | 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * TODO: Description 13 | * 14 | * @author Nico Studt 15 | * @version 1.0.0 16 | * @created on 17.03.21 17 | */ 18 | public abstract class PublisherWidgetViewHolder extends DetailViewHolder { 19 | 20 | private WidgetViewHolder widgetViewHolder; 21 | private PublisherViewHolder publisherViewHolder; 22 | 23 | 24 | public PublisherWidgetViewHolder() { 25 | this.widgetViewHolder = new WidgetViewHolder(this); 26 | this.publisherViewHolder = new PublisherViewHolder(this); 27 | this.publisherViewHolder.topicTypes = this.getTopicTypes(); 28 | } 29 | 30 | 31 | public abstract List getTopicTypes(); 32 | 33 | 34 | @Override 35 | public void setViewModel(DetailsViewModel viewModel) { 36 | super.setViewModel(viewModel); 37 | publisherViewHolder.viewModel = viewModel; 38 | } 39 | 40 | public void baseInitView(View view) { 41 | widgetViewHolder.baseInitView(view); 42 | publisherViewHolder.baseInitView(view); 43 | } 44 | 45 | public void baseBindEntity(BaseEntity entity) { 46 | widgetViewHolder.baseBindEntity(entity); 47 | publisherViewHolder.baseBindEntity(entity); 48 | } 49 | 50 | public void baseUpdateEntity(BaseEntity entity) { 51 | widgetViewHolder.baseUpdateEntity(entity); 52 | publisherViewHolder.baseUpdateEntity(entity); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/SilentWidgetViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 01.04.21 15 | */ 16 | public abstract class SilentWidgetViewHolder extends DetailViewHolder { 17 | 18 | private WidgetViewHolder widgetViewHolder; 19 | 20 | 21 | public SilentWidgetViewHolder() { 22 | this.widgetViewHolder = new WidgetViewHolder(this); 23 | } 24 | 25 | 26 | public void baseInitView(View view) { 27 | widgetViewHolder.baseInitView(view); 28 | } 29 | 30 | public void baseBindEntity(BaseEntity entity) { 31 | widgetViewHolder.baseBindEntity(entity); 32 | } 33 | 34 | public void baseUpdateEntity(BaseEntity entity) { 35 | widgetViewHolder.baseUpdateEntity(entity); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/SubscriberLayerViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.viewmodel.DetailsViewModel; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 17.03.21 16 | */ 17 | public abstract class SubscriberLayerViewHolder extends DetailViewHolder { 18 | 19 | private LayerViewHolder layerViewHolder; 20 | private SubscriberViewHolder subscriberViewHolder; 21 | 22 | 23 | public SubscriberLayerViewHolder() { 24 | this.layerViewHolder = new LayerViewHolder(this); 25 | this.subscriberViewHolder = new SubscriberViewHolder(this); 26 | this.subscriberViewHolder.topicTypes = this.getTopicTypes(); 27 | } 28 | 29 | 30 | public abstract List getTopicTypes(); 31 | 32 | @Override 33 | public void setViewModel(DetailsViewModel viewModel) { 34 | super.setViewModel(viewModel); 35 | subscriberViewHolder.viewModel = viewModel; 36 | } 37 | 38 | public void baseInitView(View view) { 39 | layerViewHolder.baseInitView(view); 40 | subscriberViewHolder.baseInitView(view); 41 | } 42 | 43 | public void baseBindEntity(BaseEntity entity) { 44 | layerViewHolder.baseBindEntity(entity); 45 | subscriberViewHolder.baseBindEntity(entity); 46 | } 47 | 48 | public void baseUpdateEntity(BaseEntity entity) { 49 | layerViewHolder.baseUpdateEntity(entity); 50 | subscriberViewHolder.baseUpdateEntity(entity); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/details/SubscriberWidgetViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.details; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.viewmodel.DetailsViewModel; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 17.03.21 16 | */ 17 | public abstract class SubscriberWidgetViewHolder extends DetailViewHolder { 18 | 19 | private WidgetViewHolder widgetViewHolder; 20 | private SubscriberViewHolder subscriberViewHolder; 21 | 22 | 23 | public SubscriberWidgetViewHolder() { 24 | this.widgetViewHolder = new WidgetViewHolder(this); 25 | this.subscriberViewHolder = new SubscriberViewHolder(this); 26 | this.subscriberViewHolder.topicTypes = this.getTopicTypes(); 27 | } 28 | 29 | 30 | public abstract List getTopicTypes(); 31 | 32 | @Override 33 | public void setViewModel(DetailsViewModel viewModel) { 34 | super.setViewModel(viewModel); 35 | subscriberViewHolder.viewModel = viewModel; 36 | } 37 | 38 | public void baseInitView(View view) { 39 | widgetViewHolder.baseInitView(view); 40 | subscriberViewHolder.baseInitView(view); 41 | } 42 | 43 | public void baseBindEntity(BaseEntity entity) { 44 | widgetViewHolder.baseBindEntity(entity); 45 | subscriberViewHolder.baseBindEntity(entity); 46 | } 47 | 48 | public void baseUpdateEntity(BaseEntity entity) { 49 | widgetViewHolder.baseUpdateEntity(entity); 50 | subscriberViewHolder.baseUpdateEntity(entity); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/IBaseView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 4 | 5 | /** 6 | * TODO: Description 7 | * 8 | * @author Nico Studt 9 | * @version 1.0.0 10 | * @created on 10.03.21 11 | */ 12 | public interface IBaseView { 13 | 14 | void setWidgetEntity(BaseEntity entity); 15 | BaseEntity getWidgetEntity(); 16 | 17 | boolean sameWidgetEntity(BaseEntity other); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/IPublisherView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 4 | import com.schneewittchen.rosandroid.ui.general.DataListener; 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 10.03.21 12 | */ 13 | public interface IPublisherView { 14 | 15 | void publishViewData(BaseData data); 16 | void setDataListener(DataListener listener); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/ISubscriberView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import org.ros.internal.message.Message; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 10.03.21 12 | */ 13 | public interface ISubscriberView { 14 | 15 | void onNewMessage(Message message); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/PublisherLayerView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.util.Log; 6 | 7 | import androidx.annotation.Nullable; 8 | 9 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 10 | import com.schneewittchen.rosandroid.ui.general.DataListener; 11 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.VisualizationView; 12 | 13 | import javax.microedition.khronos.opengles.GL10; 14 | 15 | 16 | /** 17 | * TODO: Description 18 | * 19 | * @author Nico Studt 20 | * @version 1.0.0 21 | * @created on 10.03.21 22 | */ 23 | public abstract class PublisherLayerView extends LayerView implements IPublisherView{ 24 | 25 | private DataListener dataListener; 26 | 27 | 28 | public PublisherLayerView(Context context) { 29 | super(context); 30 | } 31 | 32 | 33 | @Override 34 | public void publishViewData(BaseData data) { 35 | if(dataListener == null) return; 36 | 37 | data.setTopic(widgetEntity.topic); 38 | dataListener.onNewWidgetData(data); 39 | } 40 | 41 | @Override 42 | public void setDataListener(DataListener listener) { 43 | this.dataListener = listener; 44 | } 45 | 46 | @Override 47 | public void draw(VisualizationView view, GL10 gl) {} 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/PublisherWidgetView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.util.Log; 6 | 7 | import androidx.annotation.Nullable; 8 | 9 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 10 | import com.schneewittchen.rosandroid.ui.general.DataListener; 11 | import com.schneewittchen.rosandroid.widgets.button.ButtonData; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nico Studt 18 | * @version 1.0.0 19 | * @created on 10.03.21 20 | */ 21 | public abstract class PublisherWidgetView extends WidgetView implements IPublisherView{ 22 | 23 | public static String TAG = PublisherWidgetView.class.getSimpleName(); 24 | 25 | private DataListener dataListener; 26 | 27 | 28 | public PublisherWidgetView(Context context) { 29 | super(context); 30 | } 31 | 32 | public PublisherWidgetView(Context context, @Nullable AttributeSet attrs) { 33 | super(context, attrs); 34 | } 35 | 36 | 37 | @Override 38 | public void publishViewData(BaseData data) { 39 | if(dataListener == null) return; 40 | 41 | data.setTopic(widgetEntity.topic); 42 | dataListener.onNewWidgetData(data); 43 | } 44 | 45 | @Override 46 | public void setDataListener(DataListener listener) { 47 | this.dataListener = listener; 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/SubscriberLayerView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import android.content.Context; 4 | 5 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.VisualizationView; 6 | 7 | import org.ros.internal.message.Message; 8 | 9 | import javax.microedition.khronos.opengles.GL10; 10 | 11 | 12 | /** 13 | * TODO: Description 14 | * 15 | * @author Nico Studt 16 | * @version 1.0.0 17 | * @created on 10.03.21 18 | */ 19 | public abstract class SubscriberLayerView extends LayerView implements ISubscriberView{ 20 | 21 | public SubscriberLayerView(Context context) { 22 | super(context); 23 | } 24 | 25 | 26 | @Override 27 | public void onNewMessage(Message message) { 28 | return; 29 | } 30 | 31 | @Override 32 | public void draw(VisualizationView view, GL10 gl) {} 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/SubscriberWidgetView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import org.ros.internal.message.Message; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 10.03.21 15 | */ 16 | public abstract class SubscriberWidgetView extends WidgetView implements ISubscriberView{ 17 | 18 | 19 | public SubscriberWidgetView(Context context) { 20 | super(context); 21 | } 22 | 23 | public SubscriberWidgetView(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | } 26 | 27 | 28 | @Override 29 | public void onNewMessage(Message message) { 30 | return; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/ui/views/widgets/WidgetGroupView.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.ui.views.widgets; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import androidx.annotation.Nullable; 7 | 8 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.RosData; 9 | 10 | import org.ros.internal.message.Message; 11 | 12 | 13 | /** 14 | * TODO: Description 15 | * 16 | * @author Nico Studt 17 | * @version 1.0.0 18 | * @created on 10.03.21 19 | */ 20 | public abstract class WidgetGroupView extends WidgetView implements ISubscriberView, IPublisherView { 21 | 22 | 23 | public WidgetGroupView(Context context) { 24 | super(context); 25 | } 26 | 27 | public WidgetGroupView(Context context, @Nullable AttributeSet attrs) { 28 | super(context, attrs); 29 | } 30 | 31 | public abstract void addLayer(LayerView layer); 32 | 33 | public abstract void onNewData(RosData data); 34 | 35 | @Override 36 | public void onNewMessage(Message message) { return; } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/utility/Constants.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.utility; 2 | 3 | /** 4 | * Constants of the project that are globally reachable 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 31.01.20 9 | * @updated on 31.01.20 10 | * @modified by 11 | */ 12 | public class Constants { 13 | 14 | /** 15 | * Name of the room database on disk 16 | */ 17 | public static final String DB_NAME = "config_database"; 18 | 19 | public static final String VIEW_FORMAT = ".widgets.%s.%sView"; 20 | 21 | public static final String VIEWHOLDER_FORMAT = ".widgets.%s.%sDetailVH"; 22 | 23 | public static final String ENTITY_FORMAT = ".widgets.%s.%sEntity"; 24 | 25 | public static final String DETAIL_LAYOUT_FORMAT = "widget_detail_%s"; 26 | 27 | public static final String WIDGET_NAMING = "%s #%d"; 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/utility/LambdaTask.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.utility; 2 | 3 | import android.os.AsyncTask; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * TODO: Edit to return values of called functions 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 31.01.20 12 | * @updated on 31.01.20 13 | * @modified by 14 | */ 15 | public class LambdaTask extends AsyncTask { 16 | 17 | TaskRunnable taskRunnable; 18 | 19 | 20 | public LambdaTask(TaskRunnable taskRunnable){ 21 | this.taskRunnable = taskRunnable; 22 | } 23 | 24 | 25 | @Override 26 | protected Void doInBackground(Void... voids) { 27 | taskRunnable.run(); 28 | return null; 29 | } 30 | 31 | public interface TaskRunnable { 32 | void run(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/utility/WidgetDiffCallback.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.utility; 2 | 3 | import androidx.recyclerview.widget.DiffUtil; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | 7 | import java.util.List; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.1 15 | * @created on 05.02.20 16 | * @updated on 24.09.20 17 | * @modified by Nico Studt 18 | */ 19 | public class WidgetDiffCallback extends DiffUtil.Callback{ 20 | 21 | public static String TAG = WidgetDiffCallback.class.getSimpleName(); 22 | 23 | List oldWidgets; 24 | List newWidgets; 25 | 26 | 27 | public WidgetDiffCallback(List newWidgets, List oldWidgets) { 28 | this.newWidgets = newWidgets; 29 | this.oldWidgets = oldWidgets; 30 | } 31 | 32 | 33 | @Override 34 | public int getOldListSize() { 35 | return oldWidgets.size(); 36 | } 37 | 38 | @Override 39 | public int getNewListSize() { 40 | return newWidgets.size(); 41 | } 42 | 43 | @Override 44 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { 45 | BaseEntity oldWidget = oldWidgets.get(oldItemPosition); 46 | BaseEntity newWidget = newWidgets.get(newItemPosition); 47 | 48 | return oldWidget.id == newWidget.id; 49 | } 50 | 51 | @Override 52 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { 53 | BaseEntity oldWidget = oldWidgets.get(oldItemPosition); 54 | BaseEntity newWidget = newWidgets.get(newItemPosition); 55 | 56 | return oldWidget.equals(newWidget); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/viewmodel/MainViewModel.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.viewmodel; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.lifecycle.AndroidViewModel; 8 | import androidx.lifecycle.LiveData; 9 | import androidx.lifecycle.MediatorLiveData; 10 | 11 | import com.schneewittchen.rosandroid.model.repositories.ConfigRepository; 12 | import com.schneewittchen.rosandroid.model.repositories.ConfigRepositoryImpl; 13 | 14 | 15 | /** 16 | * TODO: Description 17 | * 18 | * @author Nico Studt 19 | * @version 1.0.1 20 | * @created on 10.01.20 21 | * @updated on 27.07.20 22 | * @modified by Nils Rottmann 23 | */ 24 | public class MainViewModel extends AndroidViewModel { 25 | 26 | private static final String TAG = MainViewModel.class.getSimpleName(); 27 | 28 | ConfigRepository configRepo; 29 | MediatorLiveData configTitle; 30 | 31 | 32 | public MainViewModel(@NonNull Application application) { 33 | super(application); 34 | 35 | configRepo = ConfigRepositoryImpl.getInstance(getApplication()); 36 | } 37 | 38 | 39 | public LiveData getConfigTitle() { 40 | if (configTitle == null) { 41 | configTitle = new MediatorLiveData<>(); 42 | 43 | configTitle.addSource(configRepo.getCurrentConfig(), configuration -> { 44 | if (configuration == null) 45 | return; 46 | 47 | configTitle.setValue(configuration.name); 48 | }); 49 | } 50 | 51 | return configTitle; 52 | } 53 | 54 | public void createFirstConfig(String name) { 55 | configRepo.createConfig(name); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/viewmodel/VizViewModel.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.viewmodel; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.lifecycle.AndroidViewModel; 8 | import androidx.lifecycle.LiveData; 9 | 10 | import com.schneewittchen.rosandroid.domain.RosDomain; 11 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.RosData; 12 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 13 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 14 | 15 | import java.util.List; 16 | 17 | 18 | /** 19 | * TODO: Description 20 | * 21 | * @author Nico Studt 22 | * @version 1.0.2 23 | * @created on 10.01.20 24 | * @updated on 21.04.20 25 | * @modified by Nils Rottmann 26 | */ 27 | public class VizViewModel extends AndroidViewModel { 28 | 29 | private static final String TAG = VizViewModel.class.getSimpleName(); 30 | 31 | private final RosDomain rosDomain; 32 | 33 | 34 | public VizViewModel(@NonNull Application application) { 35 | super(application); 36 | 37 | rosDomain = RosDomain.getInstance(application); 38 | } 39 | 40 | public void updateWidget(BaseEntity widget) { 41 | rosDomain.updateWidget(null, widget); 42 | } 43 | 44 | public LiveData> getCurrentWidgets() { 45 | return rosDomain.getCurrentWidgets(); 46 | } 47 | 48 | public LiveData getData() { 49 | return this.rosDomain.getData(); 50 | } 51 | 52 | 53 | public void publishData(BaseData data) { 54 | rosDomain.publishData(data); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/battery/BatteryDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.battery; 2 | 3 | import android.view.View; 4 | import android.widget.CompoundButton; 5 | 6 | import com.google.android.material.switchmaterial.SwitchMaterial; 7 | import com.schneewittchen.rosandroid.R; 8 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 9 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberWidgetViewHolder; 10 | 11 | import java.util.Collections; 12 | import java.util.List; 13 | 14 | 15 | /** 16 | * TODO: Description 17 | * 18 | * @author Nico Studt 19 | * @version 1.0.0 20 | * @created on 13.05.2021 21 | */ 22 | public class BatteryDetailVH extends SubscriberWidgetViewHolder { 23 | 24 | SwitchMaterial voltageSwitch; 25 | boolean forceSetChecked; 26 | 27 | @Override 28 | public void initView(View view) { 29 | voltageSwitch = view.findViewById(R.id.voltageSwitch); 30 | voltageSwitch.setOnCheckedChangeListener((compoundButton, b) -> { 31 | if (!forceSetChecked) forceWidgetUpdate(); 32 | }); 33 | } 34 | 35 | @Override 36 | protected void bindEntity(BaseEntity entity) { 37 | BatteryEntity batteryEntity = (BatteryEntity) entity; 38 | 39 | forceSetChecked = true; 40 | voltageSwitch.setChecked(batteryEntity.displayVoltage); 41 | forceSetChecked = false; 42 | } 43 | 44 | @Override 45 | protected void updateEntity(BaseEntity entity) { 46 | BatteryEntity batteryEntity = (BatteryEntity)entity; 47 | batteryEntity.displayVoltage = voltageSwitch.isChecked(); 48 | } 49 | 50 | @Override 51 | public List getTopicTypes() { 52 | return Collections.singletonList(sensor_msgs.BatteryState._TYPE); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/battery/BatteryEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.battery; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Nico Studt 11 | * @version 1.0.0 12 | * @created on 13.05.2021 13 | */ 14 | public class BatteryEntity extends SubscriberWidgetEntity { 15 | 16 | public boolean displayVoltage; 17 | 18 | 19 | public BatteryEntity() { 20 | this.width = 1; 21 | this.height = 2; 22 | this.topic = new Topic("battery", sensor_msgs.BatteryState._TYPE); 23 | this.displayVoltage = false; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/button/ButtonData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.button; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 5 | 6 | import org.ros.internal.message.Message; 7 | import org.ros.node.topic.Publisher; 8 | 9 | import std_msgs.Bool; 10 | 11 | /** 12 | * TODO: Description 13 | * 14 | * @author Dragos Circa 15 | * @version 1.0.0 16 | * @created on 02.11.2020 17 | * @updated on 18.11.2020 18 | * @modified by Nils Rottmann 19 | */ 20 | 21 | public class ButtonData extends BaseData { 22 | 23 | public boolean pressed; 24 | 25 | public ButtonData(boolean pressed) { 26 | this.pressed = pressed; 27 | } 28 | 29 | @Override 30 | public Message toRosMessage(Publisher publisher, BaseEntity widget) { 31 | std_msgs.Bool message = (Bool) publisher.newMessage(); 32 | message.setData(pressed); 33 | return message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/button/ButtonEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.button; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.PublisherWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import std_msgs.Bool; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Dragos Circa 13 | * @version 1.0.0 14 | * @created on 02.11.2020 15 | * @updated on 18.11.2020 16 | * @modified by Nils Rottmann 17 | */ 18 | 19 | public class ButtonEntity extends PublisherWidgetEntity { 20 | 21 | public String text; 22 | public int rotation; 23 | 24 | 25 | public ButtonEntity() { 26 | this.width = 2; 27 | this.height = 1; 28 | this.topic = new Topic("btn_press", Bool._TYPE); 29 | this.immediatePublish = true; 30 | this.text = "A button"; 31 | this.rotation = 0; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/camera/CameraDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.camera; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberWidgetViewHolder; 7 | 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | import sensor_msgs.CompressedImage; 12 | import sensor_msgs.Image; 13 | 14 | 15 | /** 16 | * TODO: Description 17 | * 18 | * @author Nils Rottmann 19 | * @version 1.0.0 20 | * @created on 13.05.20 21 | * @updated on 07.09.20 22 | * @modified by Nico Studt 23 | * @updated on 17.09.20 24 | * @modified by Nils Rottmann 25 | * @updated on 20.03.21 26 | * @modified by Nico Studt 27 | */ 28 | public class CameraDetailVH extends SubscriberWidgetViewHolder { 29 | 30 | public static final String TAG = CameraDetailVH.class.getSimpleName(); 31 | 32 | 33 | @Override 34 | protected void initView(View parentView) { 35 | 36 | } 37 | 38 | @Override 39 | protected void bindEntity(BaseEntity entity) { 40 | 41 | } 42 | 43 | @Override 44 | protected void updateEntity(BaseEntity entity) { 45 | 46 | } 47 | 48 | @Override 49 | public List getTopicTypes() { 50 | return Arrays.asList(Image._TYPE, CompressedImage._TYPE); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/camera/CameraEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.camera; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import sensor_msgs.Image; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nils Rottmann 13 | * @version 1.0.0 14 | * @created on 27.04.2020 15 | * @updated on 27.10.2020 16 | * @modified by Nico Studt 17 | */ 18 | public class CameraEntity extends SubscriberWidgetEntity { 19 | 20 | int colorScheme; 21 | boolean drawBehind; 22 | boolean useTimeStamp; 23 | 24 | 25 | public CameraEntity() { 26 | this.width = 8; 27 | this.height = 6; 28 | this.topic = new Topic("camera/image_raw", Image._TYPE); 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/debug/DebugEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.debug; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import org.ros.node.topic.Subscriber; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nils Rottmann 13 | * @version 1.0.0 14 | * @created on 17.08.20 15 | * @updated on 17.09.20 16 | * @modified by Nils Rottmann 17 | */ 18 | public class DebugEntity extends SubscriberWidgetEntity { 19 | 20 | public int numberMessages; 21 | 22 | 23 | public DebugEntity() { 24 | this.width = 4; 25 | this.height = 3; 26 | this.topic = new Topic("MessageToDebug", Subscriber.TOPIC_MESSAGE_TYPE_WILDCARD); 27 | this.numberMessages = 10; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/gps/GpsData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.gps; 2 | 3 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 4 | 5 | import sensor_msgs.NavSatFix; 6 | 7 | 8 | /** 9 | * TODO: Description 10 | * 11 | * @author Nils Rottmann 12 | * @version 1.0.0 13 | * @created on 05.05.20 14 | * @updated on 05.05.20 15 | * @modified by 16 | */ 17 | 18 | public class GpsData extends BaseData { 19 | 20 | private NavSatFix navSatFix; 21 | 22 | public GpsData(NavSatFix navSatFix) { 23 | this.navSatFix = navSatFix; 24 | } 25 | 26 | public double getLat() { 27 | return navSatFix.getLatitude(); 28 | } 29 | 30 | public double getLon() { 31 | return navSatFix.getLongitude(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/gps/GpsDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.gps; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberWidgetViewHolder; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | import sensor_msgs.NavSatFix; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nils Rottmann 18 | * @version 1.0.0 19 | * @created on 05.05.20 20 | * @updated on 17.09.20 21 | * @modified by Nils Rottmann 22 | * @updated on 20.03.21 23 | * @modified by Nico Studt 24 | */ 25 | public class GpsDetailVH extends SubscriberWidgetViewHolder { 26 | 27 | 28 | @Override 29 | protected void initView(View parentView) { 30 | 31 | } 32 | 33 | @Override 34 | protected void bindEntity(BaseEntity entity) { 35 | 36 | } 37 | 38 | @Override 39 | protected void updateEntity(BaseEntity entity) { 40 | 41 | } 42 | 43 | @Override 44 | public List getTopicTypes() { 45 | return Collections.singletonList(NavSatFix._TYPE); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/gps/GpsEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.gps; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import sensor_msgs.NavSatFix; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nils Rottmann 13 | * @version 1.0.0 14 | * @created on 05.05.20 15 | * @updated on 27.10.2020 16 | * @modified by Nico Studt 17 | */ 18 | public class GpsEntity extends SubscriberWidgetEntity { 19 | 20 | public GpsEntity() { 21 | this.width = 8; 22 | this.height = 8; 23 | this.topic = new Topic("gps", NavSatFix._TYPE); 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/gridmap/GridMapDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.gridmap; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberLayerViewHolder; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | import nav_msgs.OccupancyGrid; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nico Studt 18 | * @version 1.0.0 19 | * @created on 08.03.21 20 | */ 21 | public class GridMapDetailVH extends SubscriberLayerViewHolder { 22 | 23 | 24 | @Override 25 | protected void initView(View parentView) { 26 | 27 | } 28 | 29 | @Override 30 | protected void bindEntity(BaseEntity entity) { 31 | 32 | } 33 | 34 | @Override 35 | protected void updateEntity(BaseEntity entity) { 36 | 37 | } 38 | 39 | @Override 40 | public List getTopicTypes() { 41 | return Collections.singletonList(OccupancyGrid._TYPE); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/gridmap/GridMapEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.gridmap; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberLayerEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import nav_msgs.OccupancyGrid; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 08.03.21 15 | */ 16 | public class GridMapEntity extends SubscriberLayerEntity { 17 | 18 | public GridMapEntity() { 19 | this.topic = new Topic("/move_base/local_costmap/costmap", OccupancyGrid._TYPE); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/joystick/JoystickEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.joystick; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.PublisherWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import geometry_msgs.Twist; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.1.1 14 | * @created on 31.01.20 15 | * @updated on 10.05.20 16 | * @modified by Nico Studt 17 | */ 18 | public class JoystickEntity extends PublisherWidgetEntity { 19 | 20 | public String xAxisMapping; 21 | public String yAxisMapping; 22 | public float xScaleLeft; 23 | public float xScaleRight; 24 | public float yScaleLeft; 25 | public float yScaleRight; 26 | 27 | 28 | public JoystickEntity() { 29 | this.width = 4; 30 | this.height = 4; 31 | this.topic = new Topic("cmd_vel", Twist._TYPE); 32 | this.immediatePublish = false; 33 | this.publishRate = 20f; 34 | this.xAxisMapping = "Angular/Z"; 35 | this.yAxisMapping = "Linear/X"; 36 | this.xScaleLeft = 1; 37 | this.xScaleRight = -1; 38 | this.yScaleLeft = -1; 39 | this.yScaleRight = 1; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/label/LabelData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.label; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Dragos Circa 7 | * @version 1.0.0 8 | * @created on 02.11.2020 9 | * @updated on 18.11.2020 10 | * @modified by Nils Rottmann 11 | */ 12 | 13 | 14 | public class LabelData { 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/label/LabelEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.label; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SilentWidgetEntity; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Dragos Circa 10 | * @version 1.0.0 11 | * @created on 02.11.2020 12 | * @updated on 18.11.2020 13 | * @modified by Nils Rottmann 14 | * @updated on 01.04.2021 15 | * @modified by Nico Studt 16 | */ 17 | public class LabelEntity extends SilentWidgetEntity { 18 | 19 | public String text; 20 | public int rotation; 21 | 22 | public LabelEntity() { 23 | this.width = 3; 24 | this.height = 1; 25 | this.text = "A label"; 26 | this.rotation = 0; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/laserscan/LaserScanEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.laserscan; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberLayerEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | import com.schneewittchen.rosandroid.ui.opengl.visualisation.ROSColor; 6 | 7 | import sensor_msgs.LaserScan; 8 | 9 | 10 | /** 11 | * TODO: Description 12 | * 13 | * @author Nico Studt 14 | * @version 1.0.0 15 | * @created on 14.05.21 16 | */ 17 | public class LaserScanEntity extends SubscriberLayerEntity { 18 | 19 | public int pointsColor; 20 | public int areaColor; 21 | public int pointSize; 22 | public boolean showFreeSpace; 23 | 24 | 25 | public LaserScanEntity() { 26 | this.topic = new Topic("/scan", LaserScan._TYPE); 27 | this.pointsColor = ROSColor.fromHexAndAlpha("377dfa", 0.6f).toInt(); 28 | this.areaColor = ROSColor.fromHexAndAlpha("377dfa", 0.2f).toInt(); 29 | this.pointSize = 10; 30 | this.showFreeSpace = true; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/logger/LoggerData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.logger; 2 | 3 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.node.BaseData; 4 | 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Dragos Circa 10 | * @version 1.0.0 11 | * @created on 02.11.2020 12 | * @updated on 18.11.2020 13 | * @modified by Nils Rottmann 14 | */ 15 | 16 | public class LoggerData extends BaseData { 17 | 18 | public String data; 19 | 20 | public LoggerData(std_msgs.String message) { 21 | this.data = message.getData(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/logger/LoggerEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.logger; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | 7 | /** 8 | * TODO: Description 9 | * 10 | * @author Dragos Circa 11 | * @version 1.0.0 12 | * @created on 02.11.2020 13 | * @updated on 18.11.2020 14 | * @modified by Nils Rottmann 15 | */ 16 | 17 | public class LoggerEntity extends SubscriberWidgetEntity { 18 | 19 | public String text; 20 | public int rotation; 21 | 22 | 23 | public LoggerEntity() { 24 | this.width = 3; 25 | this.height = 1; 26 | this.topic = new Topic("log", std_msgs.String._TYPE); 27 | this.text = "A logger"; 28 | this.rotation = 0; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/path/PathDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.path; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberLayerViewHolder; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | import nav_msgs.Path; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nico Studt 18 | * @version 1.0.0 19 | * @created on 08.03.21 20 | */ 21 | public class PathDetailVH extends SubscriberLayerViewHolder { 22 | 23 | 24 | @Override 25 | protected void initView(View parentView) { 26 | 27 | } 28 | 29 | @Override 30 | protected void bindEntity(BaseEntity entity) { 31 | 32 | } 33 | 34 | @Override 35 | protected void updateEntity(BaseEntity entity) { 36 | 37 | } 38 | 39 | @Override 40 | public List getTopicTypes() { 41 | return Collections.singletonList(Path._TYPE); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/path/PathEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.path; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberLayerEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | 7 | /** 8 | * Path entity represents a widget which subscribes 9 | * to a topic with message type "nav_msgs.Path". 10 | * Usable in 2D widgets. 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 08.03.21 15 | */ 16 | public class PathEntity extends SubscriberLayerEntity { 17 | 18 | public float lineWidth; 19 | public String lineColor; 20 | 21 | 22 | public PathEntity() { 23 | this.topic = new Topic("/move_base/TebLocalPlannerROS/local_plan", nav_msgs.Path._TYPE); 24 | this.lineWidth = 4; 25 | this.lineColor = "ff0000ff"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/pose/PoseDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.pose; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.SubscriberLayerViewHolder; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | import geometry_msgs.PoseWithCovarianceStamped; 12 | import nav_msgs.Path; 13 | 14 | 15 | /** 16 | * TODO: Description 17 | * 18 | * @author Nico Studt 19 | * @version 1.0.0 20 | * @created on 21.03.21 21 | */ 22 | public class PoseDetailVH extends SubscriberLayerViewHolder { 23 | 24 | 25 | @Override 26 | protected void initView(View parentView) { 27 | 28 | } 29 | 30 | @Override 31 | protected void bindEntity(BaseEntity entity) { 32 | 33 | } 34 | 35 | @Override 36 | protected void updateEntity(BaseEntity entity) { 37 | 38 | } 39 | 40 | @Override 41 | public List getTopicTypes() { 42 | return Collections.singletonList(PoseWithCovarianceStamped._TYPE); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/pose/PoseEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.pose; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberLayerEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import geometry_msgs.PoseWithCovarianceStamped; 7 | 8 | 9 | /** 10 | * Pose entity represents a widget which subscribes 11 | * to a topic with message type "geometry_msgs.PoseStamped". 12 | * Usable in 2D widgets. 13 | * 14 | * @author Nico Studt 15 | * @version 1.0.0 16 | * @created on 10.03.21 17 | */ 18 | public class PoseEntity extends SubscriberLayerEntity { 19 | 20 | 21 | public PoseEntity() { 22 | this.topic = new Topic("/amcl_pose", PoseWithCovarianceStamped._TYPE); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/rqtplot/RqtPlotData.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.rqtplot; 2 | 3 | /** 4 | * TODO: Description 5 | * 6 | * @author Nico Studt 7 | * @version 1.0.0 8 | * @created on 29.05.21 9 | */ 10 | public class RqtPlotData { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/rqtplot/RqtPlotEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.rqtplot; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.SubscriberWidgetEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import org.ros.node.topic.Subscriber; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 29.05.21 15 | */ 16 | public class RqtPlotEntity extends SubscriberWidgetEntity { 17 | 18 | public String fieldPath; 19 | 20 | public RqtPlotEntity() { 21 | this.width = 8; 22 | this.height = 6; 23 | this.topic = new Topic("/plot", Subscriber.TOPIC_MESSAGE_TYPE_WILDCARD); 24 | this.fieldPath = "/pos/xy"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/touchgoal/TouchGoalDetailVH.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.touchgoal; 2 | 3 | import android.view.View; 4 | 5 | import com.schneewittchen.rosandroid.model.entities.widgets.BaseEntity; 6 | import com.schneewittchen.rosandroid.ui.views.details.PublisherLayerViewHolder; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | import geometry_msgs.PoseStamped; 12 | 13 | 14 | /** 15 | * TODO: Description 16 | * 17 | * @author Nico Studt 18 | * @version 1.0.0 19 | * @created on 26.05.2021 20 | */ 21 | public class TouchGoalDetailVH extends PublisherLayerViewHolder { 22 | 23 | private static final String TAG = TouchGoalDetailVH.class.getSimpleName(); 24 | 25 | 26 | @Override 27 | protected void initView(View parentView) { 28 | } 29 | 30 | @Override 31 | protected void bindEntity(BaseEntity entity) { 32 | TouchGoalEntity scanEntity = (TouchGoalEntity) entity; 33 | } 34 | 35 | @Override 36 | protected void updateEntity(BaseEntity entity) { 37 | TouchGoalEntity scanEntity = (TouchGoalEntity) entity; 38 | } 39 | 40 | @Override 41 | public List getTopicTypes() { 42 | return Collections.singletonList(PoseStamped._TYPE); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/touchgoal/TouchGoalEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.touchgoal; 2 | 3 | import com.schneewittchen.rosandroid.model.entities.widgets.PublisherLayerEntity; 4 | import com.schneewittchen.rosandroid.model.repositories.rosRepo.message.Topic; 5 | 6 | import geometry_msgs.PoseStamped; 7 | 8 | 9 | /** 10 | * TODO: Description 11 | * 12 | * @author Nico Studt 13 | * @version 1.0.0 14 | * @created on 26.05.2021 15 | */ 16 | public class TouchGoalEntity extends PublisherLayerEntity { 17 | 18 | public TouchGoalEntity() { 19 | this.topic = new Topic("/goal", PoseStamped._TYPE); 20 | this.immediatePublish = true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/schneewittchen/rosandroid/widgets/viz2d/Viz2DEntity.java: -------------------------------------------------------------------------------- 1 | package com.schneewittchen.rosandroid.widgets.viz2d; 2 | 3 | 4 | import com.schneewittchen.rosandroid.model.entities.widgets.GroupEntity; 5 | 6 | /** 7 | * TODO: Description 8 | * 9 | * @author Nico Studt 10 | * @version 1.0.0 11 | * @created on 08.03.21 12 | */ 13 | public class Viz2DEntity extends GroupEntity { 14 | 15 | public String frame; 16 | 17 | 18 | public Viz2DEntity() { 19 | this.width = 8; 20 | this.height = 8; 21 | this.frame = "map"; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/res/anim/onboarding_buttton_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/state_button_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/blue_circles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/blue_circles.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/card_bg_onlyborder.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/empty_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_abort_btn.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_forward_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_connected.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_less_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_more_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mode_edit_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_place_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remove_circle_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_rss_feed_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_send.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_config.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_details.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_gps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_gps.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_joystick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_joystick.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_layers.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_map.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_master.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_ssh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_ssh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/intro_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/intro_start.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_button_gradient_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_indicator_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_indicator_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_indicator_selecter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/refresh_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/update.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/drawable/update.jpg -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/config_chooser_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/detail_publisher_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/detail_publisher_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/detail_subscriber_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/detail_subscriber_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dropdown_menu_popup_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/layout/osm_map.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/ssh_text_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/update_popup_window.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_battery.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 26 | 27 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_camera.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_gps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_gridmap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_path.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_pose.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_detail_touchgoal.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/toolbar_menu.xml: -------------------------------------------------------------------------------- 1 | 2 |

5 | 6 | 7 | 8 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #81D4FA 4 | @color/black01dp 5 | #81D4FA 6 | 7 | #EF5350 8 | #9CCC65 9 | #ffc107 10 | #121212 11 | #1D1D1D 12 | #212121 13 | #242424 14 | #272727 15 | #2C2C2C 16 | #2d2d2d 17 | #323232 18 | #353535 19 | #373737 20 | 21 | #e2e2e2 22 | #DEDEDE 23 | #999999 24 | #616161 25 | #09FFFFFF 26 | 27 | @color/whiteLow 28 | @color/black00dp 29 | #BB121212 30 | #BB121212 31 | @color/whiteMedium 32 | 33 | #EF5350 34 | #FFA726 35 | #FFEE58 36 | #D4E157 37 | #9CCC65 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 200dp 4 | 16dp 5 | 30dp 6 | 10dp 7 | 48dp 8 | 16dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #212121 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/intro.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ROS-Mobile 6 | Configuration 7 | Customization 8 | Monitoring 9 | Controlling 10 | SSH 11 | 12 | 13 | 14 | ROS-Mobile is an Android application designed for dynamic control and visualization of mobile robotic systems operated by the Robot Operating System (ROS). 15 | Create your own configurations for each of your robotic systems. 16 | Enhance your configurations by defining customizable nodes in the Details section. 17 | Monitoring of your robotic system, for example by displaying an occupancy grid map. 18 | Controlling of your robotic system, for example using teleoperational control via the joystick node. 19 | Directly accessing the robot system via the embedded SSH terminal. 20 | 21 | 22 | 23 | @drawable/intro_start 24 | @drawable/intro_config 25 | @drawable/intro_details 26 | @drawable/intro_map 27 | @drawable/intro_joystick 28 | @drawable/intro_ssh 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/values/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Update 2.1:\nNew Widgets and Bug Fixes 5 | 6 | 7 | 8 | \u2022 RqtPlot Widget added \n\u2022 Battery Widget added \n\u2022 LaserScan and TouchGoal added \n\u2022 SSH Tab improved 9 | 10 | 11 | 12 | @drawable/update 13 | 14 | 15 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | var = 16 3 | }// Top-level build file where you can add configuration options common to all sub-projects/modules. 4 | 5 | buildscript { 6 | apply from: "https://github.com/rosjava/rosjava_bootstrap/raw/kinetic/buildscript.gradle" 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.2.0' 10 | } 11 | } 12 | 13 | subprojects { 14 | apply plugin: 'ros-android' 15 | 16 | afterEvaluate { project -> 17 | android { 18 | // Exclude a few files that are duplicated across our dependencies and 19 | // prevent packaging Android applications. 20 | packagingOptions { 21 | exclude "META-INF/LICENSE.txt" 22 | exclude "META-INF/NOTICE.txt" 23 | } 24 | } 25 | } 26 | } 27 | 28 | allprojects { 29 | repositories { 30 | google() 31 | maven { url 'https://repo1.maven.org/maven2' } 32 | } 33 | } 34 | 35 | task clean(type: Delete) { 36 | delete rootProject.buildDir 37 | } 38 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/domain/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.domain 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.domain

13 |
14 |

Classes

15 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/model/entities/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.model.entities 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.model.entities

13 |
14 |

Classes

15 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/model/repositories/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.model.repositories 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.model.repositories

13 |
14 |

Interfaces

15 | 19 |

Classes

20 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/model/rosRepo/connection/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.model.repositories.rosRepo.connection 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.model.repositories.rosRepo.connection

13 |
14 |

Interfaces

15 | 18 |

Classes

19 | 22 |

Enums

23 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/model/rosRepo/message/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.model.repositories.rosRepo.message 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.model.repositories.rosRepo.message

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/model/rosRepo/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.model.repositories.rosRepo 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.model.repositories.rosRepo

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/test/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.test 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.test

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/ui/activity/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.ui.activity 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.ui.activity

13 |
14 |

Classes

15 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/ui/custum_views/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.ui.views 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.ui.views

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/utility/parser/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.utility.parser 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.utility.parser

13 |
14 |

Classes

15 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/viewmodel/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.viewmodel 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.viewmodel

13 |
14 |

Classes

15 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/widgets/counter/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.widgets.counter 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.widgets.counter

13 |
14 |

Classes

15 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/widgets/gridmap/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.widgets.gridmap 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.widgets.gridmap

13 |
14 |

Classes

15 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /doc/com/schneewittchen/rosandroid/widgets/joystick/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.schneewittchen.rosandroid.widgets.joystick 7 | 8 | 9 | 10 | 11 | 12 |

com.schneewittchen.rosandroid.widgets.joystick

13 |
14 |

Interfaces

15 | 18 |

Classes

19 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /doc/package-list: -------------------------------------------------------------------------------- 1 | com.schneewittchen.rosandroid.domain 2 | com.schneewittchen.rosandroid.model.db 3 | com.schneewittchen.rosandroid.model.entities 4 | com.schneewittchen.rosandroid.model.repositories 5 | com.schneewittchen.rosandroid.model.repositories.rosRepo 6 | com.schneewittchen.rosandroid.model.repositories.rosRepo.connection 7 | com.schneewittchen.rosandroid.model.repositories.rosRepo.message 8 | com.schneewittchen.rosandroid.model.repositories.rosRepo.node 9 | com.schneewittchen.rosandroid.ui.activity 10 | com.schneewittchen.rosandroid.ui.custum_views 11 | com.schneewittchen.rosandroid.ui.fragments 12 | com.schneewittchen.rosandroid.ui.helper 13 | com.schneewittchen.rosandroid.utility 14 | com.schneewittchen.rosandroid.viewmodel 15 | com.schneewittchen.rosandroid.widgets.base 16 | com.schneewittchen.rosandroid.widgets.joystick 17 | com.schneewittchen.rosandroid.widgets.test 18 | -------------------------------------------------------------------------------- /doc/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | 21 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Oct 26 19:00:13 CET 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip 7 | -------------------------------------------------------------------------------- /images/Boat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/Boat.png -------------------------------------------------------------------------------- /images/CameraDetails.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/CameraDetails.jpg -------------------------------------------------------------------------------- /images/CameraViz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/CameraViz.jpg -------------------------------------------------------------------------------- /images/ExampleNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/ExampleNodes.png -------------------------------------------------------------------------------- /images/GPSDetails.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/GPSDetails.jpg -------------------------------------------------------------------------------- /images/GPSViz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/GPSViz.jpg -------------------------------------------------------------------------------- /images/JoystickDetails.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/JoystickDetails.jpg -------------------------------------------------------------------------------- /images/JoystickViz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/JoystickViz.jpg -------------------------------------------------------------------------------- /images/LawnMower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/LawnMower.png -------------------------------------------------------------------------------- /images/MIRANA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/MIRANA.png -------------------------------------------------------------------------------- /images/OccGridDetails.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/OccGridDetails.jpg -------------------------------------------------------------------------------- /images/OccGridViz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/OccGridViz.jpg -------------------------------------------------------------------------------- /images/ShortExample01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/ShortExample01.jpg -------------------------------------------------------------------------------- /images/ShortExample02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/ShortExample02.jpg -------------------------------------------------------------------------------- /images/ShortExample03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/ShortExample03.jpg -------------------------------------------------------------------------------- /images/ShortExample04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/images/ShortExample04.jpg -------------------------------------------------------------------------------- /jcraft/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /jcraft/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 29 5 | buildToolsVersion "29.0.3" 6 | 7 | defaultConfig { 8 | minSdkVersion 16 9 | targetSdkVersion 29 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 14 | consumerProguardFiles 'consumer-rules.pro' 15 | } 16 | 17 | buildTypes { 18 | release { 19 | minifyEnabled false 20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 | } 22 | } 23 | 24 | } 25 | 26 | dependencies { 27 | implementation fileTree(dir: 'libs', include: ['*.jar']) 28 | 29 | implementation 'androidx.appcompat:appcompat:1.1.0' 30 | testImplementation 'junit:junit:4.13' 31 | androidTestImplementation 'androidx.test.ext:junit:1.1.1' 32 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' 33 | } 34 | -------------------------------------------------------------------------------- /jcraft/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ROS-Mobile/ROS-Mobile-Android/70a369d26810fdf38c51b6c857badcd6d2230e51/jcraft/consumer-rules.pro -------------------------------------------------------------------------------- /jcraft/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 22 | -------------------------------------------------------------------------------- /jcraft/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/DHEC256.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public class DHEC256 extends DHECN { 33 | public DHEC256(){ 34 | sha_name="sha-256"; 35 | key_size=256; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/DHEC384.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public class DHEC384 extends DHECN { 33 | public DHEC384(){ 34 | sha_name="sha-384"; 35 | key_size=384; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/DHEC521.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public class DHEC521 extends DHECN { 33 | public DHEC521(){ 34 | sha_name="sha-512"; 35 | key_size=521; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/DHGEX256.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2002-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public class DHGEX256 extends DHGEX { 33 | DHGEX256(){ 34 | hash="sha-256"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/KeyPairGenECDSA.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public interface KeyPairGenECDSA{ 33 | void init(int key_size) throws Exception; 34 | byte[] getD(); 35 | byte[] getR(); 36 | byte[] getS(); 37 | } 38 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/PBKDF.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2013-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public interface PBKDF { 33 | byte[] getKey(byte[] pass, byte[] salt, int iteration, int size); 34 | } 35 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/Random.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2002-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public interface Random{ 33 | void fill(byte[] foo, int start, int len); 34 | } 35 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/SignatureECDSA.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public interface SignatureECDSA extends Signature { 33 | void setPubKey(byte[] r, byte[] s) throws Exception; 34 | void setPrvKey(byte[] s) throws Exception; 35 | } 36 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/SignatureRSA.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2002-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch; 31 | 32 | public interface SignatureRSA extends Signature { 33 | void setPubKey(byte[] e, byte[] n) throws Exception; 34 | void setPrvKey(byte[] d, byte[] n) throws Exception; 35 | } 36 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/ECDH256.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class ECDH256 extends ECDHN implements com.jcraft.jsch.ECDH { 33 | public void init() throws Exception { 34 | super.init(256); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/ECDH384.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class ECDH384 extends ECDHN implements com.jcraft.jsch.ECDH { 33 | public void init() throws Exception { 34 | super.init(384); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/ECDH521.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2015-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class ECDH521 extends ECDHN implements com.jcraft.jsch.ECDH { 33 | public void init() throws Exception { 34 | super.init(521); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/HMACSHA1.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2002-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class HMACSHA1 extends HMAC { 33 | public HMACSHA1(){ 34 | name = "hmac-sha1"; 35 | bsize = 20; 36 | algorithm = "HmacSHA1"; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/HMACSHA256.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2012-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class HMACSHA256 extends HMAC { 33 | public HMACSHA256(){ 34 | name = "hmac-sha2-256"; 35 | bsize = 32; 36 | algorithm = "HmacSHA256"; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /jcraft/src/main/java/com/jcraft/jsch/jce/HMACSHA512.java: -------------------------------------------------------------------------------- 1 | /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 2 | /* 3 | Copyright (c) 2012-2018 ymnk, JCraft,Inc. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in 13 | the documentation and/or other materials provided with the distribution. 14 | 15 | 3. The names of the authors may not be used to endorse or promote products 16 | derived from this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 19 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, 21 | INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 22 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | */ 29 | 30 | package com.jcraft.jsch.jce; 31 | 32 | public class HMACSHA512 extends HMAC { 33 | public HMACSHA512(){ 34 | name = "hmac-sha2-512"; 35 | bsize = 64; 36 | algorithm = "HmacSHA512"; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name='RosAndroid' 3 | include ':jcraft' 4 | --------------------------------------------------------------------------------