* Create: 2021-07-26
*/
#include <string>
- #include "bluetooth/include/BluetoothDeviceCaseListAdapter.h"
- #include "bluetooth/include/BluetoothOptionsView.h"
+ #include "bluetooth/BluetoothDeviceCaseListAdapter.h"
+ #include "bluetooth/BluetoothOptionsView.h"
#include "gfx_utils/list.h"
- #include "bluetooth/include/BluetoothModel.h"
+ #include "bluetooth/BluetoothModel.h"
#include "wearable_log.h"
#include "UiConfig.h"
- #include "bluetooth/include/BluetoothPresenter.h"
- #include "callerlog/include/CallerLogModel.h"
- #include "custom_utils.h"
- #include "notification_manager.h"
+ #include "bluetooth/BluetoothPresenter.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_CAT1_HFP_AG_SERV
+#include "phoneservice/include/PhoneAGService.h"
+#endif
- namespace OHOS
+ uint16_t BluetoothDeviceCaseListAdapter::GetCount()
{
- class BluetoothDeviceOnClickListListener;
- static BluetoothDeviceOnClickListListener *g_btOnClickListListener = nullptr;
- class BluetoothDeviceOnClickListListener : public UIView::OnClickListener
+ return BluetoothModel::GetInstance()->GetConnedDevicesCase().Size();
+ }
+
+ class BluetoothDeviceOnClickListListener : public UIView::OnClickListener {
+ public:
+ BluetoothDeviceOnClickListListener(BluetoothCaseInfo *bluetoothInfo)
{
- 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;
- }
+ 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;
}
- 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);
+ }
+ ~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;
}
- #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();
- }
+ 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;
}
- #endif
-
- return true;
+ mainBluetoothView->ChangeView(BLUETOOTHDEVICELISTVIEW, BLUETOOTHEOPTIONSVIEW);
}
-
- private:
- BluetoothCaseInfo bluetoothInfo_{};
- bd_addr_t addr;
- };
-
- BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter()
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter");
- if (g_btOnClickListListener != nullptr)
- {
- delete g_btOnClickListListener;
- g_btOnClickListListener = nullptr;
+ 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;
}
- uint16_t BluetoothDeviceCaseListAdapter::GetCount()
- {
- return BluetoothModel::GetInstance()->GetConnedDevicesCase().Size();
- }
+ 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,%d,%d", index, bluetoothCaseList.Size());
+
+ 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;
+ }
+ 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;
}
- 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);
+ } else {
+ item = static_cast<BluetoothItemView *>(inView);
+ }
+ item->SetItemInfo(itemData, false);
+ item->SetConnectionstatus(itemData);
- 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;
+ 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;
}
+ 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