Merge #1628 into sdk602patch0911 from refs/changes/1628/head 1630/target/1 1631/target/1 1632/target/1
author罗正 <1732036298@qq.com>
Tue, 14 Jan 2025 16:48:47 +0000 (16:48 +0000)
committer袁清梦 <3449750381@qq.com>
Tue, 14 Jan 2025 16:48:47 +0000 (16:48 +0000)
Code review from 罗正

* refs/changes/1628/head: (4 commits squashed)

  - 优化音乐播放器界面的播放暂停按钮初UI始化状态

  - Merge branch &#39;sdk602patch0911&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0911

  - 解决蓝牙耳机界面内存泄露问题

  - 解决电话界面内存泄露

Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: Caisking <3449750381@qq.com>
Reviewed-by: 罗正 <1732036298@qq.com>
Reviewed-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: aliyun6865282430 <1624952103@qq.com>
Merged-by: Caisking <3449750381@qq.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1628
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/makephone/src/CallingView.cpp
code/sdk/application/wearable/fd230app/nativeui/phone/include/PhoneCallView.h
code/sdk/application/wearable/fd230app/nativeui/phone/src/PhoneCallView.cpp

index ed75a08..dfda43d 100644 (file)
 #include "UiConfig.h"
 #include "BluetoothPresenter.h"
 
-namespace OHOS {
-BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter()
+namespace OHOS
 {
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::~BluetoothDeviceCaseListAdapter");
-    // UIView::OnClickListener *click = item->GetOnClickListener();
-    // if (click != nullptr) {
-    //     delete click;
-    //     click = nullptr;
-    // }
-    if (listener != nullptr) {
-        delete listener;
-        listener = nullptr;
-    }
-}
-
-uint16_t BluetoothDeviceCaseListAdapter::GetCount()
-{
-    return BluetoothModel::GetInstance()->GetConnedDevicesCase().Size();
-}
-
-class BluetoothDeviceOnClickListListener : public UIView::OnClickListener {
-public:
-    BluetoothDeviceOnClickListListener(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
+    class BluetoothDeviceOnClickListListener;
+    static BluetoothDeviceOnClickListListener *g_btOnClickListListener = nullptr;
+    class BluetoothDeviceOnClickListListener : public UIView::OnClickListener
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClickListListener");
-        UNUSED(event);
-        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_);
-        /* 点击事件 */
-        // 跳转可选页
-        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);
-        } 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;
+    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(view.GetViewType() == UIViewType::UI_BUTTON)
+        }
+        bool OnClick(UIView &view, const ClickEvent &event) override
+        {
+            UNUSED(event);
+            BluetoothItemView *itemView = static_cast<BluetoothItemView *>(view.GetParent());
+            BluetoothCaseInfo *g_BluetoothCaseInfo = itemView->GetItemInfo();
+            SetItemInfo(g_BluetoothCaseInfo); // 保存点击的设备信息
+            BluetoothModel::GetInstance()->SetTempMacValue(&bluetoothInfo_);
+            if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS)
             {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UIViewType::UI_BUTTON,%s",reinterpret_cast<const char *>(bluetoothInfo_.deviceName));
-                bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "lastAddr:%02X %02X %02X * * *",
-                lastAddr->addr[0],lastAddr->addr[1],lastAddr->addr[2]);
-
-                bool ret = bt_is_acl_connected(lastAddr);
-                WEARABLE_LOGE(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 (!( 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);
+                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);
             }
-            else if(view.GetViewType() == UIViewType::UI_IMAGE_VIEW) /*点击的是图片*/
+            else if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERSETTING)
             {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UIViewType::UI_IMAGE_VIEW");
-                mainBluetoothView->ChangeView(BluetoothModel::GetInstance()->GetCurView(), BLUETOOTHEOPTIONSVIEW);
-                BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();
-                if (bluetoothOptionsView == nullptr) {
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothOptionsView new fail");
+                MainBluetoothView *mainBluetoothView = MainBluetoothView::GetInstance();
+                if (mainBluetoothView == nullptr)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceOnClick mainBluetoothView GetInstance fail");
                     return false;
                 }
-                bluetoothOptionsView->SetCurrentAddr(addr);
-                bluetoothOptionsView->RefreshText();
+                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 (!(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();
+                }
             }
-        }
-       
-        return true;
-    }
 
-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_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothDeviceCaseListAdapter::GetView err,%d,%d",index,bluetoothCaseList.Size());
-        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->SetViewIndex(index);
-    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->SetOnClickListener(listener);
-    item->SetViewOnClickListener(listener);
-    return item;
-}
 } // namespace OHOS
