remove references to Gservices from LatinIME

Open-sourced platform code shouldn't refer to Gservices.  Use the
platform-standard Secure settings table instead (which we can still
push values into from the servers on google-experience devices, like
gservices), but can be populated by other mechanisms for non-ged
phones.

Change-Id: Id0b5830bfc78c1d10dc732dce46546cd09cd1422
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c6630e1..7b2e9b6 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5,7 +5,6 @@
     <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
     <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
     <uses-permission android:name="android.permission.BACKUP_DATA" />
-    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
 
     <application android:label="@string/english_ime_name"
             android:backupAgent="LatinIMEBackupAgent"
diff --git a/src/com/android/inputmethod/latin/Hints.java b/src/com/android/inputmethod/latin/Hints.java
index 109d3f0..689c8d8 100644
--- a/src/com/android/inputmethod/latin/Hints.java
+++ b/src/com/android/inputmethod/latin/Hints.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2009 Google Inc.
- * 
+ *
  * 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
@@ -16,7 +16,7 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.voice.GoogleSettingsUtil;
+import com.android.inputmethod.voice.SettingsUtil;
 
 import android.content.ContentResolver;
 import android.content.Context;
@@ -66,15 +66,15 @@
     public Hints(Context context, Display display) {
         mContext = context;
         mDisplay = display;
-        
+
         ContentResolver cr = mContext.getContentResolver();
-        mSwipeHintMaxDaysToShow = GoogleSettingsUtil.getGservicesInt(
+        mSwipeHintMaxDaysToShow = SettingsUtil.getSettingsInt(
                 cr,
-                GoogleSettingsUtil.LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS,
+                SettingsUtil.LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS,
                 DEFAULT_SWIPE_HINT_MAX_DAYS_TO_SHOW);
-        mPunctuationHintMaxDisplays = GoogleSettingsUtil.getGservicesInt(
+        mPunctuationHintMaxDisplays = SettingsUtil.getSettingsInt(
                 cr,
-                GoogleSettingsUtil.LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS,
+                SettingsUtil.LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS,
                 DEFAULT_PUNCTUATION_HINT_MAX_DISPLAYS);
     }
 
@@ -108,7 +108,7 @@
                 PreferenceManager.getDefaultSharedPreferences(mContext).edit();
         editor.putLong(PREF_VOICE_INPUT_LAST_TIME_USED, System.currentTimeMillis());
         editor.commit();
-        
+
         mVoiceResultContainedPunctuation = false;
         for (CharSequence s : SPEAKABLE_PUNCTUATION.keySet()) {
             if (text.indexOf(s.toString()) >= 0) {
@@ -117,40 +117,40 @@
             }
         }
     }
-    
+
     private boolean shouldShowSwipeHint() {
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
 
         int numUniqueDaysShown = sp.getInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, 0);
-        
+
         // If we've already shown the hint for enough days, we'll return false.
-        if (numUniqueDaysShown < mSwipeHintMaxDaysToShow) {    
+        if (numUniqueDaysShown < mSwipeHintMaxDaysToShow) {
 
             long lastTimeVoiceWasUsed = sp.getLong(PREF_VOICE_INPUT_LAST_TIME_USED, 0);
-            
+
             // If the user has used voice today, we'll return false. (We don't show the hint on
             // any day that the user has already used voice.)
-            if (!isFromToday(lastTimeVoiceWasUsed)) {                
+            if (!isFromToday(lastTimeVoiceWasUsed)) {
                 return true;
             }
         }
-        
+
         return false;
     }
-    
+
     /**
      * Determines whether the provided time is from some time today (i.e., this day, month,
      * and year).
      */
     private boolean isFromToday(long timeInMillis) {
         if (timeInMillis == 0) return false;
-        
+
         Calendar today = Calendar.getInstance();
         today.setTimeInMillis(System.currentTimeMillis());
-        
+
         Calendar timestamp = Calendar.getInstance();
         timestamp.setTimeInMillis(timeInMillis);
-        
+
         return (today.get(Calendar.YEAR) == timestamp.get(Calendar.YEAR) &&
                 today.get(Calendar.DAY_OF_MONTH) == timestamp.get(Calendar.DAY_OF_MONTH) &&
                 today.get(Calendar.MONTH) == timestamp.get(Calendar.MONTH));
@@ -158,7 +158,7 @@
 
     private void showHint(int hintViewResource) {
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
-        
+
         int numUniqueDaysShown = sp.getInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, 0);
         long lastTimeHintWasShown = sp.getLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, 0);
 
@@ -176,7 +176,7 @@
             mDisplay.showHint(hintViewResource);
         }
     }
