【蓝牙】UI
authorCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 10:00:14 +0000 (18:00 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 10:00:14 +0000 (18:00 +0800)
35 files changed:
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothCaseListAdapter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothDeviceCaseListAdapter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothDeviceListView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothEarListView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothEarPhoneView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothHeadsetEvent.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothItemView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothModelC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothOptionsView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothPresenter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothReconnectView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothWrapper.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/Bluetooyhpabpserver.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/MainBluetoothView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/TipsConnFailMessageView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/TipsFailMessageView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/TipsSuccMessageView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothCaseListAdapter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothEarListView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothEarPhoneView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothItemView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothOptionsView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothReconnectView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/BluetoothWrapper.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/MainBluetoothView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/TipsConnFailMessageView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/TipsFailMessageView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/TipsSuccMessageView.cpp

index 49a590a..5edaa12 100644 (file)
@@ -10,6 +10,7 @@
 #include <string>
 #include "components/abstract_adapter.h"
 #include "components/ui_label.h"
+#include "components/ui_label_ext.h"
 #include "components/ui_label_button.h"
 #include "PlayersPresenter.h"
 #include "BluetoothItemView.h"
index 72b9b98..03ebbe1 100644 (file)
@@ -1,39 +1,41 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: BluetoothDeviceListView view 蓝牙耳机设备列表界面\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-10 10:05:27\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothDeviceListView.h\r
  */\r
 #ifndef BLUETOOTH_DEVICE_LIST_VIEW_H\r
 #define BLUETOOTH_DEVICE_LIST_VIEW_H\r
 \r
 #include "components/ui_view_group.h"\r
-#include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_list.h"\r
 #include "BluetoothDeviceCaseListAdapter.h"\r
-\r
+#include "components/ui_scroll_view.h"\r
 namespace OHOS {\r
 class BluetoothDeviceCaseListAdapter;\r
+//已连接过的蓝牙设备列表视图\r
 class BluetoothDeviceListView {\r
 public:\r
     BluetoothDeviceListView();\r
     ~BluetoothDeviceListView();\r
     static BluetoothDeviceListView *GetInstance();\r
-    UIViewGroup *InitShowUpView(void);\r
+    UIViewGroup *CreateBluetoothDeviceListView(void);\r
     UIViewGroup *GetGroup(void);\r
     UIList *GetDeviceUIList(void);\r
-    void RefreshText(void);\r
+    void RefreshBluetoothDeviceListView(void);\r
 private:\r
     void InitList(void);\r
     void InItEmptyLabel();\r
     void InitNewEquipmentButton();\r
     UIViewGroup *group{nullptr};\r
     UIList *list{nullptr};\r
-    UILabel *titleLabel{nullptr};\r
-    UILabel *emptyLabel{nullptr};\r
+    UILabelExt *titleLabel{nullptr}; /*标题:蓝牙耳机*/\r
+    UILabelExt *emptyLabel{nullptr}; /*暂无已配对设备*/\r
     BluetoothDeviceCaseListAdapter *adapterText{nullptr};\r
-    UILabelButton *newEquipmentButton{nullptr};\r
+    UILabelExt *newEquipmentButton{nullptr};\r
 };\r
 } // namespace OHOS\r
 #endif // BLUETOOTH_DEVICE_LIST_VIEW_H
\ No newline at end of file
index 8a0dd98..8106fc8 100644 (file)
@@ -9,7 +9,8 @@
 \r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_image_animator.h"\r
 #include "components/ui_list.h"\r
 #include "BluetoothCaseListAdapter.h"\r
@@ -29,15 +30,18 @@ public:
     void SetNewEquipmentButtonRemove(void);\r
     void SetCancelConnedRequestButtonAdd(void);\r
     void SetCancelConnedRequestButtonRemove(void);\r
+    void RefreshBluetoothEarListView(void);\r
+    \r
 private:\r
     void InitList(void);\r
     void InitButten(UILabelButton **button, const char *text, const char* id);\r
+    void InitNewEquipmentButton();\r
     UIViewGroup *group{nullptr};\r
     UIList *list{nullptr};\r
-    UILabel *titleLabel{nullptr};\r
+    UILabelExt *titleLabel{nullptr};\r
     BluetoothCaseListAdapter *adapterText{nullptr};\r
-    UILabelButton *rescanButton{nullptr};\r
-    UILabelButton *cancelConnedRequestButton{nullptr};\r
+    UILabelExt *rescanButton{nullptr};\r
+    UILabelButtonExt *cancelConnedRequestButton{nullptr};\r
 };\r
 } // namespace OHOS\r
 #endif // BLUETOOTH_EAR_LIST_VIEW_H
\ No newline at end of file
index 3636a1a..4af2a23 100644 (file)
 #include <iostream>\r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
 #include "components/ui_label_button.h"\r
 #include "components/ui_image_animator.h"\r
-#include "ohos_timer.h"\r
-#include "graphic_timer.h"\r
+#include "cmsis_os.h"\r
 #include "BluetoothModel.h"\r
 #define BLUETOOTH_SEARCH_IMAGE_NUM 8\r
 \r
 namespace OHOS {\r
+static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 60; // 图片帧数\r
 class BluetoothEarPhoneView {\r
 public:\r
     BluetoothEarPhoneView();\r
@@ -33,8 +34,9 @@ public:
 private:\r
     ImageAnimatorInfo searchImageInfo[BLUETOOTH_SEARCH_IMAGE_NUM];\r
     UIViewGroup *group{nullptr};\r
-    UILabel *titleLabel{nullptr};\r
     UIImageAnimatorView *imageAnimator{nullptr};\r
+    const ImageInfo **connectPathsArray{nullptr};\r
+    ImageAnimatorInfo connectImageInfo[CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES];\r
     bool scanStart{0};\r
     void BtScanImageAnimator();\r
 };\r
@@ -42,9 +44,9 @@ private:
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
-void ScanTimerCallback(int data);\r
-void CancelBrScanHandle(void);\r
-void EndScanHandle(void);\r
+// void ScanTimerCallback(int data);\r
+// void CancelBrScanHandle(void);\r
+// void EndScanHandle(void);\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index 8e5341d..4334047 100644 (file)
@@ -31,12 +31,19 @@ typedef struct {
     profile_connect_state_t avrcp_srv_conn_stat;\r
 } BtAvrcpTgInf;\r
 \r
+extern BtAvrcpTgInf g_avrcp_srv_inf;\r
+\r
+bd_addr_t *BtAvrcpSrvGetActiveAddr(void);\r
+\r
 void UsingPressButtonStatusCallback(td_u32 keyOperation, td_u32 keyValue);\r
 void MediaStatusCallback(bt_avrcp_tg_evt_status_param *eventStatusParam);\r
 void PressButtonStatusCallback(td_u32 keyOperation, td_u32 keyValue);\r
 void ConnCtStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_state_t state);\r
 void ConnectTgStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_state_t state);\r
 void InitBtHeadsetEvent(void);\r
+void BtAvrcpVolumeChangedSyncMedia(uint8_t a2dp_volume);\r
+void user_avrcp_ct_press_button(const bd_addr_t *bd_addr, int32_t key_operation);\r
+void user_avrcp_ct_get_element_attributes(const bd_addr_t *bd_addr);\r
 \r
 #ifdef __cplusplus\r
 }\r
index 563fe82..9ff78ba 100644 (file)
@@ -1,14 +1,17 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: BluetoothItem view\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-09-04 14:23:09\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothItemView.h\r
  */\r
 \r
+\r
 #ifndef BLUETOOTH_ITEM_VIEW_H\r
 #define BLUETOOTH_ITEM_VIEW_H\r
 \r
 #include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
 #include "components/ui_view_group.h"\r
 #include "components/ui_image_view.h"\r
 #include "components/ui_label_button.h"\r
@@ -26,17 +29,20 @@ public:
     void SetItemInfo(const BluetoothCaseInfo& itemInfo, bool isCaseList);\r
     BluetoothCaseInfo *GetItemInfo(void);\r
     void SetConnectionstatus(const BluetoothCaseInfo& infoData);\r
+    void SetPairingtatus();\r
+    void SetViewOnClickListener(UIView::OnClickListener *listener);\r
     void SetUpChild();\r
     void ConnectAnimatorStart(void);\r
     void ConnectAnimatorStop(void);\r
     bool IsConnectAnimator(void);\r
 private:\r
     ImageAnimatorInfo connectImageInfo[BLUETOOTH_CONNECT_IMAGE_NUM];\r
-    UIImageView image;\r
     UIButton button;\r
-    UILabel connectStateLabel;\r
-    UILabel namelabel;\r
-    UIImageAnimatorView connectionAnimator;\r
+    UILabelExt connectStateLabel;/*连接状态标签*/\r
+    UILabel namelabel;/*设备名*/\r
+    UIImageView lineImage;\r
+    UIImageView noteImage;\r
+    UIImageAnimatorView connectionAnimator; /*连接动画*/\r
     BluetoothCaseInfo itemInfo_{};\r
     void BtConnectImageAnimator();\r
 };\r
index 3aef02c..1611290 100644 (file)
@@ -5,8 +5,8 @@
  * Create: 2021-10-13\r
  */\r
 \r
-#ifndef BLUETOOTH_MODEL_H\r
-#define BLUETOOTH_MODEL_H\r
+#ifndef BLUETOOTH_MODEL_H_\r
+#define BLUETOOTH_MODEL_H_\r
 \r
 #include <list>\r
 #include <cstdio>\r
 \r
 #include "bts_def.h"\r
 #include "bts_br_gap.h"\r
-\r
+#include <string>\r
 namespace OHOS {\r
+\r
+\r
+\r
 typedef enum : uint16_t {\r
     CALLERSETTING,\r
     CALLERPLAYERS,\r
 } CallerFactor;\r
 \r
+/*整合和存储与蓝牙设备相关的各种信息*/\r
 typedef struct {\r
     unsigned char deviceName[BD_NAME_LEN]; /* Name of the device record, must be in UTF-8 */\r
-    unsigned char addr[BD_ADDR_LEN];\r
-    int16_t index;\r
+    unsigned char addr[BD_ADDR_LEN]; /*存储蓝牙设备的地址*/\r
+    int16_t index;/*用于表示设备在某个特定列表或数据结构中的索引位置。*/\r
     int16_t connIndex;\r
     int16_t temp;\r
 } BluetoothCaseInfo;\r
 \r
+\r
+typedef struct {\r
+    uint8_t id;\r
+    uint32_t timetamp_begin;\r
+    uint32_t timetamp_end;\r
+    std::string titel;\r
+    std::string content;\r
+}ScheduleInfo;\r
+\r
+\r
+\r
+\r
 class BluetoothItemView;\r
 class BluetoothModel {\r
 public:\r
@@ -37,7 +53,6 @@ public:
     void Init();\r
     int GetBluetoothCalleridStatus(void);\r
     void SetBluetoothCalleridStatus(int16_t value);\r
-    // É¨ÃèÉ豸¶ÓÁгõʼ»¯\r
     std::list<BluetoothCaseInfo>& GetCase();\r
     void AddCase(BluetoothCaseInfo caseInfo);\r
     void SetScansCaseRssi(const bd_addr_t *bdAddr, int rssi);\r
@@ -81,6 +96,7 @@ public:
     int ConnectRemoteDevice(const bd_addr_t *addr);\r
     bool ConnectRemoteCheck(const bd_addr_t *addr);\r
     char* getWatchName(void);\r
+    void set_test_bt_falg(bool falg);\r
 \r
 private:\r
     BluetoothModel();\r
@@ -88,14 +104,13 @@ private:
     void SetUpListCase();\r
     void SetUpConnedDevicesList();\r
     bool FindNameByAddr(BluetoothCaseInfo &listInfo, BluetoothCaseInfo *caseInfo);\r
-    void InitBluetoothInfo(void);\r
-    bool aclConnected{false};\r
-    BluetoothCaseInfo tempMacValue{};\r
-    bd_addr_t lastConnedAddr{0};\r
+    bool aclConnected{false};/*ACL(Asynchronous Connectionless,异步无连接)连接状态*/\r
+    BluetoothCaseInfo tempMacValue{};/*临时蓝牙设备地址*/\r
+    bd_addr_t lastConnedAddr{};\r
     bd_addr_t remoteConnectAddr{0};\r
     BluetoothItemView *selectItemView{nullptr};\r
-    std::list<BluetoothCaseInfo> btScansDevicesList_{};\r
-    List<BluetoothCaseInfo> *btConnedDevicesList_{nullptr};\r
+    std::list<BluetoothCaseInfo> btScansDevicesList_{};     //蓝牙扫描设备列表\r
+    List<BluetoothCaseInfo> *btConnedDevicesList_{nullptr}; //已连接设备列表\r
     bool tagReconnectJump{0};\r
     int16_t curView{0};\r
     bool tagConnectView{true};\r
@@ -119,9 +134,28 @@ void BtRemoteNameChangedCallback(const bd_addr_t *bdAddr, const unsigned char *d
 void BtIsAcceptConnOnSafeModeCallback(const bd_addr_t *bd_addr, bool *res);\r
 void BtInitCallBacks(void);\r
 void BtInitCallBacksEx(void);\r
+void BtA2dpInit(void);\r
 void BtInitGatts(void);\r
 void BtInitSpp(void);\r
 void BleAdvStart(void);\r
+void bluetooth_init(void);\r
+void InitBluetoothInfo(void);\r
+void bluetooth_enable_all(void);\r
+void bluetooth_close_all(void);\r
+void bluetooth_set_auto_reconnect_closed(uint8_t flag);\r
+\r
+int uapi_a2dp_snk_get_device_connect_state(void);\r
+int uapi_a2dp_snk_connect(void);\r
+int uapi_a2dp_snk_disconnect(void);\r
+int uapi_disconnect_remote_device(void);\r
+int uapi_get_acl_connect_state(void);\r
+int uapi_set_acl_connect_hfp(void);\r
+void uapi_connect_pbap_pce(void);\r
+int uapi_reconnect(void);\r
+int uapi_set_acl_connect_A2DP(void);\r
+void uapi_get_br_address(bd_addr_t *bdaddr);\r
+void uapi_set_br_address(bd_addr_t *bdaddr);\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothModelC.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/BluetoothModelC.h
new file mode 100644 (file)
index 0000000..157c300
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-08-23 10:50:37
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-02 19:24:01
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: BluetoothModel view
+ * Author:
+ * Create: 2021-10-13
+ */
+
+#ifndef C_BLUETOOTH_MODEL_H_
+#define C_BLUETOOTH_MODEL_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int uapi_a2dp_snk_connect_(void);
+int uapi_a2dp_snk_disconnect_(void);
+int uapi_close_br_scan(void);
+int uapi_open_br_scan(void);
+//int uapi_disconnect_remote_device_(void);
+
+int32_t BtA2dpSnkAudioDestroy(void);
+
+int uapi_reconnect_(void);
+
+int get_BT_is_init(void);
+
+void cm_initBluetoothDeviceList(void);
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
index 836df4b..ae1157b 100644 (file)
@@ -1,42 +1,59 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: BluetoothOptions view\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-09 19:52:58\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothOptionsView.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
  */\r
 #ifndef BLUETOOTH_OPTIONS_VIEW_H\r
 #define BLUETOOTH_OPTIONS_VIEW_H\r
 \r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_image_animator.h"\r
 #include "BluetoothCaseListAdapter.h"\r
 \r
-namespace OHOS {\r
-class BluetoothOptionsView {\r
-public:\r
-    BluetoothOptionsView();\r
-    ~BluetoothOptionsView();\r
-    static BluetoothOptionsView *GetInstance();\r
-    UIViewGroup *InitShowUpView(void);\r
-    UILabelButton *GetOptionsOneButton(void);\r
-    UILabelButton *GetUnpairButton(void);\r
-    void SetUnpair(void);\r
-    void SetBtconnect(void);\r
-    void SetBtDisconnect(void);\r
-    void SetCurrentAddr(bd_addr_t addr);\r
-    bd_addr_t GetCurrentAddr(void);\r
-    void RefreshText(void);\r
-private:\r
-    void InItTitleLabel(void);\r
-    void InItLabelButton(void);\r
-    UILabelButton *optionsOneButton{nullptr};\r
-    UILabelButton *unpairButton{nullptr};\r
-    UILabel *titleLabel{nullptr};\r
-    UILabel *connectStateLabel{nullptr};\r
-    UIViewGroup *group{nullptr};\r
-    bd_addr_t currentAddr;\r
-};\r
+namespace OHOS\r
+{\r
+    // 查看已连接的蓝牙耳机设备视图\r
+    class BluetoothOptionsView\r
+    {\r
+    public:\r
+        BluetoothOptionsView();\r
+        ~BluetoothOptionsView();\r
+        static BluetoothOptionsView *GetInstance();\r
+        UIViewGroup *CreateBluetoothOptionsView(void);\r
+        UILabelButtonExt *GetOptionsOneButton(void);\r
+        UILabelButtonExt *GetUnpairButton(void);\r
+        void SetUnpair(void);\r
+        void SetBtconnect(void);\r
+        void SetBtDisconnect(void);\r
+        void SetCurrentAddr(bd_addr_t addr);\r
+        bd_addr_t GetCurrentAddr(void);\r
+        void RefreshText(void);\r
+\r
+    private:\r
+        bool CreateBluetoothOptionsLabelView(void);\r
+        bool CreateBluetoothOptionsLabelButton(void);\r
+        bool CreateBluetoothOptionsImageView(void);\r
+\r
+        void InItTitleLabel(void);\r
+        void InItLabelButton(void);\r
+        UIViewGroup *group{nullptr};\r
+        UILabelExt *titleLabel{nullptr};          /*标题:蓝牙耳机*/\r
+        UIImageView *btHeadsetIconUmage{nullptr}; // 绿色耳机图标\r
+        UILabelExt *EarPhoneDeviceName{nullptr};  // 蓝牙耳机设备名\r
+        UILabelExt *pairState{nullptr};           // 已配对或者未配对\r
+        UILabelButtonExt *unpairButton{nullptr};     // 取消配对按钮\r
+        UILabelExt *unpairLabel{nullptr};          // 取消配对标签\r
+        bd_addr_t currentAddr;\r
+\r
+        /*下面两个组件暂时设为不可见待到需要时使用*/\r
+        UILabelButtonExt *optionsOneButton{nullptr}; /*重新连接和断开连接按钮*/\r
+        UILabel *connectStateLabel{nullptr};      /*已连接或未连接标签*/\r
+        };\r
 } // namespace OHOS\r
 #endif // BLUETOOTH_OPTIONS_VIEW_H
\ No newline at end of file
index fa72f28..80289c1 100644 (file)
@@ -1,45 +1,55 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: BluetoothPresenter view\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-09-28 18:06:32\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothPresenter.h\r
  */\r
 \r
 #ifndef BLUETOOTH_PRESENTER_H\r
 #define BLUETOOTH_PRESENTER_H\r
 \r
 #include "Presenter.h"\r
-#include "BluetoothModel.h"\r
+#include "View.h"\r
 #include "MainBluetoothView.h"\r
 #include "components/ui_view.h"\r
 #include "components/ui_image_view.h"\r
 #include "components/ui_label_button.h"\r
 #include "components/ui_view_group.h"\r
 #include "VolumeSettingView.h"\r
+\r
 #include "UiViewId.h"\r
+#include "cmsis_os.h"\r
 \r
+#include "common/key_code.h"\r
 namespace OHOS {\r
 enum BluetoothPresenterNum : uint8_t {\r
-        BLUETOOTHEARPHONEVIEW = 0,\r
-        BLUETOOTHEARLISTVIEW,\r
-        BLUETOOTHDEVICELISTVIEW,\r
-        BLUETOOTHEOPTIONSVIEW,\r
-        BLUETOOTHRECONNECTVIEW,\r
-        TIPSSUCCMESSAGEVIEW,\r
-        TIPSCONNFAILMESSAGEVIEW,\r
-        TIPSFAILMESSAGEVIEW,\r
+        BLUETOOTHEARPHONEVIEW = 0, // 搜索界面\r
+        BLUETOOTHEARLISTVIEW,   /*扫描出的耳机列表界面*/\r
+        BLUETOOTHDEVICELISTVIEW,/*已连接过的蓝牙设备列表视图*/\r
+        BLUETOOTHEOPTIONSVIEW, /*查看已连接过的蓝牙耳机设备视图*/\r
+        BLUETOOTHRECONNECTVIEW,/*蓝牙重新连接视图*/\r
+        TIPSSUCCMESSAGEVIEW,/*连接成功的提示视图*/\r
+        TIPSCONNFAILMESSAGEVIEW,/*连接失败的提示*/\r
+        TIPSFAILMESSAGEVIEW,/*未搜索到蓝牙耳机界面*/\r
         BLUETOOTHEVIEW,\r
         BLUETOOTHEVIEW_MAX,\r
     };\r
 \r
 class MainBluetoothView;\r
-class BluetoothPresenter : public Presenter<MainBluetoothView>, public UIView::OnClickListener,\r
+class BluetoothPresenter : public Presenter<MainBluetoothView>, public UIView::OnClickListener,public RootView::OnKeyActListener,\r
  public UIView::OnDragListener {\r
 public:\r
     BluetoothPresenter();\r
     ~BluetoothPresenter();\r
     bool OnClick(UIView &view, const ClickEvent &event) override;\r
     static BluetoothPresenter *GetInstance();\r
+    bool OnDrag(UIView& view, const DragEvent& event) override;\r
     bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
+    bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
+    void OnStart() override;\r
+    void OnPause() override;\r
+    void OnResume() override;\r
     void OnStop() override;\r
     void ClickRescanButton(void);\r
     void ClickNewEquipmentButton(void);\r
@@ -51,6 +61,7 @@ public:
     void ClickConnfailBackButton(void);\r
 private:\r
     BluetoothModel *bluetoothMode_{nullptr};\r
+    bool X_DRAG_FLAG{false};\r
 };\r
 } // namespace OHOS\r
 #endif\r
index a65be70..e9683eb 100644 (file)
@@ -9,11 +9,12 @@
 \r
 \r
 #include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
 #include "components/ui_image_animator.h"\r
 #include "components/abstract_adapter.h"\r
 #include "components/ui_view_group.h"\r
 #include "bts_def.h"\r
-#define BLUETOOTH_RECONNECT_IMAGE_NUM 8\r
+#define BLUETOOTH_RECONNECT_IMAGE_NUM 60\r
 \r
 namespace OHOS {\r
 class BluetoothReconnectView {\r
@@ -27,14 +28,19 @@ public:
     bd_addr_t GetcurrentBdAddr(void);\r
     void RefreshBluetoothNameLabel();\r
 private:\r
-    ImageAnimatorInfo reconnetImageInfo[BLUETOOTH_RECONNECT_IMAGE_NUM];\r
+    // ImageAnimatorInfo reconnetImageInfo[BLUETOOTH_RECONNECT_IMAGE_NUM];\r
     void ShowUpTitleLabel(void);\r
+    void start_connect_timer();\r
+    void stop_connect_timer();\r
     UILabel *titleLabel{nullptr};\r
     UILabel *bluetoothNameLabel{nullptr};\r
-    UIImageAnimatorView *reconnectAnimator{nullptr};\r
+    // UIImageAnimatorView *reconnectAnimator{nullptr};\r
     UIViewGroup *group{nullptr};\r
     bd_addr_t currentBdAddr;\r
     void BtReconnectImageAnimator();\r
+    UIImageAnimatorView *reconnectAnimator{nullptr};\r
+    const ImageInfo **reconnectPathsArray{nullptr};\r
+    ImageAnimatorInfo reconnetImageInfo[BLUETOOTH_RECONNECT_IMAGE_NUM];\r
 };\r
 } // namespace OHOS\r
 #endif // BLUETOOTH_RECONNECT_VIEW_H
\ No newline at end of file
index 3c645fe..94c990a 100644 (file)
@@ -23,6 +23,7 @@ void wrapper_ble_register(void);
 errcode_t wrapper_gatts_register_server(bt_uuid_t *app_uuid, uint8_t *server_id);\r
 errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid, bool is_primary);\r
 void wrapper_gatts_service_start(void);\r
+void wrapper_gatts_clear_service(void);\r
 \r
 #ifdef __cplusplus\r
 }\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/Bluetooyhpabpserver.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/include/Bluetooyhpabpserver.h
new file mode 100644 (file)
index 0000000..124f0cb
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.
+ * Description: This module include test functions of PBAP service.
+ */
+#ifndef PBAP_SERVICE_H
+#define PBAP_SERVICE_H
+#include <td_type.h>
+#include <stdint.h>
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+//void bt_pbap_service_sample_cmd(uint32_t cmd_id, const char **params, int32_t params_cnt);
+void uapi_pbap_pce_reg_callback(void);
+void uapi_pbap_cmd_start_client(void);
+
+void uapi_pbap_cmd_pull_phonebook(void);
+void uapi_pbap_cmd_pull_vcard_listing(unsigned char *tell,uint8_t len);
+void uapi_pbap_cmd_pull_vcard_entry(td_char *vcf_name);
+
+
+#ifdef  __cplusplus
+}
+#endif
+#endif
\ No newline at end of file
index e564e2c..e899d08 100644 (file)
@@ -34,6 +34,7 @@ public:
     ~MainBluetoothView() override;\r
 \r
     void OnStart() override;\r
+\r
     void DropView(UIView& view);\r
     void ChangeView(int16_t hideView, int16_t showView);\r
     static MainBluetoothView *GetInstance(void);\r
index d0bcc4b..ed015a0 100644 (file)
@@ -1,19 +1,23 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: TipsConnFailMessageView view\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-09-05 16:13:55\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/TipsConnFailMessageView.h\r
  */\r
+\r
 #ifndef TIPS_CONN_FAIL_MESSAGE_VIEW_H\r
 #define TIPS_CONN_FAIL_MESSAGE_VIEW_H\r
 \r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_image_view.h"\r
 #include "bts_def.h"\r
 \r
 namespace OHOS {\r
+/*连接失败视图*/\r
 class TipsConnFailMessageView {\r
 public:\r
     TipsConnFailMessageView();\r
@@ -25,11 +29,11 @@ private:
     void ShowUpButtonBack(void);\r
     void ShowUpTipLabel(void);\r
     void InitNameLabel(void);\r
-    UILabel *titleLabel{nullptr};\r
-    UILabel *tipLabel{nullptr};\r
-    UILabel *tipTwoLabel{nullptr};\r
+    UILabelExt *titleLabel{nullptr};\r
+    UILabelExt *conn_fail_Label{nullptr};\r
+    UILabelExt *tipLabel{nullptr};\r
     UILabel *bluetoothNameLabel{nullptr};\r
-    UILabelButton *backButton{nullptr};\r
+    UILabelButtonExt *backButton{nullptr};\r
     UIImageView *tipImg{nullptr};\r
     UIViewGroup *group{nullptr};\r
 };\r
index 3420d3e..fe11194 100644 (file)
@@ -1,30 +1,42 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: TipsFailMessageView view\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-10 10:19:05\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/TipsFailMessageView.h\r
  */\r
+\r
 #ifndef TIPS_FAIL_MESSAGE_VIEW_H\r
 #define TIPS_FAIL_MESSAGE_VIEW_H\r
 \r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_image_view.h"\r
 \r
-namespace OHOS {\r
-class TipsFailMessageView {\r
-public:\r
-    TipsFailMessageView();\r
-    ~TipsFailMessageView();\r
-    static TipsFailMessageView *GetInstance();\r
-    UIViewGroup *ShowUpViewInit(void);\r
-private:\r
-    int ShowUpButtonBack(void);\r
-    UILabel *titleLabel{nullptr};\r
-    UILabelButton *backButton{nullptr};\r
-    UIImageView *tipImg{nullptr};\r
-    UIViewGroup *group{nullptr};\r
-};\r
+namespace OHOS\r
+{\r
+    /*蓝牙设备搜索不到视图*/\r
+    class TipsFailMessageView\r
+    {\r
+    public:\r
+        TipsFailMessageView();\r
+        ~TipsFailMessageView();\r
+        static TipsFailMessageView *GetInstance();\r
+        UIViewGroup *CreateTipsFailMessageView(void);\r
+\r
+    private:\r
+        bool CreateTipsFailMessageLabelView(void);\r
+        bool CreateTipsFailMessageLabelButton(void);\r
+        bool CreateTipsFailMessageImageView(void);\r
+\r
+        int ShowUpButtonBack(void);\r
+        UIViewGroup *group{nullptr};\r
+        UILabelExt *titleLabel{nullptr};             /*标题:蓝牙耳机 */\r
+        UIImageView *btIconImage{nullptr};           /*灰色的蓝牙图标*/\r
+        UILabelExt *btHeadsetNotFoundLabel{nullptr}; /*当前搜索不到耳机蓝牙设备*/\r
+        UILabelExt *rescanButton{nullptr};     /*重新搜索按钮*/\r
+    };\r
 } // namespace OHOS\r
 #endif // TIPS_FAIL_MESSAGE_VIEW_H
\ No newline at end of file
index 09ed3f2..7d0e644 100644 (file)
@@ -1,15 +1,17 @@
 /*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: TipsSuccMessage view\r
- * Author:\r
- * Create: 2021-10-13\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:01\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-09-05 11:13:11\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/TipsSuccMessageView.h\r
  */\r
 #ifndef TIPS_SUCC_MESSAGE_VIEW_H\r
 #define TIPS_SUCC_MESSAGE_VIEW_H\r
 \r
 #include "components/ui_view_group.h"\r
 #include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
 #include "components/ui_image_view.h"\r
 #include "bts_def.h"\r
 \r
@@ -22,11 +24,10 @@ public:
     UIViewGroup *ShowUpViewInit(void);\r
     void RefreshNameLabel(const bd_addr_t &bdAddr);\r
 private:\r
-    void ShowUpButtonBack(void);\r
-    void InitNameLabel(void);\r
-    UILabel *titleLabel{nullptr};\r
-    UILabel *bluetoothNameLabel{nullptr};\r
-    UILabelButton *backButton{nullptr};\r
+    UILabelExt *titleLabel{nullptr};\r
+    UILabelExt *bluetoothNameLabel{nullptr};\r
+    UILabelExt *conn_succ_Label{nullptr};\r
+    UILabelButtonExt *backButton{nullptr};\r
     UIImageView *tipImg{nullptr};\r
     UIViewGroup *group{nullptr};\r
 };\r
index 763f631..b5acb85 100644 (file)
 #include "wearable_log.h"
 #include "UiConfig.h"
 #include "BluetoothModel.h"
+#include "bluetooth/include/MainBluetoothView.h"
+#include "CallerLogModel.h"
+#include "custom_utils.h"
+#include "notification_manager.h"
 
 namespace OHOS {
 BluetoothCaseListAdapter::~BluetoothCaseListAdapter()
@@ -41,15 +45,15 @@ public:
     }
     bool OnClick(UIView& view, const ClickEvent& event) override
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListListener");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListListener");
         UNUSED(event);
         BluetoothItemView *itemView = static_cast<BluetoothItemView *>(&view);
-        // 二次点击不做响应
-        bool ret = itemView->IsConnectAnimator();
-        if (ret) {
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Block secondary clicks");
-            return true;
-        }
+        // // 二次点击不做响应
+        // bool ret = itemView->IsConnectAnimator();
+        // if (ret) {
+        //     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Block secondary clicks");
+        //     return true;
+        // }
         BluetoothCaseInfo *bluetoothInfo_ = itemView->GetItemInfo();
         /* 点击事件 */
         BluetoothModel::GetInstance()->SetTempMacValue(bluetoothInfo_);
@@ -62,37 +66,55 @@ public:
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothEarPhoneView == nullptr");
             return false;
         }
-        bluetoothEarPhoneView->BtAnimatorStop();
-        bluetoothEarPhoneView->StopBtDiscovery();
+        bluetoothEarPhoneView->BtAnimatorStop();//搜索动画停止
+        bluetoothEarPhoneView->StopBtDiscovery();//停止扫描
         BluetoothModel::GetInstance()->SetTagScanDeviceClicked(true);
-
-        // 刷新列表
-        BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();
-        if (bluetoothEarListView == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr");
-            return false;
-        }
-        if (bluetoothEarListView->GetScanUIList() == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr");
+        MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();
+        if (mainBluetoothView == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick mainBluetoothView GetInstance fail");
             return false;
         }
-        bluetoothEarListView->GetScanUIList()->RefreshList();
-        bluetoothEarListView->SetNewEquipmentButtonRemove();
-        bluetoothEarListView->SetCancelConnedRequestButtonAdd();
-        RootView::GetInstance()->Invalidate();
+
+        // // 刷新列表
+        // BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();
+        // if (bluetoothEarListView == nullptr) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr");
+        //     return false;
+        // }
+        // if (bluetoothEarListView->GetScanUIList() == nullptr) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr");
+        //     return false;
+        // }
+        // bluetoothEarListView->GetScanUIList()->RefreshList();
+        // // bluetoothEarListView->SetNewEquipmentButtonRemove();
+        // // bluetoothEarListView->SetCancelConnedRequestButtonAdd();
+        // RootView::GetInstance()->Invalidate();
 
         // 判断是否正在连接
-        if (BluetoothModel::GetInstance()->GetBluetoothAclState()) {
-            bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "LastDevice addr: %02x%02x%02x%02x%02x%02x is connected",
-                lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3],
-                lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]);
-            BluetoothModel::GetInstance()->SetTagConnectNew(true);
-            errcode_t retVal = gap_disconnect_remote_device(lastAddr);
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Disconnect LastDevice retVal =  %d", retVal);
+        bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();
+
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Disconnect LastDevice retVal = %02X %02X %02X * * *",
+           lastAddr->addr[0],lastAddr->addr[1],lastAddr->addr[2]);
+        
+     
+        bool ret = bt_is_acl_connected(lastAddr);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Disconnect LastDevice retVal =  ret %d %02X %02X %02X * * *",
+           ret, lastAddr->addr[0],lastAddr->addr[1],lastAddr->addr[2]);
+        
+        
+        if (!( lastAddr->addr[0] == 0 && lastAddr->addr[1] == 0 && lastAddr->addr[2] == 0
+         && lastAddr->addr[3] == 0 && lastAddr->addr[4] == 0 && lastAddr->addr[5] == 0 ) && ret) {
+          BluetoothModel::GetInstance()->SetTagConnectNew(true);
+                errcode_t retVal = gap_disconnect_remote_device(lastAddr);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Disconnect LastDevice retVal =  %d %02X %02X %02X * * *", retVal,
+            lastAddr->addr[0],lastAddr->addr[1],lastAddr->addr[2]);
+                    }
+            else
+            {
+                mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), BLUETOOTHRECONNECTVIEW);
+                errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&addr);
+                        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectRemoteDevice ret =  %d", retVal);
         }
-        errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&addr);
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ConnectRemoteDevice ret =  %d", retVal);
         // 跳转可选页
         return true;
     }
@@ -129,7 +151,7 @@ UIView *BluetoothCaseListAdapter::GetView(UIView *inView, int16_t index)
         return nullptr;
     }
     if ((static_cast<unsigned int>(index) > bluetoothCaseList.size() - 1) || (index < 0)) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothCaseListAdapter::GetView %d %d", index, bluetoothCaseList.size());
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothCaseListAdapter::GetView %d %d", index, bluetoothCaseList.size());
         return nullptr;
     }
     std::list<BluetoothCaseInfo>::iterator node = bluetoothCaseList.begin();
@@ -156,9 +178,10 @@ UIView *BluetoothCaseListAdapter::GetView(UIView *inView, int16_t index)
     (void)sprintf_s(addrTmp, sizeof(addrTmp), "%02x%02x%02x%02x%02x%02x", node->addr[0], node->addr[1],
         node->addr[2], node->addr[3], node->addr[4], node->addr[5]); // 没有%s类型,不做返回判断
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addrTmp %s", addrTmp);
-    ClickAnimation(itemData, item);
-    item->SetItemInfo(itemData, true);
+    // ClickAnimation(itemData, item);
     item->SetViewIndex(index);
+    item->SetItemInfo(itemData, true);
+    item->SetPairingtatus();
     return item;
 }
 } // namespace OHOS
\ No newline at end of file
index f2950ec..5478357 100644 (file)
 #include "wearable_log.h"
 #include "UiConfig.h"
 #include "BluetoothPresenter.h"
+#include "CallerLogModel.h"
+#include "custom_utils.h"
+#include "notification_manager.h"
 
-namespace OHOS {
-BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter");
-    UIView::OnClickListener *click = item->GetOnClickListener();
-    if (click != nullptr) {
-        delete click;
-        click = nullptr;
-    }
-}
+#ifdef SUPPORT_PHONE_SERVICE
+#include "PhoneAGService.h"
+#endif
 
