Files
UnrealEngineUWP/Engine/Plugins/Runtime/LocationServicesAndroidImpl/Source/LocationServicesAndroidImpl/LocationServicesAndroidImpl_UPL.xml
Jack Porter 1fdfd523ae Copying //UE4/Dev-Mobile to //UE4/Dev-Main (Source: //UE4/Dev-Mobile @ 3228013)
#lockdown Nick.Penwarden
#rb None

==========================
MAJOR FEATURES + CHANGES
==========================

Change 3156770 on 2016/10/10 by Allan.Bentham

	Fix VULKAN_ENABLE_API_DUMP build on android.

Change 3157838 on 2016/10/11 by Allan.Bentham

	Fix Vulkan API tracing on android.

Change 3170713 on 2016/10/21 by Steve.Cano

	Adding the "Optional Mobile Features BP Library" plugin to explose Blueprint functions for Sound Volume, Battery level, system temperature (only available on android), and Headphones being plugged in

	#jira UE-30896
	#android
	#ios
	#ue4

Change 3171064 on 2016/10/21 by Steve.Cano

	Plugins to provide a common interface and Android implemenation for providing access to GPS / Location data from Blueprints

	#ue4
	#android
	#jira UE-35917

Change 3171065 on 2016/10/21 by Steve.Cano

	IOS implementation of LocationServices plugin to provide access to location data in Blueprints

	#ue4
	#ios
	#jira UE-35917

Change 3181802 on 2016/11/01 by Steve.Cano

	Fix an issue introduced in CL 3170713 - Adding new config section to RequiredSections list so that we can generate projects successfully.

	#jira UE-30896
	#ios

Change 3181807 on 2016/11/01 by Steve.Cano

	Make sure to clear out references to our eglSurface when we destroy it, else we will try to set our context with an invalid surface.

	#jira UE-35004
	#android
	#ue4

Change 3184827 on 2016/11/03 by Allan.Bentham

	Do not HDR32 encode for views without view family.
	TranslucentAlphaOnly blend mode now works with encoding.
	#jira UE-37951

Change 3186684 on 2016/11/04 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3188693 on 2016/11/07 by Chris.Babcock

	Corrections to memory stats for Android
	#jira WEX-3760
	#ue4
	#android

Change 3191538 on 2016/11/09 by Allan.Bentham

	Mobile tonemapper can use CVarTonemapperOverride

Change 3192575 on 2016/11/09 by Chris.Babcock

	Support placing UE4Game files in ExternalFilesDir for automatic cleanup on uninstall for distribution packages
	#jira UEPLAT-1422
	#ue4
	#android

Change 3196231 on 2016/11/13 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3196538 on 2016/11/14 by Jack.Porter

	Fix issue where lighting would not build for the first editor session of projects defaulting to MobileHDR=false as HardwareTargetingModule didn't set cvars
	#jira UE-38507

Change 3198068 on 2016/11/15 by Dmitriy.Dyomin

	Fixed android console command sender to work with ADB version 1.0.36
	#jira UE-35171

Change 3200230 on 2016/11/16 by Jack.Porter

	Remove mosaic resolution limitation on ES3 devices
	#jira WEX-3119

Change 3201251 on 2016/11/16 by Chris.Babcock

	Fix Android compile error

Change 3203542 on 2016/11/18 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3205598 on 2016/11/21 by Dmitriy.Dyomin

	Fixed: Missing selection outline in editor ES2 preview
	#jira UE-6458

Change 3205622 on 2016/11/21 by Dmitriy.Dyomin

	Fix ES2 build error from CL# 3205598

Change 3207232 on 2016/11/22 by Dmitriy.Dyomin

	ES2 GLSL generated shader simplifications

Change 3208608 on 2016/11/23 by Dmitriy.Dyomin

	Fixed: Landscape Grasstype warning causes log spam when landscape is streamed in or out
	#jira UE-38694

Change 3209135 on 2016/11/23 by Alicia.Cano

	Packaging for iOS fails due to several invalid object type errors
	#jira UE-38431
	#ios

Change 3209822 on 2016/11/24 by Jack.Porter

	IWYU changes for LocationServicesBPLibrary

