Move SPECIAL_FUNCTION from .kcm to .idc files

Currently, the only use of device-specific .kcm files is to specify
SPECIAL_FUNCTION flag (meaning that this keyboard is only used to
perform system control functions and not for typing).

Instead of adding a special .kcm file, use .idc files with se
keyboard.specialFunction = 1 to achieve the same functionality. This
allows the removal of all device-specific .kcm files.

The .kcm functionality will remain in P (with a warning). The
functionality will be removed in Q.

Bug: 67718661
Test: tested the codepath on Android wear device via logging
Change-Id: I1b4572456fa42caae1282dd8d3557820671b3610
diff --git a/libs/input/Keyboard.cpp b/libs/input/Keyboard.cpp
index 07f2289..11842ee 100644
--- a/libs/input/Keyboard.cpp
+++ b/libs/input/Keyboard.cpp
@@ -148,9 +148,19 @@
 
 // --- Global functions ---
 
+bool isKeyboardSpecialFunction(const PropertyMap* config) {
+    if (config == nullptr) {
+        return false;
+    }
+    bool isSpecialFunction = false;
+    config->tryGetProperty(String8("keyboard.specialFunction"), isSpecialFunction);
+    return isSpecialFunction;
+}
+
 bool isEligibleBuiltInKeyboard(const InputDeviceIdentifier& deviceIdentifier,
         const PropertyMap* deviceConfiguration, const KeyMap* keyMap) {
-    if (!keyMap->haveKeyCharacterMap()
+    // TODO: remove the third OR statement (SPECIAL_FUNCTION) in Q
+    if (!keyMap->haveKeyCharacterMap() || isKeyboardSpecialFunction(deviceConfiguration)
             || keyMap->keyCharacterMap->getKeyboardType()
                     == KeyCharacterMap::KEYBOARD_TYPE_SPECIAL_FUNCTION) {
         return false;