-    
+
     private int getAndIncrementPref(String pref) {
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
         int value = sp.getInt(pref, 0);
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java
index 5faac5f..5d9b5e9 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/src/com/android/inputmethod/latin/LatinIME.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2008-2009 Google Inc.
- * 
+ *
  * 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
@@ -60,7 +60,7 @@
 
 import com.android.inputmethod.voice.EditingUtil;
 import com.android.inputmethod.voice.FieldContext;
-import com.android.inputmethod.voice.GoogleSettingsUtil;
+import com.android.inputmethod.voice.SettingsUtil;
 import com.android.inputmethod.voice.VoiceInput;
 
 import java.io.FileDescriptor;
@@ -83,7 +83,7 @@
     static final boolean TRACE = false;
     static final boolean VOICE_INSTALLED = true;
     static final boolean ENABLE_VOICE_BUTTON = true;
-    
+
     private static final String PREF_VIBRATE_ON = "vibrate_on";
     private static final String PREF_SOUND_ON = "sound_on";
     private static final String PREF_AUTO_CAP = "auto_cap";
@@ -95,9 +95,9 @@
     private static final String PREF_VOICE_MAIN = "voice_on_main";
 
     // Whether or not the user has used voice input before (and thus, whether to show the
-    // first-run warning dialog or not). 
+    // first-run warning dialog or not).
     private static final String PREF_HAS_USED_VOICE_INPUT = "has_used_voice_input";
-    
+
     // Whether or not the user has used voice input from an unsupported locale UI before.
     // For example, the user has a Chinese UI but activates voice input.
     private static final String PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE =
@@ -116,12 +116,12 @@
             "en_NZ " +
             "en_SG " +
             "en_ZA ";
-    
+
     // The private IME option used to indicate that no microphone should be shown for a
     // given text field. For instance this is specified by the search dialog when the
     // dialog is already showing a voice search button.
     private static final String IME_OPTION_NO_MICROPHONE = "nm";
-    
+
     public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
     public static final String PREF_INPUT_LANGUAGE = "input_language";
 
@@ -138,7 +138,7 @@
     // If we detect a swipe gesture, and the user types N ms later, cancel the
     // swipe since it was probably a false trigger.
     private static final long MIN_MILLIS_AFTER_SWIPE_TO_WAIT_FOR_TYPING = 500;
-    
+
     // How many continuous deletes at which to start deleting at a higher speed.
     private static final int DELETE_ACCELERATE_AT = 20;
     // Key events coming any faster than this are long-presses.
@@ -150,7 +150,7 @@
     // A word that is frequently typed and get's promoted to the user dictionary, uses this
     // frequency.
     static final int FREQUENCY_FOR_AUTO_ADD = 250;
-    
+
     static final int KEYCODE_ENTER = '\n';
     static final int KEYCODE_SPACE = ' ';
 
@@ -163,18 +163,18 @@
     private CandidateView mCandidateView;
     private Suggest mSuggest;
     private CompletionInfo[] mCompletions;
-    
+
     private AlertDialog mOptionsDialog;
     private AlertDialog mVoiceWarningDialog;
-    
+
     KeyboardSwitcher mKeyboardSwitcher;
-    
+
     private UserDictionary mUserDictionary;
     private ContactsDictionary mContactsDictionary;
     private ExpandableDictionary mAutoDictionary;
 
     private Hints mHints;
-    
+
     Resources mResources;
 
     private String mLocale;
@@ -214,13 +214,13 @@
     private boolean mEnableVoice = true;
     private boolean mVoiceOnPrimary;
     private int     mOrientation;
-    
+
     // Indicates whether the suggestion strip is to be on in landscape
     private boolean mJustAccepted;
     private CharSequence mJustRevertedSeparator;
     private int mDeleteCount;
     private long mLastKeyTime;
-    
+
     private Tutorial mTutorial;
 
     private Vibrator mVibrator;
@@ -420,7 +420,7 @@
         return mCandidateViewContainer;
     }
 
-    @Override 
+    @Override
     public void onStartInputView(EditorInfo attribute, boolean restarting) {
         // In landscape mode, this method gets called without the input view being created.
         if (mInputView == null) {
@@ -445,7 +445,7 @@
                 variation == EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
             mPasswordText = true;
         }
-        
+
         mEnableVoiceButton = shouldShowVoiceButton(makeFieldContext(), attribute);
         final boolean enableVoiceButton = mEnableVoiceButton && mEnableVoice;
 
@@ -565,11 +565,11 @@
     @Override
     public void onFinishInput() {
         super.onFinishInput();
-        
+
         if (mAfterVoiceInput) mVoiceInput.logInputEnded();
-        
+
         mVoiceInput.flushLogs();
-        
+
         if (mInputView != null) {
             mInputView.closing();
         }
@@ -692,7 +692,7 @@
                 setSuggestions(null, false, false, false);
                 return;
             }
-            
+
             List<CharSequence> stringList = new ArrayList<CharSequence>();
             for (int i=0; i<(completions != null ? completions.length : 0); i++) {
                 CompletionInfo ci = completions[i];
@@ -712,7 +712,7 @@
             super.setCandidatesViewShown(shown);
         }
     }
-    
+
     @Override
     public void onComputeInsets(InputMethodService.Insets outInsets) {
         super.onComputeInsets(outInsets);
@@ -720,7 +720,7 @@
             outInsets.contentTopInsets = outInsets.visibleTopInsets;
         }
     }
-    
+
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         switch (keyCode) {
@@ -760,7 +760,7 @@
                 }
                 // Enable shift key and DPAD to do selections
                 if (mInputView != null && mInputView.isShown() && mInputView.isShifted()) {
-                    event = new KeyEvent(event.getDownTime(), event.getEventTime(), 
+                    event = new KeyEvent(event.getDownTime(), event.getEventTime(),
                             event.getAction(), event.getKeyCode(), event.getRepeatCount(),
                             event.getDeviceId(), event.getScanCode(),
                             KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON);
@@ -864,7 +864,7 @@
             updateShiftKeyState(getCurrentInputEditorInfo());
         }
     }
-    
+
     public boolean addWordToDictionary(String word) {
         mUserDictionary.addWord(word, 128);
         return true;
@@ -877,12 +877,12 @@
             return false;
         }
     }