-uint16_t BluetoothDeviceCaseListAdapter::GetCount()
+namespace OHOS
 {
-    return BluetoothModel::GetInstance()->GetConnedDevicesCase().Size();
-}
-
-class BluetoothDeviceOnClickListListener : public UIView::OnClickListener {
-public:
-    BluetoothDeviceOnClickListListener(BluetoothCaseInfo *bluetoothInfo)
+    class BluetoothDeviceOnClickListListener;
+    static BluetoothDeviceOnClickListListener *g_btOnClickListListener = nullptr;
+    class BluetoothDeviceOnClickListListener : public UIView::OnClickListener
     {
-        if (bluetoothInfo != nullptr) {
-            (void)memcpy_s(addr.addr, BD_ADDR_LEN,
-                           bluetoothInfo->addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断
-            (void)memcpy_s(bluetoothInfo_.addr, BD_ADDR_LEN,
-                           bluetoothInfo->addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断
-            (void)memcpy_s(bluetoothInfo_.deviceName, BD_NAME_LEN,
-                           bluetoothInfo->deviceName, BD_NAME_LEN); // 源和目标内存长度一样,不做返回值判断
-            bluetoothInfo_.index = bluetoothInfo->index;
-            bluetoothInfo_.connIndex = bluetoothInfo->connIndex;
+    public:
+        BluetoothDeviceOnClickListListener() {}
+        ~BluetoothDeviceOnClickListListener() {}
+        void SetItemInfo(const BluetoothCaseInfo *bluetoothInfo)
+        {
+            if (bluetoothInfo != nullptr)
+            {
+                (void)memcpy_s(addr.addr, BD_ADDR_LEN,
+                               bluetoothInfo->addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断
+                (void)memcpy_s(bluetoothInfo_.addr, BD_ADDR_LEN,
+                               bluetoothInfo->addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断
+                (void)memcpy_s(bluetoothInfo_.deviceName, BD_NAME_LEN,
+                               bluetoothInfo->deviceName, BD_NAME_LEN); // 源和目标内存长度一样,不做返回值判断
+                bluetoothInfo_.index = bluetoothInfo->index;
+                bluetoothInfo_.connIndex = bluetoothInfo->connIndex;
+            }
         }
-    }
-    ~BluetoothDeviceOnClickListListener() {}
-    bool OnClick(UIView& view, const ClickEvent& event) override
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClickListListener");
-        UNUSED(view);
-        UNUSED(event);
-        /* 点击事件 */
-        // 跳转可选页
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {
-            JumpView *jumpView = JumpView::GetInstance();
-            if (jumpView == nullptr) {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick jumpView GetInstance fail");
-                return false;
+        bool OnClick(UIView &view, const ClickEvent &event) override
+        {
+            UNUSED(event);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListListener");
+            BluetoothItemView *itemView = static_cast<BluetoothItemView *>(view.GetParent());
+            BluetoothCaseInfo *g_BluetoothCaseInfo = itemView->GetItemInfo();
+            SetItemInfo(g_BluetoothCaseInfo); // 保存点击的设备信息
+            BluetoothModel::GetInstance()->SetTempMacValue(&bluetoothInfo_);
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)
+            {
+                JumpView *jumpView = JumpView::GetInstance();
+                if (jumpView == nullptr)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick jumpView GetInstance fail");
+                    return false;
+                }
+                jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,
+                                     JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW);
             }
-            jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,
-                                 JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW);
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {
-            MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();
-            if (mainBluetoothView == nullptr) {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick mainBluetoothView GetInstance fail");
-                return false;
+            #ifdef  SUPPORT_BT_SERVICE
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)
+            {
+                MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();
+                if (mainBluetoothView == nullptr)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick mainBluetoothView GetInstance fail");
+                    return false;
+                }
+                if (view.GetViewType() == UIViewType::UI_BUTTON) // 点击的是按钮
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIViewType::UI_BUTTON,%s", reinterpret_cast<const char *>(bluetoothInfo_.deviceName));
+                    bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();
+                    bool ret = bt_is_acl_connected(lastAddr);
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt_is_acl_connected:%d lastAddr:%02X %02X %02X * * *",
+                                  ret, lastAddr->addr[0], lastAddr->addr[1], lastAddr->addr[2]);
+
+                    // 地址不是全0并且ret为真
+                    if(OHOS::CallerLogModel::GetInstance()->GetCallSource() == OHOS::CallerLogModel::CallSourceCat1
+                    && OHOS::NotificationManager::GetInstance()->GetWatchCallStatus())
+                    {
+                         if (!(lastAddr->addr[0] == 0 && lastAddr->addr[1] == 0 && lastAddr->addr[2] == 0 &&
+                          lastAddr->addr[3] == 0 && lastAddr->addr[4] == 0 && lastAddr->addr[5] == 0) &&
+                            ret)
+                        {   
+                            if(headset_Is_connect())
+                            {
+                                if(headset_SCO_Is_connect_extend(lastAddr))
+                                {
+                                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CAT_HFP_DIS_SCO_CONNECT, nullptr, 0);
+                                }
+                                else
+                                {
+                                    uint8_t time=200;
+                                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CAT_HFP_SCO_CONNECT, &time, sizeof(uint8_t));
+                                }
+                            }
+                            else
+                            {
+                                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CONNECT_AG, nullptr, 0);
+                            }
+                            
+                        }
+                        else
+                        {
+                            mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), BLUETOOTHRECONNECTVIEW);
+                            errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&addr);
+                            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnectRemoteDevice] retVal =  %d", retVal);
+                        }
+
+                    }
+                    else
+                    {
+                         if (!(lastAddr->addr[0] == 0 && lastAddr->addr[1] == 0 && lastAddr->addr[2] == 0 &&
+                          lastAddr->addr[3] == 0 && lastAddr->addr[4] == 0 && lastAddr->addr[5] == 0) &&
+                            ret)
+                        {
+                            BluetoothModel::GetInstance()->SetTagConnectNew(false); //主动断开连接不需要回连该设备
+                            errcode_t retVal = gap_disconnect_remote_device(lastAddr);
+                            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[gap_disconnect_remote_device] retVal =  %d", retVal);
+                        }
+                        else
+                        {
+                            mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), BLUETOOTHRECONNECTVIEW);
+                            errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&addr);
+                            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnectRemoteDevice] retVal =  %d", retVal);
+                        }
+                    }
+                   
+                }
+                else if (view.GetViewType() == UIViewType::UI_IMAGE_VIEW) /*点击的是图片*/
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIViewType::UI_IMAGE_VIEW,%s", reinterpret_cast<const char *>(bluetoothInfo_.deviceName));
+                    mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), BLUETOOTHEOPTIONSVIEW);
+                    BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();
+                    if (bluetoothOptionsView == nullptr)
+                    {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothOptionsView new fail");
+                        return false;
+                    }
+                    bluetoothOptionsView->SetCurrentAddr(addr);
+                    bluetoothOptionsView->RefreshText();
+                }
             }
-            mainBluetoothView->ChangeView(BLUETOOTHDEVICELISTVIEW, BLUETOOTHEOPTIONSVIEW);
-        }
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClickListListener addr: %02x%02x%02x%02x%02x%02x",
-            bluetoothInfo_.addr[5], bluetoothInfo_.addr[4], bluetoothInfo_.addr[3], /* mac下标 0 1 2 3 4 5 */
-            bluetoothInfo_.addr[2], bluetoothInfo_.addr[1], bluetoothInfo_.addr[0]); /* mac下标 0 1 2 3 4 5 */
-        BluetoothModel::GetInstance()->SetTempMacValue(&bluetoothInfo_);
-        // 用于查询连接状态
-        BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();
-        if (bluetoothOptionsView == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothOptionsView new fail");
-            return false;
-        }
-        bluetoothOptionsView->SetCurrentAddr(addr);
-        bluetoothOptionsView->RefreshText();
-        return true;
-    }
+            #endif
 
-private:
-    BluetoothCaseInfo bluetoothInfo_{};
-    bd_addr_t addr;
-};
+            return true;
+        }
 
+    private:
+        BluetoothCaseInfo bluetoothInfo_{};
+        bd_addr_t addr;
+    };
 
-UIView *BluetoothDeviceCaseListAdapter::GetView(UIView *inView, int16_t index)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter GetView");
-    List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();
-    if (bluetoothCaseList.IsEmpty()) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothCaseList IsEmpty");
-        return nullptr;
-    }
-    if ((index > bluetoothCaseList.Size() - 1) || (index < 0)) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::GetView err");
-        return nullptr;
+    BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter");
+        if (g_btOnClickListListener != nullptr)
+        {
+            delete g_btOnClickListListener;
+            g_btOnClickListListener = nullptr;
+        }
     }
-    ListNode<BluetoothCaseInfo>* node = bluetoothCaseList.Begin();
-    for (uint16_t i = 0; i < index; i++) {
-        node = node->next_;
+
+    uint16_t BluetoothDeviceCaseListAdapter::GetCount()
+    {
+        return BluetoothModel::GetInstance()->GetConnedDevicesCase().Size();
     }
-    node->data_.index = index;
-    BluetoothCaseInfo itemData = node->data_;
-    if (inView == nullptr) {
-        item = new BluetoothItemView();
-        if (item == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetView item err");
+
+    UIView *BluetoothDeviceCaseListAdapter::GetView(UIView *inView, int16_t index)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter GetView");
+        List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();
+        if (bluetoothCaseList.IsEmpty())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothCaseList IsEmpty");
             return nullptr;
         }
-    } else {
-        item = static_cast<BluetoothItemView *>(inView);
-    }
-    item->SetItemInfo(itemData, false);
-    item->SetConnectionstatus(itemData);
+        if ((index > bluetoothCaseList.Size() - 1) || (index < 0))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::GetView err,%d,%d", index, bluetoothCaseList.Size());
+            return nullptr;
+        }
+        ListNode<BluetoothCaseInfo> *node = bluetoothCaseList.Begin();
+        for (uint16_t i = 0; i < index; i++)
+        {
+            node = node->next_;
+        }
+        node->data_.index = index;
+        BluetoothCaseInfo itemData = node->data_;
+        if (inView == nullptr)
+        {
+            item = new BluetoothItemView();
+            if (item == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetView item err");
+                return nullptr;
+            }
+        }
+        else
+        {
+            item = static_cast<BluetoothItemView *>(inView);
+        }
+        item->SetViewIndex(index);
+        item->SetItemInfo(itemData, false);
+        item->SetConnectionstatus(itemData);
 
-    listener = item->GetOnClickListener();
-    if (listener != nullptr) {
-        delete listener;
-        listener = nullptr;
-    }
-    listener = new BluetoothDeviceOnClickListListener(&node->data_);
-    if (listener == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetView BluetoothDeviceOnClickListListener err");
-        return nullptr;
+        if (g_btOnClickListListener == nullptr)
+        {
+            g_btOnClickListListener = new BluetoothDeviceOnClickListListener();
+            if (g_btOnClickListListener == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::GetView new fail");
+                return nullptr;
+            }
+        }
+        listener = static_cast<UIView::OnClickListener *>(g_btOnClickListListener);
+        item->SetViewOnClickListener(listener);
+        sprintf_s(addrTmp, sizeof(addrTmp), "%02x%02x%02x%02x%02x%02x", node->data_.addr[0], node->data_.addr[1],
+                  node->data_.addr[2], node->data_.addr[3], node->data_.addr[4], node->data_.addr[5]); // 没有%s类型,不做返回判断
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addrTmp %s", addrTmp);
+        return item;
     }
-    sprintf_s(addrTmp, sizeof(addrTmp), "%02x%02x%02x%02x%02x%02x", node->data_.addr[0], node->data_.addr[1],
-        node->data_.addr[2], node->data_.addr[3], node->data_.addr[4], node->data_.addr[5]); // 没有%s类型,不做返回判断
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addrTmp %s", addrTmp);
-
-    item->SetViewIndex(index);
-    item->SetOnClickListener(listener);
-    return item;
-}
 } // namespace OHOS
\ No newline at end of file
index 94ef720..2dd4085 100644 (file)
 #include "PlayersPresenter.h"\r
 #include "BluetoothPresenter.h"\r
 #include "BluetoothModel.h"\r
-\r
-namespace OHOS {\r
-static BluetoothDeviceListView *g_pBluetoothDeviceListView{nullptr};\r
-\r
-BluetoothDeviceListView::BluetoothDeviceListView()\r
+#include "ui_resource_string.h"\r
+namespace OHOS\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::BluetoothDeviceListView");\r
-    g_pBluetoothDeviceListView = this;\r
-}\r
+    static BluetoothDeviceListView *g_pBluetoothDeviceListView{nullptr};\r
 \r
-BluetoothDeviceListView::~BluetoothDeviceListView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::~BluetoothDeviceListView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete adapterText;\r
-    adapterText = nullptr;\r
-    delete emptyLabel;\r
-    emptyLabel = nullptr;\r
-    delete list;\r
-    list = nullptr;\r
-    delete newEquipmentButton;\r
-    newEquipmentButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    g_pBluetoothDeviceListView = nullptr;\r
-}\r
-\r
-BluetoothDeviceListView *BluetoothDeviceListView::GetInstance()\r
-{\r
-    return g_pBluetoothDeviceListView;\r
-}\r
+    BluetoothDeviceListView::BluetoothDeviceListView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::BluetoothDeviceListView");\r
+        g_pBluetoothDeviceListView = this;\r
+    }\r
 \r
-void BluetoothDeviceListView::InitList()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::InitList");\r
-    // list type\r
-    if (adapterText == nullptr) {\r
-        adapterText = new BluetoothDeviceCaseListAdapter();\r
-        if (adapterText == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView adapterText new fail");\r
-            return;\r
+    BluetoothDeviceListView::~BluetoothDeviceListView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::~BluetoothDeviceListView");\r
+        if (group)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (emptyLabel)\r
+            {\r
+                delete emptyLabel;\r
+                emptyLabel = nullptr;\r
+            }\r
+            if (adapterText)\r
+            {\r
+                delete adapterText;\r
+                adapterText = nullptr;\r
+            }\r
+            if (list)\r
+            {\r
+                delete list;\r
+                list = nullptr;\r
+            }\r
+            if (newEquipmentButton)\r
+            {\r
+                delete newEquipmentButton;\r
+                newEquipmentButton = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
         }\r
+        g_pBluetoothDeviceListView = nullptr;\r
     }\r
-    if (list == nullptr) {\r
-        list = new UIList(UIList::VERTICAL);\r
-        if (list == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView list new fail");\r
-            return;\r
+\r
+    BluetoothDeviceListView *BluetoothDeviceListView::GetInstance()\r
+    {\r
+        return g_pBluetoothDeviceListView;\r
+    }\r
+\r
+    void BluetoothDeviceListView::InitList()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::InitList");\r
+        if (adapterText == nullptr)\r
+        {\r
+            adapterText = new BluetoothDeviceCaseListAdapter();\r
+            if (adapterText == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView adapterText new fail");\r
+                return;\r
+            }\r
         }\r
-        list->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
-        list->SetPosition(36, 118, HORIZONTAL_RESOLUTION, 241); // 36:x 118:y 454:width 241:height\r
-        list->SetStartIndex(0); // 0 : list start index\r
-        list->SetAdapter(adapterText);\r
-        group->Add(list);\r
+        if (list == nullptr)\r
+        {\r
+            list = new UIList(UIList::VERTICAL);\r
+            if (list == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView list new fail");\r
+                return;\r
+            }\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "adapterText->GetCount = %d", adapterText->GetCount());\r
+            list->SetPosition(43, 120, 380, 100);\r
+            list->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+            list->SetStyle(STYLE_BORDER_RADIUS, 50);\r
+            list->SetDragACCLevel(5);\r
+            list->SetSwipeACCLevel(200);\r
+            list->SetReboundSize(30);\r
+            // list->SetScrollBlankSize(30);\r
+            list->SetAdapter(adapterText);\r
+        }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::InitList end");\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::InitList end");\r
-}\r
 \r
-void BluetoothDeviceListView::InItEmptyLabel() // 暂无已配对设备\r
-{\r
-    if (emptyLabel == nullptr) {\r
-        emptyLabel = new UILabel();\r
-        if (emptyLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView emptyLabel new fail");\r
-            return;\r
+    void BluetoothDeviceListView::InItEmptyLabel()\r
+    {\r
+        if (emptyLabel == nullptr)\r
+        {\r
+            emptyLabel = new UILabelExt();\r
+            if (emptyLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView emptyLabel new fail");\r
+                return;\r
+            }\r
         }\r
+        emptyLabel->SetPosition(83, 205, 300, 45);\r
+        emptyLabel->SetTextId(STR_NO_PAIRED_DEV); // 暂无已配对设备\r
+        emptyLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+        emptyLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        emptyLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
+        emptyLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        emptyLabel->SetVisible(false);\r
     }\r
-    emptyLabel->SetPosition(87, 205, 280, 45); // 87:x 205:y 280:width 45:height\r
-    emptyLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-    emptyLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-    emptyLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-        UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-    emptyLabel->SetText("暂无已配对设备");\r
-}\r
 \r
-UIViewGroup *BluetoothDeviceListView::GetGroup()\r
-{\r
-    return group;\r
-}\r
+    UIViewGroup *BluetoothDeviceListView::GetGroup()\r
+    {\r
+        return group;\r
+    }\r
 \r
-UIList *BluetoothDeviceListView::GetDeviceUIList()\r
-{\r
-    return list;\r
-}\r
+    /*获取蓝牙已连接设备列表*/\r
+    UIList *BluetoothDeviceListView::GetDeviceUIList()\r
+    {\r
+        return list;\r
+    }\r
 \r
-void BluetoothDeviceListView::InitNewEquipmentButton()\r
-{\r
-    if (newEquipmentButton == nullptr) {\r
-        newEquipmentButton = new UILabelButton();\r
-        if (newEquipmentButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView newEquipmentButton new fail");\r
+    void BluetoothDeviceListView::InitNewEquipmentButton()\r
+    {\r
+        if (newEquipmentButton == nullptr)\r
+        {\r
+            newEquipmentButton = new UILabelExt();\r
+            if (newEquipmentButton == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView newEquipmentButton new fail");\r
+                return;\r
+            }\r
+        }\r
+        newEquipmentButton->SetPosition(133, 390, 200, 40);\r
+        newEquipmentButton->SetTextId(STR_BT_HEADSET_RESCAN); // 重新搜索\r
+        newEquipmentButton->SetViewId(BLUETOOTH_NEWEQUIPMENT_BUTTON);\r
+        newEquipmentButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        newEquipmentButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        // newEquipmentButton->SetImageSrc(PNG_466x100BUTTON_IMAGE, PNG_466x100BUTTON_IMAGE);\r
+        newEquipmentButton->SetTextColor(Color::GetColorFromRGBA(0x35, 0x49, 0xff, 0xff));\r
+        // newEquipmentButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        newEquipmentButton->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        newEquipmentButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        newEquipmentButton->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        newEquipmentButton->SetTouchable(true);\r
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
             return;\r
         }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            newEquipmentButton->SetOnClickListener(clickListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            newEquipmentButton->SetOnClickListener(clickListener2);\r
+        }\r
     }\r
-    newEquipmentButton->SetPosition(65, 359, 324, 101); // 65 : x, 359 : y, 324:width 101:height\r
-    newEquipmentButton->SetText("新设备");\r
-    UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-    UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
-        return;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        newEquipmentButton->SetOnClickListener(clickListener);\r
-        newEquipmentButton->SetTextColor(Color::Red());\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        newEquipmentButton->SetOnClickListener(clickListener2);\r
-        newEquipmentButton->SetTextColor(Color::Blue());\r
-    }\r
-    newEquipmentButton->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
-    newEquipmentButton->SetViewId(BLUETOOTH_NEWEQUIPMENT_BUTTON);\r
-    newEquipmentButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-}\r
 \r
-UIViewGroup *BluetoothDeviceListView::InitShowUpView()\r
-{\r
-    // 获取currentBdAddr db值 待开发\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView init");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
-            return nullptr;\r
+    UIViewGroup *BluetoothDeviceListView::CreateBluetoothDeviceListView()\r
+    {\r
+        // 获取currentBdAddr db值 待开发\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView init");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
         }\r
-    }\r
-    group->SetPosition(0, 0);\r
-    group->SetWidth(HORIZONTAL_RESOLUTION);\r
-    group->SetHeight(VERTICAL_RESOLUTION);\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView titleLabel new fail");\r
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+        group->SetViewId(BLUETOOTH_DEVICE_LIST_VIEW);\r
+        group->SetDraggable(true);\r
+        group->SetTouchable(true);\r
+        UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+        UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((earDragListener == nullptr) && (earDragListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
             return nullptr;\r
         }\r
-    }\r
-\r
-    titleLabel->SetPosition(135, 35, 183, 53); // 135:x 35:y 183:width 53:height\r
-    titleLabel->SetText("蓝牙耳机");\r
-    titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-    titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-    titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-        UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-    InitNewEquipmentButton();\r
-    InItEmptyLabel();\r
-    // 加载列表\r
-    InitList();\r
-    group->Add(newEquipmentButton);\r
-    group->Add(titleLabel);\r
-    group->Add(emptyLabel);\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            group->SetOnDragListener(earDragListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            group->SetOnDragListener(earDragListener2);\r
+        }\r
+        /* ------------------------------- titleLabel ------------------------------- */\r
+        if (titleLabel == nullptr)\r
+        {\r
+            titleLabel = new UILabelExt();\r
+            if (titleLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView titleLabel new fail");\r
+                return nullptr;\r
+            }\r
+        }\r
+        titleLabel->SetPosition(83, 50, 300, 35);\r
+        titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES);\r
+        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT,30);\r
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT,35);\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        titleLabel->SetRollSpeed(23);\r
+        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        InitList(); // 加载bt设备列表\r
+        InitNewEquipmentButton();\r
+        InItEmptyLabel();\r
+        /* -------------------------------------------------------------------------- */\r
+        group->Add(titleLabel);\r
+        group->Add(list);\r
+        group->Add(emptyLabel);\r
+        group->Add(newEquipmentButton);\r
 \r
-    UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((earDragListener == nullptr) && (earDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
-        return nullptr;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(earDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(earDragListener2);\r
+        return group;\r
     }\r
-    group->SetViewId(BLUETOOTH_DEVICE_LIST_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
 \r
-void BluetoothDeviceListView::RefreshText(void)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::RefreshText");\r
-    List<BluetoothCaseInfo> &bluetoothConnedList = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
-    bool ret = bluetoothConnedList.IsEmpty();\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::RefreshText bluetoothConnedList.IsEmpty ret = %d", ret);\r
-    if (ret) {\r
-        emptyLabel->SetVisible(true);\r
-    } else {\r
-        emptyLabel->SetVisible(false);\r
+    /*刷新已连接过的蓝牙设备列表视图*/\r
+    void BluetoothDeviceListView::RefreshBluetoothDeviceListView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView::RefreshBluetoothDeviceListView");\r
+        if (list && newEquipmentButton)\r
+        {\r
+            switch (BluetoothModel::GetInstance()->GetConnedDevicesCase().Size())\r
+            {\r
+            case 0:\r
+                list->Resize(380, 0);\r
+                break;\r
+            case 1:\r
+                list->Resize(380, 100);\r
+                break;\r
+            case 2:\r
+                list->Resize(380, 200);\r
+                break;\r
+            default:\r
+                list->Resize(380, 250);\r
+                break;\r
+            }\r
+            // newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
+            list->RefreshList();\r
+            list->Invalidate();\r
+            // newEquipmentButton->Invalidate();\r
+        }\r
     }\r
-}\r
 \r
 }
\ No newline at end of file
index daf4cf8..2a68bf6 100644 (file)
 #include "PlayersPresenter.h"\r
 #include "BluetoothPresenter.h"\r
 #include "SettingModel.h"\r
+#include "ui_resource_string.h"\r
 \r
-namespace OHOS {\r
-static BluetoothEarListView *g_pBluetoothEarListView{nullptr};\r
-\r
-BluetoothEarListView::BluetoothEarListView()\r
+namespace OHOS\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::BluetoothEarListView");\r
-    g_pBluetoothEarListView = this;\r
-}\r
+    static BluetoothEarListView *g_pBluetoothEarListView{nullptr};\r
 \r
-BluetoothEarListView::~BluetoothEarListView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::~BluetoothEarListView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete adapterText;\r
-    adapterText = nullptr;\r
-    delete list;\r
-    list = nullptr;\r
-    delete rescanButton;\r
-    rescanButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    g_pBluetoothEarListView = nullptr;\r
-}\r
-\r
-BluetoothEarListView *BluetoothEarListView::GetInstance()\r
-{\r
-    return g_pBluetoothEarListView;\r
-}\r
+    BluetoothEarListView::BluetoothEarListView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::BluetoothEarListView");\r
+        g_pBluetoothEarListView = this;\r
+    }\r
 \r
-void BluetoothEarListView::InitList()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitList");\r
-    // list type\r
-    if (adapterText == nullptr) {\r
-        adapterText = new BluetoothCaseListAdapter();\r
-        if (adapterText == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView adapterText new fail");\r
-            return;\r
+    BluetoothEarListView::~BluetoothEarListView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::~BluetoothEarListView");\r
+        if (group)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (adapterText)\r
+            {\r
+                delete adapterText;\r
+                adapterText = nullptr;\r
+            }\r
+            if (list)\r
+            {\r
+                delete list;\r
+                list = nullptr;\r
+            }\r
+            if (rescanButton)\r
+            {\r
+                delete rescanButton;\r
+                rescanButton = nullptr;\r
+            }\r
+            if (cancelConnedRequestButton)\r
+            {\r
+                delete cancelConnedRequestButton;\r
+                cancelConnedRequestButton = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
         }\r
+        g_pBluetoothEarListView = nullptr;\r
     }\r
-    if (list == nullptr) {\r
-        list = new UIList(UIList::VERTICAL);\r
-        if (list == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView list new fail");\r
-            return;\r
+\r
+    BluetoothEarListView *BluetoothEarListView::GetInstance()\r
+    {\r
+        return g_pBluetoothEarListView;\r
+    }\r
+\r
+    void BluetoothEarListView::InitList()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitList");\r
+        // list type\r
+        if (adapterText == nullptr)\r
+        {\r
+            adapterText = new BluetoothCaseListAdapter();\r
+            if (adapterText == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView adapterText new fail");\r
+                return;\r
+            }\r
+        }\r
+        if (list == nullptr)\r
+        {\r
+            list = new UIList(UIList::VERTICAL);\r
+            if (list == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView list new fail");\r
+                return;\r
+            }\r
+            list->SetPosition(43, 120, 380, 300);\r
+            list->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+            list->SetStyle(STYLE_BORDER_RADIUS, 50);\r
+            list->SetStartIndex(0);\r
+            // list->EnableAutoAlign(true);\r
+            // list->SetIntercept(true);\r
+            list->SetDragACCLevel(5);\r
+            list->SetSwipeACCLevel(200);\r
+            // list->SetReboundSize(30);\r
+            // list->SetScrollBlankSize(30);\r
+            list->SetAdapter(adapterText);\r
+            group->Add(list);\r
         }\r
-        list->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
-        list->SetPosition(36, 118, HORIZONTAL_RESOLUTION, 241); // 36:x 118:y 454:width 241:height\r
-        list->SetStartIndex(0); // 0 : list start index\r
-        list->SetAdapter(adapterText);\r
-        group->Add(list);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitList end");\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitList end");\r
-}\r
 \r
-UIViewGroup *BluetoothEarListView::GetGroup()\r
-{\r
-    return group;\r
-}\r
+    UIViewGroup *BluetoothEarListView::GetGroup()\r
+    {\r
+        return group;\r
+    }\r
 \r
-UIList *BluetoothEarListView::GetScanUIList()\r
-{\r
-    return list;\r
-}\r
+    UIList *BluetoothEarListView::GetScanUIList()\r
+    {\r
+        return list;\r
+    }\r
 \r
-void BluetoothEarListView::SetTitleLabel(const char *text)\r
-{\r
-    titleLabel->SetText(text);\r
-}\r
+    void BluetoothEarListView::SetTitleLabel(const char *text)\r
+    {\r
+        // titleLabel->SetText(text);\r
+    }\r
 \r
-void BluetoothEarListView::SetNewEquipmentButtonAdd(void)\r
-{\r
-    group->Add(rescanButton);\r
-}\r
+    void BluetoothEarListView::SetNewEquipmentButtonAdd(void)\r
+    {\r
+        // group->Add(rescanButton);\r
+    }\r
 \r
-void BluetoothEarListView::SetNewEquipmentButtonRemove(void)\r
-{\r
-    group->Remove(rescanButton);\r
-}\r
+    void BluetoothEarListView::SetNewEquipmentButtonRemove(void)\r
+    {\r
+        // group->Remove(rescanButton);\r
+    }\r
 \r
-void BluetoothEarListView::SetCancelConnedRequestButtonAdd(void)\r
-{\r
-    group->Add(cancelConnedRequestButton);\r
-}\r
+    void BluetoothEarListView::SetCancelConnedRequestButtonAdd(void)\r
+    {\r
+        // group->Add(cancelConnedRequestButton);\r
+    }\r
 \r
-void BluetoothEarListView::SetCancelConnedRequestButtonRemove(void)\r
-{\r
-    group->Remove(cancelConnedRequestButton);\r
-}\r
+    void BluetoothEarListView::SetCancelConnedRequestButtonRemove(void)\r
+    {\r
+        // group->Remove(cancelConnedRequestButton);\r
+    }\r
 \r
-void BluetoothEarListView::InitButten(UILabelButton **button, const char *text, const char* id)\r
-{\r
-    if (*button == nullptr) {\r
-        *button = new UILabelButton();\r
-        if (*button == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitButten new fail");\r
+    void BluetoothEarListView::InitButten(UILabelButton **button, const char *text, const char *id)\r
+    {\r
+        if (*button == nullptr)\r
+        {\r
+            *button = new UILabelButton();\r
+            if (*button == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitButten new fail");\r
+                return;\r
+            }\r
+        }\r
+        (*button)->SetPosition(65, 359, 324, 101); // 65 : x, 359 : y, 324:width 101:height\r
+        (*button)->SetText(text);\r
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitButten button GetInstance fail");\r
             return;\r
         }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            (*button)->SetOnClickListener(clickListener);\r
+            (*button)->SetTextColor(Color::Red());\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            (*button)->SetOnClickListener(clickListener2);\r
+            (*button)->SetTextColor(Color::Blue());\r
+        }\r
+        (*button)->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
+        (*button)->SetViewId(id);\r
+        (*button)->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
     }\r
-    (*button)->SetPosition(65, 359, 324, 101); // 65 : x, 359 : y, 324:width 101:height\r
-    (*button)->SetText(text);\r
-    UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-    UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView::InitButten button GetInstance fail");\r
-        return;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        (*button)->SetOnClickListener(clickListener);\r
-        (*button)->SetTextColor(Color::Red());\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        (*button)->SetOnClickListener(clickListener2);\r
-        (*button)->SetTextColor(Color::Blue());\r
-    }\r
-    (*button)->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
-    (*button)->SetViewId(id);\r
-    (*button)->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-}\r
 \r
-UIViewGroup *BluetoothEarListView::InitShowUpView()\r
-{\r
-    // 获取currentBdAddr db值 待开发\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView init");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
-            return nullptr;\r
+    void BluetoothEarListView::InitNewEquipmentButton()\r
+    {\r
+        if (rescanButton == nullptr)\r
+        {\r
+            rescanButton = new UILabelExt();\r
+            if (rescanButton == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView rescanButton new fail");\r
+                return;\r
+            }\r
+        }\r
+        rescanButton->SetPosition(133, 390, 200, 40);\r
+        rescanButton->SetTextId(STR_BT_HEADSET_RESCAN); // 重新搜索\r
+        rescanButton->SetViewId(BLUETOOTH_RESCAN_BUTTON);\r
+        rescanButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        rescanButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        rescanButton->SetTextColor(Color::GetColorFromRGBA(0x35, 0x49, 0xff, 0xff));\r
+        // rescanButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        rescanButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        rescanButton->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        rescanButton->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        rescanButton->SetTouchable(true);\r
+        group->Add(rescanButton);\r
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
+            return;\r
+        }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            rescanButton->SetOnClickListener(clickListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            rescanButton->SetOnClickListener(clickListener2);\r
         }\r
     }\r
-    group->SetPosition(0, 0);\r
-    group->SetWidth(HORIZONTAL_RESOLUTION);\r
-    group->SetHeight(VERTICAL_RESOLUTION);\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView titleLabel new fail");\r
+\r
+    UIViewGroup *BluetoothEarListView::InitShowUpView()\r
+    {\r
+        // 获取currentBdAddr db值 待开发\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarListView init");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+        }\r
+        group->SetPosition(0, 0);\r
+        group->SetWidth(HORIZONTAL_RESOLUTION);\r
+        group->SetHeight(VERTICAL_RESOLUTION);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (titleLabel == nullptr)\r
+        {\r
+            titleLabel = new UILabelExt();\r
+            if (titleLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView titleLabel new fail");\r
+                return nullptr;\r
+            }\r
+        }\r
+        titleLabel->SetPosition(83, 50, 300, 35);\r
+        titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES);\r
+        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT,30);\r
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT,35);\r
+        titleLabel->SetRollSpeed(23);\r
+        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        group->Add(titleLabel);\r
+        /* -------------------------------------------------------------------------- */\r
+        // 加载列表\r
+        InitList();\r
+        // 按钮初始化\r
+        // InitButten(&rescanButton, "重新扫描", BLUETOOTH_RESCAN_BUTTON);\r
+        // InitButten(&cancelConnedRequestButton, "取消", BLUETOOTH_CANCELCONNEDREQUEST_BUTTON);\r
+        InitNewEquipmentButton();\r
+\r
+        UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+        UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((earDragListener == nullptr) && (earDragListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
             return nullptr;\r
         }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            group->SetOnDragListener(earDragListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            group->SetOnDragListener(earDragListener2);\r
+        }\r
+        group->SetViewId(BLUETOOTH_EARLIST_VIEW);\r
+        group->SetDraggable(true);\r
+        group->SetTouchable(true);\r
+        return group;\r
     }\r
