Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(689)

Side by Side Diff: device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java

Issue 2774783003: [DeviceService] Add service tests for VibrationManager. (Closed)
Patch Set: Address comments from blundell@ Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/vibration/android/BUILD.gn ('k') | device/vibration/vibration_manager_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.device.vibration; 5 package org.chromium.device.vibration;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.pm.PackageManager; 8 import android.content.pm.PackageManager;
9 import android.media.AudioManager; 9 import android.media.AudioManager;
10 import android.os.Vibrator; 10 import android.os.Vibrator;
11 import android.util.Log; 11 import android.util.Log;
12 12
13 import org.chromium.base.VisibleForTesting; 13 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.base.annotations.JNINamespace;
14 import org.chromium.device.mojom.VibrationManager; 15 import org.chromium.device.mojom.VibrationManager;
15 import org.chromium.mojo.system.MojoException; 16 import org.chromium.mojo.system.MojoException;
16 import org.chromium.services.service_manager.InterfaceFactory; 17 import org.chromium.services.service_manager.InterfaceFactory;
17 18
18 /** 19 /**
19 * Android implementation of the vibration manager service defined in 20 * Android implementation of the vibration manager service defined in
20 * device/vibration/vibration_manager.mojom. 21 * device/vibration/vibration_manager.mojom.
21 */ 22 */
23 @JNINamespace("device")
22 public class VibrationManagerImpl implements VibrationManager { 24 public class VibrationManagerImpl implements VibrationManager {
23 private static final String TAG = "VibrationManagerImpl"; 25 private static final String TAG = "VibrationManagerImpl";
24 26
25 private static final long MINIMUM_VIBRATION_DURATION_MS = 1; // 1 millisecon d 27 private static final long MINIMUM_VIBRATION_DURATION_MS = 1; // 1 millisecon d
26 private static final long MAXIMUM_VIBRATION_DURATION_MS = 10000; // 10 secon ds 28 private static final long MAXIMUM_VIBRATION_DURATION_MS = 10000; // 10 secon ds
27 29
28 private final AudioManager mAudioManager; 30 private final AudioManager mAudioManager;
29 private final Vibrator mVibrator; 31 private final Vibrator mVibrator;
30 private final boolean mHasVibratePermission; 32 private final boolean mHasVibratePermission;
31 33
32 private static AndroidVibratorWrapper sVibratorWrapper; 34 private static long sVibrateMilliSecondsForTesting = -1;
33 35 private static boolean sVibrateCancelledForTesting = false;
34 /**
35 * Android Vibrator wrapper class provided to test code to extend.
36 */
37 @VisibleForTesting
38 public static class AndroidVibratorWrapper {
39 protected AndroidVibratorWrapper() {}
40
41 public void vibrate(Vibrator vibrator, long milliseconds) {
42 vibrator.vibrate(milliseconds);
43 }
44
45 public void cancel(Vibrator vibrator) {
46 vibrator.cancel();
47 }
48 }
49
50 // Test code can use this function to inject other wrapper for testing.
51 public static void setVibratorWrapperForTesting(AndroidVibratorWrapper wrapp er) {
52 sVibratorWrapper = wrapper;
53 }
54 36
55 public VibrationManagerImpl(Context context) { 37 public VibrationManagerImpl(Context context) {
56 mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SE RVICE); 38 mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SE RVICE);
57 mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE ); 39 mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE );
58 if (sVibratorWrapper == null) {
59 sVibratorWrapper = new AndroidVibratorWrapper();
60 }
61 // TODO(mvanouwerkerk): What happens if permission is revoked? Handle th is better. 40 // TODO(mvanouwerkerk): What happens if permission is revoked? Handle th is better.
62 mHasVibratePermission = 41 mHasVibratePermission =
63 context.checkCallingOrSelfPermission(android.Manifest.permission .VIBRATE) 42 context.checkCallingOrSelfPermission(android.Manifest.permission .VIBRATE)
64 == PackageManager.PERMISSION_GRANTED; 43 == PackageManager.PERMISSION_GRANTED;
65 if (!mHasVibratePermission) { 44 if (!mHasVibratePermission) {
66 Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission." ); 45 Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission." );
67 } 46 }
68 } 47 }
69 48
70 @Override 49 @Override
71 public void close() {} 50 public void close() {}
72 51
73 @Override 52 @Override
74 public void onConnectionError(MojoException e) {} 53 public void onConnectionError(MojoException e) {}
75 54
76 @Override 55 @Override
77 public void vibrate(long milliseconds, VibrateResponse callback) { 56 public void vibrate(long milliseconds, VibrateResponse callback) {
78 // Though the Blink implementation already sanitizes vibration times, do n't 57 // Though the Blink implementation already sanitizes vibration times, do n't
79 // trust any values passed from the client. 58 // trust any values passed from the client.
80 long sanitizedMilliseconds = Math.max(MINIMUM_VIBRATION_DURATION_MS, 59 long sanitizedMilliseconds = Math.max(MINIMUM_VIBRATION_DURATION_MS,
81 Math.min(milliseconds, MAXIMUM_VIBRATION_DURATION_MS)); 60 Math.min(milliseconds, MAXIMUM_VIBRATION_DURATION_MS));
82 61
83 if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT 62 if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT
84 && mHasVibratePermission) { 63 && mHasVibratePermission) {
85 sVibratorWrapper.vibrate(mVibrator, sanitizedMilliseconds); 64 mVibrator.vibrate(sanitizedMilliseconds);
86 } 65 }
66 setVibrateMilliSecondsForTesting(sanitizedMilliseconds);
87 callback.call(); 67 callback.call();
88 } 68 }
89 69
90 @Override 70 @Override
91 public void cancel(CancelResponse callback) { 71 public void cancel(CancelResponse callback) {
92 if (mHasVibratePermission) sVibratorWrapper.cancel(mVibrator); 72 if (mHasVibratePermission) {
73 mVibrator.cancel();
74 }
75 setVibrateCancelledForTesting(true);
93 callback.call(); 76 callback.call();
94 } 77 }
95 78
96 /** 79 /**
97 * A factory for implementations of the VibrationManager interface. 80 * A factory for implementations of the VibrationManager interface.
98 */ 81 */
99 public static class Factory implements InterfaceFactory<VibrationManager> { 82 public static class Factory implements InterfaceFactory<VibrationManager> {
100 private Context mContext; 83 private Context mContext;
101 public Factory(Context context) { 84 public Factory(Context context) {
102 mContext = context; 85 mContext = context;
103 } 86 }
104 87
105 @Override 88 @Override
106 public VibrationManager createImpl() { 89 public VibrationManager createImpl() {
107 return new VibrationManagerImpl(mContext); 90 return new VibrationManagerImpl(mContext);
108 } 91 }
109 } 92 }
93
94 static void setVibrateMilliSecondsForTesting(long milliseconds) {
95 sVibrateMilliSecondsForTesting = milliseconds;
96 }
97
98 static void setVibrateCancelledForTesting(boolean cancelled) {
99 sVibrateCancelledForTesting = cancelled;
100 }
101
102 @CalledByNative
103 static long getVibrateMilliSecondsForTesting() {
104 return sVibrateMilliSecondsForTesting;
105 }
106
107 @CalledByNative
108 static boolean getVibrateCancelledForTesting() {
109 return sVibrateCancelledForTesting;
110 }
110 } 111 }
OLDNEW
« no previous file with comments | « device/vibration/android/BUILD.gn ('k') | device/vibration/vibration_manager_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698