-    
+
     // Implementation of KeyboardViewListener
 
     public void onKey(int primaryCode, int[] keyCodes) {
         long when = SystemClock.uptimeMillis();
-        if (primaryCode != Keyboard.KEYCODE_DELETE || 
+        if (primaryCode != Keyboard.KEYCODE_DELETE ||
                 when > mLastKeyTime + QUICK_PRESS) {
             mDeleteCount = 0;
         }
@@ -937,7 +937,7 @@
             changeKeyboardMode();
         }
     }
-    
+
     public void onText(CharSequence text) {
         InputConnection ic = getCurrentInputConnection();
         if (ic == null) return;
@@ -999,7 +999,7 @@
             mKeyboardSwitcher.toggleShift();
         }
     }
-    
+
     private void handleCharacter(int primaryCode, int[] keyCodes) {
         if (VOICE_INSTALLED && mVoiceInputHighlighted) {
             commitVoiceInput();
@@ -1055,12 +1055,12 @@
         }
         if (mPredicting) {
             // In certain languages where single quote is a separator, it's better
-            // not to auto correct, but accept the typed word. For instance, 
+            // not to auto correct, but accept the typed word. For instance,
             // in Italian dov' should not be expanded to dove' because the elision
             // requires the last vowel to be removed.
-            if (mAutoCorrectOn && primaryCode != '\'' && 
-                    (mJustRevertedSeparator == null 
-                            || mJustRevertedSeparator.length() == 0 
+            if (mAutoCorrectOn && primaryCode != '\'' &&
+                    (mJustRevertedSeparator == null
+                            || mJustRevertedSeparator.length() == 0
                             || mJustRevertedSeparator.charAt(0) != primaryCode)) {
                 pickDefaultSuggestion();
                 pickedDefault = true;
@@ -1070,10 +1070,10 @@
         }
         sendKeyChar((char)primaryCode);
         TextEntryState.typedCharacter((char) primaryCode, true);
-        if (TextEntryState.getState() == TextEntryState.STATE_PUNCTUATION_AFTER_ACCEPTED 
+        if (TextEntryState.getState() == TextEntryState.STATE_PUNCTUATION_AFTER_ACCEPTED
                 && primaryCode != KEYCODE_ENTER) {
             swapPunctuationAndSpace();
-        } else if (isPredictionOn() && primaryCode == ' ') { 
+        } else if (isPredictionOn() && primaryCode == ' ') {
         //else if (TextEntryState.STATE_SPACE_AFTER_ACCEPTED) {
             doubleSpace();
         }
@@ -1101,7 +1101,7 @@
             toggleCapsLock();
         }
     }
-    
+
     private void toggleCapsLock() {
         mCapsLock = !mCapsLock;
         if (mKeyboardSwitcher.isAlphabetMode()) {
@@ -1113,13 +1113,13 @@
         mHandler.removeMessages(MSG_UPDATE_SUGGESTIONS);
         mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_UPDATE_SUGGESTIONS), 100);
     }
-    
+
     private boolean isPredictionOn() {
         boolean predictionOn = mPredictionOn;
         //if (isFullscreenMode()) predictionOn &= mPredictionLandscape;
         return predictionOn;
     }
-    
+
     private boolean isCandidateStripVisible() {
         return isPredictionOn() && mShowSuggestions;
     }
@@ -1159,7 +1159,7 @@
             reallyStartListening(swipe);
         }
     }
-    
+
     private void reallyStartListening(boolean swipe) {
         if (!mHasUsedVoiceInput) {
             // The user has started a voice input, so remember that in the
@@ -1170,7 +1170,7 @@
             editor.commit();
             mHasUsedVoiceInput = true;
         }
-        
+
         if (!mLocaleSupportedForVoiceInput && !mHasUsedVoiceInputUnsupportedLocale) {
             // The user has started a voice input from an unsupported locale, so remember that
             // in the future (so we don't show the warning dialog the next time they do this).
@@ -1180,7 +1180,7 @@
             editor.commit();
             mHasUsedVoiceInputUnsupportedLocale = true;
         }
-        
+
         // Clear N-best suggestions
         setSuggestions(null, false, false, true);
 
@@ -1189,7 +1189,7 @@
         mVoiceInput.startListening(context, swipe);
         switchToRecognitionStatusView();
     }
-    
+
     private void showVoiceWarningDialog(final boolean swipe) {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setCancelable(true);
@@ -1205,7 +1205,7 @@
                 mVoiceInput.logKeyboardWarningDialogCancel();
             }
         });
-        
+
         if (mLocaleSupportedForVoiceInput) {
             String message = getString(R.string.voice_warning_may_not_understand) + "\n\n" +
                     getString(R.string.voice_warning_how_to_turn_off);
@@ -1216,10 +1216,10 @@
                     getString(R.string.voice_warning_how_to_turn_off);
             builder.setMessage(message);
         }
-        
+
         builder.setTitle(R.string.voice_warning_title);
         mVoiceWarningDialog = builder.create();
-        
+
         Window window = mVoiceWarningDialog.getWindow();
         WindowManager.LayoutParams lp = window.getAttributes();
         lp.token = mInputView.getWindowToken();
@@ -1391,11 +1391,11 @@
         // Fool the state watcher so that a subsequent backspace will not do a revert
         TextEntryState.typedCharacter((char) KEYCODE_SPACE, true);
     }
