1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/vibration/vibration_provider_android.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <algorithm>
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/vibration/vibration_message_filter.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/view_messages.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "jni/VibrationProvider_jni.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebVibration.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using base::android::AttachCurrentThread;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)VibrationProviderAndroid::VibrationProviderAndroid() {
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)VibrationProviderAndroid::~VibrationProviderAndroid() {
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool VibrationProviderAndroid::Register(JNIEnv* env) {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return RegisterNativesImpl(env);
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void VibrationProviderAndroid::Vibrate(int64 milliseconds) {
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (j_vibration_provider_.is_null()) {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    j_vibration_provider_.Reset(
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        Java_VibrationProvider_create(
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            AttachCurrentThread(),
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            base::android::GetApplicationContext()));
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Java_VibrationProvider_vibrate(AttachCurrentThread(),
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                j_vibration_provider_.obj(),
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                milliseconds);
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void VibrationProviderAndroid::CancelVibration() {
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // If somehow a cancel message is received before this object was
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // instantiated, it means there is no current vibration anyway. Just return.
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (j_vibration_provider_.is_null())
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Java_VibrationProvider_cancelVibration(AttachCurrentThread(),
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        j_vibration_provider_.obj());
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)VibrationProvider* VibrationMessageFilter::CreateProvider() {
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return new VibrationProviderAndroid();
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace content
57