October3d55/M/PICOXRPlugin/Source/PICOXRHMD/PICOXR_UPL.xml

605 lines
24 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright® 2015-2023 PICO Technology Co., Ltd. All rights reserved.
This plugin incorporates portions of the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc. in the United States of America and elsewhere.
Unreal® Engine, Copyright 1998 2023, Epic Games, Inc. All rights reserved.
-->
<!--PICOXR plugin additions-->
<root xmlns:android="http://schemas.android.com/apk/res/android">
<!-- init section is always evaluated once per architecture -->
<init>
<log text="PICOXRHMD init"/>
<setBoolFromProperty result="bEnablePSensor" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnablePSensor" default="false"/>
<setStringFromProperty result="HandTrackingSupport" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="HandTrackingSupport" default="ControllersOnly"/>
<setBoolFromProperty result="bEnableEyeTracking" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableEyeTracking" default="false"/>
<setBoolFromProperty result="bEnableEyeTrackingFoveationRendering" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableEyeTrackingFoveationRendering" default="false"/>
<setBoolFromProperty result="bEnableEyeTrackingCalibration" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableEyeTrackingCalibration" default="false"/>
<setBoolFromProperty result="bEnableFaceTracking" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableFaceTracking" default="false"/>
<setBoolFromProperty result="bEnableBodyTracking" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableBodyTracking" default="false"/>
<setBoolFromProperty result="bUsingOSSplash" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bUsingOSSplash" default="false"/>
<setBoolFromProperty result="bHighFrequencyTracking" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bHighFrequencyTracking" default="false"/>
<setBoolFromProperty result="bAdaptiveHandModel" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bAdaptiveHandModel" default="false"/>
<setBoolFromProperty result="bEnableMRSafeguard" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableMRSafeguard" default="false"/>
<setBoolFromProperty result="bEnableVST" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableVST" default="false"/>
<setBoolFromProperty result="bEnableAnchor" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableAnchor" default="false"/>
<setBoolFromProperty result="bEnableCloudAnchor" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableCloudAnchor" default="false"/>
<setBoolFromProperty result="bEnableSceneCapture" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableSceneCapture" default="false"/>
<setBoolFromProperty result="bEnableMesh" ini="Engine" section="/Script/PICOXRHMD.PICOXRSettings" property="bEnableMesh" default="false"/>
</init>
<!-- optional updates applied to AndroidManifest.xml -->
<androidManifestUpdates>
<addPermission android:name="android.permission.CHANGE_CONFIGURATION" />
<addPermission android:name="android.permission.WRITE_SETTINGS" />
<setElement result="AuthActivityElement" value="activity"/>
<addAttribute tag="$AuthActivityElement" name="android:name" value="com.pico.loginpaysdk.auth.TransferStationActivity"/>
<addAttribute tag="$AuthActivityElement" name="android:theme" value="@android:style/Theme.Translucent.NoTitleBar"/>
<addAttribute tag="$AuthActivityElement" name="android:excludeFromRecents" value="true"/>
<addAttribute tag="$AuthActivityElement" name="android:exported" value="true"/>
<addAttribute tag="$AuthActivityElement" name="android:launchMode" value="singleTask"/>
<setElement result="IntentFilterElement" value="intent-filter"/>
<addElements tag="$IntentFilterElement">
<action android:name="com.pico.loginpaysdk.intent.action.AuthCallback"/>
<category android:name="android.intent.category.DEFAULT"/>
</addElements>
<addElement tag="$AuthActivityElement" name="IntentFilterElement"/>
<addElement tag="application" name="AuthActivityElement"/>
<addAttribute tag="application" name="android:hardwareAccelerated" value="false" />
<addAttribute tag="application" name="android:requestLegacyExternalStorage" value="true" />
<addAttribute tag="activity" name="android:screenOrientation" value="landscape" />
<addAttribute tag="activity" name="android:configChanges" value="screenSize|orientation|keyboardHidden|keyboard|navigation" android:hardwareAccelerated="false"/>
<addAttribute tag="activity" name="android:hardwareAccelerated" value="false" />
<addElements tag="application">
<meta-data android:name="pvr.app.type" android:value="vr" />
<meta-data android:name="pvr.sdk.version" android:value="UE5_3.2.3" />
<meta-data android:name="pxr.sdk.2dloading.flag" android:value="system" />
<meta-data android:name="pxr.sdk.version_code" android:value="5130" />
</addElements>
<!-- Add MR Flag -->
<if condition="bEnableAnchor">
<true>
<addPermission android:name="com.picovr.permission.SPATIAL_DATA" />
</true>
<false>
<if condition="bEnableSceneCapture">
<true>
<addPermission android:name="com.picovr.permission.SPATIAL_DATA" />
</true>
<false>
<if condition="bEnableMesh">
<true>
<addPermission android:name="com.picovr.permission.SPATIAL_DATA" />
</true>
</if>
</false>
</if>
</false>
</if>
<if condition="bEnableMRSafeguard">
<true>
<addElements tag="application">
<meta-data android:name="enable_mr_safeguard" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_mr_safeguard" android:value="0" />
</addElements>
</false>
</if>
<if condition="bEnableVST">
<true>
<addElements tag="application">
<meta-data android:name="enable_vst" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_vst" android:value="0" />
</addElements>
</false>
</if>
<if condition="bEnableAnchor">
<true>
<addElements tag="application">
<meta-data android:name="enable_spatial_anchor" android:value="1" />
<meta-data android:name="mr_map_mgr_auto_start" android:value="1" />
<meta-data android:name="enable_anchor" android:value="1" />
</addElements>
<if condition="bEnableCloudAnchor">
<true>
<addElements tag="application">
<meta-data android:name="enable_cloud_anchor" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_cloud_anchor" android:value="0" />
</addElements>
</false>
</if>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_spatial_anchor" android:value="0" />
<meta-data android:name="enable_cloud_anchor" android:value="0" />
<meta-data android:name="mr_map_mgr_auto_start" android:value="0" />
<meta-data android:name="enable_anchor" android:value="0" />
</addElements>
</false>
</if>
<if condition="bEnableSceneCapture">
<true>
<addElements tag="application">
<meta-data android:name="enable_scene_anchor" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_scene_anchor" android:value="0" />
</addElements>
</false>
</if>
<if condition="bEnableMesh">
<true>
<addElements tag="application">
<meta-data android:name="enable_mesh_anchor" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="enable_mesh_anchor" android:value="0" />
</addElements>
</false>
</if>
<!-- Add MR Flag -->
<if condition="bUsingOSSplash">
<true>
<addElements tag="application">
<meta-data android:name="pvr.app.splash" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="pvr.app.splash" android:value="0" />
</addElements>
</false>
</if>
<!-- Add Hand Tracking Flag -->
<setBoolIsEqual result="bControllersOnly" arg1="$S(HandTrackingSupport)" arg2="ControllersOnly"/>
<setBoolIsEqual result="bControllersAndHands" arg1="$S(HandTrackingSupport)" arg2="ControllersAndHands"/>
<setBoolIsEqual result="bHandsOnly" arg1="$S(HandTrackingSupport)" arg2="HandsOnly"/>
<if condition="bControllersOnly">
<true>
<addElements tag="application">
<meta-data android:name="controller" android:value="1"/>
</addElements>
</true>
</if>
<if condition="bControllersAndHands">
<true>
<addPermission android:name="com.picovr.permission.HAND_TRACKING" />
<addElements tag="application">
<meta-data android:name="controller" android:value="1"/>
<meta-data android:name="handtracking" android:value="1"/>
</addElements>
</true>
</if>
<if condition="bHandsOnly">
<true>
<addPermission android:name="com.picovr.permission.HAND_TRACKING" />
<addElements tag="application">
<meta-data android:name="handtracking" android:value="1"/>
</addElements>
</true>
</if>
<setBoolOr result="bEnableHandTracking" arg1="$B(bControllersAndHands)" arg2="$B(bHandsOnly)"/>
<if condition="bEnableHandTracking">
<true>
<if condition="bHighFrequencyTracking">
<true>
<addElements tag="application">
<meta-data android:name="Hand_Tracking_HighFrequency" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="Hand_Tracking_HighFrequency" android:value="0" />
</addElements>
</false>
</if>
<if condition="bAdaptiveHandModel">
<true>
<addElements tag="application">
<meta-data android:name="Enable_AdaptiveHandModel" android:value="1" />
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="Enable_AdaptiveHandModel" android:value="0" />
</addElements>
</false>
</if>
</true>
<false>
<addElements tag="application">
<meta-data android:name="Hand_Tracking_HighFrequency" android:value="0" />
<meta-data android:name="Enable_AdaptiveHandModel" android:value="0" />
</addElements>
</false>
</if>
<!-- Add ET FT Flag -->
<setBool result="bEnableEyeTrackingPermission" value="false"/>
<setBoolOr result="bEnableEyeTrackingPermission" arg1="$B(bEnableEyeTrackingPermission)" arg2="$B(bEnableEyeTracking)"/>
<setBoolOr result="bEnableEyeTrackingPermission" arg1="$B(bEnableEyeTrackingPermission)" arg2="$B(bEnableEyeTrackingFoveationRendering)"/>
<if condition="bEnableEyeTrackingPermission">
<true>
<addPermission android:name="com.picovr.permission.EYE_TRACKING"/>
<addElements tag="application">
<meta-data android:name="picovr.software.eye_tracking" android:value=""/>
</addElements>
<if condition="bEnableEyeTrackingCalibration">
<true>
<addElements tag="application">
<meta-data android:name="eyetracking_calibration" android:value="true"/>
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="eyetracking_calibration" android:value="false"/>
</addElements>
</false>
</if>
</true>
<false>
<addElements tag="application">
<meta-data android:name="eyetracking_calibration" android:value="false" />
</addElements>
</false>
</if>
<if condition="bEnableFaceTracking">
<true>
<addPermission android:name="com.picovr.permission.FACE_TRACKING"/>
<addPermission android:name="android.permission.RECORD_AUDIO"/>
<addElements tag="application">
<meta-data android:name="picovr.software.face_tracking" android:value="false/true"/>
</addElements>
</true>
</if>
<!-- Add body Tracking Flag -->
<if condition="bEnableBodyTracking">
<true>
<addElements tag="application">
<meta-data android:name="PICO.swift.feature" android:value="1"/>
</addElements>
</true>
<false>
<addElements tag="application">
<meta-data android:name="PICO.swift.feature" android:value="0"/>
</addElements>
</false>
</if>
</androidManifestUpdates>
<!-- optional additions to proguard -->
<proguardAdditions>
<insert>
-keep class com.epicgames.unreal.GameActivity{*;}
-keep class com.psmart.aosoperation.SysActivity{*;}
</insert>
</proguardAdditions>
<!-- optional files or directories to copy to Intermediate/Android/APK -->
<resourceCopies>
<isArch arch="armeabi-v7a">
<copyFile src="$S(PluginDir)/../ThirdParty/PXRPlugin/PXRPlugin/Lib/armeabi-v7a/libpxr_api.so"
dst="$S(BuildDir)/libs/armeabi-v7a/libpxr_api.so" />
</isArch>
<isArch arch="arm64-v8a">
<copyFile src="$S(PluginDir)/../ThirdParty/PXRPlugin/PXRPlugin/Lib/arm64-v8a/libpxr_api.so"
dst="$S(BuildDir)/libs/arm64-v8a/libpxr_api.so" />
</isArch>
<copyFile src="$S(PluginDir)/../ThirdParty/PXRPlugin/PXRPlugin/ExtLibs/libpxr_api.jar"
dst="$S(BuildDir)/libs/libpxr_plugin.jar" />
<copyFile src="$S(PluginDir)/../ThirdParty/PXRPlugin/PXRPlugin/ExtLibs/pvrjar.jar"
dst="$S(BuildDir)/libs/pvrjar.jar" />
<copyFile src="$S(BuildDir)/../../../pico_splash.png" dst="$S(BuildDir)/assets/pico_splash.png" />
</resourceCopies>
<!-- optional additions to the GameActivity imports in GameActivity.java -->
<gameActivityImportAdditions>
<insert>
import com.psmart.aosoperation.NativeVerfyInterface;
import android.app.Instrumentation;
import android.os.RemoteException;
import java.util.List;
import com.psmart.aosoperation.MRCCalibration;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.pxr.xrlib.PicovrSDK;
<!--import about Content Protect -->
import com.psmart.aosoperation.SysActivity;
</insert>
</gameActivityImportAdditions>
<!-- optional additions to the GameActivity class in GameActivity.java -->
<gameActivityClassAdditions>
<insert>
public boolean AndroidThunkJava_IsOculusMobileApplication()
{
return true;
}
<!--Override dispatchKeyEvent-->
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
int action = event.getAction();
if (event.getKeyCode()==1001)
{
keyRemappingSendFakeKeyEvent(action , 96);
}
return super.dispatchKeyEvent(event);
}
<!--Send the input event 96 to unreal engine-->
private static void keyRemappingSendFakeKeyEvent(final int action,final int keyCode) {
new Thread(new Runnable() {
public void run() {
try {
Instrumentation inst=new Instrumentation();
final long eventTime = SystemClock.uptimeMillis();
KeyEvent event =new KeyEvent(eventTime - 50, eventTime - 50, action, keyCode, 0, 0, 1001, 0, KeyEvent.FLAG_FROM_SYSTEM, InputDevice.SOURCE_GAMEPAD);
int id = event.getDeviceId();
inst.sendKeySync(event);
}
catch (Exception e) {}
}
}).start();
}
public void EnableContentProtect(boolean bEnable)
{
SysActivity.SetSecure(this, bEnable);
}
public String GetDeviceSN( )
{
return SysActivity.getDeviceSN();
}
public int GetPsensorState()
{
return SysActivity.getPsensorState();
}
public void VolumeUp()
{
SysActivity.pxr_UpAudio();
}
public void VolumeDown()
{
SysActivity.pxr_DownAudio();
}
public void SetVolume(int volume)
{
SysActivity.pxr_ChangeAudio(volume);
}
public int GetMaxVolumeNumber()
{
int maxV = SysActivity.pxr_GetMaxAudionumber();
Log.debug("========== PICOXR_UPL: Max system volume:" + maxV+" ==========");
return maxV;
}
public int GetCurrentVolume()
{
int currentV = SysActivity.pxr_GetAudionumber();
Log.debug("========== PICOXR_UPL: Current system volume:" + currentV+" ==========");
return currentV;
}
private String getNewProp(String property)
{
// first try SystemProperties reflection
try
{
java.lang.reflect.Method get = Class.forName("android.os.SystemProperties").getMethod("get", new Class[]{String.class});
String propValue = (String)get.invoke(null, property);
if (propValue != null)
{
return propValue;
}
return "";
}
catch (Exception e)
{
}
// fall back to getprop command
Process process = null;
BufferedReader reader = null;
String result = "";
try
{
process = new ProcessBuilder().command("/system/bin/getprop", property).redirectErrorStream(true).start();
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
result = (line == null) ? "" : line;
}
catch (Exception e)
{
}
if (reader != null)
{
try
{
reader.close();
}
catch (IOException e)
{
}
}
if (process != null)
{
process.destroy();
}
return result;
}
public String getPXRProductName()
{
return getNewProp("sys.pxr.product.name");
}
public int GetCurrentBrightness()
{
int currentB = SysActivity.pxr_GetScreen_Brightness(this.getApplicationContext());
Log.debug("========== PICOXR_UPL: Current screen brightness:" + currentB+" ==========");
return currentB;
}
private MRCCalibration mMRCCalibration = null;
public float[] MRCGetCalibrationData(String path)
{
return mMRCCalibration.readCalibrationData(path);
}
public int GetPxrRuntimeVersion()
{
String packageName="com.pico.xr.openxr_runtime";
PackageManager manager = this.getApplicationContext().getPackageManager();
int code = 0;
try
{
PackageInfo info = manager.getPackageInfo(packageName, 0);
if(info ==null)
{
return 0;
}
code = info.versionCode;
}
catch (PackageManager.NameNotFoundException e){}
return code;
}
public int GetHmdBatteryLevel()
{
return SysActivity.getHmdBatteryLevel(this);
}
public void StartApplication(String packageName)
{
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName);
if (launchIntent != null)
{
launchIntent.putExtra("enter_flag", 1);
startActivity(launchIntent);//null pointer check in case package name was not found
}
}
public String GetAndroidPackageName( )
{
return getApplicationContext().getPackageName();
}
</insert>
</gameActivityClassAdditions>
<!-- optional additions to GameActivity onCreate in GameActivity.java -->
<gameActivityOnCreateAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnCreateAdditions ==========");
PicovrSDK.setJniActivity();
SysActivity.pxr_InitAudioDevice(this.getApplicationContext());
mMRCCalibration = new MRCCalibration();
</insert>
</gameActivityOnCreateAdditions>
<!-- optional additions to GameActivity onDestroy in GameActivity.java -->
<gameActivityOnDestroyAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnDestroyAdditions ==========");
</insert>
</gameActivityOnDestroyAdditions>
<!-- optional additions to GameActivity onStart in GameActivity.java -->
<gameActivityOnStartAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnStartAdditions ==========");
</insert>
<if condition="bEnablePSensor">
<true>
<insert>
Log.debug("========== PICOXR_UPL: initPsensor! ==========");
SysActivity.initPsensor(this);
</insert>
</true>
</if>
</gameActivityOnStartAdditions>
<!-- optional additions to GameActivity onStop in GameActivity.java -->
<gameActivityOnStopAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnStopAdditions ==========");
</insert>
<if condition="bEnablePSensor">
<true>
<insert>
Log.debug("========== PICOXR_UPL: unregisterListener! ==========");
SysActivity.unregisterListener();
</insert>
</true>
</if>
</gameActivityOnStopAdditions>
<!-- optional additions to GameActivity onPause in GameActivity.java -->
<gameActivityOnPauseAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnPauseAdditions ==========");
</insert>
</gameActivityOnPauseAdditions>
<!-- optional additions to GameActivity onResume in GameActivity.java -->
<gameActivityOnResumeAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnResumeAdditions ==========");
</insert>
</gameActivityOnResumeAdditions>
<!-- optional additions to GameActivity onActivityResult in GameActivity.java -->
<gameActivityOnActivityResultAdditions>
<insert>
Log.debug("========== PICOXR_UPL:gameActivityOnActivityResultAdditions ==========");
</insert>
</gameActivityOnActivityResultAdditions>
<!-- optional libraries to load in GameActivity.java before libUE4.so -->
<soLoadLibrary>
</soLoadLibrary>
</root>