12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/web_contents_delegate_android/color_chooser_android.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/android/jni_array.h" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/android/jni_string.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/android/content_view_core.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/public/common/color_suggestion.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/ColorChooserAndroid_jni.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace web_contents_delegate_android { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ColorChooserAndroid::ColorChooserAndroid( 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::WebContents* web_contents, 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SkColor initial_color, 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<content::ColorSuggestion>& suggestions) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : web_contents_(web_contents) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::ContentViewCore* content_view_core = 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ContentViewCore::FromWebContents(web_contents); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(content_view_core); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ScopedJavaLocalRef<jobjectArray> suggestions_array; 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (suggestions.size() > 0) { 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) suggestions_array = Java_ColorChooserAndroid_createColorSuggestionArray( 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) env, suggestions.size()); 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (size_t i = 0; i < suggestions.size(); ++i) { 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const content::ColorSuggestion& suggestion = suggestions[i]; 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString( 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) env, suggestion.label); 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Java_ColorChooserAndroid_addToColorSuggestionArray( 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) env, 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) suggestions_array.obj(), 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i, 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) suggestion.color, 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) label.obj()); 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_color_chooser_.Reset(Java_ColorChooserAndroid_createColorChooserAndroid( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<intptr_t>(this), 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_view_core->GetJavaObject().obj(), 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) initial_color, 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) suggestions_array.obj())); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ColorChooserAndroid::~ColorChooserAndroid() { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ColorChooserAndroid::End() { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!j_color_chooser_.is_null()) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ColorChooserAndroid_closeColorChooser(env, j_color_chooser_.obj()); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ColorChooserAndroid::SetSelectedColor(SkColor color) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Not implemented since the color is set on the java side only, in theory 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it can be set from JS which would override the user selection but 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // we don't support that for now. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ColorChooserAndroid::OnColorChosen(JNIEnv* env, jobject obj, jint color) { 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents_->DidChooseColorInColorChooser(color); 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents_->DidEndColorChooser(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ---------------------------------------------------------------------------- 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Native JNI methods 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ---------------------------------------------------------------------------- 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterColorChooserAndroid(JNIEnv* env) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace web_contents_delegate_android 83