131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski/*
231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Copyright (C) 2014 The Android Open Source Project
331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski *
431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * you may not use this file except in compliance with the License.
631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * You may obtain a copy of the License at
731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski *
831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski *
1031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Unless required by applicable law or agreed to in writing, software
1131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
1231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * See the License for the specific language governing permissions and
1431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * limitations under the License.
1531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski */
1631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
174c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "androidfw/ResourceTypes.h"
184c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski
194c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "utils/Log.h"
204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "utils/String8.h"
214c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "utils/Vector.h"
2231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
2331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include "TestHelpers.h"
244c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "gtest/gtest.h"
2531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
2631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskinamespace android {
2731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
2831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskistatic ResTable_config selectBest(const ResTable_config& target,
294c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski                                  const Vector<ResTable_config>& configs) {
304c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config bestConfig;
314c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&bestConfig, 0, sizeof(bestConfig));
324c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  const size_t configCount = configs.size();
334c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  for (size_t i = 0; i < configCount; i++) {
344c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski    const ResTable_config& thisConfig = configs[i];
354c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski    if (!thisConfig.match(target)) {
364c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski      continue;
374c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski    }
384c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski
394c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski    if (thisConfig.isBetterThan(bestConfig, &target)) {
404c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski      bestConfig = thisConfig;
4131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski    }
424c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  }
434c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  return bestConfig;
4431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
4531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
4631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskistatic ResTable_config buildDensityConfig(int density) {
474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config config;
484c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&config, 0, sizeof(config));
494c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  config.density = uint16_t(density);
504c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  config.sdkVersion = 4;
514c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  return config;
5231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
5331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
5431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigTest, shouldSelectBestDensity) {
554c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config deviceConfig;
564c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&deviceConfig, 0, sizeof(deviceConfig));
574c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.density = ResTable_config::DENSITY_XHIGH;
584c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.sdkVersion = 21;
5931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
604c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  Vector<ResTable_config> configs;
6131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
624c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config expectedBest =
634c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski      buildDensityConfig(ResTable_config::DENSITY_HIGH);
644c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
654c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
6631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
674c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest = buildDensityConfig(ResTable_config::DENSITY_XXHIGH);
684c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
694c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
7031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
714c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest = buildDensityConfig(int(ResTable_config::DENSITY_XXHIGH) - 20);
724c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
734c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
7431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
754c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(buildDensityConfig(int(ResTable_config::DENSITY_HIGH) + 20));
764c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
7731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
784c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest = buildDensityConfig(ResTable_config::DENSITY_XHIGH);
794c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
804c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
8131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
824c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest = buildDensityConfig(ResTable_config::DENSITY_ANY);
834c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest.sdkVersion = 21;
844c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
854c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
8631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
8731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
8831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigTest, shouldSelectBestDensityWhenNoneSpecified) {
894c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config deviceConfig;
904c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&deviceConfig, 0, sizeof(deviceConfig));
914c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.sdkVersion = 21;
9231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
934c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  Vector<ResTable_config> configs;
944c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(buildDensityConfig(ResTable_config::DENSITY_HIGH));
9531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
964c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config expectedBest =
974c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski      buildDensityConfig(ResTable_config::DENSITY_MEDIUM);
984c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
994c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
10031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
1014c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  expectedBest = buildDensityConfig(ResTable_config::DENSITY_ANY);
1024c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  configs.add(expectedBest);
1034c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs));
10431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
10531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
1062738c96d998dedfae5b4670d588d0cd299c4ca0fAdam LesinskiTEST(ConfigTest, shouldMatchRoundQualifier) {
1074c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config deviceConfig;
1084c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&deviceConfig, 0, sizeof(deviceConfig));
1092738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1104c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config roundConfig;
1114c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&roundConfig, 0, sizeof(roundConfig));
1124c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  roundConfig.screenLayout2 = ResTable_config::SCREENROUND_YES;
1132738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1144c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_FALSE(roundConfig.match(deviceConfig));
1152738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1164c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.screenLayout2 = ResTable_config::SCREENROUND_YES;
1172738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1184c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(roundConfig.match(deviceConfig));
1192738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.screenLayout2 = ResTable_config::SCREENROUND_NO;
1212738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1224c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_FALSE(roundConfig.match(deviceConfig));
1232738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1244c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config notRoundConfig;
1254c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&notRoundConfig, 0, sizeof(notRoundConfig));
1264c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  notRoundConfig.screenLayout2 = ResTable_config::SCREENROUND_NO;
1272738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1284c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(notRoundConfig.match(deviceConfig));
1292738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski}
1302738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1312738c96d998dedfae5b4670d588d0cd299c4ca0fAdam LesinskiTEST(ConfigTest, RoundQualifierShouldHaveStableSortOrder) {
1324c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config defaultConfig;
1334c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&defaultConfig, 0, sizeof(defaultConfig));
1342738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1354c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config longConfig = defaultConfig;
1364c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  longConfig.screenLayout = ResTable_config::SCREENLONG_YES;
1372738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1384c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config longRoundConfig = longConfig;
1394c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  longRoundConfig.screenLayout2 = ResTable_config::SCREENROUND_YES;
1402738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1414c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config longRoundPortConfig = longConfig;
1424c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  longRoundPortConfig.orientation = ResTable_config::ORIENTATION_PORT;
1432738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1444c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longConfig.compare(longRoundConfig) < 0);
1454c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longConfig.compareLogical(longRoundConfig) < 0);
1464c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundConfig.compare(longConfig) > 0);
1474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundConfig.compareLogical(longConfig) > 0);
1482738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1494c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundConfig.compare(longRoundPortConfig) < 0);
1504c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundConfig.compareLogical(longRoundPortConfig) < 0);
1514c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundPortConfig.compare(longRoundConfig) > 0);
1524c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(longRoundPortConfig.compareLogical(longRoundConfig) > 0);
1532738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski}
1542738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1552738c96d998dedfae5b4670d588d0cd299c4ca0fAdam LesinskiTEST(ConfigTest, ScreenShapeHasCorrectDiff) {
1564c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config defaultConfig;
1574c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&defaultConfig, 0, sizeof(defaultConfig));
1582738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1594c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config roundConfig = defaultConfig;
1604c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  roundConfig.screenLayout2 = ResTable_config::SCREENROUND_YES;
1612738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1624c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_EQ(defaultConfig.diff(roundConfig),
1634c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski            ResTable_config::CONFIG_SCREEN_ROUND);
1642738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski}
1652738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1662738c96d998dedfae5b4670d588d0cd299c4ca0fAdam LesinskiTEST(ConfigTest, RoundIsMoreSpecific) {
1674c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config deviceConfig;
1684c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&deviceConfig, 0, sizeof(deviceConfig));
1694c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.screenLayout2 = ResTable_config::SCREENROUND_YES;
1704c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  deviceConfig.screenLayout = ResTable_config::SCREENLONG_YES;
1712738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1724c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config targetConfigA;
1734c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  memset(&targetConfigA, 0, sizeof(targetConfigA));
1742738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1754c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config targetConfigB = targetConfigA;
1764c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  targetConfigB.screenLayout = ResTable_config::SCREENLONG_YES;
1772738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1784c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  ResTable_config targetConfigC = targetConfigB;
1794c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  targetConfigC.screenLayout2 = ResTable_config::SCREENROUND_YES;
1802738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
1814c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(targetConfigB.isBetterThan(targetConfigA, &deviceConfig));
1824c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski  EXPECT_TRUE(targetConfigC.isBetterThan(targetConfigB, &deviceConfig));
1832738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski}
1842738c96d998dedfae5b4670d588d0cd299c4ca0fAdam Lesinski
185c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain GuyTEST(ConfigTest, ScreenIsWideGamut) {
186c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  ResTable_config defaultConfig;
187c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  memset(&defaultConfig, 0, sizeof(defaultConfig));
188c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
189c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  ResTable_config wideGamutConfig = defaultConfig;
1904832745b84d6a358582f2264d22acacf25e01b07Romain Guy  wideGamutConfig.colorMode = ResTable_config::WIDE_COLOR_GAMUT_YES;
191c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
1924832745b84d6a358582f2264d22acacf25e01b07Romain Guy  EXPECT_EQ(defaultConfig.diff(wideGamutConfig), ResTable_config::CONFIG_COLOR_MODE);
193c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy}
194c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
195c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain GuyTEST(ConfigTest, ScreenIsHdr) {
196c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  ResTable_config defaultConfig;
197c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  memset(&defaultConfig, 0, sizeof(defaultConfig));
198c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
199c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy  ResTable_config hdrConfig = defaultConfig;
2004832745b84d6a358582f2264d22acacf25e01b07Romain Guy  hdrConfig.colorMode = ResTable_config::HDR_YES;
201c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
2024832745b84d6a358582f2264d22acacf25e01b07Romain Guy  EXPECT_EQ(defaultConfig.diff(hdrConfig), ResTable_config::CONFIG_COLOR_MODE);
203c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy}
204c9ba55902123be5abcf2dcda5af9995be0b8d3d8Romain Guy
20531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}  // namespace android.
206