summaryrefslogtreecommitdiffstats
path: root/device
diff options
context:
space:
mode:
authorleon.han <leon.han@intel.com>2015-08-14 00:54:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-14 07:55:30 +0000
commit25ac4910eef26d71cc94ee554626f6cad3f43e33 (patch)
tree6a5155e942568f442ce63213e057261d2d81676f /device
parent0df0152e2ede337b88809463ec44a61364b0c9e9 (diff)
downloadchromium_src-25ac4910eef26d71cc94ee554626f6cad3f43e33.zip
chromium_src-25ac4910eef26d71cc94ee554626f6cad3f43e33.tar.gz
chromium_src-25ac4910eef26d71cc94ee554626f6cad3f43e33.tar.bz2
Vibration API: convert implementation to java mojo-service.
Implement mojo interface VibrationManager on Android using Java directly instead of using C++ plus JNI. BUG=439434 TEST=manually test vibration OK Review URL: https://codereview.chromium.org/1274033002 Cr-Commit-Position: refs/heads/master@{#343352}
Diffstat (limited to 'device')
-rw-r--r--device/vibration/BUILD.gn25
-rw-r--r--device/vibration/DEPS3
-rw-r--r--device/vibration/android/BUILD.gn18
-rw-r--r--device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java64
-rw-r--r--device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java54
-rw-r--r--device/vibration/android/vibration_jni_registrar.cc27
-rw-r--r--device/vibration/android/vibration_jni_registrar.h20
-rw-r--r--device/vibration/vibration.gyp20
-rw-r--r--device/vibration/vibration_manager_impl_android.cc57
-rw-r--r--device/vibration/vibration_manager_impl_android.h38
10 files changed, 87 insertions, 239 deletions
diff --git a/device/vibration/BUILD.gn b/device/vibration/BUILD.gn
index b315e57..ed046c2 100644
--- a/device/vibration/BUILD.gn
+++ b/device/vibration/BUILD.gn
@@ -5,17 +5,13 @@
import("//build/config/features.gni")
import("//third_party/mojo/src/mojo/public/tools/bindings/mojom.gni")
-if (is_android) {
- import("//build/config/android/config.gni")
- import("//build/config/android/rules.gni") # For generate_jni().
-}
-
component("vibration") {
output_name = "device_vibration"
sources = [
"vibration_export.h",
"vibration_manager_impl.h",
+ "vibration_manager_impl_default.cc",
]
defines = [ "DEVICE_VIBRATION_IMPLEMENTATION" ]
@@ -30,15 +26,7 @@ component("vibration") {
]
if (is_android) {
- sources += [
- "android/vibration_jni_registrar.cc",
- "android/vibration_jni_registrar.h",
- "vibration_manager_impl_android.cc",
- "vibration_manager_impl_android.h",
- ]
- deps += [ ":vibration_jni_headers" ]
- } else {
- sources += [ "vibration_manager_impl_default.cc" ]
+ sources -= [ "vibration_manager_impl_default.cc" ]
}
}
@@ -47,12 +35,3 @@ mojom("mojo_bindings") {
"vibration_manager.mojom",
]
}
-
-if (is_android) {
- generate_jni("vibration_jni_headers") {
- sources = [
- "android/java/src/org/chromium/device/vibration/VibrationProvider.java",
- ]
- jni_package = "vibration"
- }
-}
diff --git a/device/vibration/DEPS b/device/vibration/DEPS
deleted file mode 100644
index 1129c7b..0000000
--- a/device/vibration/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+jni",
-] \ No newline at end of file
diff --git a/device/vibration/android/BUILD.gn b/device/vibration/android/BUILD.gn
new file mode 100644
index 0000000..f7640af
--- /dev/null
+++ b/device/vibration/android/BUILD.gn
@@ -0,0 +1,18 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/config.gni")
+import("//build/config/android/rules.gni")
+
+android_library("vibration_manager_android") {
+ java_files =
+ [ "java/src/org/chromium/device/vibration/VibrationManagerImpl.java" ]
+
+ deps = [
+ "//base:base_java",
+ "//device/vibration:mojo_bindings_java",
+ "//third_party/mojo/src/mojo/public/java:bindings",
+ "//third_party/mojo/src/mojo/public/java:system",
+ ]
+}
diff --git a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
new file mode 100644
index 0000000..dd8d275
--- /dev/null
+++ b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
@@ -0,0 +1,64 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.device.vibration;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.media.AudioManager;
+import android.os.Vibrator;
+import android.util.Log;
+
+import org.chromium.mojo.system.MojoException;
+import org.chromium.mojom.device.VibrationManager;
+
+/**
+ * Android implementation of the vibration manager service defined in
+ * device/vibration/vibration_manager.mojom.
+ */
+public class VibrationManagerImpl implements VibrationManager {
+ private static final String TAG = "VibrationManagerImpl";
+
+ private static final long MINIMUM_VIBRATION_DURATION_MS = 1; // 1 millisecond
+ private static final long MAXIMUM_VIBRATION_DURATION_MS = 10000; // 10 seconds
+
+ private final AudioManager mAudioManager;
+ private final Vibrator mVibrator;
+ private final boolean mHasVibratePermission;
+
+ public VibrationManagerImpl(Context context) {
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+ mHasVibratePermission =
+ context.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
+ == PackageManager.PERMISSION_GRANTED;
+ if (!mHasVibratePermission) {
+ Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission.");
+ }
+ }
+
+ @Override
+ public void close() {}
+
+ @Override
+ public void onConnectionError(MojoException e) {}
+
+ @Override
+ public void vibrate(long milliseconds) {
+ // Though the Blink implementation already sanitizes vibration times, don't
+ // trust any values passed from the client.
+ long sanitizedMilliseconds = Math.max(MINIMUM_VIBRATION_DURATION_MS,
+ Math.min(milliseconds, MAXIMUM_VIBRATION_DURATION_MS));
+
+ if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT
+ && mHasVibratePermission) {
+ mVibrator.vibrate(sanitizedMilliseconds);
+ }
+ }
+
+ @Override
+ public void cancel() {
+ if (mHasVibratePermission) mVibrator.cancel();
+ }
+}
diff --git a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java
deleted file mode 100644
index 0f12d7c..0000000
--- a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.device.vibration;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.media.AudioManager;
-import android.os.Vibrator;
-import android.util.Log;
-
-import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.annotations.JNINamespace;
-
-/**
- * This is the implementation of the C++ counterpart VibrationProvider.
- */
-@JNINamespace("device")
-class VibrationProvider {
- private static final String TAG = "VibrationProvider";
-
- private final AudioManager mAudioManager;
- private final Vibrator mVibrator;
- private final boolean mHasVibratePermission;
-
- @CalledByNative
- private static VibrationProvider create(Context context) {
- return new VibrationProvider(context);
- }
-
- @CalledByNative
- private void vibrate(long milliseconds) {
- if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT
- && mHasVibratePermission) {
- mVibrator.vibrate(milliseconds);
- }
- }
-
- @CalledByNative
- private void cancelVibration() {
- if (mHasVibratePermission) mVibrator.cancel();
- }
-
- private VibrationProvider(Context context) {
- mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
- mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
- mHasVibratePermission = context.checkCallingOrSelfPermission(
- android.Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED;
- if (!mHasVibratePermission) {
- Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission.");
- }
- }
-}
diff --git a/device/vibration/android/vibration_jni_registrar.cc b/device/vibration/android/vibration_jni_registrar.cc
deleted file mode 100644
index 39003bf..0000000
--- a/device/vibration/android/vibration_jni_registrar.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "device/vibration/android/vibration_jni_registrar.h"
-
-#include "base/android/jni_android.h"
-#include "base/android/jni_registrar.h"
-#include "device/vibration/vibration_manager_impl_android.h"
-
-namespace device {
-namespace android {
-namespace {
-
-const base::android::RegistrationMethod kRegisteredMethods[] = {
- { "VibrationProvider", device::VibrationManagerImplAndroid::Register },
-};
-
-} // namespace
-
-bool RegisterVibrationJni(JNIEnv* env) {
- return RegisterNativeMethods(
- env, kRegisteredMethods, arraysize(kRegisteredMethods));
-}
-
-} // namespace android
-} // namespace device
diff --git a/device/vibration/android/vibration_jni_registrar.h b/device/vibration/android/vibration_jni_registrar.h
deleted file mode 100644
index f4f08d2..0000000
--- a/device/vibration/android/vibration_jni_registrar.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef DEVICE_VIBRATION_ANDROID_VIBRATION_JNI_REGISTRAR_H_
-#define DEVICE_VIBRATION_ANDROID_VIBRATION_JNI_REGISTRAR_H_
-
-#include <jni.h>
-
-#include "device/vibration/vibration_export.h"
-
-namespace device {
-namespace android {
-
-DEVICE_VIBRATION_EXPORT bool RegisterVibrationJni(JNIEnv* env);
-
-} // namespace android
-} // namespace device
-
-#endif // DEVICE_VIBRATION_ANDROID_VIBRATION_JNI_REGISTRAR_H_
diff --git a/device/vibration/vibration.gyp b/device/vibration/vibration.gyp
index be4068c..99d75ba 100644
--- a/device/vibration/vibration.gyp
+++ b/device/vibration/vibration.gyp
@@ -8,7 +8,7 @@
},
'targets': [
{
- # GN version: //device/vibration:vibration_mojo
+ # GN version: //device/vibration:mojo_bindings
'target_name': 'device_vibration_mojo_bindings',
'type': 'static_library',
'includes': [
@@ -34,18 +34,13 @@
'DEVICE_VIBRATION_IMPLEMENTATION',
],
'sources': [
- 'android/vibration_jni_registrar.cc',
- 'android/vibration_jni_registrar.h',
'vibration_manager_impl.h',
- 'vibration_manager_impl_android.cc',
- 'vibration_manager_impl_android.h',
'vibration_manager_impl_default.cc',
],
'conditions': [
['OS == "android"', {
'dependencies': [
'device_vibration_java',
- 'device_vibration_jni_headers',
],
'sources!': [
'vibration_manager_impl_default.cc',
@@ -58,21 +53,12 @@
['OS == "android"', {
'targets': [
{
- 'target_name': 'device_vibration_jni_headers',
- 'type': 'none',
- 'sources': [
- 'android/java/src/org/chromium/device/vibration/VibrationProvider.java',
- ],
- 'variables': {
- 'jni_gen_package': 'device_vibration',
- },
- 'includes': [ '../../build/jni_generator.gypi' ],
- },
- {
'target_name': 'device_vibration_java',
'type': 'none',
'dependencies': [
'../../base/base.gyp:base',
+ '../../third_party/mojo/mojo_public.gyp:mojo_bindings_java',
+ 'device_vibration_mojo_bindings',
],
'variables': {
'java_in_dir': '../../device/vibration/android/java',
diff --git a/device/vibration/vibration_manager_impl_android.cc b/device/vibration/vibration_manager_impl_android.cc
deleted file mode 100644
index 6171feb..0000000
--- a/device/vibration/vibration_manager_impl_android.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "device/vibration/vibration_manager_impl_android.h"
-
-#include "device/vibration/vibration_manager_impl.h"
-#include "jni/VibrationProvider_jni.h"
-
-using base::android::AttachCurrentThread;
-
-namespace device {
-
-namespace {
-const int64 kMinimumVibrationDurationMs = 1; // 1 millisecond
-const int64 kMaximumVibrationDurationMs = 10000; // 10 seconds
-}
-
-VibrationManagerImplAndroid::VibrationManagerImplAndroid(
- mojo::InterfaceRequest<VibrationManager> request)
- : binding_(this, request.Pass()) {
- j_vibration_provider_.Reset(
- Java_VibrationProvider_create(AttachCurrentThread(),
- base::android::GetApplicationContext()));
-}
-
-VibrationManagerImplAndroid::~VibrationManagerImplAndroid() {
-}
-
-// static
-bool VibrationManagerImplAndroid::Register(JNIEnv* env) {
- return RegisterNativesImpl(env);
-}
-
-void VibrationManagerImplAndroid::Vibrate(int64 milliseconds) {
- // Though the Blink implementation already sanitizes vibration times, don't
- // trust any values passed from the client.
- int64 sanitized_milliseconds = std::max(kMinimumVibrationDurationMs,
- std::min(milliseconds, kMaximumVibrationDurationMs));
-
- Java_VibrationProvider_vibrate(AttachCurrentThread(),
- j_vibration_provider_.obj(),
- sanitized_milliseconds);
-}
-
-void VibrationManagerImplAndroid::Cancel() {
- Java_VibrationProvider_cancelVibration(AttachCurrentThread(),
- j_vibration_provider_.obj());
-}
-
-// static
-void VibrationManagerImpl::Create(
- mojo::InterfaceRequest<VibrationManager> request) {
- new VibrationManagerImplAndroid(request.Pass());
-}
-
-} // namespace device
diff --git a/device/vibration/vibration_manager_impl_android.h b/device/vibration/vibration_manager_impl_android.h
deleted file mode 100644
index 413311c..0000000
--- a/device/vibration/vibration_manager_impl_android.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef DEVICE_VIBRATION_VIBRATION_MANAGER_IMPL_ANDROID_H_
-#define DEVICE_VIBRATION_VIBRATION_MANAGER_IMPL_ANDROID_H_
-
-#include "base/android/jni_android.h"
-#include "device/vibration/vibration_manager.mojom.h"
-#include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
-
-namespace device {
-
-// TODO(timvolodine): consider implementing the VibrationManager mojo service
-// directly in java, crbug.com/439434.
-class VibrationManagerImplAndroid : public VibrationManager {
- public:
- static bool Register(JNIEnv* env);
-
- void Vibrate(int64 milliseconds) override;
- void Cancel() override;
-
- private:
- friend class VibrationManagerImpl;
-
- explicit VibrationManagerImplAndroid(
- mojo::InterfaceRequest<VibrationManager> request);
- ~VibrationManagerImplAndroid() override;
-
- // The binding between this object and the other end of the pipe.
- mojo::StrongBinding<VibrationManager> binding_;
-
- base::android::ScopedJavaGlobalRef<jobject> j_vibration_provider_;
-};
-
-} // namespace device
-
-#endif // DEVICE_VIBRATION_VIBRATION_MANAGER_IMPL_ANDROID_H_