2019-12-26 15:32:37 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
/*=============================================================================
AndroidTargetDevice.h: Declares the AndroidTargetDevice class.
=============================================================================*/
# pragma once
2016-11-23 15:48:37 -05:00
# include "CoreTypes.h"
# include "Containers/UnrealString.h"
# include "Templates/SharedPointer.h"
# include "CoreMinimal.h"
2018-05-02 22:53:38 -04:00
# include "HAL/PlatformProcess.h"
2016-11-23 15:48:37 -05:00
class FAndroidTargetDevice ;
class FTargetDeviceId ;
class ITargetDevice ;
class ITargetPlatform ;
struct FTargetDeviceProcessInfo ;
enum class ETargetDeviceFeatures ;
enum class ETargetDeviceTypes ;
2014-03-14 14:13:41 -04:00
/**
* Type definition for shared pointers to instances of FAndroidTargetDevice.
*/
typedef TSharedPtr < class FAndroidTargetDevice , ESPMode : : ThreadSafe > FAndroidTargetDevicePtr ;
/**
* Type definition for shared references to instances of FAndroidTargetDevice.
*/
typedef TSharedRef < class FAndroidTargetDevice , ESPMode : : ThreadSafe > FAndroidTargetDeviceRef ;
2015-09-30 03:39:09 -04:00
/**
* Type definition for shared references to instances of FAndroidTargetDevice.
*/
typedef TSharedPtr < class FAndroidTargetDeviceOutput , ESPMode : : ThreadSafe > FAndroidTargetDeviceOutputPtr ;
2014-03-14 14:13:41 -04:00
/**
* Implements a Android target device.
*/
2014-09-30 23:41:01 -04:00
class FAndroidTargetDevice : public ITargetDevice
2014-03-14 14:13:41 -04:00
{
public :
/**
* Creates and initializes a new Android target device.
*
* @param InTargetPlatform - The target platform.
* @param InSerialNumber - The ADB serial number of the target device.
2020-03-02 11:26:01 -05:00
* @param InAndroidVariant - The variant of the Android platform, i.e. ETC2, DXT or ASTC.
2014-03-14 14:13:41 -04:00
*/
2014-09-30 23:41:01 -04:00
FAndroidTargetDevice ( const ITargetPlatform & InTargetPlatform , const FString & InSerialNumber , const FString & InAndroidVariant )
2014-03-14 14:13:41 -04:00
: AndroidVariant ( InAndroidVariant )
2014-09-30 23:41:01 -04:00
, bConnected ( false )
, bIsDeviceAuthorized ( false )
, AndroidSDKVersion ( INDEX_NONE )
2014-03-14 14:13:41 -04:00
, DeviceName ( InSerialNumber )
, Model ( InSerialNumber )
, SerialNumber ( InSerialNumber )
, TargetPlatform ( InTargetPlatform )
{ }
public :
/**
* Sets the device's connection state.
*
2014-09-30 23:41:01 -04:00
* @param bInConnected - Whether the device is connected.
2014-03-14 14:13:41 -04:00
*/
2014-09-30 23:41:01 -04:00
void SetConnected ( bool bInConnected )
2014-03-14 14:13:41 -04:00
{
2014-09-30 23:41:01 -04:00
bConnected = bInConnected ;
}
/**
* Sets the device's authorization state.
*
* @param bInConnected - Whether the device is authorized for USB communications.
*/
void SetAuthorized ( bool bInIsAuthorized )
{
bIsDeviceAuthorized = bInIsAuthorized ;
}
/**
* Sets the device's OS/SDK versions.
*
* @param InSDKVersion - Android SDK version of the device.
* @param InReleaseVersion - Android Release (human-readable) version of the device.
*/
void SetVersions ( int32 InSDKVersion , const FString & InReleaseVersion )
{
AndroidSDKVersion = InSDKVersion ;
AndroidVersionString = InReleaseVersion ;
2014-03-14 14:13:41 -04:00
}
/**
* Sets the device name.
*
* @param InDeviceName - The device name to set.
*/
2014-09-30 23:41:01 -04:00
void SetDeviceName ( const FString & InDeviceName )
2014-03-14 14:13:41 -04:00
{
DeviceName = InDeviceName ;
}
/**
* Sets the device name.
*
* @param InDeviceName - The device name to set.
*/
2014-09-30 23:41:01 -04:00
void SetModel ( const FString & InNodel )
2014-03-14 14:13:41 -04:00
{
Model = InNodel ;
}
2015-09-30 03:39:09 -04:00
FString GetSerialNumber ( ) const
{
return SerialNumber ;
}
2014-03-14 14:13:41 -04:00
public :
2015-09-14 09:25:39 -04:00
//~ Begin ITargetDevice Interface
2014-09-30 23:41:01 -04:00
virtual bool Connect ( ) override
2014-03-14 14:13:41 -04:00
{
return true ;
}
2014-09-30 23:41:01 -04:00
virtual void Disconnect ( ) override
2014-03-14 14:13:41 -04:00
{
2014-09-30 23:41:01 -04:00
}
2014-10-10 20:14:21 -04:00
virtual ETargetDeviceTypes GetDeviceType ( ) const override
2014-09-30 23:41:01 -04:00
{
//@TODO: How to distinguish between a Tablet and a Phone (or a TV microconsole, etc...), and is it important?
2014-03-14 14:13:41 -04:00
return ETargetDeviceTypes : : Tablet ;
}
2014-09-30 23:41:01 -04:00
virtual FTargetDeviceId GetId ( ) const override
2014-03-14 14:13:41 -04:00
{
return FTargetDeviceId ( TargetPlatform . PlatformName ( ) , SerialNumber ) ;
}
2014-09-30 23:41:01 -04:00
virtual FString GetName ( ) const override
2014-03-14 14:13:41 -04:00
{
2014-12-11 13:44:41 -05:00
// we need a unique name for all devices, so use human usable model name and the unique id
return FString : : Printf ( TEXT ( " %s (%s) " ) , * Model , * SerialNumber ) ;
2014-03-14 14:13:41 -04:00
}
2014-09-30 23:41:01 -04:00
virtual FString GetOperatingSystemName ( ) override ;
2014-03-14 14:13:41 -04:00
2014-06-13 06:14:46 -04:00
virtual int32 GetProcessSnapshot ( TArray < FTargetDeviceProcessInfo > & OutProcessInfos ) override ;
2014-03-14 14:13:41 -04:00
2014-06-13 06:14:46 -04:00
virtual const class ITargetPlatform & GetTargetPlatform ( ) const override
2014-03-14 14:13:41 -04:00
{
return TargetPlatform ;
}
2014-09-30 23:41:01 -04:00
virtual bool IsConnected ( ) override
2014-03-14 14:13:41 -04:00
{
2014-09-30 23:41:01 -04:00
return bConnected ;
2014-03-14 14:13:41 -04:00
}
2014-09-30 23:41:01 -04:00
virtual bool IsDefault ( ) const override
2014-03-14 14:13:41 -04:00
{
return true ;
}
2016-06-13 12:20:22 -04:00
virtual bool IsAuthorized ( ) const override
{
return bIsDeviceAuthorized ;
}
2014-09-30 23:41:01 -04:00
virtual bool PowerOff ( bool Force ) override ;
2014-03-14 14:13:41 -04:00
2014-09-30 23:41:01 -04:00
virtual bool PowerOn ( ) override
2014-03-14 14:13:41 -04:00
{
return true ;
}
2018-05-02 22:53:38 -04:00
// Return true if the devices can be grouped in an aggregate (All_<platform>_devices_on_<host>) proxy
virtual bool IsPlatformAggregated ( ) const override
{
return true ;
}
// the name of the aggregate (All_<platform>_devices_on_<host>) proxy
virtual FString GetAllDevicesName ( ) const override ;
// the default variant (texture compression) of the aggregate (All_<platform>_devices_on_<host>) proxy
virtual FName GetAllDevicesDefaultVariant ( ) const override
{
// The Android platform has an aggregate (All_<platform>_devices_on_<host>) entry in the Project Launcher
// Multi is the default texture format
return " Android_Multi " ;
}
2014-09-30 23:41:01 -04:00
virtual bool Reboot ( bool bReconnect = false ) override ;
2018-05-02 22:53:38 -04:00
virtual bool TerminateLaunchedProcess ( const FString & ProcessIdentifier ) override ;
2014-10-10 20:14:21 -04:00
virtual bool SupportsFeature ( ETargetDeviceFeatures Feature ) const override ;
2016-09-30 21:21:09 -04:00
virtual bool TerminateProcess ( const int64 ProcessId ) override ;
2014-10-01 14:45:23 -04:00
virtual void SetUserCredentials ( const FString & UserName , const FString & UserPassword ) override ;
virtual bool GetUserCredentials ( FString & OutUserName , FString & OutUserPassword ) override ;
2015-09-30 03:39:09 -04:00
virtual void ExecuteConsoleCommand ( const FString & ExecCommand ) const override ;
virtual ITargetDeviceOutputPtr CreateDeviceOutputRouter ( FOutputDevice * Output ) const override ;
2015-09-14 09:25:39 -04:00
//~ End ITargetDevice Interface
2014-03-14 14:13:41 -04:00
2015-09-30 03:39:09 -04:00
/** Full filename for ADB executable. */
static bool GetAdbFullFilename ( FString & OutFilename ) ;
2014-03-14 14:13:41 -04:00
protected :
/**
* Executes an SDK command with the specified command line on this device only using ADB.
*
* @param Params - The command line parameters.
* @param OutStdOut - Optional pointer to a string that will hold the command's output log.
* @param OutStdErr - Optional pointer to a string that will hold the error message, if any.
*
* @return true on success, false otherwise.
*/
bool ExecuteAdbCommand ( const FString & Params , FString * OutStdOut , FString * OutStdErr ) const ;
2019-01-29 08:56:46 -05:00
protected :
2014-03-14 14:13:41 -04:00
2020-03-02 11:26:01 -05:00
// The variant of the Android platform, i.e. ETC2, DXT or ASTC.
2014-03-14 14:13:41 -04:00
FString AndroidVariant ;
// Holds a flag indicating whether the device is currently connected.
2014-09-30 23:41:01 -04:00
bool bConnected ;
// Holds a flag indicating whether the device is USB comms authorized (if not, most other values aren't valid but we still want to show the device as detected but unready)
bool bIsDeviceAuthorized ;
// Holds the Android SDK version
int32 AndroidSDKVersion ;
// Holds the Android Release version string (e.g., "2.3" or "4.2.2")
FString AndroidVersionString ;
2014-03-14 14:13:41 -04:00
// Holds the device name.
FString DeviceName ;
// Holds the device model.
FString Model ;
// Holds the serial number (from ADB devices) of this target device.
FString SerialNumber ;
// Holds a reference to the device's target platform.
const ITargetPlatform & TargetPlatform ;
} ;
# include "AndroidTargetDevice.inl"