OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.h" | |
6 | |
7 #include "base/android/jni_android.h" | |
8 #include "base/android/jni_string.h" | |
9 #include "base/android/scoped_java_ref.h" | |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "chrome/browser/android/tab_android.h" | |
12 #include "chrome/browser/infobars/infobar_service.h" | |
13 #include "components/infobars/core/confirm_infobar_delegate.h" | |
14 #include "components/infobars/core/infobar.h" | |
15 #include "jni/SimpleConfirmInfoBarBuilder_jni.h" | |
16 #include "ui/gfx/android/java_bitmap.h" | |
17 #include "ui/gfx/image/image.h" | |
18 #include "ui/gfx/vector_icons_public.h" | |
19 | |
20 namespace { | |
21 | |
22 // Delegate for a simple ConfirmInfoBar triggered via JNI. | |
23 class SimpleConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { | |
24 public: | |
25 SimpleConfirmInfoBarDelegate( | |
26 const JavaParamRef<jobject>& j_listener, | |
27 infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier, | |
28 const gfx::Image& bitmap, | |
29 const base::string16& message_str, | |
30 const base::string16& primary_str, | |
31 const base::string16& secondary_str, | |
32 bool auto_expire); | |
33 | |
34 ~SimpleConfirmInfoBarDelegate() override; | |
35 | |
36 // InfoBarDelegate overrides: | |
Peter Kasting
2016/01/16 01:00:56
Nit: You don't directly subclass this class, so th
gone
2016/01/19 23:43:03
Done.
| |
37 infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; | |
38 gfx::Image GetIcon() const override; | |
39 bool ShouldExpire(const NavigationDetails& details) const override; | |
40 void InfoBarDismissed() override; | |
41 | |
42 // ConfirmInfoBarDelegate overrides: | |
Peter Kasting
2016/01/16 01:00:56
Nit: No need for " overrides"
gone
2016/01/19 23:43:03
Done.
| |
43 base::string16 GetMessageText() const override; | |
44 int GetButtons() const override; | |
45 base::string16 GetButtonLabel(InfoBarButton button) const override; | |
46 bool Accept() override; | |
47 bool Cancel() override; | |
48 | |
49 private: | |
50 base::android::ScopedJavaGlobalRef<jobject> java_listener_; | |
51 infobars::InfoBarDelegate::InfoBarIdentifier identifier_; | |
52 gfx::Image icon_bitmap_; | |
53 base::string16 message_str_; | |
54 base::string16 primary_str_; | |
55 base::string16 secondary_str_; | |
56 bool auto_expire_; | |
57 }; | |
Peter Kasting
2016/01/16 01:00:56
Nit: DISALLOW_COPY_AND_ASSIGN
gone
2016/01/19 23:43:03
Argh, I always miss that one when I stay in Java t
| |
58 | |
59 SimpleConfirmInfoBarDelegate::SimpleConfirmInfoBarDelegate( | |
60 const JavaParamRef<jobject>& j_listener, | |
61 infobars::InfoBarDelegate::InfoBarIdentifier identifier, | |
62 const gfx::Image& bitmap, | |
63 const base::string16& message_str, | |
64 const base::string16& primary_str, | |
65 const base::string16& secondary_str, | |
66 bool auto_expire) | |
67 : identifier_(identifier), | |
68 icon_bitmap_(bitmap), | |
69 message_str_(message_str), | |
70 primary_str_(primary_str), | |
71 secondary_str_(secondary_str), | |
72 auto_expire_(auto_expire) { | |
73 java_listener_.Reset(j_listener); | |
74 } | |
75 | |
76 SimpleConfirmInfoBarDelegate::~SimpleConfirmInfoBarDelegate() { | |
77 } | |
78 | |
79 infobars::InfoBarDelegate::InfoBarIdentifier | |
80 SimpleConfirmInfoBarDelegate::GetIdentifier() const { | |
81 return identifier_; | |
82 } | |
83 | |
84 gfx::Image SimpleConfirmInfoBarDelegate::GetIcon() const { | |
85 return icon_bitmap_.IsEmpty() ? ConfirmInfoBarDelegate::GetIcon() | |
86 : icon_bitmap_; | |
87 } | |
88 | |
89 bool SimpleConfirmInfoBarDelegate::ShouldExpire( | |
90 const NavigationDetails& details) const { | |
91 return auto_expire_ && ConfirmInfoBarDelegate::ShouldExpire(details); | |
92 } | |
93 | |
94 void SimpleConfirmInfoBarDelegate::InfoBarDismissed() { | |
95 Java_SimpleConfirmInfoBarBuilder_onInfoBarDismissed( | |
96 base::android::AttachCurrentThread(), java_listener_.obj()); | |
97 } | |
98 | |
99 base::string16 SimpleConfirmInfoBarDelegate::GetMessageText() const { | |
100 return message_str_; | |
101 } | |
102 | |
103 int SimpleConfirmInfoBarDelegate::GetButtons() const { | |
104 int buttons = 0; | |
105 if (primary_str_.size() > 0) buttons |= BUTTON_OK; | |
Peter Kasting
2016/01/16 01:00:56
Nit: Chromium style avoids placing even short cond
gone
2016/01/19 23:43:03
Nice; switched over
| |
106 if (secondary_str_.size() > 0) buttons |= BUTTON_CANCEL; | |
107 return buttons; | |
108 } | |
109 | |
110 base::string16 | |
111 SimpleConfirmInfoBarDelegate::GetButtonLabel(InfoBarButton button) const { | |
112 return button == BUTTON_OK ? primary_str_ : secondary_str_; | |
113 } | |
114 | |
115 bool SimpleConfirmInfoBarDelegate::Accept() { | |
116 Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked( | |
117 base::android::AttachCurrentThread(), java_listener_.obj(), true); | |
118 return true; | |
119 } | |
120 | |
121 bool SimpleConfirmInfoBarDelegate::Cancel() { | |
122 Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked( | |
123 base::android::AttachCurrentThread(), java_listener_.obj(), false); | |
124 return true; | |
125 } | |
126 | |
127 } // anonymous namespace | |
128 | |
129 | |
Peter Kasting
2016/01/16 01:00:56
Nit: Too many blank lines
gone
2016/01/19 23:43:03
Done.
| |
130 | |
131 // Native JNI methods --------------------------------------------------------- | |
132 | |
133 void Create(JNIEnv* env, | |
134 const JavaParamRef<jclass>& j_caller, | |
135 const JavaParamRef<jobject>& j_tab, | |
136 jint j_identifier, | |
137 const JavaParamRef<jobject>& j_icon, | |
138 const JavaParamRef<jstring>& j_message, | |
139 const JavaParamRef<jstring>& j_primary, | |
140 const JavaParamRef<jstring>& j_secondary, | |
141 jboolean auto_expire, | |
142 const JavaParamRef<jobject>& j_listener) { | |
143 infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier = | |
144 static_cast<infobars::InfoBarDelegate::InfoBarIdentifier>(j_identifier); | |
145 | |
146 gfx::Image icon_bitmap; | |
147 if (j_icon) { | |
148 icon_bitmap = gfx::Image::CreateFrom1xBitmap( | |
149 gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(j_icon))); | |
150 } | |
151 | |
152 InfoBarService* service = InfoBarService::FromWebContents( | |
153 TabAndroid::GetNativeTab(env, j_tab)->web_contents()); | |
154 service->AddInfoBar(service->CreateConfirmInfoBar( | |
155 scoped_ptr<ConfirmInfoBarDelegate>(new SimpleConfirmInfoBarDelegate( | |
Peter Kasting
2016/01/16 01:00:56
Nit: make_scoped_ptr?
gone
2016/01/19 23:43:03
Done.
| |
156 j_listener, | |
157 infobar_identifier, | |
158 icon_bitmap, | |
159 base::android::ConvertJavaStringToUTF16(env, j_message), | |
160 base::android::ConvertJavaStringToUTF16(env, j_primary), | |
161 base::android::ConvertJavaStringToUTF16(env, j_secondary), | |
162 auto_expire)))); | |
163 } | |
164 | |
165 bool RegisterSimpleConfirmInfoBarBuilder(JNIEnv* env) { | |
166 return RegisterNativesImpl(env); | |
167 } | |
OLD | NEW |