blob: 95b18eaf64acd28a8b7cd63587417aba15e2be7a [file] [log] [blame]
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -07001/*
2 * Copyright 2010, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_TAG "Configuration"
18
19#include <utils/Log.h>
20#include "utils/misc.h"
21
22#include "jni.h"
23#include <android_runtime/android_content_res_Configuration.h>
24#include "android_runtime/AndroidRuntime.h"
25
26namespace android {
27
28static struct {
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070029 jfieldID mcc;
30 jfieldID mnc;
31 jfieldID locale;
32 jfieldID screenLayout;
33 jfieldID touchscreen;
34 jfieldID keyboard;
35 jfieldID keyboardHidden;
36 jfieldID hardKeyboardHidden;
37 jfieldID navigation;
38 jfieldID navigationHidden;
39 jfieldID orientation;
40 jfieldID uiMode;
41} gConfigurationClassInfo;
42
43void android_Configuration_getFromJava(
44 JNIEnv* env, jobject clazz, struct AConfiguration* out) {
45 out->mcc = env->GetIntField(clazz, gConfigurationClassInfo.mcc);
46 out->mnc = env->GetIntField(clazz, gConfigurationClassInfo.mnc);
47 out->screenLayout = env->GetIntField(clazz, gConfigurationClassInfo.screenLayout);
48 out->touchscreen = env->GetIntField(clazz, gConfigurationClassInfo.touchscreen);
49 out->keyboard = env->GetIntField(clazz, gConfigurationClassInfo.keyboard);
50 out->navigation = env->GetIntField(clazz, gConfigurationClassInfo.navigation);
51
52 out->inputFlags = env->GetIntField(clazz, gConfigurationClassInfo.keyboardHidden);
53 int hardKeyboardHidden = env->GetIntField(clazz, gConfigurationClassInfo.hardKeyboardHidden);
54 if (out->inputFlags == ACONFIGURATION_KEYSHIDDEN_NO
55 && hardKeyboardHidden == 2) {
56 out->inputFlags = ACONFIGURATION_KEYSHIDDEN_SOFT;
57 }
58 out->inputFlags |= env->GetIntField(clazz, gConfigurationClassInfo.navigationHidden)
59 << ResTable_config::SHIFT_NAVHIDDEN;
60
61 out->orientation = env->GetIntField(clazz, gConfigurationClassInfo.orientation);
62 out->uiMode = env->GetIntField(clazz, gConfigurationClassInfo.uiMode);
63}
64
65/*
66 * JNI registration.
67 */
68static JNINativeMethod gMethods[] = {
69 /* name, signature, funcPtr */
70 //{ "getObbInfo_native", "(Ljava/lang/String;Landroid/content/res/ObbInfo;)Z",
71 // (void*) android_content_res_ObbScanner_getObbInfo },
72};
73
74#define FIND_CLASS(var, className) \
75 var = env->FindClass(className); \
Carl Shapiro17cc33a2011-03-05 20:53:16 -080076 LOG_FATAL_IF(! var, "Unable to find class " className);
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070077
78#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
79 var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
80 LOG_FATAL_IF(! var, "Unable to find field " fieldName);
81
82int register_android_content_res_Configuration(JNIEnv* env)
83{
Carl Shapiro17cc33a2011-03-05 20:53:16 -080084 jclass clazz;
85 FIND_CLASS(clazz, "android/content/res/Configuration");
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070086
Carl Shapiro17cc33a2011-03-05 20:53:16 -080087 GET_FIELD_ID(gConfigurationClassInfo.mcc, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070088 "mcc", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080089 GET_FIELD_ID(gConfigurationClassInfo.mnc, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070090 "mnc", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080091 GET_FIELD_ID(gConfigurationClassInfo.locale, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070092 "locale", "Ljava/util/Locale;");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080093 GET_FIELD_ID(gConfigurationClassInfo.screenLayout, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070094 "screenLayout", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080095 GET_FIELD_ID(gConfigurationClassInfo.touchscreen, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070096 "touchscreen", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080097 GET_FIELD_ID(gConfigurationClassInfo.keyboard, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -070098 "keyboard", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -080099 GET_FIELD_ID(gConfigurationClassInfo.keyboardHidden, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700100 "keyboardHidden", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -0800101 GET_FIELD_ID(gConfigurationClassInfo.hardKeyboardHidden, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700102 "hardKeyboardHidden", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -0800103 GET_FIELD_ID(gConfigurationClassInfo.navigation, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700104 "navigation", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -0800105 GET_FIELD_ID(gConfigurationClassInfo.navigationHidden, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700106 "navigationHidden", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -0800107 GET_FIELD_ID(gConfigurationClassInfo.orientation, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700108 "orientation", "I");
Carl Shapiro17cc33a2011-03-05 20:53:16 -0800109 GET_FIELD_ID(gConfigurationClassInfo.uiMode, clazz,
Dianne Hackborn08d5b8f2010-08-04 11:12:40 -0700110 "uiMode", "I");
111
112 return AndroidRuntime::registerNativeMethods(env, "android/content/res/Configuration", gMethods,
113 NELEM(gMethods));
114}
115
116}; // namespace android