You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Sandbox/Plugins/ProjectSettingsTool/PlatformSettings_Android.cpp

268 lines
19 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include "ProjectSettingsTool_precompiled.h"
#include "PlatformSettings_Android.h"
#include "PlatformSettings_common.h"
#include "Validators.h"
namespace ProjectSettingsTool
{
static const char* defaultImageTooltip = "Default image used if a specific DPI override is not given.";
static void* xmlFunctor = reinterpret_cast<void*>(&SelectXmlFromFileDialog);
void AndroidIcons::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context);
if (serialize)
{
serialize->Class<AndroidIcons>()
->Version(1)
->Field("default", &AndroidIcons::m_default)
->Field("mdpi", &AndroidIcons::m_mdpi)
->Field("hdpi", &AndroidIcons::m_hdpi)
->Field("xhdpi", &AndroidIcons::m_xhdpi)
->Field("xxhdpi", &AndroidIcons::m_xxhdpi)
->Field("xxxhdpi", &AndroidIcons::m_xxxhdpi)
;
AZ::EditContext* editContext = serialize->GetEditContext();
if (editContext)
{
editContext->Class<AndroidIcons>("Icons", "All icon overrides for android.")
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_default, "Default", defaultImageTooltip)
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::PropertyIdentfier, Identfiers::AndroidIconDefault)
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_mdpi, "Medium Dpi (48px)", "")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PngImageSetSizeOrEmpty<48>))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidIcons, "mdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidIconDefault)
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_hdpi, "High Dpi (72px)", "")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PngImageSetSizeOrEmpty<72>))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidIcons, "hdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidIconDefault)
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_xhdpi, "XHigh Dpi (96px)", "")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PngImageSetSizeOrEmpty<96>))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidIcons, "xhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidIconDefault)
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_xxhdpi, "XXHigh Dpi (144px)", "")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PngImageSetSizeOrEmpty<144>))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidIcons, "xxhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidIconDefault)
->DataElement(Handlers::ImagePreview, &AndroidIcons::m_xxxhdpi, "XXXHigh Dpi (192px)", "")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PngImageSetSizeOrEmpty<192>))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidIcons, "xxxhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidIconDefault)
;
}
}
}
void AndroidLandscapeSplashscreens::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context);
if (serialize)
{
serialize->Class<AndroidLandscapeSplashscreens>()
->Version(1)
->Field("default", &AndroidLandscapeSplashscreens::m_default)
->Field("mdpi", &AndroidLandscapeSplashscreens::m_mdpi)
->Field("hdpi", &AndroidLandscapeSplashscreens::m_hdpi)
->Field("xhdpi", &AndroidLandscapeSplashscreens::m_xhdpi)
->Field("xxhdpi", &AndroidLandscapeSplashscreens::m_xxhdpi)
;
AZ::EditContext* editContext = serialize->GetEditContext();
if (editContext)
{
editContext->Class<AndroidLandscapeSplashscreens>("Landscape", "All landscape splashscreen overrides for Android.")
->DataElement(Handlers::ImagePreview, &AndroidLandscapeSplashscreens::m_default, "Default", defaultImageTooltip)
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::PropertyIdentfier, Identfiers::AndroidLandDefault)
->DataElement(Handlers::ImagePreview, &AndroidLandscapeSplashscreens::m_mdpi, "Medium Dpi", "Suggested 1024 x 640 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidLandscape, "mdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidLandDefault)
->DataElement(Handlers::ImagePreview, &AndroidLandscapeSplashscreens::m_hdpi, "High Dpi", "Suggested 1280 x 800 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidLandscape, "hdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidLandDefault)
->DataElement(Handlers::ImagePreview, &AndroidLandscapeSplashscreens::m_xhdpi, "XHigh Dpi", "Suggested 1920 x 1200 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidLandscape, "xhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidLandDefault)
->DataElement(Handlers::ImagePreview, &AndroidLandscapeSplashscreens::m_xxhdpi, "XXHigh Dpi", "Suggested 2560 x 1600 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidLandscape, "xxhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidLandDefault)
;
}
}
}
void AndroidPortraitSplashscreens::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context);
if (serialize)
{
serialize->Class<AndroidPortraitSplashscreens>()
->Version(1)
->Field("default", &AndroidPortraitSplashscreens::m_default)
->Field("mdpi", &AndroidPortraitSplashscreens::m_mdpi)
->Field("hdpi", &AndroidPortraitSplashscreens::m_hdpi)
->Field("xhdpi", &AndroidPortraitSplashscreens::m_xhdpi)
->Field("xxhdpi", &AndroidPortraitSplashscreens::m_xxhdpi)
;
AZ::EditContext* editContext = serialize->GetEditContext();
if (editContext)
{
editContext->Class<AndroidPortraitSplashscreens>("Portrait", "All portrait splashscreen overrides for Android.")
->DataElement(Handlers::ImagePreview, &AndroidPortraitSplashscreens::m_default, "Default", defaultImageTooltip)
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::PropertyIdentfier, Identfiers::AndroidPortDefault)
->DataElement(Handlers::ImagePreview, &AndroidPortraitSplashscreens::m_mdpi, "Medium Dpi", "Suggested 640 x 1024 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidPortrait, "mdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidPortDefault)
->DataElement(Handlers::ImagePreview, &AndroidPortraitSplashscreens::m_hdpi, "High Dpi", "Suggested 800 x 1280 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidPortrait, "hdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidPortDefault)
->DataElement(Handlers::ImagePreview, &AndroidPortraitSplashscreens::m_xhdpi, "XHigh Dpi", "Suggested 1200 x 1920 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidPortrait, "xhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidPortDefault)
->DataElement(Handlers::ImagePreview, &AndroidPortraitSplashscreens::m_xxhdpi, "XXHigh Dpi", "Suggested 1600 x 2560 png.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidPngOrEmpty))
->Attribute(Attributes::DefaultPath, GenDefaultImagePath(ImageGroup::AndroidPortrait, "xxhdpi"))
->Attribute(Attributes::DefaultImagePreview, Identfiers::AndroidPortDefault)
;
}
}
}
void AndroidSplashscreens::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context);
if (serialize)
{
AndroidLandscapeSplashscreens::Reflect(context);
AndroidPortraitSplashscreens::Reflect(context);
serialize->Class<AndroidSplashscreens>()
->Version(1)
->Field("land", &AndroidSplashscreens::m_landscapeSplashscreens)
->Field("port", &AndroidSplashscreens::m_portraitSplashscreens)
;
AZ::EditContext* editContext = serialize->GetEditContext();
if (editContext)
{
editContext->Class<AndroidSplashscreens>("Splashscreens", "All splashscreen overrides for Android.")
->DataElement(0, &AndroidSplashscreens::m_landscapeSplashscreens)
->DataElement(0, &AndroidSplashscreens::m_portraitSplashscreens)
;
}
}
}
void AndroidSettings::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context);
if (serialize)
{
AndroidIcons::Reflect(context);
AndroidSplashscreens::Reflect(context);
serialize->Class<AndroidSettings>()
->Version(1)
->Field("package_name", &AndroidSettings::m_packageName)
->Field("version_name", &AndroidSettings::m_versionName)
->Field("version_number", &AndroidSettings::m_versionNumber)
->Field("orientation", &AndroidSettings::m_orientation)
->Field("app_public_key", &AndroidSettings::m_appPublicKey)
->Field("app_obfuscator_salt", &AndroidSettings::m_appObfuscatorSalt)
->Field("rc_pak_job", &AndroidSettings::m_rcPakJob)
->Field("rc_obb_job", &AndroidSettings::m_rcObbJob)
->Field("use_main_obb", &AndroidSettings::m_useMainObb)
->Field("use_patch_obb", &AndroidSettings::m_usePatchObb)
->Field("enable_key_screen_on", &AndroidSettings::m_enableKeyScreenOn)
->Field("disable_immersive_mode", &AndroidSettings::m_disableImmersiveMode)
->Field("icons", &AndroidSettings::m_icons)
->Field("splash_screen", &AndroidSettings::m_splashscreens)
;
AZ::EditContext* editContext = serialize->GetEditContext();
if (editContext)
{
editContext->Class<AndroidSettings>("Android Settings", "All settings related to Android not already defined by base settings.")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)
->DataElement(Handlers::LinkedLineEdit, &AndroidSettings::m_packageName, "Package Name", "Android application package identifier. Used for generating the project specific Java activity class and in the AndroidManifest.xml. Must be in dot separated format.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PackageName))
->Attribute(Attributes::LinkOptional, true)
->Attribute(Attributes::PropertyIdentfier, Identfiers::AndroidPackageName)
->Attribute(Attributes::LinkedProperty, Identfiers::IosBundleIdentifer)
->DataElement(Handlers::LinkedLineEdit, &AndroidSettings::m_versionName, "Version Name", "Human readable version number. Used to set the \"android: versionName\" tag in the AndroidManifest.xml and ultimately what will be displayed in the App Store.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::IOSVersionNumber))
->Attribute(Attributes::LinkOptional, true)
->Attribute(Attributes::PropertyIdentfier, Identfiers::AndroidVersionName)
->Attribute(Attributes::LinkedProperty, Identfiers::IosVersionName)
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_versionNumber, "Version Number", "Internal application version number. Used to set the \"android:versionCode\" tag in the AndroidManifest.xml.")
->Attribute(AZ::Edit::Attributes::Min, 1)
->Attribute(AZ::Edit::Attributes::Max, Validators::maxAndroidVersion)
->DataElement(AZ::Edit::UIHandlers::ComboBox, &AndroidSettings::m_orientation, "Orientation", "Desired orientation of the Android application. Used to set the \"android:screenOrientation\" tag in the AndroidManifest.xml.")
->Attribute(AZ::Edit::Attributes::StringList, AZStd::vector<AZStd::string>
{
"landscape",
"portrait",
"reverseLandscape",
"reversePortrait",
"sensorLandscape",
"sensorPortrait",
"sensor",
"fullSensor",
"noSensor",
"userLandscape",
"userPortrait",
"user",
"fullUser",
"locked",
"behind",
"unspecified"
})
->DataElement(Handlers::LinkedLineEdit, &AndroidSettings::m_appPublicKey, "Public App Key", "The application license key provided by Google Play. Required for using APK expansion files or other Google Play Services.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::PublicAppKeyOrEmpty))
->Attribute(Attributes::Obfuscated, true)
->DataElement(Handlers::LinkedLineEdit, &AndroidSettings::m_appObfuscatorSalt, "App Obfuscation Salt", "Application specific salt value for (un)obfuscation when using APK expansion files.")
->Attribute(Attributes::Obfuscated, true)
->DataElement(Handlers::FileSelect, &AndroidSettings::m_rcPakJob, "Rc Job PAK Override", "Path to the RC job XML file used to override the normal PAK files generation used in release builds. Path must be relative to <build dir>.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidXmlOrEmpty))
->Attribute(Attributes::SelectFunction, xmlFunctor)
->DataElement(Handlers::FileSelect, &AndroidSettings::m_rcObbJob, "Rc Job APK Override", "Path to the RC job XML file used to override the normal APK Expansion file(s) generation used in release builds. Path must be relative to <build dir>.")
->Attribute(Attributes::FuncValidator, ConvertFunctorToVoid(&Validators::ValidXmlOrEmpty))
->Attribute(Attributes::SelectFunction, xmlFunctor)
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_useMainObb, "Use Main APK", "Specify if the \"Main\" APK Expansion file should be used.")
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_usePatchObb, "Use Patch APK", "Specify if the \"Patch\" APK Expansion file should be used.")
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_enableKeyScreenOn, "Enable Screen Wake Lock", "Enabled or disable the screen wake lock (device won't go to sleep while the application is running).")
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_disableImmersiveMode, "Disable Immersive Mode", "Disable hiding of top and bottom system bars.")
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_icons)
->DataElement(AZ::Edit::UIHandlers::Default, &AndroidSettings::m_splashscreens)
;
}
}
}
} // namespace ProjectSettingsTool