-    titleLabel->SetPosition(135, 35, 183, 53); // 135:x 35:y 183:width 53:height\r
-    titleLabel->SetText("正在扫描");\r
-    titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-    titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-    titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-        UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-    // 加载列表\r
-    InitList();\r
-    InitButten(&rescanButton, "重新扫描", BLUETOOTH_RESCAN_BUTTON);\r
-    InitButten(&cancelConnedRequestButton, "取消", BLUETOOTH_CANCELCONNEDREQUEST_BUTTON);\r
-    group->Add(titleLabel);\r
-\r
-    UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((earDragListener == nullptr) && (earDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
-        return nullptr;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(earDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(earDragListener2);\r
+\r
+    // 刷新扫描出来的设备列表\r
+    void BluetoothEarListView::RefreshBluetoothEarListView(void)\r
+    {\r
+        if (list)\r
+        {\r
+            switch (BluetoothModel::GetInstance()->GetCase().size())//根据扫描出的设备数量,设置扫描列表的高度,使其高度自适应\r
+            {\r
+            case 0:\r
+                list->Resize(380, 0);\r
+                break;\r
+            case 1:\r
+                list->Resize(380, 100);\r
+                break;\r
+            case 2:\r
+                list->Resize(380, 200);\r
+                break;\r
+            default:\r
+                list->Resize(380, 250);\r
+                break;\r
+            }\r
+            list->RefreshList();\r
+            list->Invalidate();\r
+        }\r
     }\r
-    group->SetViewId(BLUETOOTH_EARLIST_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
 }
\ No newline at end of file
index 7253ed7..3d246fc 100644 (file)
 #include "SettingModel.h"\r
 #include "common/image_cache_manager.h"\r
 #include "graphic_service.h"\r
+#include "uicomponents/UIComponents.h"\r
+#include "uiservice/include/ui_service.h"\r
+#include <custom_utils.h>\r
 \r
-namespace OHOS {\r
-static BluetoothEarPhoneView *g_pBluetoothEarPhoneView{nullptr};\r
+namespace OHOS\r
+{\r
+    static BluetoothEarPhoneView *g_pBluetoothEarPhoneView{nullptr};\r
 #define BLUETOOTH_IMAGE_X 175\r
 #define BLUETOOTH_IMAGE_Y 175\r
 #define BLUETOOTH_IMAGE_WIDTH 104\r
 #define BLUETOOTH_IMAGE_HEIGHT 104\r
 #define BLUETOOTH_DELAY 200\r
 \r
-GraphicTimer* g_stopScanHandle = nullptr;\r
-static constexpr uint64_t MS_SCAN_TIME = 25000;\r
-\r
-BluetoothEarPhoneView::BluetoothEarPhoneView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BluetoothEarPhoneView");\r
-    g_pBluetoothEarPhoneView = this;\r
-}\r
+    osTimerId_t g_stopScanHandle = nullptr;\r
+    static constexpr uint64_t MS_SCAN_TIME = 25000;\r
 \r
-BluetoothEarPhoneView::~BluetoothEarPhoneView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::~BluetoothEarPhoneView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete imageAnimator;\r
-    imageAnimator = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    g_pBluetoothEarPhoneView = nullptr;\r
-}\r
+    static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_VIEW_X = 183;\r
+    static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_VIEW_Y = 153;\r
+    static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_VIEW_W = 100;\r
+    static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_VIEW_H = 120;\r
+    static constexpr int16_t CONNECTING_IMAGE_ANIMATOR_DELAY = 50; // 图片更新间隔\r
+    static constexpr const char *connectImagePaths = "/user/res/connect/";\r
+    BluetoothEarPhoneView::BluetoothEarPhoneView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BluetoothEarPhoneView");\r
+        g_pBluetoothEarPhoneView = this;\r
+    }\r
 \r
-BluetoothEarPhoneView *BluetoothEarPhoneView::GetInstance()\r
-{\r
-    return g_pBluetoothEarPhoneView;\r
-}\r
+    BluetoothEarPhoneView::~BluetoothEarPhoneView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::~BluetoothEarPhoneView");\r
+        if (group)\r
+        {\r
+            group->RemoveAll();\r
+            if (imageAnimator)\r
+            {\r
+                imageAnimator->Stop();\r
+                delete imageAnimator;\r
+                imageAnimator = nullptr;\r
+                FreeImageInfoArray(connectPathsArray, connectImagePaths, CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
+        }\r
+        g_pBluetoothEarPhoneView = nullptr;\r
+    }\r
 \r
-void BluetoothEarPhoneView::BtScanImageAnimator()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtScanImageAnimator init");\r
-    const char *searchImagePath[BLUETOOTH_SEARCH_IMAGE_NUM] = {\r
-        PNG_A019_080_IMAGE_PATH,\r
-        PNG_A019_081_IMAGE_PATH,\r
-        PNG_A019_082_IMAGE_PATH,\r
-        PNG_A019_083_IMAGE_PATH,\r
-        PNG_A019_084_IMAGE_PATH,\r
-        PNG_A019_085_IMAGE_PATH,\r
-        PNG_A019_086_IMAGE_PATH,\r
-        PNG_A019_087_IMAGE_PATH,\r
-    };\r
+    BluetoothEarPhoneView *BluetoothEarPhoneView::GetInstance()\r
+    {\r
+        return g_pBluetoothEarPhoneView;\r
+    }\r
 \r
-    if (imageAnimator == nullptr) {\r
-        imageAnimator = new UIImageAnimatorView();\r
-        if (imageAnimator == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView new imageAnimator fail");\r
-            return;\r
-        }\r
-        for (uint8_t i = 0; i < BLUETOOTH_SEARCH_IMAGE_NUM; i++) {\r
-            searchImageInfo[i].imageInfo =  ImageCacheManager::GetInstance().LoadSingleRes(searchImagePath[i]);\r
-            searchImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;\r
-            searchImageInfo[i].pos.x = BLUETOOTH_IMAGE_X;\r
-            searchImageInfo[i].pos.y = BLUETOOTH_IMAGE_Y;\r
-            searchImageInfo[i].width = BLUETOOTH_IMAGE_WIDTH;\r
-            searchImageInfo[i].height = BLUETOOTH_IMAGE_HEIGHT;\r
+    // 扫描动画创建\r
+    void BluetoothEarPhoneView::BtScanImageAnimator()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtScanImageAnimator init");\r
+        connectPathsArray = CreateImageInfoArray(connectImagePaths, CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
+        if (imageAnimator == nullptr)\r
+        {\r
+            imageAnimator = new UIImageAnimatorView();\r
+            if (imageAnimator == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDeviceUnBindingView]imageAnimator new fail");\r
+                return;\r
+            }\r
+            for (uint8_t i = 0; i < CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)\r
+            {\r
+                connectImageInfo[i].imageInfo = (connectPathsArray[i]);\r
+                connectImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;\r
+                connectImageInfo[i].pos.x = CONNECTING_IMAGE_ANIMATOR_VIEW_X;\r
+                connectImageInfo[i].pos.y = CONNECTING_IMAGE_ANIMATOR_VIEW_Y;\r
+                connectImageInfo[i].width = CONNECTING_IMAGE_ANIMATOR_VIEW_W;\r
+                connectImageInfo[i].height = CONNECTING_IMAGE_ANIMATOR_VIEW_H;\r
+            }\r
+            imageAnimator->SetPosition(CONNECTING_IMAGE_ANIMATOR_VIEW_X, CONNECTING_IMAGE_ANIMATOR_VIEW_Y, CONNECTING_IMAGE_ANIMATOR_VIEW_W, CONNECTING_IMAGE_ANIMATOR_VIEW_H);\r
+            imageAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+            imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+            imageAnimator->SetImageAnimatorSrc(connectImageInfo, CONNECTING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, CONNECTING_IMAGE_ANIMATOR_DELAY);\r
+            imageAnimator->SetRepeat(true);\r
+            imageAnimator->SetSizeFixed(true);\r
+            group->Add(imageAnimator);\r
         }\r
-        imageAnimator->SetPosition(175, 175, 104, 104); // 175:x 175:y 104:width 104:height\r
-        imageAnimator->SetImageAnimatorSrc(searchImageInfo, BLUETOOTH_SEARCH_IMAGE_NUM, BLUETOOTH_DELAY);\r
-        imageAnimator->SetRepeat(true);\r
-        group->Add(imageAnimator);\r
     }\r
-}\r
 \r
-void BluetoothEarPhoneView::BtAnimatorStart(void)\r
-{\r
-    imageAnimator->Start();\r
-}\r
+    // 动画开始\r
+    void BluetoothEarPhoneView::BtAnimatorStart(void)\r
+    {\r
+        imageAnimator->Start();\r
+    }\r
 \r
-void BluetoothEarPhoneView::BtAnimatorStop(void)\r
-{\r
-    imageAnimator->Stop();\r
-}\r
+    // 动画停止\r
+    void BluetoothEarPhoneView::BtAnimatorStop(void)\r
+    {\r
+        imageAnimator->Stop();\r
+    }\r
 \r
-UIViewGroup *BluetoothEarPhoneView::InitShowUpView()\r
-{\r
-    // 获取currentBdAddr db值 待开发\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+    UIViewGroup *BluetoothEarPhoneView::InitShowUpView()\r
+    {\r
+        // 获取currentBdAddr db值 待开发\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+        }\r
+        group->SetPosition(0, 0);\r
+        group->SetWidth(HORIZONTAL_RESOLUTION);\r
+        group->SetHeight(VERTICAL_RESOLUTION);\r
+\r
+        UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+        UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((earDragListener == nullptr) && (earDragListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
             return nullptr;\r
         }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            group->SetOnDragListener(earDragListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            group->SetOnDragListener(earDragListener2);\r
+        }\r
+        group->SetViewId(BLUETOOTH_EAR_PHONE_VIEW);\r
+        // 动画\r
+        BtScanImageAnimator();\r
+        group->SetDraggable(true);\r
+        group->SetTouchable(true);\r
+        return group;\r
     }\r
-    group->SetPosition(0, 0);\r
-    group->SetWidth(HORIZONTAL_RESOLUTION);\r
-    group->SetHeight(VERTICAL_RESOLUTION);\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView titleLabel new fail");\r
-            return nullptr;\r
+\r
+    // 取消br扫描处理\r
+    static void CancelBrScanHandle(void)\r
+    {\r
+        /* ---------------------------------- 取消定时器 --------------------------------- */\r
+        if (g_stopScanHandle != nullptr)\r
+        {\r
+            osTimerStop(g_stopScanHandle);\r
+            osStatus_t ret = osTimerDelete(g_stopScanHandle);\r
+            if (ret != osOK)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);\r
+                return;\r
+            }\r
+            g_stopScanHandle = nullptr;\r
         }\r
-        titleLabel->SetPosition(135, 35, 183, 53); // 135:x 35:y 183:width 53:height\r
-        titleLabel->SetText("正在搜索");\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-            UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(titleLabel);\r
+        /* --------------------------------- 取消屏幕常亮 --------------------------------- */\r
+        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
+        /* -------------------------------------------------------------------------- */\r
+        bool results = gap_br_cancel_discovery();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelBtDiscovery results %d", results);\r
     }\r
-    UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((earDragListener == nullptr) && (earDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
-        return nullptr;\r
+\r
+    // 结束扫描处理\r
+    static void EndScanHandle(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EndScanHandle");\r
+        if (BluetoothModel::GetInstance()->GetCase().size() == 0)\r
+        {\r
+            BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
+            if (bluetoothEarPhoneView == nullptr)\r
+            { // 暂停动画\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView nullptr");\r
+                return;\r
+            }\r
+            bluetoothEarPhoneView->BtAnimatorStop();\r
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+            {\r
+                JumpView *jumpView = JumpView::GetInstance();\r
+                if (jumpView == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+                    return;\r
+                }\r
+                jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,\r
+                                     JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW);\r
+            }\r
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+            {\r
+                MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();\r
+                if (mainBluetoothView == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainBluetoothView GetInstance fail");\r
+                    return;\r
+                }\r
+                mainBluetoothView->ChangeView(BLUETOOTHEARPHONEVIEW, TIPSFAILMESSAGEVIEW);\r
+            }\r
+        }\r
+        else\r
+        {\r
+            // 按rssi信息重新排序\r
+            BluetoothModel::GetInstance()->SortScansCaseRssi();\r
+            // 刷新\r
+            BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();\r
+            if (bluetoothEarListView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView nullptr");\r
+                return;\r
+            }\r
+            if (bluetoothEarListView->GetScanUIList() == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetScanUIList nullptr");\r
+                return;\r
+            }\r
+            bluetoothEarListView->GetScanUIList()->RefreshList();\r
+            // 扫描完成\r
+            bluetoothEarListView->SetTitleLabel("扫描完成");\r
+            bluetoothEarListView->SetNewEquipmentButtonAdd();\r
+        }\r
     }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(earDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(earDragListener2);\r
+\r
+    // 定时器回调函数\r
+    static void ScanTimerCallbackProc(int data)\r
+    {\r
+        (void)data;\r
+        CancelBrScanHandle();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Bt scan end jumpView");\r
+        EndScanHandle();\r
     }\r
-    group->SetViewId(BLUETOOTH_EAR_PHONE_VIEW);\r
-    // 动画\r
-    BtScanImageAnimator();\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
 \r
-void CancelBrScanHandle(void)\r
-{\r
-    if (g_stopScanHandle != nullptr) {\r
-        delete g_stopScanHandle;\r
-        g_stopScanHandle = nullptr;\r
+    static void ScanTimerCallback(int data)\r
+    {\r
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(ScanTimerCallbackProc, data));\r
     }\r
-    bool results = gap_br_cancel_discovery();\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelBtDiscovery results %d", results);\r
-}\r
 \r
-void EndScanHandle(void)\r
-{\r
-    if (BluetoothModel::GetInstance()->GetCase().size() == 0) {\r
-        BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
-        if (bluetoothEarPhoneView == nullptr) { // 暂停动画\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView nullptr");\r
+    // 蓝牙start\r
+    void BluetoothEarPhoneView::BtEnable()\r
+    {\r
+        bool ret;\r
+        bool results;\r
+        // 经典蓝牙扫描\r
+        setScanStatus(true); // 开始扫描标记\r
+        // BluetoothModel::GetInstance()->SetCaseListClear(); // 扫描list清空\r
+        BluetoothModel::GetInstance()->Init(); // 清空list,获取paired devicelist\r
+        ret = is_bt_discovering(BT_TRANSPORT_BR_EDR);\r
+        if (ret)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable Bt is Discovering");\r
             return;\r
         }\r
-        bluetoothEarPhoneView->BtAnimatorStop();\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-            JumpView *jumpView = JumpView::GetInstance();\r
-            if (jumpView == nullptr) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
-                return;\r
-            }\r
-            jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,\r
-                                 JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-            MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();\r
-            if (mainBluetoothView == nullptr) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainBluetoothView GetInstance fail");\r
-                return;\r
-                }\r
-            mainBluetoothView->ChangeView(BLUETOOTHEARPHONEVIEW, TIPSFAILMESSAGEVIEW);\r
+        else\r
+        {\r
+            results = gap_br_start_discovery();\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable StartBtDiscovery results %d", results);\r
         }\r
-    } else {\r
-        // 按rssi信息重新排序\r
-        BluetoothModel::GetInstance()->SortScansCaseRssi();\r
-        // 刷新\r
-        BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();\r
-        if (bluetoothEarListView == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView nullptr");\r
+        /* -------------------------------------------------------------------------- */\r
+        // ScreenTurnOn(MS_SCAN_TIME);\r
+        /* --------------------------------- 设置屏幕为常亮 -------------------------------- */\r
+        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
+        /* -------------------------------------------------------------------------- */\r
+        /*开启定时器*/\r
+        if (g_stopScanHandle != nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable g_stopScanHandle != nullptr");\r
             return;\r
         }\r
-        if (bluetoothEarListView->GetScanUIList() == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetScanUIList nullptr");\r
+        g_stopScanHandle = osTimerNew((osTimerFunc_t)ScanTimerCallback, osTimerPeriodic, nullptr, nullptr);\r
+        if (g_stopScanHandle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerNew failed!!");\r
             return;\r
         }\r
-        bluetoothEarListView->GetScanUIList()->RefreshList();\r
-        // 扫描完成\r
-        bluetoothEarListView->SetTitleLabel("扫描完成");\r
-        bluetoothEarListView->SetNewEquipmentButtonAdd();\r
-        RootView::GetInstance()->Invalidate();\r
-    }\r
-}\r
-\r
-// 定时器回调函数\r
-static void BluetoothScanTimerCallbackProc(void* data)\r
-{\r
-    (void)data;\r
-    CancelBrScanHandle();\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Bt scan end jumpView");\r
-    EndScanHandle();\r
-}\r
-\r
-void BluetoothScanTimerCallback(void* data)\r
-{\r
-    GraphicService::GetInstance()->PostGraphicEvent(std::bind(BluetoothScanTimerCallbackProc, data));\r
-}\r
-\r
-// 蓝牙start\r
-void BluetoothEarPhoneView::BtEnable()\r
-{\r
-    bool ret;\r
-    bool results;\r
-    // 经典蓝牙扫描\r
-    setScanStatus(true); // 开始扫描标记\r
-    BluetoothModel::GetInstance()->SetCaseListClear(); // 扫描list清空\r
-    ret = is_bt_discovering(BT_TRANSPORT_BR_EDR);\r
-    if (ret) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable Bt is Discovering");\r
-        return;\r
-    } else {\r
-        results = gap_br_set_inquiry_paramters(DEVICE_MAJOR_CLASS_AUDIO_VIDEO, 0);\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_br_set_inquiry_paramters results %d", results);\r
-        results = gap_br_start_discovery();\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_br_start_discovery results %d", results);\r
-    }\r
-    if (g_stopScanHandle != nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable g_stopScanHandle != nullptr");\r
-        return;\r
-    }\r
-    uint32 tick = GetOSTick(MS_SCAN_TIME);\r
-    g_stopScanHandle = new GraphicTimer(tick, BluetoothScanTimerCallback, nullptr, true);\r
-    if (g_stopScanHandle == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable new GraphicTimer failed!!");\r
-        return;\r
-    }\r
-    bool retTimer = g_stopScanHandle->Start();\r
-    if (!retTimer) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable Start failed");\r
-        if (g_stopScanHandle != nullptr) {\r
-            delete g_stopScanHandle;\r
-            g_stopScanHandle = nullptr;\r
+        uint32 tick = osMs2Tick(MS_SCAN_TIME);\r
+        osStatus_t retTimer = osTimerStart(g_stopScanHandle, tick);\r
+        if (retTimer != osOK)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerStart failed, ret = %lx!!", retTimer);\r
+            if (g_stopScanHandle != nullptr)\r
+            {\r
+                retTimer = osTimerDelete(g_stopScanHandle);\r
+                if (retTimer != osOK)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerDelete  ret = %lx!!", retTimer);\r
+                    return;\r
+                }\r
+                g_stopScanHandle = nullptr;\r
+            }\r
+            return;\r
         }\r
         return;\r
     }\r
-    return;\r
-}\r
 \r
-void BluetoothEarPhoneView::StopBtDiscovery(void)\r
-{\r
-    bool ret = is_bt_discovering(BT_TRANSPORT_BR_EDR);\r
-    if (!ret) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Bt is not Discovering");\r
+    void BluetoothEarPhoneView::StopBtDiscovery(void)\r
+    {\r
+        bool ret = is_bt_discovering(BT_TRANSPORT_BR_EDR);\r
+        if (!ret)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Bt is not Discovering");\r
+        }\r
+        CancelBrScanHandle();\r
         return;\r
     }\r
-    CancelBrScanHandle();\r
-    return;\r
-}\r
 \r
-void BluetoothEarPhoneView::setScanStatus(bool value)\r
-{\r
-    scanStart = value;\r
-}\r
-bool BluetoothEarPhoneView::getScanStatus(void)\r
-{\r
-    return scanStart;\r
-}\r
+    /*\r
+     *  @brief 设置是否已经开始扫描标记\r
+     */\r
+    void BluetoothEarPhoneView::setScanStatus(bool value)\r
+    {\r
+        scanStart = value;\r
+    }\r
+    \r
+    //获取是否已经开始扫描标记\r
+    bool BluetoothEarPhoneView::getScanStatus(void)\r
+    {\r
+        return scanStart;\r
+    }\r
 }
\ No newline at end of file
index 6ac112d..2b10bff 100644 (file)
@@ -5,11 +5,14 @@
  * Create: 2022-3-22\r
  */\r
 \r
-#include "BluetoothHeadsetEvent.h"\r
+#include <BluetoothHeadsetEvent.h>\r
 #include "bts_avrcp_target.h"\r
 #include "bts_avrcp_controller.h"\r
 #include "PlayersModel.h"\r
+#include "service_id_define.h"\r
 #include "graphic_service.h"\r
+#include <bts_a2dp_source.h>\r
+#include "notification_manager.h"\r
 \r
 using namespace OHOS;\r
 \r
@@ -28,7 +31,7 @@ BtAvrcpTgInf g_avrcp_srv_inf;
 \r
 void BtAvrcpVolumeChangedSyncMedia(uint8_t a2dp_volume)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[BtAvrcpVolumeChangedSyncMedia]::a2dp_volume = 0x%x\r\n", a2dp_volume);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[BtAvrcpVolumeChangedSyncMedia]::a2dp_volume = 0x%x\r\n", a2dp_volume);\r
     int32_t audio_volume = a2dp_volume * BT_A2DP_MEDIA_VOL_LEVEL / AVRCP_ABSOLUTE_VOLUME_PERCENTAGE_100;\r
     AudioManager::GetInstance().SetVolume(AUDIO_STREAM_A2DP_MUSIC, audio_volume); /* 设置增益音量 */\r
     g_avrcp_tg_local_media_vol = a2dp_volume;\r
@@ -95,13 +98,26 @@ void PressButtonStatusCallback(td_u32 keyOperation, td_u32 keyValue)
 void BtAvrcpTgNotifyVolumeChangedProc(uint8_t a2dp_volume)\r
 {\r
     int32_t audio_volume = a2dp_volume * BT_A2DP_MEDIA_VOL_LEVEL / AVRCP_ABSOLUTE_VOLUME_PERCENTAGE_100;\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "NotifyVolume = %d", audio_volume);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NotifyVolume = %d", audio_volume);\r
     AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, audio_volume); // 耳机连接手表场景调节手表音量\r
+    /* ---------------------------- 若当前音乐播放器为手机音乐则同步更新音乐播放器的声音进度条 --------------------------- */\r
+    if(PlayersModel::GetInstance()->GetMusicSource())\r
+    {\r
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(&OHOS::PlayersModel::UpdateVolumeValue, OHOS::PlayersModel::GetInstance()));\r
+    }\r
+    /* -------------------------------------------------------------------------- */\r
 }\r
 \r
+//根据传入的按键操作类型和值,执行相应的操作并通知媒体状态变化\r
 void UsingPressButtonStatusCallback(td_u32 keyOperation, td_u32 keyValue)\r
 {\r
+    if(NotificationManager::GetInstance()->GetWatchCallStatus())\r
+    {\r
+        return ;\r
+    }\r
+\r
     bt_avrcp_tg_evt_status_param event;\r
+    // printf("keyOperation = %d, keyValue = %d\n");\r
     switch (keyOperation) {\r
         case AVRCP_KEY_VOLUME_UP: // 耳机控制手表加减音量不走key_operation事件\r
         case AVRCP_KEY_VOLUME_DOWN: // 减小音量\r
@@ -152,11 +168,11 @@ uint8_t BtAvrcpTgGetLocMediaVolume(void)
     if (g_avrcp_tg_local_media_vol == AVRCP_ABSOLUTE_VOLUME_INVALID) {\r
         int32_t audio_volume = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_A2DP_MUSIC);\r
         uint8_t a2dp_volume = (uint8_t)(audio_volume * AVRCP_ABSOLUTE_VOLUME_PERCENTAGE_100 / BT_A2DP_MEDIA_VOL_LEVEL);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "audio_volume 0x%x, a2dp_volume 0x%x\n", audio_volume, a2dp_volume);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "audio_volume 0x%x, a2dp_volume 0x%x\n", audio_volume, a2dp_volume);\r
         g_avrcp_tg_local_media_vol = a2dp_volume;\r
     }\r
 \r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "get local media volume, a2dp_volume = 0x%x", g_avrcp_tg_local_media_vol);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get local media volume, a2dp_volume = 0x%x", g_avrcp_tg_local_media_vol);\r
     return g_avrcp_tg_local_media_vol;\r
 }\r
 \r
@@ -206,7 +222,7 @@ void MediaStatusCallback(bt_avrcp_tg_evt_status_param *eventStatusParam)
 \r
 void ConnCtStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_state_t state)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "avrcp ct update conn stat:%u", state);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "avrcp ct update conn stat:%u", state);\r
     if (bdAddr == nullptr) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bdaddr nullptr");\r
         return;\r
@@ -218,14 +234,16 @@ void ConnCtStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_state_t
     g_avrcp_srv_inf.avrcp_srv_conn_stat = state;\r
 }\r
 \r
-static bd_addr_t *BtAvrcpSrvGetActiveAddr(void)\r
+bd_addr_t *BtAvrcpSrvGetActiveAddr(void)\r
 {\r
     return &g_avrcp_srv_inf.bd_addr;\r
 }\r
 \r
+\r
+\r
 void ConnectTgStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_state_t state)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "avrcp tg update conn stat:%u", state);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "avrcp tg update conn stat:%u", state);\r
     if (bdAddr == nullptr) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bdaddr nullptr");\r
         return;\r
@@ -243,6 +261,43 @@ void ConnectTgStateChangedCallback(const bd_addr_t *bdAddr, profile_connect_stat
     }\r
 }\r
 \r
+/* -------------------------------------------------------------------------- */\r
+void user_avrcp_ct_press_button(const bd_addr_t *bd_addr, int32_t key_operation)\r
+{\r
+    (void)avrcp_ct_press_button(bd_addr, key_operation);\r
+    uint8_t sleep_cnt = 0;\r
+    while (1) { //持续等待接收一个响应消息来确认按键按下操作已被正确处理\r
+        osal_msleep(100);  /* sleep 1000 ms */\r
+        if (g_avrcp_srv_inf.avrcp_button_flag == AVRCP_SRV_PRESS_VALUE) {\r
+            (void)avrcp_ct_release_button(bd_addr, key_operation);\r
+            break;\r
+        }\r
+        sleep_cnt++;\r
+        if (sleep_cnt > 20) { /* sleep 20 times */\r
+            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"not receive rsp press button msg\n");\r
+            break;\r
+        }\r
+    }\r
+}\r
+\r
+void user_avrcp_ct_get_element_attributes(const bd_addr_t *bd_addr)\r
+{\r
+    avrcp_ct_get_element_attr_para_t element_attr_param;\r
+    element_attr_param.attr_num = AVRCP_CT_ELEMENT_ATTR_TRACK_PLAYING_TIME;\r
+    element_attr_param.attr_id_list = (unsigned int *)(void *)malloc(sizeof(unsigned int) * element_attr_param.attr_num);\r
+    for (int i = 0; i < element_attr_param.attr_num; i++) \r
+    {\r
+        element_attr_param.attr_id_list[i] = (unsigned int)i + 1;\r
+    }\r
+    avrcp_ct_get_element_attributes(bd_addr, &element_attr_param);\r
+    if (element_attr_param.attr_id_list != NULL) \r
+    {\r
+        free(element_attr_param.attr_id_list);\r
+        element_attr_param.attr_id_list = NULL;\r
+    }\r
+}\r
+/* -------------------------------------------------------------------------- */\r
+//记录按下按钮的回调事件以及按键操作值\r
 static void BtAvrcpCtPressButtonRspCallback(const bd_addr_t *bd_addr, int32_t key_operation)\r
 {\r
     if (bd_addr == nullptr) {\r
@@ -294,10 +349,11 @@ static void BtAvrcpPressReleaseButtonLog(uint32_t key_operation)
     }\r
 }\r
 \r
+//记录释放按钮的回调事件以及按键操作值\r
 static void BtAvrcpCtReleaseButtonRspCallback(const bd_addr_t *bd_addr, int32_t key_operation)\r
 {\r
     UNUSED(bd_addr);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "avrcp ct release button cbk key:%d\n", key_operation);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "avrcp ct release button cbk key:%x\n", key_operation);\r
     if (g_avrcp_srv_inf.avrcp_button_flag == AVRCP_SRV_PRESS_VALUE) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "avrcp ct released button button_flag change:%u->%u\n",\r
             g_avrcp_srv_inf.avrcp_button_flag, AVRCP_SRV_RELEASED_VALUE);\r
@@ -328,14 +384,14 @@ static void BtAvrcpCtSupportEventCallback(const bd_addr_t *bd_addr, avrcp_ct_sup
     for (uint8_t i = 0; i < event->event_num; i++) {\r
         if (event->event_id[i] == AVRCP_NOTIFY_EVENT_VOLUME_CHANGED) {\r
             int ret = avrcp_ct_register_notification(bd_addr, event->event_id[i], 0);\r
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "register event_id: 0x%x, ret = 0x%x", event->event_id[i], ret);\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "register event_id: 0x%x, ret = 0x%x", event->event_id[i], ret);\r
         }\r
     }\r
 \r
     for (uint8_t i = 0; i < event->event_num; i++) {\r
         if (event->event_id[i] != AVRCP_NOTIFY_EVENT_VOLUME_CHANGED) {\r
             int ret = avrcp_ct_register_notification(bd_addr, event->event_id[i], 0);\r
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "register event_id: 0x%x, ret = 0x%x", event->event_id[i], ret);\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "register event_id: 0x%x, ret = 0x%x", event->event_id[i], ret);\r
         }\r
     }\r
 }\r
@@ -400,16 +456,29 @@ static void BtAvrcpCtGetPlayStatusCallback(const bd_addr_t *bd_addr, avrcp_ct_pl
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "null pointer\n");\r
         return;\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "test get play status songlen:%u, songpos:%u, playstatus:%u:",\r
-        status->song_length, status->song_position, status->play_status);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtGetPlayStatusCallback] songlen:%u, songpos:%u, playstatus:%u:",\r
+    status->song_length, status->song_position, status->play_status);\r
 }\r
 \r
 static void BtAvrcpCtHdlNotifyVolumeRspCbk(avrcp_ct_notification_value_cb_t *notification)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Set local volume: 0x%x\n", notification->volume); /* 注册事件后通知的音量 */\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyVolumeRspCbk] volume: 0x%x\n", \r
+    notification->volume); /* 注册事件后通知的音量 */\r
     BtAvrcpTgNotifyVolumeChangedProc((uint8_t)notification->volume);\r
 }\r
 \r
+static void BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(avrcp_ct_notification_value_cb_t *notification)\r
+{\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk] playback status changed :%u\n",\r
+    notification->play_status);\r
+    if(notification->play_status == AVRCP_PLAY_STATUS_PLAYING) { //AVRCP媒体playing状态\r
+        PlayersModel::GetInstance()->set_player_state(true); //更新UI显示\r
+    } else {\r
+        PlayersModel::GetInstance()->set_player_state(false);\r
+    }\r
+    return;\r
+}\r
+//收到来自TG返回的Notification时回调函数\r
 static void BtAvrcpCtNotificationCallback(\r
     const bd_addr_t *bd_addr, avrcp_notify_event_t event_id, avrcp_ct_notification_value_cb_t *notification)\r
 {\r
@@ -421,29 +490,37 @@ static void BtAvrcpCtNotificationCallback(
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ct notification cbk event_id:0x%x\n", event_id);\r
     bool notify_flag = true;\r
     switch (event_id) {\r
-        case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED:\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "tg notify ct playback status changed :%u\n",\r
-                notification->play_status);\r
+        case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED:                //播放状态变更事件,从播放变为暂停、停止等状态,会触发这个事件\r
+            // BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(notification);\r
             break;\r
-        case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED:\r
-            BtAvrcpCtHdlNotifyVolumeRspCbk(notification);\r
+        case AVRCP_NOTIFY_EVENT_TRACK_CHANGED:                          //track状态变更事件,切换到下一首、上一首歌曲等情况,会触发此事件\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id);\r
             break;\r
-        case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED:\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play conent changed event_id:0x%x\n", event_id);\r
+        case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END:                      //track结束事件,当前播放的曲目播放到末尾时,触发这个事件\r
             break;\r
-        case AVRCP_NOTIFY_EVENT_TRACK_CHANGED:\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id);\r
+        case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START:                    //track开始事件,当曲目开始播放时,触发这个事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED:                   //播放位置改变事件,当播放进度的位置发生变化时,比如快进、快退等操作导致播放位置改变,会触发此事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED:                    //电池状态变更事件,当蓝牙设备的电池状态发生变化时,电量降低、充电状态改变等,会触发这个事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED:                 //系统状态变更事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED:   //播放器配置变更事件,如音效设置、播放模式设置等,会触发此事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED:         //播放内容变更事件,当 “正在播放” 列表中的内容发生变化时,比如添加了新的曲目、删除了曲目等情况,会触发这个事件。\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED:           //可使用的播放器变更事件,当系统中可用于播放的播放器设备发生变化时,比如新的播放器设备连接到系统或者已有播放器设备断开连接,会触发此事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED:            //播放地址变更事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_UIDS_CHANGED:                         //UID 变更事件\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED:                      //TG 端音量变更事件\r
+            BtAvrcpCtHdlNotifyVolumeRspCbk(notification);\r
+            break;\r
+        case AVRCP_NOTIFY_EVENT_RESERVED:                           //保留\r
             break;\r
-        case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END:\r
-        case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START:\r
-        case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_UIDS_CHANGED:\r
-        case AVRCP_NOTIFY_EVENT_RESERVED:\r
         default:\r
             notify_flag = false;\r
             WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "invalid event id event_id:0x%x\n", event_id);\r
index 676c018..a7a350c 100644 (file)
@@ -8,16 +8,29 @@
 #include "BluetoothItemView.h"\r
 #include "wearable_log.h"\r
 #include "UiConfig.h"\r
-#include "common/image_cache_manager.h"\r
+#include "player/include/PlayersView.h"\r
+#include "ui_resource_image.h"\r
+#include "ui_resource_string.h"\r
+#include "CallerLogModel.h"\r
+#include "custom_utils.h"\r
+#include "notification_manager.h"\r
 \r
-namespace OHOS {\r
-constexpr uint16_t BUTTON_WIDTH = 351;\r
-constexpr uint16_t BUTTON_HEIGHT = 81;\r
-constexpr uint16_t IMAGE_WIDTH = 81;\r
-constexpr uint16_t IMAGE_HEIGHT = 81;\r
-constexpr uint16_t LABEL_HEIGHT = 81;\r
-constexpr uint16_t LABEL_WIDTH = 189;\r
-constexpr uint16_t BLELIST_BUTTON_HEIGHT = 81;\r
+#ifdef SUPPORT_PHONE_SERVICE\r
+#include "PhoneAGService.h"\r
+#endif\r
+\r
+#include "ConfigModel.h"\r
+#include "languagecode/LanguageInit.h"\r
+\r
+namespace OHOS\r
+{\r
+    constexpr uint16_t BUTTON_WIDTH = 351;\r
+    constexpr uint16_t BUTTON_HEIGHT = 81;\r
+    constexpr uint16_t IMAGE_WIDTH = 81;\r
+    constexpr uint16_t IMAGE_HEIGHT = 81;\r
+    constexpr uint16_t LABEL_HEIGHT = 81;\r
+    constexpr uint16_t LABEL_WIDTH = 189;\r
+    constexpr uint16_t BLELIST_BUTTON_HEIGHT = 81;\r
 \r
 #define BLUETOOTH_CONNECT_DELAY 200\r
 #define BLUETOOTH_CONNECT_X 294\r
@@ -25,140 +38,267 @@ constexpr uint16_t BLELIST_BUTTON_HEIGHT = 81;
 #define BLUETOOTH_CONNECT_WIDTH 81\r
 #define BLUETOOTH_CONNECT_HEIGHT 81\r
 \r
-BluetoothItemView::BluetoothItemView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::BluetoothItemView");\r
-    SetPosition(53, 106, 375, 81); // 53:x 106:y 375:width 81:height\r
-    SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
-    SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
-    SetUpChild();\r
-    SetTouchable(true);\r
-\r
-    Add(&button);\r
-    Add(&connectStateLabel);\r
-    Add(&namelabel);\r
-    Add(&image);\r
-    Add(&connectionAnimator);\r
-}\r
+    BluetoothItemView::BluetoothItemView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::BluetoothItemView");\r
+        SetPosition(40, 21, 380, 100);\r
+        SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        SetUpChild();\r
+        SetTouchable(true);\r
 \r
-BluetoothItemView::~BluetoothItemView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::~BluetoothItemView");\r
-    Remove(&connectStateLabel);\r
-    Remove(&button);\r
-    Remove(&namelabel);\r
-    Remove(&image);\r
-    Remove(&connectionAnimator);\r
-}\r
+        Add(&button);\r
+        Add(&namelabel);\r
+        Add(&connectStateLabel);\r
+        Add(&lineImage);\r
+        Add(&noteImage);\r
+        Add(&connectionAnimator);\r
+    }\r
 \r
-void BluetoothItemView::SetUpChild()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetUpChild");\r
-    button.Resize(BUTTON_WIDTH, BUTTON_HEIGHT); // 351:Width\r
-    button.SetImageSrc(PNG_BT_LIST, PNG_BT_LIST); // 跳转图片\r
-    button.SetImagePosition(24, 0); // 24: lable x-coordinate\r
-\r
-    namelabel.SetPosition(105, 0); // 105:x 0:y\r
-    namelabel.Resize(LABEL_WIDTH, LABEL_HEIGHT);\r
-    namelabel.SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
-    namelabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30: means font size\r
-    namelabel.SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-    namelabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-        UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-\r
-    image.SetPosition(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); // 0:x 0:y\r
-    image.SetSrc(PNG_BLUETOOTHEAR);\r
-    BtConnectImageAnimator();\r
-}\r
+    BluetoothItemView::~BluetoothItemView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::~BluetoothItemView");\r
+        Remove(&button);\r
+        Remove(&namelabel);\r
+        Remove(&connectStateLabel);\r
+        Remove(&lineImage);\r
+        Remove(&noteImage);\r
+        Remove(&connectionAnimator);\r
+    }\r
 \r
-void BluetoothItemView::SetItemInfo(const BluetoothCaseInfo& itemInfo, bool isCaseList)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetItemInfo");\r
-    itemInfo_ = itemInfo;\r
-    namelabel.SetText(reinterpret_cast<const char *>(itemInfo_.deviceName));\r
-    if (isCaseList) {\r
-        bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
-        if ((!IsConnectAnimator()) && (ret)) {\r
-            namelabel.SetStyle(STYLE_TEXT_COLOR, Color::Gray().full);\r
-            button.SetTouchable(false);\r
-            SetTouchable(false);\r
-        } else {\r
-            namelabel.SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
-            button.SetTouchable(true);\r
-            SetTouchable(true);\r
+    void BluetoothItemView::SetUpChild()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetUpChild");\r
+        button.SetPosition(40, 0, 250, 80);\r
+        button.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        button.SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        button.SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+\r
+        /*蓝牙设备名称*/\r
+        namelabel.SetPosition(40, 21, 250, 35);\r
+        namelabel.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        namelabel.SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        namelabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);\r
+        namelabel.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        namelabel.SetRollSpeed(100);\r
+        namelabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+\r
+        /*线*/\r
+        lineImage.SetPosition(35, 98, 310, 2);\r
+        lineImage.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        lineImage.SetStyle(STYLE_BACKGROUND_OPA, 0x33);\r
+        lineImage.SetStyle(STYLE_BORDER_RADIUS, 100);\r
+\r
+        BtConnectImageAnimator();\r
+    }\r
+\r
+    void BluetoothItemView::SetItemInfo(const BluetoothCaseInfo &itemInfo, bool isCaseList)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetItemInfo");\r
+        itemInfo_ = itemInfo;\r
+        namelabel.SetText(reinterpret_cast<const char *>(itemInfo_.deviceName));\r
+        if (isCaseList)\r
+        {\r
+            bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
+            if ((!IsConnectAnimator()) && (ret))\r
+            {\r
+                button.SetTouchable(false);\r
+                SetTouchable(false);\r
+            }\r
+            else\r
+            {\r
+                button.SetTouchable(true);\r
+                SetTouchable(true);\r
+            }\r
+        }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "index =  %d", GetViewIndex());\r
+        if(!isCaseList)\r
+        {\r
+            //已连接的耳机界面\r
+            List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+            if (GetViewIndex() == btConnedDevicesList_.Size() - 1)\r
+            {\r
+                lineImage.SetVisible(false);\r
+            }\r
+            else\r
+            {\r
+                lineImage.SetVisible(true);\r
+            }\r
+        }\r
+        else\r
+        {\r
+            //搜索出耳机的界面\r
+            std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
+            if (GetViewIndex() == btScansDevicesList_.size() - 1)\r
+            {\r
+                lineImage.SetVisible(false);\r
+            }\r
+            else\r
+            {\r
+                lineImage.SetVisible(true);\r
+            }\r
         }\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "index =  %d", GetViewIndex());\r
-}\r
 \r
-BluetoothCaseInfo *BluetoothItemView::GetItemInfo(void)\r
-{\r
-    return &itemInfo_;\r
-}\r
+    BluetoothCaseInfo *BluetoothItemView::GetItemInfo(void)\r
+    {\r
+        return &itemInfo_;\r
+    }\r
 \r
