Fix the crash issue caused by vibrate permission

The app will be crashed when using vibrate API, without VIBRATE permission specified.
Catch the security exception instead of crash should be more friendly.

BUG=338151
TEST=

Review URL: https://codereview.chromium.org/143673004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251289 0039d316-1c4b-4281-b951-d872f2087c98
parent 56f547af
......@@ -110,6 +110,7 @@ Glenn Adams <glenn@chromium.org>
Gnanasekar Somanathan <gnanasekar.s@samsung.com>
Goutham Jagannatha <wrm364@motorola.com>
Grzegorz Czajkowski <g.czajkowski@samsung.com>
Guangzhen Li <guangzhen.li@intel.com>
Gyuyoung Kim <gyuyoung.kim@samsung.com>
Habib Virji <habib.virji@samsung.com>
Haitao Feng <haitao.feng@intel.com>
......
......@@ -5,8 +5,10 @@
package org.chromium.content.browser;
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.CalledByNative;
import org.chromium.base.JNINamespace;
......@@ -16,9 +18,11 @@ import org.chromium.base.JNINamespace;
*/
@JNINamespace("content")
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) {
......@@ -27,17 +31,24 @@ class VibrationProvider {
@CalledByNative
private void vibrate(long milliseconds) {
if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT)
if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT &&
mHasVibratePermission) {
mVibrator.vibrate(milliseconds);
}
}
@CalledByNative
private void cancelVibration() {
mVibrator.cancel();
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.");
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment