From 3cd308a6a8cfff57fa721aa9ca0c6973176c4535 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Wed, 20 Dec 2023 22:55:25 -0500 Subject: [PATCH 01/12] Convert string literals to constant. --- src/lime/tools/ConfigData.hx | 48 +++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index 7520169d5..6d49d45f4 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -9,6 +9,8 @@ import haxe.xml.Fast as Access; abstract ConfigData(Dynamic) to Dynamic from Dynamic { + private static inline var ARRAY:String = "___array"; + public function new() { this = {}; @@ -87,7 +89,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (tree.length <= 1) { - array = Reflect.field(this, id + "___array"); + array = Reflect.field(this, id + ARRAY); if (array == null && Reflect.hasField(this, id)) { @@ -111,7 +113,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (current != null) { - array = Reflect.field(current, field + "___array"); + array = Reflect.field(current, field + ARRAY); if (array == null && Reflect.hasField(current, field)) { @@ -227,7 +229,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { for (field in Reflect.fields(source)) { - if (StringTools.endsWith(field, "___array")) + if (StringTools.endsWith(field, ARRAY)) { continue; } @@ -257,17 +259,17 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (doCopy && Reflect.field(source, field) != Reflect.field(destination, field) && typeSource != "TObject") { - if (!Reflect.hasField(destination, field + "___array")) + if (!Reflect.hasField(destination, field + ARRAY)) { - Reflect.setField(destination, field + "___array", [ObjectTools.deepCopy(Reflect.field(destination, field))]); + Reflect.setField(destination, field + ARRAY, [ObjectTools.deepCopy(Reflect.field(destination, field))]); } - var array:Array = Reflect.field(destination, field + "___array"); + var array:Array = Reflect.field(destination, field + ARRAY); - if (Reflect.hasField(source, field + "___array")) + if (Reflect.hasField(source, field + ARRAY)) { - array = array.concat(Reflect.field(source, field + "___array")); - Reflect.setField(destination, field + "___array", array); + array = array.concat(Reflect.field(source, field + ARRAY)); + Reflect.setField(destination, field + ARRAY, array); } else { @@ -289,9 +291,9 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { Reflect.setField(destination, field, Reflect.field(source, field)); - if (Reflect.hasField(source, field + "___array")) + if (Reflect.hasField(source, field + ARRAY)) { - Reflect.setField(destination, field + "___array", Reflect.field(source, field + "___array")); + Reflect.setField(destination, field + ARRAY, Reflect.field(source, field + ARRAY)); } } } @@ -353,12 +355,12 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (Reflect.hasField(bucket, child.name)) { - if (!Reflect.hasField(bucket, child.name + "___array")) + if (!Reflect.hasField(bucket, child.name + ARRAY)) { - Reflect.setField(bucket, child.name + "___array", [ObjectTools.deepCopy(Reflect.field(bucket, child.name))]); + Reflect.setField(bucket, child.name + ARRAY, [ObjectTools.deepCopy(Reflect.field(bucket, child.name))]); } - var array:Array = Reflect.field(bucket, child.name + "___array"); + var array:Array = Reflect.field(bucket, child.name + ARRAY); var arrayBucket = {}; array.push(arrayBucket); @@ -418,12 +420,12 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (Reflect.hasField(this, id)) { - if (!Reflect.hasField(this, id + "___array")) + if (!Reflect.hasField(this, id + ARRAY)) { - Reflect.setField(this, id + "___array", Reflect.hasField(this, id) ? [ObjectTools.deepCopy(Reflect.field(this, id))] : []); + Reflect.setField(this, id + ARRAY, Reflect.hasField(this, id) ? [ObjectTools.deepCopy(Reflect.field(this, id))] : []); } - var array:Array = Reflect.field(this, id + "___array"); + var array:Array = Reflect.field(this, id + ARRAY); array.push(value); } @@ -454,12 +456,12 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (Reflect.hasField(current, field)) { - if (!Reflect.hasField(current, field + "___array")) + if (!Reflect.hasField(current, field + ARRAY)) { - Reflect.setField(current, field + "___array", Reflect.hasField(current, field) ? [ObjectTools.deepCopy(Reflect.field(current, field))] : []); + Reflect.setField(current, field + ARRAY, Reflect.hasField(current, field) ? [ObjectTools.deepCopy(Reflect.field(current, field))] : []); } - var array:Array = Reflect.field(current, field + "___array"); + var array:Array = Reflect.field(current, field + ARRAY); array.push(value); } @@ -525,12 +527,12 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (typeSource != "TObject") { - if (!Reflect.hasField(bucket, node + "___array")) + if (!Reflect.hasField(bucket, node + ARRAY)) { - Reflect.setField(bucket, node + "___array", [ObjectTools.deepCopy(Reflect.field(bucket, node))]); + Reflect.setField(bucket, node + ARRAY, [ObjectTools.deepCopy(Reflect.field(bucket, node))]); } - cast(Reflect.field(bucket, node + "___array"), Array).push(value); + cast(Reflect.field(bucket, node + ARRAY), Array).push(value); } Reflect.setField(bucket, node, value); From ca3012b877ce4ded0043a9610dbe127c9dbb99e9 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Wed, 20 Dec 2023 23:03:02 -0500 Subject: [PATCH 02/12] Convert single to double quotes. The convention, according to haxe-checkstyle, is to use double quotes unless single quotes are specifically required. --- src/lime/tools/ConfigData.hx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index 6d49d45f4..4109f539c 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -34,7 +34,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function exists(id:String):Bool { - var tree = id.split('.'); + var tree = id.split("."); if (tree.length <= 1) { @@ -60,7 +60,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function get(id:String):ConfigData { - var tree = id.split('.'); + var tree = id.split("."); if (tree.length <= 1) { @@ -84,7 +84,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function getArray(id:String, defaultValue:Array = null):Array { - var tree = id.split('.'); + var tree = id.split("."); var array:Array = null; if (tree.length <= 1) @@ -307,7 +307,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (StringTools.startsWith(elem.name, "config:")) { - var items = elem.name.split(':'); + var items = elem.name.split(":"); bucketType = items[1]; } @@ -414,7 +414,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function push(id:String, value:Dynamic):Void { - var tree = id.split('.'); + var tree = id.split("."); if (tree.length <= 1) { @@ -470,7 +470,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function set(id:String, value:Dynamic):Void { - var tree = id.split('.'); + var tree = id.split("."); if (tree.length <= 1) { From 15e6dc5050a433dd5e3b61d7ed91329f75e092a5 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 01:14:57 -0500 Subject: [PATCH 03/12] Remove duplicate code in `ConfigData`. --- src/lime/tools/ConfigData.hx | 92 ++++++------------------------------ 1 file changed, 14 insertions(+), 78 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index 4109f539c..b6cafa33b 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -34,39 +34,12 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function exists(id:String):Bool { - var tree = id.split("."); - - if (tree.length <= 1) - { - return Reflect.hasField(this, id); - } - - var current = this; - - for (leaf in tree) - { - if (Reflect.hasField(current, leaf)) - { - current = Reflect.field(current, leaf); - } - else - { - return false; - } - } - - return true; + return get(id) != null; } public function get(id:String):ConfigData { var tree = id.split("."); - - if (tree.length <= 1) - { - return Reflect.field(this, id); - } - var current = this; for (leaf in tree) @@ -87,38 +60,26 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic var tree = id.split("."); var array:Array = null; - if (tree.length <= 1) - { - array = Reflect.field(this, id + ARRAY); + var current = this; + var field = tree.pop(); - if (array == null && Reflect.hasField(this, id)) + for (leaf in tree) + { + current = Reflect.field(current, leaf); + + if (current == null) { - array = [Reflect.field(this, id)]; + break; } } - else + + if (current != null) { - var current = this; - var field = tree.pop(); + array = Reflect.field(current, field + ARRAY); - for (leaf in tree) + if (array == null && Reflect.hasField(current, field)) { - current = Reflect.field(current, leaf); - - if (current == null) - { - break; - } - } - - if (current != null) - { - array = Reflect.field(current, field + ARRAY); - - if (array == null && Reflect.hasField(current, field)) - { - array = [Reflect.field(current, field)]; - } + array = [Reflect.field(current, field)]; } } @@ -415,24 +376,6 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function push(id:String, value:Dynamic):Void { var tree = id.split("."); - - if (tree.length <= 1) - { - if (Reflect.hasField(this, id)) - { - if (!Reflect.hasField(this, id + ARRAY)) - { - Reflect.setField(this, id + ARRAY, Reflect.hasField(this, id) ? [ObjectTools.deepCopy(Reflect.field(this, id))] : []); - } - - var array:Array = Reflect.field(this, id + ARRAY); - array.push(value); - } - - Reflect.setField(this, id, value); - return; - } - var current = this; var field = tree.pop(); @@ -471,13 +414,6 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic public function set(id:String, value:Dynamic):Void { var tree = id.split("."); - - if (tree.length <= 1) - { - Reflect.setField(this, id, value); - return; - } - var current = this; var field = tree.pop(); From 8d3d1232660a5442a5a3ac6a185485f39fed14dd Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 17:18:54 -0500 Subject: [PATCH 04/12] Add `unique` parameter to `ConfigData.push()`. --- src/lime/tools/ConfigData.hx | 15 ++++++++++----- src/lime/tools/ProjectXMLParser.hx | 17 ++--------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index b6cafa33b..8e8ab7d12 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -373,7 +373,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic } } - public function push(id:String, value:Dynamic):Void + public function push(id:String, value:Dynamic, ?unique:Bool = false):Void { var tree = id.split("."); var current = this; @@ -399,13 +399,18 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (Reflect.hasField(current, field)) { - if (!Reflect.hasField(current, field + ARRAY)) + var array:Array = Reflect.field(current, field + ARRAY); + + if (array == null) { - Reflect.setField(current, field + ARRAY, Reflect.hasField(current, field) ? [ObjectTools.deepCopy(Reflect.field(current, field))] : []); + array = [ObjectTools.deepCopy(Reflect.field(current, field))]; + Reflect.setField(current, field + ARRAY, array); } - var array:Array = Reflect.field(current, field + ARRAY); - array.push(value); + if (array.indexOf(value) == -1) + { + array.push(value); + } } Reflect.setField(current, field, value); diff --git a/src/lime/tools/ProjectXMLParser.hx b/src/lime/tools/ProjectXMLParser.hx index 6f6bc7dc1..611b4c6a7 100644 --- a/src/lime/tools/ProjectXMLParser.hx +++ b/src/lime/tools/ProjectXMLParser.hx @@ -1797,21 +1797,8 @@ class ProjectXMLParser extends HXProject case "install-location": config.set("android.install-location", value); - case "extension": - var extensions = config.getArrayString("android.extension"); - - if (extensions == null || extensions.indexOf(value) == -1) - { - config.push("android.extension", value); - } - - case "permission": - var permissions = config.getArrayString("android.permission"); - - if (permissions == null || permissions.indexOf(value) == -1) - { - config.push("android.permission", value); - } + case "extension", "permission": + config.push("android." + name, value, true); case "gradle-version": config.set("android.gradle-version", value); From 8bdd93753db9ecc6e8b18866c4d26970307d84bc Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 19:52:02 -0500 Subject: [PATCH 05/12] Standardize `ConfigData`'s array logic. --- src/lime/tools/ConfigData.hx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index 8e8ab7d12..8a2cb77b7 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -316,12 +316,13 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic if (Reflect.hasField(bucket, child.name)) { - if (!Reflect.hasField(bucket, child.name + ARRAY)) + var array:Array = Reflect.field(bucket, child.name + ARRAY); + if (array == null) { - Reflect.setField(bucket, child.name + ARRAY, [ObjectTools.deepCopy(Reflect.field(bucket, child.name))]); + array = [ObjectTools.deepCopy(Reflect.field(bucket, child.name))]; + Reflect.setField(bucket, child.name + ARRAY, array); } - var array:Array = Reflect.field(bucket, child.name + ARRAY); var arrayBucket = {}; array.push(arrayBucket); @@ -468,12 +469,14 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (typeSource != "TObject") { - if (!Reflect.hasField(bucket, node + ARRAY)) + var array:Array = Reflect.field(bucket, node + ARRAY); + if (array == null) { - Reflect.setField(bucket, node + ARRAY, [ObjectTools.deepCopy(Reflect.field(bucket, node))]); + array = [ObjectTools.deepCopy(Reflect.field(bucket, node))]; + Reflect.setField(bucket, node + ARRAY, array); } - cast(Reflect.field(bucket, node + ARRAY), Array).push(value); + array.push(value); } Reflect.setField(bucket, node, value); From b0c7025e45f62033d4fc633bf8565aca6ecac159 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 22:12:14 -0500 Subject: [PATCH 06/12] Simplify permissions in AndroidManifest.xml. `AndroidPlatform` provides a default value, so the array will never be null. --- templates/android/template/app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/android/template/app/src/main/AndroidManifest.xml b/templates/android/template/app/src/main/AndroidManifest.xml index af4261bf9..96ea485fb 100644 --- a/templates/android/template/app/src/main/AndroidManifest.xml +++ b/templates/android/template/app/src/main/AndroidManifest.xml @@ -4,8 +4,8 @@ - ::if (ANDROID_PERMISSIONS != null)::::foreach ANDROID_PERMISSIONS:: - ::end::::end:: + ::foreach ANDROID_PERMISSIONS:: + ::end:: =30):: android:allowNativeHeapPointerTagging="false" ::end::> From 60064f55b38381bf04c798dd6ca6bd6c5d82f0c1 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 22:30:58 -0500 Subject: [PATCH 07/12] Make AndroidManifest.xml more configurable. Now if you need to add something to the `` or `` tags, you can do it from project.xml. This will require new documentation, however. --- src/lime/tools/ConfigData.hx | 26 ++++++++++++++ .../template/app/src/main/AndroidManifest.xml | 4 +-- tools/platforms/AndroidPlatform.hx | 34 +++++++++++++++++-- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index 8a2cb77b7..f1cd623bd 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -170,6 +170,32 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic return defaultValue; } + public function getKeyValueArray(id:String, defaultValues:Dynamic = null):Array<{ key:Dynamic, value:Dynamic }> + { + var values = {}; + if (defaultValues != null) + { + ObjectTools.copyFields(defaultValues, values); + } + + var data = get(id); + for (key in Reflect.fields(data)) + { + if (!StringTools.endsWith (key, ARRAY)) + { + Reflect.setField(values, key, Reflect.field(data, key)); + } + } + + var pairs = []; + for (key in Reflect.fields(values)) + { + pairs.push({ key: key, value: Reflect.field(values, key) }); + } + + return pairs; + } + private function log(v:Dynamic):Void { if (Log.verbose) diff --git a/templates/android/template/app/src/main/AndroidManifest.xml b/templates/android/template/app/src/main/AndroidManifest.xml index 96ea485fb..e605036cf 100644 --- a/templates/android/template/app/src/main/AndroidManifest.xml +++ b/templates/android/template/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ ::foreach ANDROID_PERMISSIONS:: ::end:: - =30):: android:allowNativeHeapPointerTagging="false" ::end::> + ::if (WIN_ORIENTATION=="portrait"):: @@ -17,7 +17,7 @@ ::end:: - + diff --git a/tools/platforms/AndroidPlatform.hx b/tools/platforms/AndroidPlatform.hx index 9372437ee..28a4c5514 100644 --- a/tools/platforms/AndroidPlatform.hx +++ b/tools/platforms/AndroidPlatform.hx @@ -464,6 +464,22 @@ class AndroidPlatform extends PlatformTarget context.ANDROID_USE_ANDROIDX = project.config.getString("android.useAndroidX", "true"); context.ANDROID_ENABLE_JETIFIER = project.config.getString("android.enableJetifier", "false"); + context.ANDROID_APPLICATION = project.config.getKeyValueArray("android.application", { + "android:label": project.meta.title, + "android:allowBackup": "true", + "android:theme": "@android:style/Theme.NoTitleBar" + (project.window.fullscreen ? ".Fullscreen" : null), + "android:hardwareAccelerated": "true", + "android:allowNativeHeapPointerTagging": context.ANDROID_TARGET_SDK_VERSION >= 30 ? "false" : null + }); + context.ANDROID_ACTIVITY = project.config.getKeyValueArray("android.activity", { + "android:name": "MainActivity", + "android:exported": "true", + "android:launchMode": "singleTask", + "android:label": project.meta.title, + "android:configChanges": project.config.getArrayString("android.configChanges", ["keyboardHidden", "orientation", "screenSize", "screenLayout", "uiMode"]).join("|"), + "android:screenOrientation": project.window.orientation == PORTRAIT ? "sensorPortrait" : (project.window.orientation == LANDSCAPE ? "sensorLandscape" : null) + }); + context.ANDROID_LIBRARY_PROJECTS = []; if (!project.environment.exists("ANDROID_SDK") || !project.environment.exists("ANDROID_NDK_ROOT")) @@ -531,12 +547,24 @@ class AndroidPlatform extends PlatformTarget { icons = [new Icon(System.findTemplate(project.templatePaths, "default/icon.svg"))]; } - for (i in 0...iconTypes.length) { - if (IconHelper.createIcon(icons, iconSizes[i], iconSizes[i], sourceSet + "/res/drawable-" + iconTypes[i] + "/icon.png")) + if (IconHelper.createIcon(icons, iconSizes[i], iconSizes[i], sourceSet + "/res/drawable-" + iconTypes[i] + "/icon.png") && context.HAS_ICON == null) { - context.HAS_ICON = true; + for (attribute in context.ANDROID_APPLICATION) + { + if (attribute.key == "android:icon") + { + context.HAS_ICON = false; + break; + } + } + + if (context.HAS_ICON == null) + { + context.HAS_ICON = true; + context.ANDROID_APPLICATION.push({ key: "android:icon", value: "@drawable/icon" }); + } } } From cb03d9cd9a61f4ff5a017c007bc46b1fd0d373b7 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 22:31:58 -0500 Subject: [PATCH 08/12] Move variable to where it's used. --- tools/platforms/AndroidPlatform.hx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/platforms/AndroidPlatform.hx b/tools/platforms/AndroidPlatform.hx index 28a4c5514..b9a3cde79 100644 --- a/tools/platforms/AndroidPlatform.hx +++ b/tools/platforms/AndroidPlatform.hx @@ -480,8 +480,6 @@ class AndroidPlatform extends PlatformTarget "android:screenOrientation": project.window.orientation == PORTRAIT ? "sensorPortrait" : (project.window.orientation == LANDSCAPE ? "sensorLandscape" : null) }); - context.ANDROID_LIBRARY_PROJECTS = []; - if (!project.environment.exists("ANDROID_SDK") || !project.environment.exists("ANDROID_NDK_ROOT")) { var command = #if lime "lime" #else "hxp" #end; @@ -516,6 +514,7 @@ class AndroidPlatform extends PlatformTarget "KEY_STORE_ALIAS_PASSWORD")) context.KEY_STORE_ALIAS_PASSWORD = StringTools.replace(context.KEY_STORE_ALIAS_PASSWORD, "\\", "\\\\"); var index = 1; + context.ANDROID_LIBRARY_PROJECTS = []; for (dependency in project.dependencies) { From f0a040727c5054eff9c230c96f4eba6b8d5af46f Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 22:46:13 -0500 Subject: [PATCH 09/12] Allow clearing attributes by passing "". project.xml can't pass `null`, so this seems like the next best thing. --- templates/android/template/app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/android/template/app/src/main/AndroidManifest.xml b/templates/android/template/app/src/main/AndroidManifest.xml index e605036cf..a856594c6 100644 --- a/templates/android/template/app/src/main/AndroidManifest.xml +++ b/templates/android/template/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ ::foreach ANDROID_PERMISSIONS:: ::end:: - + ::if (WIN_ORIENTATION=="portrait"):: @@ -17,7 +17,7 @@ ::end:: - + From 2f8da1d39d2aa661a4038f164d15bdd0ad751534 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Thu, 21 Dec 2023 23:01:37 -0500 Subject: [PATCH 10/12] Remove excess whitespace from AndroidManifest.xml. Grouping these blocks makes logical sense, and makes the output a bit prettier. Win-win. --- .../android/template/app/src/main/AndroidManifest.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/templates/android/template/app/src/main/AndroidManifest.xml b/templates/android/template/app/src/main/AndroidManifest.xml index a856594c6..501db19f7 100644 --- a/templates/android/template/app/src/main/AndroidManifest.xml +++ b/templates/android/template/app/src/main/AndroidManifest.xml @@ -10,11 +10,9 @@ ::if (WIN_ORIENTATION=="portrait"):: - - ::end:: - - ::if (WIN_ORIENTATION=="landscape"):: - + + ::elseif (WIN_ORIENTATION=="landscape"):: + ::end:: From d0e5eab1c5b1343dbb069234692b0fb2ec7bf824 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Sun, 14 Jan 2024 11:55:44 -0500 Subject: [PATCH 11/12] Bug fix: `unique` argument was never checked. Now it's once again possible to pass multiple copies of linker flags! I don't know why you'd want to do that. --- src/lime/tools/ConfigData.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/tools/ConfigData.hx b/src/lime/tools/ConfigData.hx index f1cd623bd..d86981420 100644 --- a/src/lime/tools/ConfigData.hx +++ b/src/lime/tools/ConfigData.hx @@ -434,7 +434,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic Reflect.setField(current, field + ARRAY, array); } - if (array.indexOf(value) == -1) + if (!unique || array.indexOf(value) == -1) { array.push(value); } From 09724f4bcaad439597b8532fa1f3b828a23facc9 Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Sun, 14 Jan 2024 12:18:42 -0500 Subject: [PATCH 12/12] Fix `HAS_ICON` logic on Android. If an icon already exists, we still want `HAS_ICON` to be true, but we also want to avoid adding even more icons. --- tools/platforms/AndroidPlatform.hx | 44 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/tools/platforms/AndroidPlatform.hx b/tools/platforms/AndroidPlatform.hx index 38b48906c..1e864f778 100644 --- a/tools/platforms/AndroidPlatform.hx +++ b/tools/platforms/AndroidPlatform.hx @@ -543,36 +543,38 @@ class AndroidPlatform extends PlatformTarget } } - var iconTypes = ["ldpi", "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"]; - var iconSizes = [36, 48, 72, 96, 144, 192]; - var icons = project.icons; - - if (icons.length == 0) + for (attribute in context.ANDROID_APPLICATION) { - icons = [new Icon(System.findTemplate(project.templatePaths, "default/icon.svg"))]; - } - for (i in 0...iconTypes.length) - { - if (IconHelper.createIcon(icons, iconSizes[i], iconSizes[i], sourceSet + "/res/drawable-" + iconTypes[i] + "/icon.png") && context.HAS_ICON == null) + if (attribute.key == "android:icon") { - for (attribute in context.ANDROID_APPLICATION) - { - if (attribute.key == "android:icon") - { - context.HAS_ICON = false; - break; - } - } + context.HAS_ICON = true; + break; + } + } - if (context.HAS_ICON == null) + if (context.HAS_ICON == null) + { + var iconTypes = ["ldpi", "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"]; + var iconSizes = [36, 48, 72, 96, 144, 192]; + var icons = project.icons; + + if (icons.length == 0) + { + icons = [new Icon(System.findTemplate(project.templatePaths, "default/icon.svg"))]; + } + for (i in 0...iconTypes.length) + { + // create multiple icons, only set "android:icon" once + if (IconHelper.createIcon(icons, iconSizes[i], iconSizes[i], sourceSet + "/res/drawable-" + iconTypes[i] + "/icon.png") + && !context.HAS_ICON) { context.HAS_ICON = true; context.ANDROID_APPLICATION.push({ key: "android:icon", value: "@drawable/icon" }); } } - } - IconHelper.createIcon(icons, 732, 412, sourceSet + "/res/drawable-xhdpi/ouya_icon.png"); + IconHelper.createIcon(icons, 732, 412, sourceSet + "/res/drawable-xhdpi/ouya_icon.png"); + } var packageDirectory = project.meta.packageName; packageDirectory = sourceSet + "/java/" + packageDirectory.split(".").join("/");