-void BluetoothItemView::SetConnectionstatus(const BluetoothCaseInfo& infoData)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetConnectionstatus");\r
-    connectStateLabel.SetPosition(105, 0); // 105:x 0:y\r
-    connectStateLabel.Resize(LABEL_WIDTH, LABEL_HEIGHT);\r
-    connectStateLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30: means font size\r
-    connectStateLabel.SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-    connectStateLabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                               UITextLanguageAlignment::TEXT_ALIGNMENT_BOTTOM);\r
-    bool aclConnected = bt_is_acl_connected((const bd_addr_t*)&infoData.addr);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetConnectionstatus aclConnected %d", aclConnected);\r
-    if (aclConnected) {\r
-        connectStateLabel.SetText("已连接");\r
-    } else {\r
-        connectStateLabel.SetText("已断开");\r
+    /*连接状态设置*/\r
+    void BluetoothItemView::SetConnectionstatus(const BluetoothCaseInfo &infoData)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetConnectionstatus");\r
+        connectStateLabel.SetPosition(40, namelabel.GetY() + namelabel.GetHeight(), 250, 27);\r
+        connectStateLabel.SetStyle(STYLE_TEXT_FONT, 23);\r
+        connectStateLabel.SetStyle(STYLE_LINE_HEIGHT, 27);\r
+        connectStateLabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_BOTTOM);\r
+        connectStateLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 23);\r
+        /* -------------------------------- noteImage ------------------------------- */\r
+        noteImage.SetPosition(namelabel.GetX() + namelabel.GetWidth(), 0, 80, 80);\r
+        noteImage.SetAutoEnable(false);\r
+        noteImage.SetResizeMode(UIImageView::CENTER);\r
+        noteImage.SetTouchable(true);\r
+        if (!PlayersView::LoadPlayerImage(&noteImage, PLAYER_LOOK_CONNECTED_NOTE))\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "noteImage LoadPlayerImage fail");\r
+            return;\r
+        }\r
+        /* ------------------------------ 检查ACL链路是否连接。 ------------------------------ */\r
+\r
+        {\r
+            #ifdef SUPPORT_BT_SERVICE\r
+            bool aclConnected = bt_is_acl_connected((const bd_addr_t *)&infoData.addr);\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetConnectionstatus aclConnected %d", aclConnected);\r
+            #else\r
+            bool aclConnected = false;\r
+            #endif\r
+\r
+            if (aclConnected)\r
+            {\r
+                connectStateLabel.SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+                connectStateLabel.SetTextId(STR_CONNECTED); // 已连接\r
+                  if(OHOS::CallerLogModel::GetInstance()->GetCallSource() == OHOS::CallerLogModel::CallSourceCat1\r
+                && OHOS::NotificationManager::GetInstance()->GetWatchCallStatus())\r
+                {\r
+                    #ifdef SUPPORT_BT_SERVICE\r
+                    bool SCOConnected = headset_SCO_Is_connect_extend( (bd_addr_t *)&infoData.addr);\r
+                    #else\r
+                    bool SCOConnected = false;\r
+                    #endif\r
+\r
+                    if(SCOConnected)\r
+                    {\r
+                        connectStateLabel.SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+                        if(ConfigModel::GetInstance()->GetLanguage() == ZH_CN)\r
+                        {\r
+                            connectStateLabel.SetText("蓝牙耳机通话已连接");\r
+                        }\r
+                        else\r
+                        {\r
+                            connectStateLabel.SetText("Bluetooth headset call connected");\r
+                        }\r
+                              \r
+                    }\r
+                    else\r
+                    {\r
+                        connectStateLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+                        if(ConfigModel::GetInstance()->GetLanguage() == ZH_CN)\r
+                        {\r
+                            connectStateLabel.SetText("蓝牙耳机通话未连接");\r
+                        }\r
+                        else\r
+                        {\r
+                            connectStateLabel.SetText("Bluetooth headset call is not connected");\r
+                        }\r
+                        \r
+                    }\r
+                   \r
+                }\r
+            }\r
+            else\r
+            {\r
+                connectStateLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+                connectStateLabel.SetTextId(STR_DISCONNECTED); // 未连接\r
+            }\r
+            \r
+        }\r
+       \r
+      \r
+\r
+\r
+        connectStateLabel.ForceResetText();\r
+        connectStateLabel.Invalidate();\r
     }\r
-    namelabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                       UITextLanguageAlignment::TEXT_ALIGNMENT_TOP);\r
-    namelabel.Invalidate();\r
-}\r
 \r
-void BluetoothItemView::ConnectAnimatorStart(void)\r
-{\r
-    connectionAnimator.SetVisible(true);\r
-    connectionAnimator.Start();\r
-}\r
+    void BluetoothItemView::SetPairingtatus()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothItemView::SetPairingtatus");\r
+        connectStateLabel.SetPosition(40, namelabel.GetY() + namelabel.GetHeight(), 250, 27);\r
+        connectStateLabel.SetStyle(STYLE_TEXT_FONT, 23);\r
+        connectStateLabel.SetStyle(STYLE_LINE_HEIGHT, 27);\r
+        connectStateLabel.SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_BOTTOM);\r
+        connectStateLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 23);\r
+        connectStateLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+        connectStateLabel.SetTextId(STR_NOT_PAIRED); // 未配对\r
+    }\r
 \r
-void BluetoothItemView::ConnectAnimatorStop(void)\r
-{\r
-    connectionAnimator.SetVisible(false);\r
-    connectionAnimator.Stop();\r
-}\r
+    void BluetoothItemView::SetViewOnClickListener(UIView::OnClickListener *listener)\r
+    {\r
+        if (listener)\r
+        {\r
+            button.SetOnClickListener(listener);\r
+            noteImage.SetOnClickListener(listener);\r
+        }\r
+    }\r
 \r
-bool BluetoothItemView::IsConnectAnimator(void)\r
-{\r
-    return connectionAnimator.IsVisible();\r
-}\r
+    /*动画开始*/\r
+    void BluetoothItemView::ConnectAnimatorStart(void)\r
+    {\r
+        connectionAnimator.SetVisible(true);\r
+        connectionAnimator.Start();\r
+    }\r
 \r
-void BluetoothItemView::BtConnectImageAnimator()\r
-{\r
-    const char *connectImagePath[BLUETOOTH_CONNECT_IMAGE_NUM] = {\r
-        PNG_A019_088_IMAGE_PATH,\r
-        PNG_A019_089_IMAGE_PATH,\r
-        PNG_A019_090_IMAGE_PATH,\r
-        PNG_A019_091_IMAGE_PATH,\r
-        PNG_A019_092_IMAGE_PATH,\r
-        PNG_A019_093_IMAGE_PATH,\r
-        PNG_A019_094_IMAGE_PATH,\r
-        PNG_A019_095_IMAGE_PATH,\r
-    };\r
-\r
-    for (uint8_t i = 0; i < BLUETOOTH_CONNECT_IMAGE_NUM; i++) {\r
-        connectImageInfo[i].imageInfo =  ImageCacheManager::GetInstance().LoadSingleRes(connectImagePath[i]);\r
-        connectImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;\r
-        connectImageInfo[i].pos.x = BLUETOOTH_CONNECT_X;\r
-        connectImageInfo[i].pos.y = BLUETOOTH_CONNECT_Y;\r
-        connectImageInfo[i].width = BLUETOOTH_CONNECT_WIDTH;\r
-        connectImageInfo[i].height = BLUETOOTH_CONNECT_HEIGHT;\r
+    /*动画停止*/\r
+    void BluetoothItemView::ConnectAnimatorStop(void)\r
+    {\r
+        connectionAnimator.SetVisible(false);\r
+        connectionAnimator.Stop();\r
     }\r
 \r
-    connectionAnimator.SetImageAnimatorSrc(connectImageInfo, BLUETOOTH_CONNECT_IMAGE_NUM, BLUETOOTH_CONNECT_DELAY);\r
-    connectionAnimator.SetRepeat(true);\r
-    connectionAnimator.SetVisible(false);\r
-}\r
+    /*连接动画是否可见*/\r
+    bool BluetoothItemView::IsConnectAnimator(void)\r
+    {\r
+        return connectionAnimator.IsVisible();\r
+    }\r
+\r
+    /*蓝牙连接动画*/\r
+    void BluetoothItemView::BtConnectImageAnimator()\r
+    {\r
+        const char *connectImagePath[BLUETOOTH_CONNECT_IMAGE_NUM] = {\r
+            PNG_A019_088_IMAGE_PATH,\r
+            PNG_A019_089_IMAGE_PATH,\r
+            PNG_A019_090_IMAGE_PATH,\r
+            PNG_A019_091_IMAGE_PATH,\r
+            PNG_A019_092_IMAGE_PATH,\r
+            PNG_A019_093_IMAGE_PATH,\r
+            PNG_A019_094_IMAGE_PATH,\r
+            PNG_A019_095_IMAGE_PATH,\r
+        };\r
+\r
+        for (uint8_t i = 0; i < BLUETOOTH_CONNECT_IMAGE_NUM; i++)\r
+        {\r
+            connectImageInfo[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(connectImagePath[i]);\r
+            connectImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;\r
+            connectImageInfo[i].pos.x = BLUETOOTH_CONNECT_X;\r
+            connectImageInfo[i].pos.y = BLUETOOTH_CONNECT_Y;\r
+            connectImageInfo[i].width = BLUETOOTH_CONNECT_WIDTH;\r
+            connectImageInfo[i].height = BLUETOOTH_CONNECT_HEIGHT;\r
+        }\r
+\r
+        connectionAnimator.SetImageAnimatorSrc(connectImageInfo, BLUETOOTH_CONNECT_IMAGE_NUM, BLUETOOTH_CONNECT_DELAY);\r
+        connectionAnimator.SetRepeat(true);\r
+        connectionAnimator.SetVisible(false);\r
+    }\r
 \r
 }\r
index 699e0b1..55b24f9 100644 (file)
@@ -6,10 +6,12 @@
  */\r
 #include <cstdint>\r
 #include "BluetoothModel.h"\r
+#include "BluetoothModelC.h"\r
+\r
 #include "BluetoothWrapper.h"\r
 #include "BluetoothPresenter.h"\r
 #include "ConnectPhonePresenter.h"\r
-#include "BluetoothView.h"\r
+#include "MusicPlayerSourceView.h"\r
 #include "BluetoothItemView.h"\r
 #include "PlayersModel.h"\r
 #include "PhoneAudio.h"\r
@@ -22,6 +24,9 @@
 #include "bts_le_gap.h"\r
 #include "bts_spp.h"\r
 #include "osal_task.h"\r
+#include "bts_pbap.h"\r
+#include "ConfigModelC.h"\r
+#include "custom_utils.h"\r
 #ifdef SUPPORT_ALIPAY_SEC\r
 #include "alipay_feature.h"\r
 #endif\r
 #include "audio_manager_c_wrapper.h"\r
 #include "bts_avrcp_target.h"\r
 #include "msg_center_msg.h"\r
-#include "client/msg_center_client.h"\r
-#include "msg_center_protocol.h"\r
 #include "dfx_channel.h"\r
 #include "tcxo.h"\r
-#include "ui_service.h"\r
+#include "custom_runtime.h"\r
+\r
+#ifdef SUPPORT_BLE_SERVICE\r
+#include <bleEvent.h>\r
+#include "bleService.h"\r
+#include "bletest.h"\r
+#endif\r
+\r
+//#include "hfp_hf_service.h"\r
+#include "uiservice/include/ui_service.h"\r
+#include "PhoneService.h"\r
+#ifdef SUPPORT_AT_OHOSFWK\r
+#include "BluetoothWrapper.h"\r
+#endif\r
+#include "Bluetooyhpabpserver.h"\r
+\r
+\r
+\r
+#include "ConfigModelC.h"\r
+#include "uiservice/include/ui_service.h"\r
+#include "vibrator_service.h"\r
+#include "ConfigModel.h"\r
+\r
+#ifdef SUPPORT_PHONE_SERVICE\r
+#include "PhoneAGService.h"\r
+#endif\r
+\r
+#include "custom_save_runtime.h"\r
+#include "BluetoothHeadsetEvent.h"\r
 \r
 namespace OHOS {\r
 \r
@@ -43,7 +74,7 @@ namespace OHOS {
 #define BT_SPP_TASK_PRI        20\r
 #define TEN                    10\r
 \r
-constexpr uint16_t BLUETOOTH_MAX_NUM = 20;\r
+constexpr uint16_t BLUETOOTH_MAX_NUM = 20; /*已连接设备列表的大小*/\r
 \r
 #define MEDIA_A2DP_SNK_INTERFACE 1\r
 osal_timer g_a2dp_stream_accept_timer = {nullptr, nullptr, 0, 0};\r
@@ -52,7 +83,6 @@ AudioFormatConfig g_audio_format_config = {AUDIO_DEFAULT, 0, 0};
 static uint16_t g_sample_svr_handle = 0;\r
 static uint16_t g_sample_characteristic_handle = 0;\r
 static uint16_t g_diag_characteristic_handle = 0;\r
-static uint16_t g_diag_desc_handle = 0;\r
 constexpr uint16_t g_sample_adv_id = 2;\r
 static bd_addr_t g_bd_addr = { 0 };\r
 \r
@@ -82,76 +112,223 @@ char* BluetoothModel::getWatchName(void)
     return watchName;\r
 }\r
 \r
-void BluetoothModel::InitBluetoothInfo(void)\r
+void InitBluetoothInfo(void)\r
 {\r
-    errcode_t ret;\r
+    #ifdef SUPPORT_BLE_SERVICE\r
     unsigned char nameLen = BD_NAME_LEN;\r
+    uint8_t ble_name[BD_NAME_LEN] = {0};\r
+    uint8_t ble_name_len = BD_NAME_LEN;\r
+    errcode_t ret = 0;\r
+\r
+    ret = bluetooth_get_local_name(ble_name, &ble_name_len);\r
+    if (ret != 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
+        memset_s(ble_name, BD_NAME_LEN, 0, BD_NAME_LEN);\r
+        ble_name_len = strlen(BLE_DEFAULT_NAME) + 1;        \r
+        memcpy_s(ble_name, BD_NAME_LEN,BLE_DEFAULT_NAME,ble_name_len);\r
+    }\r
+    unsigned char addr[6] = {0};\r
+    unsigned int len = sizeof(addr);\r
+    memset(addr,0,6);    \r
+    bluetooth_get_local_addr(&addr[0],len);\r
+    //如果蓝牙名称不正确,按照规则重命名 \r
+    char watchName[BD_NAME_LEN]= {0};\r
     memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
-    ret = bluetooth_get_local_name((unsigned char *)watchName, &nameLen);\r
-    // 为了实验室测试需要,客户需要自己修改\r
-    if ((nameLen == strlen("WatchDemo") + 1) && (strcmp("WatchDemo", watchName) == 0)) {\r
-        uint32_t currentUs = uapi_tcxo_get_us();\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "currentUs 0x%x", currentUs);\r
-        // 设置蓝牙名称\r
-        (void)sprintf_s(watchName, sizeof(watchName), "Watch%x", (currentUs & 0xFFFF));\r
-        ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_set_local_name %s ret = %u", watchName, ret);\r
-\r
-        //  设置蓝牙地址\r
-        bd_addr_t addr = {{0x1C, 0x1D, 0x2B, 0x0, 0x0, 0x0} ,0};\r
-        addr.addr[3] = currentUs & 0xFF;\r
-        addr.addr[4] = (currentUs & 0XFF00) >> 8;\r
-        addr.addr[5] = currentUs & 0xFF;\r
-        ret = bluetooth_set_local_addr(addr.addr, BD_ADDR_LEN);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_set_local_addr [0x%x:0x%x] ret = %u", addr.addr[0], addr.addr[1], ret);\r
-    } else {\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "watchName: %s", watchName);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "nameLen: %u", nameLen);\r
-    }\r
+    (void)sprintf_s(watchName, sizeof(watchName), "%s %02X%02X",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
+    int watch_name_len = strlen(watchName);\r
+    /**表名长度不对,或者内容不对,都要重命名*/\r
+    if (watch_name_len != strlen((char*)ble_name) || strncmp((char*)ble_name,watchName,watch_name_len) != 0 )\r
+    {\r
+        ret = bluetooth_set_local_name((unsigned char*)watchName, watch_name_len+1);\r
+        if (ret == ERRCODE_SUCC) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName %s ", watchName);\r
+        }else{\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName %s ret = 0x%x", watchName,ret);\r
+        }\r
+    }    \r
+    #endif\r
+\r
 }\r
+//1关 0开\r
+void bluetooth_set_auto_reconnect_closed(uint8_t flag)\r
+{\r
+    #ifdef SUPPORT_BLE_SERVICE\r
 \r
-void BluetoothModel::Init()\r
+    bts_feature_t bts_feature = { 0 };\r
+    bts_feature.bt_auto_reconnect_closed = flag;\r
+    errcode_t ret = bts_set_features(&bts_feature);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = 0x%X", ret);\r
+\r
+    #endif\r
+\r
+}\r
+\r
+static int g_bluetooth_initialled=0;\r
+static int bluetooth_init_all(void)\r
 {\r
+\r
+    #ifdef SUPPORT_BLE_SERVICE\r
+\r
+    if (g_bluetooth_initialled == 1) return 1;\r
 #ifndef SUPPORT_AUTO_OTA\r
     errcode_t ret;\r
-\r
     // 设置自动回连,ios一键双连依赖此配置\r
-    bts_feature_t bts_feature = { 0 };\r
-    bts_feature.bt_auto_reconnect_closed = 0;\r
-    ret = bts_set_features(&bts_feature);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+   \r
+    bluetooth_set_auto_reconnect_closed(1);\r
 \r
     ret = enable_bt_stack();\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %u", ret);\r
 \r
     // 设置安全连接\r
+    // gap_ble_sec_params_t sec_params = {0};\r
+    // sec_params.bondable = 0x01;\r
+    // sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力\r
+    // sec_params.sc_enable = 0x00;\r
+    // sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
+    // ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
+\r
     gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 };\r
+   // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 0, GAP_BLE_GAP_SECURITY_MODE1_LEVEL2 };\r
     ret = gap_ble_set_sec_param(&sec_param);\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret);\r
 \r
     InitBluetoothInfo();\r
+\r
+\r
+    /********************br init************************/\r
     BtInitCallBacks();\r
+    uapi_pbap_pce_reg_callback();\r
+    BtA2dpInit();\r
+    PhoneServiceInit();\r
+    InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化\r
+\r
+    if(uapi_dev_runtime_get_safemode_flag())\r
+    {\r
+\r
+        gap_remove_all_pairs();\r
+\r
+        uapi_dev_runtime_atuoota_status_status(1);\r
+\r
+        BtInitSpp();\r
+    }\r
+   \r
+    /*******************ble init ****************/\r
     wrapper_ble_register();\r
 #ifdef SUPPORT_ALIPAY_SEC\r
-    svr_alipay_bluetooth_init();\r
+    wrapper_gatts_clear_service(); //Alipay BLE\r
+#endif\r
+    // svr_alipay_btcallback_reg();\r
+    /***Custom BleService */\r
+#ifdef SUPPORT_ALIPAY_SEC\r
+     //Alipay BLE\r
 #endif\r
-    BtInitCallBacksEx();\r
-    BtInitGatts();\r
-    BtInitSpp();\r
 \r
-    /* 实验室测试需要,开机开广播 */\r
-    BleAdvStart();\r
+    svr_ble_bluetooth_init(); //CUSTOM BLE\r
+    \r
+    // BtInitCallBacksEx(); //BLE\r
+    // BtInitGatts(); //BLE \r
+\r
 \r
-    SetUpListCase();\r
-    SetUpConnedDevicesList();\r
+    //start reg ble server\r
+    wrapper_gatts_service_start(); \r
+    // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0);\r
+\r
+\r
+    /**开始ble广播*/\r
+    // custom_ble_service_start();\r
+    // BleAdvStart();\r
 #endif\r
+    g_bluetooth_initialled = 1;\r
+\r
+    #endif\r
+\r
+    return 0;\r
+}\r
+\r
+    \r
+void bluetooth_enable_all(void)\r
+{\r
+    //初始化过的则直接开启扫描即可\r
+\r
+\r
+    if (bluetooth_init_all() == 1)\r
+    {\r
+\r
+        errcode_t ret;\r
+        // 设置自动回连,ios一键双连依赖此配置\r
+        // bts_feature_t bts_feature = { 0 };\r
+        // bts_feature.bt_auto_reconnect_closed = 0;\r
+        // ret = bts_set_features(&bts_feature);\r
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+        //     gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 };\r
+       //    // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 0, GAP_BLE_GAP_SECURITY_MODE1_LEVEL2 };\r
+        //     ret = gap_ble_set_sec_param(&sec_param);\r
+        //     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret);\r
+\r
+        ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0);\r
+         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_br_set_bt_scan_mode ret = %u", ret);\r
+        /**开始ble广播*/\r
+        // custom_ble_service_start();\r
+    }\r
+}\r
+\r
+void bluetooth_close_all(void)\r
+{\r
+    errcode_t ret;\r
+    \r
+    /**停止Ble广播,断开链接,清除协议缓存*/\r
+    // custom_ble_service_stop();\r
+\r
+    /** 停止BR广播 */\r
+\r
+    ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_br_set_bt_scan_mode ret = %u", ret);\r
+    \r
+    /**TODO: 停止BR扫描**/\r
+    if(is_bt_discovering(BT_TRANSPORT_INVALID) || is_bt_discovering(BT_TRANSPORT_BR_EDR) || is_bt_discovering(BT_TRANSPORT_LE))\r
+    {\r
+        gap_br_cancel_discovery();\r
+    }\r
+    /**TODO: 关闭自动重连**/\r
+\r
+    // 设置自动回连,ios一键双连依赖此配置\r
+    // bts_feature_t bts_feature = { 0 };\r
+    // bts_feature.bt_auto_reconnect_closed = 1;\r
+    // bts_feature.bt_a2dp_snk_closed = 1;\r
+    // ret = bts_set_features(&bts_feature);\r
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+    \r
+    /**TODO: 断开BR链接**/\r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+    if (bt_is_acl_connected(&bdaddr))\r
+    {\r
+       ret = gap_disconnect_remote_device(&bdaddr);\r
+       WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_disconnect_remote_device ret = %u", ret);\r
+    }  \r
+\r
+    //海思不建议使用 disable_bt_stack ,说可能影响 btcore 与 mcore通讯\r
+    // ret = disable_bt_stack();\r
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret);\r
+\r
 }\r
 \r
+void BluetoothModel::Init()\r
+{\r
+// bluetooth_init();\r
+// InitBluetoothInfo();\r
+SetUpListCase();\r
+SetUpConnedDevicesList();\r
+}\r
+\r
+//清空这个扫描列表\r
 void BluetoothModel::SetCaseListClear()\r
 {\r
     btScansDevicesList_.clear();\r
 }\r
 \r
+//检查给定的蓝牙设备信息是否已经存在于这个列表中\r
 bool BluetoothModel::CheckExistScanList(BluetoothCaseInfo caseInfo)\r
 {\r
     std::list<BluetoothCaseInfo>::iterator node = btScansDevicesList_.begin();\r
@@ -170,16 +347,19 @@ bool BluetoothModel::CheckExistScanList(BluetoothCaseInfo caseInfo)
     return false;\r
 }\r
 \r
+//清空这个扫描列表\r
 void BluetoothModel::SetUpListCase()\r
 {\r
     SetCaseListClear();\r
 }\r
 \r
+//返回这个列表的引用\r
 std::list<BluetoothCaseInfo>& BluetoothModel::GetCase()\r
 {\r
     return btScansDevicesList_;\r
 }\r
 \r
+//向这个列表中添加蓝牙设备信息\r
 void BluetoothModel::AddCase(BluetoothCaseInfo caseInfo)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AddCase::caseInfo addr: %02x%02x%02x%02x%02x%02x",\r
@@ -190,9 +370,13 @@ void BluetoothModel::AddCase(BluetoothCaseInfo caseInfo)
         return;\r
     } else {\r
         btScansDevicesList_.push_back(caseInfo);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "btScansDevicesList_ num = %d",btScansDevicesList_.size());\r
+        if(BluetoothEarListView::GetInstance()) //动态计算扫描出来的设备列表ui高度\r
+            GraphicService::GetInstance()->PostGraphicEvent( \r
+                std::bind(&BluetoothEarListView::RefreshBluetoothEarListView, BluetoothEarListView::GetInstance()));\r
     }\r
 }\r
-\r
+//设置设备的信号强度\r
 void BluetoothModel::SetScansCaseRssi(const bd_addr_t *bdAddr, int rssi)\r
 {\r
     for (auto it = btScansDevicesList_.begin(); it != btScansDevicesList_.end(); it++) {\r
@@ -214,12 +398,14 @@ bool CompBuletoothInfo(const BluetoothCaseInfo& a, const BluetoothCaseInfo& b)
     return false;\r
 }\r
 \r
+//按照信号强度进行排序\r
 void BluetoothModel::SortScansCaseRssi()\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SortScansCaseRssi");\r
     btScansDevicesList_.sort(CompBuletoothInfo);\r
 }\r
 \r
+//重置设备名称\r
 void BluetoothModel::ResetScanDevicesCase(const BluetoothCaseInfo& caseInfo)\r
 {\r
     for (auto it = btScansDevicesList_.begin(); it != btScansDevicesList_.end(); it++) {\r
@@ -233,7 +419,7 @@ void BluetoothModel::ResetScanDevicesCase(const BluetoothCaseInfo& caseInfo)
     }\r
 }\r
 \r
-/* 已配对设备队列 */\r
+/* 清空已配对设备队列 */\r
 void BluetoothModel::SetConnedDevicesListClear()\r
 {\r
     btConnedDevicesList_->Clear();\r
@@ -247,32 +433,35 @@ void BluetoothModel::SetUpConnedDevicesList()
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothModel btConnedDevicesList_ new fail");\r
             return;\r
         }\r
-        SetConnedDevicesListClear();\r
-        unsigned int connedDevicesNum = 0;\r
-        bool ret = gap_get_paired_devices_num(&connedDevicesNum);\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Setup GetPariedDevicesNum ret = %d, num = %d", ret, connedDevicesNum);\r
-\r
-        gap_paired_device_info_t *devInfo = (gap_paired_device_info_t*)malloc(sizeof(gap_paired_device_info_t) *connedDevicesNum);\r
-        if (devInfo ==  nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DevInfo malloc failed %u", sizeof(gap_paired_device_info_t) *connedDevicesNum);\r
-            return;\r
-        }\r
-        ret =  gap_get_paired_devices_list(devInfo, (int *)&connedDevicesNum);\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUpConnedDevicesList gap_get_paired_devices_list ret = %d", ret);\r
+        \r
+    }\r
+    SetConnedDevicesListClear();\r
+    unsigned int connedDevicesNum = 0;\r
+    int btpower = uapi_dev_runtime_get_bt_powerstat();\r
 \r
-        BluetoothCaseInfo caseInfo{};\r
-        for (int i = 0; i < static_cast<int>(connedDevicesNum); ++i) {\r
-            if ((gap_get_device_class((const bd_addr_t *)devInfo[i].addr.addr) & 0x200) != 0) {\r
-                continue;\r
-            }\r
-            (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN,\r
-                           devInfo[i].addr.addr, BD_ADDR_LEN);\r
-            (void)memcpy_s(caseInfo.deviceName, BD_NAME_LEN,\r
-                           devInfo[i].device_name, BD_NAME_LEN);\r
-            AddConnedDevicesCase(caseInfo);\r
+    bool ret = gap_get_paired_devices_num(&connedDevicesNum);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BT Power %s , Setup GetPariedDevicesNum ret = %d, num = %d", btpower==1?"On":"Off",ret, connedDevicesNum);\r
+\r
+    gap_paired_device_info_t *devInfo = (gap_paired_device_info_t*)malloc(sizeof(gap_paired_device_info_t) *connedDevicesNum);\r
+    if (devInfo ==  nullptr) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DevInfo malloc failed %u", sizeof(gap_paired_device_info_t) *connedDevicesNum);\r
+        return;\r
+    }\r
+    ret =  gap_get_paired_devices_list(devInfo, (int *)&connedDevicesNum);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUpConnedDevicesList gap_get_paired_devices_list ret = %d", ret);\r
+\r
+    BluetoothCaseInfo caseInfo{};\r
+    for (int i = 0; i < static_cast<int>(connedDevicesNum); ++i) {\r
+        if ((gap_get_device_class((const bd_addr_t *)devInfo[i].addr.addr) & 0x200) != 0) {\r
+            continue;\r
         }\r
-        free(devInfo);\r
+        (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN,\r
+                        devInfo[i].addr.addr, BD_ADDR_LEN);\r
+        (void)memcpy_s(caseInfo.deviceName, BD_NAME_LEN,\r
+                        devInfo[i].device_name, BD_NAME_LEN);\r
+        AddConnedDevicesCase(caseInfo);\r
     }\r
+    free(devInfo);\r
 }\r
 \r
 void BluetoothModel::AddConnedDevicesCase(BluetoothCaseInfo caseInfo)\r
@@ -292,11 +481,17 @@ void BluetoothModel::AddConnedDevicesCase(BluetoothCaseInfo caseInfo)
     }\r
 }\r
 \r
+/*返回指向已连接设备列表的引用,以便其他部分的代码可以直接访问和操作这个列表*/\r
 List<BluetoothCaseInfo>& BluetoothModel::GetConnedDevicesCase()\r
 {\r
     return *btConnedDevicesList_;\r
 }\r
 \r
+/*\r
+* @brief 用于检查特定蓝牙设备(其地址存储在 tempMacValue 中)是否处于 ACL 连接状态。\r
+*\r
+*eg:如果是在控制与手机配对的蓝牙手环,通过这个函数就能确定手环当前与手机的连接情况。\r
+*/\r
 void BluetoothModel::SetBtStatus(void)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtStatus tempMacValue: %02x%02x%02x%02x%02x%02x",\r
@@ -361,11 +556,13 @@ bool BluetoothModel::GetTagReconnectJump(void)
     return tagReconnectJump;\r
 }\r
 \r
+/*设置当前哪个子视图是可见的*/\r
 void BluetoothModel::SetCurView(int16_t viewNum)\r
 {\r
     curView = viewNum;\r
 }\r
 \r
+/*获取当前哪个子视图是可见的*/\r
 int BluetoothModel::GetCurView(void)\r
 {\r
     return curView;\r
@@ -383,6 +580,7 @@ bool BluetoothModel::IsTagConnectView(void)
     return tagConnectView;\r
 }\r
 \r
+//设置是否需要跳转连接失败界面\r
 void BluetoothModel::SetTagDisconnectView(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagDisconnectView:%d", tag);\r
@@ -395,29 +593,34 @@ bool BluetoothModel::IsTagDisconnectView(void)
     return tagDisconnectView;\r
 }\r
 \r
-void BluetoothModel::SetTagConnectNew(bool tag)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagConnectNew:%d", tag);\r
-    tagConnectNew = tag;\r
-}\r
 \r
+\r
+//设置是否返回到已连接过的设备列表视图标志\r
 void BluetoothModel::SetTagReturnToDeviceListView(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagReturnToDeviceListView:%d", tag);\r
     tagReturnToDeviceListView = tag;\r
 }\r
 \r
+//是否返回到已连接过的设备列表视图\r
 bool BluetoothModel::IsTagReturnToDeviceListView(void)\r
 {\r
     return tagReturnToDeviceListView;\r
 }\r
 \r
-// 判断断开连接时是否需要马上连接新设备\r
+// 获取断开连接时是否需要马上连接新设备\r
 bool BluetoothModel::IsTagConnectNew(void)\r
 {\r
     return tagConnectNew;\r
 }\r
 \r
+// 设置断开连接时是否需要马上连接新设备\r
+void BluetoothModel::SetTagConnectNew(bool tag)\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagConnectNew:%d", tag);\r
+    tagConnectNew = tag;\r
+}\r
+\r
 void BluetoothModel::SetTagScanDeviceClicked(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagScanDeviceClicked:%d", tag);\r
@@ -430,6 +633,7 @@ bool BluetoothModel::IsTagScanDeviceClicked(void)
     return tagScanDeviceClicked;\r
 }\r
 \r
+//检查给定的 BluetoothCaseInfo 结构体实例 caseInfo 所代表的蓝牙设备是否已经存在于已连接设备列表中\r
 bool BluetoothModel::CheckExistConnedList(BluetoothCaseInfo caseInfo)\r
 {\r
     ListNode<BluetoothCaseInfo> *node = btConnedDevicesList_ ->Begin();\r
@@ -465,7 +669,8 @@ bool BluetoothModel::FindNameByAddr(BluetoothCaseInfo &listInfo, BluetoothCaseIn
         return false;\r
     }\r
 }\r
-\r
+//在已连接设备列表 btConnedDevicesList_ 和扫描设备列表 btScansDevicesList_ \r
+//中查找与输入的 BluetoothCaseInfo 结构体实例 caseInfo 地址匹配的设备,并尝试获取该设备的名称\r
 bool BluetoothModel::FindNameFromList(BluetoothCaseInfo *caseInfo)\r
 {\r
     ListNode<BluetoothCaseInfo> *node = btConnedDevicesList_->Begin();\r
@@ -515,7 +720,6 @@ int BluetoothModel::ConnectRemoteDevice(const bd_addr_t *addr)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ConnectRemoteDevice gap_br_set_bt_scan_mode ret = 0x%x", ret);\r
     }\r
     errcode_t retVal = gap_connect_remote_device(addr);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ConnectRemoteDevice gap_connect_remote_device ret = 0x%x", retVal);\r
     (void)memcpy_s(&remoteConnectAddr, sizeof(bd_addr_t), addr, sizeof(bd_addr_t));\r
     return retVal;\r
 }\r
@@ -523,6 +727,11 @@ int BluetoothModel::ConnectRemoteDevice(const bd_addr_t *addr)
 bool BluetoothModel::ConnectRemoteCheck(const bd_addr_t *addr)\r
 {\r
     bool ret;\r
+    if ((remoteConnectAddr.addr[0] == 0) && (remoteConnectAddr.addr[1] == 0) &&\r
+        (remoteConnectAddr.addr[2] == 0) && (remoteConnectAddr.addr[3] == 0) &&\r
+        (remoteConnectAddr.addr[4] == 0) && (remoteConnectAddr.addr[5] == 0)) {\r
+        return true;\r
+    } \r
     if ((remoteConnectAddr.addr[0] == addr->addr[0]) && (remoteConnectAddr.addr[1] == addr->addr[1]) &&\r
         (remoteConnectAddr.addr[2] == addr->addr[2]) && (remoteConnectAddr.addr[3] == addr->addr[3]) &&\r
         (remoteConnectAddr.addr[4] == addr->addr[4]) && (remoteConnectAddr.addr[5] == addr->addr[5])) {\r
@@ -563,7 +772,7 @@ static void ChangeScanView()
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView nullptr");\r
         return;\r
     }\r
-    bluetoothEarPhoneView->setScanStatus(false);\r
+    bluetoothEarPhoneView->setScanStatus(false);// 停止扫描标记\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Bt scan one jumpView");\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
         JumpView *jumpView = JumpView::GetInstance();\r
@@ -587,6 +796,7 @@ static void ChangeScanView()
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtAnimatorStop");\r
 }\r
 \r
+//用于处理蓝牙设备发现的结果\r
 void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)\r
 {\r
     BluetoothCaseInfo caseInfo{};\r
@@ -597,6 +807,7 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_discovery_result_callback getNameRet(bool): %d nameLen: %d name:%s",\r
                   getNameRet, nameLen, caseInfo.deviceName);\r
 \r
+\r
     if (nameLen == 0) { // 过滤未扫描到名字的设备\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "nameLen == 0 return");\r
         return;\r
@@ -630,35 +841,79 @@ void BluetoothModel::BtGapDiscoveryResultCallbakHandle(const bd_addr_t &bdAddr)
     }\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryResultCallback end");\r
 }\r
-\r
+bd_addr_t BtGapPair_bdAddr={0};\r
 void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback addr: ****%02x%02x%02x%02x status: %d\n",\r
+   #ifdef SUPPORT_BLE_SERVICE\r
+\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback addr: ****%02x%02x%02x%02x status: %d\n",\r
         bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */\r
+\r
+    if(uapi_dev_runtime_get_atuoota_status())\r
+    {\r
+        return;\r
+    }\r
+\r
+    if ((gap_get_device_class(bdAddr) & 0x200) != 0) \r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback: Mobile Phone Device");\r
+        if(status==GAP_PAIR_PAIRED)\r
+        memcpy(&BtGapPair_bdAddr,bdAddr,sizeof(bd_addr_t));\r
+\r
+        if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
+        {\r
+            send_pair_succ((bd_addr_t*)bdAddr);\r
+\r
+            hand_watch_first_time_Paired();\r
+\r
+            set_br_pair(1);\r
+          \r
+        }\r
+        if( status == GAP_PAIR_PAIRED )\r
+        {\r
+            set_br_pair(1);\r
+        }\r
+    }\r
+\r
+   \r
+\r
     if (status == GAP_PAIR_PAIRED) {\r
+        \r
         if (ConnectPhonePresenter::GetInstance() != nullptr) {\r
             NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
         }\r
+       \r
     }\r
+\r
+    #endif\r
 }\r
 \r
 void BtGapPairRequestedCallback(const bd_addr_t *bdAddr)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairRequestedCallback addr: ****%02x%02x%02x%02x\n",\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairRequestedCallback addr: ****%02x%02x%02x%02x\n",\r
         bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* addr下标 0 1 2 3 */\r
 }\r
 \r
 void BtGapPairConfirmedCallback(const bd_addr_t *bdAddr, int req_type, int number)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairConfirmedCallback addr: ****%02x%02x%02x%02x req_type: %d number: %d\n",\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairConfirmedCallback addr: ****%02x%02x%02x%02x req_type: %d number: %d\n",\r
         bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], /* addr下标 0 1 2 3 */\r
         req_type, number);\r
 }\r
 \r
+\r
+static bool test_bt_falg=false;\r
+\r
+\r
+void BluetoothModel::set_test_bt_falg(bool falg)\r
+{\r
+    test_bt_falg=falg;\r
+}\r
+\r
 // 回调:扫描结果处理/发现结果上报\r
-void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr)\r
+void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr )\r
 {\r
-    if ((gap_get_device_class(bdAddr) & DEVICE_MAJOR_CLASS_PHONE) != 0) {\r
+    if ((gap_get_device_class(bdAddr) & DEVICE_MAJOR_CLASS_PHONE) != 0 && test_bt_falg==false) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
         return;\r
     }\r
@@ -712,6 +967,7 @@ void HandleBeforeChangeView()
     }\r
 }\r
 \r
+//处理蓝牙耳机连接成功的UI操作\r
 static void ACLConnectionSuss(const bd_addr_t &bdAddr)\r
 {\r
     // 判断是否已退出蓝牙模块(无需跳转)\r
@@ -721,7 +977,7 @@ static void ACLConnectionSuss(const bd_addr_t &bdAddr)
         return;\r
     }\r
     // 成功提示\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GAP_ACL_STATE_CONNECTED");\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙耳机连接成功");\r
     HandleBeforeChangeView();\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
         JumpView *jumpView = JumpView::GetInstance();\r
