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