\ No newline at end of file
index 471bfc2..4355847 100644 (file)
@@ -83,6 +83,9 @@ CallingView::~CallingView()
     imagedial = nullptr;
 
     
+    delete imageheadset;
+    imageheadset = nullptr;
+
     delete imageperson;
     imageperson = nullptr;
     
index 59b8448..8878f6d 100644 (file)
@@ -45,7 +45,6 @@ namespace OHOS
     // 定义包含按钮初始化参数的结构体\r
     struct ButtonInitParams\r
     {\r
-        UIButton *button;\r
         const char *buttonNumber;\r
         int leftPos;\r
         int topPos;\r
@@ -74,7 +73,7 @@ namespace OHOS
         void Init();\r
         void DeInit();\r
         void container_child_init();\r
-        void initButton(const ButtonInitParams &params);\r
+        UIButton* initButton(const ButtonInitParams &params);\r
         void UpdateLabel(const std::string &text);\r
         void container_child_SetVisible(bool);\r
         void start_call_roll_timer();\r
@@ -92,21 +91,7 @@ namespace OHOS
         UILabel *label_ = nullptr;\r
         UILabel *label_4G = nullptr;\r
         UILabel *label_BT = nullptr;\r
-        UIButton *button1_ = nullptr;\r
-        UIButton *button2_ = nullptr;\r
-        UIButton *button3_ = nullptr;\r
-        UIButton *button4_ = nullptr;\r
-        UIButton *button5_ = nullptr;\r
-        UIButton *button6_ = nullptr;\r
-        UIButton *button7_ = nullptr;\r
-        UIButton *button8_ = nullptr;\r
-        UIButton *button9_ = nullptr;\r
-        UIButton *button0_ = nullptr;\r
-        UIButton *buttoncall_ = nullptr;\r
-        UIButton *buttondel_ = nullptr;\r
-        UIButton  *button_4G =NULL;\r
-        UIButton  *button_BT =NULL;\r
-        \r
+        UIButton *button_[12] = {nullptr};\r
     };\r
 } // namespace OHOS\r
 #endif\r
index d98534d..b6e1da1 100644 (file)
@@ -32,13 +32,9 @@ namespace OHOS
         return g_pPhoneCallView;\r
     }\r
 \r
-    void PhoneCallView ::initButton(const ButtonInitParams &params)\r
+    UIButton* PhoneCallView ::initButton(const ButtonInitParams &params)\r
     {\r
-        UIButton *button = params.button;\r
-        if (button == nullptr)\r
-        {\r
-            button = new UIButton();\r
-        }\r
+        UIButton *button = new UIButton();\r
 \r
         const char *buttonNumber = params.buttonNumber;\r
         int leftPos = params.leftPos;\r
@@ -69,6 +65,7 @@ namespace OHOS
         container_->Add(button);\r
         button->SetVisible(true);\r
 \r
+        return button;\r
         \r
     }\r
 \r