@@ -737,16 +993,24 @@ static void ACLConnectionSuss(const bd_addr_t &bdAddr)
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainBluetoothView GetInstance fail");\r
             return;\r
         }\r
-        mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), TIPSSUCCMESSAGEVIEW);\r
+        mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), TIPSSUCCMESSAGEVIEW);//跳转到连接成功视图\r
     }\r
     TipsSuccMessageView *tipsSuccMessageView = TipsSuccMessageView::GetInstance();\r
     if (tipsSuccMessageView == nullptr) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ACLConnectionSuss tipsSuccMessageView GetInstance fail");\r
         return;\r
     }\r
-    tipsSuccMessageView->RefreshNameLabel(bdAddr);\r
+    tipsSuccMessageView->RefreshNameLabel(bdAddr); //更新连接成功的提示视图的蓝牙名称\r
+    /* -------------------------------------------------------------------------- */\r
+    if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() && (!uapi_sleep_mode_flag_get()))\r
+    {\r
+        ui_api_vibrate_once_func();\r
+    }\r
+    uapi_set_screen_on_api();\r
+    /* -------------------------------------------------------------------------- */\r
 }\r
 \r
+//处理蓝牙耳机连接失败操作\r
 static void ACLConnectionFail(const bd_addr_t &bdAddr)\r
 {\r
     // 判断是否已退出蓝牙模块(无需跳转)\r
@@ -758,7 +1022,7 @@ static void ACLConnectionFail(const bd_addr_t &bdAddr)
         return;\r
     }\r
     // 失败提示页\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "conn fail");\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙耳机连接失败");\r
     HandleBeforeChangeView();\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
         JumpView *jumpView = JumpView::GetInstance();\r
@@ -781,9 +1045,17 @@ static void ACLConnectionFail(const bd_addr_t &bdAddr)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ACLConnectionFail tipsConnFailMessageView GetInstance fail");\r
         return;\r
     }\r
-    tipsConnFailMessageView->RefreshNameLabel(bdAddr);\r
+    tipsConnFailMessageView->RefreshNameLabel(bdAddr);//更新连接失败的提示视图的蓝牙名称\r
+    /* -------------------------------------------------------------------------- */\r
+    if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() && (!uapi_sleep_mode_flag_get()))\r
+    {\r
+        ui_api_vibrate_once_func();\r
+    }\r
+    uapi_set_screen_on_api();\r
+    /* -------------------------------------------------------------------------- */\r
 }\r
 \r
+//处理断开蓝牙耳机连接的UI操作\r
 static void DisconnectedHandle()\r
 {\r
     BluetoothModel::GetInstance()->SetTagDisconnectView(false);\r
@@ -797,22 +1069,18 @@ static void DisconnectedHandle()
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisconnectedHandle deviceList nullptr");\r
         return;\r
     }\r
-    deviceList->RefreshList();\r
-    BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();\r
-    if (bluetoothOptionsView == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AclStateChangedCallback bluetoothOptionsView  == nullptr");\r
-        return;\r
-    }\r
-    bluetoothOptionsView->RefreshText();\r
+    deviceList->RefreshList();//刷新列表\r
 }\r
 \r
 void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned int reason, const bd_addr_t &bdAddr)\r
 {\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"ACL回调,%d",state);\r
     bool tag = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
     if ((reason == 0x13) || (reason == 0x14) || (reason == 0x15) || (reason == 0x3D) || (reason == 0x08 && (!tag))) { // 连接断开\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "The peer end is disconnected.");\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙设备主动断开与手表连接 reason is %x", reason);\r
         DisconnectedHandle();\r
     } else if (reason == 0x16) { // 主动断开连接\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "手表主动断开与蓝牙设备连接,reason is%x", reason);\r
         DisconnectedHandle();\r
         BluetoothCaseInfo *onClickBtCaseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
         if (BluetoothModel::GetInstance()->IsTagConnectNew()) {\r
@@ -824,13 +1092,14 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned
         SetTagDisconnectView(false);\r
     }\r
 \r
+    BluetoothCaseInfo *onClickBtCaseInfo = GetTempMacValue();\r
+\r
     if ((state == GAP_ACL_STATE_CONNECTED) || (state == GAP_ACL_STATE_LE_CONNECTED)) {\r
         SetLastConnedAddr(&bdAddr);\r
         // 将数据存入设备列表\r
-        BluetoothCaseInfo *info = GetTempMacValue();\r
-        tag = CheckExistConnedList(*info);\r
-        if ((!tag) && (memcmp(info->addr, bdAddr.addr, BD_ADDR_LEN) == 0)) {\r
-            AddConnedDevicesCase(*info);\r
+        tag = CheckExistConnedList(*onClickBtCaseInfo);\r
+        if (!tag) {\r
+            AddConnedDevicesCase(*onClickBtCaseInfo);\r
         }\r
     } else {\r
         ACLConnectionFail(bdAddr);\r
@@ -841,38 +1110,91 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned
             int32_t retA2dp = a2dp_src_connect(&bdAddr);\r
             if (retA2dp) {\r
                 ACLConnectionFail(bdAddr);\r
+                #ifdef SUPPORT_CAT1_HFP_AG_SERV\r
+                errcode_t rethfp= hfp_ag_cmd_conn_hfp(&bdAddr);\r
+                if(!rethfp)\r
+                {\r
+                    errcode_t retVal = ConnectRemoteDevice((const bd_addr_t *)&onClickBtCaseInfo->addr);\r
+                }\r
+                #endif\r
+            }\r
+            else\r
+            {\r
+                errcode_t retVal = ConnectRemoteDevice((const bd_addr_t *)&onClickBtCaseInfo->addr);\r
             }\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connect result 0x%x", retA2dp);\r
+\r
         } else {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ingore a2dp_src_connect");\r
         }\r
+\r
+\r
     }\r
 }\r
+static uint8_t ALC_State_flag=0;\r
+\r
+static uint8_t ALC_connect_hfp_flag=0;\r
+\r
+static uint8_t ALC_connect_A2DP_flag=0;\r
+\r
+static  bd_addr_t  ACL_bdAdd;\r
+\r
+void uapi_set_ACL_br_address(const bd_addr_t * bdAddr)\r
+{\r
+    memcpy(&ACL_bdAdd,bdAddr,sizeof(bd_addr_t));\r
+}\r
 \r
 // 回调:ACL连接状态上报\r
 void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
+    #ifdef SUPPORT_BLE_SERVICE\r
+\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
         bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
         bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    static bd_addr_t gapAclConnectAddr{0}; /* 连接后保存手机地址,手表清除手机配对后查询不到class比较手机地址 */\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0 || memcmp(gapAclConnectAddr.addr, bdAddr->addr, BD_ADDR_LEN) == 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
+\r
+    if(uapi_dev_runtime_get_atuoota_status())\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+        return;\r
+    }\r
+\r
+    if(!uapi_dev_runtime_get_bt_powerstat())\r
+    {\r
+        gap_disconnect_remote_device(bdAddr);\r
+    }\r
+\r
+    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
         if (state == GAP_ACL_STATE_DISCONNECTED) {\r
             /* 通知msg_center,ble状态仍用bt状态,此处不区分 */\r
-            MsgCenterSendMsg(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+            SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
             SendMsgToUIService(BT_DISCONNECTED_TO_UI, 0, nullptr, 0);\r
+\r
+            \r
+\r
+            gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0);\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_SCAN_MODE_CONNECTABLE");\r
+\r
         } else if (state == GAP_ACL_STATE_CONNECTED) {\r
-            (void)memcpy_s(gapAclConnectAddr.addr, BD_ADDR_LEN, bdAddr->addr, BD_ADDR_LEN);\r
-            MsgCenterSendMsg(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+            SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
             SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);\r
+\r
+            uapi_set_ACL_br_address(bdAddr);\r
+\r
+            gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_SCAN_MODE_NONE");\r
+\r
         }\r
         return;\r
     }\r
-\r
     GraphicService::GetInstance()->PostGraphicEvent(\r
         std::bind(&BluetoothModel::BtGapAclStateChangedHandle, BluetoothModel::GetInstance(), state, reason, *bdAddr));\r
+\r
+    #endif\r
+\r
 }\r
 \r
 // 回调:远端设备名称变化\r
@@ -914,7 +1236,7 @@ static void A2dpSrcConnectstateChanged(bd_addr_t *bdAddr, int connState)
         bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* 5 4 3 idx */\r
         bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], connState); /* 2 1 0 idx */\r
     if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connectstateChangedCb: Mobile Phone Device");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "a2dp_src_connectstateChangedCb: Mobile Phone Device");\r
         return;\r
     }\r
     if (connState == PROFILE_STATE_CONNECTED) {\r
@@ -922,17 +1244,38 @@ static void A2dpSrcConnectstateChanged(bd_addr_t *bdAddr, int connState)
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "avrcp_ct_connect ret = 0x%x", ret);\r
         PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_CONNECTED);\r
         GraphicService::GetInstance()->PostGraphicEvent(std::bind(ACLConnectionSuss, *bdAddr));\r
+\r
+        #ifdef SUPPORT_BLE_SERVICE\r
+        SendMsgToUIService(EARPHONE_CONNECTED_TO_UI, 0, nullptr, 0);\r
+      \r
+\r
+\r
+         uapi_dev_runtime_set_earphone_connect_stat(1);\r
+         uapi_save_runtime_log(RUNTIME_LOG_BR_CONNECT_A2DP_HEADSET);\r
+        if(headset_Is_connect() == false)\r
+            do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CONNECT_AG, nullptr, 0);\r
+\r
+        #endif\r
+         \r
     }\r
 \r
     if (connState == PROFILE_STATE_DISCONNECTED) {\r
         PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_DISCONNECTED);\r
         GraphicService::GetInstance()->PostGraphicEvent(std::bind(ACLConnectionFail, *bdAddr));\r
+\r
+        #ifdef SUPPORT_BLE_SERVICE\r
+        SendMsgToUIService(EARPHONE_DISCONNECTED_TO_UI, 0, nullptr, 0);\r
+        #endif\r
+\r
+        uapi_save_runtime_log(RUNTIME_LOG_BR_DISCONNECT_A2DP_HEADSET);\r
         /* 实验室测试耳机回连场景,用户根据需要调整策略 */\r
         bool ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 60); // start scan\r
         if (!ret) {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "a2dp disc: gap_br_set_bt_scan_mode ret = 0x%x", ret);\r
         }\r
+        uapi_dev_runtime_set_earphone_connect_stat(0);\r
     }\r
+   \r
 }\r
 \r
 static void A2dpSrcPlayingStateChanged(bd_addr_t *bdAddr, int playState)\r
@@ -956,17 +1299,18 @@ static void A2dpSrcConfigureChanged(bd_addr_t *bdAddr, a2dp_codec_info_t *info)
 static void BleConnStateChangeCallback(unsigned short connId, bd_addr_t *addr, gap_ble_conn_state_t connState,\r
                                        gap_ble_pair_state_t pairState, gap_ble_disc_reason_t discReason)\r
 {\r
+\r
+    #ifdef SUPPORT_BLE_SERVICE\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleConnStateChangeCallback connId 0x%x, connState 0x%x, pairState 0x%x",\r
                   connId, connState, pairState);\r
     if (GAP_BLE_STATE_DISCONNECTED == connState) { // restart ble adv when disconnected\r
         /* 通知msg_center,ble状态仍用bt状态,此处不区分 */\r
-        MsgCenterSendMsg(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
-        msg_center_set_ble_conn_state(GAP_BLE_STATE_DISCONNECTED);\r
+        SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
     } else {\r
-        MsgCenterSendMsg(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
-        msg_center_set_ble_conn_state(GAP_BLE_STATE_CONNECTED);\r
+        SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
         (void)memcpy_s(&g_bd_addr, sizeof(bd_addr_t), addr, sizeof(bd_addr_t));\r
     }\r
+    #endif\r
 }\r
 \r
 static void BleAdvStartCallback(uint8_t advId, adv_status_t status)\r
@@ -988,8 +1332,9 @@ static void BleAdvStopCallback(uint8_t advId, adv_status_t status)
 static void BleAdvTerminateCallback(uint8_t advId, adv_status_t status)\r
 {\r
     if (g_sample_adv_id == advId) {\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvTerminateCallback advId: %d, status:%d\n", advId, status);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "?????????? BleAdvTerminateCallback advId: %d, status:%d\n", advId, status);\r
         BluetoothModel::GetInstance()->SetAdvStartState(false);\r
+\r
         // 此处开广播是为了实验室测试需要,客户需要自己修改\r
         BleAdvStart();\r
     }\r
@@ -997,11 +1342,11 @@ static void BleAdvTerminateCallback(uint8_t advId, adv_status_t status)
 \r
 static void BtGattsServiceAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_t srvcHandle, errcode_t status)\r
 {\r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0xF01F)) {\r
+    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF0)) {\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x",\r
             status, serverId, srvcHandle);\r
-        uint16_t sample_id = 0xF11F;\r
-        uint16_t diag_id = 0xF21F;\r
+        uint16_t sample_id = 0x1FF1;\r
+        uint16_t diag_id = 0x1FF2;\r
         gatts_add_chara_info_t character;\r
         uint16_t value = 0;\r
 \r
@@ -1019,7 +1364,7 @@ static void BtGattsServiceAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_
         character.chara_uuid.uuid_len = sizeof(diag_id);\r
         memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&diag_id, sizeof(diag_id));\r
         character.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ;\r
-        character.properties = GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_READ | GATT_CHARACTER_PROPERTY_BIT_NOTIFY;\r
+        character.properties = GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_READ;\r
         character.value_len = (uint16_t)sizeof(value);\r
         character.value = (uint8_t *)(&value);\r
 \r
@@ -1032,30 +1377,17 @@ static void BtGattsServiceAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_
 \r
 static void BtGattsCharacteristicAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint16_t srvcHandle, gatts_add_character_result_t *result, errcode_t status)\r
 {\r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0xF11F)) {\r
+    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF1)) {\r
         g_sample_characteristic_handle = result->value_handle;\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x 0x%x",\r
                       status, serverId, srvcHandle, g_sample_characteristic_handle);\r
     }\r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0xF21F)) {\r
+    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t*)uuid->uuid) == 0x1FF2)) {\r
         g_diag_characteristic_handle = result->value_handle;\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x 0x%x",\r
                       status, serverId, srvcHandle, g_diag_characteristic_handle);\r
-\r
-        uint8_t ccc_val[] = { 0x01, 0x00 };\r
-        uint16_t diag_desc = 0x0229;\r
-        gatts_add_desc_info_t descriptor;\r
-        memset_s(&descriptor, sizeof(gatts_add_desc_info_t), 0, sizeof(gatts_add_desc_info_t));\r
-        descriptor.desc_uuid.uuid_len = sizeof(diag_desc);\r
-        memcpy_s(descriptor.desc_uuid.uuid, sizeof(descriptor.desc_uuid.uuid), (char *)&diag_desc, sizeof(diag_desc));\r
-        descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
-        descriptor.value_len = (uint16_t)sizeof(ccc_val);\r
-        descriptor.value = ccc_val;\r
-        int ret = gatts_add_descriptor(serverId, srvcHandle, &descriptor);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_descriptor diag_desc ret 0x%x", ret);\r
     }\r
-\r
-    if (g_sample_characteristic_handle != 0 && g_diag_characteristic_handle !=0 && g_diag_desc_handle != 0) {\r
+    if (g_sample_characteristic_handle != 0 && g_diag_characteristic_handle !=0) {\r
         int ret = gatts_start_service(serverId, srvcHandle);\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_start_service ret 0x%x", ret);\r
     }\r
@@ -1066,12 +1398,6 @@ static void BtGattsDescriptorAddCallback(uint8_t serverId, bt_uuid_t *uuid, uint
     if (g_sample_svr_handle == srvcHandle) {\r
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsDescriptorAddCallback 0x%x 0x%x 0x%x 0x%x",\r
             status, serverId, srvcHandle, descriptorHandle);\r
-        g_diag_desc_handle = descriptorHandle;\r
-    }\r
-\r
-    if (g_sample_characteristic_handle != 0 && g_diag_characteristic_handle !=0 && g_diag_desc_handle != 0) {\r
-        int ret = gatts_start_service(serverId, srvcHandle);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_start_service ret 0x%x", ret);\r
     }\r
 }\r
 \r
@@ -1094,16 +1420,16 @@ static void BtGattsServiceDeleteCallback(uint8_t serverId, errcode_t status)
 \r
 static void BtGattsRequestReadCallback(uint8_t serverId, uint16_t connId, gatts_req_read_cb_t *readCbPara, errcode_t status)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGattsRequestReadCallback handle = %u", readCbPara->handle);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestReadCallback");\r
 }\r
 \r
 static void BtGattsRequestWriteCallback(uint8_t serverId, uint16_t connId, gatts_req_write_cb_t *writeCbPara,  errcode_t status)\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback handle = %u", writeCbPara->handle);\r
     if (g_sample_characteristic_handle == writeCbPara->handle) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback handle = %u", writeCbPara->handle);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback");\r
         if (writeCbPara->length == 9) {\r
-            if (memcmp("open ctkd", writeCbPara->value, writeCbPara->length) == 0) {\r
+            uint8_t ctkd[] = {'o', 'p', 'e', 'n', ' ', 'c', 't', 'k', 'd'};\r
+            if (memcmp(ctkd, writeCbPara->value, writeCbPara->length) == 0) {\r
                 WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "enable ctkd");\r
                 // 一键双连使能(依赖安全连接参数配置)\r
                 errcode_t ret = gap_ble_set_ctkd_enable(true);\r
@@ -1111,29 +1437,19 @@ static void BtGattsRequestWriteCallback(uint8_t serverId, uint16_t connId, gatts
 \r
                 // 发起ble配对\r
                 ret = gap_ble_pair_remote_device(&g_bd_addr);\r
-                WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_pair_remote_device ret = %u ", ret);\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_pair_remote_device ret = %u ", ret);\r
             }\r
         } else if (writeCbPara->length == 10) {\r
-            if (memcmp("close ctkd", writeCbPara->value, writeCbPara->length) == 0) {\r
+            uint8_t ctkd[] = {'c', 'l', 'o', 's', 'e', ' ', 'c', 't', 'k', 'd'};\r
+            if (memcmp(ctkd, writeCbPara->value, writeCbPara->length) == 0) {\r
                 // 一键双连去使能\r
                 errcode_t ret = gap_ble_set_ctkd_enable(false);\r
                 WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_disable ret = %u", ret);\r
             }\r
         }\r
     } else if (g_diag_characteristic_handle == writeCbPara->handle) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "diag_gatt_write_req_cbk handle = %u", writeCbPara->handle);\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "diag_gatt_write_req_cbk");\r
         diag_gatt_write_req_cbk(serverId, connId, writeCbPara, status);\r
-    } else if (g_diag_desc_handle == writeCbPara->handle) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "diag_gatt_set_handle handle = %u", writeCbPara->handle);\r
-        if ((writeCbPara->length == 2) && (*(char*)(writeCbPara->value) == 1)) {\r
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "open gatt channel");\r
-            diag_gatt_set_handle(serverId, connId, g_diag_characteristic_handle);\r
-            msg_center_set_trans_channel(DIAG_FRAME_FID_BT);\r
-        } else if ((writeCbPara->length == 2) && (*(char*)(writeCbPara->value) == 0)) {\r
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "close gatt channel");\r
-            diag_gatt_set_handle(0, 0, 0);\r
-            msg_center_set_trans_channel(DIAG_FRAME_FID_PHONE);\r
-        }\r
     }\r
 }\r
 \r
@@ -1141,6 +1457,21 @@ static void BtGattsMtuChangedCallback(uint8_t serverId, uint16_t connId, uint16_
 {\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsMtuChangedCallback connId = %u mtuSize = %u", connId, mtuSize);\r
 }\r
+/* 与设备建立A2DP连接 */\r
+static int wstp_a2dp_snk_connect(const bd_addr_t *bd_addr)\r
+{\r
+    int ret = a2dp_snk_connect(bd_addr);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_connect ret(int): %x\n", ret);\r
+    return ret;\r
+}\r
+\r
+/* 与设备断开A2DP连接 */\r
+static int wstp_a2dp_snk_disconnect(const bd_addr_t *bd_addr)\r
+{\r
+    int ret = a2dp_snk_disconnect(bd_addr);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_disconnect ret(int): %x\n", ret);\r
+    return ret;\r
+}\r
 \r
 static void BtA2dpSnkAcceptTimerStop(void)\r
 {\r
@@ -1190,20 +1521,20 @@ static errcode_t BtA2dpSnkStartAcceptTimer(void)
 static int32_t BtA2dpSnkAudioCreate()\r
 {\r
 #if MEDIA_A2DP_SNK_INTERFACE\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "audioFormat %d channelCount %d sampleRate %d \n",\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "audioFormat %d channelCount %d sampleRate %d \n",\r
         g_audio_format_config.audioFormat, g_audio_format_config.channelCount, g_audio_format_config.sampleRate);\r
 \r
     int32_t ret = AudioManagerA2dpSinkSetParam(g_audio_format_config);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkSetParam ret %x\n", ret);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkSetParam ret %x\n", ret);\r
     ret = AudioManagerA2dpSinkCreate();\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkCreate ret %x\n", ret);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkCreate ret %x\n", ret);\r
 #endif\r
     /* 起定时器接受音乐开始请求 */\r
     (void)BtA2dpSnkStartAcceptTimer();\r
     return 0;\r
 }\r
 \r
-static int32_t BtA2dpSnkAudioDestroy()\r
+int32_t BtA2dpSnkAudioDestroy(void)\r
 {\r
 #if MEDIA_A2DP_SNK_INTERFACE\r
     int32_t ret = AudioManagerA2dpSinkDestroy();\r
@@ -1212,10 +1543,68 @@ static int32_t BtA2dpSnkAudioDestroy()
     return 0;\r
 }\r
 \r
+//a2dp sink端 状态改变回调\r
 static void BtA2dpSnkConnectStateChangedCb(bd_addr_t *bd_addr, int conn_state)\r
 {\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x conn_state: %x\n",\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x conn_state: %x\n",\r
         bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], conn_state); /* 3 2 1 0 idx */\r
+     (void)memcpy_s(&g_bd_addr, sizeof(bd_addr_t), bd_addr, sizeof(bd_addr_t));\r
+    if(conn_state==PROFILE_STATE_DISCONNECTING || conn_state==PROFILE_STATE_DISCONNECTED)\r
+    {\r
+        //if(0==uapi_a2dp_snk_get_device_connect_state() && 0==uapi_hfp_connect_state())\r
+        {\r
+            #ifdef SUPPORT_BLE_SERVICE\r
+            SendMsgToUIService(BT_DISCONNECTED_TO_UI, 0, nullptr, 0);\r
+            SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+            #endif\r
+\r
+        }\r
+\r
+        uapi_save_runtime_log(RUNTIME_LOG_BR_DISCONNECT_A2DP);\r
+\r
+\r
+    }\r
+    else if (conn_state==PROFILE_STATE_CONNECTING || conn_state==PROFILE_STATE_CONNECTED)\r
+    {\r
+#ifdef BR_DISCONNECT\r
+        if(!cm_get_A2DP_switch())\r
+        {\r
+            uapi_a2dp_snk_disconnect();\r
+            return;\r
+        }\r
+\r
+        if(cm_get_HFP_switch() && uapi_hfp_connect_state()==0)\r
+        {\r
+            uapi_hfp_connect();\r
+        }\r
+#endif\r
+\r
+#ifdef SUPPORT_BLE_SERVICE\r
+        SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);\r
+        SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+ #endif\r
+\r
+\r
+        uapi_save_runtime_log(RUNTIME_LOG_BR_CONNECT_A2DP);\r
+        // if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTING ||\r
+        //  pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
+        // uapi_pbap_cmd_start_client();\r
+        // if(conn_state==PROFILE_STATE_CONNECTED)\r
+        // {\r
+        //     if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
+        //     uapi_connect_pbap_pce();\r
+        //     else \r
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"pbap_pce_get_device_connect_state(int): %X\n", pbap_pce_get_device_connect_state(bd_addr));\r
+            \r
+        // }\r
+       \r
+        \r
+\r
+    }\r
+    \r
+    \r
+   \r
+    \r
 }\r
 \r
 static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr)\r
@@ -1223,14 +1612,28 @@ static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr)
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x \n",\r
         bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* 3 2 1 0 idx */\r
     BtA2dpSnkAudioCreate();\r
+\r
+    uapi_save_runtime_log(RUNTIME_LOG_BR_A2DP_SNK_START_STREAM);\r
+    \r
+    if(PlayersModel::GetInstance()->GetMusicSource())//如果是手机音乐才更新显示\r
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(&OHOS::PlayersModel::set_player_state, OHOS::PlayersModel::GetInstance(),true));\r
+    // PlayersModel::GetInstance()->get_avrcp_ct_get_element_attributes();\r
 }\r
 \r
 static void BtA2dpSnkPlayingStateChangedCb(bd_addr_t *bd_addr, int playing_state)\r
 {\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x playing_state: %x\n",\r
         bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], playing_state); /* 3 2 1 0 idx */\r
+    \r
     if (playing_state == A2DP_NOT_PLAYING) {\r
+        if(PlayersModel::GetInstance()->GetMusicSource())//如果是手机音乐才更新显示\r
+            GraphicService::GetInstance()->PostGraphicEvent(std::bind(&OHOS::PlayersModel::set_player_state, OHOS::PlayersModel::GetInstance(),false));\r
         BtA2dpSnkAudioDestroy();\r
+        uapi_save_runtime_log(RUNTIME_LOG_BR_A2DP_SNK_NOT_PLAYING);\r
+    }\r
+    else\r
+    {\r
+        uapi_save_runtime_log(RUNTIME_LOG_BR_A2DP_SNK_PLAYING);\r
     }\r
 }\r
 \r
@@ -1287,9 +1690,48 @@ static a2dp_snk_callbacks_t g_a2dp_snk_callbacks = {
     BtA2dpSnkPlayingStateChangedCb,\r
     BtA2dpSnkConfigChangedCb\r
 };\r
+void BtA2dpInit(void)\r
+{\r
+    /* a2dp source */\r
+    g_a2dpSrcCallbacks.connectstate_changed_cb = A2dpSrcConnectstateChanged;\r
+    g_a2dpSrcCallbacks.configuration_changed_cb = A2dpSrcConfigureChanged;\r
+    g_a2dpSrcCallbacks.playing_state_changed_cb = A2dpSrcPlayingStateChanged;\r
+    a2dp_src_register_callbacks(&g_a2dpSrcCallbacks);\r
+    /* a2dp sink */\r
+    a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks);\r
+}\r
+\r
+void BtA2dpDeInit(void)\r
+{\r
+    a2dp_src_deregister_callbacks(&g_a2dpSrcCallbacks);\r
+    a2dp_snk_deregister_callbacks(&g_a2dp_snk_callbacks);\r
+\r
+}\r
+static void sample_gap_state_changed_callback(const int transport, const int status)\r
+{\r
+    printf("gap_state_changed_callback transport: %d status: %d\n", transport, status);\r
+}\r
 \r
-void BtInitCallBacks()\r
+static void sample_gap_scan_mode_changed_callback(int mode)\r
 {\r
+    printf("gap_scan_mode_changed_callback mode: %d\n", mode);\r
+    \r
+    if ((gap_get_device_class(&ACL_bdAdd) & 0x200) != 0) \r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sample_gap_scan_mode_changed_callback: Mobile Phone Device");\r
+        if(bt_is_acl_connected(&ACL_bdAdd) && mode!=GAP_SCAN_MODE_NONE)\r
+        {\r
+            gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+        }\r
+    }\r
+   \r
+    \r
+}\r
+\r
+void BtInitCallBacks(void)\r
+{\r
+    g_btGapCallBacks .scan_mode_changed_callback=sample_gap_scan_mode_changed_callback;\r
+    g_btGapCallBacks.state_change_callback=sample_gap_state_changed_callback;\r
     g_btGapCallBacks.discovery_result_callback = BtGapDiscoveryResultCallback;\r
     g_btGapCallBacks.discovery_state_changed_callback = BtGapDiscoveryStateChangedCallback;\r
     g_btGapCallBacks.acl_state_changed_callbak = GapAclStateChangedCallback;\r
@@ -1301,13 +1743,6 @@ void BtInitCallBacks()
     g_btGapCallBacks.pair_confiremed_callback = BtGapPairConfirmedCallback;\r
     gap_register_callbacks(&g_btGapCallBacks);\r
 \r
-    g_a2dpSrcCallbacks.connectstate_changed_cb = A2dpSrcConnectstateChanged;\r
-    g_a2dpSrcCallbacks.configuration_changed_cb = A2dpSrcConfigureChanged;\r
-    g_a2dpSrcCallbacks.playing_state_changed_cb = A2dpSrcPlayingStateChanged;\r
-    a2dp_src_register_callbacks(&g_a2dpSrcCallbacks);\r
-\r
-    /* a2dp sink */\r
-    a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks);\r
 }\r
 \r
 void BtInitCallBacksEx()\r
@@ -1315,8 +1750,8 @@ void BtInitCallBacksEx()
     g_gapBleCallbacks.conn_state_change_cb = BleConnStateChangeCallback;\r
     g_gapBleCallbacks.start_adv_cb = BleAdvStartCallback;\r
     g_gapBleCallbacks.stop_adv_cb = BleAdvStopCallback;\r
-    g_gapBleCallbacks.terminate_adv_cb = BleAdvTerminateCallback;\r
-    wrapper_gap_ble_register_callbacks(&g_gapBleCallbacks);\r
+        g_gapBleCallbacks.terminate_adv_cb = BleAdvTerminateCallback;\r
+        wrapper_gap_ble_register_callbacks(&g_gapBleCallbacks);\r
 \r
     g_btGattsCallbacks.add_service_cb = BtGattsServiceAddCallback;\r
     g_btGattsCallbacks.add_characteristic_cb = BtGattsCharacteristicAddCallback;\r
@@ -1332,8 +1767,8 @@ void BtInitCallBacksEx()
 \r
 void BtInitGatts(void)\r
 {\r
-    uint16_t id = 0xF01F;\r
-    uint16_t ser_id = 0xFF1F;\r
+    uint16_t id = 0x1FF0;\r
+    uint16_t ser_id = 0x1FFF;\r
     uint8_t serverId = 0;\r
     bt_uuid_t uuid;\r
     int ret;\r
@@ -1347,8 +1782,6 @@ void BtInitGatts(void)
     memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id));\r
     ret = wrapper_gatts_add_service(serverId, &uuid, true);\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
-\r
-    wrapper_gatts_service_start();\r
 }\r
 \r
 static uint8_t Char2Num(int8_t c)\r
@@ -1461,16 +1894,227 @@ void BleAdvStart(void)
     }\r
     gap_ble_adv_params_t adv_para;\r
     memset_s(&adv_para, sizeof(gap_ble_adv_params_t), 0, sizeof(gap_ble_adv_params_t));\r
-    adv_para.min_interval = 0x30;\r
-    adv_para.max_interval = 0x60;\r
+    adv_para.min_interval = 0x30;//140;//0x30;\r
+    adv_para.max_interval = 0x60;//160;//0x60;\r
     adv_para.adv_type = GAP_BLE_ADV_CONN_SCAN_UNDIR;\r
     adv_para.channel_map = 0x7;\r
     adv_para.duration = 0;\r
+\r
     gap_ble_set_adv_param(advId, &adv_para);\r
     gap_ble_set_local_appearance(GAP_BLE_APPEARANCE_TYPE_GENERIC_WATCH);\r
     errcode_t ret = gap_ble_start_adv(advId);\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BleAdvStart bt gap_ble_start_adv  ret = 0x%x", ret);\r
 }\r
+//////////////////////////////////A2DP sink端 代码///////////////////////////////////////////////\r
+\r
+int get_BT_is_init()\r
+{\r
+    return g_bluetooth_initialled;\r
+}\r
+\r
+int uapi_a2dp_snk_get_device_connect_state()\r
+{\r
+    if(get_BT_is_init()==0)\r
+    {\r
+        return 0;\r
+    }\r
+\r
+    int ret = a2dp_snk_get_device_connect_state(&g_bd_addr);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"state(int): %d\n", ret);\r
+\r
+    if(ret==PROFILE_STATE_CONNECTING || ret==PROFILE_STATE_CONNECTED)\r
+    return 1;\r
+    else\r
+    return 0;\r
+}\r
+\r
+\r
+void uapi_get_br_address(bd_addr_t *bdaddr)\r
+{\r
+ #ifdef SUPPORT_BLE_SERVICE\r
+    if(BtGapPair_bdAddr.addr[0]==0 && BtGapPair_bdAddr.addr[1]==0 &&\r
+    BtGapPair_bdAddr.addr[2]==0 && BtGapPair_bdAddr.addr[3]==0 )\r
+    {\r
+        uint8_t MacType = 0;\r
+        uint8_t mac_data[6];\r
+        memset(mac_data,0,6);\r
+        GetwatchSaveMac(mac_data,&MacType);\r
+        BtGapPair_bdAddr.addr[0]=mac_data[0];\r
+        BtGapPair_bdAddr.addr[1]=mac_data[1];\r
+        BtGapPair_bdAddr.addr[2]=mac_data[2];\r
+        BtGapPair_bdAddr.addr[3]=mac_data[3];\r
+        BtGapPair_bdAddr.addr[4]=mac_data[4];\r
+        BtGapPair_bdAddr.addr[5]=mac_data[5];\r
+        BtGapPair_bdAddr.type=MacType;\r
+    }\r
+    memcpy(bdaddr,&BtGapPair_bdAddr,sizeof(bd_addr_t));\r
+#endif\r
+\r
+\r
+}\r
+\r
+void uapi_set_br_address(bd_addr_t *bdaddr)\r
+{\r
+    memcpy(&BtGapPair_bdAddr,bdaddr,sizeof(bd_addr_t));\r
+}\r
+\r
+static uint8_t br_cmd=0;\r
+int uapi_a2dp_snk_connect()\r
+{\r
+    br_cmd=BR_A2DP_CONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+    return 0;\r
+\r
+}\r
+  \r
+\r
+int uapi_a2dp_snk_connect_()\r
+{\r
+\r
+    if(get_BT_is_init()==0)\r
+    {\r
+        return 0;\r
+    }\r
+\r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+\r
+    int ret = a2dp_snk_connect(&bdaddr);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x g_bd_addr.type: %x\n",\r
+    bdaddr.addr[3], bdaddr.addr[2], bdaddr.addr[1], bdaddr.addr[0], bdaddr.type); /* 3 2 1 0 idx */\r
+\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"state(int): %x\n", ret);\r
+    return ret;\r
+}\r
+\r
+int uapi_a2dp_snk_disconnect()\r
+{\r
+    br_cmd=BR_A2DP_DISCONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+     return 0;\r
+}\r
+  \r
+\r
+int uapi_a2dp_snk_disconnect_()\r
+{\r
+    if(get_BT_is_init()==0)\r
+    {\r
+        return 0;\r
+    }\r
+    \r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+\r
+    int ret = a2dp_snk_disconnect(&bdaddr);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"state(int): %X\n", ret);\r
+    return ret;\r
+}\r
+\r
+// int uapi_disconnect_remote_device_()\r
+// {\r
+//     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+//     return 0;\r
+// }\r
+  \r
+\r
+int uapi_disconnect_remote_device()\r
+{\r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+\r
+    if (bt_is_acl_connected(&bdaddr))\r
+    {\r
+       \r
+    int ret = gap_disconnect_remote_device(&bdaddr);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_disconnect_remote_device ret = %u", ret);\r
+    }\r
+    else\r
+    {\r
+     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt_is_acl_connected bt_acl_is True");\r
+    }\r
+    return 0;\r
+}\r
+\r
+\r
+int uapi_get_acl_connect_state()\r
+{\r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+    if (bt_is_acl_connected(&bdaddr))\r
+    {\r
+        return 1;\r
+    }\r
+    else\r
+    {\r
+        return 0;\r
+    }\r
+}\r
+\r
+int uapi_set_acl_connect_hfp()\r
+{\r
+    ALC_connect_hfp_flag=1;\r
+    return 0;\r
+}\r
+\r
+int uapi_set_acl_connect_A2DP()\r
+{\r
+    ALC_connect_A2DP_flag=1;\r
+    return 0;\r
+}\r
+\r
+\r
+int uapi_reconnect_()\r
+{\r
+    \r
+    br_cmd=BR_RECONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+     return 0;\r
+}\r
+  \r
+\r
+int uapi_reconnect(void)\r
+{\r
+    bd_addr_t bdaddr={0};\r
+    uapi_get_br_address(&bdaddr);\r
+    int ret=gap_reconnect_media_device(&bdaddr);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ret(int): %X\n", ret);\r
+\r
+    return 0;\r
+}\r
+\r
+int uapi_close_br_scan(void)\r
+{\r
+    gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+    return 0;\r
+}\r
+\r
+int uapi_open_br_scan(void)\r
+{\r
+    gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0);\r
+    return 0;\r
+}\r
+\r
+// /////////////////////////////////////////HFP hf端 代码///////////////////////////////////////////////////\r
+\r
+// int uapi_HFP_hf_connect()\r
+// {\r
+//     int ret = hfp_hf_connect(&g_bd_addr);\r
+//     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"state(int): %d\n", ret);\r
+//     return ret;\r
+// }\r
+\r
+// int uapi_a2dp_snk_disconnect()\r
+// {\r
+//     int ret = a2dp_snk_disconnect(&g_bd_addr);\r
+//     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"state(int): %d\n", ret);\r
+//     return ret;\r
+// }\r
+\r
+\r
+void cm_initBluetoothDeviceList(void)\r
+{\r
+    BluetoothModel::GetInstance()->Init();\r
+}\r
 \r
 #ifdef __cplusplus\r
 }\r