-    
+
     private void pickSuggestion(CharSequence suggestion) {
         if (mCapsLock) {
             suggestion = suggestion.toString().toUpperCase();
-        } else if (preferCapitalization() 
+        } else if (preferCapitalization()
                 || (mKeyboardSwitcher.isAlphabetMode() && mInputView.isShifted())) {
             suggestion = suggestion.toString().toUpperCase().charAt(0)
                     + suggestion.subSequence(1, suggestion.length()).toString();
@@ -1428,13 +1428,13 @@
                 && !isWordSeparator(toLeft.charAt(0))) {
             return true;
         }
-        if (!TextUtils.isEmpty(toRight) 
+        if (!TextUtils.isEmpty(toRight)
                 && !isWordSeparator(toRight.charAt(0))) {
             return true;
         }
         return false;
     }
-    
+
     public void revertLastWord(boolean deleteChar) {
         final int length = mComposing.length();
         if (!mPredicting && length > 0) {
@@ -1445,7 +1445,7 @@
             if (deleteChar) ic.deleteSurroundingText(1, 0);
             int toDelete = mCommittedLength;
             CharSequence toTheLeft = ic.getTextBeforeCursor(mCommittedLength, 0);
-            if (toTheLeft != null && toTheLeft.length() > 0 
+            if (toTheLeft != null && toTheLeft.length() > 0
                     && isWordSeparator(toTheLeft.charAt(0))) {
                 toDelete--;
             }
@@ -1463,7 +1463,7 @@
     protected String getWordSeparators() {
         return mWordSeparators;
     }
-    
+
     public boolean isWordSeparator(int code) {
         String separators = getWordSeparators();
         return separators.contains(String.valueOf((char)code));
@@ -1542,11 +1542,11 @@
     public void onRelease(int primaryCode) {
         //vibrate();
     }
-    
+
     private FieldContext makeFieldContext() {
         return new FieldContext(getCurrentInputConnection(), getCurrentInputEditorInfo());
     }
-    
+
     private boolean fieldCanDoVoice(FieldContext fieldContext) {
         return !mPasswordText
                 && mVoiceInput != null
@@ -1564,7 +1564,7 @@
                 && !(attribute != null && attribute.privateImeOptions != null
                         && attribute.privateImeOptions.equals(IME_OPTION_NO_MICROPHONE));
     }
-    
+
     // receive ringer mode changes to detect silent mode
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
@@ -1652,7 +1652,7 @@
             }
         }
     }
-    
+
     private void startTutorial() {
         mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_TUTORIAL), 500);
     }
@@ -1700,21 +1700,21 @@
         mHasUsedVoiceInput = sp.getBoolean(PREF_HAS_USED_VOICE_INPUT, false);
         mHasUsedVoiceInputUnsupportedLocale =
                 sp.getBoolean(PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE, false);
-        
+
         // Get the current list of supported locales and check the current locale against that
         // list. We cache this value so as not to check it every time the user starts a voice
         // input. Because this method is called by onStartInputView, this should mean that as
         // long as the locale doesn't change while the user is keeping the IME open, the
         // value should never be stale.
-        String supportedLocalesString = GoogleSettingsUtil.getGservicesString(
+        String supportedLocalesString = SettingsUtil.getSettingsString(
                 getContentResolver(),
-                GoogleSettingsUtil.LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES,
+                SettingsUtil.LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES,
                 DEFAULT_VOICE_INPUT_SUPPORTED_LOCALES);
         ArrayList<String> voiceInputSupportedLocales =
                 Lists.newArrayList(supportedLocalesString.split("\\s+"));
-        
+
         mLocaleSupportedForVoiceInput = voiceInputSupportedLocales.contains(mLocale);
-        
+
         // If there is no auto text data, then quickfix is forced to "on", so that the other options
         // will continue to work
 
@@ -1809,7 +1809,7 @@
 
     @Override protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
         super.dump(fd, fout, args);
-        
+
         final Printer p = new PrintWriterPrinter(fout);
         p.println("LatinIME state :");
         p.println("  Keyboard mode = " + mKeyboardSwitcher.getKeyboardMode());
@@ -1827,14 +1827,14 @@
     }
 
     // Characters per second measurement
-    
+
     private static final boolean PERF_DEBUG = false;
     private long mLastCpsTime;
     private static final int CPS_BUFFER_SIZE = 16;
     private long[] mCpsIntervals = new long[CPS_BUFFER_SIZE];
     private int mCpsIndex;
     private boolean mInputTypeNoAutoCorrect;
