1 // Copyright (c) 2012 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 "components/web_contents_delegate_android/color_chooser_android.h" 6 7 #include "base/android/jni_array.h" 8 #include "base/android/jni_string.h" 9 #include "content/public/browser/android/content_view_core.h" 10 #include "content/public/browser/web_contents.h" 11 #include "content/public/common/color_suggestion.h" 12 #include "jni/ColorChooserAndroid_jni.h" 13 14 using base::android::ConvertUTF16ToJavaString; 15 16 namespace web_contents_delegate_android { 17 18 ColorChooserAndroid::ColorChooserAndroid( 19 content::WebContents* web_contents, 20 SkColor initial_color, 21 const std::vector<content::ColorSuggestion>& suggestions) 22 : web_contents_(web_contents) { 23 JNIEnv* env = AttachCurrentThread(); 24 content::ContentViewCore* content_view_core = 25 content::ContentViewCore::FromWebContents(web_contents); 26 DCHECK(content_view_core); 27 28 ScopedJavaLocalRef<jobjectArray> suggestions_array; 29 30 if (suggestions.size() > 0) { 31 suggestions_array = Java_ColorChooserAndroid_createColorSuggestionArray( 32 env, suggestions.size()); 33 34 for (size_t i = 0; i < suggestions.size(); ++i) { 35 const content::ColorSuggestion& suggestion = suggestions[i]; 36 ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString( 37 env, suggestion.label); 38 Java_ColorChooserAndroid_addToColorSuggestionArray( 39 env, 40 suggestions_array.obj(), 41 i, 42 suggestion.color, 43 label.obj()); 44 } 45 } 46 j_color_chooser_.Reset(Java_ColorChooserAndroid_createColorChooserAndroid( 47 env, 48 reinterpret_cast<intptr_t>(this), 49 content_view_core->GetJavaObject().obj(), 50 initial_color, 51 suggestions_array.obj())); 52 } 53 54 ColorChooserAndroid::~ColorChooserAndroid() { 55 } 56 57 void ColorChooserAndroid::End() { 58 if (!j_color_chooser_.is_null()) { 59 JNIEnv* env = AttachCurrentThread(); 60 Java_ColorChooserAndroid_closeColorChooser(env, j_color_chooser_.obj()); 61 } 62 } 63 64 void ColorChooserAndroid::SetSelectedColor(SkColor color) { 65 // Not implemented since the color is set on the java side only, in theory 66 // it can be set from JS which would override the user selection but 67 // we don't support that for now. 68 } 69 70 void ColorChooserAndroid::OnColorChosen(JNIEnv* env, jobject obj, jint color) { 71 web_contents_->DidChooseColorInColorChooser(color); 72 web_contents_->DidEndColorChooser(); 73 } 74 75 // ---------------------------------------------------------------------------- 76 // Native JNI methods 77 // ---------------------------------------------------------------------------- 78 bool RegisterColorChooserAndroid(JNIEnv* env) { 79 return RegisterNativesImpl(env); 80 } 81 82 } // namespace web_contents_delegate_android 83