index a2c3671..97f68ab 100644 (file)
  * Author:\r
  * Create: 2021-10-13\r
  */\r
-#include "BluetoothOptionsView.h"\r
-#include "BluetoothModel.h"\r
+#include "bluetooth/include/BluetoothOptionsView.h"\r
+#include "bluetooth/include/BluetoothModel.h"\r
 #include "wearable_log.h"\r
 #include "UiConfig.h"\r
-#include "PlayersPresenter.h"\r
-#include "BluetoothPresenter.h"\r
-\r
-namespace OHOS {\r
-static BluetoothOptionsView *g_pBluetoothOptionsView{nullptr};\r
-\r
-BluetoothOptionsView::BluetoothOptionsView()\r
+#include "player/include/PlayersPresenter.h"\r
+#include "player/include/PlayersView.h"\r
+#include "bluetooth/include/BluetoothPresenter.h"\r
+#include "ui_resource_string.h"\r
+#include "ui_resource_image.h"\r
+namespace OHOS\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::BluetoothOptionsView");\r
-    g_pBluetoothOptionsView = this;\r
-}\r
+    static BluetoothOptionsView *g_pBluetoothOptionsView{nullptr};\r
 \r
-BluetoothOptionsView::~BluetoothOptionsView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::~BluetoothOptionsView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete connectStateLabel;\r
-    connectStateLabel = nullptr;\r
-    delete optionsOneButton;\r
-    optionsOneButton = nullptr;\r
-    delete unpairButton;\r
-    unpairButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    g_pBluetoothOptionsView = nullptr;\r
-}\r
-\r
-BluetoothOptionsView *BluetoothOptionsView::GetInstance()\r
-{\r
-    return g_pBluetoothOptionsView;\r
-}\r
+    BluetoothOptionsView::BluetoothOptionsView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::BluetoothOptionsView");\r
+        g_pBluetoothOptionsView = this;\r
+    }\r
 \r
-void BluetoothOptionsView::RefreshText(void)\r
-{\r
-    // 刷新状态和文字\r
-    BluetoothModel::GetInstance()->SetBtStatus();\r
-    if (BluetoothModel::GetInstance()->GetAclConnected()) {\r
-        connectStateLabel->SetText("已连接");\r
-        optionsOneButton->SetText("断开连接");\r
-    } else {\r
-        connectStateLabel->SetText("已断开");\r
-        optionsOneButton->SetText("重新连接");\r
+    BluetoothOptionsView::~BluetoothOptionsView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::~BluetoothOptionsView");\r
+        if (group != nullptr)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (btHeadsetIconUmage)\r
+            {\r
+                delete btHeadsetIconUmage;\r
+                btHeadsetIconUmage = nullptr;\r
+            }\r
+            if (EarPhoneDeviceName)\r
+            {\r
+                delete EarPhoneDeviceName;\r
+                EarPhoneDeviceName = nullptr;\r
+            }\r
+            if (pairState)\r
+            {\r
+                delete pairState;\r
+                pairState = nullptr;\r
+            }\r
+            if (unpairButton)\r
+            {\r
+                delete unpairButton;\r
+                unpairButton = nullptr;\r
+            }\r
+            if (unpairLabel)\r
+            {\r
+                delete unpairLabel;\r
+                unpairLabel = nullptr;\r
+            }\r
+            if (connectStateLabel)\r
+            {\r
+                delete connectStateLabel;\r
+                connectStateLabel = nullptr;\r
+            }\r
+            if (optionsOneButton)\r
+            {\r
+                delete optionsOneButton;\r
+                optionsOneButton = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
+        }\r
+        g_pBluetoothOptionsView = nullptr;\r
     }\r
-    BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
-    titleLabel->SetText(reinterpret_cast<const char *>(caseInfo->deviceName));\r
-    optionsOneButton->Invalidate();\r
-}\r
 \r
-void BluetoothOptionsView::InItTitleLabel()\r
-{\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView titleLabel new fail");\r
-            return;\r
+    BluetoothOptionsView *BluetoothOptionsView::GetInstance()\r
+    {\r
+        return g_pBluetoothOptionsView;\r
+    }\r
+\r
+    bool BluetoothOptionsView::CreateBluetoothOptionsLabelView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::CreateBluetoothOptionsLabelView");\r
+        /* ------------------------------- titleLabel ------------------------------- */\r
+        if (titleLabel == nullptr)\r
+        {\r
+            titleLabel = new UILabelExt();\r
+            if (titleLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail");\r
+                return false;\r
+            }\r
+        }\r
+        titleLabel->SetPosition(83, 50, 300, 35);\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES); /*蓝牙耳机*/\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT,30);\r
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT,35);\r
+        titleLabel->SetRollSpeed(23);\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        /* --------------------------- EarPhoneDeviceName --------------------------- */\r
+        if (EarPhoneDeviceName == nullptr)\r
+        {\r
+            EarPhoneDeviceName = new UILabelExt();\r
+            if (EarPhoneDeviceName == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EarPhoneDeviceName new fail");\r
+                return false;\r
+            }\r
         }\r
-        titleLabel->SetPosition(60, 100, 333, 45); // 60:x 100:y 333:width 45:height\r
+        EarPhoneDeviceName->SetPosition(53, 246, 360, 35);\r
+        EarPhoneDeviceName->SetStyle(STYLE_TEXT_FONT, 30);\r
+        EarPhoneDeviceName->SetStyle(STYLE_LINE_HEIGHT, 35);\r
         BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
-        titleLabel->SetText(reinterpret_cast<const char *>(caseInfo->deviceName));\r
-        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
-        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(titleLabel);\r
-    }\r
-    if (connectStateLabel == nullptr) {\r
-        connectStateLabel = new UILabel();\r
-        if (connectStateLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView connectStateLabel new fail");\r
-            return;\r
+        EarPhoneDeviceName->SetText(reinterpret_cast<const char *>(caseInfo->deviceName));\r
+        EarPhoneDeviceName->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        EarPhoneDeviceName->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        EarPhoneDeviceName->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);\r
+        /* -------------------------------- pairState ------------------------------- */\r
+        if (pairState == nullptr)\r
+        {\r
+            pairState = new UILabelExt();\r
+            if (pairState == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "pairState new fail");\r
+                return false;\r
+            }\r
         }\r
-        connectStateLabel->SetPosition(60, 148, 333, 33); // 60:x 148:y 333:width 33:height\r
+        pairState->SetPosition(53, 284, 360, 35);\r
+        pairState->SetStyle(STYLE_TEXT_FONT, 30);\r
+        pairState->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        pairState->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+        pairState->SetTextId(STR_PAIRED);\r
+        pairState->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        pairState->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        pairState->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        /* ---------------------------- connectStateLabel 注:暂时不用--------------------------- */\r
+        if (connectStateLabel == nullptr)\r
+        {\r
+            connectStateLabel = new UILabel();\r
+            if (connectStateLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView connectStateLabel new fail");\r
+                return false;\r
+            }\r
+        }\r
+        connectStateLabel->SetPosition(60, 148, 333, 33);\r
         connectStateLabel->SetText("已连接");\r
         connectStateLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
         connectStateLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
         connectStateLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(connectStateLabel);\r
+        connectStateLabel->SetVisible(false);\r
+        /* -------------------------------------------------------------------------- */\r
+        return true;\r
     }\r
-}\r
 \r
-void BluetoothOptionsView::InItLabelButton()\r
-{\r
-    UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-    UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
-        return;\r
-    }\r
-    if (optionsOneButton == nullptr) {\r
-        optionsOneButton = new UILabelButton();\r
-        if (optionsOneButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView optionsOneButton new fail");\r
-            return;\r
+    bool BluetoothOptionsView::CreateBluetoothOptionsLabelButton(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::CreateBluetoothOptionsLabelButton");\r
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
+            return false;\r
+        }\r
+        /* ---------------------------- optionsOneButton 注:暂时不用---------------------------- */\r
+        if (optionsOneButton == nullptr)\r
+        {\r
+            optionsOneButton = new UILabelButtonExt();\r
+            if (optionsOneButton == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView optionsOneButton new fail");\r
+                return false;\r
+            }\r
         }\r
         optionsOneButton->SetPosition(157, 210, 139, 47); // 157:x, 210:y, 139:width 47:height\r
         optionsOneButton->SetText("断开连接");\r
         optionsOneButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
         optionsOneButton->SetViewId(BLUETOOTH_OPTIONONE_BUTTON);\r
         optionsOneButton->SetImageSrc(PNG_SELECTION_BOX, PNG_SELECTION_BOX);\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
             optionsOneButton->SetTextColor(Color::Red());\r
             optionsOneButton->SetOnClickListener(clickListener);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
             optionsOneButton->SetTextColor(Color::Blue());\r
             optionsOneButton->SetOnClickListener(clickListener2);\r
         }\r
-        group->Add(optionsOneButton);\r
-    }\r
-    if (unpairButton == nullptr) {\r
-        unpairButton = new UILabelButton();\r
-        if (unpairButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView unpairButton new fail");\r
-            return;\r
-        }\r
-        unpairButton->SetPosition(157, 284, 139, 47); // 157:x, 284:y, 139:width 47:height\r
-        unpairButton->SetText("取消配对");\r
-        unpairButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
+        optionsOneButton->SetVisible(false);\r
+        /* ------------------------------ unpairButton ------------------------------ */\r
+        if (unpairButton == nullptr)\r
+        {\r
+            unpairButton = new UILabelButtonExt();\r
+            if (unpairButton == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView unpairButton new fail");\r
+                return false;\r
+            }\r
+        }\r
+        unpairButton->SetPosition(0, 366, 466, 100);\r
+        // unpairButton->SetTextId(STR_UNPAIR); // 取消配对\r
+        unpairButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         unpairButton->SetViewId(BLUETOOTH_UNPAIR_BUTTON);\r
-        unpairButton->SetImageSrc(PNG_SELECTION_BOX, PNG_SELECTION_BOX);\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-            unpairButton->SetTextColor(Color::Red());\r
+        unpairButton->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);\r
+        unpairButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0x00, UIButton::PRESSED);\r
+        unpairButton->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
             unpairButton->SetOnClickListener(clickListener);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-            unpairButton->SetTextColor(Color::Blue());\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
             unpairButton->SetOnClickListener(clickListener2);\r
         }\r
-        group->Add(unpairButton);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (unpairLabel == nullptr)\r
+        {\r
+            unpairLabel = new UILabelExt();\r
+            if (unpairLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "unpairLabel new fail");\r
+                return false;\r
+            }\r
+        }\r
+        unpairLabel->SetPosition(173, unpairButton->GetY() + 33, 120, 35);\r
+        unpairLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        unpairLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        unpairLabel->SetTextId(STR_UNPAIR); // 取消配对\r
+        unpairLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
+        unpairLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        unpairLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        unpairLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // unpairLabel->SetRollSpeed(23);\r
+        /* -------------------------------------------------------------------------- */\r
+        return true;\r
     }\r
-}\r
 \r
-UIViewGroup *BluetoothOptionsView::InitShowUpView()\r
-{\r
-    // 获取currentBdAddr db值 model待开发\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView init");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
-            return nullptr;\r
+    bool BluetoothOptionsView::CreateBluetoothOptionsImageView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView::CreateBluetoothOptionsImageView");\r
+        /* --------------------------- btHeadsetIconUmage --------------------------- */\r
+        if (btHeadsetIconUmage == nullptr)\r
+        {\r
+            btHeadsetIconUmage = new UIImageView();\r
+            if (btHeadsetIconUmage == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btHeadsetIconUmage new fail");\r
+                return false;\r
+            }\r
         }\r
-        group->SetPosition(0, 0);\r
-        group->SetWidth(HORIZONTAL_RESOLUTION);\r
-        group->SetHeight(VERTICAL_RESOLUTION);\r
+        btHeadsetIconUmage->SetPosition(193, 134, 80, 80);\r
+        btHeadsetIconUmage->SetAutoEnable(false);\r
+        btHeadsetIconUmage->SetResizeMode(UIImageView::CENTER);\r
+        if (!PlayersView::LoadPlayerImage(btHeadsetIconUmage, PLAYER_EARPHONE))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btHeadsetIconUmage LoadPlayerImage fail");\r
+            return false;\r
+        }\r
+        return true;\r
     }\r
-    InItLabelButton();\r
-    InItTitleLabel();\r
-    UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((earDragListener == nullptr) && (earDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
-        return nullptr;\r
+\r
+    // 刷新状态和文字\r
+    void BluetoothOptionsView::RefreshText(void)\r
+    {\r
+        BluetoothModel::GetInstance()->SetBtStatus();\r
+        if (BluetoothModel::GetInstance()->GetAclConnected())\r
+        {\r
+            connectStateLabel->SetText("已连接");\r
+            optionsOneButton->SetText("断开连接");\r
+        }\r
+        else\r
+        {\r
+            connectStateLabel->SetText("已断开");\r
+            optionsOneButton->SetText("重新连接");\r
+        }\r
+        BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
+        EarPhoneDeviceName->SetText(reinterpret_cast<const char *>(caseInfo->deviceName));\r
+        optionsOneButton->Invalidate();\r
     }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(earDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(earDragListener2);\r
+\r
+    UIViewGroup *BluetoothOptionsView::CreateBluetoothOptionsView()\r
+    {\r
+        // 获取currentBdAddr db值 model待开发\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOptionsView init");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+            group->SetPosition(0, 0);\r
+            group->SetWidth(HORIZONTAL_RESOLUTION);\r
+            group->SetHeight(VERTICAL_RESOLUTION);\r
+        }\r
+        UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+        UIView::OnDragListener *earDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((earDragListener == nullptr) && (earDragListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
+            return nullptr;\r
+        }\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            group->SetOnDragListener(earDragListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            group->SetOnDragListener(earDragListener2);\r
+        }\r
+        group->SetViewId(BLUETOOTH_OPTIONS_VIEW);\r
+        group->SetDraggable(true);\r
+        group->SetTouchable(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (!CreateBluetoothOptionsLabelView() || !CreateBluetoothOptionsImageView() || !CreateBluetoothOptionsLabelButton())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageView fail!!");\r
+            return nullptr;\r
+        }\r
+        /* ----------------------------------- Add ---------------------------------- */\r
+        group->Add(titleLabel);\r
+        group->Add(btHeadsetIconUmage);\r
+        group->Add(EarPhoneDeviceName);\r
+        group->Add(pairState);\r
+        group->Add(unpairButton);\r
+        group->Add(unpairLabel);\r
+        group->Add(optionsOneButton);\r
+        group->Add(connectStateLabel);\r
+\r
+        return group;\r
     }\r
-    group->SetViewId(BLUETOOTH_OPTIONS_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
 \r
-UILabelButton *BluetoothOptionsView::GetOptionsOneButton(void)\r
-{\r
-    return optionsOneButton;\r
-}\r
+    UILabelButtonExt *BluetoothOptionsView::GetOptionsOneButton(void)\r
+    {\r
+        return optionsOneButton;\r
+    }\r
 \r
-UILabelButton *BluetoothOptionsView::GetUnpairButton(void)\r
-{\r
-    return unpairButton;\r
-}\r
+    UILabelButtonExt *BluetoothOptionsView::GetUnpairButton(void)\r
+    {\r
+        return unpairButton;\r
+    }\r
 \r
+    /*\r
+     * @brief 获取蓝牙Model中的最后连接设备的地址,然后调用 gap_disconnect_remote_device 函数来断开与该远程设备的连接,并记录相关的日志信息。\r
+     *\r
+     * eg:比如之前连接的设备是一个蓝牙耳机,当用户主动触发断开操作时,该函数就会执行,断开与该耳机的连接。\r
+     */\r
+    void BluetoothOptionsView::SetBtDisconnect(void)\r
+    {\r
+        bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtDisconnect Addr: %02x%02x%02x%02x%02x%02x",\r
+                      lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3],  /* mac下标 0 1 2 3 4 5 */\r
+                      lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+        errcode_t retVal = gap_disconnect_remote_device(lastAddr);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_disconnect_remote_device %d", retVal);\r
+    }\r
 \r
-void BluetoothOptionsView::SetBtDisconnect(void)\r
-{\r
-    bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtDisconnect Addr: %02x%02x%02x%02x%02x%02x",\r
-        lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
-        lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    errcode_t retVal  = gap_disconnect_remote_device(lastAddr);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_disconnect_remote_device %d", retVal);\r
-}\r
-\r
-void BluetoothOptionsView::SetBtconnect(void)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtconnect currentAddr: %02x%02x%02x%02x%02x%02x",\r
-        currentAddr.addr[5], currentAddr.addr[4], currentAddr.addr[3], /* mac下标 0 1 2 3 4 5 */\r
-        currentAddr.addr[2], currentAddr.addr[1], currentAddr.addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&currentAddr);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtconnect ConnectRemoteDevice %d", retVal);\r
-}\r
-\r
-void BluetoothOptionsView::SetUnpair(void)\r
-{\r
-    bool ret;\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUnpair currentAddr: %02x%02x%02x%02x%02x%02x",\r
-        currentAddr.addr[5], currentAddr.addr[4], currentAddr.addr[3], /* mac下标 0 1 2 3 4 5 */\r
-        currentAddr.addr[2], currentAddr.addr[1], currentAddr.addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    ret = gap_remove_pair(&currentAddr);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUnpair gap_remove_pair %d", ret);\r
-}\r
+    /*\r
+     * @brief 记录当前要连接的设备地址的相关日志信息,然后通过蓝牙Model的 ConnectRemoteDevice 函数尝试连接该远程设备,并记录连接结果的日志。 \r
+     *\r
+     * 当用户选择连接一个新的蓝牙设备时,这个函数会被调用,尝试建立与该设备的连接。\r
+     */\r
+    void BluetoothOptionsView::SetBtconnect(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtconnect currentAddr: %02x%02x%02x%02x%02x%02x",\r
+                      currentAddr.addr[5], currentAddr.addr[4], currentAddr.addr[3],  /* mac下标 0 1 2 3 4 5 */\r
+                      currentAddr.addr[2], currentAddr.addr[1], currentAddr.addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+        errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice(&currentAddr);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetBtconnect ConnectRemoteDevice %d", retVal);\r
+    }\r
 \r
+    /*\r
+    * @brief 记录当前设备地址的日志,然后调用 gap_remove_pair 函数来解除与该设备的配对,并记录操作结果的日志。\r
+    *\r
+    * 如果用户不再希望与某个已配对的蓝牙设备保持配对关系,例如一个旧手机,触发此操作时该函数执行。\r
+    */\r
+    void BluetoothOptionsView::SetUnpair(void)\r
+    {\r
+        bool ret;\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUnpair currentAddr: %02x%02x%02x%02x%02x%02x",\r
+                      currentAddr.addr[5], currentAddr.addr[4], currentAddr.addr[3],  /* mac下标 0 1 2 3 4 5 */\r
+                      currentAddr.addr[2], currentAddr.addr[1], currentAddr.addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+        ret = gap_remove_pair(&currentAddr);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetUnpair gap_remove_pair %d", ret);\r
+    }\r
 \r
-void BluetoothOptionsView::SetCurrentAddr(bd_addr_t addr)\r
-{\r
-    (void)memcpy_s(currentAddr.addr, BD_ADDR_LEN,\r
-                   addr.addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断\r
-}\r
+    /*\r
+    * @brief 使用 memcpy_s 函数将传入的地址 addr 复制到 currentAddr 中。\r
+    *\r
+    * 当获取到新的有效的蓝牙设备地址时,通过这个函数更新当前要操作的地址。\r
+    */\r
+    void BluetoothOptionsView::SetCurrentAddr(bd_addr_t addr)\r
+    {\r
+        (void)memcpy_s(currentAddr.addr, BD_ADDR_LEN,\r
+                       addr.addr, BD_ADDR_LEN); // 源和目标内存长度一样,不做返回值判断\r
+    }\r
 \r
-bd_addr_t BluetoothOptionsView::GetCurrentAddr(void)\r
-{\r
-    return currentAddr;\r
-}\r
+    /*\r
+     * @brief 返回当前保存的蓝牙设备地址。\r
+     *\r
+     * 其他函数需要获取当前正在操作的蓝牙地址时,会调用这个函数来获取。\r
+     */\r
+    bd_addr_t BluetoothOptionsView::GetCurrentAddr(void)\r
+    {\r
+        return currentAddr;\r
+    }\r
 }
\ No newline at end of file
index bcb1aa3..38e09e7 100644 (file)
 #include "BluetoothPresenter.h"\r
 #include "BluetoothReconnectView.h"\r
 #include "MainBluetoothView.h"\r
-#include "NativeRegisterManager.h"\r
 #include "UiConfig.h"\r
+#include "BluetoothModel.h"\r
+#include "custom_utils.h"\r
+#include "common/key_code.h"\r
 \r
-namespace OHOS {\r
+#include "NativeRegisterManager.h"\r
+namespace OHOS\r
+{\r
 \r
-REGIST_SLICE(VIEW_BLUETOOTH_EARPHONE, MainBluetoothView, BluetoothPresenter);\r
+    REGIST_SLICE(VIEW_BLUETOOTH_EARPHONE, MainBluetoothView, BluetoothPresenter);\r
 \r
 static BluetoothPresenter *g_pBluetoothPresenter = nullptr;\r
 \r
@@ -32,6 +36,16 @@ BluetoothPresenter::~BluetoothPresenter()
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::~BluetoothPresenter");\r
 }\r
 \r
+void BluetoothPresenter::OnStart()\r
+{\r
+    Presenter<MainBluetoothView>::OnStart();\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::On Start ");\r
+}\r
+\r
+void BluetoothPresenter::OnPause(void) {}\r
+\r
+void BluetoothPresenter::OnResume(void) {}\r
+\r
 void BluetoothPresenter::OnStop(void)\r
 {\r
     BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
@@ -61,6 +75,7 @@ void BluetoothPresenter::ClickNewEquipmentButton(void)
     view_->ChangeView(BLUETOOTHDEVICELISTVIEW, BLUETOOTHEARPHONEVIEW);\r
 }\r
 \r
+//点击取消连接按钮\r
 void BluetoothPresenter::ClickCancelConnedRequestButton(void)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::OnClick BLUETOOTH_CANCELCONNEDREQUEST_BUTTON");\r
@@ -94,9 +109,10 @@ void BluetoothPresenter::ClickCancelConnedRequestButton(void)
     pbItermView->ConnectAnimatorStop();\r
     bluetoothMode_->SetConnectionView(nullptr);\r
     bluetoothEarListView->SetNewEquipmentButtonAdd();\r
-    RootView::GetInstance()->Invalidate();\r
+\r
 }\r
 \r
+//点击取消配对\r
 void BluetoothPresenter::ClickUnpairButton(void)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::OnClick BLUETOOTH_UNPAIR_BUTTON");\r
@@ -127,6 +143,7 @@ void BluetoothPresenter::ClickUnpairButton(void)
     view_->ChangeView(BLUETOOTHEOPTIONSVIEW, BLUETOOTHDEVICELISTVIEW);\r
 }\r
 \r
+/*已连接的蓝牙耳机设备视图中【重新连接或断开连接】按钮*/\r
 void BluetoothPresenter::ClickOptionsOneButton(void)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::OnClick BLUETOOTH_OPTIONONE_BUTTON");\r
@@ -138,7 +155,7 @@ void BluetoothPresenter::ClickOptionsOneButton(void)
     bluetoothMode_->SetBtStatus();\r
     if (bluetoothMode_->GetAclConnected()) {\r
         bluetoothMode_->SetTagConnectNew(false);\r
-        bluetoothOptionsView->SetBtDisconnect();\r
+        bluetoothOptionsView->SetBtDisconnect();/*断开与该远程设备的连接*/\r
         view_->ChangeView(BLUETOOTHEOPTIONSVIEW, BLUETOOTHDEVICELISTVIEW);\r
     } else {\r
         bluetoothMode_->SetTagReconnectJump(true);\r
@@ -147,9 +164,6 @@ void BluetoothPresenter::ClickOptionsOneButton(void)
         // 判断是否已有连接\r
         bd_addr_t *lastAddr = bluetoothMode_->GetLastConnedAddr();\r
         if (bt_is_acl_connected(lastAddr)) {\r
-            WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "LastDevice addr: %02x%02x%02x%02x%02x%02x is connected",\r
-                lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3],\r
-                lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]);\r
             bluetoothMode_->SetTagConnectNew(true);\r
             bluetoothOptionsView->SetBtDisconnect();\r
         } else {\r
@@ -181,10 +195,25 @@ void BluetoothPresenter::ClickConnfailBackButton(void)
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickConnfailBackButton ConnectRemoteDevice retVal = %d", retVal);\r
 }\r
 \r
-bool BluetoothPresenter::OnDragEnd(UIView& view, const DragEvent& event)\r
+bool BluetoothPresenter::OnDrag(UIView& view, const DragEvent& event)\r
 {\r
     if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
+        int16_t deltaX;\r
+        int16_t deltaY;\r
+        deltaX = event.GetDeltaX();\r
+        deltaY = event.GetDeltaY();\r
+        if (MATH_ABS(deltaX) >= MATH_ABS(deltaY) && MATH_ABS(deltaX) > 30) {\r
+            X_DRAG_FLAG = true;\r
+        }\r
+    }\r
+    return true;\r
+}\r
+\r
+bool BluetoothPresenter::OnDragEnd(UIView& view, const DragEvent& event)\r
+{\r
+    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
         view_->DropView(view);\r
+        X_DRAG_FLAG = false;\r
     }\r
     return true;\r
 }\r
@@ -193,22 +222,46 @@ bool BluetoothPresenter::OnClick(UIView &view, const ClickEvent &event)
 {\r
     UNUSED(event);\r
     if (strcmp(view.GetViewId(), BLUETOOTH_RESCAN_BUTTON) == 0) {\r
-        ClickRescanButton();\r
+        ClickRescanButton();//扫描出的耳机列表界面中的[重新扫描按钮]被点击\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_NEWEQUIPMENT_BUTTON) == 0) {\r
-        ClickNewEquipmentButton();\r
+        ClickNewEquipmentButton();//已连接设备列表界面中的[重新扫描按钮]被点击\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_CANCELCONNEDREQUEST_BUTTON) == 0) {\r
         ClickCancelConnedRequestButton();\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_UNPAIR_BUTTON) == 0) {\r
-        ClickUnpairButton();\r
+        ClickUnpairButton();//查看已连接的蓝牙耳机设备界面的[取消配对按]钮被点击\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_OPTIONONE_BUTTON) == 0) {\r
         ClickOptionsOneButton();\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_SUCC_BACK_BUTTON) == 0) {\r
-        ClickSuccBackButton();\r
+        ClickSuccBackButton();//点击连接成功的确定按钮\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_FAIL_BACK_BUTTON) == 0) {\r
-        ClickFailBackButton();\r
+        ClickFailBackButton(); //点击重新搜索按钮\r
     } else if (strcmp(view.GetViewId(), BLUETOOTH_CONN_FAIL_BACK_BUTTON) == 0) {\r
-        ClickConnfailBackButton();\r
+        ClickConnfailBackButton();//连接失败的重试按钮\r
+    }\r
+    return true;\r
+}\r
+\r
+bool BluetoothPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
+{\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::OnKeyAct");\r
+    uint16 keyID = event.GetKeyId();\r
+    uint16 keyState = event.GetState();\r
+    // 如果是power键就返回上一级\r
+    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)\r
+    {\r
+        //如果是按键退出,退出时需要做一些清理工作\r
+        BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
+        if(bluetoothEarPhoneView)\r
+        {\r
+            bluetoothEarPhoneView->BtAnimatorStop(); //停止搜索动画\r
+            bluetoothEarPhoneView->StopBtDiscovery();//停止定时器\r
+            BluetoothModel::GetInstance()->SetTagConnectView(false); //清除标志位\r
+            BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);\r
+        }\r
+        NativeAbility::GetInstance().Back();\r
     }\r
     return true;\r
 }\r
+\r
+\r
 };\r
index ad23342..df336f5 100644 (file)
 #include "PlayersPresenter.h"\r
 #include "BluetoothPresenter.h"\r
 #include "common/image_cache_manager.h"\r
-\r
+#include "uicomponents/UIComponents.h"\r
+#include <custom_utils.h>\r
+#include "graphic_service.h"\r
+#include <ui_service.h>\r
 namespace OHOS {\r
 static BluetoothReconnectView *g_pBluetoothReconnectView{nullptr};\r
-#define BLUETOOTH_IMAGE_X 175\r
-#define BLUETOOTH_IMAGE_Y 125\r
-#define BLUETOOTH_IMAGE_WIDTH 104\r
-#define BLUETOOTH_IMAGE_HEIGHT 104\r
-#define BLUETOOTH_DELAY 200\r
-\r
+#define BLUETOOTH_IMAGE_X 183\r
+#define BLUETOOTH_IMAGE_Y 153\r
+#define BLUETOOTH_IMAGE_WIDTH 100\r
+#define BLUETOOTH_IMAGE_HEIGHT 120\r
+#define BLUETOOTH_DELAY 50\r
+static constexpr const char *reconnectImagePaths = "/user/res/connect/";\r
+osTimerId_t g_stopConnectHandle = nullptr;\r
+static constexpr uint64_t MS_CONN_TIME = 15000;\r
 BluetoothReconnectView::BluetoothReconnectView()\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothReconnectView::BluetoothReconnectView");\r
@@ -29,22 +34,32 @@ BluetoothReconnectView::BluetoothReconnectView()
 BluetoothReconnectView::~BluetoothReconnectView()\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothReconnectView::~BluetoothReconnectView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete bluetoothNameLabel;\r
-    bluetoothNameLabel = nullptr;\r
-    delete reconnectAnimator;\r
-    reconnectAnimator = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
+    if(group){\r
+        group->RemoveAll();\r
+        if(titleLabel){\r
+            delete titleLabel;\r
+            titleLabel = nullptr;\r
+        }\r
+        if(bluetoothNameLabel){\r
+            delete bluetoothNameLabel;\r
+            bluetoothNameLabel = nullptr;\r
+        }\r
+        if(reconnectAnimator){\r
+            reconnectAnimator->Stop();\r
+            delete reconnectAnimator;\r
+            reconnectAnimator = nullptr;\r
+            if(reconnectPathsArray != nullptr)\r
+                FreeImageInfoArray(reconnectPathsArray, reconnectImagePaths, BLUETOOTH_RECONNECT_IMAGE_NUM);\r
+        }\r
+        delete group;\r
+        group = nullptr;\r
+    }\r
+    ScreenTurnOff();\r
+    stop_connect_timer();\r
     g_pBluetoothReconnectView = nullptr;\r
 }\r
 \r
-bd_addr_t BluetoothReconnectView::GetcurrentBdAddr(void)\r
-{\r
-    return currentBdAddr;\r
-}\r
+\r
 \r
 BluetoothReconnectView *BluetoothReconnectView::GetInstance()\r
 {\r
@@ -65,6 +80,7 @@ void BluetoothReconnectView::ShowUpTitleLabel()
         titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);\r
         titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
         titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetVisible(false);\r
         group->Add(titleLabel);\r
     }\r
     if (bluetoothNameLabel == nullptr) {\r
@@ -80,20 +96,11 @@ void BluetoothReconnectView::ShowUpTitleLabel()
         bluetoothNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
         bluetoothNameLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
         bluetoothNameLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        bluetoothNameLabel->SetVisible(false);\r
         group->Add(bluetoothNameLabel);\r
     }\r
 }\r
 \r
-void BluetoothReconnectView::BtReconnectStart(void)\r
-{\r
-    reconnectAnimator->Start();\r
-}\r
-\r
-void BluetoothReconnectView::BtReconnectStop(void)\r
-{\r
-    reconnectAnimator->Stop();\r
-}\r
-\r
 UIViewGroup *BluetoothReconnectView::InitShowUpView()\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothReconnectView init");\r
@@ -115,10 +122,11 @@ UIViewGroup *BluetoothReconnectView::InitShowUpView()
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "reDragListener GetInstance fail");\r
         return nullptr;\r
     }\r
+    /* ------------------------------ 连接过程动画不能右滑退出 ------------------------------ */\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(reDragListener);\r
+        // group->SetOnDragListener(reDragListener);\r
     } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(reDragListener2);\r
+        // group->SetOnDragListener(reDragListener2);\r
     }\r
     group->SetViewId(BLUETOOTH_RECONNECT_VIEW);\r
     group->SetDraggable(true);\r
@@ -140,6 +148,7 @@ void BluetoothReconnectView::RefreshBluetoothNameLabel()
 \r
 void BluetoothReconnectView::BtReconnectImageAnimator()\r
 {\r
+#if 0\r
     const char *reconnectImagePath[BLUETOOTH_RECONNECT_IMAGE_NUM] = {\r
         PNG_A019_080_IMAGE_PATH,\r
         PNG_A019_081_IMAGE_PATH,\r
@@ -169,6 +178,131 @@ void BluetoothReconnectView::BtReconnectImageAnimator()
         reconnectAnimator->SetRepeat(true);\r
         group->Add(reconnectAnimator);\r
     }\r
+#endif\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtScanImageAnimator init");\r
+    reconnectPathsArray = CreateImageInfoArray(reconnectImagePaths, BLUETOOTH_RECONNECT_IMAGE_NUM);\r
+    if (reconnectAnimator == nullptr)\r
+    {\r
+        reconnectAnimator = new UIImageAnimatorView();\r
+        if (reconnectAnimator == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "reconnectAnimator new fail");\r
+            return;\r
+        }\r
+        for (uint8_t i = 0; i < BLUETOOTH_RECONNECT_IMAGE_NUM; i++)\r
+        {\r
+            reconnetImageInfo[i].imageInfo = (reconnectPathsArray[i]);\r
+            reconnetImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;\r
+            reconnetImageInfo[i].pos.x = BLUETOOTH_IMAGE_X;\r
+            reconnetImageInfo[i].pos.y = BLUETOOTH_IMAGE_Y;\r
+            reconnetImageInfo[i].width = BLUETOOTH_IMAGE_WIDTH;\r
+            reconnetImageInfo[i].height = BLUETOOTH_IMAGE_HEIGHT;\r
+        }\r
+        reconnectAnimator->SetPosition(BLUETOOTH_IMAGE_X, BLUETOOTH_IMAGE_Y, BLUETOOTH_IMAGE_WIDTH, BLUETOOTH_IMAGE_HEIGHT);\r
+        reconnectAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        reconnectAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        reconnectAnimator->SetImageAnimatorSrc(reconnetImageInfo, BLUETOOTH_RECONNECT_IMAGE_NUM, BLUETOOTH_DELAY);\r
+        reconnectAnimator->SetRepeat(true);\r
+        reconnectAnimator->SetSizeFixed(true);\r
+        group->Add(reconnectAnimator);\r
+    }\r
 }\r
 \r
+bd_addr_t BluetoothReconnectView::GetcurrentBdAddr(void)\r
+{\r
+    return currentBdAddr;\r
+}\r
+\r
+void BluetoothReconnectView::BtReconnectStart(void)\r
+{\r
+    // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); //动画启动,常亮屏\r
+    ScreenTurnOn(20*1000);\r
+    reconnectAnimator->Start();\r
+    start_connect_timer();\r
+}\r
+\r
+void BluetoothReconnectView::BtReconnectStop(void)\r
+{\r
+    /* ---------------------------------- 取消定时器 --------------------------------- */\r
+    // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);//动画停止,取消常亮屏\r
+    reconnectAnimator->Stop();\r
+    stop_connect_timer();\r
+}\r
+\r
+// 定时器回调函数\r
+static void ConnectTimerCallbackProc(int data)\r
+{\r
+    (void)data;\r
+    \r
+    MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();\r
+    if (mainBluetoothView == nullptr) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainBluetoothView GetInstance fail");\r
+        return;\r
+    }\r
+    mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), TIPSCONNFAILMESSAGEVIEW);\r
+\r
+    TipsConnFailMessageView *tipsConnFailMessageView = TipsConnFailMessageView::GetInstance();\r
+    if (tipsConnFailMessageView == nullptr) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ACLConnectionFail tipsConnFailMessageView GetInstance fail");\r
+        return;\r
+    }\r
+    BluetoothCaseInfo *bluetoothInfo_= BluetoothModel::GetInstance()->GetTempMacValue();\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "device name = %s",bluetoothInfo_->deviceName);\r
+    bd_addr_t addr;\r
+    (void)memcpy_s(addr.addr, BD_ADDR_LEN, bluetoothInfo_->addr, BD_ADDR_LEN);\r
+    tipsConnFailMessageView->RefreshNameLabel(addr);\r
+}\r
+\r
+static void ConnectTimerCallback(int data)\r
+{\r
+    GraphicService::GetInstance()->PostGraphicEvent(std::bind(ConnectTimerCallbackProc, data));\r
+}\r
+//开启第一个重连动画的定时器\r
+void BluetoothReconnectView::start_connect_timer()\r
+{\r
+    /*开启定时器*/\r
+    if (g_stopConnectHandle != nullptr)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable g_stopConnectHandle != nullptr");\r
+        return;\r
+    }\r
+    g_stopConnectHandle = osTimerNew((osTimerFunc_t)ConnectTimerCallback, osTimerPeriodic, nullptr, nullptr);\r
+    if (g_stopConnectHandle == nullptr)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerNew failed!!");\r
+        return;\r
+    }\r
+    uint32 tick = osMs2Tick(MS_CONN_TIME);\r
+    osStatus_t retTimer = osTimerStart(g_stopConnectHandle, tick);\r
+    if (retTimer != osOK)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerStart failed, ret = %lx!!", retTimer);\r
+        if (g_stopConnectHandle != nullptr)\r
+        {\r
+            retTimer = osTimerDelete(g_stopConnectHandle);\r
+            if (retTimer != osOK)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::BtEnable osTimerDelete  ret = %lx!!", retTimer);\r
+                return;\r
+            }\r
+            g_stopConnectHandle = nullptr;\r
+        }\r
+        return;\r
+    }\r
+}\r
+//停止定时器\r
+void BluetoothReconnectView::stop_connect_timer()\r
+{\r
+    if (g_stopConnectHandle != nullptr)\r
+    {\r
+        osTimerStop(g_stopConnectHandle);\r
+        osStatus_t ret = osTimerDelete(g_stopConnectHandle);\r
+        if (ret != osOK)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);\r
+            return;\r
+        }\r
+        g_stopConnectHandle = nullptr;\r
+    }\r
+}\r
 }
