// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. /*============================================================================= AndroidTargetDevice.h: Declares the AndroidTargetDevice class. =============================================================================*/ #pragma once /** * Type definition for shared pointers to instances of FAndroidTargetDevice. */ typedef TSharedPtr FAndroidTargetDevicePtr; /** * Type definition for shared references to instances of FAndroidTargetDevice. */ typedef TSharedRef FAndroidTargetDeviceRef; /** * Implements a Android target device. */ class FAndroidTargetDevice : public ITargetDevice { public: /** * Creates and initializes a new Android target device. * * @param InTargetPlatform - The target platform. * @param InSerialNumber - The ADB serial number of the target device. * @param InAndroidVariant - The variant of the Android platform, i.e. ATC, DXT or PVRTC. */ FAndroidTargetDevice(const ITargetPlatform& InTargetPlatform, const FString& InSerialNumber, const FString& InAndroidVariant) : AndroidVariant(InAndroidVariant) , bConnected(false) , bIsDeviceAuthorized(false) , AndroidSDKVersion(INDEX_NONE) , DeviceName(InSerialNumber) , Model(InSerialNumber) , SerialNumber(InSerialNumber) , TargetPlatform(InTargetPlatform) { } public: /** * Sets the device's connection state. * * @param bInConnected - Whether the device is connected. */ void SetConnected(bool bInConnected) { 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; } /** * Sets the device name. * * @param InDeviceName - The device name to set. */ void SetDeviceName(const FString& InDeviceName) { DeviceName = InDeviceName; } /** * Sets the device name. * * @param InDeviceName - The device name to set. */ void SetModel(const FString& InNodel) { Model = InNodel; } public: // Begin ITargetDevice interface virtual bool Connect() override { return true; } virtual bool Deploy(const FString& SourceFolder, FString& OutAppId) override; virtual void Disconnect() override { } virtual ETargetDeviceTypes GetDeviceType() const override { //@TODO: How to distinguish between a Tablet and a Phone (or a TV microconsole, etc...), and is it important? return ETargetDeviceTypes::Tablet; } virtual FTargetDeviceId GetId() const override { return FTargetDeviceId(TargetPlatform.PlatformName(), SerialNumber); } virtual FString GetName() const override { if (AndroidVariant.IsEmpty()) { //return DeviceName; return Model; } //return FString::Printf(TEXT("%s (%s)"), *DeviceName, *AndroidVariant); return FString::Printf(TEXT("%s (%s)"), *Model, *AndroidVariant); } virtual FString GetOperatingSystemName() override; virtual int32 GetProcessSnapshot( TArray& OutProcessInfos ) override; virtual const class ITargetPlatform& GetTargetPlatform( ) const override { return TargetPlatform; } virtual bool IsConnected() override { return bConnected; } virtual bool IsDefault() const override { return true; } virtual bool PowerOff(bool Force) override; virtual bool PowerOn() override { return true; } virtual bool Launch(const FString& AppId, EBuildConfigurations::Type BuildConfiguration, EBuildTargets::Type BuildTarget, const FString& Params, uint32* OutProcessId); virtual bool Reboot(bool bReconnect = false) override; virtual bool Run(const FString& ExecutablePath, const FString& Params, uint32* OutProcessId) override; virtual bool SupportsFeature(ETargetDeviceFeatures Feature) const override; virtual bool SupportsSdkVersion(const FString& VersionString) const override; virtual bool TerminateProcess(const int32 ProcessId) override; virtual void SetUserCredentials(const FString& UserName, const FString& UserPassword) override; virtual bool GetUserCredentials(FString& OutUserName, FString& OutUserPassword) override; // End ITargetDevice interface 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; private: // The variant of the Android platform, i.e. ATC, DXT or PVRTC. FString AndroidVariant; // Holds a flag indicating whether the device is currently connected. 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; // 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"