Merge "More native work." into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
a5ae50cd83
@ -26460,6 +26460,17 @@
|
|||||||
<parameter name="holder" type="android.view.SurfaceHolder">
|
<parameter name="holder" type="android.view.SurfaceHolder">
|
||||||
</parameter>
|
</parameter>
|
||||||
</method>
|
</method>
|
||||||
|
<field name="KEY_NATIVE_SAVED_STATE"
|
||||||
|
type="java.lang.String"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
value=""android:native_state""
|
||||||
|
static="true"
|
||||||
|
final="true"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="META_DATA_LIB_NAME"
|
<field name="META_DATA_LIB_NAME"
|
||||||
type="java.lang.String"
|
type="java.lang.String"
|
||||||
transient="false"
|
transient="false"
|
||||||
|
@ -10,6 +10,7 @@ import android.content.pm.ActivityInfo;
|
|||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.AssetManager;
|
import android.content.res.AssetManager;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -32,12 +33,27 @@ import java.lang.ref.WeakReference;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience for implementing an activity that will be implemented
|
* Convenience for implementing an activity that will be implemented
|
||||||
* purely in native code. That is, a game (or game-like thing).
|
* purely in native code. That is, a game (or game-like thing). There
|
||||||
|
* is no need to derive from this class; you can simply declare it in your
|
||||||
|
* manifest, and use the NDK APIs from there.
|
||||||
|
*
|
||||||
|
* <p>A typical manifest would look like:
|
||||||
|
*
|
||||||
|
* {@sample development/ndk/platforms/android-9/samples/native-activity/AndroidManifest.xml
|
||||||
|
* manifest}
|
||||||
|
*
|
||||||
|
* <p>A very simple example of native code that is run by NativeActivity
|
||||||
|
* follows. This reads input events from the user and uses OpenGLES to
|
||||||
|
* draw into the native activity's window.
|
||||||
|
*
|
||||||
|
* {@sample development/ndk/platforms/android-9/samples/native-activity/jni/main.c all}
|
||||||
*/
|
*/
|
||||||
public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
||||||
InputQueue.Callback, OnGlobalLayoutListener {
|
InputQueue.Callback, OnGlobalLayoutListener {
|
||||||
public static final String META_DATA_LIB_NAME = "android.app.lib_name";
|
public static final String META_DATA_LIB_NAME = "android.app.lib_name";
|
||||||
|
|
||||||
|
public static final String KEY_NATIVE_SAVED_STATE = "android:native_state";
|
||||||
|
|
||||||
private NativeContentView mNativeContentView;
|
private NativeContentView mNativeContentView;
|
||||||
private InputMethodManager mIMM;
|
private InputMethodManager mIMM;
|
||||||
private InputMethodCallback mInputMethodCallback;
|
private InputMethodCallback mInputMethodCallback;
|
||||||
@ -59,14 +75,15 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
|||||||
|
|
||||||
private native int loadNativeCode(String path, MessageQueue queue,
|
private native int loadNativeCode(String path, MessageQueue queue,
|
||||||
String internalDataPath, String externalDataPath, int sdkVersion,
|
String internalDataPath, String externalDataPath, int sdkVersion,
|
||||||
AssetManager assetMgr);
|
AssetManager assetMgr, byte[] savedState);
|
||||||
private native void unloadNativeCode(int handle);
|
private native void unloadNativeCode(int handle);
|
||||||
|
|
||||||
private native void onStartNative(int handle);
|
private native void onStartNative(int handle);
|
||||||
private native void onResumeNative(int handle);
|
private native void onResumeNative(int handle);
|
||||||
private native void onSaveInstanceStateNative(int handle);
|
private native byte[] onSaveInstanceStateNative(int handle);
|
||||||
private native void onPauseNative(int handle);
|
private native void onPauseNative(int handle);
|
||||||
private native void onStopNative(int handle);
|
private native void onStopNative(int handle);
|
||||||
|
private native void onConfigurationChangedNative(int handle);
|
||||||
private native void onLowMemoryNative(int handle);
|
private native void onLowMemoryNative(int handle);
|
||||||
private native void onWindowFocusChangedNative(int handle, boolean focused);
|
private native void onWindowFocusChangedNative(int handle, boolean focused);
|
||||||
private native void onSurfaceCreatedNative(int handle, Surface surface);
|
private native void onSurfaceCreatedNative(int handle, Surface surface);
|
||||||
@ -165,10 +182,13 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
|||||||
throw new IllegalArgumentException("Unable to find native library: " + libname);
|
throw new IllegalArgumentException("Unable to find native library: " + libname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte[] nativeSavedState = savedInstanceState != null
|
||||||
|
? savedInstanceState.getByteArray(KEY_NATIVE_SAVED_STATE) : null;
|
||||||
|
|
||||||
mNativeHandle = loadNativeCode(path, Looper.myQueue(),
|
mNativeHandle = loadNativeCode(path, Looper.myQueue(),
|
||||||
getFilesDir().toString(),
|
getFilesDir().toString(),
|
||||||
Environment.getExternalStorageAppFilesDirectory(ai.packageName).toString(),
|
Environment.getExternalStorageAppFilesDirectory(ai.packageName).toString(),
|
||||||
Build.VERSION.SDK_INT, getAssets());
|
Build.VERSION.SDK_INT, getAssets(), nativeSavedState);
|
||||||
|
|
||||||
if (mNativeHandle == 0) {
|
if (mNativeHandle == 0) {
|
||||||
throw new IllegalArgumentException("Unable to load native library: " + path);
|
throw new IllegalArgumentException("Unable to load native library: " + path);
|
||||||
@ -206,7 +226,10 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
onSaveInstanceStateNative(mNativeHandle);
|
byte[] state = onSaveInstanceStateNative(mNativeHandle);
|
||||||
|
if (state != null) {
|
||||||
|
outState.putByteArray(KEY_NATIVE_SAVED_STATE, state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -221,6 +244,14 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2,
|
|||||||
onStopNative(mNativeHandle);
|
onStopNative(mNativeHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
if (!mDestroyed) {
|
||||||
|
onConfigurationChangedNative(mNativeHandle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLowMemory() {
|
public void onLowMemory() {
|
||||||
super.onLowMemory();
|
super.onLowMemory();
|
||||||
|
@ -1288,7 +1288,7 @@ public class Resources {
|
|||||||
height = mMetrics.widthPixels;
|
height = mMetrics.widthPixels;
|
||||||
}
|
}
|
||||||
int keyboardHidden = mConfiguration.keyboardHidden;
|
int keyboardHidden = mConfiguration.keyboardHidden;
|
||||||
if (keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO
|
if (keyboardHidden == Configuration.KEYBOARDHIDDEN_NO
|
||||||
&& mConfiguration.hardKeyboardHidden
|
&& mConfiguration.hardKeyboardHidden
|
||||||
== Configuration.HARDKEYBOARDHIDDEN_YES) {
|
== Configuration.HARDKEYBOARDHIDDEN_YES) {
|
||||||
keyboardHidden = Configuration.KEYBOARDHIDDEN_SOFT;
|
keyboardHidden = Configuration.KEYBOARDHIDDEN_SOFT;
|
||||||
|
34
core/java/com/android/internal/app/PlatLogoActivity.java
Normal file
34
core/java/com/android/internal/app/PlatLogoActivity.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.internal.app;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
public class PlatLogoActivity extends Activity {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
ImageView content = new ImageView(this);
|
||||||
|
content.setImageResource(com.android.internal.R.drawable.platlogo);
|
||||||
|
content.setScaleType(ImageView.ScaleType.FIT_CENTER);
|
||||||
|
|
||||||
|
setContentView(content);
|
||||||
|
}
|
||||||
|
}
|
@ -135,7 +135,8 @@ LOCAL_SRC_FILES:= \
|
|||||||
android_backup_BackupDataOutput.cpp \
|
android_backup_BackupDataOutput.cpp \
|
||||||
android_backup_FileBackupHelperBase.cpp \
|
android_backup_FileBackupHelperBase.cpp \
|
||||||
android_backup_BackupHelperDispatcher.cpp \
|
android_backup_BackupHelperDispatcher.cpp \
|
||||||
android_content_res_ObbScanner.cpp
|
android_content_res_ObbScanner.cpp \
|
||||||
|
android_content_res_Configuration.cpp
|
||||||
|
|
||||||
LOCAL_C_INCLUDES += \
|
LOCAL_C_INCLUDES += \
|
||||||
$(JNI_H_INCLUDE) \
|
$(JNI_H_INCLUDE) \
|
||||||
|
@ -167,6 +167,7 @@ extern int register_android_view_InputQueue(JNIEnv* env);
|
|||||||
extern int register_android_view_KeyEvent(JNIEnv* env);
|
extern int register_android_view_KeyEvent(JNIEnv* env);
|
||||||
extern int register_android_view_MotionEvent(JNIEnv* env);
|
extern int register_android_view_MotionEvent(JNIEnv* env);
|
||||||
extern int register_android_content_res_ObbScanner(JNIEnv* env);
|
extern int register_android_content_res_ObbScanner(JNIEnv* env);
|
||||||
|
extern int register_android_content_res_Configuration(JNIEnv* env);
|
||||||
|
|
||||||
static AndroidRuntime* gCurRuntime = NULL;
|
static AndroidRuntime* gCurRuntime = NULL;
|
||||||
|
|
||||||
@ -1340,6 +1341,7 @@ static const RegJNIRec gRegJNI[] = {
|
|||||||
REG_JNI(register_android_view_MotionEvent),
|
REG_JNI(register_android_view_MotionEvent),
|
||||||
|
|
||||||
REG_JNI(register_android_content_res_ObbScanner),
|
REG_JNI(register_android_content_res_ObbScanner),
|
||||||
|
REG_JNI(register_android_content_res_Configuration),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -600,7 +600,7 @@ static bool mainWorkCallback(int fd, int events, void* data) {
|
|||||||
static jint
|
static jint
|
||||||
loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jobject messageQueue,
|
loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jobject messageQueue,
|
||||||
jstring internalDataDir, jstring externalDataDir, int sdkVersion,
|
jstring internalDataDir, jstring externalDataDir, int sdkVersion,
|
||||||
jobject jAssetMgr)
|
jobject jAssetMgr, jbyteArray savedState)
|
||||||
{
|
{
|
||||||
LOG_TRACE("loadNativeCode_native");
|
LOG_TRACE("loadNativeCode_native");
|
||||||
|
|
||||||
@ -666,7 +666,18 @@ loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jobject messageQ
|
|||||||
|
|
||||||
code->assetManager = assetManagerForJavaObject(env, jAssetMgr);
|
code->assetManager = assetManagerForJavaObject(env, jAssetMgr);
|
||||||
|
|
||||||
code->createActivityFunc(code, NULL, 0);
|
jbyte* rawSavedState = NULL;
|
||||||
|
jsize rawSavedSize = 0;
|
||||||
|
if (savedState != NULL) {
|
||||||
|
rawSavedState = env->GetByteArrayElements(savedState, NULL);
|
||||||
|
rawSavedSize = env->GetArrayLength(savedState);
|
||||||
|
}
|
||||||
|
|
||||||
|
code->createActivityFunc(code, rawSavedState, rawSavedSize);
|
||||||
|
|
||||||
|
if (rawSavedState != NULL) {
|
||||||
|
env->ReleaseByteArrayElements(savedState, rawSavedState, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jint)code;
|
return (jint)code;
|
||||||
@ -706,17 +717,31 @@ onResume_native(JNIEnv* env, jobject clazz, jint handle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static jbyteArray
|
||||||
onSaveInstanceState_native(JNIEnv* env, jobject clazz, jint handle)
|
onSaveInstanceState_native(JNIEnv* env, jobject clazz, jint handle)
|
||||||
{
|
{
|
||||||
LOG_TRACE("onSaveInstanceState_native");
|
LOG_TRACE("onSaveInstanceState_native");
|
||||||
|
|
||||||
|
jbyteArray array = NULL;
|
||||||
|
|
||||||
if (handle != 0) {
|
if (handle != 0) {
|
||||||
NativeCode* code = (NativeCode*)handle;
|
NativeCode* code = (NativeCode*)handle;
|
||||||
if (code->callbacks.onSaveInstanceState != NULL) {
|
if (code->callbacks.onSaveInstanceState != NULL) {
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
code->callbacks.onSaveInstanceState(code, &len);
|
jbyte* state = (jbyte*)code->callbacks.onSaveInstanceState(code, &len);
|
||||||
|
if (len > 0) {
|
||||||
|
array = env->NewByteArray(len);
|
||||||
|
if (array != NULL) {
|
||||||
|
env->SetByteArrayRegion(array, 0, len, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (state != NULL) {
|
||||||
|
free(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -743,6 +768,18 @@ onStop_native(JNIEnv* env, jobject clazz, jint handle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
onConfigurationChanged_native(JNIEnv* env, jobject clazz, jint handle)
|
||||||
|
{
|
||||||
|
LOG_TRACE("onConfigurationChanged_native");
|
||||||
|
if (handle != 0) {
|
||||||
|
NativeCode* code = (NativeCode*)handle;
|
||||||
|
if (code->callbacks.onConfigurationChanged != NULL) {
|
||||||
|
code->callbacks.onConfigurationChanged(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
onLowMemory_native(JNIEnv* env, jobject clazz, jint handle)
|
onLowMemory_native(JNIEnv* env, jobject clazz, jint handle)
|
||||||
{
|
{
|
||||||
@ -934,14 +971,15 @@ finishPreDispatchKeyEvent_native(JNIEnv* env, jobject clazz, jint handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const JNINativeMethod g_methods[] = {
|
static const JNINativeMethod g_methods[] = {
|
||||||
{ "loadNativeCode", "(Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;)I",
|
{ "loadNativeCode", "(Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;[B)I",
|
||||||
(void*)loadNativeCode_native },
|
(void*)loadNativeCode_native },
|
||||||
{ "unloadNativeCode", "(I)V", (void*)unloadNativeCode_native },
|
{ "unloadNativeCode", "(I)V", (void*)unloadNativeCode_native },
|
||||||
{ "onStartNative", "(I)V", (void*)onStart_native },
|
{ "onStartNative", "(I)V", (void*)onStart_native },
|
||||||
{ "onResumeNative", "(I)V", (void*)onResume_native },
|
{ "onResumeNative", "(I)V", (void*)onResume_native },
|
||||||
{ "onSaveInstanceStateNative", "(I)V", (void*)onSaveInstanceState_native },
|
{ "onSaveInstanceStateNative", "(I)[B", (void*)onSaveInstanceState_native },
|
||||||
{ "onPauseNative", "(I)V", (void*)onPause_native },
|
{ "onPauseNative", "(I)V", (void*)onPause_native },
|
||||||
{ "onStopNative", "(I)V", (void*)onStop_native },
|
{ "onStopNative", "(I)V", (void*)onStop_native },
|
||||||
|
{ "onConfigurationChangedNative", "(I)V", (void*)onConfigurationChanged_native },
|
||||||
{ "onLowMemoryNative", "(I)V", (void*)onLowMemory_native },
|
{ "onLowMemoryNative", "(I)V", (void*)onLowMemory_native },
|
||||||
{ "onWindowFocusChangedNative", "(IZ)V", (void*)onWindowFocusChanged_native },
|
{ "onWindowFocusChangedNative", "(IZ)V", (void*)onWindowFocusChanged_native },
|
||||||
{ "onSurfaceCreatedNative", "(ILandroid/view/Surface;)V", (void*)onSurfaceCreated_native },
|
{ "onSurfaceCreatedNative", "(ILandroid/view/Surface;)V", (void*)onSurfaceCreated_native },
|
||||||
|
118
core/jni/android_content_res_Configuration.cpp
Normal file
118
core/jni/android_content_res_Configuration.cpp
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010, The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_TAG "Configuration"
|
||||||
|
|
||||||
|
#include <utils/Log.h>
|
||||||
|
#include "utils/misc.h"
|
||||||
|
|
||||||
|
#include "jni.h"
|
||||||
|
#include <android_runtime/android_content_res_Configuration.h>
|
||||||
|
#include "android_runtime/AndroidRuntime.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
jclass clazz;
|
||||||
|
|
||||||
|
jfieldID mcc;
|
||||||
|
jfieldID mnc;
|
||||||
|
jfieldID locale;
|
||||||
|
jfieldID screenLayout;
|
||||||
|
jfieldID touchscreen;
|
||||||
|
jfieldID keyboard;
|
||||||
|
jfieldID keyboardHidden;
|
||||||
|
jfieldID hardKeyboardHidden;
|
||||||
|
jfieldID navigation;
|
||||||
|
jfieldID navigationHidden;
|
||||||
|
jfieldID orientation;
|
||||||
|
jfieldID uiMode;
|
||||||
|
} gConfigurationClassInfo;
|
||||||
|
|
||||||
|
void android_Configuration_getFromJava(
|
||||||
|
JNIEnv* env, jobject clazz, struct AConfiguration* out) {
|
||||||
|
out->mcc = env->GetIntField(clazz, gConfigurationClassInfo.mcc);
|
||||||
|
out->mnc = env->GetIntField(clazz, gConfigurationClassInfo.mnc);
|
||||||
|
out->screenLayout = env->GetIntField(clazz, gConfigurationClassInfo.screenLayout);
|
||||||
|
out->touchscreen = env->GetIntField(clazz, gConfigurationClassInfo.touchscreen);
|
||||||
|
out->keyboard = env->GetIntField(clazz, gConfigurationClassInfo.keyboard);
|
||||||
|
out->navigation = env->GetIntField(clazz, gConfigurationClassInfo.navigation);
|
||||||
|
|
||||||
|
out->inputFlags = env->GetIntField(clazz, gConfigurationClassInfo.keyboardHidden);
|
||||||
|
int hardKeyboardHidden = env->GetIntField(clazz, gConfigurationClassInfo.hardKeyboardHidden);
|
||||||
|
if (out->inputFlags == ACONFIGURATION_KEYSHIDDEN_NO
|
||||||
|
&& hardKeyboardHidden == 2) {
|
||||||
|
out->inputFlags = ACONFIGURATION_KEYSHIDDEN_SOFT;
|
||||||
|
}
|
||||||
|
out->inputFlags |= env->GetIntField(clazz, gConfigurationClassInfo.navigationHidden)
|
||||||
|
<< ResTable_config::SHIFT_NAVHIDDEN;
|
||||||
|
|
||||||
|
out->orientation = env->GetIntField(clazz, gConfigurationClassInfo.orientation);
|
||||||
|
out->uiMode = env->GetIntField(clazz, gConfigurationClassInfo.uiMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JNI registration.
|
||||||
|
*/
|
||||||
|
static JNINativeMethod gMethods[] = {
|
||||||
|
/* name, signature, funcPtr */
|
||||||
|
//{ "getObbInfo_native", "(Ljava/lang/String;Landroid/content/res/ObbInfo;)Z",
|
||||||
|
// (void*) android_content_res_ObbScanner_getObbInfo },
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FIND_CLASS(var, className) \
|
||||||
|
var = env->FindClass(className); \
|
||||||
|
LOG_FATAL_IF(! var, "Unable to find class " className); \
|
||||||
|
var = jclass(env->NewGlobalRef(var));
|
||||||
|
|
||||||
|
#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
|
||||||
|
var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
|
||||||
|
LOG_FATAL_IF(! var, "Unable to find field " fieldName);
|
||||||
|
|
||||||
|
int register_android_content_res_Configuration(JNIEnv* env)
|
||||||
|
{
|
||||||
|
FIND_CLASS(gConfigurationClassInfo.clazz, "android/content/res/Configuration");
|
||||||
|
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.mcc, gConfigurationClassInfo.clazz,
|
||||||
|
"mcc", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.mnc, gConfigurationClassInfo.clazz,
|
||||||
|
"mnc", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.locale, gConfigurationClassInfo.clazz,
|
||||||
|
"locale", "Ljava/util/Locale;");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.screenLayout, gConfigurationClassInfo.clazz,
|
||||||
|
"screenLayout", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.touchscreen, gConfigurationClassInfo.clazz,
|
||||||
|
"touchscreen", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.keyboard, gConfigurationClassInfo.clazz,
|
||||||
|
"keyboard", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.keyboardHidden, gConfigurationClassInfo.clazz,
|
||||||
|
"keyboardHidden", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.hardKeyboardHidden, gConfigurationClassInfo.clazz,
|
||||||
|
"hardKeyboardHidden", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.navigation, gConfigurationClassInfo.clazz,
|
||||||
|
"navigation", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.navigationHidden, gConfigurationClassInfo.clazz,
|
||||||
|
"navigationHidden", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.orientation, gConfigurationClassInfo.clazz,
|
||||||
|
"orientation", "I");
|
||||||
|
GET_FIELD_ID(gConfigurationClassInfo.uiMode, gConfigurationClassInfo.clazz,
|
||||||
|
"uiMode", "I");
|
||||||
|
|
||||||
|
return AndroidRuntime::registerNativeMethods(env, "android/content/res/Configuration", gMethods,
|
||||||
|
NELEM(gMethods));
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // namespace android
|
@ -1275,6 +1275,9 @@
|
|||||||
android:finishOnCloseSystemDialogs="true"
|
android:finishOnCloseSystemDialogs="true"
|
||||||
android:excludeFromRecents="true">
|
android:excludeFromRecents="true">
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity android:name="com.android.internal.app.PlatLogoActivity"
|
||||||
|
android:theme="@style/Theme.NoTitleBar.Fullscreen">
|
||||||
|
</activity>
|
||||||
<activity android:name="com.android.internal.app.DisableCarModeActivity"
|
<activity android:name="com.android.internal.app.DisableCarModeActivity"
|
||||||
android:theme="@style/Theme.NoDisplay"
|
android:theme="@style/Theme.NoDisplay"
|
||||||
android:excludeFromRecents="true">
|
android:excludeFromRecents="true">
|
||||||
|
BIN
core/res/res/drawable-nodpi/platlogo.jpg
Normal file
BIN
core/res/res/drawable-nodpi/platlogo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 100 KiB |
36
include/android_runtime/android_content_res_Configuration.h
Normal file
36
include/android_runtime/android_content_res_Configuration.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ANDROID_CONTENT_RES_CONFIGURATION_H
|
||||||
|
#define _ANDROID_CONTENT_RES_CONFIGURATION_H
|
||||||
|
|
||||||
|
#include <utils/ResourceTypes.h>
|
||||||
|
#include <android/configuration.h>
|
||||||
|
|
||||||
|
#include "jni.h"
|
||||||
|
|
||||||
|
struct AConfiguration : android::ResTable_config {
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
extern void android_Configuration_getFromJava(
|
||||||
|
JNIEnv* env, jobject clazz, struct AConfiguration* out);
|
||||||
|
|
||||||
|
} // namespace android
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _ANDROID_CONTENT_RES_CONFIGURATION_H
|
@ -129,6 +129,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setConfiguration(const ResTable_config& config, const char* locale = NULL);
|
void setConfiguration(const ResTable_config& config, const char* locale = NULL);
|
||||||
|
|
||||||
|
void getConfiguration(ResTable_config* outConfig) const;
|
||||||
|
|
||||||
typedef Asset::AccessMode AccessMode; // typing shortcut
|
typedef Asset::AccessMode AccessMode; // typing shortcut
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <android/configuration.h>
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
|
||||||
/** ********************************************************************
|
/** ********************************************************************
|
||||||
@ -822,25 +824,25 @@ struct ResTable_config
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ORIENTATION_ANY = 0x0000,
|
ORIENTATION_ANY = ACONFIGURATION_ORIENTATION_ANY,
|
||||||
ORIENTATION_PORT = 0x0001,
|
ORIENTATION_PORT = ACONFIGURATION_ORIENTATION_PORT,
|
||||||
ORIENTATION_LAND = 0x0002,
|
ORIENTATION_LAND = ACONFIGURATION_ORIENTATION_LAND,
|
||||||
ORIENTATION_SQUARE = 0x0003,
|
ORIENTATION_SQUARE = ACONFIGURATION_ORIENTATION_SQUARE,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TOUCHSCREEN_ANY = 0x0000,
|
TOUCHSCREEN_ANY = ACONFIGURATION_TOUCHSCREEN_ANY,
|
||||||
TOUCHSCREEN_NOTOUCH = 0x0001,
|
TOUCHSCREEN_NOTOUCH = ACONFIGURATION_TOUCHSCREEN_NOTOUCH,
|
||||||
TOUCHSCREEN_STYLUS = 0x0002,
|
TOUCHSCREEN_STYLUS = ACONFIGURATION_TOUCHSCREEN_STYLUS,
|
||||||
TOUCHSCREEN_FINGER = 0x0003,
|
TOUCHSCREEN_FINGER = ACONFIGURATION_TOUCHSCREEN_FINGER,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
DENSITY_DEFAULT = 0,
|
DENSITY_DEFAULT = ACONFIGURATION_DENSITY_DEFAULT,
|
||||||
DENSITY_LOW = 120,
|
DENSITY_LOW = ACONFIGURATION_DENSITY_LOW,
|
||||||
DENSITY_MEDIUM = 160,
|
DENSITY_MEDIUM = ACONFIGURATION_DENSITY_MEDIUM,
|
||||||
DENSITY_HIGH = 240,
|
DENSITY_HIGH = ACONFIGURATION_DENSITY_HIGH,
|
||||||
DENSITY_NONE = 0xffff
|
DENSITY_NONE = ACONFIGURATION_DENSITY_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
union {
|
union {
|
||||||
@ -853,33 +855,34 @@ struct ResTable_config
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
KEYBOARD_ANY = 0x0000,
|
KEYBOARD_ANY = ACONFIGURATION_KEYBOARD_ANY,
|
||||||
KEYBOARD_NOKEYS = 0x0001,
|
KEYBOARD_NOKEYS = ACONFIGURATION_KEYBOARD_NOKEYS,
|
||||||
KEYBOARD_QWERTY = 0x0002,
|
KEYBOARD_QWERTY = ACONFIGURATION_KEYBOARD_QWERTY,
|
||||||
KEYBOARD_12KEY = 0x0003,
|
KEYBOARD_12KEY = ACONFIGURATION_KEYBOARD_12KEY,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NAVIGATION_ANY = 0x0000,
|
NAVIGATION_ANY = ACONFIGURATION_NAVIGATION_ANY,
|
||||||
NAVIGATION_NONAV = 0x0001,
|
NAVIGATION_NONAV = ACONFIGURATION_NAVIGATION_NONAV,
|
||||||
NAVIGATION_DPAD = 0x0002,
|
NAVIGATION_DPAD = ACONFIGURATION_NAVIGATION_DPAD,
|
||||||
NAVIGATION_TRACKBALL = 0x0003,
|
NAVIGATION_TRACKBALL = ACONFIGURATION_NAVIGATION_TRACKBALL,
|
||||||
NAVIGATION_WHEEL = 0x0004,
|
NAVIGATION_WHEEL = ACONFIGURATION_NAVIGATION_WHEEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MASK_KEYSHIDDEN = 0x0003,
|
MASK_KEYSHIDDEN = 0x0003,
|
||||||
KEYSHIDDEN_ANY = 0x0000,
|
KEYSHIDDEN_ANY = ACONFIGURATION_KEYSHIDDEN_ANY,
|
||||||
KEYSHIDDEN_NO = 0x0001,
|
KEYSHIDDEN_NO = ACONFIGURATION_KEYSHIDDEN_NO,
|
||||||
KEYSHIDDEN_YES = 0x0002,
|
KEYSHIDDEN_YES = ACONFIGURATION_KEYSHIDDEN_YES,
|
||||||
KEYSHIDDEN_SOFT = 0x0003,
|
KEYSHIDDEN_SOFT = ACONFIGURATION_KEYSHIDDEN_SOFT,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MASK_NAVHIDDEN = 0x000c,
|
MASK_NAVHIDDEN = 0x000c,
|
||||||
NAVHIDDEN_ANY = 0x0000,
|
SHIFT_NAVHIDDEN = 2,
|
||||||
NAVHIDDEN_NO = 0x0004,
|
NAVHIDDEN_ANY = ACONFIGURATION_NAVHIDDEN_ANY << SHIFT_NAVHIDDEN,
|
||||||
NAVHIDDEN_YES = 0x0008,
|
NAVHIDDEN_NO = ACONFIGURATION_NAVHIDDEN_NO << SHIFT_NAVHIDDEN,
|
||||||
|
NAVHIDDEN_YES = ACONFIGURATION_NAVHIDDEN_YES << SHIFT_NAVHIDDEN,
|
||||||
};
|
};
|
||||||
|
|
||||||
union {
|
union {
|
||||||
@ -929,32 +932,34 @@ struct ResTable_config
|
|||||||
enum {
|
enum {
|
||||||
// screenLayout bits for screen size class.
|
// screenLayout bits for screen size class.
|
||||||
MASK_SCREENSIZE = 0x0f,
|
MASK_SCREENSIZE = 0x0f,
|
||||||
SCREENSIZE_ANY = 0x00,
|
SCREENSIZE_ANY = ACONFIGURATION_SCREENSIZE_ANY,
|
||||||
SCREENSIZE_SMALL = 0x01,
|
SCREENSIZE_SMALL = ACONFIGURATION_SCREENSIZE_SMALL,
|
||||||
SCREENSIZE_NORMAL = 0x02,
|
SCREENSIZE_NORMAL = ACONFIGURATION_SCREENSIZE_NORMAL,
|
||||||
SCREENSIZE_LARGE = 0x03,
|
SCREENSIZE_LARGE = ACONFIGURATION_SCREENSIZE_LARGE,
|
||||||
SCREENSIZE_XLARGE = 0x04,
|
SCREENSIZE_XLARGE = ACONFIGURATION_SCREENSIZE_XLARGE,
|
||||||
|
|
||||||
// screenLayout bits for wide/long screen variation.
|
// screenLayout bits for wide/long screen variation.
|
||||||
MASK_SCREENLONG = 0x30,
|
MASK_SCREENLONG = 0x30,
|
||||||
SCREENLONG_ANY = 0x00,
|
SHIFT_SCREENLONG = 4,
|
||||||
SCREENLONG_NO = 0x10,
|
SCREENLONG_ANY = ACONFIGURATION_SCREENLONG_ANY << SHIFT_SCREENLONG,
|
||||||
SCREENLONG_YES = 0x20,
|
SCREENLONG_NO = ACONFIGURATION_SCREENLONG_NO << SHIFT_SCREENLONG,
|
||||||
|
SCREENLONG_YES = ACONFIGURATION_SCREENLONG_YES << SHIFT_SCREENLONG,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
// uiMode bits for the mode type.
|
// uiMode bits for the mode type.
|
||||||
MASK_UI_MODE_TYPE = 0x0f,
|
MASK_UI_MODE_TYPE = 0x0f,
|
||||||
UI_MODE_TYPE_ANY = 0x00,
|
UI_MODE_TYPE_ANY = ACONFIGURATION_UI_MODE_TYPE_ANY,
|
||||||
UI_MODE_TYPE_NORMAL = 0x01,
|
UI_MODE_TYPE_NORMAL = ACONFIGURATION_UI_MODE_TYPE_NORMAL,
|
||||||
UI_MODE_TYPE_DESK = 0x02,
|
UI_MODE_TYPE_DESK = ACONFIGURATION_UI_MODE_TYPE_DESK,
|
||||||
UI_MODE_TYPE_CAR = 0x03,
|
UI_MODE_TYPE_CAR = ACONFIGURATION_UI_MODE_TYPE_CAR,
|
||||||
|
|
||||||
// uiMode bits for the night switch.
|
// uiMode bits for the night switch.
|
||||||
MASK_UI_MODE_NIGHT = 0x30,
|
MASK_UI_MODE_NIGHT = 0x30,
|
||||||
UI_MODE_NIGHT_ANY = 0x00,
|
SHIFT_UI_MODE_NIGHT = 4,
|
||||||
UI_MODE_NIGHT_NO = 0x10,
|
UI_MODE_NIGHT_ANY = ACONFIGURATION_UI_MODE_NIGHT_ANY << SHIFT_UI_MODE_NIGHT,
|
||||||
UI_MODE_NIGHT_YES = 0x20,
|
UI_MODE_NIGHT_NO = ACONFIGURATION_UI_MODE_NIGHT_NO << SHIFT_UI_MODE_NIGHT,
|
||||||
|
UI_MODE_NIGHT_YES = ACONFIGURATION_UI_MODE_NIGHT_YES << SHIFT_UI_MODE_NIGHT,
|
||||||
};
|
};
|
||||||
|
|
||||||
union {
|
union {
|
||||||
@ -1023,19 +1028,19 @@ struct ResTable_config
|
|||||||
// match the corresponding ones in android.content.pm.ActivityInfo and
|
// match the corresponding ones in android.content.pm.ActivityInfo and
|
||||||
// attrs_manifest.xml.
|
// attrs_manifest.xml.
|
||||||
enum {
|
enum {
|
||||||
CONFIG_MCC = 0x0001,
|
CONFIG_MCC = ACONFIGURATION_MCC,
|
||||||
CONFIG_MNC = 0x0002,
|
CONFIG_MNC = ACONFIGURATION_MCC,
|
||||||
CONFIG_LOCALE = 0x0004,
|
CONFIG_LOCALE = ACONFIGURATION_LOCALE,
|
||||||
CONFIG_TOUCHSCREEN = 0x0008,
|
CONFIG_TOUCHSCREEN = ACONFIGURATION_TOUCHSCREEN,
|
||||||
CONFIG_KEYBOARD = 0x0010,
|
CONFIG_KEYBOARD = ACONFIGURATION_KEYBOARD,
|
||||||
CONFIG_KEYBOARD_HIDDEN = 0x0020,
|
CONFIG_KEYBOARD_HIDDEN = ACONFIGURATION_KEYBOARD_HIDDEN,
|
||||||
CONFIG_NAVIGATION = 0x0040,
|
CONFIG_NAVIGATION = ACONFIGURATION_NAVIGATION,
|
||||||
CONFIG_ORIENTATION = 0x0080,
|
CONFIG_ORIENTATION = ACONFIGURATION_ORIENTATION,
|
||||||
CONFIG_DENSITY = 0x0100,
|
CONFIG_DENSITY = ACONFIGURATION_DENSITY,
|
||||||
CONFIG_SCREEN_SIZE = 0x0200,
|
CONFIG_SCREEN_SIZE = ACONFIGURATION_SCREEN_SIZE,
|
||||||
CONFIG_VERSION = 0x0400,
|
CONFIG_VERSION = ACONFIGURATION_VERSION,
|
||||||
CONFIG_SCREEN_LAYOUT = 0x0800,
|
CONFIG_SCREEN_LAYOUT = ACONFIGURATION_SCREEN_LAYOUT,
|
||||||
CONFIG_UI_MODE = 0x1000
|
CONFIG_UI_MODE = ACONFIGURATION_UI_MODE
|
||||||
};
|
};
|
||||||
|
|
||||||
// Compare two configuration, returning CONFIG_* flags set for each value
|
// Compare two configuration, returning CONFIG_* flags set for each value
|
||||||
|
@ -232,6 +232,12 @@ void AssetManager::setConfiguration(const ResTable_config& config, const char* l
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssetManager::getConfiguration(ResTable_config* outConfig) const
|
||||||
|
{
|
||||||
|
AutoMutex _l(mLock);
|
||||||
|
*outConfig = *mConfig;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Open an asset.
|
* Open an asset.
|
||||||
*
|
*
|
||||||
|
@ -7,6 +7,7 @@ include $(CLEAR_VARS)
|
|||||||
#
|
#
|
||||||
LOCAL_SRC_FILES:= \
|
LOCAL_SRC_FILES:= \
|
||||||
asset_manager.cpp \
|
asset_manager.cpp \
|
||||||
|
configuration.cpp \
|
||||||
input.cpp \
|
input.cpp \
|
||||||
looper.cpp \
|
looper.cpp \
|
||||||
native_activity.cpp \
|
native_activity.cpp \
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#define LOG_TAG "NAsset"
|
#define LOG_TAG "NAsset"
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
|
|
||||||
#include <android/asset_manager.h>
|
#include <android/asset_manager_jni.h>
|
||||||
#include <utils/AssetManager.h>
|
#include <utils/AssetManager.h>
|
||||||
#include <utils/AssetDir.h>
|
#include <utils/AssetDir.h>
|
||||||
#include <utils/Asset.h>
|
#include <utils/Asset.h>
|
||||||
|
202
native/android/configuration.cpp
Normal file
202
native/android/configuration.cpp
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LOG_TAG "Configuration"
|
||||||
|
#include <utils/Log.h>
|
||||||
|
|
||||||
|
#include <utils/AssetManager.h>
|
||||||
|
|
||||||
|
#include <android_runtime/android_content_res_Configuration.h>
|
||||||
|
|
||||||
|
using namespace android;
|
||||||
|
|
||||||
|
AConfiguration* AConfiguration_new() {
|
||||||
|
AConfiguration* config = new AConfiguration;
|
||||||
|
memset(config, 0, sizeof(AConfiguration));
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_delete(AConfiguration* config) {
|
||||||
|
delete config;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am) {
|
||||||
|
((AssetManager*)am)->getConfiguration(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_copy(AConfiguration* dest, AConfiguration* src) {
|
||||||
|
*dest = *src;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getMcc(AConfiguration* config) {
|
||||||
|
return config->mcc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getMnc(AConfiguration* config) {
|
||||||
|
return config->mnc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_getLanguage(AConfiguration* config, char* outLanguage) {
|
||||||
|
outLanguage[0] = config->language[0];
|
||||||
|
outLanguage[1] = config->language[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_getCountry(AConfiguration* config, char* outCountry) {
|
||||||
|
outCountry[0] = config->country[0];
|
||||||
|
outCountry[1] = config->country[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getOrientation(AConfiguration* config) {
|
||||||
|
return config->orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getTouchscreen(AConfiguration* config) {
|
||||||
|
return config->touchscreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getDensity(AConfiguration* config) {
|
||||||
|
return config->density;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getKeyboard(AConfiguration* config) {
|
||||||
|
return config->keyboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getNavigation(AConfiguration* config) {
|
||||||
|
return config->navigation;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getKeysHidden(AConfiguration* config) {
|
||||||
|
return config->inputFlags&ResTable_config::MASK_KEYSHIDDEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getNavHidden(AConfiguration* config) {
|
||||||
|
return (config->inputFlags&ResTable_config::MASK_NAVHIDDEN)
|
||||||
|
>> ResTable_config::SHIFT_NAVHIDDEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getSdkVersion(AConfiguration* config) {
|
||||||
|
return config->sdkVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getScreenSize(AConfiguration* config) {
|
||||||
|
return config->screenLayout&ResTable_config::MASK_SCREENSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getScreenLong(AConfiguration* config) {
|
||||||
|
return (config->screenLayout&ResTable_config::MASK_SCREENLONG)
|
||||||
|
>> ResTable_config::SHIFT_SCREENLONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getUiModeType(AConfiguration* config) {
|
||||||
|
return config->uiMode&ResTable_config::MASK_UI_MODE_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_getUiModeNight(AConfiguration* config) {
|
||||||
|
return (config->uiMode&ResTable_config::MASK_UI_MODE_NIGHT)
|
||||||
|
>> ResTable_config::SHIFT_UI_MODE_NIGHT;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AConfiguration_setMcc(AConfiguration* config, int32_t mcc) {
|
||||||
|
config->mcc = mcc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setMnc(AConfiguration* config, int32_t mnc) {
|
||||||
|
config->mnc = mnc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setLanguage(AConfiguration* config, const char* language) {
|
||||||
|
config->language[0] = language[0];
|
||||||
|
config->language[1] = language[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setCountry(AConfiguration* config, const char* country) {
|
||||||
|
config->country[0] = country[0];
|
||||||
|
config->country[1] = country[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setOrientation(AConfiguration* config, int32_t orientation) {
|
||||||
|
config->orientation = orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setTouchscreen(AConfiguration* config, int32_t touchscreen) {
|
||||||
|
config->touchscreen = touchscreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setDensity(AConfiguration* config, int32_t density) {
|
||||||
|
config->density = density;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setKeyboard(AConfiguration* config, int32_t keyboard) {
|
||||||
|
config->keyboard = keyboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setNavigation(AConfiguration* config, int32_t navigation) {
|
||||||
|
config->navigation = navigation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setKeysHidden(AConfiguration* config, int32_t keysHidden) {
|
||||||
|
config->inputFlags = (config->inputFlags&~ResTable_config::MASK_KEYSHIDDEN)
|
||||||
|
| (keysHidden&ResTable_config::MASK_KEYSHIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setNavHidden(AConfiguration* config, int32_t navHidden) {
|
||||||
|
config->inputFlags = (config->inputFlags&~ResTable_config::MASK_NAVHIDDEN)
|
||||||
|
| ((navHidden<<ResTable_config::SHIFT_NAVHIDDEN)&ResTable_config::MASK_NAVHIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setSdkVersion(AConfiguration* config, int32_t sdkVersion) {
|
||||||
|
config->sdkVersion = sdkVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setScreenSize(AConfiguration* config, int32_t screenSize) {
|
||||||
|
config->screenLayout = (config->screenLayout&~ResTable_config::MASK_SCREENSIZE)
|
||||||
|
| (screenSize&ResTable_config::MASK_SCREENSIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setScreenLong(AConfiguration* config, int32_t screenLong) {
|
||||||
|
config->screenLayout = (config->screenLayout&~ResTable_config::MASK_SCREENLONG)
|
||||||
|
| ((screenLong<<ResTable_config::SHIFT_SCREENLONG)&ResTable_config::MASK_SCREENLONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setUiModeType(AConfiguration* config, int32_t uiModeType) {
|
||||||
|
config->uiMode = (config->uiMode&~ResTable_config::MASK_UI_MODE_TYPE)
|
||||||
|
| (uiModeType&ResTable_config::MASK_UI_MODE_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AConfiguration_setUiModeNight(AConfiguration* config, int32_t uiModeNight) {
|
||||||
|
config->uiMode = (config->uiMode&~ResTable_config::MASK_UI_MODE_NIGHT)
|
||||||
|
| ((uiModeNight<<ResTable_config::SHIFT_UI_MODE_NIGHT)&ResTable_config::MASK_UI_MODE_NIGHT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
int32_t AConfiguration_diff(AConfiguration* config1, AConfiguration* config2) {
|
||||||
|
return (config1->diff(*config2));
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_match(AConfiguration* base, AConfiguration* requested) {
|
||||||
|
return base->match(*requested);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
|
||||||
|
AConfiguration* requested) {
|
||||||
|
return base->isBetterThan(*test, requested);
|
||||||
|
}
|
55
native/copy-to-ndk.sh
Normal file
55
native/copy-to-ndk.sh
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Take care of copying current header files over to the correct
|
||||||
|
# location in the NDK.
|
||||||
|
|
||||||
|
copyndkheaders() {
|
||||||
|
local CURR_PLATFORM=android-9
|
||||||
|
local ALL_PLATFORMS="$CURR_PLATFORM android-8 android-5 android-4 android-3"
|
||||||
|
|
||||||
|
local SRC_HEADERS=$ANDROID_BUILD_TOP/frameworks/base/native/include/android
|
||||||
|
local NDK_PLATFORMS=$ANDROID_BUILD_TOP/development/ndk/platforms
|
||||||
|
local DST_HEADERS=$NDK_PLATFORMS/$CURR_PLATFORM
|
||||||
|
|
||||||
|
local SRC_LIB_ANDROID=$ANDROID_PRODUCT_OUT/system/lib/libandroid.so
|
||||||
|
local DST_LIB_ANDROID=$NDK_PLATFORMS/$CURR_PLATFORM/arch-arm/usr/lib/libandroid.so
|
||||||
|
|
||||||
|
local didsomething=""
|
||||||
|
|
||||||
|
#echo "SRC_HEADERS: $SRC_HEADERS"
|
||||||
|
|
||||||
|
for i in $(cd $SRC_HEADERS; ls *.h); do
|
||||||
|
local src=$SRC_HEADERS/$i
|
||||||
|
local changed=""
|
||||||
|
for j in $ALL_PLATFORMS; do
|
||||||
|
local dst=$NDK_PLATFORMS/$j/arch-arm/usr/include/android/$i
|
||||||
|
if [ "$changed" == "" -a -e $dst ]; then
|
||||||
|
#echo "Exists: $dst"
|
||||||
|
if diff $src $dst >/dev/null; then
|
||||||
|
echo "$i: has not changed from $j" >/dev/null
|
||||||
|
changed="false"
|
||||||
|
else
|
||||||
|
changed="true"
|
||||||
|
echo "$i: has changed from $j" >/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "$changed" == "true" -o "$changed" == "" ]; then
|
||||||
|
echo "Updating: $i"
|
||||||
|
cp $src $NDK_PLATFORMS/$CURR_PLATFORM/arch-arm/usr/include/android/$i
|
||||||
|
didsomething="true"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if diff $SRC_LIB_ANDROID $DST_LIB_ANDROID >/dev/null; then
|
||||||
|
echo "libandroid.so: has not changed" >/dev/null
|
||||||
|
else
|
||||||
|
echo "Updating: $DST_LIB_ANDROID"
|
||||||
|
cp $SRC_LIB_ANDROID $DST_LIB_ANDROID
|
||||||
|
didsomething="true"
|
||||||
|
fi
|
||||||
|
if [ "$didsomething" != "" ]; then
|
||||||
|
echo "Headers changed... rebuilding platforms."
|
||||||
|
sh $ANDROID_BUILD_TOP/ndk/build/tools/build-platforms.sh
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
copyndkheaders
|
@ -18,8 +18,6 @@
|
|||||||
#ifndef ANDROID_ASSET_MANAGER_H
|
#ifndef ANDROID_ASSET_MANAGER_H
|
||||||
#define ANDROID_ASSET_MANAGER_H
|
#define ANDROID_ASSET_MANAGER_H
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -42,14 +40,6 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a Dalvik AssetManager object, obtain the corresponding native AAssetManager
|
|
||||||
* object. Note that the caller is responsible for obtaining and holding a VM reference
|
|
||||||
* to the jobject to prevent its being garbage collected while the native object is
|
|
||||||
* in use.
|
|
||||||
*/
|
|
||||||
AAssetManager* AAssetManager_fromJava(JNIEnv* env, jobject assetManager);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the named directory within the asset hierarchy. The directory can then
|
* Open the named directory within the asset hierarchy. The directory can then
|
||||||
* be inspected with the AAssetDir functions. To open the top-level directory,
|
* be inspected with the AAssetDir functions. To open the top-level directory,
|
||||||
|
40
native/include/android/asset_manager_jni.h
Normal file
40
native/include/android/asset_manager_jni.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ANDROID_ASSET_MANAGER_JNI_H
|
||||||
|
#define ANDROID_ASSET_MANAGER_JNI_H
|
||||||
|
|
||||||
|
#include <android/asset_manager.h>
|
||||||
|
#include <jni.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a Dalvik AssetManager object, obtain the corresponding native AAssetManager
|
||||||
|
* object. Note that the caller is responsible for obtaining and holding a VM reference
|
||||||
|
* to the jobject to prevent its being garbage collected while the native object is
|
||||||
|
* in use.
|
||||||
|
*/
|
||||||
|
AAssetManager* AAssetManager_fromJava(JNIEnv* env, jobject assetManager);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ANDROID_ASSET_MANAGER_JNI_H
|
319
native/include/android/configuration.h
Normal file
319
native/include/android/configuration.h
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ANDROID_CONFIGURATION_H
|
||||||
|
#define ANDROID_CONFIGURATION_H
|
||||||
|
|
||||||
|
#include <android/asset_manager.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct AConfiguration;
|
||||||
|
typedef struct AConfiguration AConfiguration;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ACONFIGURATION_ORIENTATION_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_ORIENTATION_PORT = 0x0001,
|
||||||
|
ACONFIGURATION_ORIENTATION_LAND = 0x0002,
|
||||||
|
ACONFIGURATION_ORIENTATION_SQUARE = 0x0003,
|
||||||
|
|
||||||
|
ACONFIGURATION_TOUCHSCREEN_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_TOUCHSCREEN_NOTOUCH = 0x0001,
|
||||||
|
ACONFIGURATION_TOUCHSCREEN_STYLUS = 0x0002,
|
||||||
|
ACONFIGURATION_TOUCHSCREEN_FINGER = 0x0003,
|
||||||
|
|
||||||
|
ACONFIGURATION_DENSITY_DEFAULT = 0,
|
||||||
|
ACONFIGURATION_DENSITY_LOW = 120,
|
||||||
|
ACONFIGURATION_DENSITY_MEDIUM = 160,
|
||||||
|
ACONFIGURATION_DENSITY_HIGH = 240,
|
||||||
|
ACONFIGURATION_DENSITY_NONE = 0xffff,
|
||||||
|
|
||||||
|
ACONFIGURATION_KEYBOARD_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_KEYBOARD_NOKEYS = 0x0001,
|
||||||
|
ACONFIGURATION_KEYBOARD_QWERTY = 0x0002,
|
||||||
|
ACONFIGURATION_KEYBOARD_12KEY = 0x0003,
|
||||||
|
|
||||||
|
ACONFIGURATION_NAVIGATION_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_NAVIGATION_NONAV = 0x0001,
|
||||||
|
ACONFIGURATION_NAVIGATION_DPAD = 0x0002,
|
||||||
|
ACONFIGURATION_NAVIGATION_TRACKBALL = 0x0003,
|
||||||
|
ACONFIGURATION_NAVIGATION_WHEEL = 0x0004,
|
||||||
|
|
||||||
|
ACONFIGURATION_KEYSHIDDEN_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_KEYSHIDDEN_NO = 0x0001,
|
||||||
|
ACONFIGURATION_KEYSHIDDEN_YES = 0x0002,
|
||||||
|
ACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003,
|
||||||
|
|
||||||
|
ACONFIGURATION_NAVHIDDEN_ANY = 0x0000,
|
||||||
|
ACONFIGURATION_NAVHIDDEN_NO = 0x0001,
|
||||||
|
ACONFIGURATION_NAVHIDDEN_YES = 0x0002,
|
||||||
|
|
||||||
|
ACONFIGURATION_SCREENSIZE_ANY = 0x00,
|
||||||
|
ACONFIGURATION_SCREENSIZE_SMALL = 0x01,
|
||||||
|
ACONFIGURATION_SCREENSIZE_NORMAL = 0x02,
|
||||||
|
ACONFIGURATION_SCREENSIZE_LARGE = 0x03,
|
||||||
|
ACONFIGURATION_SCREENSIZE_XLARGE = 0x04,
|
||||||
|
|
||||||
|
ACONFIGURATION_SCREENLONG_ANY = 0x00,
|
||||||
|
ACONFIGURATION_SCREENLONG_NO = 0x1,
|
||||||
|
ACONFIGURATION_SCREENLONG_YES = 0x2,
|
||||||
|
|
||||||
|
ACONFIGURATION_UI_MODE_TYPE_ANY = 0x00,
|
||||||
|
ACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01,
|
||||||
|
ACONFIGURATION_UI_MODE_TYPE_DESK = 0x02,
|
||||||
|
ACONFIGURATION_UI_MODE_TYPE_CAR = 0x03,
|
||||||
|
|
||||||
|
ACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00,
|
||||||
|
ACONFIGURATION_UI_MODE_NIGHT_NO = 0x10,
|
||||||
|
ACONFIGURATION_UI_MODE_NIGHT_YES = 0x20,
|
||||||
|
|
||||||
|
ACONFIGURATION_MCC = 0x0001,
|
||||||
|
ACONFIGURATION_MNC = 0x0002,
|
||||||
|
ACONFIGURATION_LOCALE = 0x0004,
|
||||||
|
ACONFIGURATION_TOUCHSCREEN = 0x0008,
|
||||||
|
ACONFIGURATION_KEYBOARD = 0x0010,
|
||||||
|
ACONFIGURATION_KEYBOARD_HIDDEN = 0x0020,
|
||||||
|
ACONFIGURATION_NAVIGATION = 0x0040,
|
||||||
|
ACONFIGURATION_ORIENTATION = 0x0080,
|
||||||
|
ACONFIGURATION_DENSITY = 0x0100,
|
||||||
|
ACONFIGURATION_SCREEN_SIZE = 0x0200,
|
||||||
|
ACONFIGURATION_VERSION = 0x0400,
|
||||||
|
ACONFIGURATION_SCREEN_LAYOUT = 0x0800,
|
||||||
|
ACONFIGURATION_UI_MODE = 0x1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new AConfiguration, initialized with no values set.
|
||||||
|
*/
|
||||||
|
AConfiguration* AConfiguration_new();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free an AConfiguration that was previously created with
|
||||||
|
* AConfiguration_new().
|
||||||
|
*/
|
||||||
|
void AConfiguration_delete(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and return a new AConfiguration based on the current configuration in
|
||||||
|
* use in the given AssetManager.
|
||||||
|
*/
|
||||||
|
void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy the contents of 'src' to 'dest'.
|
||||||
|
*/
|
||||||
|
void AConfiguration_copy(AConfiguration* dest, AConfiguration* src);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current MCC set in the configuration. 0 if not set.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getMcc(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current MCC in the configuration. 0 to clear.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setMcc(AConfiguration* config, int32_t mcc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current MNC set in the configuration. 0 if not set.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getMnc(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current MNC in the configuration. 0 to clear.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setMnc(AConfiguration* config, int32_t mnc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current language code set in the configuration. The output will
|
||||||
|
* be filled with an array of two characters. They are not 0-terminated. If
|
||||||
|
* a language is not set, they will be 0.
|
||||||
|
*/
|
||||||
|
void AConfiguration_getLanguage(AConfiguration* config, char* outLanguage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current language code in the configuration, from the first two
|
||||||
|
* characters in the string.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setLanguage(AConfiguration* config, const char* language);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current country code set in the configuration. The output will
|
||||||
|
* be filled with an array of two characters. They are not 0-terminated. If
|
||||||
|
* a country is not set, they will be 0.
|
||||||
|
*/
|
||||||
|
void AConfiguration_getCountry(AConfiguration* config, char* outCountry);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current country code in the configuration, from the first two
|
||||||
|
* characters in the string.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setCountry(AConfiguration* config, const char* country);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_ORIENTATION_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getOrientation(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current orientation in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setOrientation(AConfiguration* config, int32_t orientation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_TOUCHSCREEN_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getTouchscreen(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current touchscreen in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setTouchscreen(AConfiguration* config, int32_t touchscreen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_DENSITY_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getDensity(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current density in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setDensity(AConfiguration* config, int32_t density);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_KEYBOARD_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getKeyboard(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current keyboard in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setKeyboard(AConfiguration* config, int32_t keyboard);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_NAVIGATION_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getNavigation(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current navigation in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setNavigation(AConfiguration* config, int32_t navigation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_KEYSHIDDEN_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getKeysHidden(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current keys hidden in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setKeysHidden(AConfiguration* config, int32_t keysHidden);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_NAVHIDDEN_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getNavHidden(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current nav hidden in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setNavHidden(AConfiguration* config, int32_t navHidden);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current SDK (API) version set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getSdkVersion(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current SDK version in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setSdkVersion(AConfiguration* config, int32_t sdkVersion);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_SCREENSIZE_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getScreenSize(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current screen size in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setScreenSize(AConfiguration* config, int32_t screenSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_SCREENLONG_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getScreenLong(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current screen long in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setScreenLong(AConfiguration* config, int32_t screenLong);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_UI_MODE_TYPE_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getUiModeType(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current UI mode type in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setUiModeType(AConfiguration* config, int32_t uiModeType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current ACONFIGURATION_UI_MODE_NIGHT_* set in the configuration.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_getUiModeNight(AConfiguration* config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current UI mode night in the configuration.
|
||||||
|
*/
|
||||||
|
void AConfiguration_setUiModeNight(AConfiguration* config, int32_t uiModeNight);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a diff between two configurations. Returns a bit mask of
|
||||||
|
* ACONFIGURATION_* constants, each bit set meaning that configuration element
|
||||||
|
* is different between them.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_diff(AConfiguration* config1, AConfiguration* config2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether 'base' is a valid configuration for use within the
|
||||||
|
* environment 'requested'. Returns 0 if there are any values in 'base'
|
||||||
|
* that conflict with 'requested'. Returns 1 if it does not conflict.
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_match(AConfiguration* base, AConfiguration* requested);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the configuration in 'test' is better than the existing
|
||||||
|
* configuration in 'base'. If 'requested' is non-NULL, this decision is based
|
||||||
|
* on the overall configuration given there. If it is NULL, this decision is
|
||||||
|
* simply based on which configuration is more specific. Returns non-0 if
|
||||||
|
* 'test' is better than 'base'.
|
||||||
|
*
|
||||||
|
* This assumes you have already filtered the configurations with
|
||||||
|
* AConfiguration_match().
|
||||||
|
*/
|
||||||
|
int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
|
||||||
|
AConfiguration* requested);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ANDROID_CONFIGURATION_H
|
@ -196,6 +196,12 @@ typedef struct ANativeActivityCallbacks {
|
|||||||
*/
|
*/
|
||||||
void (*onContentRectChanged)(ANativeActivity* activity, const ARect* rect);
|
void (*onContentRectChanged)(ANativeActivity* activity, const ARect* rect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current device AConfiguration has changed. The new configuration can
|
||||||
|
* be retrieved from assetManager.
|
||||||
|
*/
|
||||||
|
void (*onConfigurationChanged)(ANativeActivity* activity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The system is running low on memory. Use this callback to release
|
* The system is running low on memory. Use this callback to release
|
||||||
* resources you do not need, to help the system avoid killing more
|
* resources you do not need, to help the system avoid killing more
|
||||||
@ -208,7 +214,9 @@ typedef struct ANativeActivityCallbacks {
|
|||||||
* This is the function that must be in the native code to instantiate the
|
* This is the function that must be in the native code to instantiate the
|
||||||
* application's native activity. It is called with the activity instance (see
|
* application's native activity. It is called with the activity instance (see
|
||||||
* above); if the code is being instantiated from a previously saved instance,
|
* above); if the code is being instantiated from a previously saved instance,
|
||||||
* the savedState will be non-NULL and point to the saved data.
|
* the savedState will be non-NULL and point to the saved data. You must make
|
||||||
|
* any copy of this data you need -- it will be released after you return from
|
||||||
|
* this function.
|
||||||
*/
|
*/
|
||||||
typedef void ANativeActivity_createFunc(ANativeActivity* activity,
|
typedef void ANativeActivity_createFunc(ANativeActivity* activity,
|
||||||
void* savedState, size_t savedStateSize);
|
void* savedState, size_t savedStateSize);
|
||||||
|
@ -36,12 +36,23 @@ struct ANativeWindow;
|
|||||||
typedef struct ANativeWindow ANativeWindow;
|
typedef struct ANativeWindow ANativeWindow;
|
||||||
|
|
||||||
typedef struct ANativeWindow_Buffer {
|
typedef struct ANativeWindow_Buffer {
|
||||||
|
// The number of pixels that are show horizontally.
|
||||||
int32_t width;
|
int32_t width;
|
||||||
|
|
||||||
|
// The number of pixels that are shown vertically.
|
||||||
int32_t height;
|
int32_t height;
|
||||||
|
|
||||||
|
// The number of *pixels* that a line in the buffer takes in
|
||||||
|
// memory. This may be >= width.
|
||||||
int32_t stride;
|
int32_t stride;
|
||||||
|
|
||||||
|
// The format of the buffer. One of WINDOW_FORMAT_*
|
||||||
int32_t format;
|
int32_t format;
|
||||||
|
|
||||||
|
// The actual bits.
|
||||||
void* bits;
|
void* bits;
|
||||||
|
|
||||||
|
// Do not touch.
|
||||||
uint32_t reserved[6];
|
uint32_t reserved[6];
|
||||||
} ANativeWindow_Buffer;
|
} ANativeWindow_Buffer;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user