\ No newline at end of file
index 22e85a9..92ff850 100644 (file)
@@ -11,6 +11,7 @@
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
+#include "custom_utils.h"\r
 \r
 static bool gatts_register_flag = false;\r
 static uint8_t gatts_server_id = 0;\r
@@ -201,8 +202,10 @@ void wrapper_gatts_start_service_callback(uint8_t server_id, uint16_t handle, er
                 callback.start_service_cb(server_id, handle, status);\r
             }\r
         }\r
+        // printf("wrapper_gatts_start_service_callback server_id %d,handle %d, status %x , g_svr_handle_list.size %d\r\n",server_id,handle,status,g_svr_handle_list.size());\r
         g_uuid_list.pop_front();\r
-        wrapper_gatts_service_start();\r
+               wrapper_gatts_service_start();\r
+        // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0);\r
     }\r
 }\r
 void wrapper_gatts_stop_service_callback(uint8_t server_id, uint16_t handle, errcode_t status)\r
@@ -301,18 +304,36 @@ errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid,
     g_uuid_list.push_back(*service_uuid);\r
     return ERRCODE_SUCC;\r
 }\r
-\r
+#include "debug_print.h"\r
+extern "C" void custom_ble_service_start(void);\r
 void wrapper_gatts_service_start(void)\r
 {\r
+    // printf("wrapper_gatts_service_start \n");\r
     if (!g_uuid_list.empty()) {\r
         bt_uuid_t &uuid = g_uuid_list.front();\r
+        bt_uuid_t uuid_tmp={0};\r
+        memcpy(&uuid_tmp,&uuid,sizeof(bt_uuid_t));\r
         // 服务异步添加,需要保证当前服务start后,再添加下一个服务\r
-        (void)gatts_add_service(gatts_server_id, &uuid, true);\r
+               // g_uuid_list.pop_front();\r
+        errcode_t ret = gatts_add_service(gatts_server_id, &uuid_tmp, true);\r
+        // printf("wrapper_gatts_service_start gatts_add_service uuid len %x [0x%02X%02X],gatts_server_id %u, ret 0x%x, g_uuid_list.size %d\n",\r
+        //         uuid_tmp.uuid_len,uuid_tmp.uuid[0],uuid_tmp.uuid[1],gatts_server_id,ret,g_uuid_list.size());\r
+\r
     } else {\r
         g_svr_handle_list.clear();\r
+        // printf("wrapper_gatts_service_start g_uuid_list empty,start adv \n");\r
+         /**开始ble广播*/\r
+        custom_ble_service_start();\r
     }\r
-}\r
+    // printf("wrapper_gatts_service_start end\n");\r
 \r
+}\r
+void wrapper_gatts_clear_service(void)\r
+{\r
+    if (!g_uuid_list.empty()) g_uuid_list.clear();\r
+    if (!g_svr_handle_list.empty()) g_svr_handle_list.clear();\r
+    gatts_register_flag = false;\r
+}\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp
new file mode 100644 (file)
index 0000000..b09d34d
--- /dev/null
@@ -0,0 +1,809 @@
+/*
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.
+ * Description: This module include test function of BT PBAP Service module.
+ */
+
+#include "Bluetooyhpabpserver.h"
+#include <soc_osal.h>
+#include <td_base.h>
+#include "securec.h"
+#include "errcode.h"
+#include "bts_br_gap.h"
+#include "bts_pbap.h"
+// #include "sample_common.h"
+#include "debug_print.h"
+#include "graphic_service.h"
+#include "msg_center.h"
+#include "bts_def.h"
+#include "bts_gatt_stru.h"
+#include "bts_a2dp_source.h"
+#include "bts_gatt_server.h"
+#include "bts_le_gap.h"
+#include "bts_spp.h"
+#include "osal_task.h"
+#ifdef SUPPORT_BLE_SERVICE
+#include <bleEvent.h>
+#include "bleService.h"
+#endif
+#include "BluetoothModel.h"
+#include "CallerLogModel.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+
+#define SAMPLE_PBAP_TASK_STACK_SIZE 0x400
+#define PBAP_APP_FOLDER_MAXLENGTH   40
+static bd_addr_t g_pbap_curr_addr;
+
+typedef enum {
+    PBAP_VCF_PB = 0,
+    PBAP_VCF_ICH,
+    PBAP_VCF_OCH,
+    PBAP_VCF_MCH,
+    PBAP_VCF_CCH,
+    PBAP_VCF_SPD,
+    PBAP_VCF_FAV,
+} pbap_vcf_files;
+
+static void sample_pbap_print_addr(const bd_addr_t *bd_addr)
+{
+    if (bd_addr != NULL) {
+        printf("addr: ****%02x%02x%02x%02x ",
+            bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* addr 下标 3 2 1 0 */
+    }
+}
+
+static void sample_pbap_conn_state(const bd_addr_t *bd_addr, profile_connect_state_t state)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("sample_pbap_conn_state %d\n", state);
+    if(state==PROFILE_STATE_CONNECTED)
+    {
+        uapi_pbap_cmd_pull_phonebook();
+    }
+    return;
+}
+//接收数据回调
+static void sample_pbap_receive_data(const bd_addr_t *bd_addr, const uint8_t* data, int32_t len)
+{
+    sample_pbap_print_addr(bd_addr);
+
+    printf("receive %d bytes(%s)\n", len, data);
+    if(strstr((char*)data,"vcard-listing.dtd"))
+    {
+        if(strstr((char*)data,"name"))
+        {
+            char * name_str=strstr((char*)data,"name");
+            char *name_=strtok(name_str,"\"");
+            name_=strtok(NULL,"\"");
+            OHOS:: CallerLogModel::GetInstance()->Setphonebname(name_,strlen(name_));
+            printf("name_ : %s\r\n",name_);
+             GraphicService::GetInstance()->PostGraphicEvent( 
+                std::bind(calllognameupdate));
+
+             
+        }
+      
+    }
+
+    return;
+}
+
+//传输完成回调
+static void sample_pbap_transfer_complete(const bd_addr_t *bd_addr)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("\n");
+    return;
+}
+
+static void sample_pbap_get_phonebook_size(const bd_addr_t *bd_addr, uint16_t size)
+{
+    sample_pbap_print_addr(bd_addr);
+
+    printf("%u\n", size);
+    return;
+}
+
+typedef struct {
+    uint32_t bts_code;
+    td_char print_message[20]; /* 字符串长度20 */
+} sample_pbap_code_print;
+
+static sample_pbap_code_print g_pbap_error_pair[] = {
+    {PBAP_ERROR_OK, "OK"},
+    {PBAP_ERROR_BAD_REQUEST, "BAD REQUEST"},
+    {PBAP_ERROR_NOT_IMPLEMENTED, "NOT IMPLEMENTED"},
+    {PBAP_ERROR_UNAUTHORIZED, "UNAUTHORIZED"},
+    {PBAP_ERROR_PRECONDITION_FAILED, "PRECONDITION FAILED"},
+    {PBAP_ERROR_NOT_FOUND, "NOT FOUND"},
+    {PBAP_ERROR_NOT_ACCEPTABLE, "NOT ACCEPTABLE"},
+    {PBAP_ERROR_SERVICE_UNAVAILABLE, "SERVICE UNAVAILABLE"},
+    {PBAP_ERROR_FORBIDDEN, "FORBIDDEN"},
+};
+
+static td_char* sample_pbap_print_error(uint32_t code)
+{
+    for (uint32_t i = 0; i < sizeof(g_pbap_error_pair) / sizeof(g_pbap_error_pair[0]); i++) {
+        if (code == g_pbap_error_pair[i].bts_code) {
+            return g_pbap_error_pair[i].print_message;
+        }
+    }
+    return NULL;
+}
+
+static void sample_pbap_handle_error_code(const bd_addr_t *bd_addr, int32_t code)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("0x%x %s\n", code, sample_pbap_print_error((uint32_t)code));
+}
+
+static bool sample_pbap_is_null_pointer(uint16_t sample_mode, uint8_t index)
+{
+    return ((sample_mode & (1 << index)) != 0);
+}
+
+/* 蓝牙电话簿注册回调 */
+void uapi_pbap_pce_reg_callback(void)
+{
+    errcode_t ret = ERRCODE_BT_SUCCESS;
+    pbap_pce_callbacks_t callbacks = {
+        sample_pbap_conn_state,
+        sample_pbap_get_phonebook_size,
+        sample_pbap_transfer_complete,
+        sample_pbap_receive_data,
+        sample_pbap_handle_error_code,
+    };
+    ret = (errcode_t)pbap_pce_register_callbacks(&callbacks);
+    printf("uapi_pbap_pce_reg_callback ret=0x%x\n", ret);
+}
+
+
+
+static int32_t sample_pbap_connect_task_body(const void *bd_addr)
+{
+    uint32_t result = (uint32_t)pbap_pce_connect((bd_addr_t*)bd_addr);
+    if (result != ERRCODE_BT_SUCCESS) {
+        printf("Connect to PBAP service failed\n");
+    }
+    printf("sample_pbap_connect_task_body [Line: %d] finish, result: 0x%x!\n", __LINE__, result);
+    return 0;
+}
+
+static void sample_pbap_create_conn_task(const bd_addr_t *bd_addr)
+{
+    osal_task *task = osal_kthread_create((osal_kthread_handler)sample_pbap_connect_task_body, (void *)bd_addr, "sample_pbap_connect_task",
+        SAMPLE_PBAP_TASK_STACK_SIZE);
+    if (task == NULL) {
+        printf("create task fail\n");
+        return;
+    }
+}
+
+/* start a pbap client */
+ void uapi_pbap_cmd_start_client()
+{
+    // if (params_cnt != 2) { /* 2个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    bd_addr_t bdaddr={0};
+    OHOS::uapi_get_br_address(&bdaddr);
+    // }
+    sample_pbap_create_conn_task((const bd_addr_t*)&bdaddr);
+}
+
+void uapi_pbap_cmd_stop_client()
+{
+    bd_addr_t bdaddr={0};
+    OHOS::uapi_get_br_address(&bdaddr);
+
+    uint32_t ret = (uint32_t)pbap_pce_disconnect(&bdaddr);
+    printf("[Line: %d] finish, ret: %u\n", __LINE__, ret);
+}
+
+static int32_t sample_pbap_set_folder_vcf(uint8_t* name, uint8_t vcf, bool is_pull_phone_book)
+{
+    if (name == NULL) {
+        return -1;
+    }
+    switch (vcf) {
+        case PBAP_VCF_PB: /* Main Phone book */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "pb");
+            break;
+        case PBAP_VCF_ICH: /* Incoming Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "ich");
+            break;
+        case PBAP_VCF_OCH: /* Outgoing Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "och");
+            break;
+        case PBAP_VCF_MCH: /* Missed Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "mch");
+            break;
+        case PBAP_VCF_CCH: /* Combined Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "cch");
+            break;
+        case PBAP_VCF_SPD: /* Speed Dial */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "spd");
+            break;
+        case PBAP_VCF_FAV: /* Favorite Contacts */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "fav");
+            break;
+        default:
+            printf("no vcf file be seleted.\n");
+            return -1;
+    }
+    if (is_pull_phone_book) {
+        (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, ".vcf");
+    }
+    return 0;
+}
+
+static void sample_pbap_filter_composer(uint8_t filter[PBAP_MASK_LEN], uint8_t flag)
+{
+    uint8_t *temp = NULL;
+    uint8_t bytes = 0;
+    uint8_t bits = 0;
+
+    if (filter && (flag < 64)) { /* flag最大值64 */
+        bytes = (uint8_t)(flag >> 3); /* 右移3位判断填入哪个字节 */
+        bits = (uint8_t)(flag & 0x07); /* 求余数判断填入哪一位 */
+        temp = filter + PBAP_MASK_LEN - 1 - bytes;
+        *temp |= (1 << bits);
+    }
+}
+
+static void sample_pbap_set_property(uint8_t pro_arr[PBAP_MASK_LEN], uint32_t property)
+{
+    uint8_t cur_bit = 0;
+    uint32_t temp = property;
+    while (temp != 0) {
+        if ((temp & 0x01) != 0) {
+            sample_pbap_filter_composer(pro_arr, cur_bit);
+        }
+        temp = temp >> 1;
+        cur_bit++;
+    }
+}
+
+static bool sample_pbap_set_pull_phone_book_name(uint8_t folder, uint8_t vcf, uint8_t* name)
+{
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        (void)strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "telecom/");
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        (void)strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "SIM1/telecom/");
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+
+    if (sample_pbap_set_folder_vcf(name, vcf, true) != 0) {
+        return false;
+    }
+    return true;
+}
+
+static bool wstp_pbap_check_param_valid(
+    uint8_t folder, uint8_t vcf, uint16_t max_list_count, uint16_t list_offset, uint8_t format)
+{
+    // bts_unused(max_list_count);
+    // bts_unused(list_offset);
+    bool res = true;
+    if (folder == 1) { /* folder 1 */
+        if (vcf > 6) { /* vcf num 6 */
+            res = false;
+        }
+    } else if (folder == 2) { /* folder 2 */
+        if (vcf > 4) { /* vcf num 4 */
+            res = false;
+        }
+    } else {
+        res = false;
+    }
+
+    if (format > 1) {
+        res = false;
+    }
+
+    return res;
+}
+//PBAP_VCF_PB 10 1  0
+/* get phone book */
+void uapi_pbap_cmd_pull_phonebook()
+{
+    printf("uapi_pbap_cmd_pull_phonebook\n");
+    uint8_t folder=PBAP_REPOSITORY_LOCAL;//写死只拿手机的,不拿SIM卡的
+    uint8_t vcf=PBAP_VCF_PB;//写死 电话簿
+    uint16_t max_list_count=0xFFFF;//最大数量
+    uint16_t list_offset=0;
+    uint8_t format=1;//编码格式
+
+    if (!wstp_pbap_check_param_valid(folder, vcf, max_list_count, list_offset, format)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    pbap_pce_pull_phone_book_param_t *thr_par =
+        (pbap_pce_pull_phone_book_param_t*)(void *)malloc(sizeof(pbap_pce_pull_phone_book_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        return;
+    }
+    (void)memset_s(thr_par, sizeof(pbap_pce_pull_phone_book_param_t), 0, sizeof(pbap_pce_pull_phone_book_param_t));
+    thr_par->name = (unsigned char *)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap name malloc failed\n");
+        free(thr_par);
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    /* 为0时代表查询对应记录大小 */
+    thr_par->max_list_count = max_list_count;
+    thr_par->list_offset = list_offset;
+    thr_par->format = format;
+    uint32_t property =PBAP_PROPERTY_MASK_TEL | PBAP_PROPERTY_MASK_FN|PBAP_PROPERTY_MASK_UID;
+    sample_pbap_set_property(thr_par->property_selector, property);
+    uint8_t filter = 0;
+    if (filter != 0) {
+        sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    }
+
+    if (sample_pbap_set_pull_phone_book_name(folder, vcf, thr_par->name)) {
+        printf("pbap_pce_pull_phone_book name=%s\n", thr_par->name);
+        pbap_pce_pull_phone_book(NULL, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+}
+
+/* get phone book */
+static void sample_pbap_cmd_pull_phonebook(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 9) { /* 9个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+    // pbap_pce_pull_phone_book_param_t *thr_par =
+    //     (pbap_pce_pull_phone_book_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_phone_book_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+    // (void)memset_s(thr_par, sizeof(pbap_pce_pull_phone_book_param_t), 0, sizeof(pbap_pce_pull_phone_book_param_t));
+    // thr_par->name = (unsigned char *)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // thr_par->max_list_count = (unsigned short)atoi(params[4]); /* index = 4 */
+    // thr_par->list_offset = (unsigned short)atoi(params[5]); /* index = 5 */
+    // thr_par->format = (unsigned char)atoi(params[6]); /* index = 6 */
+    // uint32_t property = (uint32_t)atoi(params[7]); /* index = 7 */
+    // sample_pbap_set_property(thr_par->property_selector, property);
+    // int filter = atoi(params[8]); /* index = 8 */
+    // if (filter != 0) {
+    //     sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    // }
+
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // if (sample_pbap_set_pull_phone_book_name(folder, vcf, thr_par->name)) {
+    //     pbap_pce_pull_phone_book(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+static bool sample_pbap_set_vcard_listing_name(bd_addr_t* bd_addr, uint8_t folder, uint8_t vcf, uint8_t* name)
+{
+    printf("folder=%u vcf=%u\n", folder, vcf);
+    uint8_t tel_name[8] = "telecom";
+    uint8_t sim_name[5] = "SIM1";
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    uint32_t ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, NULL);
+    if (ret != ERRCODE_BT_SUCCESS) {
+        printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, sim_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+    if (sample_pbap_set_folder_vcf(name, vcf, false)) {
+        return false;
+    }
+    return true;
+}
+
+/* get phone vCard-Listing */
+void uapi_pbap_cmd_pull_vcard_listing(unsigned char *tell,uint8_t len)
+{
+    uint8_t folder=1;
+    uint8_t vcf=PBAP_VCF_PB;
+    uint16_t max_list_count=0xffff;
+    uint16_t list_offset=0;
+    uint8_t order=0;
+
+    OHOS:: CallerLogModel::GetInstance()->Setphonebname("",0);
+
+    OHOS:: CallerLogModel::GetInstance()->Setphonenumber((char *)tell,len);
+    
+    unsigned char *tell_=(unsigned char *)malloc(len+1);
+    if(tell_==NULL)
+    {
+        return;
+    }
+    memset_s(tell_,30,0,len);
+    memcpy_s(tell_,30,tell,len);
+
+    if (!wstp_pbap_check_param_valid(folder, vcf, max_list_count, list_offset, 0)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    bd_addr_t* bd_addr = NULL;
+
+    pbap_pce_pull_vcard_listing_param_t *thr_par =
+        (pbap_pce_pull_vcard_listing_param_t*)(void *)malloc(sizeof(pbap_pce_pull_vcard_listing_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        free(tell_); 
+        return;
+    }
+
+    (void)memset_s(
+        thr_par, sizeof(pbap_pce_pull_vcard_listing_param_t), 0, sizeof(pbap_pce_pull_vcard_listing_param_t));
+    thr_par->name = (uint8_t *)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap param name malloc failed\n");
+        free(thr_par);
+         free(tell_); 
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+
+    thr_par->search_property=PBAP_SEARCH_PROPERTY_NUMBER;
+    thr_par->search_value=tell_;
+    thr_par->max_list_count = max_list_count;
+    thr_par->list_offset = list_offset; /* index = 5 */
+    /* 0:索引序 1:字典序 */
+    thr_par->order = order;
+
+    if (sample_pbap_set_vcard_listing_name(bd_addr, folder, vcf, thr_par->name)) {
+        printf("pbap_pce_pull_vcard_listing name=%s\n", thr_par->name);
+        pbap_pce_pull_vcard_listing(bd_addr, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+    free(tell_); 
+}
+
+/* get phone vCard-Listing */
+static void sample_pbap_cmd_pull_vcard_listing(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 7) { /* 7个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+
+    // pbap_pce_pull_vcard_listing_param_t *thr_par =
+    //     (pbap_pce_pull_vcard_listing_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_vcard_listing_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+
+    // (void)memset_s(
+    //     thr_par, sizeof(pbap_pce_pull_vcard_listing_param_t), 0, sizeof(pbap_pce_pull_vcard_listing_param_t));
+    // thr_par->name = (uint8_t *)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap param name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // thr_par->max_list_count = (unsigned short)atoi(params[4]); /* index = 4 */
+    // thr_par->list_offset = (unsigned short)atoi(params[5]); /* index = 5 */
+    // thr_par->order = (unsigned char)atoi(params[6]); /* index = 6 */
+
+    // if (sample_pbap_set_vcard_listing_name(bd_addr, folder, vcf, thr_par->name)) {
+    //     pbap_pce_pull_vcard_listing(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+static bool sample_pbap_set_vcard_entry_name(
+    bd_addr_t *bd_addr, uint8_t folder, uint8_t vcf, const td_char *vcf_name, uint8_t *name)
+{
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    uint8_t tel_name[8] = "telecom";
+    uint8_t sim_name[5] = "SIM1";
+    uint32_t ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, NULL);
+    if (ret != ERRCODE_BT_SUCCESS) {
+        printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, sim_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+   if (sample_pbap_set_folder_vcf(name, vcf, false)) {
+        return false;
+    } else {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    }
+
+    if (strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, vcf_name) != EOK) {
+        printf("strcpy_s vcf_name fail\n");
+        return false;
+    }
+    return true;
+}
+
+/* get phone vCard-Entry */
+void uapi_pbap_cmd_pull_vcard_entry(td_char *vcf_name)
+{
+    printf("uapi_pbap_cmd_pull_vcard_entry: %s\r\n",vcf_name);
+    bd_addr_t bdaddr={0};
+    OHOS::uapi_get_br_address(&bdaddr);
+
+    uint8_t format=1;
+    uint8_t vcf=PBAP_VCF_PB;
+    uint8_t folder=1;
+    if (!wstp_pbap_check_param_valid(folder, vcf, 0, 0, format)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    pbap_pce_pull_vcard_entry_param_t *thr_par =
+        (pbap_pce_pull_vcard_entry_param_t*)(void *)malloc(sizeof(pbap_pce_pull_vcard_entry_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        return;
+    }
+    (void)memset_s(thr_par, sizeof(pbap_pce_pull_vcard_entry_param_t), 0, sizeof(pbap_pce_pull_vcard_entry_param_t));
+    thr_par->name = (uint8_t*)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap param name malloc failed\n");
+        free(thr_par);
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+
+    thr_par->format = format; /* index = 5 */
+    uint32_t property = PBAP_PROPERTY_MASK_TEL | PBAP_PROPERTY_MASK_FN; /* index = 6 */
+    sample_pbap_set_property(thr_par->property_selector, property);
+    uint8_t filter = 0; /* index = 7 */
+    if (filter != 0) {
+        sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    }
+
+    if (sample_pbap_set_vcard_entry_name(&bdaddr, folder, vcf, vcf_name, thr_par->name)) {
+        pbap_pce_pull_vcard_entry(&bdaddr, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+    printf("uapi_pbap_cmd_pull_vcard_entry\n");
+}
+
+/* get phone vCard-Entry */
+static void sample_pbap_cmd_pull_vcard_entry(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 8) { /* 8个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+
+    // pbap_pce_pull_vcard_entry_param_t *thr_par =
+    //     (pbap_pce_pull_vcard_entry_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_vcard_entry_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+    // (void)memset_s(thr_par, sizeof(pbap_pce_pull_vcard_entry_param_t), 0, sizeof(pbap_pce_pull_vcard_entry_param_t));
+    // thr_par->name = (uint8_t*)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap param name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // thr_par->format = (unsigned char)atoi(params[5]); /* index = 5 */
+    // uint32_t property = (uint32_t)atoi(params[6]); /* index = 6 */
+    // sample_pbap_set_property(thr_par->property_selector, property);
+    // int filter = atoi(params[7]); /* index = 7 */
+    // if (filter != 0) {
+    //     sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    // }
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // const td_char* vcf_name = params[4]; /* index = 4 */
+
+    // if (sample_pbap_set_vcard_entry_name(bd_addr, folder, vcf, vcf_name, thr_par->name)) {
+    //     pbap_pce_pull_vcard_entry(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+/* pbap abort operation */
+ void uapi_pbap_cmd_stop_trans(void)
+{
+
+    bd_addr_t bdaddr={0};
+    OHOS::uapi_get_br_address(&bdaddr);
+
+    if (pbap_pce_get_device_connect_state(&bdaddr) != PROFILE_STATE_CONNECTED) {
+        printf("No PBAP connection selected!\n");
+        return;
+    }
+    uint32_t result = (uint32_t)pbap_pce_stop_trans(&bdaddr);
+    printf("[Line: %d] finish, ret: 0x%x\n", __LINE__, result);
+}
+
+/* pbap get connect status */
+void uapi_pbap_amd_get_conn_state(void)
+{
+    bd_addr_t bdaddr={0};
+    OHOS::uapi_get_br_address(&bdaddr);
+
+    uint32_t result = (uint32_t)pbap_pce_get_device_connect_state(&bdaddr);
+    printf("[Line: %d] finish, conn state: 0x%x\n", __LINE__, result);
+}
+
+/* PBAP service test cmd id */
+typedef enum {
+    SAMPLE_PBAP_CMD_REG_CALLBACK,       /* 注册回调 */
+    SAMPLE_PBAP_CMD_START_CLIENT,       /* 启动PBAP客户端 */
+    SAMPLE_PBAP_CMD_STOP_CLIENT,        /* 关闭PBAP客户端 */
+    SAMPLE_PBAP_CMD_PULL_PHONEBOOK,     /* 下载电话簿 */
+    SAMPLE_PBAP_CMD_PULL_VCARD_LISTING, /* 下载vcard列表 */
+    SAMPLE_PBAP_CMD_PULL_VCARD_ENTRY,   /* 下载vcard条目 */
+    SAMPLE_PBAP_CMD_STOP_TRANS,         /* 中断传输 */
+    SAMPLE_PBAP_CMD_GET_CONN_STATE,     /* 获取连接状态 */
+} sample_pbap_cmd_id;
+
+typedef void (*pbap_sample_cmd_handle_func)(const char **params, int32_t params_cnt);
+
+typedef struct {
+    sample_pbap_cmd_id id;
+    pbap_sample_cmd_handle_func func;
+} sample_pbap_hdl_info;
+
+// sample_pbap_hdl_info g_sample_pbap_hdls[] = {
+//     { SAMPLE_PBAP_CMD_REG_CALLBACK, sample_pbap_cmd_reg_callback },
+//     { SAMPLE_PBAP_CMD_START_CLIENT, sample_pbap_cmd_start_client },
+//     { SAMPLE_PBAP_CMD_STOP_CLIENT, sample_pbap_cmd_stop_client },
+//     { SAMPLE_PBAP_CMD_PULL_PHONEBOOK, sample_pbap_cmd_pull_phonebook },
+//     { SAMPLE_PBAP_CMD_PULL_VCARD_LISTING, sample_pbap_cmd_pull_vcard_listing },
+//     { SAMPLE_PBAP_CMD_PULL_VCARD_ENTRY, sample_pbap_cmd_pull_vcard_entry },
+//     { SAMPLE_PBAP_CMD_STOP_TRANS, sample_pbap_cmd_stop_trans },
+//     { SAMPLE_PBAP_CMD_GET_CONN_STATE, sample_pbap_amd_get_conn_state },
+// };
+
+// void bt_pbap_service_sample_cmd(uint32_t cmd_id, const char **params, int32_t params_cnt)
+// {
+//     printf("id: %u\n", cmd_id);
+//     uint32_t hdl_cnt = sizeof(g_sample_pbap_hdls) / sizeof(sample_pbap_hdl_info);
+//     for (uint32_t i = 0; i < hdl_cnt; i++) {
+//         if (g_sample_pbap_hdls[i].id == cmd_id) {
+//             g_sample_pbap_hdls[i].func(params, params_cnt);
+//             return;
+//         }
+//     }
+//     printf("invalid cmd_id = %d \n", cmd_id);
+// }
+
+#ifdef  __cplusplus
+}
+#endif
+
index 5e1ca89..bd59fb6 100644 (file)
@@ -57,6 +57,9 @@ MainBluetoothView *MainBluetoothView::GetInstance()
 \r
 void MainBluetoothView::OnStart()\r
 {\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::~OnStart");\r
+   \r
+\r
     BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();\r
     if (bluetoothModel == nullptr) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView::InitView bluetoothModel nullptr err");\r
@@ -69,14 +72,16 @@ void MainBluetoothView::OnStart()
     int16_t unusedValue = BLUETOOTHEVIEW_MAX;\r
     bool ret = bluetoothCaseList.IsEmpty();\r
     if (!ret) {\r
-        ChangeView(unusedValue, BLUETOOTHDEVICELISTVIEW);\r
+        ChangeView(unusedValue, BLUETOOTHDEVICELISTVIEW); //已连接设备列表不为空 ->切换到“已连接过的蓝牙设备列表视图”\r
     } else {\r
-        ChangeView(unusedValue, BLUETOOTHEARPHONEVIEW);\r
+        ChangeView(unusedValue, BLUETOOTHEARPHONEVIEW);//若一个都没有连接过就进行搜索\r
     }\r
-    Draw();\r
+   RootView::GetInstance()->Invalidate();\r
     return;\r
 }\r
 \r
+\r
+/*跳转到已连接过的蓝牙设备列表视图*/\r
 bool MainBluetoothView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView)\r
 {\r
     UNUSED(hideView);\r
@@ -87,24 +92,26 @@ bool MainBluetoothView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothDeviceListView new fail");\r
             return false;\r
         }\r
-        // init view\r
-        UIViewGroup *group = bluetoothDeviceListView->InitShowUpView();\r
+        UIViewGroup *group = bluetoothDeviceListView->CreateBluetoothDeviceListView();\r
         if (group == nullptr) {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Device group nullptr fail");\r
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
-    } else {\r
-        // 刷新列表\r
-        UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList();\r
-        if (deviceList == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr");\r
-            return false;\r
-        }\r
-        deviceList->RefreshList();\r
+       RootView::GetInstance()->Add(container[thisView]);\r
+    } \r
+    // else {\r
+    //     // 刷新列表\r
+    //     UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList();\r
+    //     if (deviceList == nullptr) {\r
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr");\r
+    //         return false;\r
+    //     }\r
+    //     deviceList->RefreshList();\r
+    // }\r
+    if(bluetoothDeviceListView) {\r
+        bluetoothDeviceListView->RefreshBluetoothDeviceListView();\r
     }\r
-    bluetoothDeviceListView->RefreshText();\r
     return true;\r
 }\r
 \r
@@ -119,13 +126,13 @@ bool MainBluetoothView::ChangeTipsFailMessageView(int16_t hideView, int16_t this
             return false;\r
         }\r
         // init view\r
-        UIViewGroup *group = tipsFailMessageView->ShowUpViewInit();\r
+        UIViewGroup *group = tipsFailMessageView->CreateTipsFailMessageView();\r
         if (group == nullptr) {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     return true;\r
 }\r
@@ -147,7 +154,7 @@ bool MainBluetoothView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     if (bluetoothReconnectView == nullptr) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr");\r
@@ -158,6 +165,7 @@ bool MainBluetoothView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t
     return true;\r
 }\r
 \r
+//连接成功界面\r
 bool MainBluetoothView::ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView)\r
 {\r
     UNUSED(hideView);\r
@@ -175,11 +183,12 @@ bool MainBluetoothView::ChangeTipsSuccMessageView(int16_t hideView, int16_t this
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     return true;\r
 }\r
 \r
+//搜索界面\r
 bool MainBluetoothView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView)\r
 {\r
     UNUSED(hideView);\r
@@ -196,7 +205,7 @@ bool MainBluetoothView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t th
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     // 动画开始\r
     bluetoothEarPhoneView->BtAnimatorStart();\r
@@ -205,6 +214,7 @@ bool MainBluetoothView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t th
     return true;\r
 }\r
 \r
+//扫描出来的设备列表界面\r
 bool MainBluetoothView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView)\r
 {\r
     if (container[thisView] == nullptr) {\r
@@ -220,17 +230,21 @@ bool MainBluetoothView::ChangeBluetoothEarListView(int16_t hideView, int16_t thi
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
-    } else {\r
-        // 刷新列表\r
-        UIList *scanList = bluetoothEarListView->GetScanUIList();\r
-        if (scanList == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr");\r
-            return false;\r
-        }\r
-        scanList->RefreshList();\r
+       RootView::GetInstance()->Add(container[thisView]);\r
+    } \r
+    // else {\r
+    //     // 刷新列表\r
+    //     UIList *scanList = bluetoothEarListView->GetScanUIList();\r
+    //     if (scanList == nullptr) {\r
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr");\r
+    //         return false;\r
+    //     }\r
+    //     scanList->RefreshList();\r
+    // }\r
+    // ResetEarListView(hideView);\r
+    if(bluetoothEarListView) {\r
+        bluetoothEarListView->RefreshBluetoothEarListView();\r
     }\r
-    ResetEarListView(hideView);\r
     return true;\r
 }\r
 \r
@@ -245,17 +259,18 @@ bool MainBluetoothView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thi
             return false;\r
         }\r
         // init view\r
-        UIViewGroup *group = bluetoothOptionsView->InitShowUpView();\r
+        UIViewGroup *group = bluetoothOptionsView->CreateBluetoothOptionsView();\r
         if (group == nullptr) {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     return true;\r
 }\r
 \r
+//重新连接界面\r
 bool MainBluetoothView::ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView)\r
 {\r
     UNUSED(hideView);\r
@@ -272,7 +287,7 @@ bool MainBluetoothView::ChangeBluetoothReconnectView(int16_t hideView, int16_t t
             return false;\r
         }\r
         container[thisView] = group;\r
-        AddViewToRootContainer(container[thisView]);\r
+       RootView::GetInstance()->Add(container[thisView]);\r
     }\r
     BluetoothModel::GetInstance()->SetTagDisconnectView(true);\r
     bluetoothReconnectView->RefreshBluetoothNameLabel();\r
@@ -280,6 +295,7 @@ bool MainBluetoothView::ChangeBluetoothReconnectView(int16_t hideView, int16_t t
     return true;\r
 }\r
 \r
+/*连接失败和蓝牙重连视图都跳转到已连接的蓝牙设备列表视图*/\r
 void MainBluetoothView::CorrespondingJump(int16_t hideView)\r
 {\r
     BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();\r
@@ -287,17 +303,19 @@ void MainBluetoothView::CorrespondingJump(int16_t hideView)
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothModel == nullptr");\r
             return;\r
         }\r
-    if (bluetoothModel->GetTagReconnectJump()) {\r
-        ChangeView(hideView, BLUETOOTHEOPTIONSVIEW);\r
-    } else {\r
-        std::list<BluetoothCaseInfo> &bluetoothScanList = BluetoothModel::GetInstance()->GetCase();\r
-        bool ret = bluetoothScanList.empty();\r
-        if (!ret) {\r
-            ChangeView(hideView, BLUETOOTHEARLISTVIEW);\r
-        } else {\r
-            ChangeView(hideView, BLUETOOTHEARPHONEVIEW);\r
-        }\r
-    }\r
+    ChangeView(hideView, BLUETOOTHDEVICELISTVIEW);/*查看已连接过的蓝牙耳机设备视图*/\r
+\r
+    // if (bluetoothModel->GetTagReconnectJump()) {\r
+    //     ChangeView(hideView, BLUETOOTHEOPTIONSVIEW);/*查看已连接过的蓝牙耳机设备视图*/\r
+    // } else {\r
+    //     std::list<BluetoothCaseInfo> &bluetoothScanList = BluetoothModel::GetInstance()->GetCase();\r
+    //     bool ret = bluetoothScanList.empty();\r
+    //     if (!ret) {\r
+    //         ChangeView(hideView, BLUETOOTHEARLISTVIEW);/*扫描出的耳机列表界面*/\r
+    //     } else {\r
+    //         ChangeView(hideView, BLUETOOTHEARPHONEVIEW);/*搜索界面*/\r
+    //     }\r
+    // }\r
     return;\r
 }\r
 \r
@@ -306,7 +324,8 @@ void MainBluetoothView::ChangeSettingView()
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::ChangeSettingView");\r
     BluetoothModel::GetInstance()->SetTagConnectView(false);\r
     BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);\r
-    NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+    // NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+    NativeAbility::GetInstance().Back();\r
 }\r
 \r
 void MainBluetoothView::DropEarPhoneView()\r
@@ -319,9 +338,9 @@ void MainBluetoothView::DropEarPhoneView()
     bluetoothEarPhoneView->StopBtDiscovery();\r
     bool ret = BluetoothModel::GetInstance()->IsTagReturnToDeviceListView();\r
     if (ret) {\r
-        ChangeView(BLUETOOTHEARPHONEVIEW, BLUETOOTHDEVICELISTVIEW);\r
+        ChangeView(BLUETOOTHEARPHONEVIEW, BLUETOOTHDEVICELISTVIEW);//返回到已连接的设备列表界面\r
     } else {\r
-        ChangeSettingView();\r
+        ChangeSettingView(); //退出蓝牙耳机界面\r
     }\r
 }\r
 \r
@@ -353,32 +372,33 @@ void MainBluetoothView::DropEarListView()
 \r
 void MainBluetoothView::DropView(UIView& view)\r
 {\r
-    if (&view == container[BLUETOOTHEARPHONEVIEW]) {\r
+    if (&view == container[BLUETOOTHEARPHONEVIEW]) { \r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[BLUETOOTHEARPHONEVIEW]");\r
-        DropEarPhoneView();\r
+        DropEarPhoneView();//搜索界面右滑退出操作\r
     } else if (&view == container[BLUETOOTHEOPTIONSVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[BLUETOOTHEOPTIONSVIEW]");\r
-        ChangeView(BLUETOOTHEOPTIONSVIEW, BLUETOOTHDEVICELISTVIEW);\r
+        ChangeView(BLUETOOTHEOPTIONSVIEW, BLUETOOTHDEVICELISTVIEW);//查看已连接过的蓝牙耳机设备视图->已连接过的蓝牙耳机设备视图\r
     } else if (&view == container[TIPSCONNFAILMESSAGEVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[TIPSCONNFAILMESSAGEVIEW]");\r
-        CorrespondingJump(TIPSCONNFAILMESSAGEVIEW);\r
+        ChangeView(TIPSCONNFAILMESSAGEVIEW, BLUETOOTHDEVICELISTVIEW);/*连接失败的提示视图 ->已连接过的蓝牙耳机设备视图*/\r
     } else if (&view == container[TIPSSUCCMESSAGEVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[TIPSSUCCMESSAGEVIEW]");\r
-        ChangeView(TIPSSUCCMESSAGEVIEW, BLUETOOTHDEVICELISTVIEW);\r
+        ChangeView(TIPSSUCCMESSAGEVIEW, BLUETOOTHDEVICELISTVIEW);//连接成功的提示视图->已连接过的蓝牙设备列表视图\r
     } else if (&view == container[TIPSFAILMESSAGEVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[TIPSFAILMESSAGEVIEW]");\r
-        ChangeView(TIPSFAILMESSAGEVIEW, BLUETOOTHEARPHONEVIEW);\r
+        // ChangeView(TIPSFAILMESSAGEVIEW, BLUETOOTHEARPHONEVIEW);//未搜索到蓝牙耳机界面->搜索界面\r
+        ChangeSettingView();//未搜索到蓝牙耳机界面->退出蓝牙耳机界面\r
     } else if (&view == container[BLUETOOTHEARLISTVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[BLUETOOTHEARLISTVIEW]");\r
         DropEarListView();\r
     } else if (&view == container[BLUETOOTHDEVICELISTVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[BLUETOOTHDEVICELISTVIEW]");\r
-        ChangeSettingView();\r
+        ChangeSettingView();//已连接过的蓝牙设备列表视图 -> 退出蓝牙耳机界面\r
     } else if (&view == container[BLUETOOTHRECONNECTVIEW]) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView::container[BLUETOOTHRECONNECTVIEW]");\r
-        CorrespondingJump(BLUETOOTHRECONNECTVIEW);\r
         BluetoothModel::GetInstance()->SetTagDisconnectView(false);\r
-        bluetoothReconnectView->BtReconnectStop();\r
+        CorrespondingJump(BLUETOOTHRECONNECTVIEW);\r
+        bluetoothReconnectView->BtReconnectStop();/*停止动画*/\r
     }\r
 }\r
 \r
@@ -395,7 +415,7 @@ void MainBluetoothView::ResetEarListView(int16_t hideView)
     } else if (hideView == TIPSCONNFAILMESSAGEVIEW) {\r
         bluetoothEarListView->SetTitleLabel("扫描完成");\r
         bluetoothEarListView->SetNewEquipmentButtonAdd();\r
-        Draw();\r
+       RootView::GetInstance()->Invalidate();\r
     }\r
 }\r
 \r
@@ -441,7 +461,7 @@ void MainBluetoothView::ChangeView(int16_t hideView, int16_t showView)
     }\r
     container[showView]->SetVisible(true);\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainBluetoothView:: ChangeView end!!!%d", showView);\r
-    Draw();\r
+   RootView::GetInstance()->Invalidate();\r
     BluetoothModel::GetInstance()->SetCurView(showView);\r
 }\r
 }\r
index 552f968..78a9d07 100644 (file)
 #include "UiConfig.h"\r
 #include "PlayersPresenter.h"\r
 #include "BluetoothPresenter.h"\r
-\r
-namespace OHOS {\r
-static TipsConnFailMessageView *g_pConnFailMessageView{nullptr};\r
-TipsConnFailMessageView::TipsConnFailMessageView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::TipsConnFailMessageView");\r
-    g_pConnFailMessageView = this;\r
-}\r
-\r
-TipsConnFailMessageView::~TipsConnFailMessageView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::~TipsConnFailMessageView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete backButton;\r
-    backButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    delete tipImg;\r
-    tipImg = nullptr;\r
-    delete tipLabel;\r
-    tipLabel = nullptr;\r
-    delete tipTwoLabel;\r
-    tipTwoLabel = nullptr;\r
-    g_pConnFailMessageView = nullptr;\r
-}\r
-\r
-TipsConnFailMessageView *TipsConnFailMessageView::GetInstance()\r
+#include "ui_resource_string.h"\r
+namespace OHOS\r
 {\r
-    return g_pConnFailMessageView;\r
-}\r
-\r
-void TipsConnFailMessageView::ShowUpTipLabel()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::ShowUpTipLabel");\r
-    if (tipLabel == nullptr) {\r
-        tipLabel = new UILabel();\r
-        if (tipLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView tipLabel new fail");\r
-            return;\r
-        }\r
-        tipLabel->SetPosition(0, 247, HORIZONTAL_RESOLUTION, 35); // 0:x 247:y 454:width 35:height.\r
-        tipLabel->SetText("请确认该设备在通信范");\r
-        tipLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data\r
-        tipLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        tipLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                           UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(tipLabel);\r
+    static TipsConnFailMessageView *g_pConnFailMessageView{nullptr};\r
+    TipsConnFailMessageView::TipsConnFailMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::TipsConnFailMessageView");\r
+        g_pConnFailMessageView = this;\r
     }\r
-    if (tipTwoLabel == nullptr) {\r
-        tipTwoLabel = new UILabel();\r
-        if (tipTwoLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView tipTwoLabel new fail");\r
-            return;\r
+\r
+    TipsConnFailMessageView::~TipsConnFailMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::~TipsConnFailMessageView");\r
+        if (group)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (tipImg)\r
+            {\r
+                delete tipImg;\r
+                tipImg = nullptr;\r
+            }\r
+            if (backButton)\r
+            {\r
+                delete backButton;\r
+                backButton = nullptr;\r
+            }\r
+            if (tipLabel)\r
+            {\r
+                delete tipLabel;\r
+                tipLabel = nullptr;\r
+            }\r
+            if (conn_fail_Label)\r
+            {\r
+                delete conn_fail_Label;\r
+                conn_fail_Label = nullptr;\r
+            }\r
+            if (bluetoothNameLabel)\r
+            {\r
+                delete bluetoothNameLabel;\r
+                bluetoothNameLabel = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
         }\r
-        tipTwoLabel->SetPosition(0, 300, HORIZONTAL_RESOLUTION, 34); // 0:x 300:y 454:width 34:height.\r
-        tipTwoLabel->SetText("围内且处于待配对状态。");\r
-        tipTwoLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data\r
-        tipTwoLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        tipTwoLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                              UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(tipTwoLabel);\r
+        g_pConnFailMessageView = nullptr;\r
     }\r
-    return;\r
-}\r
 \r
-void TipsConnFailMessageView::InitNameLabel(void)\r
-{\r
-    if (bluetoothNameLabel == nullptr) {\r
-        bluetoothNameLabel = new UILabel();\r
-        if (bluetoothNameLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothNameLabel new fail");\r
-            return;\r
-        }\r
-        bluetoothNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
-        bluetoothNameLabel->SetPosition(60, 139, 333, 45); // 60:x 139:y 333:width 45:height\r
-        bluetoothNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
-        bluetoothNameLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        bluetoothNameLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                                     UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(bluetoothNameLabel);\r
+    TipsConnFailMessageView *TipsConnFailMessageView::GetInstance()\r
+    {\r
+        return g_pConnFailMessageView;\r
     }\r
-}\r
 \r
-void TipsConnFailMessageView::ShowUpButtonBack()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::ShowUpButtonBack");\r
-    if (backButton == nullptr) {\r
-        backButton = new UILabelButton();\r
-        if (backButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView backButton new fail");\r
-            return;\r
+    void TipsConnFailMessageView::ShowUpTipLabel()\r
+    {\r
+#if 0\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::ShowUpTipLabel");\r
+        if (tipLabel == nullptr)\r
+        {\r
+            tipLabel = new UILabel();\r
+            if (tipLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView tipLabel new fail");\r
+                return;\r
+            }\r
+            tipLabel->SetPosition(0, 247, HORIZONTAL_RESOLUTION, 35); // 0:x 247:y 454:width 35:height.\r
+            tipLabel->SetText("请确认该设备在通信范");\r
+            tipLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data\r
+            tipLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+            tipLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
+                               UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+            group->Add(tipLabel);\r
         }\r
-        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-        if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
-            return;\r
+        if (tipTwoLabel == nullptr)\r
+        {\r
+            tipTwoLabel = new UILabel();\r
+            if (tipTwoLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView tipTwoLabel new fail");\r
+                return;\r
+            }\r
+            tipTwoLabel->SetPosition(0, 300, HORIZONTAL_RESOLUTION, 34); // 0:x 300:y 454:width 34:height.\r
+            tipTwoLabel->SetText("围内且处于待配对状态。");\r
+            tipTwoLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data\r
+            tipTwoLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+            tipTwoLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
+                                  UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+            group->Add(tipTwoLabel);\r
         }\r
-        backButton->SetPosition(65, 359, 324, 101); // 65:x, 359:y, 324:width 101:height.\r
-        backButton->SetText("重试");\r
-        backButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        backButton->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
-        backButton->SetViewId(BLUETOOTH_CONN_FAIL_BACK_BUTTON);\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-            backButton->SetTextColor(Color::Red());\r
-            backButton->SetOnClickListener(clickListener);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-            backButton->SetTextColor(Color::Blue());\r
-            backButton->SetOnClickListener(clickListener2);\r
-        }\r
-        group->Add(backButton);\r
+#endif\r
+        return;\r
     }\r
-    if (tipImg == nullptr) {\r
-        tipImg = new UIImageView();\r
-        if (tipImg == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView tipImg new fail");\r
-            return;\r
+\r
+    UIViewGroup *TipsConnFailMessageView::ShowUpViewInit(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::ShowUpViewInit");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+            group->SetPosition(0, 0);\r
+            group->SetWidth(HORIZONTAL_RESOLUTION);\r
+            group->SetHeight(VERTICAL_RESOLUTION);\r
+            UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+            UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+            if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
+                return nullptr;\r
+            }\r
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+            {\r
+                group->SetOnDragListener(tipsDragListener);\r
+            }\r
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+            {\r
+                group->SetOnDragListener(tipsDragListener2);\r
+            }\r
+            group->SetViewId(TIPS_CONN_FAIL_MESSAGE_VIEW);\r
+            group->SetDraggable(true);\r
+            group->SetTouchable(true);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (titleLabel == nullptr)\r
+            {\r
+                titleLabel = new UILabelExt();\r
+                if (titleLabel == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView titleLabel new fail");\r
+                    return nullptr;\r
+                }\r
+                titleLabel->SetPosition(83, 50, 300, 35);\r
+                titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES); // 蓝牙耳机\r
+                titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+                titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                titleLabel->SetRollSpeed(23);\r
+                titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+                titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            }\r
+            /* --------------------------------- tipImg --------------------------------- */\r
+            if (tipImg == nullptr)\r
+            {\r
+                tipImg = new UIImageView();\r
+                if (tipImg == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView tipImg new fail");\r
+                    return nullptr;\r
+                }\r
+                tipImg->SetPosition(193, 121, 80, 80);\r
+                tipImg->SetSrc(PNG_ATTENTION_IMAGE);\r
+            }\r
+            /* --------------------------- bluetoothNameLabel --------------------------- */\r
+            if (bluetoothNameLabel == nullptr)\r
+            {\r
+                bluetoothNameLabel = new UILabelExt();\r
+                if (bluetoothNameLabel == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothNameLabel new fail");\r
+                    return nullptr;\r
+                }\r
+                bluetoothNameLabel->SetPosition(53, 235, 360, 35);\r
+                bluetoothNameLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+                bluetoothNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                bluetoothNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                bluetoothNameLabel->SetRollSpeed(23);\r
+                bluetoothNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);\r
+                bluetoothNameLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+            }\r
+            /* ----------------------------- conn_fail_Label ---------------------------- */\r
+            if (conn_fail_Label == nullptr)\r
+            {\r
+                conn_fail_Label = new UILabelExt();\r
+                if (conn_fail_Label == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView conn_fail_Label new fail");\r
+                    return nullptr;\r
+                }\r
+                conn_fail_Label->SetPosition(53, bluetoothNameLabel->GetY() + bluetoothNameLabel->GetHeight(), 360, 35);\r
+                conn_fail_Label->SetTextId(STR_CONNECTION_FAIL);\r
+                conn_fail_Label->SetStyle(STYLE_TEXT_FONT, 30);\r
+                conn_fail_Label->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                conn_fail_Label->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                conn_fail_Label->SetRollSpeed(23);\r
+                conn_fail_Label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                conn_fail_Label->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+                conn_fail_Label->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+            }\r
+            /* -------------------------------- tipLabel -------------------------------- */\r
+            if (tipLabel == nullptr)\r
+            {\r
+                tipLabel = new UILabelExt();\r
+                if (tipLabel == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView tipLabel new fail");\r
+                    return nullptr;\r
+                }\r
+                tipLabel->SetPosition(53, conn_fail_Label->GetY() + conn_fail_Label->GetHeight(), 360, 35);\r
+                tipLabel->SetTextId(STR_CONNECTION_FAIL);\r
+                tipLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+                tipLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                // tipLabel->SetText("请确认该设备在通信范围内且处于待配对状态");\r
+                tipLabel->SetTextId(STR_BTEARPHONE_CONN_FAIL_TIP);\r
+                tipLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                // tipLabel->SetRollSpeed(23);\r
+                tipLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                tipLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+                tipLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+            }\r
+            /* ------------------------------- backButton ------------------------------- */\r
+            if (backButton == nullptr)\r
+            {\r
+                backButton = new UILabelButtonExt();\r
+                if (backButton == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView backButton new fail");\r
+                    return nullptr;\r
+                }\r
+                UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+                UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+                if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
+                    return nullptr;\r
+                }\r
+                backButton->SetPosition(0, 366, 466, 100);\r
+                backButton->SetTextId(STR_RETRY); // 重试\r
+                backButton->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                backButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                backButton->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);\r
+                backButton->SetViewId(BLUETOOTH_CONN_FAIL_BACK_BUTTON);\r
+                if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+                {\r
+                    backButton->SetOnClickListener(clickListener);\r
+                }\r
+                else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+                {\r
+                    backButton->SetOnClickListener(clickListener2);\r
+                }\r
+            }\r
+            group->Add(titleLabel);\r
+            group->Add(tipImg);\r
+            group->Add(bluetoothNameLabel);\r
+            group->Add(conn_fail_Label);\r
+            group->Add(tipLabel);\r
+            group->Add(backButton);\r
         }\r
-        tipImg->SetPosition(178, 20, 90, 90); // 178:x 20:y 90:width 90:height.\r
-        tipImg->SetSrc(PNG_GANTAN);\r
-        group->Add(tipImg);\r
+        return group;\r
     }\r
