Remove Eclipse source in favor of Android Studio
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
|
@ -1,33 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Droidcast</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -1,4 +0,0 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,149 +0,0 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.reicast.emulator"
|
||||
android:versionCode="7"
|
||||
android:versionName="r7" >
|
||||
|
||||
<supports-screens
|
||||
android:anyDensity="true"
|
||||
android:largeScreens="true"
|
||||
android:normalScreens="true"
|
||||
android:smallScreens="true"
|
||||
android:xlargeScreens="true" />
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="9"
|
||||
android:targetSdkVersion="21" />
|
||||
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<uses-feature
|
||||
android:glEsVersion="0x00020000"
|
||||
android:required="true" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.microphone"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.gamepad"
|
||||
android:required="false"/>
|
||||
<uses-feature
|
||||
android:name="android.software.leanback"
|
||||
android:required="false" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme"
|
||||
android:banner="@drawable/ic_banner"
|
||||
android:logo="@drawable/ic_banner"
|
||||
android:hardwareAccelerated="true"
|
||||
android:isGame="true">
|
||||
|
||||
<meta-data
|
||||
android:name="xperiaplayoptimized_content"
|
||||
android:resource="@drawable/ic_xperia_play" />
|
||||
|
||||
<uses-library
|
||||
android:name="org.apache.http.legacy"
|
||||
android:required="false" />
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|navigation|screenSize|screenLayout|uiMode|keyboard|keyboardHidden"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="tv.ouya.intent.category.GAME" />
|
||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.GDI"
|
||||
android:scheme="file" />
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.gdi"
|
||||
android:scheme="file" />
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.CHD"
|
||||
android:scheme="file" />
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.chd"
|
||||
android:scheme="file" />
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.CDI"
|
||||
android:scheme="file" />
|
||||
<data
|
||||
android:host="*"
|
||||
android:mimeType="*/*"
|
||||
android:pathPattern=".*\\.cdi"
|
||||
android:scheme="file" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".GL2JNIActivity"
|
||||
android:configChanges="orientation|navigation|screenSize|screenLayout|uiMode|keyboard|keyboardHidden"
|
||||
android:screenOrientation="sensorLandscape"
|
||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="dc" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".GL2JNINative"
|
||||
android:configChanges="orientation|navigation|screenSize|screenLayout|uiMode|keyboard|keyboardHidden"
|
||||
android:screenOrientation="sensorLandscape"
|
||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="dc" />
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="sexplay" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.dropbox.client2.android.AuthActivity"
|
||||
android:configChanges="orientation|keyboard"
|
||||
android:launchMode="singleTask" >
|
||||
<intent-filter>
|
||||
<data android:scheme="db-7d7tw1t57sbzrj5" />
|
||||
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".config.EditVJoyActivity"
|
||||
android:configChanges="orientation|navigation|screenSize|screenLayout|uiMode|keyboard|keyboardHidden"
|
||||
android:screenOrientation="sensorLandscape"
|
||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -1 +0,0 @@
|
|||
0dba81b99abcf909937d6473bb7e5fc83bf33e6d
|
Before Width: | Height: | Size: 43 KiB |
|
@ -1,95 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="reicast" default="help">
|
||||
|
||||
<!-- The local.properties file is created and updated by the 'android' tool.
|
||||
It contains the path to the SDK. It should *NOT* be checked into
|
||||
Version Control Systems. -->
|
||||
<property file="local.properties" />
|
||||
|
||||
<!-- The ant.properties file can be created by you. It is only edited by the
|
||||
'android' tool to add properties to it.
|
||||
This is the place to change some Ant specific build properties.
|
||||
Here are some properties you may want to change/update:
|
||||
|
||||
source.dir
|
||||
The name of the source directory. Default is 'src'.
|
||||
out.dir
|
||||
The name of the output directory. Default is 'bin'.
|
||||
|
||||
For other overridable properties, look at the beginning of the rules
|
||||
files in the SDK, at tools/ant/build.xml
|
||||
|
||||
Properties related to the SDK location or the project target should
|
||||
be updated using the 'android' tool with the 'update' action.
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems.
|
||||
|
||||
-->
|
||||
<property file="ant.properties" />
|
||||
|
||||
<!-- if sdk.dir was not set from one of the property file, then
|
||||
get it from the ANDROID_HOME env var.
|
||||
This must be done before we load project.properties since
|
||||
the proguard config can use sdk.dir -->
|
||||
<property environment="env" />
|
||||
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
|
||||
<isset property="env.ANDROID_HOME" />
|
||||
</condition>
|
||||
<condition property="ndk.dir" value="${env.ANDROID_NDK}">
|
||||
<isset property="env.ANDROID_NDK" />
|
||||
</condition>
|
||||
|
||||
<!-- The project.properties file is created and updated by the 'android'
|
||||
tool, as well as ADT.
|
||||
|
||||
This contains project specific properties such as project target, and library
|
||||
dependencies. Lower level build properties are stored in ant.properties
|
||||
(or in .classpath for Eclipse projects).
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems. -->
|
||||
<loadproperties srcFile="project.properties" />
|
||||
|
||||
<!-- quick check on sdk.dir -->
|
||||
<fail
|
||||
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
|
||||
unless="sdk.dir"
|
||||
/>
|
||||
|
||||
<!--
|
||||
Import per project custom build rules if present at the root of the project.
|
||||
This is the place to put custom intermediary targets such as:
|
||||
-pre-build
|
||||
-pre-compile
|
||||
-post-compile (This is typically used for code obfuscation.
|
||||
Compiled code location: ${out.classes.absolute.dir}
|
||||
If this is not done in place, override ${out.dex.input.absolute.dir})
|
||||
-post-package
|
||||
-post-build
|
||||
-pre-clean
|
||||
-->
|
||||
<import file="custom_rules.xml" optional="true" />
|
||||
|
||||
<!-- Import the actual build file.
|
||||
|
||||
To customize existing targets, there are two options:
|
||||
- Customize only one target:
|
||||
- copy/paste the target into this file, *before* the
|
||||
<import> task.
|
||||
- customize it to your needs.
|
||||
- Customize the whole content of build.xml
|
||||
- copy/paste the content of the rules files (minus the top node)
|
||||
into this file, replacing the <import> task.
|
||||
- customize to your needs.
|
||||
|
||||
***********************
|
||||
****** IMPORTANT ******
|
||||
***********************
|
||||
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
||||
in order to avoid having your file be overridden by tools such as "android update project"
|
||||
-->
|
||||
<!-- version-tag: 1 -->
|
||||
<import file="${sdk.dir}/tools/ant/build.xml" />
|
||||
|
||||
</project>
|
|
@ -1,26 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="reicast-touchpad" default="help">
|
||||
<property environment="env" />
|
||||
<condition property="ndkbuildopt" value="-j${env.NUMBER_OF_PROCESSORS}" else="-j4">
|
||||
<isset property="env.NUMBER_OF_PROCESSORS" />
|
||||
</condition>
|
||||
<condition property="ndkbuildopt" value="${env.NDKBUILDOPT}">
|
||||
<isset property="env.NDKBUILDOPT" />
|
||||
</condition>
|
||||
<target name="-pre-build">
|
||||
<exec executable="${ndk.dir}/ndk-build.cmd" failonerror="true" osfamily="windows">
|
||||
<arg line="${ndkbuildopt}"/>
|
||||
</exec>
|
||||
<exec executable="${ndk.dir}/ndk-build" failonerror="true" osfamily="unix">
|
||||
<arg line="${ndkbuildopt}"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="clean" depends="android_rules.clean">
|
||||
<exec executable="${ndk.dir}/ndk-build.cmd" failonerror="true" osfamily="windows">
|
||||
<arg value="clean"/>
|
||||
</exec>
|
||||
<exec executable="${ndk.dir}/ndk-build" failonerror="true" osfamily="unix">
|
||||
<arg value="clean"/>
|
||||
</exec>
|
||||
</target>
|
||||
</project>
|
|
@ -1,111 +0,0 @@
|
|||
# Copyright (C) 2009 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.
|
||||
#
|
||||
|
||||
LOCAL_CERTIFICATE := shared
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)/..
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
FOR_ANDROID := 1
|
||||
WEBUI := 1
|
||||
USE_GLES := 1
|
||||
|
||||
ifneq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
||||
NOT_ARM := 1
|
||||
else
|
||||
NOT_ARM :=
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_ARCH_ABI),x86)
|
||||
X86_REC := 1
|
||||
else
|
||||
X86_REC :=
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_ARCH_ABI),mips)
|
||||
ISMIPS := 1
|
||||
NO_REC := 1
|
||||
else
|
||||
ISMIPS :=
|
||||
NO_REC :=
|
||||
endif
|
||||
|
||||
$(info $$TARGET_ARCH_ABI is [${TARGET_ARCH_ABI}])
|
||||
|
||||
include $(LOCAL_PATH)/../../core/core.mk
|
||||
|
||||
LOCAL_SRC_FILES := $(RZDCY_FILES)
|
||||
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/Android.cpp)
|
||||
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/utils.cpp)
|
||||
LOCAL_CFLAGS := $(RZDCY_CFLAGS) -fvisibility=hidden -ffunction-sections -fdata-sections
|
||||
LOCAL_CXXFLAGS := $(RZDCY_CXXFLAGS) -fvisibility=hidden -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
|
||||
LOCAL_CPPFLAGS := $(RZDCY_CXXFLAGS) -fvisibility=hidden -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
|
||||
|
||||
ifeq ($(TARGET_ARCH_ABI),x86)
|
||||
LOCAL_CFLAGS+= -DTARGET_NO_AREC
|
||||
LOCAL_CXXFLAGS+= -DTARGET_NO_AREC -fpermissive
|
||||
LOCAL_CPPFLAGS+= -DTARGET_NO_AREC
|
||||
endif
|
||||
|
||||
LOCAL_CPP_FEATURES :=
|
||||
# LOCAL_SHARED_LIBRARIES:= libcutils libutils
|
||||
LOCAL_PRELINK_MODULE := false
|
||||
|
||||
LOCAL_MODULE := dc
|
||||
LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
|
||||
LOCAL_ASFLAGS := -fvisibility=hidden
|
||||
LOCAL_LDLIBS := -llog -lGLESv2 -lEGL -lz
|
||||
#-Wl,-Map,./res/raw/syms.mp3
|
||||
LOCAL_ARM_MODE := arm
|
||||
|
||||
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
LOCAL_LDFLAGS += -Wl,--gc-sections
|
||||
else
|
||||
LOCAL_LDFLAGS += -Wl,--gc-sections,--icf=safe
|
||||
LOCAL_LDLIBS += -Wl,--no-warn-shared-textrel
|
||||
endif
|
||||
|
||||
#
|
||||
# android has poor support for hardfp calling.
|
||||
# r9b+ is required, and it only works for internal calls
|
||||
# the opengl drivers would really benefit from this, but they are still using softfp
|
||||
# the header files tell gcc to automatically use aapcs for calling system/etc
|
||||
# so there is no real perfomance difference
|
||||
#
|
||||
# The way this is implemented is a huge hack on the android/linux side
|
||||
# (but then again, which part of android isn't a huge hack?)
|
||||
|
||||
#ifneq ($(filter %armeabi-v7a,$(TARGET_ARCH_ABI)),)
|
||||
#LOCAL_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -DARM_HARDFP
|
||||
#LOCAL_LDLIBS += -lm_hard
|
||||
#ifeq (,$(filter -fuse-ld=mcld,$(APP_LDFLAGS) $(LOCAL_LDFLAGS)))
|
||||
#LOCAL_LDFLAGS += -Wl,--no-warn-mismatch
|
||||
#endif
|
||||
#endif
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := sexplay
|
||||
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/jni/src/XperiaPlay.c)
|
||||
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
|
||||
LOCAL_STATIC_LIBRARIES := android_native_app_glue
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
$(call import-module,android/native_app_glue)
|
|
@ -1,5 +0,0 @@
|
|||
APP_STL := stlport_static
|
||||
APP_ABI := armeabi-v7a # x86 mips
|
||||
#APP_ABI := armeabi-v7a
|
||||
APP_PLATFORM := android-19
|
||||
#NDK_TOOLCHAIN_VERSION := 4.8
|
|
@ -1,564 +0,0 @@
|
|||
#include <jni.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <android/log.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <GLES2/gl2.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "profiler/profiler.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "rend/TexCache.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#include "hw/maple/maple_if.h"
|
||||
#include "oslib/audiobackend_android.h"
|
||||
|
||||
// #include "util.h"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_config(JNIEnv *env,jobject obj,jstring dirName) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_init(JNIEnv *env,jobject obj,jstring fileName) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_run(JNIEnv *env,jobject obj,jobject emu_thread) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_send(JNIEnv *env,jobject obj,jint id, jint v) __attribute__((visibility("default")));
|
||||
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_data(JNIEnv *env,jobject obj,jint id, jbyteArray d) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendinit(JNIEnv *env,jobject obj,jint w,jint h) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendframe(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_kcode(JNIEnv * env, jobject obj, jintArray k_code, jintArray l_t, jintArray r_t, jintArray jx, jintArray jy) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vjoy(JNIEnv * env, jobject obj,u32 id,float x, float y, float w, float h) __attribute__((visibility("default")));
|
||||
//JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_play(JNIEnv *env,jobject obj,jshortArray result,jint size);
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_initControllers(JNIEnv *env, jobject obj, jbooleanArray controllers) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupMic(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj, jstring newdisk) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default")));
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_dynarec(JNIEnv *env,jobject obj, jint dynarec) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_idleskip(JNIEnv *env,jobject obj, jint idleskip) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_unstable(JNIEnv *env,jobject obj, jint unstable) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_cable(JNIEnv *env,jobject obj, jint cable) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_region(JNIEnv *env,jobject obj, jint region) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_broadcast(JNIEnv *env,jobject obj, jint broadcast) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_limitfps(JNIEnv *env,jobject obj, jint limiter) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_nobatch(JNIEnv *env,jobject obj, jint nobatch) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_nosound(JNIEnv *env,jobject obj, jint noaudio) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_mipmaps(JNIEnv *env,jobject obj, jint mipmaps) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_widescreen(JNIEnv *env,jobject obj, jint stretch) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_subdivide(JNIEnv *env,jobject obj, jint subdivide) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_frameskip(JNIEnv *env,jobject obj, jint frames) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_pvrrender(JNIEnv *env,jobject obj, jint render) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_syncedrender(JNIEnv *env,jobject obj, jint sync) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_cheatdisk(JNIEnv *env,jobject obj, jstring disk) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_usereios(JNIEnv *env,jobject obj, jint reios) __attribute__((visibility("default")));
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_dreamtime(JNIEnv *env,jobject obj, jlong clock) __attribute__((visibility("default")));
|
||||
};
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_dynarec(JNIEnv *env,jobject obj, jint dynarec)
|
||||
{
|
||||
settings.dynarec.Enable = dynarec;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_idleskip(JNIEnv *env,jobject obj, jint idleskip)
|
||||
{
|
||||
settings.dynarec.idleskip = idleskip;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_unstable(JNIEnv *env,jobject obj, jint unstable)
|
||||
{
|
||||
settings.dynarec.unstable_opt = unstable;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_cable(JNIEnv *env,jobject obj, jint cable)
|
||||
{
|
||||
settings.dreamcast.cable = cable;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_region(JNIEnv *env,jobject obj, jint region)
|
||||
{
|
||||
settings.dreamcast.region = region;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_broadcast(JNIEnv *env,jobject obj, jint broadcast)
|
||||
{
|
||||
settings.dreamcast.broadcast = broadcast;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_limitfps(JNIEnv *env,jobject obj, jint limiter)
|
||||
{
|
||||
settings.aica.LimitFPS = limiter;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_nobatch(JNIEnv *env,jobject obj, jint nobatch)
|
||||
{
|
||||
settings.aica.NoBatch = nobatch;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_nosound(JNIEnv *env,jobject obj, jint noaudio)
|
||||
{
|
||||
settings.aica.NoSound = noaudio;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_mipmaps(JNIEnv *env,jobject obj, jint mipmaps)
|
||||
{
|
||||
settings.rend.UseMipmaps = mipmaps;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_widescreen(JNIEnv *env,jobject obj, jint stretch)
|
||||
{
|
||||
settings.rend.WideScreen = stretch;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_subdivide(JNIEnv *env,jobject obj, jint subdivide)
|
||||
{
|
||||
settings.pvr.subdivide_transp = subdivide;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_frameskip(JNIEnv *env,jobject obj, jint frames)
|
||||
{
|
||||
settings.pvr.ta_skip = frames;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_pvrrender(JNIEnv *env,jobject obj, jint render)
|
||||
{
|
||||
settings.pvr.rend = render;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_syncedrender(JNIEnv *env,jobject obj, jint sync)
|
||||
{
|
||||
settings.pvr.SynchronousRendering = sync;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_cheatdisk(JNIEnv *env,jobject obj, jstring disk)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_usereios(JNIEnv *env,jobject obj, jint reios)
|
||||
{
|
||||
settings.bios.UseReios = reios;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_dreamtime(JNIEnv *env,jobject obj, jlong clock)
|
||||
{
|
||||
settings.dreamcast.RTC = (u32)(clock);
|
||||
}
|
||||
|
||||
void egl_stealcntx();
|
||||
void SetApplicationPath(wchar *path);
|
||||
int dc_init(int argc,wchar* argv[]);
|
||||
void dc_run();
|
||||
void dc_term();
|
||||
void mcfg_Create(MapleDeviceType type,u32 bus,u32 port);
|
||||
|
||||
bool VramLockedWrite(u8* address);
|
||||
|
||||
bool rend_single_frame();
|
||||
bool gles_init();
|
||||
|
||||
//extern cResetEvent rs,re;
|
||||
extern int screen_width,screen_height;
|
||||
|
||||
static u64 tvs_base;
|
||||
static char CurFileName[256];
|
||||
|
||||
// Additonal controllers 2, 3 and 4 connected ?
|
||||
static bool add_controllers[3] = { false, false, false };
|
||||
|
||||
u16 kcode[4];
|
||||
u32 vks[4];
|
||||
s8 joyx[4],joyy[4];
|
||||
u8 rt[4],lt[4];
|
||||
float vjoy_pos[14][8];
|
||||
|
||||
extern bool print_stats;
|
||||
|
||||
|
||||
|
||||
void os_DoEvents()
|
||||
{
|
||||
// @@@ Nothing here yet
|
||||
}
|
||||
|
||||
//
|
||||
// Native thread that runs the actual nullDC emulator
|
||||
//
|
||||
static void *ThreadHandler(void *UserData)
|
||||
{
|
||||
char *Args[3];
|
||||
const char *P;
|
||||
|
||||
// Make up argument list
|
||||
P = (const char *)UserData;
|
||||
Args[0] = "dc";
|
||||
Args[1] = "-config";
|
||||
Args[2] = P&&P[0]? (char *)malloc(strlen(P)+32):0;
|
||||
|
||||
if(Args[2])
|
||||
{
|
||||
strcpy(Args[2],"config:image=");
|
||||
strcat(Args[2],P);
|
||||
}
|
||||
|
||||
// Add additonal controllers
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (add_controllers[i])
|
||||
mcfg_Create(MDT_SegaController,i+1,5);
|
||||
}
|
||||
|
||||
// Run nullDC emulator
|
||||
dc_init(Args[2]? 3:1,Args);
|
||||
}
|
||||
|
||||
//
|
||||
// Platform-specific NullDC functions
|
||||
//
|
||||
|
||||
|
||||
void UpdateInputState(u32 Port)
|
||||
{
|
||||
// @@@ Nothing here yet
|
||||
}
|
||||
|
||||
void UpdateVibration(u32 port, u32 value)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void *libPvr_GetRenderTarget()
|
||||
{
|
||||
// No X11 window in Android
|
||||
return(0);
|
||||
}
|
||||
|
||||
void *libPvr_GetRenderSurface()
|
||||
{
|
||||
// No X11 display in Android
|
||||
return(0);
|
||||
}
|
||||
|
||||
void common_linux_setup();
|
||||
|
||||
void os_SetWindowText(char const *Text)
|
||||
{
|
||||
putinf(Text);
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_config(JNIEnv *env,jobject obj,jstring dirName)
|
||||
{
|
||||
// Set home directory based on User config
|
||||
const char* D = dirName? env->GetStringUTFChars(dirName,0):0;
|
||||
set_user_config_dir(D);
|
||||
set_user_data_dir(D);
|
||||
printf("Config dir is: %s\n", get_writable_config_path("/").c_str());
|
||||
printf("Data dir is: %s\n", get_writable_data_path("/").c_str());
|
||||
env->ReleaseStringUTFChars(dirName,D);
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_init(JNIEnv *env,jobject obj,jstring fileName)
|
||||
{
|
||||
// Get filename string from Java
|
||||
const char* P = fileName? env->GetStringUTFChars(fileName,0):0;
|
||||
if(!P) CurFileName[0] = '\0';
|
||||
else
|
||||
{
|
||||
printf("Got URI: '%s'\n",P);
|
||||
strncpy(CurFileName,(strlen(P)>=7)&&!memcmp(P,"file://",7)? P+7:P,sizeof(CurFileName));
|
||||
CurFileName[sizeof(CurFileName)-1] = '\0';
|
||||
env->ReleaseStringUTFChars(fileName,P);
|
||||
}
|
||||
|
||||
printf("Opening file: '%s'\n",CurFileName);
|
||||
|
||||
// Initialize platform-specific stuff
|
||||
common_linux_setup();
|
||||
|
||||
// Set configuration
|
||||
settings.profile.run_counts = 0;
|
||||
|
||||
|
||||
/*
|
||||
// Start native thread
|
||||
pthread_attr_init(&PTAttr);
|
||||
pthread_attr_setdetachstate(&PTAttr,PTHREAD_CREATE_DETACHED);
|
||||
pthread_create(&PThread,&PTAttr,ThreadHandler,CurFileName);
|
||||
pthread_attr_destroy(&PTAttr);
|
||||
*/
|
||||
|
||||
ThreadHandler(CurFileName);
|
||||
}
|
||||
|
||||
#define SAMPLE_COUNT 512
|
||||
|
||||
JNIEnv* jenv; //we are abusing the f*** out of this poor guy
|
||||
//JavaVM* javaVM = NULL; //this seems like the right way to go
|
||||
//stuff for audio
|
||||
jshortArray jsamples;
|
||||
jmethodID writemid;
|
||||
jmethodID coreMessageMid;
|
||||
jmethodID dieMid;
|
||||
jobject emu;
|
||||
//stuff for microphone
|
||||
jobject sipemu;
|
||||
jmethodID getmicdata;
|
||||
//stuff for vmu lcd
|
||||
jobject vmulcd = NULL;
|
||||
jbyteArray jpix = NULL;
|
||||
jmethodID updatevmuscreen;
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_run(JNIEnv *env,jobject obj,jobject emu_thread)
|
||||
{
|
||||
install_prof_handler(0);
|
||||
|
||||
jenv=env;
|
||||
emu=emu_thread;
|
||||
|
||||
jsamples=env->NewShortArray(SAMPLE_COUNT*2);
|
||||
writemid=env->GetMethodID(env->GetObjectClass(emu),"WriteBuffer","([SI)I");
|
||||
coreMessageMid=env->GetMethodID(env->GetObjectClass(emu),"coreMessage","([B)V");
|
||||
dieMid=env->GetMethodID(env->GetObjectClass(emu),"Die","()V");
|
||||
// msgboxf("HELLO!", MBX_OK);
|
||||
|
||||
dc_run();
|
||||
}
|
||||
|
||||
int msgboxf(const wchar* Text,unsigned int Type,...)
|
||||
{
|
||||
wchar S[2048];
|
||||
va_list Args;
|
||||
|
||||
va_start(Args,Type);
|
||||
vsprintf(S,Text,Args);
|
||||
va_end(Args);
|
||||
|
||||
int byteCount = strlen(S);
|
||||
jbyteArray bytes = jenv->NewByteArray(byteCount);
|
||||
jenv->SetByteArrayRegion(bytes, 0, byteCount, (jbyte*)S);
|
||||
|
||||
jenv->CallVoidMethod(emu,coreMessageMid,bytes);
|
||||
|
||||
return (MBX_OK);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupMic(JNIEnv *env,jobject obj,jobject sip)
|
||||
{
|
||||
sipemu = env->NewGlobalRef(sip);
|
||||
getmicdata = env->GetMethodID(env->GetObjectClass(sipemu),"getData","()[B");
|
||||
delete MapleDevices[0][1];
|
||||
mcfg_Create(MDT_Microphone,0,1);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,jobject obj,jobject vmu)
|
||||
{
|
||||
//env->GetJavaVM(&javaVM);
|
||||
vmulcd = env->NewGlobalRef(vmu);
|
||||
updatevmuscreen = env->GetMethodID(env->GetObjectClass(vmu),"updateBytes","([B)V");
|
||||
//jpix=env->NewByteArray(1536);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobject obj)
|
||||
{
|
||||
dc_term();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj, jstring newdisk)
|
||||
{
|
||||
// Needs actual code to swap a disk
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,jobject obj)
|
||||
{
|
||||
maple_device* olda = MapleDevices[0][0];
|
||||
maple_device* oldb = MapleDevices[0][1];
|
||||
MapleDevices[0][0] = NULL;
|
||||
MapleDevices[0][1] = NULL;
|
||||
usleep(50000);//50 ms, wait for host to detect disconnect
|
||||
|
||||
MapleDevices[0][0] = oldb;
|
||||
MapleDevices[0][1] = olda;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_send(JNIEnv *env,jobject obj,jint cmd, jint param)
|
||||
{
|
||||
if (cmd==0)
|
||||
{
|
||||
if (param==0)
|
||||
{
|
||||
KillTex=true;
|
||||
printf("Killing texture cache\n");
|
||||
}
|
||||
|
||||
if (param==1)
|
||||
{
|
||||
settings.pvr.ta_skip^=1;
|
||||
printf("settings.pvr.ta_skip: %d\n",settings.pvr.ta_skip);
|
||||
}
|
||||
if (param==2)
|
||||
{
|
||||
#if FEAT_SHREC != DYNAREC_NONE
|
||||
print_stats=true;
|
||||
printf("Storing blocks ...\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (cmd==1)
|
||||
{
|
||||
if (param==0)
|
||||
sample_Stop();
|
||||
else
|
||||
sample_Start(param);
|
||||
}
|
||||
else if (cmd==2)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_data(JNIEnv *env,jobject obj,jint id, jbyteArray d)
|
||||
{
|
||||
if (id==1)
|
||||
{
|
||||
printf("Loading symtable (%p,%p,%p,%p)\n",env,obj,id,d);
|
||||
int len=env->GetArrayLength(d);
|
||||
u8* syms=(u8*)malloc(len);
|
||||
printf("Loading symtable to %p, %d\n",syms,len);
|
||||
env->GetByteArrayRegion(d,0,len,(jbyte*)syms);
|
||||
sample_Syms(syms,len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendframe(JNIEnv *env,jobject obj)
|
||||
{
|
||||
while(!rend_single_frame()) ;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_kcode(JNIEnv * env, jobject obj, jintArray k_code, jintArray l_t, jintArray r_t, jintArray jx, jintArray jy)
|
||||
{
|
||||
jint *k_code_body = env->GetIntArrayElements(k_code, 0);
|
||||
jint *l_t_body = env->GetIntArrayElements(l_t, 0);
|
||||
jint *r_t_body = env->GetIntArrayElements(r_t, 0);
|
||||
jint *jx_body = env->GetIntArrayElements(jx, 0);
|
||||
jint *jy_body = env->GetIntArrayElements(jy, 0);
|
||||
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
kcode[i] = k_code_body[i];
|
||||
lt[i] = l_t_body[i];
|
||||
rt[i] = r_t_body[i];
|
||||
joyx[i] = jx_body[i];
|
||||
joyy[i] = jy_body[i];
|
||||
}
|
||||
|
||||
env->ReleaseIntArrayElements(k_code, k_code_body, 0);
|
||||
env->ReleaseIntArrayElements(l_t, l_t_body, 0);
|
||||
env->ReleaseIntArrayElements(r_t, r_t_body, 0);
|
||||
env->ReleaseIntArrayElements(jx, jx_body, 0);
|
||||
env->ReleaseIntArrayElements(jy, jy_body, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendinit(JNIEnv * env, jobject obj, jint w,jint h)
|
||||
{
|
||||
screen_width = w;
|
||||
screen_height = h;
|
||||
|
||||
//gles_term();
|
||||
|
||||
egl_stealcntx();
|
||||
|
||||
if (!gles_init())
|
||||
die("OPENGL FAILED");
|
||||
|
||||
install_prof_handler(1);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vjoy(JNIEnv * env, jobject obj,u32 id,float x, float y, float w, float h)
|
||||
{
|
||||
if(id<sizeof(vjoy_pos)/sizeof(vjoy_pos[0]))
|
||||
{
|
||||
vjoy_pos[id][0] = x;
|
||||
vjoy_pos[id][1] = y;
|
||||
vjoy_pos[id][2] = w;
|
||||
vjoy_pos[id][3] = h;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_initControllers(JNIEnv *env, jobject obj, jbooleanArray controllers)
|
||||
{
|
||||
jboolean *controllers_body = env->GetBooleanArrayElements(controllers, 0);
|
||||
memcpy(add_controllers, controllers_body, 3);
|
||||
env->ReleaseBooleanArrayElements(controllers, controllers_body, 0);
|
||||
}
|
||||
|
||||
// Audio Stuff
|
||||
u32 androidaudio_push(void* frame, u32 amt, bool wait)
|
||||
{
|
||||
verify(amt==SAMPLE_COUNT);
|
||||
//yeah, do some audio piping magic here !
|
||||
jenv->SetShortArrayRegion(jsamples,0,amt*2,(jshort*)frame);
|
||||
return jenv->CallIntMethod(emu,writemid,jsamples,wait);
|
||||
}
|
||||
|
||||
void androidaudio_init()
|
||||
{
|
||||
// Nothing to do here...
|
||||
}
|
||||
|
||||
void androidaudio_term()
|
||||
{
|
||||
// Move along, there is nothing to see here!
|
||||
}
|
||||
|
||||
bool os_IsAudioBuffered()
|
||||
{
|
||||
return jenv->CallIntMethod(emu,writemid,jsamples,-1)==0;
|
||||
}
|
||||
|
||||
audiobackend_t audiobackend_android = {
|
||||
"android", // Slug
|
||||
"Android Audio", // Name
|
||||
&androidaudio_init,
|
||||
&androidaudio_push,
|
||||
&androidaudio_term
|
||||
};
|
||||
|
||||
int get_mic_data(u8* buffer)
|
||||
{
|
||||
jbyteArray jdata = (jbyteArray)jenv->CallObjectMethod(sipemu,getmicdata);
|
||||
if(jdata==NULL){
|
||||
//LOGW("get_mic_data NULL");
|
||||
return 0;
|
||||
}
|
||||
jenv->GetByteArrayRegion(jdata, 0, SIZE_OF_MIC_DATA, (jbyte*)buffer);
|
||||
jenv->DeleteLocalRef(jdata);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int push_vmu_screen(u8* buffer)
|
||||
{
|
||||
if(vmulcd==NULL){
|
||||
return 0;
|
||||
}
|
||||
JNIEnv *env = jenv;
|
||||
//javaVM->AttachCurrentThread(&env, NULL);
|
||||
if(jpix==NULL){
|
||||
jpix=env->NewByteArray(1536);
|
||||
}
|
||||
env->SetByteArrayRegion(jpix,0,1536,(jbyte*)buffer);
|
||||
env->CallVoidMethod(vmulcd,updatevmuscreen,jpix);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void os_DebugBreak()
|
||||
{
|
||||
//notify the parent thread about it ...
|
||||
}
|
|
@ -1,313 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2011, Sony Ericsson Mobile Communications AB.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the Sony Ericsson Mobile Communications AB nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <android/log.h>
|
||||
#include <jni.h>
|
||||
#include <errno.h>
|
||||
#include <android_native_app_glue.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/system_properties.h>
|
||||
|
||||
#define EXPORT_XPLAY __attribute__ ((visibility("default")))
|
||||
|
||||
#define TAG "reicast"
|
||||
#define LOGW(...) ((void)__android_log_print( ANDROID_LOG_WARN, TAG, __VA_ARGS__ ))
|
||||
|
||||
#undef NUM_METHODS
|
||||
#define NUM_METHODS(x) (sizeof(x)/sizeof(*(x)))
|
||||
|
||||
static JavaVM *jVM;
|
||||
|
||||
typedef unsigned char BOOL;
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
static jobject g_pActivity = 0;
|
||||
static jmethodID javaOnNDKTouch = 0;
|
||||
static jmethodID javaOnNDKKey = 0;
|
||||
|
||||
static bool isXperiaPlay;
|
||||
|
||||
/**
|
||||
* Our saved state data.
|
||||
*/
|
||||
struct TOUCHSTATE
|
||||
{
|
||||
int down;
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
/**
|
||||
* Shared state for our app.
|
||||
*/
|
||||
struct ENGINE
|
||||
{
|
||||
struct android_app* app;
|
||||
int render;
|
||||
int width;
|
||||
int height;
|
||||
int has_focus;
|
||||
//ugly way to track touch states
|
||||
struct TOUCHSTATE touchstate_screen[64];
|
||||
struct TOUCHSTATE touchstate_pad[64];
|
||||
};
|
||||
|
||||
void attach(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the next input event.
|
||||
*/
|
||||
static
|
||||
int32_t
|
||||
engine_handle_input( struct android_app* app, AInputEvent* event )
|
||||
{
|
||||
JNIEnv *jni;
|
||||
(*jVM)->AttachCurrentThread(jVM, &jni, NULL);
|
||||
|
||||
struct ENGINE* engine = (struct ENGINE*)app->userData;
|
||||
if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_KEY){
|
||||
int device = AInputEvent_getDeviceId(event);
|
||||
int action = AKeyEvent_getAction(event);
|
||||
int keyCode = AKeyEvent_getKeyCode(event);
|
||||
if(jni && g_pActivity){
|
||||
if((*jni)->ExceptionCheck(jni)) {
|
||||
(*jni)->ExceptionDescribe(jni);
|
||||
(*jni)->ExceptionClear(jni);
|
||||
}
|
||||
(*jni)->CallIntMethod(jni, g_pActivity, javaOnNDKKey, device, keyCode, action, AKeyEvent_getMetaState(event));
|
||||
if (!(keyCode == AKEYCODE_MENU || keyCode == AKEYCODE_BACK || keyCode == AKEYCODE_BUTTON_THUMBR || keyCode == AKEYCODE_VOLUME_UP || keyCode == AKEYCODE_VOLUME_DOWN || keyCode == AKEYCODE_BUTTON_SELECT)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} else if( AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION ) {
|
||||
int device = AInputEvent_getDeviceId( event );
|
||||
int nSourceId = AInputEvent_getSource( event );
|
||||
int nPointerCount = AMotionEvent_getPointerCount( event );
|
||||
int n;
|
||||
|
||||
jboolean newTouch = JNI_TRUE;
|
||||
for( n = 0 ; n < nPointerCount ; ++n )
|
||||
{
|
||||
int nPointerId = AMotionEvent_getPointerId( event, n );
|
||||
int nAction = AMOTION_EVENT_ACTION_MASK & AMotionEvent_getAction( event );
|
||||
int nRawAction = AMotionEvent_getAction( event );
|
||||
|
||||
struct TOUCHSTATE *touchstate = 0;
|
||||
if( nSourceId == AINPUT_SOURCE_TOUCHPAD ) {
|
||||
touchstate = engine->touchstate_pad;
|
||||
} else {
|
||||
touchstate = engine->touchstate_screen;
|
||||
}
|
||||
|
||||
if( nAction == AMOTION_EVENT_ACTION_POINTER_DOWN || nAction == AMOTION_EVENT_ACTION_POINTER_UP )
|
||||
{
|
||||
int nPointerIndex = (AMotionEvent_getAction( event ) & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
|
||||
nPointerId = AMotionEvent_getPointerId( event, nPointerIndex );
|
||||
}
|
||||
|
||||
if( nAction == AMOTION_EVENT_ACTION_DOWN || nAction == AMOTION_EVENT_ACTION_POINTER_DOWN )
|
||||
{
|
||||
touchstate[nPointerId].down = 1;
|
||||
}
|
||||
else if( nAction == AMOTION_EVENT_ACTION_UP || nAction == AMOTION_EVENT_ACTION_POINTER_UP || nAction == AMOTION_EVENT_ACTION_CANCEL )
|
||||
{
|
||||
touchstate[nPointerId].down = 0;
|
||||
}
|
||||
|
||||
if (touchstate[nPointerId].down == 1)
|
||||
{
|
||||
touchstate[nPointerId].x = AMotionEvent_getX( event, n );
|
||||
touchstate[nPointerId].y = AMotionEvent_getY( event, n );
|
||||
}
|
||||
|
||||
if( jni && g_pActivity && isXperiaPlay) {
|
||||
// (*jni)->CallVoidMethod( jni, g_pActivity, javaOnNDKTouch, device, nSourceId, nRawAction, touchstate[nPointerId].x, touchstate[nPointerId].y, newTouch);
|
||||
(*jni)->CallVoidMethod( jni, g_pActivity, javaOnNDKTouch, device, nSourceId, nRawAction, touchstate[nPointerId].x, touchstate[nPointerId].y);
|
||||
}
|
||||
newTouch = JNI_FALSE;
|
||||
}
|
||||
|
||||
if( isXperiaPlay ) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the next main command.
|
||||
*/
|
||||
static
|
||||
void
|
||||
engine_handle_cmd( struct android_app* app, int32_t cmd )
|
||||
{
|
||||
struct ENGINE* engine = (struct ENGINE*)app->userData;
|
||||
switch( cmd )
|
||||
{
|
||||
case APP_CMD_SAVE_STATE:
|
||||
// The system has asked us to save our current state. Do so if needed
|
||||
break;
|
||||
case APP_CMD_INIT_WINDOW:
|
||||
// The window is being shown, get it ready.
|
||||
if( engine->app->window != NULL )
|
||||
{
|
||||
engine->has_focus = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case APP_CMD_GAINED_FOCUS:
|
||||
engine->has_focus = 1;
|
||||
break;
|
||||
|
||||
case APP_CMD_LOST_FOCUS:
|
||||
// When our app loses focus, we stop rendering.
|
||||
engine->render = 0;
|
||||
engine->has_focus = 0;
|
||||
//engine_draw_frame( engine );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the main entry point of a native application that is using
|
||||
* android_native_app_glue. It runs in its own thread, with its own
|
||||
* event loop for receiving input events and doing other things (rendering).
|
||||
*/
|
||||
void
|
||||
android_main( struct android_app* state )
|
||||
{
|
||||
struct ENGINE engine;
|
||||
|
||||
// Make sure glue isn't stripped.
|
||||
app_dummy();
|
||||
|
||||
memset( &engine, 0, sizeof(engine) );
|
||||
state->userData = &engine;
|
||||
state->onAppCmd = engine_handle_cmd;
|
||||
state->onInputEvent = engine_handle_input;
|
||||
engine.app = state;
|
||||
|
||||
//setup(state);
|
||||
//JNIEnv *env;
|
||||
//(*jVM)->AttachCurrentThread(jVM, &env, NULL);
|
||||
|
||||
if( state->savedState != NULL )
|
||||
{
|
||||
// We are starting with a previous saved state; restore from it.
|
||||
}
|
||||
// our 'main loop'
|
||||
while( 1 )
|
||||
{
|
||||
// Read all pending events.
|
||||
int ident;
|
||||
int events;
|
||||
struct android_poll_source* source;
|
||||
// If not rendering, we will block forever waiting for events.
|
||||
// If rendering, we loop until all events are read, then continue
|
||||
// to draw the next frame.
|
||||
while( (ident = ALooper_pollAll( 250, NULL, &events, (void**)&source) ) >= 0 )
|
||||
{
|
||||
// Process this event.
|
||||
// This will call the function pointer android_app:nInputEvent() which in our case is
|
||||
// engine_handle_input()
|
||||
if( source != NULL )
|
||||
{
|
||||
source->process( state, source );
|
||||
}
|
||||
// Check if we are exiting.
|
||||
if( state->destroyRequested != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
//usleep(20000); //20 miliseconds
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
int
|
||||
RegisterNative( JNIEnv* env, jobject clazz, jboolean touchpad )
|
||||
{
|
||||
g_pActivity = (jobject)(*env)->NewGlobalRef( env, clazz );
|
||||
isXperiaPlay = (bool) touchpad;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const JNINativeMethod activity_methods[] =
|
||||
{
|
||||
{ "RegisterNative", "(Z)I", (void*)RegisterNative },
|
||||
};
|
||||
|
||||
jint EXPORT_XPLAY JNICALL JNI_OnLoad(JavaVM * vm, void * reserved)
|
||||
{
|
||||
JNIEnv *env;
|
||||
jVM = vm;
|
||||
if((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK)
|
||||
{
|
||||
LOGW("%s - Failed to get the environment using GetEnv()", __FUNCTION__);
|
||||
return -1;
|
||||
}
|
||||
const char* interface_path = "com/reicast/emulator/GL2JNINative";
|
||||
jclass java_activity_class = (*env)->FindClass( env, interface_path );
|
||||
|
||||
if( !java_activity_class )
|
||||
{
|
||||
LOGW( "%s - Failed to get %s class reference", __FUNCTION__, interface_path );
|
||||
return -1;
|
||||
}
|
||||
|
||||
if( (*env)->RegisterNatives( env, java_activity_class, activity_methods, NUM_METHODS(activity_methods) ) != JNI_OK )
|
||||
{
|
||||
LOGW( "%s - Failed to register native activity methods", __FUNCTION__ );
|
||||
return -1;
|
||||
}
|
||||
|
||||
char device_type[PROP_VALUE_MAX];
|
||||
__system_property_get("ro.product.model", device_type);
|
||||
if( isXperiaPlay ) {
|
||||
LOGW( "%s touchpad enabled", device_type );
|
||||
} else {
|
||||
LOGW( "%s touchpad ignored", device_type );
|
||||
}
|
||||
|
||||
// javaOnNDKTouch = (*env)->GetMethodID( env, java_activity_class, "OnNativeMotion", "(IIIIIZ)Z");
|
||||
javaOnNDKTouch = (*env)->GetMethodID( env, java_activity_class, "OnNativeMotion", "(IIIII)Z");
|
||||
javaOnNDKKey = (*env)->GetMethodID( env, java_activity_class, "OnNativeKeyPress", "(IIII)Z");
|
||||
|
||||
return JNI_VERSION_1_4;
|
||||
}
|
|
@ -1,177 +0,0 @@
|
|||
#include <EGL/egl.h>
|
||||
#include <GLES2/gl2.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
extern "C" {
|
||||
#include "deps/libpng/png.h"
|
||||
}
|
||||
#include "types.h"
|
||||
#include "deps/libzip/zip.h"
|
||||
|
||||
#define TEXTURE_LOAD_ERROR 0
|
||||
|
||||
//Taken from http://en.wikibooks.org/wiki/OpenGL_Programming/Intermediate/Textures
|
||||
/** loadTexture
|
||||
* loads a png file into an opengl texture object, using cstdio , libpng, and opengl.
|
||||
*
|
||||
* \param filename : the png file to be loaded
|
||||
* \param width : width of png, to be updated as a side effect of this function
|
||||
* \param height : height of png, to be updated as a side effect of this function
|
||||
*
|
||||
* \return GLuint : an opengl texture id. Will be 0 if there is a major error,
|
||||
* should be validated by the client of this function.
|
||||
*
|
||||
*/
|
||||
zip_file* file;
|
||||
|
||||
zip* APKArchive;
|
||||
void setAPK (const char* apkPath) {
|
||||
LOGI("Loading APK %s", apkPath);
|
||||
APKArchive = zip_open(apkPath, 0, NULL);
|
||||
if (APKArchive == NULL) {
|
||||
LOGE("Error loading APK");
|
||||
return;
|
||||
}
|
||||
|
||||
//Just for debug, print APK contents
|
||||
int numFiles = zip_get_num_files(APKArchive);
|
||||
for (int i=0; i<numFiles; i++) {
|
||||
const char* name = zip_get_name(APKArchive, i, 0);
|
||||
if (name == NULL) {
|
||||
LOGE("Error reading zip file name at index %i : %s", zip_strerror(APKArchive));
|
||||
return;
|
||||
}
|
||||
LOGI("File %i : %s\n", i, name);
|
||||
}
|
||||
}
|
||||
|
||||
void png_zip_read(png_structp png_ptr, png_bytep data, png_size_t length) {
|
||||
zip_fread(file, data, length);
|
||||
}
|
||||
|
||||
GLuint loadTextureFromPNG(const char* filename, int &width, int &height) {
|
||||
file = zip_fopen(APKArchive, filename, 0);
|
||||
if (!file) {
|
||||
LOGE("Error opening %s from APK", filename);
|
||||
return TEXTURE_LOAD_ERROR;
|
||||
}
|
||||
|
||||
//header for testing if it is a png
|
||||
png_byte header[8];
|
||||
|
||||
//read the header
|
||||
zip_fread(file, header, 8);
|
||||
|
||||
//test if png
|
||||
int is_png = !png_sig_cmp(header, 0, 8);
|
||||
if (!is_png) {
|
||||
zip_fclose(file);
|
||||
LOGE("Not a png file : %s", filename);
|
||||
return TEXTURE_LOAD_ERROR;
|
||||
}
|
||||
|
||||
//create png struct
|
||||
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
|
||||
NULL, NULL);
|
||||
if (!png_ptr) {
|
||||
zip_fclose(file);
|
||||
LOGE("Unable to create png struct : %s", filename);
|
||||
return (TEXTURE_LOAD_ERROR);
|
||||
}
|
||||
|
||||
//create png info struct
|
||||
png_infop info_ptr = png_create_info_struct(png_ptr);
|
||||
if (!info_ptr) {
|
||||
png_destroy_read_struct(&png_ptr, (png_infopp) NULL, (png_infopp) NULL);
|
||||
LOGE("Unable to create png info : %s", filename);
|
||||
zip_fclose(file);
|
||||
return (TEXTURE_LOAD_ERROR);
|
||||
}
|
||||
|
||||
//create png info struct
|
||||
png_infop end_info = png_create_info_struct(png_ptr);
|
||||
if (!end_info) {
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
|
||||
LOGE("Unable to create png end info : %s", filename);
|
||||
zip_fclose(file);
|
||||
return (TEXTURE_LOAD_ERROR);
|
||||
}
|
||||
|
||||
//png error stuff, not sure libpng man suggests this.
|
||||
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||
zip_fclose(file);
|
||||
LOGE("Error during setjmp : %s", filename);
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
|
||||
return (TEXTURE_LOAD_ERROR);
|
||||
}
|
||||
|
||||
//init png reading
|
||||
//png_init_io(png_ptr, fp);
|
||||
png_set_read_fn(png_ptr, NULL, png_zip_read);
|
||||
|
||||
//let libpng know you already read the first 8 bytes
|
||||
png_set_sig_bytes(png_ptr, 8);
|
||||
|
||||
// read all the info up to the image data
|
||||
png_read_info(png_ptr, info_ptr);
|
||||
|
||||
//variables to pass to get info
|
||||
int bit_depth, color_type;
|
||||
png_uint_32 twidth, theight;
|
||||
|
||||
// get info about png
|
||||
png_get_IHDR(png_ptr, info_ptr, &twidth, &theight, &bit_depth, &color_type,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
//update width and height based on png info
|
||||
width = twidth;
|
||||
height = theight;
|
||||
|
||||
// Update the png info struct.
|
||||
png_read_update_info(png_ptr, info_ptr);
|
||||
|
||||
// Row size in bytes.
|
||||
int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||
|
||||
// Allocate the image_data as a big block, to be given to opengl
|
||||
png_byte *image_data = new png_byte[rowbytes * height];
|
||||
if (!image_data) {
|
||||
//clean up memory and close stuff
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
|
||||
LOGE("Unable to allocate image_data while loading %s ", filename);
|
||||
zip_fclose(file);
|
||||
return TEXTURE_LOAD_ERROR;
|
||||
}
|
||||
|
||||
//row_pointers is for pointing to image_data for reading the png with libpng
|
||||
png_bytep *row_pointers = new png_bytep[height];
|
||||
if (!row_pointers) {
|
||||
//clean up memory and close stuff
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
|
||||
delete[] image_data;
|
||||
LOGE("Unable to allocate row_pointer while loading %s ", filename);
|
||||
zip_fclose(file);
|
||||
return TEXTURE_LOAD_ERROR;
|
||||
}
|
||||
// set the individual row_pointers to point at the correct offsets of image_data
|
||||
for (int i = 0; i < height; ++i)
|
||||
row_pointers[height - 1 - i] = image_data + i * rowbytes;
|
||||
|
||||
//read the png into image_data through row_pointers
|
||||
png_read_image(png_ptr, row_pointers);
|
||||
|
||||
//Now generate the OpenGL texture object
|
||||
GLuint texture;
|
||||
glGenTextures(1, &texture);
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE, (GLvoid*) image_data);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
||||
//clean up memory and close stuff
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
|
||||
delete[] image_data;
|
||||
delete[] row_pointers;
|
||||
zip_fclose(file);
|
||||
|
||||
return texture;
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef UTILS_H_
|
||||
#define UTILS_H_
|
||||
|
||||
void setAPK (const char* apkPath);
|
||||
//Filename will be looked up in the apk (should start with assets/ or res/
|
||||
GLuint loadTextureFromPNG (const char* filename, int &width, int &height);
|
||||
|
||||
#endif /* UTILS_H_ */
|
|
@ -1,20 +0,0 @@
|
|||
# To enable ProGuard in your project, edit project.properties
|
||||
# to define the proguard.config property as described in that file.
|
||||
#
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in ${sdk.dir}/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the ProGuard
|
||||
# include property in project.properties.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
|
@ -1,14 +0,0 @@
|
|||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must be checked in Version Control Systems.
|
||||
#
|
||||
# To customize properties used by the Ant build system edit
|
||||
# "ant.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
#
|
||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||
|
||||
# Project target.
|
||||
target=android-25
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="1000"
|
||||
android:repeatCount="0"/>
|
||||
</set>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="1000"
|
||||
android:repeatCount="0"/>
|
||||
</set>
|
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 4.4 KiB |
|
@ -1,14 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle" android:padding="10dp" >
|
||||
<solid android:color="#D0000000"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:gravity="center"
|
||||
android:src="@drawable/menutile"
|
||||
android:tileMode="repeat" />
|
||||
</item>
|
||||
</layer-list>
|
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 8.7 KiB |
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- Selector style for listrow -->
|
||||
<item android:drawable="@android:color/transparent" android:state_pressed="false" android:state_selected="false" android:state_focused="false"/>
|
||||
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/gradient_bg_hover" android:state_focused="true"/>
|
||||
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
|
||||
|
||||
</selector>
|
Before Width: | Height: | Size: 5.6 KiB |
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
|
||||
<!-- Gradient Bg for listrow -->
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:centerColor="#e7e7e8"
|
||||
android:endColor="#cfcfcf"
|
||||
android:startColor="#f1f1f2" />
|
||||
|
||||
</shape>
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
|
||||
<!-- Gradient BgColor for listrow Selected -->
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:centerColor="#3f7fd7"
|
||||
android:endColor="#5699f6"
|
||||
android:startColor="#5699f6" />
|
||||
|
||||
</shape>
|
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 23 KiB |
|
@ -1,14 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<item>
|
||||
<shape android:shape="rectangle" >
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#dbdbdc" />
|
||||
|
||||
<solid android:color="#FFFFFF" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</layer-list>
|
Before Width: | Height: | Size: 4.2 KiB |
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<stroke android:width="1dp" android:color="#FFA0A0A0" />
|
||||
<padding android:left="0dp" android:top="1dp" android:right="0dp"
|
||||
android:bottom="1dp" />
|
||||
</shape>
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- Selector style for listrow -->
|
||||
<item android:drawable="@drawable/gradient_bg" android:state_pressed="false" android:state_selected="false"/>
|
||||
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
|
||||
|
||||
</selector>
|
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 5.8 KiB |
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item android:state_enabled="true" android:state_pressed="true">
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#BBDDDDDD"/>
|
||||
<stroke android:width="2dp" android:color="#ffa0a496" />
|
||||
<corners android:radius="20dip"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item android:state_enabled="true" android:state_focused="true">
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#BBDDDDDD"/>
|
||||
<stroke android:width="2dp" android:color="#ffa0a496" />
|
||||
<corners android:radius="20dip"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#BBDDDDDD"/>
|
||||
<corners android:radius="20dip"/>
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<gradient
|
||||
android:endColor="#33000000"
|
||||
android:centerColor="#11000000"
|
||||
android:startColor="#00000000" />
|
||||
|
||||
</shape>
|
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 6.2 KiB |