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 26987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe#include "core_jni_helpers.h" 27987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe 2808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornnamespace android { 2908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 3008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornstatic struct { 3108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID mcc; 3208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID mnc; 3308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID locale; 3408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID screenLayout; 3508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID touchscreen; 3608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID keyboard; 3708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID keyboardHidden; 3808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID hardKeyboardHidden; 3908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID navigation; 4008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID navigationHidden; 4108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID orientation; 4208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn jfieldID uiMode; 4369cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID screenWidthDp; 4469cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID screenHeightDp; 4569cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn jfieldID smallestScreenWidthDp; 4608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} gConfigurationClassInfo; 4708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 4808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornvoid android_Configuration_getFromJava( 4908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn JNIEnv* env, jobject clazz, struct AConfiguration* out) { 5008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mcc = env->GetIntField(clazz, gConfigurationClassInfo.mcc); 5108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->mnc = env->GetIntField(clazz, gConfigurationClassInfo.mnc); 5208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->screenLayout = env->GetIntField(clazz, gConfigurationClassInfo.screenLayout); 5308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->touchscreen = env->GetIntField(clazz, gConfigurationClassInfo.touchscreen); 5408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->keyboard = env->GetIntField(clazz, gConfigurationClassInfo.keyboard); 5508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->navigation = env->GetIntField(clazz, gConfigurationClassInfo.navigation); 5608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 5708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = env->GetIntField(clazz, gConfigurationClassInfo.keyboardHidden); 5808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn int hardKeyboardHidden = env->GetIntField(clazz, gConfigurationClassInfo.hardKeyboardHidden); 5908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn if (out->inputFlags == ACONFIGURATION_KEYSHIDDEN_NO 6008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn && hardKeyboardHidden == 2) { 6108d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags = ACONFIGURATION_KEYSHIDDEN_SOFT; 6208d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn } 6308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->inputFlags |= env->GetIntField(clazz, gConfigurationClassInfo.navigationHidden) 6408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn << ResTable_config::SHIFT_NAVHIDDEN; 6508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 6608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->orientation = env->GetIntField(clazz, gConfigurationClassInfo.orientation); 6708d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn out->uiMode = env->GetIntField(clazz, gConfigurationClassInfo.uiMode); 6869cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn 6969cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->screenWidthDp = env->GetIntField(clazz, gConfigurationClassInfo.screenWidthDp); 7069cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->screenHeightDp = env->GetIntField(clazz, gConfigurationClassInfo.screenHeightDp); 7169cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn out->smallestScreenWidthDp = env->GetIntField(clazz, 7269cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn gConfigurationClassInfo.smallestScreenWidthDp); 7308d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 7408d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 7508d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackbornint register_android_content_res_Configuration(JNIEnv* env) 7608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn{ 77987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe jclass clazz = FindClassOrDie(env, "android/content/res/Configuration"); 7808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 79987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.mcc = GetFieldIDOrDie(env, clazz, "mcc", "I"); 80987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.mnc = GetFieldIDOrDie(env, clazz, "mnc", "I"); 81987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.locale = GetFieldIDOrDie(env, clazz, "locale", "Ljava/util/Locale;"); 82987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.screenLayout = GetFieldIDOrDie(env, clazz, "screenLayout", "I"); 83987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.touchscreen = GetFieldIDOrDie(env, clazz, "touchscreen", "I"); 84987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.keyboard = GetFieldIDOrDie(env, clazz, "keyboard", "I"); 85987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.keyboardHidden = GetFieldIDOrDie(env, clazz, "keyboardHidden", "I"); 86987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.hardKeyboardHidden = GetFieldIDOrDie(env, clazz, "hardKeyboardHidden", 87987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe "I"); 88987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.navigation = GetFieldIDOrDie(env, clazz, "navigation", "I"); 89987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.navigationHidden = GetFieldIDOrDie(env, clazz, "navigationHidden", "I"); 90987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.orientation = GetFieldIDOrDie(env, clazz, "orientation", "I"); 91987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.uiMode = GetFieldIDOrDie(env, clazz, "uiMode", "I"); 92987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.screenWidthDp = GetFieldIDOrDie(env, clazz, "screenWidthDp", "I"); 93987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.screenHeightDp = GetFieldIDOrDie(env, clazz, "screenHeightDp", "I"); 94987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe gConfigurationClassInfo.smallestScreenWidthDp = GetFieldIDOrDie(env, clazz, 95987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe "smallestScreenWidthDp", "I"); 9608d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 97f83c73ec2fa7ceecd625cb05900ead294db18c99Narayan Kamath return 0; 9808d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn} 9908d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn 10008d5b8fad8d46ccb64db2fdcb4d66972ec87bf48Dianne Hackborn}; // namespace android 101