Change 3209824 on 2016/11/24 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3210264 on 2016/11/25 by Jack.Porter

	Fix unicode compile issue on Korean windows

Change 3210268 on 2016/11/25 by Jack.Porter

	IWYU and unicode fixes to Dev-Mobile

Change 3211800 on 2016/11/28 by Allan.Bentham

	Create and set PrimitiveSceneProxy->PrimitiveSceneInfo before SetTransform render thread command is enqueued. Avoids race condition with FPrimitiveSceneInfo's constructor which can occur on out-of-order CPUs.

Change 3212621 on 2016/11/28 by Jack.Porter

	More IWYU fixes.

Change 3213080 on 2016/11/29 by Allan.Bentham

	enable UseSingleSampleShadowFromStationaryLights on mobile.

	PR #2990: Fixes single sample shadows for mobile. (Contributed by kallehamalainen)

Change 3213164 on 2016/11/29 by Jack.Porter

	Win32 IWYU fix

Change 3213932 on 2016/11/29 by Chris.Babcock

	Fix handling of ETC2 filtering by Google Play Store (if only ETC2, require ES3.0+ but don't use texture filtering in manifest)
	#jira UE-39120
	#ue4
	#android

Change 3214563 on 2016/11/29 by Dmitriy.Dyomin

	Disable dynamic buffer discarding on Adreno330 (was casuing 10ms stalls on slate buffers update)

Change 3214571 on 2016/11/29 by Dmitriy.Dyomin

	Custom stencil on Mobile
	#jira UEMOB-183

Change 3214641 on 2016/11/30 by Dmitriy.Dyomin

	Disable distance culling when rendering image for world composition
	#jira UE-37754

Change 3214656 on 2016/11/30 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3218479 on 2016/12/01 by Jack.Porter

	Fix for Vulkan build error when using AutoSDK

Change 3218596 on 2016/12/02 by Dmitriy.Dyomin

	Fixed: Android split screen multiplayer does not function or render correctly
	#jira UE-35204

Change 3218874 on 2016/12/02 by Allan.Bentham

	Fix CSM shadow bug when ES3.1 + mobileHDR == false.
	Fix inverted culling when rendering shadow depths with mobilehdr == false
	#jira UE-39111

Change 3220911 on 2016/12/04 by Jack.Porter

	Fixed landscape duplicated GUID detection and crash when one of the landscapes is in a hidden streaming level

Change 3220935 on 2016/12/04 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3222831 on 2016/12/05 by Dmitriy.Dyomin

	Added support for MGD and Andreno profilers
	#jira UEMOB-184

Change 3222843 on 2016/12/05 by Jack.Porter

	Fixed bug caused by CL 3196538 causing r.MobileHDR to toggle and crash when opening render settings
	#jira UE-38507

Change 3222934 on 2016/12/06 by Jack.Porter

	Android graphics debugger text changes

Change 3223042 on 2016/12/06 by Dmitriy.Dyomin

	Fixed: missing GPU particles in LDR mode on device
	#jira UE-39363

Change 3223043 on 2016/12/06 by Jack.Porter

	Fixed logspam warnings from TcpMessaging launching on Android
	#jira UE-37895

Change 3223046 on 2016/12/06 by Allan.Bentham

	Move ES3.1 preview mode out of experimental.
	Add per device quality level preview to ES3.1 preview sub menu when project settings allow.

	#jira UEMOB-178

Change 3223113 on 2016/12/06 by Allan.Bentham

	changed MOBILE_EMULATION define for METAL_PROFILE on mac. fixes issues with editor primitive rendering with ES3.1 feature level preview.
	added -featureleveles2/31 commandline support to metalrhi.

Change 3223117 on 2016/12/06 by Allan.Bentham

	Initialise FPrimitiveSceneInfo::CachedReflectionCaptureProxies

Change 3223131 on 2016/12/06 by Allan.Bentham

	Fix translucency rendering when mobilehdr == false. (Disable mod shadows when mobilehdr == false.)
	#jira UE-38343

Change 3223162 on 2016/12/06 by Jack.Porter

	Disallow Absolute World Position with "excluding shader offset" on ES2
	#jra UE-25555

Change 3223204 on 2016/12/06 by Jack.Porter

	Fix for unable to save levels when landscape components with tessellation moved to another level
	#jira UE-39372

Change 3223677 on 2016/12/06 by Chris.Babcock

	Fix tabs

Change 3224139 on 2016/12/06 by Chris.Babcock

	Support modification of build.xml and add post import additions to GameActivity
	#jira UE-31372
	#PR #2440
	#ue4
	#android

Change 3224152 on 2016/12/06 by Chris.Babcock

	Add support for MadCatz C.T.R.L.R Android controller models
	#ue4
	#android

Change 3224162 on 2016/12/06 by Chris.Babcock

	Driver bug fix and using separate context for MediaPlayer14 (contributed by BrianHarris)
	#jira UE-35825
	#PR #2787
	#ue4
	#android

Change 3224581 on 2016/12/07 by Dmitriy.Dyomin

	Fixed black screen regression on iOS OpenGL
	Also now reporting shader compiler errors in iOS

Change 3224589 on 2016/12/07 by Allan.Bentham

	Increase mobile renderer's maximum CSM cascade limit to 4 and introduce max shadow cascade cvar for mobile which defaults to 2 retaining existing behaviour.
	#jira UEMOB-187

Change 3224774 on 2016/12/07 by Jack.Porter

	Added flags for mobile shader permutation reduction
	Renamed mobile lighting policies to better describe them
	Set flags to remove policies not used by SunTemple - saves 22MB package size on Android

	#jira: UEMOB-179

Change 3224782 on 2016/12/07 by Allan.Bentham

	Add project option to set maximum supported CSM cascades to mobile renderer.
	#jira UEMOB-187

Change 3224943 on 2016/12/07 by Dmitriy.Dyomin

	Metal iOS will use sRGB textures
	#jira UEMOB-189

Change 3225098 on 2016/12/07 by Dmitriy.Dyomin

	fix for compile error from 3224943

Change 3225188 on 2016/12/07 by Chris.Babcock

	Fix #includes in deferred Android OpenGL
	#jira UE-39440
	#ue4
	#android

Change 3226402 on 2016/12/07 by Dmitriy.Dyomin

	Fixed: wrong condition for r8 srgb on mac
	#jira UE-39471

Change 3226485 on 2016/12/08 by Dmitriy.Dyomin

	Fixed: Rendering Artifacts and invisible objects in Fortnite
	regression from nobile custom stencil changes
	#jira UE-39452, UE-39455

Change 3226637 on 2016/12/08 by Dmitriy.Dyomin

	Fixed: Odin Ensure Texture passed to ClearDepthStencil is not what is currently set as RenderTarget
	#jira UE-39482

Change 3226922 on 2016/12/08 by Jack.Porter

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

Change 3227353 on 2016/12/08 by Chris.Babcock

	Remove CopyVisualizers batch call again

Change 3228013 on 2016/12/08 By Chris.Babcock

	Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)

