1/*
2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "components/ui_dialog.h"
17#include "common/screen.h"
18#include "common/typed_text.h"
19#if ENABLE_DEBUG
20#include "gfx_utils/graphic_assert.h"
21#endif
22#include "gfx_utils/graphic_log.h"
23#if ENABLE_WINDOW
24#include "window/window.h"
25#endif
26
27#if ENABLE_WINDOW
28namespace OHOS {
29class UIDialogLabelButton : public UILabelButton {
30public:
31    explicit UIDialogLabelButton(UIDialog* dialog)
32    {
33        dialog_ = dialog;
34    }
35    virtual ~UIDialogLabelButton() {}
36    virtual bool OnClickEvent(const ClickEvent& event)
37    {
38        bool ret = true;
39        if (dialog_ != nullptr) {
40            dialog_->DestroyWindow();
41            dialog_->isShowing_ = false;
42        }
43        if (onClickListener_ != nullptr) {
44            ret = onClickListener_->OnClick(*this, event);
45        }
46        return ret;
47    }
48private:
49    UIDialog* dialog_;
50};
51
52class UIDialogClickListener : public UIView::OnClickListener {
53public:
54    explicit UIDialogClickListener(UIDialog* dialog)
55    {
56        dialog_ = dialog;
57    }
58    virtual ~UIDialogClickListener() {}
59    bool OnClick(UIView& view, const ClickEvent& event) override
60    {
61        bool ret = true;
62        if ((dialog_ != nullptr) && (dialog_->dialogLayer_ != nullptr) &&
63            !dialog_->dialogLayer_->GetRect().IsContains(event.GetCurrentPos())) {
64            if (dialog_->enableAutoCancel_) {
65                dialog_->DestroyWindow();
66                dialog_->isShowing_ = false;
67            }
68            if (dialog_->onCancelListener_ != nullptr) {
69                ret = dialog_->onCancelListener_->OnClick(view, event);
70            }
71        }
72        return ret;
73    }
74private:
75    UIDialog* dialog_;
76};
77
78UIDialog::UIDialog()
79    : isShowing_(false),
80      enableAutoCancel_(false),
81      buttonNum_(0),
82      title_(nullptr),
83      text_(nullptr),
84      button1_(nullptr),
85      button2_(nullptr),
86      button3_(nullptr),
87      dialogLayer_(nullptr),
88      windowRootView_(nullptr),
89      onCancelListener_(nullptr),
90      dialogClickListener_(nullptr),
91      window_(nullptr),
92      line1_(nullptr),
93      line2_(nullptr),
94      titleText_(nullptr),
95      textText_(nullptr)
96{
97    uint16_t screenWidth = Screen::GetInstance().GetWidth();
98    uint16_t screenHeight = Screen::GetInstance().GetHeight();
99    // 100: calculate percentage
100    widthMax_ = screenWidth * MAX_WIDTH_PERCENT / 100;
101    // 100: calculate percentage
102    heightMax_ = screenHeight * MAX_HEIGHT_PERCENT / 100;
103    colorType1_ = Color::White();
104    colorType2_ = Color::White();
105    colorType3_ = Color::White();
106}
107
108UIDialog::~UIDialog()
109{
110    onCancelListener_ = nullptr;
111    if (dialogLayer_ != nullptr) {
112        dialogLayer_->RemoveAll();
113        delete dialogLayer_;
114        dialogLayer_ = nullptr;
115    }
116    if (title_ != nullptr) {
117        delete title_;
118        title_ = nullptr;
119    }
120    if (text_ != nullptr) {
121        delete text_;
122        text_ = nullptr;
123    }
124    if (button1_ != nullptr) {
125        delete button1_;
126        button1_ = nullptr;
127    }
128    if (button2_ != nullptr) {
129        delete button2_;
130        button2_ = nullptr;
131    }
132    if (button3_ != nullptr) {
133        delete button3_;
134        button3_ = nullptr;
135    }
136    if (line1_ != nullptr) {
137        delete line1_;
138        line1_ = nullptr;
139    }
140    if (line2_ != nullptr) {
141        delete line2_;
142        line2_ = nullptr;
143    }
144    if ((windowRootView_ != nullptr) && !RootView::DestroyWindowRootView(windowRootView_)) {
145        windowRootView_ = nullptr;
146    }
147    if (dialogClickListener_ != nullptr) {
148        delete dialogClickListener_;
149        dialogClickListener_ = nullptr;
150    }
151}
152
153void UIDialog::SetTitle(const char* title)
154{
155    if (title == nullptr) {
156        return;
157    }
158    titleText_ = title;
159}
160
161void UIDialog::SetText(const char* text)
162{
163    if (text == nullptr) {
164        return;
165    }
166    textText_ = text;
167}
168
169void UIDialog::SetButton(DialogButtonType buttonType, const char* text, UIView::OnClickListener* listener)
170{
171    switch (buttonType) {
172        case DialogButtonType::BUTTON_LEFT:
173            if (button1_ == nullptr) {
174                button1_ = new UIDialogLabelButton(this);
175                if (button1_ == nullptr) {
176                    GRAPHIC_LOGE("new UIDialogLabelButton fail");
177                    return;
178                }
179                button1_->SetViewId(BUTTON1_ID);
180                AddButton(buttonType, button1_, text, listener);
181            } else {
182                button1_->SetText(text);
183                button1_->SetOnClickListener(listener);
184            }
185            break;
186        case DialogButtonType::BUTTON_MID:
187            if (button2_ == nullptr) {
188                button2_ = new UIDialogLabelButton(this);
189                if (button2_ == nullptr) {
190                    GRAPHIC_LOGE("new UIDialogLabelButton fail");
191                    return;
192                }
193                button2_->SetViewId(BUTTON2_ID);
194                AddButton(buttonType, button2_, text, listener);
195            } else {
196                button2_->SetText(text);
197                button2_->SetOnClickListener(listener);
198            }
199            break;
200        case DialogButtonType::BUTTON_RIGHT:
201            if (button3_ == nullptr) {
202                button3_ = new UIDialogLabelButton(this);
203                if (button3_ == nullptr) {
204                    GRAPHIC_LOGE("new UIDialogLabelButton fail");
205                    return;
206                }
207                AddButton(buttonType, button3_, text, listener);
208            } else {
209                button3_->SetText(text);
210                button3_->SetOnClickListener(listener);
211            }
212            break;
213        default:
214            break;
215    }
216}
217
218void UIDialog::AddButton(DialogButtonType buttonType,
219                         UILabelButton* button,
220                         const char* text,
221                         UIView::OnClickListener* listener)
222{
223    buttonNum_++;
224    button->SetText(text);
225    button->SetOnClickListener(listener);
226    button->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_FONT_SIZE);
227    button->SetTextColor(Color::Blue());
228    button->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::White().full, UIButton::ButtonState::RELEASED);
229    button->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::Black().full, UIButton::ButtonState::PRESSED);
230    button->SetStyleForState(STYLE_BACKGROUND_OPA, BUTTON_PRESS_OPA, UIButton::ButtonState::PRESSED);
231    button->SetStyleForState(STYLE_BORDER_WIDTH, 0, UIButton::ButtonState::RELEASED);
232    button->SetStyleForState(STYLE_BORDER_WIDTH, 0, UIButton::ButtonState::PRESSED);
233    button->SetHeight(BUTTON_HEIGHT);
234}
235
236void UIDialog::Show()
237{
238    if (isShowing_) {
239        return;
240    }
241    SetTitleLabel();
242    SetTextLabel();
243    InitDialog();
244    AddComponents();
245    MeasureSize();
246    Layout();
247    CreateDialogWindow();
248    window_->Show();
249    isShowing_ = true;
250}
251
252void UIDialog::SetTitleLabel()
253{
254    if (titleText_ == nullptr) {
255        return;
256    }
257    if (title_ == nullptr) {
258        title_ = new UILabel();
259        if (title_ == nullptr) {
260            GRAPHIC_LOGE("new UILabel fail");
261            return;
262        }
263        title_->SetViewId(TITLE_ID);
264        title_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_FONT_SIZE);
265        title_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT);
266        title_->SetStyle(STYLE_TEXT_COLOR, Color::Black().full);
267        title_->SetStyle(STYLE_TEXT_OPA, TITLE_TEXT_OPA);
268        title_->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full);
269    }
270    title_->SetText(titleText_);
271}
272
273void UIDialog::SetTextLabel()
274{
275    if (textText_ == nullptr) {
276        return;
277    }
278    if (text_ == nullptr) {
279        text_ = new UILabel();
280        if (text_ == nullptr) {
281            GRAPHIC_LOGE("new UILabel fail");
282            return;
283        }
284        text_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TEXT_FONT_SIZE);
285        text_->SetStyle(STYLE_TEXT_COLOR, Color::Black().full);
286        text_->SetStyle(STYLE_TEXT_OPA, TITLE_TEXT_OPA);
287        text_->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full);
288    }
289    text_->SetText(textText_);
290}
291
292void UIDialog::InitDialog()
293{
294    if (dialogLayer_ == nullptr) {
295        dialogLayer_ = new UIViewGroup();
296        if (dialogLayer_ == nullptr) {
297            GRAPHIC_LOGE("new UIViewGroup fail");
298            return;
299        }
300        dialogLayer_->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full);
301    }
302    if (windowRootView_ == nullptr) {
303        windowRootView_ = RootView::GetWindowRootView();
304        windowRootView_->SetWidth(Screen::GetInstance().GetWidth());
305        windowRootView_->SetHeight(Screen::GetInstance().GetHeight());
306        windowRootView_->SetTouchable(true);
307        windowRootView_->Add(dialogLayer_);
308    }
309    if (dialogClickListener_ == nullptr) {
310        dialogClickListener_ = new UIDialogClickListener(this);
311        if (dialogClickListener_ == nullptr) {
312            GRAPHIC_LOGE("new UIDialogClickListener fail");
313            return;
314        }
315        windowRootView_->SetOnClickListener(dialogClickListener_);
316    }
317}
318
319void UIDialog::AddComponents()
320{
321    if (title_ != nullptr) {
322        dialogLayer_->Add(title_);
323    }
324    if (text_ != nullptr) {
325        dialogLayer_->Add(text_);
326    }
327    if (button1_ != nullptr) {
328        dialogLayer_->Add(button1_);
329    }
330    if (button2_ != nullptr) {
331        dialogLayer_->Add(button2_);
332    }
333    if (button3_ != nullptr) {
334        dialogLayer_->Add(button3_);
335    }
336    if (buttonNum_ > 1) {
337        line1_ = new UIView();
338        if (line1_ == nullptr) {
339            GRAPHIC_LOGE("new UIView fail");
340            return;
341        }
342        line1_->SetHeight(LINE_HEIGHT);
343        line1_->SetWidth(LINE_WIDTH);
344        line1_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
345        line1_->SetStyle(STYLE_BACKGROUND_OPA, LINE_OPA);
346        dialogLayer_->Add(line1_);
347    }
348    if (buttonNum_ == 3) { // 3: three buttons
349        line2_ = new UIView();
350        if (line2_ == nullptr) {
351            GRAPHIC_LOGE("new UIView fail");
352            return;
353        }
354        line2_->SetHeight(LINE_HEIGHT);
355        line2_->SetWidth(LINE_WIDTH);
356        line2_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
357        line2_->SetStyle(STYLE_BACKGROUND_OPA, LINE_OPA);
358        dialogLayer_->Add(line2_);
359    }
360}
361
362void UIDialog::MeasureSize()
363{
364    uint16_t width = MeasureMaxWidth();
365    uint16_t height = 0;
366
367    if (buttonNum_ > 0) {
368        // 2: there are 2 paddings horizontally
369        uint16_t buttonWidth = (width - 2 * BUTTON_PADDING - (buttonNum_ - 1) * BUTTON_MID_PADDING) / buttonNum_;
370        // 2: there are 2 paddings horizontally
371        width = static_cast<uint32_t>(buttonWidth) * buttonNum_ + (buttonNum_ - 1) * BUTTON_MID_PADDING +
372            2 * BUTTON_PADDING;
373        height += BUTTON_TOTAL_HEIGHT;
374        height += TEXT_BUTTON_PADDING;
375        if (button1_ != nullptr) {
376            button1_->SetWidth(buttonWidth);
377        }
378        if (button2_ != nullptr) {
379            button2_->SetWidth(buttonWidth);
380        }
381        if (button3_ != nullptr) {
382            button3_->SetWidth(buttonWidth);
383        }
384    } else {
385        height += PADDING;
386    }
387
388    if (title_ != nullptr) {
389        title_->SetWidth(width - 2 * PADDING); // 2: there are 2 paddings horizontally
390        height += TITLE_TOTAL_HEIGHT;
391    } else {
392        height += PADDING;
393    }
394
395    if (text_ != nullptr) {
396        text_->SetWidth(width - 2 * PADDING); // 2: there are 2 paddings horizontally
397        uint16_t textHightMax = heightMax_ - height;
398        if (text_->GetTextHeight() < textHightMax) {
399            text_->SetHeight(text_->GetTextHeight());
400        } else {
401            text_->SetHeight(textHightMax);
402            text_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
403        }
404        height += text_->GetHeight();
405    }
406
407    uint16_t dialogHeight = height;
408    dialogLayer_->SetHeight(dialogHeight);
409    dialogLayer_->SetWidth(width);
410}
411
412uint16_t UIDialog::MeasureMaxWidth()
413{
414    uint16_t titleWidth = 0;
415    uint16_t textWidth = 0;
416    uint16_t buttonTotalWidth = 0;
417
418    if (title_ != nullptr) {
419        titleWidth = MeasureTitleWidth();
420        titleWidth += 2 * PADDING; // 2: there are 2 paddings horizontally
421    }
422    if (text_ != nullptr) {
423        textWidth = MeasureTextWidth();
424        textWidth += 2 * PADDING; // 2: there are 2 paddings horizontally
425    }
426    if (buttonNum_ > 0) {
427        buttonTotalWidth =
428            static_cast<uint32_t>(MeasureButtonWidth()) * buttonNum_ + (buttonNum_ - 1) * BUTTON_MID_PADDING;
429        buttonTotalWidth += 2 * BUTTON_PADDING; // 2: there are 2 paddings horizontally
430    }
431    return MATH_MAX(titleWidth, MATH_MAX(textWidth, buttonTotalWidth));
432}
433
434uint16_t UIDialog::MeasureTitleWidth()
435{
436    uint16_t titleWidth = 0;
437    uint16_t widthMaxNoPadding = widthMax_ - 2 * PADDING; // 2: there are 2 paddings horizontally
438    title_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
439    if (title_->GetTextWidth() > widthMaxNoPadding) {
440        titleWidth = widthMaxNoPadding;
441        title_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
442    } else {
443        titleWidth = title_->GetTextWidth();
444    }
445    title_->SetHeight(title_->GetTextHeight());
446    return titleWidth;
447}
448
449uint16_t UIDialog::MeasureTextWidth()
450{
451    uint16_t textWidth = 0;
452    uint16_t widthMaxNoPadding = widthMax_ - 2 * PADDING; // 2: there are 2 paddings horizontally
453    if (title_ != nullptr) {
454        text_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT);
455    } else {
456        text_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);
457    }
458    text_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
459    textWidth = text_->GetTextWidth();
460    if (text_->GetTextWidth() > widthMaxNoPadding) {
461        text_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT);
462        textWidth = widthMaxNoPadding;
463        text_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
464    }
465    return textWidth;
466}
467
468uint16_t UIDialog::MeasureButtonWidth()
469{
470    if (buttonNum_ == 0) {
471        return 0;
472    }
473
474    uint16_t buttonTextWidth = 0;
475    // 2: there are 2 paddings horizontally
476    uint16_t buttonMaxWidth = (widthMax_ - 2 * BUTTON_PADDING - (buttonNum_ - 1) * BUTTON_MID_PADDING) / buttonNum_;
477
478    if (button1_ != nullptr) {
479        const char* text1 = button1_->GetText();
480        buttonTextWidth =
481            MATH_MAX(buttonTextWidth, TypedText::GetTextSize(text1, button1_->GetFontId(), BUTTON_FONT_SIZE,
482                                                             button1_->GetStyleConst().letterSpace_,
483                                                             button1_->GetStyleConst().lineHeight_, widthMax_, 0).x);
484    }
485    if (button2_ != nullptr) {
486        const char* text2 = button2_->GetText();
487        buttonTextWidth =
488            MATH_MAX(buttonTextWidth, TypedText::GetTextSize(text2, button2_->GetFontId(), BUTTON_FONT_SIZE,
489                                                             button2_->GetStyleConst().letterSpace_,
490                                                             button2_->GetStyleConst().lineHeight_, widthMax_, 0).x);
491    }
492    if (button3_ != nullptr) {
493        const char* text3 = button3_->GetText();
494        buttonTextWidth =
495            MATH_MAX(buttonTextWidth, TypedText::GetTextSize(text3, button3_->GetFontId(), BUTTON_FONT_SIZE,
496                                                             button3_->GetStyleConst().letterSpace_,
497                                                             button3_->GetStyleConst().lineHeight_, widthMax_, 0).x);
498    }
499    return (buttonTextWidth + BUTTON_HEIGHT) > buttonMaxWidth ? buttonMaxWidth : (buttonTextWidth + BUTTON_HEIGHT);
500}
501
502void UIDialog::Layout()
503{
504    if (title_ != nullptr) {
505        // 2: there are 2 paddings vertically
506        uint8_t padding = (TITLE_TOTAL_HEIGHT - title_->GetHeight()) / 2;
507        title_->LayoutLeftOfParent(PADDING);
508        title_->LayoutTopOfParent(padding);
509        if (text_ != nullptr) {
510            text_->LayoutLeftOfParent(PADDING);
511            text_->LayoutBottomToSibling(TITLE_ID, padding);
512        }
513    } else {
514        if (text_ != nullptr) {
515            text_->LayoutLeftOfParent(PADDING);
516            text_->LayoutTopOfParent(PADDING);
517        }
518    }
519    LayoutButton();
520}
521
522void UIDialog::LayoutButton()
523{
524    if (button1_ != nullptr) {
525        button1_->LayoutLeftOfParent(BUTTON_PADDING);
526        button1_->LayoutBottomOfParent(BUTTON_PADDING);
527        if (button2_ != nullptr) {
528            button2_->LayoutRightToSibling(BUTTON1_ID, BUTTON_MID_PADDING);
529            button2_->LayoutBottomOfParent(BUTTON_PADDING);
530        }
531    } else if (button2_ != nullptr) {
532        button2_->LayoutLeftOfParent(BUTTON_PADDING);
533        button2_->LayoutBottomOfParent(BUTTON_PADDING);
534    }
535    if (button3_ != nullptr) {
536        button3_->LayoutRightOfParent(BUTTON_PADDING);
537        button3_->LayoutBottomOfParent(BUTTON_PADDING);
538    }
539
540    if (buttonNum_ == 3) { // 3: three buttons
541        line1_->LayoutBottomOfParent(LINE_BOTTOM_PADDING);
542        line1_->LayoutRightToSibling(BUTTON1_ID, LINE_BUTTON_PADDING);
543        line2_->LayoutBottomOfParent(LINE_BOTTOM_PADDING);
544        line2_->LayoutRightToSibling(BUTTON2_ID, LINE_BUTTON_PADDING);
545    } else if (buttonNum_ == 2) { // 2: two buttons
546        if (button1_ != nullptr) {
547            line1_->LayoutBottomOfParent(LINE_BOTTOM_PADDING);
548            line1_->LayoutRightToSibling(BUTTON1_ID, LINE_BUTTON_PADDING);
549        } else {
550            line1_->LayoutBottomOfParent(LINE_BOTTOM_PADDING);
551            line1_->LayoutRightToSibling(BUTTON2_ID, LINE_BUTTON_PADDING);
552        }
553    }
554}
555
556void UIDialog::CreateDialogWindow()
557{
558    dialogLayer_->LayoutCenterOfParent();
559    Rect rect = dialogLayer_->GetRect();
560    int16_t offset_x = dialogLayer_->GetX();
561    int16_t offset_y = dialogLayer_->GetY();
562
563    windowRootView_->SetPosition(-offset_x, -offset_y);
564    windowRootView_->Invalidate();
565
566    WindowConfig config = {};
567    config.rect = rect;
568    config.rect.SetPosition(offset_x, offset_y);
569    config.isModal = true;
570    window_ = Window::CreateWindow(config);
571    if (window_ != nullptr) {
572        window_->BindRootView(windowRootView_);
573    } else {
574        GRAPHIC_LOGE("Create window false!");
575    }
576}
577
578void UIDialog::SetButtonColor(DialogButtonType buttonType, ColorType color)
579{
580    switch (buttonType) {
581        case DialogButtonType::BUTTON_LEFT:
582            if (button1_ != nullptr) {
583                button1_->SetStyleForState(STYLE_BACKGROUND_COLOR, color.full, UIButton::ButtonState::RELEASED);
584                button1_->SetStyleForState(STYLE_BACKGROUND_OPA, color.alpha, UIButton::ButtonState::RELEASED);
585                colorType1_ = color;
586            }
587            break;
588        case DialogButtonType::BUTTON_MID:
589            if (button2_ != nullptr) {
590                button2_->SetStyleForState(STYLE_BACKGROUND_COLOR, color.full, UIButton::ButtonState::RELEASED);
591                button2_->SetStyleForState(STYLE_BACKGROUND_OPA, color.alpha, UIButton::ButtonState::RELEASED);
592                colorType2_ = color;
593            }
594            break;
595        case DialogButtonType::BUTTON_RIGHT:
596            if (button3_ != nullptr) {
597                button3_->SetStyleForState(STYLE_BACKGROUND_COLOR, color.full, UIButton::ButtonState::RELEASED);
598                button3_->SetStyleForState(STYLE_BACKGROUND_COLOR, color.alpha, UIButton::ButtonState::RELEASED);
599                colorType3_ = color;
600            }
601            break;
602        default:
603            break;
604    }
605}
606
607void UIDialog::SetOnCancelListener(UIView::OnClickListener* onCancelListener)
608{
609    if (onCancelListener == nullptr) {
610        return;
611    }
612    onCancelListener_ = onCancelListener;
613}
614
615void UIDialog::EnableAutoCancel(bool enable)
616{
617    enableAutoCancel_ = enable;
618}
619
620void UIDialog::DestroyWindow()
621{
622    if (window_ != nullptr) {
623        Window::DestroyWindow(window_);
624        window_ = nullptr;
625    }
626}
627
628#ifdef ENABLE_DEBUG
629const char* UIDialog::GetButtonText(DialogButtonType buttonType) const
630{
631    switch (buttonType) {
632        case DialogButtonType::BUTTON_LEFT:
633            if (button1_ != nullptr) {
634                return button1_->GetText();
635            }
636            return nullptr;
637        case DialogButtonType::BUTTON_MID:
638            if (button2_ != nullptr) {
639                return button2_->GetText();
640            }
641            return nullptr;
642        case DialogButtonType::BUTTON_RIGHT:
643            if (button3_ != nullptr) {
644                return button3_->GetText();
645            }
646            return nullptr;
647        default:
648            return nullptr;
649    }
650}
651
652UIView::OnClickListener* UIDialog::GetButtonListener(DialogButtonType buttonType) const
653{
654    switch (buttonType) {
655        case DialogButtonType::BUTTON_LEFT:
656            if (button1_ != nullptr) {
657                return button1_->GetOnClickListener();
658            }
659            return nullptr;
660        case DialogButtonType::BUTTON_MID:
661            if (button2_ != nullptr) {
662                return button2_->GetOnClickListener();
663            }
664            return nullptr;
665        case DialogButtonType::BUTTON_RIGHT:
666            if (button3_ != nullptr) {
667                return button3_->GetOnClickListener();
668            }
669            return nullptr;
670        default:
671            return nullptr;
672    }
673}
674
675ColorType UIDialog::GetButtonColor(DialogButtonType buttonType) const
676{
677    switch (buttonType) {
678        case DialogButtonType::BUTTON_LEFT:
679            if (button1_ != nullptr) {
680                return colorType1_;
681            }
682            break;
683        case DialogButtonType::BUTTON_MID:
684            if (button2_ != nullptr) {
685                return colorType2_;
686            }
687            break;
688        case DialogButtonType::BUTTON_RIGHT:
689            if (button3_ != nullptr) {
690                return colorType3_;
691            }
692            break;
693        default:
694            break;
695    }
696    ASSERT(0);
697}
698#endif // ENABLE_DEBUG
699} // namespace OHOS
700#endif // ENABLE_WINDOW
701