diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/androidfw/AssetManager.h | 34 | ||||
| -rw-r--r-- | include/androidfw/PowerManager.h | 33 | ||||
| -rw-r--r-- | include/androidfw/ResourceTypes.h | 114 |
3 files changed, 131 insertions, 50 deletions
diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h index a01095782601..a13dd16fc736 100644 --- a/include/androidfw/AssetManager.h +++ b/include/androidfw/AssetManager.h @@ -69,6 +69,13 @@ struct ResTable_config; */ class AssetManager : public AAssetManager { public: + static const char* RESOURCES_FILENAME; + static const char* IDMAP_BIN; + static const char* OVERLAY_DIR; + static const char* TARGET_PACKAGE_NAME; + static const char* TARGET_APK_PATH; + static const char* IDMAP_DIR; + typedef enum CacheMode { CACHE_UNKNOWN = 0, CACHE_OFF, // don't try to cache file locations @@ -93,6 +100,7 @@ public: * newly-added asset source. */ bool addAssetPath(const String8& path, int32_t* cookie); + bool addOverlayPath(const String8& path, int32_t* cookie); /* * Convenience for adding the standard system assets. Uses the @@ -218,6 +226,13 @@ public: */ void getLocales(Vector<String8>* locales) const; + /** + * Generate idmap data to translate resources IDs between a package and a + * corresponding overlay package. + */ + bool createIdmap(const char* targetApkPath, const char* overlayApkPath, + uint32_t targetCrc, uint32_t overlayCrc, uint32_t** outData, size_t* outSize); + private: struct asset_path { @@ -264,19 +279,14 @@ private: void setLocaleLocked(const char* locale); void updateResourceParamsLocked() const; - bool createIdmapFileLocked(const String8& originalPath, const String8& overlayPath, - const String8& idmapPath); - - bool isIdmapStaleLocked(const String8& originalPath, const String8& overlayPath, - const String8& idmapPath); - Asset* openIdmapLocked(const struct asset_path& ap) const; - bool getZipEntryCrcLocked(const String8& zipPath, const char* entryFilename, uint32_t* pCrc); + void addSystemOverlays(const char* pathOverlaysList, const String8& targetPackagePath, + ResTable* sharedRes, size_t offset) const; class SharedZip : public RefBase { public: - static sp<SharedZip> get(const String8& path); + static sp<SharedZip> get(const String8& path, bool createIfNotPresent = true); ZipFileRO* getZip(); @@ -287,6 +297,9 @@ private: ResTable* setResourceTable(ResTable* res); bool isUpToDate(); + + void addOverlay(const asset_path& ap); + bool getOverlay(size_t idx, asset_path* out) const; protected: ~SharedZip(); @@ -302,6 +315,8 @@ private: Asset* mResourceTableAsset; ResTable* mResourceTable; + Vector<asset_path> mOverlays; + static Mutex gLock; static DefaultKeyedVector<String8, wp<SharedZip> > gOpen; }; @@ -334,6 +349,9 @@ private: static String8 getPathName(const char* path); bool isUpToDate(); + + void addOverlay(const String8& path, const asset_path& overlay); + bool getOverlay(const String8& path, size_t idx, asset_path* out) const; private: void closeZip(int idx); diff --git a/include/androidfw/PowerManager.h b/include/androidfw/PowerManager.h deleted file mode 100644 index ba98db07ca69..000000000000 --- a/include/androidfw/PowerManager.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2010 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_POWER_MANAGER_H -#define _ANDROIDFW_POWER_MANAGER_H - - -namespace android { - -enum { - USER_ACTIVITY_EVENT_OTHER = 0, - USER_ACTIVITY_EVENT_BUTTON = 1, - USER_ACTIVITY_EVENT_TOUCH = 2, - - USER_ACTIVITY_EVENT_LAST = USER_ACTIVITY_EVENT_TOUCH, // Last valid event code. -}; - -} // namespace android - -#endif // _ANDROIDFW_POWER_MANAGER_H diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h index 679976649733..a0bae1291dba 100644 --- a/include/androidfw/ResourceTypes.h +++ b/include/androidfw/ResourceTypes.h @@ -808,6 +808,19 @@ struct ResTable_package uint32_t lastPublicKey; }; +// The most specific locale can consist of: +// +// - a 3 char language code +// - a 3 char region code prefixed by a 'r' +// - a 4 char script code prefixed by a 's' +// - a 8 char variant code prefixed by a 'v' +// +// each separated by a single char separator, which sums up to a total of 24 +// chars, (25 include the string terminator) rounded up to 28 to be 4 byte +// aligned. +#define RESTABLE_MAX_LOCALE_LEN 28 + + /** * Describes a particular resource configuration. */ @@ -828,10 +841,42 @@ struct ResTable_config union { struct { - // \0\0 means "any". Otherwise, en, fr, etc. + // This field can take three different forms: + // - \0\0 means "any". + // + // - Two 7 bit ascii values interpreted as ISO-639-1 language + // codes ('fr', 'en' etc. etc.). The high bit for both bytes is + // zero. + // + // - A single 16 bit little endian packed value representing an + // ISO-639-2 3 letter language code. This will be of the form: + // + // {1, t, t, t, t, t, s, s, s, s, s, f, f, f, f, f} + // + // bit[0, 4] = first letter of the language code + // bit[5, 9] = second letter of the language code + // bit[10, 14] = third letter of the language code. + // bit[15] = 1 always + // + // For backwards compatibility, languages that have unambiguous + // two letter codes are represented in that format. + // + // The layout is always bigendian irrespective of the runtime + // architecture. char language[2]; - // \0\0 means "any". Otherwise, US, CA, etc. + // This field can take three different forms: + // - \0\0 means "any". + // + // - Two 7 bit ascii values interpreted as 2 letter region + // codes ('US', 'GB' etc.). The high bit for both bytes is zero. + // + // - An UN M.49 3 digit region code. For simplicity, these are packed + // in the same manner as the language codes, though we should need + // only 10 bits to represent them, instead of the 15. + // + // The layout is always bigendian irrespective of the runtime + // architecture. char country[2]; }; uint32_t locale; @@ -933,7 +978,7 @@ struct ResTable_config SDKVERSION_ANY = 0 }; - enum { + enum { MINORVERSION_ANY = 0 }; @@ -1006,6 +1051,15 @@ struct ResTable_config uint32_t screenSizeDp; }; + // The ISO-15924 short name for the script corresponding to this + // configuration. (eg. Hant, Latn, etc.). Interpreted in conjunction with + // the locale field. + char localeScript[4]; + + // A single BCP-47 variant subtag. Will vary in length between 5 and 8 + // chars. Interpreted in conjunction with the locale field. + char localeVariant[8]; + void copyFromDeviceNoSwap(const ResTable_config& o); void copyFromDtoH(const ResTable_config& o); @@ -1063,7 +1117,46 @@ struct ResTable_config // settings is the requested settings bool match(const ResTable_config& settings) const; - void getLocale(char str[6]) const; + // Get the string representation of the locale component of this + // Config. The maximum size of this representation will be + // |RESTABLE_MAX_LOCALE_LEN| (including a terminating '\0'). + // + // Example: en-US, en-Latn-US, en-POSIX. + void getBcp47Locale(char* out) const; + + // Sets the values of language, region, script and variant to the + // well formed BCP-47 locale contained in |in|. The input locale is + // assumed to be valid and no validation is performed. + void setBcp47Locale(const char* in); + + inline void clearLocale() { + locale = 0; + memset(localeScript, 0, sizeof(localeScript)); + memset(localeVariant, 0, sizeof(localeVariant)); + } + + // Get the 2 or 3 letter language code of this configuration. Trailing + // bytes are set to '\0'. + size_t unpackLanguage(char language[4]) const; + // Get the 2 or 3 letter language code of this configuration. Trailing + // bytes are set to '\0'. + size_t unpackRegion(char region[4]) const; + + // Sets the language code of this configuration to the first three + // chars at |language|. + // + // If |language| is a 2 letter code, the trailing byte must be '\0' or + // the BCP-47 separator '-'. + void packLanguage(const char* language); + // Sets the region code of this configuration to the first three bytes + // at |region|. If |region| is a 2 letter code, the trailing byte must be '\0' + // or the BCP-47 separator '-'. + void packRegion(const char* region); + + // Returns a positive integer if this config is more specific than |o| + // with respect to their locales, a negative integer if |o| is more specific + // and 0 if they're equally specific. + int isLocaleMoreSpecificThan(const ResTable_config &o) const; String8 toString() const; }; @@ -1284,7 +1377,7 @@ public: ~ResTable(); status_t add(Asset* asset, const int32_t cookie, bool copyData, - const void* idmap); + const void* idmap = NULL); status_t add(const void *data, size_t size); status_t add(ResTable* src); @@ -1545,18 +1638,21 @@ public: // Return value: on success: NO_ERROR; caller is responsible for free-ing // outData (using free(3)). On failure, any status_t value other than // NO_ERROR; the caller should not free outData. - status_t createIdmap(const ResTable& overlay, uint32_t originalCrc, uint32_t overlayCrc, - void** outData, size_t* outSize) const; + status_t createIdmap(const ResTable& overlay, + uint32_t targetCrc, uint32_t overlayCrc, + const char* targetPath, const char* overlayPath, + void** outData, size_t* outSize) const; enum { - IDMAP_HEADER_SIZE_BYTES = 3 * sizeof(uint32_t), + IDMAP_HEADER_SIZE_BYTES = 3 * sizeof(uint32_t) + 2 * 256, }; // Retrieve idmap meta-data. // // This function only requires the idmap header (the first // IDMAP_HEADER_SIZE_BYTES) bytes of an idmap file. static bool getIdmapInfo(const void* idmap, size_t size, - uint32_t* pOriginalCrc, uint32_t* pOverlayCrc); + uint32_t* pTargetCrc, uint32_t* pOverlayCrc, + String8* pTargetPath, String8* pOverlayPath); void print(bool inclValues) const; static String8 normalizeForOutput(const char* input); |