Chromium Code Reviews| 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 |