[CL 3228374 by Jack Porter in Main branch]
2016-12-08 22:53:00 -05:00

358 lines
11 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!--OnlineSubsystemGameCircle plugin additions-->
<root xmlns:android="http://schemas.android.com/apk/res/android">
<!-- init section is always evaluated once per architecture -->
<init>
<log text="LocationServicesAndroidImpl init"/>
<setBoolFromProperty result="bCoarseLocationEnabled" ini="Engine" section="/Script/LocationServicesAndroidEditor.LocationServicesAndroidSettings" property="bCoarseLocationEnabled" default="true"/>
<setBoolFromProperty result="bFineLocationEnabled" ini="Engine" section="/Script/LocationServicesAndroidEditor.LocationServicesAndroidSettings" property="bFineLocationEnabled" default="true"/>
<setBoolFromProperty result="bLocationUpdatesEnabled" ini="Engine" section="/Script/LocationServicesAndroidEditor.LocationServicesAndroidSettings" property="bLocationUpdatesEnabled" default="true"/>
</init>
<!-- updates applied to AndroidManifest.xml -->
<androidManifestUpdates>
<if condition="bCoarseLocationEnabled">
<true>
<addPermission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<addFeature android:name="android.hardware.location.network"/>
</true>
</if>
<if condition="bFineLocationEnabled">
<true>
<addPermission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<addFeature android:name="android.hardware.location.gps"/>
</true>
</if>
<if condition="bLocationUpdatesEnabled">
<true>
<addPermission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
</true>
</if>
</androidManifestUpdates>
<!-- GameActivity additions -->
<gameActivityImportAdditions>
<insert>
// Needed for Location Services
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.Criteria;
</insert>
</gameActivityImportAdditions>
<gameActivityClassAdditions>
<insert>
private int LocationServicesAccuracy;
private int LocationServicesPower;
private float LocationServicesUpdateFrequency;
private float LocationServicesMinDistance;
private Location LastReportedLocation = null;
private LocationListener LocationListen = null;
public boolean AndroidThunkJava_InitLocationServices(int Accuracy, float UpdateFrequency, float MinDistanceFilter)
{
Log.debug("AndroidThunkJava_InitLocationServices");
//translate the provided Accuracy into Criteria and Distance values
switch(Accuracy)
{
case 0: //LA_ThreeKilometers:
{
LocationServicesAccuracy = Criteria.ACCURACY_LOW;
LocationServicesPower = Criteria.POWER_LOW;
break;
}
case 1: //LA_OneKilometer:
{
LocationServicesAccuracy = Criteria.ACCURACY_LOW;
LocationServicesPower = Criteria.POWER_MEDIUM;
break;
}
case 2: //LA_HundredMeters:
{
LocationServicesAccuracy = Criteria.ACCURACY_MEDIUM;
LocationServicesPower = Criteria.POWER_MEDIUM;
break;
}
case 3: //LA_TenMeters:
{
LocationServicesAccuracy = Criteria.ACCURACY_HIGH;
LocationServicesPower = Criteria.POWER_MEDIUM;
break;
}
case 4: //LA_Best:
case 5: //LA_Navigation:
{
LocationServicesAccuracy = Criteria.ACCURACY_HIGH;
LocationServicesPower = Criteria.POWER_HIGH;
break;
}
default:
{
LocationServicesAccuracy = Criteria.ACCURACY_LOW;
LocationServicesPower = Criteria.POWER_LOW;
Log.debug("AndroidThunkJava_InitLocationServices - init with invalid Accuracy value: " + Accuracy + ", setting lowest defaults\n");
break;
}
}
LocationServicesMinDistance = MinDistanceFilter;
LocationServicesUpdateFrequency = UpdateFrequency;
return true;
}
public boolean AndroidThunkJava_StartLocationService()
{
Log.debug("AndroidThunkJava_StartLocationService");
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
if(locationManager != null)
{
LocationListen = new LocationListener()
{
public void onLocationChanged(Location location)
{
// Called when a new location is found by the network location provider. Save off the value for GetLastKnownLocation and send off an event
LastReportedLocation = location;
nativeHandleLocationChanged(LastReportedLocation.getTime(),
LastReportedLocation.getLongitude(),
LastReportedLocation.getLatitude(),
LastReportedLocation.getAccuracy(),
LastReportedLocation.getAltitude());
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
switch(status)
{
case LocationProvider.AVAILABLE:
Log.debug("onStatusChanged - " + provider + " available again\n");
break;
case LocationProvider.OUT_OF_SERVICE:
Log.debug("onStatusChanged - " + provider + " out of service\n");
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.debug("onStatusChanged - " + provider + " temporarily unavailable\n");
break;
}
}
public void onProviderEnabled(String provider)
{
Log.debug("onProviderEnabled: " + provider);
}
public void onProviderDisabled(String provider)
{
Log.debug("onProviderDisabled " + provider);
}
};
//requestLocationUpdates must run on main thread
_activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
try
{
LocationManager locationManager = (LocationManager) _activity.getSystemService(Context.LOCATION_SERVICE);
String providerName = GetBestLocationProvider();
locationManager.requestLocationUpdates(providerName, (long)LocationServicesUpdateFrequency, LocationServicesMinDistance, LocationListen);
}
catch (Exception e)
{
Log.debug("AndroidThunkJava_StartLocationService threw exception: " + e.getMessage());
e.printStackTrace();
}
}
});
return true;
}
else
{
Log.debug("No Location Manager found!");
return false;
}
}
private String GetBestLocationProvider()
{
LocationManager locationManager = (LocationManager) _activity.getSystemService(Context.LOCATION_SERVICE);
Criteria providerCriteria = new Criteria();
providerCriteria.setPowerRequirement(LocationServicesPower);
providerCriteria.setHorizontalAccuracy(LocationServicesAccuracy);
String providerName = locationManager.getBestProvider(providerCriteria, true);
Log.debug("GetBestLocationProvider - getBestProvider for provided criteria returned: " + providerName);
return providerName;
}
public boolean AndroidThunkJava_StopLocationService()
{
Log.debug("AndroidThunkJava_StopLocationService");
if(LocationListen == null)
{
Log.debug("AndroidThunkJava_StopLocationService failed = no previous LocationListener registered, have not started the service");
return false;
}
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
if(locationManager == null)
{
Log.debug("AndroidThunkJava_StopLocationService - No Location Manager found!");
return false;
}
locationManager.removeUpdates(LocationListen);
LocationListen = null;
return true;
}
public float[] AndroidThunkJava_GetLastKnownLocation()
{
Location lastLocation = null;
if(LastReportedLocation != null)
{
lastLocation = LastReportedLocation;
}
else
{
//if we haven't gotten an update about the location, try to fetch the LocationManager's last known location
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
if(locationManager != null)
{
try
{
String providerName = GetBestLocationProvider();
lastLocation = locationManager.getLastKnownLocation(providerName);
}
catch(Exception e) //in older APIs, isProviderEnabled will throw an exception if false...
{
Log.debug("AndroidThunkJava_GetLastKnownLocation threw exception: " + e.getMessage());
e.printStackTrace();
}
}
}
if(lastLocation == null)
{
return new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
}
else
{
return new float[]
{
(float)lastLocation.getTime(),
(float)lastLocation.getLongitude(),
(float)lastLocation.getLatitude(),
lastLocation.getAccuracy(),
0.0f, //no vertical accuracy on Android, just an overall value in horizontal
(float)lastLocation.getAltitude()
};
}
}
public boolean AndroidThunkJava_IsLocationAccuracyAvailable(int Accuracy)
{
int locationAccurcy;
int locationPower;
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(locationManager == null)
{
Log.debug("AndroidThunkJava_IsLocationAccuracyAvailable - no LocationManager found!");
return false;
}
switch(Accuracy)
{
case 0: //LA_ThreeKilometers:
{
locationAccurcy = Criteria.ACCURACY_LOW;
locationPower = Criteria.POWER_LOW;
break;
}
case 1: //LA_OneKilometer:
{
locationAccurcy = Criteria.ACCURACY_LOW;
locationPower = Criteria.POWER_MEDIUM;
break;
}
case 2: //LA_HundredMeters:
{
locationAccurcy = Criteria.ACCURACY_MEDIUM;
locationPower = Criteria.POWER_MEDIUM;
break;
}
case 3: //LA_TenMeters:
{
locationAccurcy = Criteria.ACCURACY_HIGH;
locationPower = Criteria.POWER_MEDIUM;
break;
}
case 4: //LA_Best:
case 5: //LA_Navigation:
{
locationAccurcy = Criteria.ACCURACY_HIGH;
locationPower = Criteria.POWER_HIGH;
break;
}
default:
{
Log.debug("AndroidThunkJava_IsLocationAccuracyAvailable - calling with invalid Accuracy value: " + Accuracy + "\n");
return false;
}
}
Criteria providerCriteria = new Criteria();
providerCriteria.setPowerRequirement(locationPower);
providerCriteria.setHorizontalAccuracy(locationAccurcy);
String providerName = locationManager.getBestProvider(providerCriteria, true);
return locationManager.isProviderEnabled(providerName);
}
public boolean AndroidThunkJava_IsLocationServiceEnabled()
{
try
{
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(locationManager != null)
{
//return true if either provider is available
return locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
}
catch(Exception e) //in older APIs, isProviderEnabled will throw an exception if false...
{
Log.debug("AndroidThunkJava_IsLocationServiceEnabled threw exception: " + e.getMessage());
e.printStackTrace();
}
return false;
}
public native void nativeHandleLocationChanged(long time, double longitude, double latitude, float accuracy, double altitude);
</insert>
</gameActivityClassAdditions>
</root>