daa3753a04
The window manager policy made some incorrect assumptions about the meaning of the Configuration.keyboard field. We need to be more careful about distinguishing between built-in and external keyboards. Most of this change is to move the determination of the parts of the Configuration related to input devices into the WindowManagerService leveraging new features of the InputManagerService to good effect. Then we plumb through the flag that indicates whether a device is internal or external so that we can be more particular about how the lid switch effects changes to the Configuration. Bug: 6424373 Change-Id: I36a1c22ade35e578955465a25940a33f227b9763
156 lines
5.2 KiB
C++
156 lines
5.2 KiB
C++
/*
|
|
* Copyright (C) 2012 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _ANDROIDFW_INPUT_DEVICE_H
|
|
#define _ANDROIDFW_INPUT_DEVICE_H
|
|
|
|
#include <androidfw/Input.h>
|
|
#include <androidfw/KeyCharacterMap.h>
|
|
|
|
namespace android {
|
|
|
|
/*
|
|
* Identifies a device.
|
|
*/
|
|
struct InputDeviceIdentifier {
|
|
inline InputDeviceIdentifier() :
|
|
bus(0), vendor(0), product(0), version(0) {
|
|
}
|
|
|
|
// Information provided by the kernel.
|
|
String8 name;
|
|
String8 location;
|
|
String8 uniqueId;
|
|
uint16_t bus;
|
|
uint16_t vendor;
|
|
uint16_t product;
|
|
uint16_t version;
|
|
|
|
// A composite input device descriptor string that uniquely identifies the device
|
|
// even across reboots or reconnections. The value of this field is used by
|
|
// upper layers of the input system to associate settings with individual devices.
|
|
// It is hashed from whatever kernel provided information is available.
|
|
// Ideally, the way this value is computed should not change between Android releases
|
|
// because that would invalidate persistent settings that rely on it.
|
|
String8 descriptor;
|
|
};
|
|
|
|
/*
|
|
* Describes the characteristics and capabilities of an input device.
|
|
*/
|
|
class InputDeviceInfo {
|
|
public:
|
|
InputDeviceInfo();
|
|
InputDeviceInfo(const InputDeviceInfo& other);
|
|
~InputDeviceInfo();
|
|
|
|
struct MotionRange {
|
|
int32_t axis;
|
|
uint32_t source;
|
|
float min;
|
|
float max;
|
|
float flat;
|
|
float fuzz;
|
|
};
|
|
|
|
void initialize(int32_t id, int32_t generation, const InputDeviceIdentifier& identifier,
|
|
const String8& alias, bool isExternal);
|
|
|
|
inline int32_t getId() const { return mId; }
|
|
inline int32_t getGeneration() const { return mGeneration; }
|
|
inline const InputDeviceIdentifier& getIdentifier() const { return mIdentifier; }
|
|
inline const String8& getAlias() const { return mAlias; }
|
|
inline const String8& getDisplayName() const {
|
|
return mAlias.isEmpty() ? mIdentifier.name : mAlias;
|
|
}
|
|
inline bool isExternal() const { return mIsExternal; }
|
|
inline uint32_t getSources() const { return mSources; }
|
|
|
|
const MotionRange* getMotionRange(int32_t axis, uint32_t source) const;
|
|
|
|
void addSource(uint32_t source);
|
|
void addMotionRange(int32_t axis, uint32_t source,
|
|
float min, float max, float flat, float fuzz);
|
|
void addMotionRange(const MotionRange& range);
|
|
|
|
inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; }
|
|
inline int32_t getKeyboardType() const { return mKeyboardType; }
|
|
|
|
inline void setKeyCharacterMap(const sp<KeyCharacterMap>& value) {
|
|
mKeyCharacterMap = value;
|
|
}
|
|
|
|
inline sp<KeyCharacterMap> getKeyCharacterMap() const {
|
|
return mKeyCharacterMap;
|
|
}
|
|
|
|
inline void setVibrator(bool hasVibrator) { mHasVibrator = hasVibrator; }
|
|
inline bool hasVibrator() const { return mHasVibrator; }
|
|
|
|
inline const Vector<MotionRange>& getMotionRanges() const {
|
|
return mMotionRanges;
|
|
}
|
|
|
|
private:
|
|
int32_t mId;
|
|
int32_t mGeneration;
|
|
InputDeviceIdentifier mIdentifier;
|
|
String8 mAlias;
|
|
bool mIsExternal;
|
|
uint32_t mSources;
|
|
int32_t mKeyboardType;
|
|
sp<KeyCharacterMap> mKeyCharacterMap;
|
|
bool mHasVibrator;
|
|
|
|
Vector<MotionRange> mMotionRanges;
|
|
};
|
|
|
|
/* Types of input device configuration files. */
|
|
enum InputDeviceConfigurationFileType {
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */
|
|
};
|
|
|
|
/*
|
|
* Gets the path of an input device configuration file, if one is available.
|
|
* Considers both system provided and user installed configuration files.
|
|
*
|
|
* The device identifier is used to construct several default configuration file
|
|
* names to try based on the device name, vendor, product, and version.
|
|
*
|
|
* Returns an empty string if not found.
|
|
*/
|
|
extern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier(
|
|
const InputDeviceIdentifier& deviceIdentifier,
|
|
InputDeviceConfigurationFileType type);
|
|
|
|
/*
|
|
* Gets the path of an input device configuration file, if one is available.
|
|
* Considers both system provided and user installed configuration files.
|
|
*
|
|
* The name is case-sensitive and is used to construct the filename to resolve.
|
|
* All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores.
|
|
*
|
|
* Returns an empty string if not found.
|
|
*/
|
|
extern String8 getInputDeviceConfigurationFilePathByName(
|
|
const String8& name, InputDeviceConfigurationFileType type);
|
|
|
|
} // namespace android
|
|
|
|
#endif // _ANDROIDFW_INPUT_DEVICE_H
|