-    
+
     private void measureCps() {
         if (!LatinIME.PERF_DEBUG) return;
         long now = System.currentTimeMillis();
diff --git a/src/com/android/inputmethod/latin/LatinIMESettings.java b/src/com/android/inputmethod/latin/LatinIMESettings.java
index 97833e0..98a0af9 100644
--- a/src/com/android/inputmethod/latin/LatinIMESettings.java
+++ b/src/com/android/inputmethod/latin/LatinIMESettings.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2008-2009 Google Inc.
- * 
+ *
  * 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
@@ -33,7 +33,7 @@
 
 import com.google.android.collect.Lists;
 
-import com.android.inputmethod.voice.GoogleSettingsUtil;
+import com.android.inputmethod.voice.SettingsUtil;
 import com.android.inputmethod.voice.VoiceInputLogger;
 
 import java.util.ArrayList;
@@ -49,20 +49,20 @@
     private static final String PREDICTION_SETTINGS_KEY = "prediction_settings";
     private static final String VOICE_SETTINGS_KEY = "enable_voice_input";
     private static final String VOICE_SERVER_KEY = "voice_server_url";
-    
+
     private static final String TAG = "LatinIMESettings";
-    
+
     // Dialog ids
     private static final int VOICE_INPUT_CONFIRM_DIALOG = 0;
-    
+
     private CheckBoxPreference mQuickFixes;
     private CheckBoxPreference mShowSuggestions;
     private CheckBoxPreference mVoicePreference;
-    
+
     private VoiceInputLogger mLogger;
-    
+
     private boolean mOkClicked = false;
-    
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -70,14 +70,14 @@
         mQuickFixes = (CheckBoxPreference) findPreference(QUICK_FIXES_KEY);
         mShowSuggestions = (CheckBoxPreference) findPreference(SHOW_SUGGESTIONS_KEY);
         mVoicePreference = (CheckBoxPreference) findPreference(VOICE_SETTINGS_KEY);
-        
+
         SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
         prefs.registerOnSharedPreferenceChangeListener(this);
-        
+
         mVoicePreference.setOnPreferenceClickListener(this);
         mVoicePreference.setChecked(prefs.getBoolean(
                 VOICE_SETTINGS_KEY, getResources().getBoolean(R.bool.voice_input_default)));
-        
+
         mLogger = VoiceInputLogger.getLogger(this);
     }
 
@@ -95,7 +95,7 @@
                 || !RecognitionManager.isRecognitionAvailable(this)) {
             getPreferenceScreen().removePreference(mVoicePreference);
         }
-        
+
         mVoicePreference.setChecked(
                 getPreferenceManager().getSharedPreferences().getBoolean(VOICE_SETTINGS_KEY, true));
     }
@@ -123,7 +123,7 @@
         }
         return false;
     }
-    
+
     @Override
     protected Dialog onCreateDialog(int id) {
         switch (id) {
@@ -144,13 +144,13 @@
                         .setTitle(R.string.voice_warning_title)
                         .setPositiveButton(android.R.string.ok, listener)
                         .setNegativeButton(android.R.string.cancel, listener);
-                
+
                 // Get the current list of supported locales and check the current locale against
                 // that list, to decide whether to put a warning that voice input will not work in
                 // the current language as part of the pop-up confirmation dialog.
-                String supportedLocalesString = GoogleSettingsUtil.getGservicesString(
+                String supportedLocalesString = SettingsUtil.getSettingsString(
                         getContentResolver(),
-                        GoogleSettingsUtil.LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES,
+                        SettingsUtil.LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES,
                         LatinIME.DEFAULT_VOICE_INPUT_SUPPORTED_LOCALES);
                 ArrayList<String> voiceInputSupportedLocales =
                         Lists.newArrayList(supportedLocalesString.split("\\s+"));
@@ -167,7 +167,7 @@
                             getString(R.string.voice_hint_dialog_message);
                     builder.setMessage(message);
                 }
-                
+
                 AlertDialog dialog = builder.create();
                 dialog.setOnDismissListener(this);
                 mLogger.settingsWarningDialogShown();
@@ -177,7 +177,7 @@
                 return null;
         }
     }
-    
+
     public void onDismiss(DialogInterface dialog) {
         mLogger.settingsWarningDialogDismissed();
         if (!mOkClicked) {
@@ -186,7 +186,7 @@
             mVoicePreference.setChecked(false);
         }
     }
