Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2013 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 "content/browser/android/date_time_chooser_android.h"
      6 
      7 #include "base/android/jni_string.h"
      8 #include "content/common/view_messages.h"
      9 #include "content/public/browser/android/content_view_core.h"
     10 #include "content/public/browser/render_view_host_observer.h"
     11 #include "jni/DateTimeChooserAndroid_jni.h"
     12 
     13 using base::android::AttachCurrentThread;
     14 using base::android::ConvertJavaStringToUTF16;
     15 using base::android::ConvertUTF8ToJavaString;
     16 
     17 
     18 namespace content {
     19 
     20 // Updates date/time via IPC to the RenderView
     21 class DateTimeChooserAndroid::DateTimeIPCSender :
     22     public RenderViewHostObserver {
     23  public:
     24   explicit DateTimeIPCSender(RenderViewHost* sender);
     25   virtual ~DateTimeIPCSender() {}
     26   void ReplaceDateTime(int dialog_type,
     27       int year, int month, int day, int hour, int minute, int second, int week);
     28   void CancelDialog();
     29 
     30  private:
     31   DISALLOW_COPY_AND_ASSIGN(DateTimeIPCSender);
     32 };
     33 
     34 DateTimeChooserAndroid::DateTimeIPCSender::DateTimeIPCSender(
     35     RenderViewHost* sender)
     36   : RenderViewHostObserver(sender) {
     37 }
     38 
     39 void DateTimeChooserAndroid::DateTimeIPCSender::ReplaceDateTime(
     40     int dialog_type,
     41     int year, int month, int day, int hour, int minute, int second, int week) {
     42   ViewHostMsg_DateTimeDialogValue_Params value;
     43   value.year = year;
     44   value.month = month;
     45   value.day = day;
     46   value.hour = hour;
     47   value.minute = minute;
     48   value.second = second;
     49   value.week = week;
     50   value.dialog_type = dialog_type;
     51   Send(new ViewMsg_ReplaceDateTime(routing_id(), value));
     52 }
     53 
     54 void DateTimeChooserAndroid::DateTimeIPCSender::CancelDialog() {
     55   Send(new ViewMsg_CancelDateTimeDialog(routing_id()));
     56 }
     57 
     58 // DateTimeChooserAndroid implementation
     59 DateTimeChooserAndroid::DateTimeChooserAndroid()
     60   : sender_(NULL) {
     61 }
     62 
     63 DateTimeChooserAndroid::~DateTimeChooserAndroid() {
     64 }
     65 
     66 // static
     67 void DateTimeChooserAndroid::InitializeDateInputTypes(
     68       int text_input_type_date, int text_input_type_date_time,
     69       int text_input_type_date_time_local, int text_input_type_month,
     70       int text_input_type_time, int text_input_type_week) {
     71   JNIEnv* env = AttachCurrentThread();
     72   Java_DateTimeChooserAndroid_initializeDateInputTypes(
     73          env,
     74          text_input_type_date, text_input_type_date_time,
     75          text_input_type_date_time_local, text_input_type_month,
     76          text_input_type_time, text_input_type_week);
     77 }
     78 
     79 void DateTimeChooserAndroid::ReplaceDateTime(
     80     JNIEnv* env, jobject, int dialog_type,
     81     int year, int month, int day, int hour, int minute, int second, int week) {
     82   sender_->ReplaceDateTime(
     83       dialog_type, year, month, day, hour, minute, second, week);
     84 }
     85 
     86 void DateTimeChooserAndroid::CancelDialog(JNIEnv* env, jobject) {
     87   sender_->CancelDialog();
     88 }
     89 
     90 void DateTimeChooserAndroid::ShowDialog(
     91     ContentViewCore* content, RenderViewHost* sender,
     92     int type, int year, int month, int day,
     93     int hour, int minute, int second, int week, double min, double max) {
     94   if (sender_)
     95     delete sender_;
     96   sender_ = new DateTimeIPCSender(sender);
     97 
     98   JNIEnv* env = AttachCurrentThread();
     99   j_date_time_chooser_.Reset(Java_DateTimeChooserAndroid_createDateTimeChooser(
    100       env, content->GetJavaObject().obj(),
    101       reinterpret_cast<intptr_t>(this),
    102       type, year, month, day, hour, minute, second, week, min, max));
    103 }
    104 
    105 // ----------------------------------------------------------------------------
    106 // Native JNI methods
    107 // ----------------------------------------------------------------------------
    108 bool RegisterDateTimeChooserAndroid(JNIEnv* env) {
    109   bool registered = RegisterNativesImpl(env);
    110   if (registered)
    111     DateTimeChooserAndroid::InitializeDateInputTypes(
    112         ui::TEXT_INPUT_TYPE_DATE,
    113         ui::TEXT_INPUT_TYPE_DATE_TIME,
    114         ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL,
    115         ui::TEXT_INPUT_TYPE_MONTH,
    116         ui::TEXT_INPUT_TYPE_TIME,
    117         ui::TEXT_INPUT_TYPE_WEEK);
    118   return registered;
    119 }
    120 
    121 }  // namespace content
    122