Remove web mode and add webInput boolean (DO NOT MERGE)

Bug: 4490948
Change-Id: I4cd1af0b48d7ebcf8f4bd939e0e363e34dbfe8b7
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index fb4d97b..3bd6619 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -165,11 +165,10 @@
             <enum name="url" value="1" />
             <enum name="email" value="2" />
             <enum name="im" value="3" />
-            <enum name="web" value="4" />
-            <enum name="phone" value="5" />
-            <enum name="number" value="6" />
-            <enum name="webEmail" value="7" />
+            <enum name="phone" value="4" />
+            <enum name="number" value="5" />
         </attr>
+        <attr name="webInput" format="boolean" />
         <attr name="passwordInput" format="boolean" />
         <attr name="hasSettingsKey" format="string" />
         <attr name="voiceKeyEnabled" format="string" />
diff --git a/java/res/xml-sw600dp/kbd_settings.xml b/java/res/xml-sw600dp/kbd_settings.xml
index 86dc1f7..14f7377 100644
--- a/java/res/xml-sw600dp/kbd_settings.xml
+++ b/java/res/xml-sw600dp/kbd_settings.xml
@@ -23,7 +23,7 @@
 >
     <switch>
         <case
-            latin:mode="web"
+            latin:webInput="true"
         >
             <switch>
                 <case
diff --git a/java/res/xml/kbd_qwerty_f1.xml b/java/res/xml/kbd_qwerty_f1.xml
index d0e2884..e89d02d 100644
--- a/java/res/xml/kbd_qwerty_f1.xml
+++ b/java/res/xml/kbd_qwerty_f1.xml
@@ -46,7 +46,7 @@
                 </case>
                 <!-- latin:hasVoiceKey="false" -->
                 <case
-                    latin:mode="web"
+                    latin:webInput="true"
                 >
                     <Key
                         latin:keyLabel="."
diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml
index 0db0116..1e7a3fc 100644
--- a/java/res/xml/kbd_qwerty_row4.xml
+++ b/java/res/xml/kbd_qwerty_row4.xml
@@ -37,7 +37,7 @@
                     latin:keyboardLayout="@xml/kbd_qwerty_f1" />
                 <switch>
                     <case
-                        latin:mode="web"
+                        latin:webInput="true"
                     >
                         <Key
                             latin:keyStyle="spaceKeyStyle"
@@ -88,7 +88,7 @@
                     latin:keyboardLayout="@xml/kbd_qwerty_f1" />
                 <switch>
                     <case
-                        latin:mode="web"
+                        latin:webInput="true"
                     >
                         <Key
                             latin:keyStyle="spaceKeyStyle"
@@ -118,7 +118,7 @@
                             latin:keyEdgeFlags="right" />
                     </case>
                     <case
-                        latin:mode="web"
+                        latin:webInput="true"
                     >
                         <Key
                             latin:keyStyle="returnKeyStyle"
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index 91dbf25..bb2c0e3 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -33,17 +33,15 @@
     public static final int MODE_URL = 1;
     public static final int MODE_EMAIL = 2;
     public static final int MODE_IM = 3;
-    public static final int MODE_WEB = 4;
-    public static final int MODE_PHONE = 5;
-    public static final int MODE_NUMBER = 6;
-    // Should come up with implementing web & email mode clearer way.
-    public static final int MODE_WEB_EMAIL = 7;
+    public static final int MODE_PHONE = 4;
+    public static final int MODE_NUMBER = 5;
 
     public final Locale mLocale;
     public final int mOrientation;
     public final int mMode;
     public final int mXmlId;
     public final int mColorScheme;
+    public final boolean mWebInput;
     public final boolean mPasswordInput;
     public final boolean mHasSettingsKey;
     public final boolean mVoiceKeyEnabled;
@@ -64,6 +62,7 @@
         this.mMode = mode;
         this.mXmlId = xmlId;
         this.mColorScheme = colorScheme;
+        this.mWebInput = Utils.isWebInputType(inputType);
         this.mPasswordInput = Utils.isPasswordInputType(inputType)
                 || Utils.isVisiblePasswordInputType(inputType);
         this.mHasSettingsKey = hasSettingsKey;
@@ -82,6 +81,7 @@
                 mode,
                 xmlId,
                 colorScheme,
+                mWebInput,
                 mPasswordInput,
                 hasSettingsKey,
                 voiceKeyEnabled,
@@ -122,6 +122,7 @@
             && other.mMode == this.mMode
             && other.mXmlId == this.mXmlId
             && other.mColorScheme == this.mColorScheme
+            && other.mWebInput == this.mWebInput
             && other.mPasswordInput == this.mPasswordInput
             && other.mHasSettingsKey == this.mHasSettingsKey
             && other.mVoiceKeyEnabled == this.mVoiceKeyEnabled
