android_content_res_Configuration.cpp revision fef966ae4629f09158576de4cedef38e83d50b2b
108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn/* 208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * Copyright 2010, The Android Open Source Project 308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * 408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * you may not use this file except in compliance with the License. 608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * You may obtain a copy of the License at 708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * 808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * 1008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 1108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 1208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * See the License for the specific language governing permissions and 1408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * limitations under the License. 1508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn */ 1608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 1708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#define LOG_TAG "Configuration" 1808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 1908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#include <utils/Log.h> 2008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#include "utils/misc.h" 2108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 2208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#include "jni.h" 2308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#include <android_runtime/android_content_res_Configuration.h> 2408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#include "android_runtime/AndroidRuntime.h" 2508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 2608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornnamespace android { 2708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 2808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornstatic struct { 2908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID mcc; 3008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID mnc; 3108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID locale; 3208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID screenLayout; 3308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID touchscreen; 3408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID keyboard; 3508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID keyboardHidden; 3608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID hardKeyboardHidden; 3708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID navigation; 3808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID navigationHidden; 3908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID orientation; 4008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID uiMode; 4169cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID screenWidthDp; 4269cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID screenHeightDp; 4369cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID smallestScreenWidthDp; 4408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} gConfigurationClassInfo; 4508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 4608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornvoid android_Configuration_getFromJava( 4708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn JNIEnv* env, jobject clazz, struct AConfiguration* out) { 4808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mcc = env->GetIntField(clazz, gConfigurationClassInfo.mcc); 4908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mnc = env->GetIntField(clazz, gConfigurationClassInfo.mnc); 5008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->screenLayout = env->GetIntField(clazz, gConfigurationClassInfo.screenLayout); 5108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->touchscreen = env->GetIntField(clazz, gConfigurationClassInfo.touchscreen); 5208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->keyboard = env->GetIntField(clazz, gConfigurationClassInfo.keyboard); 5308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->navigation = env->GetIntField(clazz, gConfigurationClassInfo.navigation); 5408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 5508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = env->GetIntField(clazz, gConfigurationClassInfo.keyboardHidden); 5608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn int hardKeyboardHidden = env->GetIntField(clazz, gConfigurationClassInfo.hardKeyboardHidden); 5708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn if (out->inputFlags == ACONFIGURATION_KEYSHIDDEN_NO 5808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn && hardKeyboardHidden == 2) { 5908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = ACONFIGURATION_KEYSHIDDEN_SOFT; 6008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn } 6108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags |= env->GetIntField(clazz, gConfigurationClassInfo.navigationHidden) 6208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn << ResTable_config::SHIFT_NAVHIDDEN; 6308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 6408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->orientation = env->GetIntField(clazz, gConfigurationClassInfo.orientation); 6508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->uiMode = env->GetIntField(clazz, gConfigurationClassInfo.uiMode); 6669cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn 6769cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->screenWidthDp = env->GetIntField(clazz, gConfigurationClassInfo.screenWidthDp); 6869cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->screenHeightDp = env->GetIntField(clazz, gConfigurationClassInfo.screenHeightDp); 6969cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->smallestScreenWidthDp = env->GetIntField(clazz, 7069cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn gConfigurationClassInfo.smallestScreenWidthDp); 7108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 7208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 7308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn/* 7408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * JNI registration. 7508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn */ 7608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornstatic JNINativeMethod gMethods[] = { 7708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn /* name, signature, funcPtr */ 7808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn //{ "getObbInfo_native", "(Ljava/lang/String;Landroid/content/res/ObbInfo;)Z", 7908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn // (void*) android_content_res_ObbScanner_getObbInfo }, 8008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn}; 8108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 8208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#define FIND_CLASS(var, className) \ 8308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn var = env->FindClass(className); \ 8417cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro LOG_FATAL_IF(! var, "Unable to find class " className); 8508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 8608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ 8708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ 8808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn LOG_FATAL_IF(! var, "Unable to find field " fieldName); 8908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 9008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornint register_android_content_res_Configuration(JNIEnv* env) 9108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn{ 9217cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro jclass clazz; 9317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro FIND_CLASS(clazz, "android/content/res/Configuration"); 9408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 9517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.mcc, clazz, 9608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "mcc", "I"); 9717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.mnc, clazz, 9808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "mnc", "I"); 9917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.locale, clazz, 10008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "locale", "Ljava/util/Locale;"); 10117cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.screenLayout, clazz, 10208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "screenLayout", "I"); 10317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.touchscreen, clazz, 10408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "touchscreen", "I"); 10517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.keyboard, clazz, 10608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "keyboard", "I"); 10717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.keyboardHidden, clazz, 10808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "keyboardHidden", "I"); 10917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.hardKeyboardHidden, clazz, 11008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "hardKeyboardHidden", "I"); 11117cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.navigation, clazz, 11208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "navigation", "I"); 11317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.navigationHidden, clazz, 11408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "navigationHidden", "I"); 11517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.orientation, clazz, 11608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "orientation", "I"); 11717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.uiMode, clazz, 11808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "uiMode", "I"); 119fef966ae4629f09158576de4cedef38e83d50b2bDianne Hackborn GET_FIELD_ID(gConfigurationClassInfo.screenWidthDp, clazz, 12069cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn "screenWidthDp", "I"); 121fef966ae4629f09158576de4cedef38e83d50b2bDianne Hackborn GET_FIELD_ID(gConfigurationClassInfo.screenHeightDp, clazz, 12269cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn "screenHeightDp", "I"); 123fef966ae4629f09158576de4cedef38e83d50b2bDianne Hackborn GET_FIELD_ID(gConfigurationClassInfo.smallestScreenWidthDp, clazz, 12469cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn "smallestScreenWidthDp", "I"); 12508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 12608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn return AndroidRuntime::registerNativeMethods(env, "android/content/res/Configuration", gMethods, 12708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn NELEM(gMethods)); 12808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 12908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 13008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn}; // namespace android 131