From 699e429f1913197650cc2fc2d8cb6e506be66842 Mon Sep 17 00:00:00 2001
From: satok <satok@google.com>
Date: Wed, 23 Mar 2011 14:36:37 -0700
Subject: [PATCH] Added VibratorCompatWrapper

Change-Id: I7640f051873f42aa15337edc718ac95ec1c51698
---
 .../compat/VibratorCompatWrapper.java         | 47 +++++++++++++++++++
 .../android/inputmethod/latin/LatinIME.java   |  7 ++-
 .../android/inputmethod/latin/Settings.java   |  5 +-
 3 files changed, 52 insertions(+), 7 deletions(-)
 create mode 100644 java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java

diff --git a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
new file mode 100644
index 000000000..8e2a2e0b8
--- /dev/null
+++ b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.compat;
+
+import android.content.Context;
+import android.os.Vibrator;
+
+import java.lang.reflect.Method;
+
+public class VibratorCompatWrapper {
+    private static final Method METHOD_hasVibrator = CompatUtils.getMethod(Vibrator.class,
+            "hasVibrator", int.class);
+
+    private static final VibratorCompatWrapper sInstance = new VibratorCompatWrapper();
+    private Vibrator mVibrator;
+
+    private VibratorCompatWrapper() {
+    }
+
+    public static VibratorCompatWrapper getInstance(Context context) {
+        if (sInstance.mVibrator == null) {
+            sInstance.mVibrator =
+                    (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+        }
+        return sInstance;
+    }
+
+    public boolean hasVibrator() {
+        if (mVibrator == null)
+            return false;
+        return (Boolean) CompatUtils.invoke(mVibrator, true, METHOD_hasVibrator);
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 79ef03a8b..64656c381 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -20,6 +20,7 @@ import com.android.inputmethod.compat.CompatUtils;
 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
 import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
 import com.android.inputmethod.deprecated.VoiceProxy;
+import com.android.inputmethod.compat.VibratorCompatWrapper;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardActionListener;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
@@ -45,7 +46,6 @@ import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
 import android.os.SystemClock;
-import android.os.Vibrator;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceManager;
 import android.text.InputType;
@@ -2118,9 +2118,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
     private void loadSettings(EditorInfo attribute) {
         // Get the settings preferences
         final SharedPreferences prefs = mPrefs;
-        Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
-        mVibrateOn = vibrator != null && vibrator.hasVibrator()
-                && prefs.getBoolean(Settings.PREF_VIBRATE_ON, false);
+        final boolean hasVibrator = VibratorCompatWrapper.getInstance(this).hasVibrator();
+        mVibrateOn = hasVibrator && prefs.getBoolean(Settings.PREF_VIBRATE_ON, false);
         mSoundOn = prefs.getBoolean(Settings.PREF_SOUND_ON,
                 mResources.getBoolean(R.bool.config_default_sound_enabled));
 
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index aedb0ff75..488ab09c3 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
 import com.android.inputmethod.compat.CompatUtils;
 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
 import com.android.inputmethod.deprecated.VoiceProxy;
+import com.android.inputmethod.compat.VibratorCompatWrapper;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -26,7 +27,6 @@ import android.app.backup.BackupManager;
 import android.content.DialogInterface;
 import android.content.SharedPreferences;
 import android.os.Bundle;
-import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -134,8 +134,7 @@ public class Settings extends PreferenceActivity
             generalSettings.removePreference(mVoicePreference);
         }
 
-        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
-        if (vibrator == null || !vibrator.hasVibrator()) {
+        if (!VibratorCompatWrapper.getInstance(this).hasVibrator()) {
             generalSettings.removePreference(findPreference(PREF_VIBRATE_ON));
         }