@@ -137,12 +138,13 @@
 
     @Override
     public String toString() {
-        return String.format("[%s.xml %s %s %s imeAction=%s %s%s%s%s%s%s]",
+        return String.format("[%s.xml %s %s %s imeAction=%s %s%s%s%s%s%s%s]",
                 mXmlName,
                 mLocale,
                 (mOrientation == 1 ? "port" : "land"),
                 modeName(mMode),
                 imeOptionsName(mImeAction),
+                (mWebInput ? " webInput" : ""),
                 (mPasswordInput ? " passwordInput" : ""),
                 (mHasSettingsKey ? " hasSettingsKey" : ""),
                 (mVoiceKeyEnabled ? " voiceKeyEnabled" : ""),
@@ -158,10 +160,8 @@
         case MODE_URL: return "url";
         case MODE_EMAIL: return "email";
         case MODE_IM: return "im";
-        case MODE_WEB: return "web";
         case MODE_PHONE: return "phone";
         case MODE_NUMBER: return "number";
-        case MODE_WEB_EMAIL: return "webEmail";
         }
         return null;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
index 6af0d53..bc9e8f0 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
@@ -419,6 +419,8 @@
         try {
             final boolean modeMatched = matchInteger(a,
                     R.styleable.Keyboard_Case_mode, id.mMode);
+            final boolean webInputMatched = matchBoolean(a,
+                    R.styleable.Keyboard_Case_webInput, id.mWebInput);
             final boolean passwordInputMatched = matchBoolean(a,
                     R.styleable.Keyboard_Case_passwordInput, id.mPasswordInput);
             final boolean settingsKeyMatched = matchBoolean(a,
@@ -439,16 +441,18 @@
                     R.styleable.Keyboard_Case_languageCode, id.mLocale.getLanguage());
             final boolean countryCodeMatched = matchString(a,
                     R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry());
-            final boolean selected = modeMatched && passwordInputMatched && settingsKeyMatched
-                    && voiceEnabledMatched && voiceKeyMatched && colorSchemeMatched
-                    && imeActionMatched && languageCodeMatched && countryCodeMatched;
+            final boolean selected = modeMatched && webInputMatched && passwordInputMatched
+                    && settingsKeyMatched && voiceEnabledMatched && voiceKeyMatched
+                    && colorSchemeMatched && imeActionMatched && languageCodeMatched
+                    && countryCodeMatched;
 
-            if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE,
+            if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE,
                     textAttr(KeyboardId.modeName(
                             a.getInt(R.styleable.Keyboard_Case_mode, -1)), "mode"),
                     textAttr(KeyboardId.colorSchemeName(
                             viewAttr.getInt(
                                     R.styleable.KeyboardView_colorScheme, -1)), "colorSchemeName"),
+                    booleanAttr(a, R.styleable.Keyboard_Case_webInput, "webInput"),
                     booleanAttr(a, R.styleable.Keyboard_Case_passwordInput, "passwordInput"),
                     booleanAttr(a, R.styleable.Keyboard_Case_hasSettingsKey, "hasSettingsKey"),
                     booleanAttr(a, R.styleable.Keyboard_Case_voiceKeyEnabled, "voiceKeyEnabled"),
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index a895ba2..1cbc434 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.keyboard.KeyboardId;
-
 import android.content.res.Resources;
 import android.inputmethodservice.InputMethodService;
 import android.os.AsyncTask;
@@ -25,13 +23,14 @@
 import android.os.HandlerThread;
 import android.os.Process;
 import android.text.InputType;
-import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.util.Log;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 
+import com.android.inputmethod.keyboard.KeyboardId;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -39,7 +38,6 @@
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.lang.reflect.Field;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -487,9 +485,7 @@
         case InputType.TYPE_CLASS_PHONE:
             return KeyboardId.MODE_PHONE;
         case InputType.TYPE_CLASS_TEXT:
-            if (variation == InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS) {
-                return KeyboardId.MODE_WEB_EMAIL;
-            } else if (Utils.isEmailVariation(variation)) {
+            if (Utils.isEmailVariation(variation)) {
                 return KeyboardId.MODE_EMAIL;
             } else if (variation == InputType.TYPE_TEXT_VARIATION_URI) {
                 return KeyboardId.MODE_URL;
@@ -497,9 +493,6 @@
                 return KeyboardId.MODE_IM;
             } else if (variation == InputType.TYPE_TEXT_VARIATION_FILTER) {
                 return KeyboardId.MODE_TEXT;
-            } else if (variation == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT
-                    || variation == InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD) {
-                return KeyboardId.MODE_WEB;
             } else {
                 return KeyboardId.MODE_TEXT;
             }
@@ -513,6 +506,17 @@
                 || variation == InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
     }
 
+    public static boolean isWebInputType(int inputType) {
+        final int variation =
+            inputType & (InputType.TYPE_MASK_CLASS | InputType.TYPE_MASK_VARIATION);
+        return (variation
+            == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT))
+            || (variation
+            == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD))
+            || (variation
+            == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS));
+    }
+
     // Please refer to TextView.isPasswordInputType
     public static boolean isPasswordInputType(int inputType) {
         final int variation =