android_content_res_Configuration.cpp revision 17cc33a35729733aaa0a7706f38b1c45f0b1590a
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; 4108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} gConfigurationClassInfo; 4208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 4308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornvoid android_Configuration_getFromJava( 4408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn JNIEnv* env, jobject clazz, struct AConfiguration* out) { 4508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mcc = env->GetIntField(clazz, gConfigurationClassInfo.mcc); 4608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mnc = env->GetIntField(clazz, gConfigurationClassInfo.mnc); 4708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->screenLayout = env->GetIntField(clazz, gConfigurationClassInfo.screenLayout); 4808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->touchscreen = env->GetIntField(clazz, gConfigurationClassInfo.touchscreen); 4908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->keyboard = env->GetIntField(clazz, gConfigurationClassInfo.keyboard); 5008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->navigation = env->GetIntField(clazz, gConfigurationClassInfo.navigation); 5108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 5208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = env->GetIntField(clazz, gConfigurationClassInfo.keyboardHidden); 5308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn int hardKeyboardHidden = env->GetIntField(clazz, gConfigurationClassInfo.hardKeyboardHidden); 5408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn if (out->inputFlags == ACONFIGURATION_KEYSHIDDEN_NO 5508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn && hardKeyboardHidden == 2) { 5608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = ACONFIGURATION_KEYSHIDDEN_SOFT; 5708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn } 5808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags |= env->GetIntField(clazz, gConfigurationClassInfo.navigationHidden) 5908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn << ResTable_config::SHIFT_NAVHIDDEN; 6008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 6108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->orientation = env->GetIntField(clazz, gConfigurationClassInfo.orientation); 6208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->uiMode = env->GetIntField(clazz, gConfigurationClassInfo.uiMode); 6308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 6408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 6508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn/* 6608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn * JNI registration. 6708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn */ 6808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornstatic JNINativeMethod gMethods[] = { 6908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn /* name, signature, funcPtr */ 7008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn //{ "getObbInfo_native", "(Ljava/lang/String;Landroid/content/res/ObbInfo;)Z", 7108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn // (void*) android_content_res_ObbScanner_getObbInfo }, 7208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn}; 7308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 7408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#define FIND_CLASS(var, className) \ 7508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn var = env->FindClass(className); \ 7617cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro LOG_FATAL_IF(! var, "Unable to find class " className); 7708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 7808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ 7908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ 8008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn LOG_FATAL_IF(! var, "Unable to find field " fieldName); 8108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 8208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornint register_android_content_res_Configuration(JNIEnv* env) 8308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn{ 8417cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro jclass clazz; 8517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro FIND_CLASS(clazz, "android/content/res/Configuration"); 8608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 8717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.mcc, clazz, 8808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "mcc", "I"); 8917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.mnc, clazz, 9008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "mnc", "I"); 9117cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.locale, clazz, 9208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "locale", "Ljava/util/Locale;"); 9317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.screenLayout, clazz, 9408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "screenLayout", "I"); 9517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.touchscreen, clazz, 9608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "touchscreen", "I"); 9717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.keyboard, clazz, 9808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "keyboard", "I"); 9917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.keyboardHidden, clazz, 10008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "keyboardHidden", "I"); 10117cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.hardKeyboardHidden, clazz, 10208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "hardKeyboardHidden", "I"); 10317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.navigation, clazz, 10408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "navigation", "I"); 10517cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.navigationHidden, clazz, 10608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "navigationHidden", "I"); 10717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.orientation, clazz, 10808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "orientation", "I"); 10917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro GET_FIELD_ID(gConfigurationClassInfo.uiMode, clazz, 11008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn "uiMode", "I"); 11108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 11208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn return AndroidRuntime::registerNativeMethods(env, "android/content/res/Configuration", gMethods, 11308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn NELEM(gMethods)); 11408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 11508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 11608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn}; // namespace android 117