Home | History | Annotate | Download | only in web_contents_delegate_android
      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