Cleanup settings key related stuff

Change-Id: Ie0d1204e94fcdf9d578974256bf2ae3e87797f13
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index 44c0c93..46285bf 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -51,11 +51,10 @@
     public static final int ELEMENT_PHONE_SHIFT = 8;
     public static final int ELEMENT_NUMBER = 9;
 
-    // TODO: These constants could be private.
-    public static final int F2KEY_MODE_NONE = 0;
-    public static final int F2KEY_MODE_SETTINGS = 1;
-    public static final int F2KEY_MODE_SHORTCUT_IME = 2;
-    public static final int F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS = 3;
+    private static final int F2KEY_MODE_NONE = 0;
+    private static final int F2KEY_MODE_SETTINGS = 1;
+    private static final int F2KEY_MODE_SHORTCUT_IME = 2;
+    private static final int F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS = 3;
 
     public final Locale mLocale;
     public final int mOrientation;
@@ -66,9 +65,7 @@
     public final int mElementState;
     public final boolean mNavigateAction;
     public final boolean mPasswordInput;
-    // TODO: Clean up these booleans and modes.
-    public final boolean mHasSettingsKey;
-    public final int mF2KeyMode;
+    private final boolean mSettingsKeyEnabled;
     public final boolean mClobberSettingsKey;
     public final boolean mShortcutKeyEnabled;
     public final boolean mHasShortcutKey;
@@ -79,9 +76,8 @@
 
     private final int mHashCode;
 
-    // TODO: The hasSettings, f2KeyMode, and clobberSettingsKey arguments could be reduced.
     public KeyboardId(int xmlId, int elementState, Locale locale, int orientation, int width,
-            int mode, EditorInfo editorInfo, boolean hasSettingsKey, int f2KeyMode,
+            int mode, EditorInfo editorInfo, boolean settingsKeyEnabled,
             boolean clobberSettingsKey, boolean shortcutKeyEnabled, boolean hasShortcutKey) {
         final int inputType = (editorInfo != null) ? editorInfo.inputType : 0;
         final int imeOptions = (editorInfo != null) ? editorInfo.imeOptions : 0;
@@ -97,8 +93,7 @@
 //                || EditorInfoCompatUtils.hasFlagNavigatePrevious(imeOptions);
         this.mPasswordInput = InputTypeCompatUtils.isPasswordInputType(inputType)
                 || InputTypeCompatUtils.isVisiblePasswordInputType(inputType);
-        this.mHasSettingsKey = hasSettingsKey;
-        this.mF2KeyMode = f2KeyMode;
+        this.mSettingsKeyEnabled = settingsKeyEnabled;
         this.mClobberSettingsKey = clobberSettingsKey;
         this.mShortcutKeyEnabled = shortcutKeyEnabled;
         this.mHasShortcutKey = hasShortcutKey;
@@ -118,9 +113,8 @@
                 elementState,
                 mNavigateAction,
                 mPasswordInput,
-                hasSettingsKey,
-                f2KeyMode,
-                clobberSettingsKey,
+                mSettingsKeyEnabled,
+                mClobberSettingsKey,
                 shortcutKeyEnabled,
                 hasShortcutKey,
                 mImeAction,
@@ -128,9 +122,8 @@
     }
 
     public KeyboardId cloneWithNewXml(int xmlId) {
-        return new KeyboardId(xmlId, mElementState, mLocale,
-                mOrientation, mWidth, mMode, mEditorInfo, false, F2KEY_MODE_NONE, false, false,
-                false);
+        return new KeyboardId(xmlId, mElementState, mLocale, mOrientation, mWidth, mMode,
+                mEditorInfo, false, false, false, false);
     }
 
     // Remove this method.
@@ -154,6 +147,25 @@
         return mElementState == ELEMENT_PHONE_SHIFT;
     }
 
