├── .gitignore ├── .gitlab-ci.yml ├── LICENSE ├── Matter_CustomCluster.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── google-services.json ├── proguard-rules.pro ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── espressif │ │ │ └── espressif │ │ │ └── ExampleInstrumentedTest.java │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── AmazonEmberDisplay_Bd.ttf │ │ │ │ ├── AmazonEmberDisplay_He.ttf │ │ │ │ ├── AmazonEmberDisplay_Lt.ttf │ │ │ │ ├── AmazonEmberDisplay_Md.ttf │ │ │ │ ├── AmazonEmberDisplay_Rg.ttf │ │ │ │ ├── Bookerly-Bold.ttf │ │ │ │ ├── Bookerly-BoldItalic.ttf │ │ │ │ ├── Bookerly-Italic.ttf │ │ │ │ └── Bookerly-Regular.ttf │ │ ├── ic_esp_rainmaker_launcher_web.png │ │ ├── java │ │ │ └── com │ │ │ │ └── espressif │ │ │ │ ├── AlexaLinkingWorker.java │ │ │ │ ├── AppConstants.kt │ │ │ │ ├── AppRegister.java │ │ │ │ ├── ESPControllerAPIKeys.kt │ │ │ │ ├── EspApplication.java │ │ │ │ ├── EspFcmService.kt │ │ │ │ ├── GroupSharingActionReceiver.java │ │ │ │ ├── JsonDataParser.java │ │ │ │ ├── NetworkApiManager.java │ │ │ │ ├── NodeSharingActionReceiver.java │ │ │ │ ├── NotificationWorker.java │ │ │ │ ├── cloudapi │ │ │ │ ├── AlexaApiClient.java │ │ │ │ ├── AlexaApiInterface.java │ │ │ │ ├── AlexaApiManager.java │ │ │ │ ├── AlexaTokenAuthenticator.kt │ │ │ │ ├── ApiClient.java │ │ │ │ ├── ApiInterface.java │ │ │ │ ├── ApiManager.java │ │ │ │ ├── ApiResponseListener.kt │ │ │ │ ├── CloudException.java │ │ │ │ ├── DeviceOperationRequest.java │ │ │ │ └── TokenAuthenticator.kt │ │ │ │ ├── db │ │ │ │ ├── EspDatabase.java │ │ │ │ ├── GroupDao.java │ │ │ │ ├── NodeDao.java │ │ │ │ ├── NotificationDao.java │ │ │ │ └── StringArrayListConverters.java │ │ │ │ ├── local_control │ │ │ │ ├── EspLocalDevice.java │ │ │ │ ├── EspLocalSession.java │ │ │ │ ├── EspLocalTransport.java │ │ │ │ ├── LocalControlApiManager.java │ │ │ │ ├── TbrServiceDiscovery.java │ │ │ │ └── mDNSManager.java │ │ │ │ ├── matter │ │ │ │ ├── AccessControlClusterHelper.kt │ │ │ │ ├── AppCommissioningService.kt │ │ │ │ ├── BaseCompletionListener.kt │ │ │ │ ├── ChipClient.kt │ │ │ │ ├── ChipClientHelper.kt │ │ │ │ ├── ClustersHelper.kt │ │ │ │ ├── ColorControlClusterHelper.kt │ │ │ │ ├── ControllerClusterHelper.kt │ │ │ │ ├── ControllerLoginActivity.kt │ │ │ │ ├── DoorLockClusterHelper.kt │ │ │ │ ├── FabricDetails.java │ │ │ │ ├── FanControlClusterHelper.kt │ │ │ │ ├── GroupSelectionActivity.kt │ │ │ │ ├── GroupSelectionAdapter.kt │ │ │ │ ├── LevelControlClusterHelper.kt │ │ │ │ ├── MatterConstants.kt │ │ │ │ ├── MatterFabricUtils.kt │ │ │ │ ├── OnOffClusterHelper.kt │ │ │ │ ├── RemoteControlApiHelper.java │ │ │ │ ├── SubscriptionHelper.kt │ │ │ │ ├── TemperatureClusterHelper.kt │ │ │ │ ├── ThermostatClusterHelper.kt │ │ │ │ ├── ThreadBRActivity.kt │ │ │ │ ├── ThreadBRClusterHelper.kt │ │ │ │ └── Utils.kt │ │ │ │ ├── rainmaker │ │ │ │ └── wxapi │ │ │ │ │ └── WXEntryActivity.java │ │ │ │ ├── ui │ │ │ │ ├── EventSelectionListener.java │ │ │ │ ├── Utils.java │ │ │ │ ├── activities │ │ │ │ │ ├── AboutAppActivity.kt │ │ │ │ │ ├── AccountActivity.java │ │ │ │ │ ├── AddDeviceActivity.kt │ │ │ │ │ ├── AlexaAppLinkingActivity.java │ │ │ │ │ ├── AutomationActionsActivity.java │ │ │ │ │ ├── AutomationDetailActivity.java │ │ │ │ │ ├── BLEProvisionLanding.java │ │ │ │ │ ├── ClaimingActivity.java │ │ │ │ │ ├── CmdRespActivity.java │ │ │ │ │ ├── ConsentActivity.kt │ │ │ │ │ ├── EspDeviceActivity.kt │ │ │ │ │ ├── EspMainActivity.java │ │ │ │ │ ├── EventDeviceActivity.java │ │ │ │ │ ├── FwUpdateActivity.java │ │ │ │ │ ├── GroupDetailActivity.java │ │ │ │ │ ├── GroupInfoActivity.java │ │ │ │ │ ├── GroupNodeSelectionActivity.java │ │ │ │ │ ├── GroupShareActivity.java │ │ │ │ │ ├── GroupsActivity.java │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── NodeDetailsActivity.java │ │ │ │ │ ├── NotificationsActivity.java │ │ │ │ │ ├── ProofOfPossessionActivity.java │ │ │ │ │ ├── ProvisionActivity.java │ │ │ │ │ ├── ProvisionLanding.java │ │ │ │ │ ├── SceneActionsActivity.java │ │ │ │ │ ├── SceneDetailActivity.java │ │ │ │ │ ├── ScheduleActionsActivity.java │ │ │ │ │ ├── ScheduleDetailActivity.java │ │ │ │ │ ├── SplashActivity.kt │ │ │ │ │ ├── ThreadConfigActivity.java │ │ │ │ │ ├── TimeSeriesActivity.java │ │ │ │ │ ├── VoiceServicesActivity.java │ │ │ │ │ ├── WebRtcActivity.java │ │ │ │ │ ├── WebRtcConfigActivity.java │ │ │ │ │ ├── WiFiConfigActivity.java │ │ │ │ │ └── WiFiScanActivity.java │ │ │ │ ├── adapters │ │ │ │ │ ├── AccountAdapter.java │ │ │ │ │ ├── ActionDiffCallback.java │ │ │ │ │ ├── AttrParamAdapter.java │ │ │ │ │ ├── AutomationActionAdapter.java │ │ │ │ │ ├── AutomationActionListAdapter.java │ │ │ │ │ ├── AutomationAdapter.java │ │ │ │ │ ├── AutomationDiffCallback.java │ │ │ │ │ ├── AutomationParamAdapter.java │ │ │ │ │ ├── BleDeviceListAdapter.java │ │ │ │ │ ├── DeviceParamUpdates.java │ │ │ │ │ ├── EspDeviceAdapter.java │ │ │ │ │ ├── EventDeviceAdapter.java │ │ │ │ │ ├── GroupAdapter.java │ │ │ │ │ ├── GroupDeviceAdapter.java │ │ │ │ │ ├── GroupNodeAdapter.java │ │ │ │ │ ├── GroupShareAdapter.java │ │ │ │ │ ├── GroupSharedWithAdapter.java │ │ │ │ │ ├── GroupSharingPendingRequestAdapter.java │ │ │ │ │ ├── GroupsPageAdapter.java │ │ │ │ │ ├── HomeScreenPagerAdapter.java │ │ │ │ │ ├── NodeAdapter.java │ │ │ │ │ ├── NodeDetailsAdapter.java │ │ │ │ │ ├── NotificationAdapter.java │ │ │ │ │ ├── ParamAdapter.java │ │ │ │ │ ├── ParamDiffCallback.java │ │ │ │ │ ├── ParamSelectionAdapter.java │ │ │ │ │ ├── SceneActionAdapter.java │ │ │ │ │ ├── SceneAdapter.java │ │ │ │ │ ├── SceneParamAdapter.java │ │ │ │ │ ├── ScheduleActionAdapter.java │ │ │ │ │ ├── ScheduleAdapter.java │ │ │ │ │ ├── ScheduleParamAdapter.java │ │ │ │ │ ├── SharedUserAdapter.java │ │ │ │ │ ├── SharingRequestAdapter.java │ │ │ │ │ ├── SystemServiceAdapter.java │ │ │ │ │ ├── TabsPagerAdapter.kt │ │ │ │ │ ├── UserProfileAdapter.java │ │ │ │ │ └── WiFiListAdapter.java │ │ │ │ ├── fragments │ │ │ │ │ ├── AutomationFragment.java │ │ │ │ │ ├── DeleteUserConfirmFragment.kt │ │ │ │ │ ├── DeleteUserRequestFragment.kt │ │ │ │ │ ├── DevicesFragment.java │ │ │ │ │ ├── ForgotPasswordFragment.kt │ │ │ │ │ ├── LoginFragment.kt │ │ │ │ │ ├── ParamSelectionFragment.java │ │ │ │ │ ├── ResetPasswordFragment.kt │ │ │ │ │ ├── ScenesFragment.java │ │ │ │ │ ├── SchedulesFragment.java │ │ │ │ │ ├── SignUpFragment.kt │ │ │ │ │ └── UserProfileFragment.java │ │ │ │ ├── models │ │ │ │ │ ├── Action.java │ │ │ │ │ ├── ApiResponse.kt │ │ │ │ │ ├── Automation.java │ │ │ │ │ ├── BleDevice.kt │ │ │ │ │ ├── Device.java │ │ │ │ │ ├── EspNode.java │ │ │ │ │ ├── EspOtaUpdate.kt │ │ │ │ │ ├── Group.java │ │ │ │ │ ├── GroupSharingRequest.kt │ │ │ │ │ ├── MatterDeviceInfo.java │ │ │ │ │ ├── NodeMetadata.java │ │ │ │ │ ├── NotificationEvent.java │ │ │ │ │ ├── Param.java │ │ │ │ │ ├── ParamUpdateRequest.java │ │ │ │ │ ├── Scene.java │ │ │ │ │ ├── Schedule.java │ │ │ │ │ ├── Service.java │ │ │ │ │ ├── SharingRequest.kt │ │ │ │ │ ├── TsData.kt │ │ │ │ │ └── UpdateEvent.kt │ │ │ │ ├── user_module │ │ │ │ │ ├── ChangePasswordActivity.kt │ │ │ │ │ ├── DeleteUserActivity.kt │ │ │ │ │ ├── ForgotPasswordActivity.kt │ │ │ │ │ └── SignUpConfirmActivity.kt │ │ │ │ └── widgets │ │ │ │ │ ├── AvsEmberBoldText.java │ │ │ │ │ ├── AvsEmberRegularText.java │ │ │ │ │ ├── BookerlyRegularText.java │ │ │ │ │ ├── EspDropDown.java │ │ │ │ │ ├── EspMarkerView.java │ │ │ │ │ └── PaletteBar.java │ │ │ │ ├── utils │ │ │ │ ├── AppUpdateHelper.kt │ │ │ │ ├── NodeUtils.kt │ │ │ │ └── ParamUtils.kt │ │ │ │ └── webrtc │ │ │ │ ├── AwsV4Signer.java │ │ │ │ ├── AwsV4SignerConstants.java │ │ │ │ ├── Constants.java │ │ │ │ ├── Event.java │ │ │ │ ├── IoTCredentialsProvider.java │ │ │ │ ├── KinesisVideoPeerConnection.java │ │ │ │ ├── KinesisVideoSdpObserver.java │ │ │ │ ├── Message.java │ │ │ │ ├── Signaling.java │ │ │ │ ├── SignalingListener.java │ │ │ │ ├── SignalingServiceWebSocketClient.java │ │ │ │ ├── WebRtcConstants.java │ │ │ │ └── WebSocketClient.java │ │ ├── libs │ │ │ └── tickseekbar-37b1d67f64.aar │ │ ├── proto │ │ │ ├── constants.proto │ │ │ ├── devices.proto │ │ │ ├── devices_state.proto │ │ │ ├── esp_local_ctrl.proto │ │ │ ├── esp_rmaker_chal_resp.proto │ │ │ ├── esp_rmaker_claim.proto │ │ │ └── esp_rmaker_user_mapping.proto │ │ └── res │ │ │ ├── color │ │ │ └── logout_text_color_state.xml │ │ │ ├── drawable-hdpi │ │ │ ├── ic_info.png │ │ │ ├── ic_notify_rainmaker.png │ │ │ ├── ic_right_arrow.png │ │ │ └── ic_title_rainmaker.png │ │ │ ├── drawable-mdpi │ │ │ ├── ic_info.png │ │ │ ├── ic_notify_rainmaker.png │ │ │ ├── ic_right_arrow.png │ │ │ └── ic_title_rainmaker.png │ │ │ ├── drawable-xhdpi │ │ │ ├── ic_info.png │ │ │ ├── ic_notify_rainmaker.png │ │ │ ├── ic_right_arrow.png │ │ │ └── ic_title_rainmaker.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── ic_info.png │ │ │ ├── ic_notify_rainmaker.png │ │ │ ├── ic_right_arrow.png │ │ │ └── ic_title_rainmaker.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_esp_splash.png │ │ │ ├── ic_info.png │ │ │ ├── ic_notify_rainmaker.png │ │ │ ├── ic_right_arrow.png │ │ │ └── ic_title_rainmaker.png │ │ │ ├── drawable │ │ │ ├── bg.xml │ │ │ ├── bg_activate.xml │ │ │ ├── bg_badge.xml │ │ │ ├── bg_btn.xml │ │ │ ├── bg_dropdown.xml │ │ │ ├── bg_edit_text.xml │ │ │ ├── bg_group_tab.xml │ │ │ ├── bg_group_tab_selected.xml │ │ │ ├── bg_home_screen.jpg │ │ │ ├── bg_marker.xml │ │ │ ├── bg_transparent_button.xml │ │ │ ├── bluetooth_icon.png │ │ │ ├── checked.png │ │ │ ├── ic_account_circle_white.png │ │ │ ├── ic_add.xml │ │ │ ├── ic_alert.xml │ │ │ ├── ic_alexa.png │ │ │ ├── ic_alexa_horizontal.png │ │ │ ├── ic_alexa_vertical.png │ │ │ ├── ic_arrow_left.xml │ │ │ ├── ic_brightness_high.xml │ │ │ ├── ic_brightness_low.xml │ │ │ ├── ic_cct_high.xml │ │ │ ├── ic_cct_low.xml │ │ │ ├── ic_change_password.xml │ │ │ ├── ic_checkbox.xml │ │ │ ├── ic_checkbox_checked.xml │ │ │ ├── ic_checkbox_indeterminate.xml │ │ │ ├── ic_checkbox_off.xml │ │ │ ├── ic_checkbox_on.xml │ │ │ ├── ic_checkbox_unchecked.xml │ │ │ ├── ic_checkbox_unselected.xml │ │ │ ├── ic_claiming.xml │ │ │ ├── ic_connect_device.xml │ │ │ ├── ic_copy.xml │ │ │ ├── ic_device.xml │ │ │ ├── ic_device_air_conditioner.xml │ │ │ ├── ic_device_bulb_cct.xml │ │ │ ├── ic_device_bulb_rgb.xml │ │ │ ├── ic_device_camera.xml │ │ │ ├── ic_device_contact_sensor.xml │ │ │ ├── ic_device_door_bell.xml │ │ │ ├── ic_device_external_blinds.xml │ │ │ ├── ic_device_fan.xml │ │ │ ├── ic_device_garage_door.xml │ │ │ ├── ic_device_internal_blinds.xml │ │ │ ├── ic_device_light.xml │ │ │ ├── ic_device_lock.xml │ │ │ ├── ic_device_matter_controller.xml │ │ │ ├── ic_device_motion_sensor.xml │ │ │ ├── ic_device_off.xml │ │ │ ├── ic_device_offline.xml │ │ │ ├── ic_device_on.xml │ │ │ ├── ic_device_outlet.xml │ │ │ ├── ic_device_plug.xml │ │ │ ├── ic_device_security_panel.xml │ │ │ ├── ic_device_socket.xml │ │ │ ├── ic_device_speaker.xml │ │ │ ├── ic_device_switch.xml │ │ │ ├── ic_device_temp_sensor.xml │ │ │ ├── ic_device_thermostat.xml │ │ │ ├── ic_device_thread_br.xml │ │ │ ├── ic_device_tv.xml │ │ │ ├── ic_device_washer.xml │ │ │ ├── ic_down_arrow.xml │ │ │ ├── ic_downloading.gif │ │ │ ├── ic_error.xml │ │ │ ├── ic_esp_splash.png │ │ │ ├── ic_github.xml │ │ │ ├── ic_google.xml │ │ │ ├── ic_gva.png │ │ │ ├── ic_info.xml │ │ │ ├── ic_info_new.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_lock.xml │ │ │ ├── ic_lock_wifi.xml │ │ │ ├── ic_menu_add.xml │ │ │ ├── ic_more.xml │ │ │ ├── ic_next_date.xml │ │ │ ├── ic_no_camera_permission.xml │ │ │ ├── ic_no_devices.xml │ │ │ ├── ic_no_location_permission.xml │ │ │ ├── ic_node_details.xml │ │ │ ├── ic_node_info.xml │ │ │ ├── ic_notification.xml │ │ │ ├── ic_notify_accept.xml │ │ │ ├── ic_notify_decline.xml │ │ │ ├── ic_output_disable.xml │ │ │ ├── ic_output_off.xml │ │ │ ├── ic_output_on.xml │ │ │ ├── ic_plus.xml │ │ │ ├── ic_pop.xml │ │ │ ├── ic_prev.xml │ │ │ ├── ic_prev_date.xml │ │ │ ├── ic_provisioning.xml │ │ │ ├── ic_refresh.xml │ │ │ ├── ic_remove_circle.xml │ │ │ ├── ic_remove_device.xml │ │ │ ├── ic_remove_user.xml │ │ │ ├── ic_right_arrow.xml │ │ │ ├── ic_saturation_high.xml │ │ │ ├── ic_saturation_low.xml │ │ │ ├── ic_scan_qr_code.xml │ │ │ ├── ic_side_arrow.xml │ │ │ ├── ic_status_offline.xml │ │ │ ├── ic_status_online.xml │ │ │ ├── ic_streaming_video.xml │ │ │ ├── ic_switch_off.xml │ │ │ ├── ic_switch_on.xml │ │ │ ├── ic_tab_automations.xml │ │ │ ├── ic_tab_devices.xml │ │ │ ├── ic_tab_scenes.xml │ │ │ ├── ic_tab_schedules.xml │ │ │ ├── ic_tab_setting.xml │ │ │ ├── ic_ts_chart.xml │ │ │ ├── ic_update.xml │ │ │ ├── ic_update_failed.xml │ │ │ ├── ic_user.xml │ │ │ ├── ic_user_profile.xml │ │ │ ├── ic_we_chat.xml │ │ │ ├── ic_wifi.xml │ │ │ ├── ic_wifi_1.xml │ │ │ ├── ic_wifi_2.xml │ │ │ ├── ic_wifi_3.xml │ │ │ ├── ic_wifi_full.xml │ │ │ ├── ic_wifi_select.xml │ │ │ └── qr_code_corner.xml │ │ │ ├── layout │ │ │ ├── activity_about.xml │ │ │ ├── activity_account.xml │ │ │ ├── activity_account_settings.xml │ │ │ ├── activity_actions.xml │ │ │ ├── activity_add_device.xml │ │ │ ├── activity_alexa_app_linking.xml │ │ │ ├── activity_automation_detail.xml │ │ │ ├── activity_bleprovision_landing.xml │ │ │ ├── activity_change_password.xml │ │ │ ├── activity_claiming.xml │ │ │ ├── activity_cmd_resp.xml │ │ │ ├── activity_consent.xml │ │ │ ├── activity_controller_login.xml │ │ │ ├── activity_delete_user.xml │ │ │ ├── activity_esp_device.xml │ │ │ ├── activity_esp_main.xml │ │ │ ├── activity_event_devices.xml │ │ │ ├── activity_forgot_password.xml │ │ │ ├── activity_fw_update.xml │ │ │ ├── activity_group_detail.xml │ │ │ ├── activity_group_info.xml │ │ │ ├── activity_group_node_selection.xml │ │ │ ├── activity_group_share_requests.xml │ │ │ ├── activity_groups.xml │ │ │ ├── activity_groups_selection.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_node_details.xml │ │ │ ├── activity_notifications.xml │ │ │ ├── activity_pop.xml │ │ │ ├── activity_provision.xml │ │ │ ├── activity_provision_landing.xml │ │ │ ├── activity_scene_detail.xml │ │ │ ├── activity_schedule_detail.xml │ │ │ ├── activity_sign_up_confirm.xml │ │ │ ├── activity_splash.xml │ │ │ ├── activity_tbr.xml │ │ │ ├── activity_thread_config.xml │ │ │ ├── activity_time_series.xml │ │ │ ├── activity_voice_services.xml │ │ │ ├── activity_we_chat_progress.xml │ │ │ ├── activity_webrtc_config.xml │ │ │ ├── activity_webrtc_main.xml │ │ │ ├── activity_wifi_config.xml │ │ │ ├── activity_wifi_scan_list.xml │ │ │ ├── app_actionbar.xml │ │ │ ├── btn_add_device.xml │ │ │ ├── btn_delete_user.xml │ │ │ ├── btn_github.xml │ │ │ ├── btn_google.xml │ │ │ ├── btn_remove_device.xml │ │ │ ├── button.xml │ │ │ ├── content_actions.xml │ │ │ ├── content_alexa_app_linking.xml │ │ │ ├── content_automation_detail.xml │ │ │ ├── content_bleprovision_landing.xml │ │ │ ├── content_claiming.xml │ │ │ ├── content_esp_device.xml │ │ │ ├── content_fw_update.xml │ │ │ ├── content_node_device_list.xml │ │ │ ├── content_scene_detail.xml │ │ │ ├── content_schedule_detail.xml │ │ │ ├── content_wifi_config.xml │ │ │ ├── current_user_details.xml │ │ │ ├── dialog_attribute.xml │ │ │ ├── dialog_base_url.xml │ │ │ ├── dialog_group_share_email.xml │ │ │ ├── dialog_param_boolean.xml │ │ │ ├── dialog_param_int.xml │ │ │ ├── dialog_param_slider.xml │ │ │ ├── dialog_param_string.xml │ │ │ ├── dialog_prefix.xml │ │ │ ├── dialog_user_email.xml │ │ │ ├── dialog_wifi_network.xml │ │ │ ├── double_seekbar.xml │ │ │ ├── esp_tool_bar.xml │ │ │ ├── fragment_automations.xml │ │ │ ├── fragment_delete_user_confirm.xml │ │ │ ├── fragment_delete_user_req.xml │ │ │ ├── fragment_devices.xml │ │ │ ├── fragment_forgot_password.xml │ │ │ ├── fragment_login.xml │ │ │ ├── fragment_reset_password.xml │ │ │ ├── fragment_scenes.xml │ │ │ ├── fragment_schedules.xml │ │ │ ├── fragment_signup.xml │ │ │ ├── fragment_user_profile.xml │ │ │ ├── item_account.xml │ │ │ ├── item_account_setting.xml │ │ │ ├── item_action.xml │ │ │ ├── item_add_user.xml │ │ │ ├── item_attribute_param.xml │ │ │ ├── item_automation.xml │ │ │ ├── item_automation_action.xml │ │ │ ├── item_ble_scan.xml │ │ │ ├── item_esp_device.xml │ │ │ ├── item_event_device.xml │ │ │ ├── item_group.xml │ │ │ ├── item_group_device.xml │ │ │ ├── item_group_node.xml │ │ │ ├── item_group_request_pending.xml │ │ │ ├── item_group_request_shared_with.xml │ │ │ ├── item_group_selection.xml │ │ │ ├── item_node.xml │ │ │ ├── item_node_info.xml │ │ │ ├── item_notification.xml │ │ │ ├── item_param.xml │ │ │ ├── item_param_hue.xml │ │ │ ├── item_param_selection.xml │ │ │ ├── item_param_switch.xml │ │ │ ├── item_scene.xml │ │ │ ├── item_schedule.xml │ │ │ ├── item_schedule_param.xml │ │ │ ├── item_shared_user.xml │ │ │ ├── item_sharing_request.xml │ │ │ ├── item_system_service.xml │ │ │ ├── item_user_profile.xml │ │ │ ├── item_wifi_access_point.xml │ │ │ ├── layout_group_page.xml │ │ │ ├── layout_marker.xml │ │ │ ├── param_selection_dialog_layout.xml │ │ │ ├── qr_code_frame_layout.xml │ │ │ └── toolbar.xml │ │ │ ├── menu │ │ │ ├── menu_bottom_tabs.xml │ │ │ ├── menu_group.xml │ │ │ └── menu_toolbar.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_esp_rainmaker_launcher.png │ │ │ └── ic_esp_rainmaker_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_esp_rainmaker_launcher.png │ │ │ └── ic_esp_rainmaker_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_esp_rainmaker_launcher.png │ │ │ └── ic_esp_rainmaker_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_esp_rainmaker_launcher.png │ │ │ └── ic_esp_rainmaker_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_esp_rainmaker_launcher.png │ │ │ └── ic_esp_rainmaker_launcher_round.png │ │ │ ├── raw │ │ │ └── rainmaker_ca.crt │ │ │ ├── values-hdpi │ │ │ └── dimens.xml │ │ │ ├── values-xhdpi │ │ │ └── dimens.xml │ │ │ ├── values-xxhdpi │ │ │ └── dimens.xml │ │ │ ├── values-xxxhdpi │ │ │ └── dimens.xml │ │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ │ ├── values-zh-rSG │ │ │ └── strings.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── timezone_list.xml │ │ │ └── xml │ │ │ ├── network_security_config.xml │ │ │ └── prefrences.xml │ └── test │ │ └── java │ │ └── com │ │ └── espressif │ │ └── espressif │ │ └── ExampleUnitTest.java └── third_party │ └── connectedhomeip │ ├── LICENSE │ └── libs │ ├── AndroidPlatform.jar │ ├── CHIPClusterID.jar │ ├── CHIPClusters.jar │ ├── CHIPController.jar │ ├── CHIPInteractionModel.jar │ ├── OnboardingPayload.jar │ ├── README.md │ ├── SetupPayloadParser.jar │ ├── jniLibs │ ├── README.md │ ├── arm64-v8a │ │ ├── libCHIPController.so │ │ ├── libSetupPayloadParser.so │ │ └── libc++_shared.so │ ├── armeabi-v7a │ │ ├── libCHIPController.so │ │ ├── libSetupPayloadParser.so │ │ └── libc++_shared.so │ ├── x86 │ │ ├── libCHIPController.so │ │ ├── libSetupPayloadParser.so │ │ └── libc++_shared.so │ └── x86_64 │ │ ├── libCHIPController.so │ │ ├── libSetupPayloadParser.so │ │ └── libc++_shared.so │ ├── libMatterJson.jar │ └── libMatterTlv.jar ├── build.gradle ├── cluster_doc_image1.png ├── cluster_doc_image2.png ├── cluster_doc_image3.png ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the ART/Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | out/ 15 | 16 | # Gradle files 17 | .gradle/ 18 | build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | 29 | # Android Studio Navigation editor temp files 30 | .navigation/ 31 | 32 | # Android Studio captures folder 33 | captures/ 34 | 35 | # IntelliJ 36 | *.iml 37 | .idea/workspace.xml 38 | .idea/tasks.xml 39 | .idea/gradle.xml 40 | .idea/assetWizardSettings.xml 41 | .idea/dictionaries 42 | .idea/libraries 43 | .idea/caches 44 | 45 | # Keystore files 46 | # Uncomment the following line if you do not want to check your keystore files in. 47 | #*.jks 48 | 49 | # External native build folder generated in Android Studio 2.2 and later 50 | .externalNativeBuild 51 | 52 | # Freeline 53 | freeline.py 54 | freeline/ 55 | freeline_project_description.json 56 | 57 | # fastlane 58 | fastlane/report.xml 59 | fastlane/Preview.html 60 | fastlane/screenshots 61 | fastlane/test_output 62 | fastlane/readme.md 63 | 64 | app/src/main/assets/api_key.txt 65 | 66 | # Built application files 67 | /*/build/ 68 | 69 | # Crashlytics configuations 70 | com_crashlytics_export_strings.xml 71 | 72 | # Local configuration file (sdk path, etc) 73 | local.properties 74 | 75 | # Gradle generated files 76 | .gradle/ 77 | 78 | # Signing files 79 | .signing/ 80 | 81 | # User-specific configurations 82 | .idea/* 83 | *.iml 84 | 85 | # OS-specific files 86 | .DS_Store 87 | .DS_Storegit add 88 | .D 89 | ._* 90 | .Spotlight-V100 91 | .Trashes 92 | ehthumbs.db 93 | Thumbs.db -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - build 3 | 4 | build_apk: 5 | stage: build 6 | image: espressif/idf:latest 7 | tags: 8 | - build 9 | 10 | variables: 11 | deployment: "production" 12 | 13 | rules: 14 | - if: '$CI_MERGE_REQUEST_TITLE =~ /^\s*(WIP|Draft)/' 15 | when: never 16 | - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' 17 | when: always 18 | 19 | script: 20 | - rm -rf /tmp/esp-rainmaker-jenkins-ci 21 | - git clone https://$CI_GITLAB_USERNAME_APP_FRAMEWORKS:$CI_GITLAB_PASSWORD_APP_FRAMEWORKS@gitlab.espressif.cn:6688/app-frameworks/esp-rainmaker-jenkins-ci.git 22 | - cd esp-rainmaker-jenkins-ci 23 | - pip3 install -r requirements.txt 24 | - python3 key_update.py android-rm-app.params --key branch --value $CI_COMMIT_REF_NAME 25 | - python3 key_update.py android-rm-app.params --key deployment --value $deployment 26 | - python3 -u git_jenkins_ci_gateway_cli.py android-rm-app --gateway_branch test/android-rm-app/$CI_COMMIT_REF_NAME 27 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "847141165224", 4 | "firebase_url": "https://esp-rainmaker.firebaseio.com", 5 | "project_id": "esp-rainmaker", 6 | "storage_bucket": "esp-rainmaker.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:847141165224:android:631c1ad4f87e52e8264a9d", 12 | "android_client_info": { 13 | "package_name": "com.espressif.rainmaker" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "847141165224-mfdjg1ju1r4t499gpc6bbb20vu35diaq.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyD03vVsPOFIaUc61aJrTpDg5Pd1Y4lIzgI" 25 | } 26 | ], 27 | "services": { 28 | "appinvite_service": { 29 | "other_platform_oauth_client": [ 30 | { 31 | "client_id": "847141165224-mfdjg1ju1r4t499gpc6bbb20vu35diaq.apps.googleusercontent.com", 32 | "client_type": 3 33 | } 34 | ] 35 | } 36 | } 37 | } 38 | ], 39 | "configuration_version": "1" 40 | } -------------------------------------------------------------------------------- /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/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.espressif; 16 | 17 | import android.content.Context; 18 | import androidx.test.InstrumentationRegistry; 19 | import androidx.test.runner.AndroidJUnit4; 20 | 21 | import org.junit.Test; 22 | import org.junit.runner.RunWith; 23 | 24 | import static org.junit.Assert.*; 25 | 26 | /** 27 | * Instrumented test, which will execute on an Android device. 28 | * 29 | * @see Testing documentation 30 | */ 31 | @RunWith(AndroidJUnit4.class) 32 | public class ExampleInstrumentedTest { 33 | @Test 34 | public void useAppContext() throws Exception { 35 | // Context of the app under test. 36 | Context appContext = InstrumentationRegistry.getTargetContext(); 37 | 38 | assertEquals("com.espressif.espressif", appContext.getPackageName()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/assets/fonts/AmazonEmberDisplay_Bd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/AmazonEmberDisplay_Bd.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/AmazonEmberDisplay_He.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/AmazonEmberDisplay_He.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/AmazonEmberDisplay_Lt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/AmazonEmberDisplay_Lt.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/AmazonEmberDisplay_Md.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/AmazonEmberDisplay_Md.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/AmazonEmberDisplay_Rg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/AmazonEmberDisplay_Rg.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Bookerly-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/Bookerly-Bold.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Bookerly-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/Bookerly-BoldItalic.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Bookerly-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/Bookerly-Italic.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Bookerly-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/assets/fonts/Bookerly-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/ic_esp_rainmaker_launcher_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/ic_esp_rainmaker_launcher_web.png -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/AppRegister.java: -------------------------------------------------------------------------------- 1 | package com.espressif; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | 7 | import com.espressif.rainmaker.BuildConfig; 8 | import com.tencent.mm.opensdk.openapi.IWXAPI; 9 | import com.tencent.mm.opensdk.openapi.WXAPIFactory; 10 | 11 | public class AppRegister extends BroadcastReceiver { 12 | 13 | @Override 14 | public void onReceive(Context context, Intent intent) { 15 | final IWXAPI api = WXAPIFactory.createWXAPI(context, null, false); 16 | 17 | // Register the app to WeChat 18 | api.registerApp(BuildConfig.CHINA_WE_CHAT_APP_ID); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/cloudapi/AlexaTokenAuthenticator.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.cloudapi 16 | 17 | import android.text.TextUtils 18 | import android.util.Log 19 | import com.espressif.AppConstants 20 | import com.espressif.EspApplication 21 | import okhttp3.Authenticator 22 | import okhttp3.Request 23 | import okhttp3.Response 24 | import okhttp3.Route 25 | 26 | class AlexaTokenAuthenticator(private val appContext: EspApplication) : Authenticator { 27 | 28 | companion object { 29 | const val TAG = "AlexaTokenAuthenticator" 30 | } 31 | 32 | override fun authenticate(route: Route?, response: Response): Request? { 33 | 34 | Log.d(TAG, "=============== Authenticate callback ===============") 35 | Log.d(TAG, "Response code : " + response.code) 36 | val newToken = AlexaApiManager.getInstance(appContext).newToken 37 | val headerValue = "Bearer $newToken" 38 | 39 | if (!TextUtils.isEmpty(newToken)) { 40 | Log.d(TAG, "Retrying with new token") 41 | // Add new header to rejected request and retry it 42 | return response.request.newBuilder() 43 | .header(AppConstants.HEADER_AUTHORIZATION, headerValue) 44 | .build() 45 | } else { 46 | return null 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/cloudapi/ApiResponseListener.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2023 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.cloudapi 16 | 17 | import android.os.Bundle 18 | 19 | /** 20 | * This response listener is used to pass received response from ApiManager to calling class. 21 | */ 22 | interface ApiResponseListener { 23 | 24 | fun onSuccess(data: Bundle?) 25 | fun onResponseFailure(exception: Exception) 26 | fun onNetworkFailure(exception: Exception) 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/cloudapi/CloudException.java: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.cloudapi; 16 | 17 | /** 18 | * This class represents custom exception. Application will throw this exception when any error received from cloud API. 19 | */ 20 | public class CloudException extends RuntimeException { 21 | 22 | public CloudException(String message) { 23 | super(message); 24 | } 25 | 26 | public CloudException(String message, Throwable cause) { 27 | super(message, cause); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/cloudapi/DeviceOperationRequest.java: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.cloudapi; 16 | 17 | import com.espressif.AppConstants; 18 | import com.google.gson.annotations.SerializedName; 19 | 20 | public class DeviceOperationRequest { 21 | 22 | @SerializedName(AppConstants.KEY_NODE_ID) 23 | private String nodeId; 24 | 25 | @SerializedName(AppConstants.KEY_SECRET_KEY) 26 | private String secretKey; 27 | 28 | @SerializedName(AppConstants.KEY_OPERATION) 29 | private String operation; 30 | 31 | public String getNodeId() { 32 | return nodeId; 33 | } 34 | 35 | public void setNodeId(String nodeId) { 36 | this.nodeId = nodeId; 37 | } 38 | 39 | public String getSecretKey() { 40 | return secretKey; 41 | } 42 | 43 | public void setSecretKey(String secretKey) { 44 | this.secretKey = secretKey; 45 | } 46 | 47 | public String getOperation() { 48 | return operation; 49 | } 50 | 51 | public void setOperation(String operation) { 52 | this.operation = operation; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/db/GroupDao.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.db; 16 | 17 | import androidx.room.Dao; 18 | import androidx.room.Delete; 19 | import androidx.room.Insert; 20 | import androidx.room.OnConflictStrategy; 21 | import androidx.room.Query; 22 | 23 | import com.espressif.AppConstants; 24 | import com.espressif.ui.models.Group; 25 | 26 | import java.util.List; 27 | 28 | @Dao 29 | public interface GroupDao { 30 | 31 | @Query("SELECT * FROM " + AppConstants.GROUP_TABLE) 32 | List getGroupsFromStorage(); 33 | 34 | /** 35 | * Update group if it exist in database, insert group otherwise. 36 | * 37 | * @param group Group to be inserted / updated. 38 | */ 39 | @Insert(onConflict = OnConflictStrategy.REPLACE) 40 | void insertOrUpdate(Group group); 41 | 42 | /** 43 | * Delete the group from database. 44 | * 45 | * @param group Group to be deleted. 46 | */ 47 | @Delete 48 | void delete(Group group); 49 | 50 | /** 51 | * Delete all groups from group table. 52 | */ 53 | @Query("DELETE FROM " + AppConstants.GROUP_TABLE) 54 | void deleteAll(); 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/db/NodeDao.java: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.db; 16 | 17 | import androidx.room.Dao; 18 | import androidx.room.Delete; 19 | import androidx.room.Insert; 20 | import androidx.room.OnConflictStrategy; 21 | import androidx.room.Query; 22 | 23 | import com.espressif.AppConstants; 24 | import com.espressif.ui.models.EspNode; 25 | 26 | import java.util.List; 27 | 28 | @Dao 29 | public interface NodeDao { 30 | 31 | @Query("SELECT * FROM " + AppConstants.NODE_TABLE) 32 | List getNodesFromStorage(); 33 | 34 | /** 35 | * Update node if it exist in database, insert node otherwise. 36 | * 37 | * @param node Node to be inserted / updated. 38 | */ 39 | @Insert(onConflict = OnConflictStrategy.REPLACE) 40 | void insertOrUpdate(EspNode node); 41 | 42 | /** 43 | * Delete the node from database. 44 | * 45 | * @param node Node to be deleted. 46 | */ 47 | @Delete 48 | void delete(EspNode node); 49 | 50 | /** 51 | * Delete all nodes from node table. 52 | */ 53 | @Query("DELETE FROM " + AppConstants.NODE_TABLE) 54 | void deleteAll(); 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/db/NotificationDao.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.db; 16 | 17 | import androidx.room.Dao; 18 | import androidx.room.Delete; 19 | import androidx.room.Insert; 20 | import androidx.room.OnConflictStrategy; 21 | import androidx.room.Query; 22 | 23 | import com.espressif.AppConstants; 24 | import com.espressif.ui.models.NotificationEvent; 25 | 26 | import java.util.List; 27 | 28 | @Dao 29 | public interface NotificationDao { 30 | 31 | @Query("SELECT * FROM " + AppConstants.NOTIFICATION_TABLE + " ORDER BY " + AppConstants.KEY_TIMESTAMP + " DESC") 32 | List getNotificationsFromStorage(); 33 | 34 | /** 35 | * Update group if it exist in database, insert group otherwise. 36 | * 37 | * @param notification Notification event to be inserted / updated. 38 | */ 39 | @Insert(onConflict = OnConflictStrategy.REPLACE) 40 | void insertOrUpdate(NotificationEvent notification); 41 | 42 | /** 43 | * Delete the notification from database. 44 | * 45 | * @param notification Notification event to be deleted. 46 | */ 47 | @Delete 48 | void delete(NotificationEvent notification); 49 | 50 | /** 51 | * Delete all notifications from the table. 52 | */ 53 | @Query("DELETE FROM " + AppConstants.NOTIFICATION_TABLE) 54 | void deleteAll(); 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/db/StringArrayListConverters.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.db; 16 | 17 | import androidx.room.TypeConverter; 18 | 19 | import com.google.gson.Gson; 20 | import com.google.gson.reflect.TypeToken; 21 | 22 | import java.lang.reflect.Type; 23 | import java.util.ArrayList; 24 | 25 | public class StringArrayListConverters { 26 | 27 | @TypeConverter 28 | public static ArrayList fromString(String value) { 29 | Type listType = new TypeToken>() { 30 | }.getType(); 31 | return new Gson().fromJson(value, listType); 32 | } 33 | 34 | @TypeConverter 35 | public static String fromArrayList(ArrayList list) { 36 | Gson gson = new Gson(); 37 | String json = gson.toJson(list); 38 | return json; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/EventSelectionListener.java: -------------------------------------------------------------------------------- 1 | // Copyright 2022 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui; 16 | 17 | import com.espressif.ui.models.Device; 18 | import com.espressif.ui.models.Param; 19 | 20 | public interface EventSelectionListener { 21 | 22 | void onEventSelected(Device device, Param param, String str); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/adapters/TabsPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2023 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.adapters 16 | 17 | import android.content.Context 18 | import androidx.annotation.StringRes 19 | import androidx.fragment.app.Fragment 20 | import androidx.fragment.app.FragmentManager 21 | import androidx.fragment.app.FragmentPagerAdapter 22 | 23 | import com.espressif.rainmaker.BuildConfig 24 | import com.espressif.rainmaker.R 25 | import com.espressif.ui.fragments.LoginFragment 26 | import com.espressif.ui.fragments.SignUpFragment 27 | 28 | class TabsPagerAdapter(val context: Context, fm: FragmentManager) : FragmentPagerAdapter(fm) { 29 | 30 | @StringRes 31 | private val TAB_TITLES = intArrayOf(R.string.tab_login, R.string.tab_sign_up) 32 | 33 | override fun getCount(): Int { 34 | // Show 2 pages. 35 | 36 | if (BuildConfig.isChinaRegion) { 37 | return 1 38 | } 39 | return 2 40 | } 41 | 42 | override fun getItem(position: Int): Fragment { 43 | return when (position) { 44 | 0 -> LoginFragment() 45 | 1 -> SignUpFragment() 46 | else -> LoginFragment() 47 | } 48 | } 49 | 50 | override fun getPageTitle(position: Int): CharSequence? { 51 | return context.resources.getString(TAB_TITLES[position]) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/ApiResponse.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import okhttp3.ResponseBody 18 | 19 | data class ApiResponse( 20 | var nodeId: String? = null, 21 | var responseBody: ResponseBody? = null, 22 | var isSuccessful: Boolean = false, 23 | var throwable: Throwable? = null 24 | ) 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/BleDevice.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.bluetooth.BluetoothDevice 18 | 19 | data class BleDevice @JvmOverloads constructor( 20 | var name: String? = null, 21 | var bluetoothDevice: BluetoothDevice? = null 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/EspOtaUpdate.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.os.Parcelable 18 | import kotlinx.parcelize.Parcelize 19 | 20 | @Parcelize 21 | data class EspOtaUpdate @JvmOverloads constructor( 22 | var nodeId: String, 23 | var otaAvailable: Boolean = false, 24 | var status: String? = null, 25 | var otaJobID: String? = null, 26 | var otaStatusDescription: String? = null, 27 | var fwVersion: String? = null, 28 | var fileSize: Int = 0, 29 | var additionalInfo: String? = null, 30 | var timestamp: Long = 0L 31 | ) : Parcelable 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/GroupSharingRequest.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.os.Parcelable 18 | import kotlinx.parcelize.Parcelize 19 | 20 | @Parcelize 21 | data class GroupSharingRequest( 22 | var reqId: String, 23 | var reqStatus: String? = null, 24 | var userName: ArrayList? = null, 25 | var primaryUserName: ArrayList? = null, 26 | var reqTime: Long = 0L, 27 | var group_ids: ArrayList? = null, 28 | var group_names: ArrayList? = null, 29 | var metadata: String? = null 30 | ) : Parcelable 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/ParamUpdateRequest.java: -------------------------------------------------------------------------------- 1 | // Copyright 2023 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models; 16 | 17 | import com.espressif.cloudapi.ApiResponseListener; 18 | import com.google.gson.JsonObject; 19 | 20 | public class ParamUpdateRequest { 21 | 22 | public JsonObject body; 23 | public ApiResponseListener listener; 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/SharingRequest.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.os.Parcelable 18 | import kotlinx.parcelize.Parcelize 19 | 20 | @Parcelize 21 | data class SharingRequest @JvmOverloads constructor( 22 | var reqId: String, 23 | var userName: String? = null, 24 | var reqStatus: String? = null, 25 | var primaryUserName: String? = null, 26 | var reqTime: Long = 0, 27 | var nodeIds: ArrayList? = null, 28 | var metadata: String? = null 29 | ) : Parcelable 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/TsData.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.os.Parcelable 18 | import kotlinx.parcelize.Parcelize 19 | 20 | @Parcelize 21 | data class TsData( 22 | val timeStamp: Long, 23 | val value: Double? 24 | ) : Parcelable 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/models/UpdateEvent.kt: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.models 16 | 17 | import android.os.Bundle 18 | import com.espressif.AppConstants.Companion.UpdateEventType 19 | 20 | data class UpdateEvent @JvmOverloads constructor( 21 | val eventType: UpdateEventType, 22 | var data: Bundle? = null 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/widgets/AvsEmberBoldText.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.widgets; 16 | 17 | import android.content.Context; 18 | import android.graphics.Typeface; 19 | import android.util.AttributeSet; 20 | 21 | public class AvsEmberBoldText extends androidx.appcompat.widget.AppCompatTextView { 22 | 23 | public AvsEmberBoldText(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | this.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/AmazonEmberDisplay_Bd.ttf")); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/widgets/AvsEmberRegularText.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.widgets; 16 | 17 | import android.content.Context; 18 | import android.graphics.Typeface; 19 | import android.util.AttributeSet; 20 | 21 | public class AvsEmberRegularText extends androidx.appcompat.widget.AppCompatTextView { 22 | 23 | public AvsEmberRegularText(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | this.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/AmazonEmberDisplay_Rg.ttf")); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/ui/widgets/BookerlyRegularText.java: -------------------------------------------------------------------------------- 1 | // Copyright 2021 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.ui.widgets; 16 | 17 | import android.content.Context; 18 | import android.graphics.Typeface; 19 | import android.util.AttributeSet; 20 | 21 | public class BookerlyRegularText extends androidx.appcompat.widget.AppCompatTextView { 22 | 23 | public BookerlyRegularText(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | this.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/Bookerly-Regular.ttf")); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/webrtc/AwsV4SignerConstants.java: -------------------------------------------------------------------------------- 1 | package com.espressif.webrtc; 2 | 3 | public final class AwsV4SignerConstants { 4 | static final String ALGORITHM_AWS4_HMAC_SHA_256 = "AWS4-HMAC-SHA256"; 5 | static final String AWS4_REQUEST_TYPE = "aws4_request"; 6 | static final String SERVICE = "kinesisvideo"; 7 | static final String X_AMZ_ALGORITHM = "X-Amz-Algorithm"; 8 | static final String X_AMZ_CREDENTIAL = "X-Amz-Credential"; 9 | static final String X_AMZ_DATE = "X-Amz-Date"; 10 | static final String X_AMZ_EXPIRES = "X-Amz-Expires"; 11 | static final String X_AMZ_SECURITY_TOKEN = "X-Amz-Security-Token"; 12 | static final String X_AMZ_SIGNATURE = "X-Amz-Signature"; 13 | static final String X_AMZ_SIGNED_HEADERS = "X-Amz-SignedHeaders"; 14 | static final String NEW_LINE_DELIMITER = "\n"; 15 | static final String DATE_PATTERN = "yyyyMMdd"; 16 | static final String TIME_PATTERN = "yyyyMMdd'T'HHmmss'Z'"; 17 | static final String METHOD = "GET"; 18 | static final String SIGNED_HEADERS = "host"; 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/webrtc/Constants.java: -------------------------------------------------------------------------------- 1 | package com.espressif.webrtc; 2 | 3 | public class Constants { 4 | /** 5 | * SDK identifier 6 | */ 7 | public static final String APP_NAME = "aws-kvs-webrtc-android-client"; 8 | /** 9 | * SDK version identifier 10 | */ 11 | public static final String VERSION = "1.0.0"; 12 | 13 | /** 14 | * Query parameter for Channel ARN. Used for calling Kinesis Video Websocket APIs. 15 | */ 16 | public static final String CHANNEL_ARN_QUERY_PARAM = "X-Amz-ChannelARN"; 17 | 18 | /** 19 | * Query parameter for Client Id. Only used for viewers. Used for calling Kinesis Video Websocket APIs. 20 | */ 21 | public static final String CLIENT_ID_QUERY_PARAM = "X-Amz-ClientId"; 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/webrtc/IoTCredentialsProvider.java: -------------------------------------------------------------------------------- 1 | package com.espressif.webrtc; 2 | 3 | import com.amazonaws.auth.AWSCredentials; 4 | import com.amazonaws.auth.AWSCredentialsProvider; 5 | import com.amazonaws.auth.BasicSessionCredentials; 6 | 7 | public class IoTCredentialsProvider implements AWSCredentialsProvider { 8 | private AWSCredentials credentials; 9 | 10 | public IoTCredentialsProvider(String accessKeyId, String secretKey, String sessionToken) { 11 | this.credentials = new BasicSessionCredentials(accessKeyId, secretKey, sessionToken); 12 | } 13 | 14 | @Override 15 | public AWSCredentials getCredentials() { 16 | return credentials; 17 | } 18 | 19 | @Override 20 | public void refresh() { 21 | // Not implemented for this simple case 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/webrtc/KinesisVideoSdpObserver.java: -------------------------------------------------------------------------------- 1 | package com.espressif.webrtc; 2 | 3 | import android.util.Log; 4 | 5 | import org.webrtc.SdpObserver; 6 | import org.webrtc.SessionDescription; 7 | 8 | public class KinesisVideoSdpObserver implements SdpObserver { 9 | 10 | protected static final String TAG = KinesisVideoSdpObserver.class.getSimpleName(); 11 | 12 | @Override 13 | public void onCreateSuccess(final SessionDescription sessionDescription) { 14 | 15 | Log.d(TAG, "onCreateSuccess(): SDP=" + sessionDescription.description); 16 | } 17 | 18 | @Override 19 | public void onSetSuccess() { 20 | 21 | Log.d(TAG, "onSetSuccess(): SDP"); 22 | } 23 | 24 | @Override 25 | public void onCreateFailure(String error) { 26 | 27 | Log.e(TAG, "onCreateFailure(): Error=" + error); 28 | } 29 | 30 | @Override 31 | public void onSetFailure(String error) { 32 | 33 | Log.e(TAG, "onSetFailure(): Error=" + error); 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/espressif/webrtc/Signaling.java: -------------------------------------------------------------------------------- 1 | package com.espressif.webrtc; 2 | 3 | 4 | public interface Signaling { 5 | 6 | void onSdpOffer(Event event); 7 | 8 | void onSdpAnswer(Event event); 9 | 10 | void onIceCandidate(Event event); 11 | 12 | void onError(Event event); 13 | 14 | void onException(Exception e); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/libs/tickseekbar-37b1d67f64.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/libs/tickseekbar-37b1d67f64.aar -------------------------------------------------------------------------------- /app/src/main/proto/constants.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package rm_local_ctrl; 3 | 4 | enum Status { 5 | Success = 0; 6 | InvalidSecScheme = 1; 7 | InvalidProto = 2; 8 | TooManySessions = 3; 9 | InvalidArgument = 4; 10 | InternalError = 5; 11 | CryptoError = 6; 12 | InvalidSession = 7; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/proto/devices.proto: -------------------------------------------------------------------------------- 1 | // Copyright 2022 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | syntax = "proto3"; 16 | 17 | import "google/protobuf/timestamp.proto"; 18 | 19 | option java_package = "com.google.homesampleapp"; 20 | option java_multiple_files = true; 21 | 22 | // Info about a Matter device that is persisted in a Proto DataStore. 23 | message Device { 24 | // Timestamp when the device was commissioned. 25 | google.protobuf.Timestamp date_commissioned = 1; 26 | 27 | // VID 28 | string vendorId = 2; 29 | 30 | // PID 31 | string productId = 3; 32 | 33 | // Device type. 34 | enum DeviceType { 35 | TYPE_UNSPECIFIED = 0; 36 | TYPE_UNKNOWN = 1; 37 | TYPE_LIGHT = 2; 38 | TYPE_OUTLET = 3; 39 | } 40 | DeviceType deviceType = 4; 41 | 42 | // Device ID within the app's fabric. 43 | int64 device_id = 5; 44 | 45 | // Device name. 46 | string name = 6; 47 | 48 | // Room where device is located. 49 | string room = 7; 50 | 51 | // The name of the model for the device. 52 | string productName = 8; 53 | 54 | // The name of the vendor for the device. 55 | string vendorName = 9; 56 | } 57 | 58 | message Devices { 59 | int64 last_device_id = 1; 60 | repeated Device devices = 2; 61 | } -------------------------------------------------------------------------------- /app/src/main/proto/devices_state.proto: -------------------------------------------------------------------------------- 1 | // Copyright 2022 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | syntax = "proto3"; 16 | 17 | import "google/protobuf/timestamp.proto"; 18 | 19 | option java_package = "com.google.homesampleapp"; 20 | option java_multiple_files = true; 21 | 22 | // Info about the dynamic state of a Matter device that is persisted in a Proto DataStore. 23 | message DeviceState { 24 | // Timestamp when the state was captured. 25 | google.protobuf.Timestamp date_captured = 1; 26 | 27 | // Device ID within the app's fabric. 28 | int64 device_id = 2; 29 | 30 | // Whether the device is offline (false) or online (true) 31 | bool online = 3; 32 | 33 | // Whether the device is off (false) or on (true). Value should be disregarded 34 | // if device is offline. 35 | bool on = 4; 36 | } 37 | 38 | message DevicesState { 39 | repeated DeviceState devices_state = 2; 40 | } -------------------------------------------------------------------------------- /app/src/main/proto/esp_local_ctrl.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package rm_local_ctrl; 3 | 4 | import "constants.proto"; 5 | 6 | message CmdGetPropertyCount { 7 | } 8 | 9 | message RespGetPropertyCount { 10 | Status status = 1; 11 | uint32 count = 2; 12 | } 13 | 14 | message PropertyInfo { 15 | Status status = 1; 16 | string name = 2; 17 | uint32 type = 3; 18 | uint32 flags = 4; 19 | bytes value = 5; 20 | } 21 | 22 | message CmdGetPropertyValues { 23 | repeated uint32 indices = 1; 24 | } 25 | 26 | message RespGetPropertyValues { 27 | Status status = 1; 28 | repeated PropertyInfo props = 2; 29 | } 30 | 31 | message PropertyValue { 32 | uint32 index = 1; 33 | bytes value = 2; 34 | } 35 | 36 | message CmdSetPropertyValues { 37 | repeated PropertyValue props = 1; 38 | } 39 | 40 | message RespSetPropertyValues { 41 | Status status = 1; 42 | } 43 | 44 | enum LocalCtrlMsgType { 45 | TypeCmdGetPropertyCount = 0; 46 | TypeRespGetPropertyCount = 1; 47 | TypeCmdGetPropertyValues = 4; 48 | TypeRespGetPropertyValues = 5; 49 | TypeCmdSetPropertyValues = 6; 50 | TypeRespSetPropertyValues = 7; 51 | } 52 | 53 | message LocalCtrlMessage { 54 | LocalCtrlMsgType msg = 1; 55 | oneof payload { 56 | CmdGetPropertyCount cmd_get_prop_count = 10; 57 | RespGetPropertyCount resp_get_prop_count = 11; 58 | CmdGetPropertyValues cmd_get_prop_vals = 12; 59 | RespGetPropertyValues resp_get_prop_vals = 13; 60 | CmdSetPropertyValues cmd_set_prop_vals = 14; 61 | RespSetPropertyValues resp_set_prop_vals = 15; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/proto/esp_rmaker_chal_resp.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package rmaker_misc; 4 | 5 | enum RMakerMiscStatus { 6 | Success = 0; 7 | Fail = 1; 8 | InvalidParam = 2; 9 | } 10 | 11 | message CmdCRPayload { 12 | bytes payload = 1; 13 | } 14 | 15 | message RespCRPayload { 16 | bytes payload = 1; 17 | string node_id = 2; 18 | } 19 | 20 | message CmdGetNodeIDPayload { 21 | /* Empty payload */ 22 | } 23 | 24 | message RespGetNodeIDPayload { 25 | string node_id = 1; 26 | } 27 | 28 | enum RMakerMiscMsgType { 29 | TypeCmdChallengeResponse = 0; 30 | TypeRespChallengeResponse = 1; 31 | TypeCmdGetNodeID = 2; 32 | TypeRespGetNodeID = 3; 33 | } 34 | 35 | message RMakerMiscPayload { 36 | RMakerMiscMsgType msg = 1; 37 | RMakerMiscStatus status = 2; 38 | oneof payload { 39 | CmdCRPayload cmdChallengeResponsePayload = 10; 40 | RespCRPayload respChallengeResponsePayload = 11; 41 | CmdGetNodeIDPayload cmdGetNodeIDPayload = 12; 42 | RespGetNodeIDPayload respGetNodeIDPayload = 13; 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/proto/esp_rmaker_claim.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package rmaker_claim; 4 | 5 | enum RMakerClaimStatus { 6 | Success = 0; 7 | Fail = 1; 8 | InvalidParam = 2; 9 | InvalidState = 3; 10 | NoMemory = 4; 11 | } 12 | 13 | message PayloadBuf { 14 | uint32 Offset = 1; 15 | bytes Payload = 2; 16 | uint32 TotalLen = 3; 17 | } 18 | 19 | message RespPayload { 20 | RMakerClaimStatus Status = 1; 21 | PayloadBuf Buf = 2; 22 | } 23 | 24 | enum RMakerClaimMsgType { 25 | TypeCmdClaimStart = 0; 26 | TypeRespClaimStart = 1; 27 | TypeCmdClaimInit = 2; 28 | TypeRespClaimInit = 3; 29 | TypeCmdClaimVerify = 4; 30 | TypeRespClaimVerify = 5; 31 | TypeCmdClaimAbort = 6; 32 | TypeRespClaimAbort = 7; 33 | } 34 | 35 | message RMakerClaimPayload { 36 | RMakerClaimMsgType msg = 1; 37 | oneof payload { 38 | PayloadBuf cmdPayload = 10; 39 | RespPayload respPayload = 11; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/proto/esp_rmaker_user_mapping.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package rainmaker; 4 | 5 | enum RMakerConfigStatus { 6 | Success = 0; 7 | InvalidParam = 1; 8 | InvalidState = 2; 9 | } 10 | 11 | message CmdSetUserMapping { 12 | string UserID = 1; 13 | string SecretKey = 2; 14 | } 15 | message RespSetUserMapping { 16 | RMakerConfigStatus Status = 1; 17 | string NodeId = 2; 18 | } 19 | 20 | enum RMakerConfigMsgType { 21 | TypeCmdSetUserMapping = 0; 22 | TypeRespSetUserMapping = 1; 23 | } 24 | 25 | message RMakerConfigPayload { 26 | RMakerConfigMsgType msg = 1; 27 | oneof payload { 28 | CmdSetUserMapping cmd_set_user_mapping = 10; 29 | RespSetUserMapping resp_set_user_mapping = 11; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/res/color/logout_text_color_state.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-hdpi/ic_info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notify_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-hdpi/ic_notify_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-hdpi/ic_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_title_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-hdpi/ic_title_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-mdpi/ic_info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notify_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-mdpi/ic_notify_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-mdpi/ic_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_title_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-mdpi/ic_title_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xhdpi/ic_info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notify_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xhdpi/ic_notify_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xhdpi/ic_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_title_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xhdpi/ic_title_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxhdpi/ic_info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notify_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxhdpi/ic_notify_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxhdpi/ic_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_title_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxhdpi/ic_title_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_esp_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxxhdpi/ic_esp_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxxhdpi/ic_info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notify_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxxhdpi/ic_notify_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxxhdpi/ic_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_title_rainmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable-xxxhdpi/ic_title_rainmaker.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_activate.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dropdown.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_edit_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_group_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_group_tab_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_home_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/bg_home_screen.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_marker.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_transparent_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bluetooth_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/bluetooth_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/checked.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account_circle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_account_circle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alexa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_alexa.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alexa_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_alexa_horizontal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alexa_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_alexa_vertical.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_left.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_high.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 22 | 25 | 28 | 31 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_low.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 22 | 25 | 28 | 31 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cct_high.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cct_low.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkbox_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkbox_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkbox_unselected.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_copy.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_off.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_offline.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_on.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_switch.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_temp_sensor.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_down_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_downloading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_downloading.gif -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_error.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_esp_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_esp_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_github.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_google.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_gva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/drawable/ic_gva.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_new.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock_wifi.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_next_date.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_no_location_permission.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_node_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notification.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notify_accept.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notify_decline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_output_disable.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_output_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_output_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_plus.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_prev.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_prev_date.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remove_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remove_device.xml: -------------------------------------------------------------------------------- 1 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remove_user.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_right_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_saturation_high.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_saturation_low.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_side_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_status_offline.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_status_online.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_streaming_video.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_automations.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_devices.xml: -------------------------------------------------------------------------------- 1 | 6 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_scenes.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_schedules.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_setting.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ts_chart.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_update.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_update_failed.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_user.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 18 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_user_profile.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_1.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_2.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_3.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_full.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qr_code_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_account.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 19 | 20 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_account_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 18 | 19 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 15 | 16 | 21 | 22 | 28 | 29 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_alexa_app_linking.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 16 | 17 | 22 | 23 | 29 | 30 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_automation_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 15 | 16 | 21 | 22 | 28 | 29 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_bleprovision_landing.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_claiming.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_delete_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_esp_device.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 15 | 16 | 21 | 22 | 28 | 29 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_esp_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_event_devices.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 16 | 17 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_forgot_password.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_fw_update.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_group_node_selection.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 14 | 15 | 20 | 21 | 27 | 28 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_scene_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 25 | 26 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_schedule_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 25 | 26 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_wifi_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/app_actionbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/btn_add_device.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 22 | 23 | 32 | 33 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/btn_delete_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 22 | 23 | 32 | 33 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/button.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 27 | 28 | 34 | 35 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/current_user_details.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 22 | 23 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_attribute.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 21 | 22 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_base_url.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_prefix.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_delete_user_req.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 27 | 28 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_account_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 22 | 23 | 30 | 31 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_add_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 26 | 27 | 35 | 36 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_ble_scan.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_event_device.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 17 | 18 | 26 | 27 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_group_request_shared_with.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 25 | 26 | 34 | 35 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_param_hue.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_param_selection.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_param_switch.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_system_service.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 25 | 26 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_user_profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_wifi_access_point.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 24 | 25 | 32 | 33 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_marker.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/param_selection_dialog_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | 19 | 28 | 29 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 19 | 20 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_bottom_tabs.xml: -------------------------------------------------------------------------------- 1 | 4 | 10 | 16 | 22 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_group.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_esp_rainmaker_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-hdpi/ic_esp_rainmaker_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_esp_rainmaker_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-hdpi/ic_esp_rainmaker_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_esp_rainmaker_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-mdpi/ic_esp_rainmaker_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_esp_rainmaker_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-mdpi/ic_esp_rainmaker_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_esp_rainmaker_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xhdpi/ic_esp_rainmaker_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_esp_rainmaker_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xhdpi/ic_esp_rainmaker_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_esp_rainmaker_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xxhdpi/ic_esp_rainmaker_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_esp_rainmaker_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xxhdpi/ic_esp_rainmaker_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_esp_rainmaker_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xxxhdpi/ic_esp_rainmaker_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_esp_rainmaker_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/src/main/res/mipmap-xxxhdpi/ic_esp_rainmaker_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/raw/rainmaker_ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF 3 | ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 4 | b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL 5 | MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv 6 | b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj 7 | ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM 8 | 9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw 9 | IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 10 | VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L 11 | 93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm 12 | jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC 13 | AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA 14 | A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI 15 | U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs 16 | N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv 17 | o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU 18 | 5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy 19 | rqXRfboQnoZsG4q5WTP468SQvvG5 20 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /app/src/main/res/values-hdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 15.6dp 3 | 8.4dp 4 | 9.6dp 5 | 12dp 6 | 60dp 7 | 3.6dp 8 | 4.8dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-xhdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 23.4dp 3 | 12.6dp 4 | 14.4dp 5 | 18dp 6 | 90dp 7 | 5.4dp 8 | 7.2dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-xxhdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 31.2dp 3 | 16.8dp 4 | 19.2dp 5 | 24dp 6 | 120dp 7 | 7.2dp 8 | 9.6dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-xxxhdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 39dp 3 | 21dp 4 | 24dp 5 | 30dp 6 | 150dp 7 | 9dp 8 | 12dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #8864e4 4 | #1a1a1a 5 | #8181a8 6 | #0033CC 7 | #FF9900 8 | #CA1627 9 | 10 | #CBCBCB 11 | #303232 12 | #4EA9DC 13 | #AC1600 14 | #329AD6 15 | #4CAF50 16 | #CA1627 17 | #FF3B30 18 | 19 | 20 | 21 | #f2f1fc 22 | #1a1a1a 23 | #f6f6fb 24 | #ff5207 25 | #8181a8 26 | #ffeee6 27 | #555555 28 | #BBBBBB 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1dp 4 | 1dp 5 | 6 | 13dp 7 | 10dp 8 | 7dp 9 | 8dp 10 | 50dp 11 | 3dp 12 | 4dp 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 18 | 19 | 23 | 24 | 28 | 29 | 36 | 37 | 40 | 41 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | api.rainmaker.espressif.com 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/xml/prefrences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/test/java/com/espressif/espressif/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Espressif Systems (Shanghai) PTE LTD 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | package com.espressif.espressif; 16 | 17 | import org.junit.Test; 18 | 19 | import static org.junit.Assert.*; 20 | 21 | /** 22 | * Example local unit test, which will execute on the development machine (host). 23 | * 24 | * @see Testing documentation 25 | */ 26 | public class ExampleUnitTest { 27 | @Test 28 | public void addition_isCorrect() throws Exception { 29 | assertEquals(4, 2 + 2); 30 | } 31 | } -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/AndroidPlatform.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/AndroidPlatform.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/CHIPClusterID.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/CHIPClusterID.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/CHIPClusters.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/CHIPClusters.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/CHIPController.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/CHIPController.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/CHIPInteractionModel.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/CHIPInteractionModel.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/OnboardingPayload.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/OnboardingPayload.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/README.md: -------------------------------------------------------------------------------- 1 | This directory will contain .so files required by CHIPTool demo app for Android. 2 | The .so files must be organized into folders by the name of the corresponding 3 | Android architecture for which they are built, eg. arm64-v8a, x86, x86_64, etc. 4 | -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/SetupPayloadParser.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/SetupPayloadParser.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/README.md: -------------------------------------------------------------------------------- 1 | This directory will contain .so files required by CHIPTool demo app for Android. 2 | The .so files must be organized into folders by the name of the corresponding 3 | Android architecture for which they are built, eg. arm64-v8a, x86, x86_64, etc. 4 | -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libCHIPController.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libCHIPController.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libSetupPayloadParser.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libSetupPayloadParser.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/arm64-v8a/libc++_shared.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libCHIPController.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libCHIPController.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libSetupPayloadParser.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libSetupPayloadParser.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/armeabi-v7a/libc++_shared.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86/libCHIPController.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86/libCHIPController.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86/libSetupPayloadParser.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86/libSetupPayloadParser.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86/libc++_shared.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86_64/libCHIPController.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86_64/libCHIPController.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86_64/libSetupPayloadParser.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86_64/libSetupPayloadParser.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/jniLibs/x86_64/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/jniLibs/x86_64/libc++_shared.so -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/libMatterJson.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/libMatterJson.jar -------------------------------------------------------------------------------- /app/third_party/connectedhomeip/libs/libMatterTlv.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/app/third_party/connectedhomeip/libs/libMatterTlv.jar -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | def localProperties = new Properties() 6 | localProperties.load(new FileInputStream(rootProject.file("local.properties"))) 7 | 8 | repositories { 9 | google() 10 | mavenCentral() 11 | jcenter() 12 | } 13 | dependencies { 14 | 15 | classpath libs.gradle 16 | classpath libs.kotlin.gradle.plugin 17 | classpath libs.protobuf.gradle.plugin 18 | classpath libs.google.services // Google Services plugin 19 | classpath libs.hilt.android.gradle.plugin 20 | 21 | // Check if the "isChinaRegion" property exists and what its value is 22 | if (localProperties.getProperty("isChinaRegion", "false") != "true") { 23 | classpath libs.firebase.crashlytics.gradle 24 | } 25 | } 26 | } 27 | 28 | allprojects { 29 | repositories { 30 | google() 31 | mavenCentral() 32 | jcenter() 33 | maven { url 'https://jitpack.io' } 34 | maven { url "https://maven.google.com" } 35 | flatDir { 36 | dirs 'src/main/libs' 37 | } 38 | } 39 | } 40 | 41 | task clean(type: Delete) { 42 | delete rootProject.buildDir 43 | } 44 | -------------------------------------------------------------------------------- /cluster_doc_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/cluster_doc_image1.png -------------------------------------------------------------------------------- /cluster_doc_image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/cluster_doc_image2.png -------------------------------------------------------------------------------- /cluster_doc_image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/cluster_doc_image3.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | android.enableJetifier=true 13 | android.useAndroidX=true 14 | org.gradle.jvmargs=-Xmx1536m 15 | 16 | # When configured, Gradle will run in incubating parallel mode. 17 | # This option should only be used with decoupled projects. More details, visit 18 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 19 | # org.gradle.parallel=true 20 | android.nonFinalResIds=false 21 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-rainmaker-android/ab74c83f20856a6cfa4f9f813d83582007c0fa7b/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed May 04 16:40:59 IST 2025 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-8.14-bin.zip 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------