-    return;\r
-}\r
 \r
-UIViewGroup *TipsConnFailMessageView::ShowUpViewInit(void)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::ShowUpViewInit");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
-            return nullptr;\r
+    // 刷新设备名称\r
+    void TipsConnFailMessageView::RefreshNameLabel(const bd_addr_t &bdAddr)\r
+    {\r
+        BluetoothCaseInfo caseInfo;\r
+        (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN, bdAddr.addr, BD_ADDR_LEN);\r
+        bool ret = BluetoothModel::GetInstance()->FindNameFromList(&caseInfo);\r
+        if (!ret)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView FindNameFromList fail");\r
+            return;\r
         }\r
-        group->SetPosition(0, 0);\r
-        group->SetWidth(HORIZONTAL_RESOLUTION);\r
-        group->SetHeight(VERTICAL_RESOLUTION);\r
-    }\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView titleLabel new fail");\r
-            return nullptr;\r
+        if (bluetoothNameLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::RefreshNameLabel bluetoothNameLabel == nullptr");\r
+            return;\r
         }\r
-        titleLabel->SetPosition(0, 189, HORIZONTAL_RESOLUTION, 45); // 0:x 189:y 454:width 45:height.\r
-        titleLabel->SetText("连接失败");\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                             UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(titleLabel);\r
-    }\r
-    ShowUpButtonBack();\r
-    ShowUpTipLabel();\r
-    InitNameLabel();\r
-    UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
-        return nullptr;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(tipsDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(tipsDragListener2);\r
-    }\r
-    group->SetViewId(TIPS_CONN_FAIL_MESSAGE_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
-\r
-void TipsConnFailMessageView::RefreshNameLabel(const bd_addr_t &bdAddr)\r
-{\r
-    BluetoothCaseInfo caseInfo;\r
-    (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN, bdAddr.addr, BD_ADDR_LEN);\r
-    bool ret = BluetoothModel::GetInstance()->FindNameFromList(&caseInfo);\r
-    if (!ret) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView FindNameFromList fail");\r
-        return;\r
-    }\r
-    if (bluetoothNameLabel == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsConnFailMessageView::RefreshNameLabel bluetoothNameLabel == nullptr");\r
-        return;\r
+        bluetoothNameLabel->SetText(reinterpret_cast<const char *>(caseInfo.deviceName));\r
     }\r
-    bluetoothNameLabel->SetText(reinterpret_cast<const char *>(caseInfo.deviceName));\r
-}\r
 }
\ No newline at end of file
index 4d732b8..c8bd189 100644 (file)
 #include "BluetoothModel.h"\r
 #include "wearable_log.h"\r
 #include "UiConfig.h"\r
-#include "PlayersPresenter.h"\r
-#include "BluetoothPresenter.h"\r
+#include "player/include/PlayersPresenter.h"\r
+#include "player/include/PlayersView.h"\r
+#include "bluetooth/include/BluetoothPresenter.h"\r
+#include "ui_resource_string.h"\r
+#include "ui_resource_image.h"\r
 \r
-namespace OHOS {\r
-static TipsFailMessageView *g_pFailMessageView{nullptr};\r
-TipsFailMessageView::TipsFailMessageView()\r
+namespace OHOS\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::TipsFailMessageView");\r
-    g_pFailMessageView = this;\r
-}\r
+    static TipsFailMessageView *g_pFailMessageView{nullptr};\r
+    TipsFailMessageView::TipsFailMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::TipsFailMessageView");\r
+        g_pFailMessageView = this;\r
+    }\r
 \r
-TipsFailMessageView::~TipsFailMessageView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::~TipsFailMessageView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete backButton;\r
-    backButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    delete tipImg;\r
-    tipImg = nullptr;\r
-    g_pFailMessageView = nullptr;\r
-}\r
+    TipsFailMessageView::~TipsFailMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::~TipsFailMessageView");\r
+        if (group != nullptr)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (btIconImage)\r
+            {\r
+                delete btIconImage;\r
+                btIconImage = nullptr;\r
+                ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_BLUETOOTH_GRAY, PLAYER_IAMGES);\r
+            }\r
+            if (btHeadsetNotFoundLabel)\r
+            {\r
+                delete btHeadsetNotFoundLabel;\r
+                btHeadsetNotFoundLabel = nullptr;\r
+            }\r
+            if (rescanButton)\r
+            {\r
+                delete rescanButton;\r
+                rescanButton = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
+        }\r
+        g_pFailMessageView = nullptr;\r
+    }\r
 \r
-TipsFailMessageView *TipsFailMessageView::GetInstance()\r
-{\r
-    return g_pFailMessageView;\r
-}\r
+    TipsFailMessageView *TipsFailMessageView::GetInstance()\r
+    {\r
+        return g_pFailMessageView;\r
+    }\r
 \r
-int TipsFailMessageView::ShowUpButtonBack()\r
-{\r
-    if (backButton == nullptr) {\r
-        backButton = new UILabelButton();\r
-        if (backButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView backButton new fail");\r
-            return OHOS_FAILURE;\r
+    bool TipsFailMessageView::CreateTipsFailMessageLabelView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageLabelView");\r
+        /* ------------------------------- titleLabel ------------------------------- */\r
+        if (titleLabel == nullptr)\r
+        {\r
+            titleLabel = new UILabelExt();\r
+            if (titleLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail");\r
+                return false;\r
+            }\r
         }\r
-        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-        if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
-            return OHOS_FAILURE;\r
+        titleLabel->SetPosition(83, 50, 300, 35);\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES); /*蓝牙耳机*/\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        /* ------------------------- btHeadsetNotFoundLabel ------------------------- */\r
+        if (btHeadsetNotFoundLabel == nullptr)\r
+        {\r
+            btHeadsetNotFoundLabel = new UILabelExt();\r
+            if (btHeadsetNotFoundLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail");\r
+                return false;\r
+            }\r
         }\r
-        backButton->SetPosition(65, 359, 324, 101); // 65:x, 359:y, 324:width 101:height\r
-        backButton->SetText("重试");\r
-        backButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        backButton->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
-        backButton->SetViewId(BLUETOOTH_FAIL_BACK_BUTTON);\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-            backButton->SetTextColor(Color::Red());\r
-            backButton->SetOnClickListener(clickListener);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-            backButton->SetTextColor(Color::Blue());\r
-            backButton->SetOnClickListener(clickListener2);\r
+        btHeadsetNotFoundLabel->SetPosition(53, 305, 360, 30);\r
+        btHeadsetNotFoundLabel->SetStyle(STYLE_TEXT_FONT, 26);\r
+        btHeadsetNotFoundLabel->SetStyle(STYLE_LINE_HEIGHT, 30);\r
+        btHeadsetNotFoundLabel->SetTextId(STR_BT_HEADSET_NOFOND); /*当前搜索不到耳机蓝牙设备*/\r
+        btHeadsetNotFoundLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+        btHeadsetNotFoundLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        btHeadsetNotFoundLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        btHeadsetNotFoundLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+\r
+        return true;\r
+    }\r
+\r
+    bool TipsFailMessageView::CreateTipsFailMessageImageView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageImageView");\r
+        if (btIconImage == nullptr)\r
+        {\r
+            btIconImage = new UIImageView();\r
+            if (btIconImage == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return false;\r
+            }\r
+            btIconImage->SetPosition(163, 126, 140, 140);\r
+            btIconImage->SetAutoEnable(false);\r
+            btIconImage->SetResizeMode(UIImageView::CENTER);\r
+            if (!PlayersView::LoadPlayerImage(btIconImage, PLAYER_BLUETOOTH_GRAY))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btIconImage LoadPlayerImage fail");\r
+                return false;\r
+            }\r
         }\r
-        group->Add(backButton);\r
+        return true;\r
     }\r
-    if (tipImg == nullptr) {\r
-        tipImg = new UIImageView();\r
-        if (tipImg == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView tipImg new fail");\r
-            return OHOS_FAILURE;\r
+\r
+    bool TipsFailMessageView::CreateTipsFailMessageLabelButton()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageLabelButton");\r
+        if (rescanButton == nullptr)\r
+        {\r
+            rescanButton = new UILabelExt();\r
+            if (rescanButton == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView rescanButton new fail");\r
+                return false;\r
+            }\r
+            UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+            UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+            if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
+                return false;\r
+            }\r
+            rescanButton->SetPosition(73, 350, 320, 100);\r
+            rescanButton->SetTextId(STR_BT_HEADSET_RESCAN); /*重新搜索*/\r
+            rescanButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+            rescanButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+            rescanButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            rescanButton->SetViewId(BLUETOOTH_FAIL_BACK_BUTTON);\r
+            rescanButton->SetTextColor(Color::GetColorFromRGBA(0x35, 0x49, 0xff, 0xff));\r
+            // rescanButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+            rescanButton->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+            rescanButton->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+            rescanButton->SetTouchable(true);\r
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+            {\r
+                rescanButton->SetOnClickListener(clickListener);\r
+            }\r
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+            {\r
+                rescanButton->SetOnClickListener(clickListener2);\r
+            }\r
         }\r
-        tipImg->SetPosition(181, 111, 90, 90); // 181:x 111:y 90:width 90:height\r
-        tipImg->SetSrc(PNG_GANTAN);\r
-        group->Add(tipImg);\r
+        return true;\r
     }\r
-    return OHOS_SUCCESS;\r
-}\r
 \r
-UIViewGroup *TipsFailMessageView::ShowUpViewInit(void)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::ShowUpViewInit");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+    UIViewGroup *TipsFailMessageView::CreateTipsFailMessageView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageView");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+            group->SetPosition(0, 0, 466, 466);\r
+        }\r
+        UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+        UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+        if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
             return nullptr;\r
         }\r
-        group->SetPosition(0, 0);\r
-        group->SetWidth(HORIZONTAL_RESOLUTION);\r
-        group->SetHeight(VERTICAL_RESOLUTION);\r
-    }\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView titleLabel new fail");\r
+        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+        {\r
+            group->SetOnDragListener(tipsDragListener);\r
+        }\r
+        else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+        {\r
+            group->SetOnDragListener(tipsDragListener2);\r
+        }\r
+        group->SetViewId(TIPS_FAIL_MESSAGE_VIEW);\r
+        group->SetDraggable(true);\r
+        group->SetTouchable(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (!CreateTipsFailMessageLabelView() || !CreateTipsFailMessageImageView() || !CreateTipsFailMessageLabelButton())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsFailMessageView::CreateTipsFailMessageView fail!!");\r
             return nullptr;\r
         }\r
-        titleLabel->SetPosition(0, 234, HORIZONTAL_RESOLUTION, 45); // 0:x 234:y 454:width 45:height\r
-        titleLabel->SetText("未发现蓝牙耳机");\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                             UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        /* ----------------------------------- Add ---------------------------------- */\r
         group->Add(titleLabel);\r
+        group->Add(btIconImage);\r
+        group->Add(btHeadsetNotFoundLabel);\r
+        group->Add(rescanButton);\r
+        /* -------------------------------------------------------------------------- */\r
+        return group;\r
     }\r
-    ShowUpButtonBack();\r
-    UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
-        return nullptr;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(tipsDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(tipsDragListener2);\r
-    }\r
-    group->SetViewId(TIPS_FAIL_MESSAGE_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
 }
\ No newline at end of file
index 9bab50f..89fb015 100644 (file)
 #include "UiConfig.h"\r
 #include "PlayersPresenter.h"\r
 #include "BluetoothPresenter.h"\r
-\r
-namespace OHOS {\r
-static TipsSuccMessageView *g_pSuccMessageView{nullptr};\r
-TipsSuccMessageView::TipsSuccMessageView()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::TipsSuccMessageView");\r
-    g_pSuccMessageView = this;\r
-}\r
-\r
-TipsSuccMessageView::~TipsSuccMessageView()\r
+#include "ui_resource_string.h"\r
+namespace OHOS\r
 {\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::~TipsSuccMessageView");\r
-    group->RemoveAll();\r
-    delete titleLabel;\r
-    titleLabel = nullptr;\r
-    delete backButton;\r
-    backButton = nullptr;\r
-    delete group;\r
-    group = nullptr;\r
-    delete tipImg;\r
-    tipImg = nullptr;\r
-    g_pSuccMessageView = nullptr;\r
-}\r
-\r
-TipsSuccMessageView *TipsSuccMessageView::GetInstance()\r
-{\r
-    return g_pSuccMessageView;\r
-}\r
+    static TipsSuccMessageView *g_pSuccMessageView{nullptr};\r
+    TipsSuccMessageView::TipsSuccMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::TipsSuccMessageView");\r
+        g_pSuccMessageView = this;\r
+    }\r
 \r
-void TipsSuccMessageView::InitNameLabel(void)\r
-{\r
-    if (bluetoothNameLabel == nullptr) {\r
-        bluetoothNameLabel = new UILabel();\r
-        if (bluetoothNameLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothNameLabel new fail");\r
-            return;\r
+    TipsSuccMessageView::~TipsSuccMessageView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::~TipsSuccMessageView");\r
+        if (group)\r
+        {\r
+            group->RemoveAll();\r
+            if (titleLabel)\r
+            {\r
+                delete titleLabel;\r
+                titleLabel = nullptr;\r
+            }\r
+            if (tipImg)\r
+            {\r
+                delete tipImg;\r
+                tipImg = nullptr;\r
+            }\r
+            if (bluetoothNameLabel)\r
+            {\r
+                delete bluetoothNameLabel;\r
+                bluetoothNameLabel = nullptr;\r
+            }\r
+            if (conn_succ_Label)\r
+            {\r
+                delete conn_succ_Label;\r
+                conn_succ_Label = nullptr;\r
+            }\r
+            if (backButton)\r
+            {\r
+                delete backButton;\r
+                backButton = nullptr;\r
+            }\r
+            delete group;\r
+            group = nullptr;\r
         }\r
-        bluetoothNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
-        bluetoothNameLabel->SetPosition(60, 180, 333, 45); // 60:x 180:y 333:width 45:height\r
-        bluetoothNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
-        bluetoothNameLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        bluetoothNameLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                                     UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(bluetoothNameLabel);\r
+        g_pSuccMessageView = nullptr;\r
     }\r
-}\r
 \r
-void TipsSuccMessageView::ShowUpButtonBack()\r
-{\r
-    if (backButton == nullptr) {\r
-        backButton = new UILabelButton();\r
-        if (backButton == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView backButton new fail");\r
-            return;\r
-        }\r
-        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
-        UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
-        if ((clickListener == nullptr) && (clickListener2 == nullptr)) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
-            return;\r
-        }\r
-        backButton->SetPosition(65, 359, 324, 101); // 65:x, 359:y, 324:width 101:height\r
-        backButton->SetText("确定");\r
-        backButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        backButton->SetImageSrc(PNG_NEW_DEVICE, PNG_NEW_DEVICE);\r
-        backButton->SetViewId(BLUETOOTH_SUCC_BACK_BUTTON);\r
-        if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-            backButton->SetTextColor(Color::Red());\r
-            backButton->SetOnClickListener(clickListener);\r
-        } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-            backButton->SetTextColor(Color::Blue());\r
-            backButton->SetOnClickListener(clickListener2);\r
-        }\r
-        group->Add(backButton);\r
+    TipsSuccMessageView *TipsSuccMessageView::GetInstance()\r
+    {\r
+        return g_pSuccMessageView;\r
     }\r
-    if (tipImg == nullptr) {\r
-        tipImg = new UIImageView();\r
-        if (tipImg == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView tipImg new fail");\r
-            return;\r
+\r
+    UIViewGroup *TipsSuccMessageView::ShowUpViewInit(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::ShowUpViewInit");\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+                return nullptr;\r
+            }\r
+            group->SetPosition(0, 0);\r
+            group->SetWidth(HORIZONTAL_RESOLUTION);\r
+            group->SetHeight(VERTICAL_RESOLUTION);\r
+            UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
+            UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
+            if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
+                return nullptr;\r
+            }\r
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+            {\r
+                group->SetOnDragListener(tipsDragListener);\r
+            }\r
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+            {\r
+                group->SetOnDragListener(tipsDragListener2);\r
+            }\r
+            group->SetViewId(TIPS_SUCC_MESSAGE_VIEW);\r
+            group->SetDraggable(true);\r
+            group->SetTouchable(true);\r
+            /* ------------------------------- titleLabel ------------------------------- */\r
+            if (titleLabel == nullptr)\r
+            {\r
+                titleLabel = new UILabelExt();\r
+                if (titleLabel == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceListView titleLabel new fail");\r
+                    return nullptr;\r
+                }\r
+                titleLabel->SetPosition(83, 50, 300, 35);\r
+                titleLabel->SetTextId(STR_BLUETOOTH_HEADPHONES); // 蓝牙耳机\r
+                titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+                titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                titleLabel->SetRollSpeed(23);\r
+                titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+                titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            }\r
+            /* --------------------------------- tipImg --------------------------------- */\r
+            if (tipImg == nullptr)\r
+            {\r
+                tipImg = new UIImageView();\r
+                if (tipImg == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView tipImg new fail");\r
+                    return nullptr;\r
+                }\r
+                tipImg->SetPosition(193, 121, 80, 80);\r
+                tipImg->SetSrc("/user/res/OK.bin");\r
+            }\r
+            /* --------------------------- bluetoothNameLabel --------------------------- */\r
+            if (bluetoothNameLabel == nullptr)\r
+            {\r
+                bluetoothNameLabel = new UILabelExt();\r
+                if (bluetoothNameLabel == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothNameLabel new fail");\r
+                    return nullptr;\r
+                }\r
+                bluetoothNameLabel->SetPosition(53, 235, 360, 35);\r
+                bluetoothNameLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+                bluetoothNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                bluetoothNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                bluetoothNameLabel->SetRollSpeed(23);\r
+                bluetoothNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);\r
+                bluetoothNameLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+            }\r
+            /* ----------------------------- conn_succ_Label ---------------------------- */\r
+            if (conn_succ_Label == nullptr)\r
+            {\r
+                conn_succ_Label = new UILabelExt();\r
+                if (conn_succ_Label == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView conn_succ_Label new fail");\r
+                    return nullptr;\r
+                }\r
+                conn_succ_Label->SetPosition(53, bluetoothNameLabel->GetY() + bluetoothNameLabel->GetHeight(), 360, 35);\r
+                // conn_succ_Label->SetText("连接成功");\r
+                conn_succ_Label->SetTextId(STR_CONNECTION_SUCC);\r
+                conn_succ_Label->SetStyle(STYLE_TEXT_FONT, 30);\r
+                conn_succ_Label->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                conn_succ_Label->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                conn_succ_Label->SetRollSpeed(23);\r
+                conn_succ_Label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                conn_succ_Label->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+                conn_succ_Label->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+            }\r
+            /* ------------------------------- backButton ------------------------------- */\r
+            if (backButton == nullptr)\r
+            {\r
+                backButton = new UILabelButtonExt();\r
+                if (backButton == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView backButton new fail");\r
+                    return nullptr;\r
+                }\r
+                UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
+                UIView::OnClickListener *clickListener2 = (UIView::OnClickListener *)OHOS::BluetoothPresenter::GetInstance();\r
+                if ((clickListener == nullptr) && (clickListener2 == nullptr))\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
+                    return nullptr;\r
+                }\r
+                backButton->SetPosition(0, 366, 466, 100);\r
+                backButton->SetTextId(STR_OK); // 确定\r
+                backButton->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                backButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                backButton->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);\r
+                backButton->SetViewId(BLUETOOTH_SUCC_BACK_BUTTON);\r
+                backButton->SetTextColor(Color::GetColorFromRGBA(0x35, 0x49, 0xff, 0xff));\r
+                if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)\r
+                {\r
+                    backButton->SetOnClickListener(clickListener);\r
+                }\r
+                else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)\r
+                {\r
+                    backButton->SetOnClickListener(clickListener2);\r
+                }\r
+            }\r
+            group->Add(titleLabel);\r
+            group->Add(tipImg);\r
+            group->Add(bluetoothNameLabel);\r
+            group->Add(conn_succ_Label);\r
+            group->Add(backButton);\r
         }\r
-        tipImg->SetPosition(181, 78, 90, 90); // 181:x 78:y 90:width 90:height\r
-        tipImg->SetSrc(PNG_RIGHT);\r
-        group->Add(tipImg);\r
+        return group;\r
     }\r
-    return;\r
-}\r
 \r
-UIViewGroup *TipsSuccMessageView::ShowUpViewInit(void)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::ShowUpViewInit");\r
-    if (group == nullptr) {\r
-        group = new UIViewGroup();\r
-        if (group == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
-            return nullptr;\r
+    // 刷新设备名称\r
+    void TipsSuccMessageView::RefreshNameLabel(const bd_addr_t &bdAddr)\r
+    {\r
+        BluetoothCaseInfo caseInfo;\r
+        (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN, bdAddr.addr, BD_ADDR_LEN);\r
+        bool ret = BluetoothModel::GetInstance()->FindNameFromList(&caseInfo);\r
+        if (!ret)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView FindNameFromList fail");\r
+            return;\r
         }\r
-        group->SetPosition(0, 0);\r
-        group->SetWidth(HORIZONTAL_RESOLUTION);\r
-        group->SetHeight(VERTICAL_RESOLUTION);\r
-    }\r
-    if (titleLabel == nullptr) {\r
-        titleLabel = new UILabel();\r
-        if (titleLabel == nullptr) {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView titleLabel new fail");\r
-            return nullptr;\r
+        if (bluetoothNameLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::RefreshNameLabel bluetoothNameLabel == nullptr");\r
+            return;\r
         }\r
-        titleLabel->SetPosition(0, 244, HORIZONTAL_RESOLUTION, 45); // 0:x 244:y 454:width 45:height\r
-        titleLabel->SetText("连接成功");\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); // 40:font data\r
-        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
-        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
-                             UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
-        group->Add(titleLabel);\r
-    }\r
-    InitNameLabel();\r
-    ShowUpButtonBack();\r
-    UIView::OnDragListener *tipsDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
-    UIView::OnDragListener *tipsDragListener2 = (UIView::OnDragListener *)OHOS::BluetoothPresenter::GetInstance();\r
-    if ((tipsDragListener == nullptr) && (tipsDragListener2 == nullptr)) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsDragListener GetInstance fail");\r
-        return nullptr;\r
-    }\r
-    if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
-        group->SetOnDragListener(tipsDragListener);\r
-    } else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING) {\r
-        group->SetOnDragListener(tipsDragListener2);\r
-    }\r
-    group->SetViewId(TIPS_SUCC_MESSAGE_VIEW);\r
-    group->SetDraggable(true);\r
-    group->SetTouchable(true);\r
-    return group;\r
-}\r
-\r
-void TipsSuccMessageView::RefreshNameLabel(const bd_addr_t &bdAddr)\r
-{\r
-    BluetoothCaseInfo caseInfo;\r
-    (void)memcpy_s(caseInfo.addr, BD_ADDR_LEN, bdAddr.addr, BD_ADDR_LEN);\r
-    bool ret = BluetoothModel::GetInstance()->FindNameFromList(&caseInfo);\r
-    if (!ret) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView FindNameFromList fail");\r
-        return;\r
-    }\r
-    if (bluetoothNameLabel == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TipsSuccMessageView::RefreshNameLabel bluetoothNameLabel == nullptr");\r
-        return;\r
+        bluetoothNameLabel->SetText(reinterpret_cast<const char *>(caseInfo.deviceName));\r
     }\r
-    bluetoothNameLabel->SetText(reinterpret_cast<const char *>(caseInfo.deviceName));\r
-}\r
 }
\ No newline at end of file