+    public boolean hasSettingsKey() {
+        return mSettingsKeyEnabled && !mClobberSettingsKey;
+    }
+
+    public int f2KeyMode() {
+        if (mClobberSettingsKey) {
+            // Never shows the Settings key
+            return KeyboardId.F2KEY_MODE_SHORTCUT_IME;
+        }
+
+        if (mSettingsKeyEnabled) {
+            return KeyboardId.F2KEY_MODE_SETTINGS;
+        } else {
+            // It should be alright to fall back to the Settings key on 7-inch layouts
+            // even when the Settings key is not explicitly enabled.
+            return KeyboardId.F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS;
+        }
+    }
+
     @Override
     public boolean equals(Object other) {
         return other instanceof KeyboardId && equals((KeyboardId) other);
@@ -168,8 +180,7 @@
             && other.mElementState == this.mElementState
             && other.mNavigateAction == this.mNavigateAction
             && other.mPasswordInput == this.mPasswordInput
-            && other.mHasSettingsKey == this.mHasSettingsKey
-            && other.mF2KeyMode == this.mF2KeyMode
+            && other.mSettingsKeyEnabled == this.mSettingsKeyEnabled
             && other.mClobberSettingsKey == this.mClobberSettingsKey
             && other.mShortcutKeyEnabled == this.mShortcutKeyEnabled
             && other.mHasShortcutKey == this.mHasShortcutKey
@@ -189,11 +200,11 @@
                 (mOrientation == 1 ? "port" : "land"), mWidth,
                 modeName(mMode),
                 EditorInfoCompatUtils.imeOptionsName(mImeAction),
-                f2KeyModeName(mF2KeyMode),
+                f2KeyModeName(f2KeyMode()),
                 (mClobberSettingsKey ? " clobberSettingsKey" : ""),
                 (mNavigateAction ? " navigateAction" : ""),
                 (mPasswordInput ? " passwordInput" : ""),
-                (mHasSettingsKey ? " hasSettingsKey" : ""),
+                (hasSettingsKey() ? " hasSettingsKey" : ""),
                 (mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
                 (mHasShortcutKey ? " hasShortcutKey" : "")
         );
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
index 0697c18..b6233fe 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
@@ -72,11 +72,10 @@
                 new HashMap<Integer, Integer>();
 
         private final int mMode;
+        private final boolean mSettingsKeyEnabled;
         private final boolean mVoiceKeyEnabled;
-        private final boolean mNoSettingsKey;
-        private final boolean mHasSettingsKey;
-        private final int mF2KeyMode;
         private final boolean mVoiceKeyOnMain;
+        private final boolean mNoSettingsKey;
         private final Locale mLocale;
         private final Configuration mConf;
         private final DisplayMetrics mMetrics;
@@ -88,7 +87,7 @@
             final String packageName = context.getPackageName();
 
             mMode = Utils.getKeyboardMode(mEditorInfo);
-            final boolean settingsKeyEnabled = settingsValues.isSettingsKeyEnabled();
+            mSettingsKeyEnabled = settingsValues.isSettingsKeyEnabled();
             @SuppressWarnings("deprecation")
             final boolean noMicrophone = Utils.inPrivateImeOptions(
                     packageName, LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo)
@@ -98,8 +97,6 @@
             mVoiceKeyOnMain = settingsValues.isVoiceKeyOnMain();
             mNoSettingsKey = Utils.inPrivateImeOptions(
                     packageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, editorInfo);
-            mHasSettingsKey = settingsKeyEnabled && !mNoSettingsKey;
-            mF2KeyMode = getF2KeyMode(settingsKeyEnabled, mNoSettingsKey);
             final boolean forceAscii = Utils.inPrivateImeOptions(
                     packageName, LatinIME.IME_OPTION_FORCE_ASCII, editorInfo);
             final boolean asciiCapable = subtypeSwitcher.currentSubtypeContainsExtraValueKey(
@@ -126,8 +123,8 @@
             final int xmlId = mElementKeyboards.get(elementState);
             final boolean hasShortcutKey = mVoiceKeyEnabled && (isSymbols != mVoiceKeyOnMain);
             return new KeyboardId(xmlId, elementState, mLocale, mConf.orientation,
-                    mMetrics.widthPixels, mMode, mEditorInfo, mHasSettingsKey, mF2KeyMode,
-                    mNoSettingsKey, mVoiceKeyEnabled, hasShortcutKey);
+                    mMetrics.widthPixels, mMode, mEditorInfo, mSettingsKeyEnabled, mNoSettingsKey,
+                    mVoiceKeyEnabled, hasShortcutKey);
         }
 
         private static int getElementState(int mode, boolean isSymbols, boolean isShift) {
@@ -145,22 +142,6 @@
             }
         }
 
-        // TODO: Move to KeyboardId.
-        private static int getF2KeyMode(boolean settingsKeyEnabled, boolean noSettingsKey) {
-            if (noSettingsKey) {
-                // Never shows the Settings key
-                return KeyboardId.F2KEY_MODE_SHORTCUT_IME;
-            }
-
-            if (settingsKeyEnabled) {
-                return KeyboardId.F2KEY_MODE_SETTINGS;
-            } else {
-                // It should be alright to fall back to the Settings key on 7-inch layouts
-                // even when the Settings key is not explicitly enabled.
-                return KeyboardId.F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS;
-            }
-        }
-
         private void parseKeyboardSet(Resources res, int resId) throws XmlPullParserException,
                 IOException {
             final XmlResourceParser parser = res.getXml(resId);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index d9d9c2f..31785ff 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -613,9 +613,9 @@
             final boolean passwordInputMatched = matchBoolean(a,
                     R.styleable.Keyboard_Case_passwordInput, id.mPasswordInput);
             final boolean hasSettingsKeyMatched = matchBoolean(a,
-                    R.styleable.Keyboard_Case_hasSettingsKey, id.mHasSettingsKey);
+                    R.styleable.Keyboard_Case_hasSettingsKey, id.hasSettingsKey());
             final boolean f2KeyModeMatched = matchInteger(a,
-                    R.styleable.Keyboard_Case_f2KeyMode, id.mF2KeyMode);
+                    R.styleable.Keyboard_Case_f2KeyMode, id.f2KeyMode());
             final boolean clobberSettingsKeyMatched = matchBoolean(a,
                     R.styleable.Keyboard_Case_clobberSettingsKey, id.mClobberSettingsKey);
             final boolean shortcutKeyEnabledMatched = matchBoolean(a,
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
index 7029dde..406c97f 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
@@ -52,7 +52,7 @@
         }
         return new KeyboardId(com.android.inputmethod.latin.R.xml.kbd_qwerty,
                 KeyboardId.ELEMENT_ALPHABET, locale, orientation, width, KeyboardId.MODE_TEXT,
-                new EditorInfo(), false, KeyboardId.F2KEY_MODE_NONE, false, false, false);
+                new EditorInfo(), false, false, false, false);
     }
 
     protected InputStream openTestRawResource(int resIdInTest) {