diff --git a/mobile/android/base/AwesomeBar.java b/mobile/android/base/AwesomeBar.java index 351b06ee46a..cecaf43a7be 100644 --- a/mobile/android/base/AwesomeBar.java +++ b/mobile/android/base/AwesomeBar.java @@ -11,14 +11,13 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.ContentResolver; import android.content.Context; -import android.content.SharedPreferences; import android.content.res.Configuration; -import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; +import android.text.InputType; import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; @@ -27,34 +26,31 @@ import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; import android.view.LayoutInflater; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.EditorInfo; -import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; -import android.widget.ExpandableListView; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TabWidget; import android.widget.Toast; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Map; - -import org.mozilla.gecko.db.BrowserContract.Bookmarks; -import org.mozilla.gecko.db.BrowserContract.Combined; -import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.db.BrowserDB; -import org.json.JSONObject; +import java.net.URLEncoder; +import java.util.Arrays; +import java.util.Collection; public class AwesomeBar extends GeckoActivity { private static final String LOGTAG = "GeckoAwesomeBar"; + private static final Collection sSwypeInputMethods = Arrays.asList(new String[] { + InputMethods.METHOD_SWYPE, + InputMethods.METHOD_SWYPE_BETA, + }); + static final String URL_KEY = "url"; static final String CURRENT_URL_KEY = "currenturl"; static final String TARGET_KEY = "target"; @@ -68,6 +64,7 @@ public class AwesomeBar extends GeckoActivity { private ImageButton mGoButton; private ContentResolver mResolver; private ContextMenuSubject mContextMenuSubject; + private boolean mIsUsingSwype; @Override public void onCreate(Bundle savedInstanceState) { @@ -206,6 +203,33 @@ public class AwesomeBar extends GeckoActivity { }); } + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + // The Awesome Bar will receive focus when the Awesome Screen first opens or after the user + // closes the "Select Input Method" window. If the input method changes to or from Swype, + // then toggle the URL mode flag. Swype's URL mode disables the automatic word spacing that + // Swype users expect when entering search queries, but does not add any special VKB keys + // like ".com" or "/" that would be useful for entering URLs. + + if (!hasFocus) + return; + + boolean wasUsingSwype = mIsUsingSwype; + mIsUsingSwype = sSwypeInputMethods.contains(InputMethods.getCurrentInputMethod(this)); + + if (mIsUsingSwype == wasUsingSwype) + return; + + int currentInputType = mText.getInputType(); + int newInputType = mIsUsingSwype + ? (currentInputType & ~InputType.TYPE_TEXT_VARIATION_URI) // URL=OFF + : (currentInputType | InputType.TYPE_TEXT_VARIATION_URI); // URL=ON + + mText.setRawInputType(newInputType); + } + @Override public void onConfigurationChanged(Configuration newConfiguration) { super.onConfigurationChanged(newConfiguration); @@ -589,5 +613,4 @@ public class AwesomeBar extends GeckoActivity { } return false; } - } diff --git a/mobile/android/base/InputMethods.java b/mobile/android/base/InputMethods.java new file mode 100644 index 00000000000..58cc167a5a4 --- /dev/null +++ b/mobile/android/base/InputMethods.java @@ -0,0 +1,55 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko; + +import android.content.Context; +import android.provider.Settings.Secure; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; + +import java.util.Collection; + +final class InputMethods { + + public static final String METHOD_SWYPE = "com.swype.android.inputmethod/.SwypeInputMethod"; + public static final String METHOD_SWYPE_BETA = "com.nuance.swype.input/.IME"; + + /* These input method names are currently unused, but kept here for future reference: + public static final String METHOD_EYES_FREE_KEYBOARD = "com.googlecode.eyesfree.inputmethod.latin/.LatinIME"; + public static final String METHOD_GO_KEYBOARD = "com.jb.gokeyboard/.GoKeyboard"; + public static final String METHOD_GOOGLE_JAPANESE_INPUT = "com.google.android.inputmethod.japanese/.MozcService"; + public static final String METHOD_GOOGLE_PINYIN = "com.google.android.inputmethod.pinyin/.PinyinIME"; + public static final String METHOD_GOOGLE_TALKBACK = "com.google.android.marvin.talkback/com.googlecode.eyesfree.inputmethod.latin.LatinIME"; + public static final String METHOD_HACKERS_KEYBOARD = "org.pocketworkstation.pckeyboard/.LatinIME"; + public static final String METHOD_OPENWNN_PLUS = "com.owplus.ime.openwnnplus/.OpenWnnJAJP"; + public static final String METHOD_SAMSUNG_GALAXY_NOTE = "com.samsung.sec.android.inputmethod.axt9/.AxT9IME"; + public static final String METHOD_SIMEJI = "com.adamrocker.android.input.simeji/.OpenWnnSimeji"; + public static final String METHOD_SLIDE_IT_KEYBOARD = "com.dasur.slideit.vt.lite/com.dasur.slideit.SlideITIME"; + public static final String METHOD_SWIFTKEY_TRIAL = "com.touchtype.swiftkey.phone.trial/com.touchtype.KeyboardService"; + public static final String METHOD_TOUCHPAL_KEYBOARD = "com.cootek.smartinputv5/.TouchPalIME"; + */ + + private InputMethods() {} + + public static String getCurrentInputMethod(Context context) { + return Secure.getString(context.getContentResolver(), Secure.DEFAULT_INPUT_METHOD); + } + + public static InputMethodInfo getInputMethodInfo(Context context, String inputMethod) { + InputMethodManager imm = getInputMethodManager(context); + Collection infos = imm.getEnabledInputMethodList(); + for (InputMethodInfo info : infos) { + if (info.getId().equals(inputMethod)) { + return info; + } + } + return null; + } + + public static InputMethodManager getInputMethodManager(Context context) { + return (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + } +} diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index 76bdb307f14..17e11db2acd 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -79,6 +79,7 @@ FENNEC_JAVA_FILES = \ GeckoViewsFactory.java \ INIParser.java \ INISection.java \ + InputMethods.java \ LinkPreference.java \ LinkTextView.java \ MenuItemActionBar.java \