@@ -81,12 +78,6 @@ namespace OHOS
 \r
     void PhoneCallView::Init()\r
     {\r
-        if (container_ == nullptr)\r
-        {\r
-            container_ = new UIViewGroup();\r
-            container_->SetPosition(0, 0, 466, 466);\r
-            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
-        }\r
         // Add Label to App\r
         if (label_ == nullptr)\r
         {\r
@@ -110,23 +101,22 @@ namespace OHOS
         container_->Add(label_);\r
         label_->SetVisible(true);\r
         ButtonInitParams buttonParams[] = {\r
-            {button1_, BUTTON1, 68, 104, 104, 70, button1Path, button1Path},\r
-            {button2_, BUTTON2, 181, 104, 104, 70, button2Path, button2Path},\r
-            {button3_, BUTTON3, 293, 104, 104, 70, button3Path, button3Path},\r
-            {button4_, BUTTON4, 69, 182, 104, 70, button4Path, button4Path},\r
-            {button5_, BUTTON5, 182, 182, 104, 70, button5Path, button5Path},\r
-            {button6_, BUTTON6, 293, 182, 104, 70, button6Path, button6Path},\r
-            {button7_, BUTTON7, 69, 260, 104, 70, button7Path, button7Path},\r
-            {button8_, BUTTON8, 181, 260, 104, 70, button8Path, button8Path},\r
-            {button9_, BUTTON9, 293, 260, 104, 70, button9Path, button9Path},\r
-            {button0_, BUTTON0, 181, 338, 104, 70, button0Path, button0Path},\r
-            {buttoncall_, BUTTONCALL, 69, 338, 104, 70, buttonCallPath, buttonCallPath},\r
-            {buttondel_, BUTTONDEL, 293, 338, 104, 70, buttonDelPath, buttonDelPath},\r
+            { BUTTON1, 68, 104, 104, 70, button1Path, button1Path},\r
+            {BUTTON2, 181, 104, 104, 70, button2Path, button2Path},\r
+            { BUTTON3, 293, 104, 104, 70, button3Path, button3Path},\r
+            { BUTTON4, 69, 182, 104, 70, button4Path, button4Path},\r
+            { BUTTON5, 182, 182, 104, 70, button5Path, button5Path},\r
+            { BUTTON6, 293, 182, 104, 70, button6Path, button6Path},\r
+            { BUTTON7, 69, 260, 104, 70, button7Path, button7Path},\r
+            { BUTTON8, 181, 260, 104, 70, button8Path, button8Path},\r
+            { BUTTON9, 293, 260, 104, 70, button9Path, button9Path},\r
+            { BUTTON0, 181, 338, 104, 70, button0Path, button0Path},\r
+            { BUTTONCALL, 69, 338, 104, 70, buttonCallPath, buttonCallPath},\r
+            { BUTTONDEL, 293, 338, 104, 70, buttonDelPath, buttonDelPath},\r
         };\r
 \r
-        for (const auto &params : buttonParams)\r
-        {\r
-            initButton(params);\r
+        for(int i = 0;i<12;i++){\r
+            button_[i] = initButton(buttonParams[i]);\r
         }\r
     }\r
     static int8_t  roll_falg=0;//0.1s一次变换\r
@@ -213,89 +203,29 @@ namespace OHOS
         {\r
             container_->RemoveAll();\r
         }\r
-        if(container_child!=NULL)\r
+        if(container_child!=nullptr)\r
         {\r
             container_child->RemoveAll();\r
         }\r
-        if(button_4G!=NULL)\r
-        {\r
-            delete button_4G;\r
-            button_4G = nullptr;\r
-        }\r
-        if(button_BT!=NULL)\r
+        if(label_!=nullptr)\r
         {\r
-            delete button_BT;\r
-            button_BT = nullptr;\r
+            delete label_;\r
+            label_ = nullptr;\r
         }\r
-        if(label_4G!=NULL)\r
+        if(label_4G!=nullptr)\r
         {\r
             delete label_4G;\r
             label_4G = nullptr;\r
         }\r
-        if(label_BT!=NULL)\r
+        if(label_BT!=nullptr)\r
         {\r
             delete label_BT;\r
             label_BT = nullptr;\r
         }\r
-        if (button1_ != nullptr)\r
-        {\r
-            delete button1_;\r
-            button1_ = nullptr;\r
-        }\r
-        if (button2_ != nullptr)\r
-        {\r
-            delete button2_;\r
-            button2_ = nullptr;\r
-        }\r
-        if (button3_ != nullptr)\r
-        {\r
-            delete button3_;\r
-            button3_ = nullptr;\r
-        }\r
-        if (button4_ != nullptr)\r
-        {\r
-            delete button4_;\r
-            button4_ = nullptr;\r
-        }\r
-        if (button5_ != nullptr)\r
-        {\r
-            delete button5_;\r
-            button5_ = nullptr;\r
-        }\r
-        if (button6_ != nullptr)\r
-        {\r
-            delete button6_;\r
-            button6_ = nullptr;\r
-        }\r
-        if (button7_ != nullptr)\r
-        {\r
-            delete button7_;\r
-            button7_ = nullptr;\r
-        }\r
-        if (button8_ != nullptr)\r
-        {\r
-            delete button8_;\r
-            button8_ = nullptr;\r
-        }\r
-        if (button9_ != nullptr)\r
-        {\r
-            delete button9_;\r
-            button9_ = nullptr;\r
-        }\r
-        if (button0_ != nullptr)\r
-        {\r
-            delete button0_;\r
-            button0_ = nullptr;\r
-        }\r
-        if (buttoncall_ != nullptr)\r
-        {\r
-            delete buttoncall_;\r
-            buttoncall_ = nullptr;\r
-        }\r
-        if (buttondel_ != nullptr)\r
+        for(int i = 0;i<12;i++)\r
         {\r
-            delete buttondel_;\r
-            buttondel_ = nullptr;\r
+            delete button_[i];\r
+            button_[i] = nullptr;\r
         }\r
         if(call_roll_timer)\r
         {\r