-        
+
     private void updateVoicePreference() {
         SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit();
         boolean isChecked = mVoicePreference.isChecked();
diff --git a/src/com/android/inputmethod/voice/GoogleSettingsUtil.java b/src/com/android/inputmethod/voice/GoogleSettingsUtil.java
deleted file mode 100644
index d238579..0000000
--- a/src/com/android/inputmethod/voice/GoogleSettingsUtil.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * 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.voice;
-
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.util.Log;
-
-/**
- * Utility for getting Google-specific settings from GoogleSettings.Partner or
- * Gservices. Retrieving such settings may fail on a non-Google Experience
- * Device (GED)
- */
-public class GoogleSettingsUtil {
-    /**
-     * A whitespace-separated list of supported locales for voice input from the keyboard.
-     */
-    public static final String LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES =
-            "latin_ime_voice_input_supported_locales";
-    
-    /**
-     * A whitespace-separated list of recommended app packages for voice input from the
-     * keyboard.
-     */
-    public static final String LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES =
-            "latin_ime_voice_input_recommended_packages";
-
-    /**
-     * The maximum number of unique days to show the swipe hint for voice input.
-     */
-    public static final String LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS =
-            "latin_ime_voice_input_swipe_hint_max_days";
-    
-    /**
-     * The maximum number of times to show the punctuation hint for voice input.
-     */
-    public static final String LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS =
-            "latin_ime_voice_input_punctuation_hint_max_displays";
-
-    /**
-     * Endpointer parameters for voice input from the keyboard.
-     */
-    public static final String LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS =
-            "latin_ime_speech_minimum_length_millis";
-    public static final String LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS =
-            "latin_ime_speech_input_complete_silence_length_millis";
-    public static final String LATIN_IME_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS =
-            "latin_ime_speech_input_possibly_complete_silence_length_millis";    
-
-    /**
-     * Min and max volume levels that can be displayed on the "speak now" screen.
-     */
-    public static final String LATIN_IME_MIN_MICROPHONE_LEVEL =
-            "latin_ime_min_microphone_level";
-    public static final String LATIN_IME_MAX_MICROPHONE_LEVEL =
-            "latin_ime_max_microphone_level";
-
-    /**
-     * The number of sentence-level alternates to request of the server.
-     */
-    public static final String LATIN_IME_MAX_VOICE_RESULTS = "latin_ime_max_voice_results";
-
-    /**
-     * Uri to use to access gservices settings
-     */
-    private static final Uri GSERVICES_URI = Uri.parse("content://settings/gservices");
-
-    private static final String TAG = GoogleSettingsUtil.class.getSimpleName();
-
-    private static final boolean DBG = false;
-
-    /**
-     * Safely query for a Gservices string setting, which may not be available if this
-     * is not a Google Experience Device.
-     * 
-     * @param cr The content resolver to use
-     * @param key The setting to look up
-     * @param defaultValue The default value to use if none can be found
-     * @return The value of the setting, or defaultValue if it couldn't be found
-     */
-    public static String getGservicesString(ContentResolver cr, String key, String defaultValue) {
-        return getSettingString(GSERVICES_URI, cr, key, defaultValue);
-    }
-    
-    /**
-     * Safely query for a Gservices int setting, which may not be available if this
-     * is not a Google Experience Device.
-     * 
-     * @param cr The content resolver to use
-     * @param key The setting to look up
-     * @param defaultValue The default value to use if the setting couldn't be found or parsed
-     * @return The value of the setting, or defaultValue if it couldn't be found or parsed
-     */
-    public static int getGservicesInt(ContentResolver cr, String key, int defaultValue) {
-        try {
-            return Integer.parseInt(getGservicesString(cr, key, String.valueOf(defaultValue)));
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * Safely query for a Gservices float setting, which may not be available if this
-     * is not a Google Experience Device.
-     * 
-     * @param cr The content resolver to use
-     * @param key The setting to look up
-     * @param defaultValue The default value to use if the setting couldn't be found or parsed
-     * @return The value of the setting, or defaultValue if it couldn't be found or parsed
-     */
-    public static float getGservicesFloat(ContentResolver cr, String key, float defaultValue) {
-        try {
-            return Float.parseFloat(getGservicesString(cr, key, String.valueOf(defaultValue)));
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * A safe way to query for a setting on both Google Experience and
-     * non-Google Experience devices, (code adapted from maps application
-     * examples)
-     * 
-     * @param uri The uri to provide to the content resolver
-     * @param cr The content resolver to use
-     * @param key The setting to look up
-     * @param defaultValue The default value to use if none can be found
-     * @return The value of the setting, or defaultValue if it couldn't be found
-     */
-    private static String getSettingString(Uri uri, ContentResolver cr, String key,
-            String defaultValue) {
-        String value = null;
-
-        Cursor cursor = null;
-        try {
-            cursor = cr.query(uri, new String[] {
-                "value"
-            }, "name='" + key + "'", null, null);
-            if ((cursor != null) && cursor.moveToFirst()) {
-                value = cursor.getString(cursor.getColumnIndexOrThrow("value"));
-            }
-        } catch (Throwable t) {
-            // This happens because we're probably running a non Type 1 aka
-            // Google Experience device which doesn't have the Google libraries.
-            if (DBG) {
-                Log.d(TAG, "Error getting setting from " + uri + " for key " + key + ": " + t);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        if (DBG && value == null) {
-            Log.i(TAG, "no setting found from " + uri + " for key " + key + ", returning default");
-        }
-        
-        return (value != null) ? value : defaultValue;
-    }
-}
diff --git a/src/com/android/inputmethod/voice/RecognitionView.java b/src/com/android/inputmethod/voice/RecognitionView.java
index 97acb11..fd3d6d0 100644
--- a/src/com/android/inputmethod/voice/RecognitionView.java
+++ b/src/com/android/inputmethod/voice/RecognitionView.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2009 Google Inc.
- * 
+ *
  * 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
@@ -36,7 +36,7 @@
 import android.widget.TextView;
 
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.voice.GoogleSettingsUtil;
+import com.android.inputmethod.voice.SettingsUtil;
 
 import java.io.ByteArrayOutputStream;
 import java.nio.ByteBuffer;
@@ -112,10 +112,10 @@
         mView = inflater.inflate(R.layout.recognition_status, null);
 
         ContentResolver cr = context.getContentResolver();
-        mMinMicrophoneLevel = GoogleSettingsUtil.getGservicesFloat(
-                cr, GoogleSettingsUtil.LATIN_IME_MIN_MICROPHONE_LEVEL, 15.f);
-        mMaxMicrophoneLevel = GoogleSettingsUtil.getGservicesFloat(
-                cr, GoogleSettingsUtil.LATIN_IME_MAX_MICROPHONE_LEVEL, 30.f);
+        mMinMicrophoneLevel = SettingsUtil.getSettingsFloat(
+                cr, SettingsUtil.LATIN_IME_MIN_MICROPHONE_LEVEL, 15.f);
+        mMaxMicrophoneLevel = SettingsUtil.getSettingsFloat(
+                cr, SettingsUtil.LATIN_IME_MAX_MICROPHONE_LEVEL, 30.f);
 
         // Pre-load volume level images
         Resources r = context.getResources();
@@ -131,7 +131,7 @@
 
         mInitializing = r.getDrawable(R.drawable.mic_slash);
         mError = r.getDrawable(R.drawable.caution);
- 
+
         mImage = (ImageView) mView.findViewById(R.id.image);
         mButton = mView.findViewById(R.id.button);
         mButton.setOnClickListener(clickListener);
@@ -207,12 +207,12 @@
               final ShortBuffer buf = ByteBuffer.wrap(waveBuffer.toByteArray())
                       .order(ByteOrder.nativeOrder()).asShortBuffer();
               buf.position(0);
-              waveBuffer.reset(); 
+              waveBuffer.reset();
               showWave(buf, speechStartPosition / 2, speechEndPosition / 2);
             }
           });
     }
-    
+
     /**
      * @return an average abs of the specified buffer.
      */
@@ -295,15 +295,15 @@
         MarginLayoutParams mProgressParams = (MarginLayoutParams)mProgress.getLayoutParams();
         mProgressParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                 -h / 2 - 18, mContext.getResources().getDisplayMetrics());
-                
+
         // Tweak the padding manually to fill out the whole view horizontally.
         // TODO: Do this in the xml layout instead.
-        ((View) mImage.getParent()).setPadding(4, ((View) mImage.getParent()).getPaddingTop(), 3, 
+        ((View) mImage.getParent()).setPadding(4, ((View) mImage.getParent()).getPaddingTop(), 3,
                 ((View) mImage.getParent()).getPaddingBottom());
-        mProgress.setLayoutParams(mProgressParams);       
+        mProgress.setLayoutParams(mProgressParams);
     }
 
-    
+
     public void finish() {
         mState = State.READY;
         mUiHandler.post(new Runnable() {
diff --git a/src/com/android/inputmethod/voice/SettingsUtil.java b/src/com/android/inputmethod/voice/SettingsUtil.java
new file mode 100644
index 0000000..abf5204
--- /dev/null
+++ b/src/com/android/inputmethod/voice/SettingsUtil.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * 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.voice;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.Settings;
+import android.util.Log;
+
+/**
+ * Utility for retrieving settings from Settings.Secure.
+ */
+public class SettingsUtil {
+    /**
+     * A whitespace-separated list of supported locales for voice input from the keyboard.
+     */
+    public static final String LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES =
+            "latin_ime_voice_input_supported_locales";
+
+    /**
+     * A whitespace-separated list of recommended app packages for voice input from the
+     * keyboard.
+     */
+    public static final String LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES =
+            "latin_ime_voice_input_recommended_packages";
+
+    /**
+     * The maximum number of unique days to show the swipe hint for voice input.
+     */
+    public static final String LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS =
+            "latin_ime_voice_input_swipe_hint_max_days";
+
+    /**
+     * The maximum number of times to show the punctuation hint for voice input.
+     */
+    public static final String LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS =
+            "latin_ime_voice_input_punctuation_hint_max_displays";
+
+    /**
+     * Endpointer parameters for voice input from the keyboard.
+     */
+    public static final String LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS =
+            "latin_ime_speech_minimum_length_millis";
+    public static final String LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS =
+            "latin_ime_speech_input_complete_silence_length_millis";
+    public static final String LATIN_IME_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS =
+            "latin_ime_speech_input_possibly_complete_silence_length_millis";
+
+    /**
+     * Min and max volume levels that can be displayed on the "speak now" screen.
+     */
+    public static final String LATIN_IME_MIN_MICROPHONE_LEVEL =
+            "latin_ime_min_microphone_level";
+    public static final String LATIN_IME_MAX_MICROPHONE_LEVEL =
+            "latin_ime_max_microphone_level";
+
+    /**
+     * The number of sentence-level alternates to request of the server.
+     */
+    public static final String LATIN_IME_MAX_VOICE_RESULTS = "latin_ime_max_voice_results";
+
+    /**
+     * Get a string-valued setting.
+     *
+     * @param cr The content resolver to use
+     * @param key The setting to look up
+     * @param defaultValue The default value to use if none can be found
+     * @return The value of the setting, or defaultValue if it couldn't be found
+     */
+    public static String getSettingsString(ContentResolver cr, String key, String defaultValue) {
+        String result = Settings.Secure.getString(cr, key);
+        return (result == null) ? defaultValue : result;
+    }
+
+    /**
+     * Get an int-valued setting.
+     *
+     * @param cr The content resolver to use
+     * @param key The setting to look up
+     * @param defaultValue The default value to use if the setting couldn't be found or parsed
+     * @return The value of the setting, or defaultValue if it couldn't be found or parsed
+     */
+    public static int getSettingsInt(ContentResolver cr, String key, int defaultValue) {
+        return Settings.Secure.getInt(cr, key, defaultValue);
+    }
+
+    /**
+     * Get a float-valued setting.
+     *
+     * @param cr The content resolver to use
+     * @param key The setting to look up
+     * @param defaultValue The default value to use if the setting couldn't be found or parsed
+     * @return The value of the setting, or defaultValue if it couldn't be found or parsed
+     */
+    public static float getSettingsFloat(ContentResolver cr, String key, float defaultValue) {
+        return Settings.Secure.getFloat(cr, key, defaultValue);
+    }
+}
diff --git a/src/com/android/inputmethod/voice/VoiceInput.java b/src/com/android/inputmethod/voice/VoiceInput.java
index c39992a..a468b33 100644
--- a/src/com/android/inputmethod/voice/VoiceInput.java
+++ b/src/com/android/inputmethod/voice/VoiceInput.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2009 Google Inc.
- * 
+ *
  * 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
@@ -81,13 +81,13 @@
             "android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS";
     private static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS =
             "android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS";
-    
+
     // The usual endpointer default value for input complete silence length is 0.5 seconds,
     // but that's used for things like voice search. For dictation-like voice input like this,
     // we go with a more liberal value of 1 second. This value will only be used if a value
     // is not provided from Gservices.
     private static final String INPUT_COMPLETE_SILENCE_LENGTH_DEFAULT_VALUE_MILLIS = "1000";
-    
+
     // Used to record part of that state for logging purposes.
     public static final int DEFAULT = 0;
     public static final int LISTENING = 1;
@@ -145,11 +145,11 @@
         mContext = context;
         newView();
 
-        String recommendedPackages = GoogleSettingsUtil.getGservicesString(
+        String recommendedPackages = SettingsUtil.getSettingsString(
                 context.getContentResolver(),
-                GoogleSettingsUtil.LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES,
+                SettingsUtil.LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES,
                 DEFAULT_RECOMMENDED_PACKAGES);
-        
+
         mRecommendedList = new Whitelist();
         for (String recommendedPackage : recommendedPackages.split("\\s+")) {
             mRecommendedList.addApp(recommendedPackage);
@@ -167,10 +167,10 @@
     public boolean isBlacklistedField(FieldContext context) {
         return mBlacklist.matches(context);
     }
-    
+
     /**
      * Used to decide whether to show voice input hints for this field, etc.
-     * 
+     *
      * @return true if field is recommended for voice
      */
     public boolean isRecommendedField(FieldContext context) {
@@ -190,7 +190,7 @@
 
         Locale locale = Locale.getDefault();
         String localeString = locale.getLanguage() + "-" + locale.getCountry();
-        
+
         mLogger.start(localeString, swipe);
 
         mState = LISTENING;
@@ -215,9 +215,9 @@
         intent.putExtra(EXTRA_RECOGNITION_CONTEXT, context.getBundle());
         intent.putExtra(EXTRA_CALLING_PACKAGE, "VoiceIME");
         intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,
-                GoogleSettingsUtil.getGservicesInt(
+                SettingsUtil.getSettingsInt(
                         mContext.getContentResolver(),
-                        GoogleSettingsUtil.LATIN_IME_MAX_VOICE_RESULTS,
+                        SettingsUtil.LATIN_IME_MAX_VOICE_RESULTS,
                         1));
 
         // Get endpointer params from Gservices.
@@ -226,27 +226,27 @@
         putEndpointerExtra(
                 cr,
                 intent,
-                GoogleSettingsUtil.LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS,
+                SettingsUtil.LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS,
                 EXTRA_SPEECH_MINIMUM_LENGTH_MILLIS,
                 null  /* rely on endpointer default */);
         putEndpointerExtra(
                 cr,
                 intent,
-                GoogleSettingsUtil.LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,
+                SettingsUtil.LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,
                 EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,
                 INPUT_COMPLETE_SILENCE_LENGTH_DEFAULT_VALUE_MILLIS
                 /* our default value is different from the endpointer's */);
         putEndpointerExtra(
                 cr,
                 intent,
-                GoogleSettingsUtil.
+                SettingsUtil.
                         LATIN_IME_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,
                 EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,
                 null  /* rely on endpointer default */);
 
         mRecognitionManager.startListening(intent);
     }
-    
+
     /**
      * Gets the value of the provided Gservices key, attempts to parse it into a long,
      * and if successful, puts the long value as an extra in the provided intent.
@@ -254,15 +254,15 @@
     private void putEndpointerExtra(ContentResolver cr, Intent i,
             String gservicesKey, String intentExtraKey, String defaultValue) {
         long l = -1;
-        String s = GoogleSettingsUtil.getGservicesString(cr, gservicesKey, defaultValue);
+        String s = SettingsUtil.getSettingsString(cr, gservicesKey, defaultValue);
         if (s != null) {
             try {
                 l = Long.valueOf(s);
             } catch (NumberFormatException e) {
                 Log.e(TAG, "could not parse value for " + gservicesKey + ": " + s);
-            }          
+            }
         }
-        
+
         if (l != -1) i.putExtra(intentExtraKey, l);
     }
 
@@ -302,35 +302,35 @@
     public void logTextModified() {
         mLogger.textModified();
     }
-    
+
     public void logKeyboardWarningDialogShown() {
         mLogger.keyboardWarningDialogShown();
     }
-    
+
     public void logKeyboardWarningDialogDismissed() {
         mLogger.keyboardWarningDialogDismissed();
     }
-    
+
     public void logKeyboardWarningDialogOk() {
         mLogger.keyboardWarningDialogOk();
     }
-    
+
     public void logKeyboardWarningDialogCancel() {
         mLogger.keyboardWarningDialogCancel();
     }
-    
+
     public void logSwipeHintDisplayed() {
         mLogger.swipeHintDisplayed();
     }
-    
+
     public void logPunctuationHintDisplayed() {
         mLogger.punctuationHintDisplayed();
     }
-    
+
     public void logVoiceInputDelivered() {
         mLogger.voiceInputDelivered();
     }
-    
+
     public void logNBestChoose(int index) {
         mLogger.nBestChoose(index);
     }
@@ -338,11 +338,11 @@
     public void logInputEnded() {
         mLogger.inputEnded();
     }
-    
+
     public void flushLogs() {
         mLogger.flush();
     }
-    
+
     private static Intent makeIntent() {
         Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);